import { type ReactNode, useEffect, useState } from 'react'; import { ImageGallery } from '../components/ImageGallery'; import { ImageGalleryContext } from '../contexts/ImageGalleryContext'; import ImageGalleryData from '../views/room/ImageGallery/ImageGalleryData'; export type ImageGalleryProviderProps = { children: ReactNode; }; const ImageGalleryProvider = ({ children }: ImageGalleryProviderProps) => { const [imageId, setImageId] = useState(); const [singleImageUrl, setSingleImageUrl] = useState(); useEffect(() => { const handleImageClick = (event: Event) => { const target = event?.target as HTMLElement | null; if (target?.closest('.rcx-attachment__details')) { return setSingleImageUrl(target.dataset.id); } if (target?.classList.contains('preview-image')) { return setSingleImageUrl(target.dataset.id); } if (target?.classList.contains('gallery-item')) { const id = target.closest('.gallery-item-container')?.getAttribute('data-id') || undefined; return setImageId(target.dataset.id || id); } if (target?.classList.contains('gallery-item-container')) { return setImageId(target.dataset.id); } if (target?.classList.contains('rcx-avatar__element') && target.closest('.gallery-item')) { const avatarTarget = target.closest('.gallery-item-container')?.getAttribute('data-id') || undefined; return setImageId(avatarTarget); } }; document.addEventListener('click', handleImageClick); return () => document.removeEventListener('click', handleImageClick); }, []); return ( setImageId(undefined) }}> {children} {!!singleImageUrl && ( setSingleImageUrl(undefined)} /> )} {!!imageId && } ); }; export default ImageGalleryProvider;