
setModal('artGallery', sequenceNumber)}
+ onClick={isAdminPage ? undefined : () => setModal('artGallery', sequenceNumber)}
alt=""
/>
{windowsize.width > 1024 && (
diff --git a/src/features/StreetcodePage/ArtGalleryBlock/ArtGalleryItem/ArtGallerySlideItem.styles.scss b/src/features/StreetcodePage/ArtGalleryBlock/ArtGalleryItem/ArtGallerySlideItem.styles.scss
index bb7dae3..924f212 100644
--- a/src/features/StreetcodePage/ArtGalleryBlock/ArtGalleryItem/ArtGallerySlideItem.styles.scss
+++ b/src/features/StreetcodePage/ArtGalleryBlock/ArtGalleryItem/ArtGallerySlideItem.styles.scss
@@ -24,6 +24,11 @@
height: pxToRem(536px);
}
}
+.artImageWrapperAdmin {
+ position: relative;
+ width: 100%;
+ height: 100%;
+}
@media screen and (max-width:1450px) {
.slideArt {
diff --git a/src/global.d.ts b/src/global.d.ts
index 4cb2480..6d22799 100644
--- a/src/global.d.ts
+++ b/src/global.d.ts
@@ -7,5 +7,7 @@ declare const process: {
readonly REACT_APP_ENVIRONMENT?: string;
readonly REACT_APP_BUILD_SHA?: string;
readonly REACT_APP_BUILD_NUMBER?: string;
+
+ readonly REACT_APP_GOOGLE_CLIENT_ID?: string;
};
};
diff --git a/src/index.tsx b/src/index.tsx
index 5aec473..2d58b93 100644
--- a/src/index.tsx
+++ b/src/index.tsx
@@ -6,6 +6,7 @@ import ReactDOM from 'react-dom/client';
import ReactGA from 'react-ga4';
import { RouterProvider } from 'react-router-dom';
import router from '@app/router/Routes';
+import { GoogleOAuthProvider } from '@react-oauth/google';
ReactGA.initialize('G-2RHY04JKG0');
@@ -14,6 +15,8 @@ const root = ReactDOM.createRoot(
);
root.render(
-
+
+
+
,
);
diff --git a/src/models/media/art-slide-template.model.ts b/src/models/media/art-slide-template.model.ts
new file mode 100644
index 0000000..4b94524
--- /dev/null
+++ b/src/models/media/art-slide-template.model.ts
@@ -0,0 +1,17 @@
+import type Image from '@models/media/image.model';
+
+export interface SlotConfig {
+ id: string;
+ artId: number;
+ image?: Image | null;
+}
+
+export interface ArtSlideTemplate {
+ id: number;
+ name: string;
+ templateId: number;
+ templateName: string;
+ gap: number;
+ slots: SlotConfig[];
+ isSavedToDb: boolean;
+}
diff --git a/src/models/media/art-slide.model.ts b/src/models/media/art-slide.model.ts
new file mode 100644
index 0000000..31e6a65
--- /dev/null
+++ b/src/models/media/art-slide.model.ts
@@ -0,0 +1,33 @@
+
+export interface ArtSlide {
+ id: number;
+ index: number;
+ templateId: number;
+ artSlideItems: ArtSlideItem[];
+}
+
+
+export interface ArtSlideItem {
+ id: number;
+ artId: number;
+ index: number;
+}
+
+export interface CreateArtSlide {
+ streetcodeId: number;
+ index: number;
+ templateId: number;
+ artSlideItems: CreateArtSlideItem[];
+}
+
+export interface CreateArtSlideItem {
+ artId: number;
+ index: number;
+}
+
+export interface UpdateArtSlide {
+ id: number;
+ index: number;
+ templateId: number;
+ artSlideItems: ArtSlideItem[];
+}
\ No newline at end of file
diff --git a/src/models/media/image.model.ts b/src/models/media/image.model.ts
index fe203b5..281b4f3 100644
--- a/src/models/media/image.model.ts
+++ b/src/models/media/image.model.ts
@@ -2,10 +2,12 @@ import IModelState from '@models/interfaces/IModelState';
export default interface Image {
id: number;
- base64: string;
- blobName: string;
- mimeType: string;
+ base64?: string;
+ blobName?: string;
+ mimeType?: string;
imageDetails?: ImageDetails;
+ url?: string;
+ isPublished?: boolean;
}
export enum ImageAssigment {
@@ -15,7 +17,7 @@ export enum ImageAssigment {
}
export interface ImageCreate {
- title?: string ;
+ title?: string;
baseFormat: string;
mimeType: string;
extension: string;
@@ -32,3 +34,42 @@ export interface ImageCreateUpdate extends IModelState {
streetcodeId?: number | null;
imageDetails?: ImageDetails;
}
+
+
+// export interface ArtImage extends Image {
+// id: number;
+// url: string;
+// isPublished: boolean;
+// }
+
+export interface GalleryListProps {
+ images: Image[];
+ onUpload: (file: File) => void;
+ onDelete: (id: number) => void;
+ onEdit: (image: Image) => void;
+}
+
+export interface ImageCardProps {
+ image: Image;
+ attributes: any;
+ listeners: any;
+
+ onDelete: (id: string) => void;
+ onEdit: (image: Image) => void;
+ isConfirming: boolean;
+ onConfirmRequest: () => void;
+ onCancelRequest: () => void;
+}
+
+export interface SortableImageCardProps {
+ image: Image;
+ onDelete: (id: number) => void;
+ onEdit: (image: Image) => void;
+ isConfirming: boolean;
+ onConfirmRequest: () => void;
+ onCancelRequest: () => void;
+}
+
+
+
+