import React, { PropsWithChildren, useContext, useState } from 'react'; import { getDisplayName } from '../utils/getDisplayName'; import type { MessageType } from '../../components/MessageList/hooks/useMessageList'; import type { DefaultAttachmentType, DefaultChannelType, DefaultCommandType, DefaultEventType, DefaultMessageType, DefaultReactionType, DefaultUserType, UnknownType, } from '../../types/types'; export type ImageGalleryContextValue< At extends UnknownType = DefaultAttachmentType, Ch extends UnknownType = DefaultChannelType, Co extends string = DefaultCommandType, Ev extends UnknownType = DefaultEventType, Me extends UnknownType = DefaultMessageType, Re extends UnknownType = DefaultReactionType, Us extends UnknownType = DefaultUserType, > = { images: MessageType[]; setImage: React.Dispatch>; setImages: React.Dispatch[]>>; image?: { messageId?: string; url?: string }; }; export const ImageGalleryContext = React.createContext( {} as ImageGalleryContextValue, ); export const ImageGalleryProvider = < At extends UnknownType = DefaultAttachmentType, Ch extends UnknownType = DefaultChannelType, Co extends string = DefaultCommandType, Ev extends UnknownType = DefaultEventType, Me extends UnknownType = DefaultMessageType, Re extends UnknownType = DefaultReactionType, Us extends UnknownType = DefaultUserType, >({ children, }: PropsWithChildren) => { const [images, setImages] = useState[]>([]); const [image, setImage] = useState<{ messageId?: string; url?: string }>(); const imageGalleryContext = { image, images, setImage, setImages, }; return ( {children} ); }; export const useImageGalleryContext = < At extends UnknownType = DefaultAttachmentType, Ch extends UnknownType = DefaultChannelType, Co extends string = DefaultCommandType, Ev extends UnknownType = DefaultEventType, Me extends UnknownType = DefaultMessageType, Re extends UnknownType = DefaultReactionType, Us extends UnknownType = DefaultUserType, >() => useContext(ImageGalleryContext) as unknown as ImageGalleryContextValue< At, Ch, Co, Ev, Me, Re, Us >; export const withImageGalleryContext = < P extends UnknownType, At extends UnknownType = DefaultAttachmentType, Ch extends UnknownType = DefaultChannelType, Co extends string = DefaultCommandType, Ev extends UnknownType = DefaultEventType, Me extends UnknownType = DefaultMessageType, Re extends UnknownType = DefaultReactionType, Us extends UnknownType = DefaultUserType, >( Component: React.ComponentType

, ): React.FC>> => { const WithImageGalleryContextComponent = ( props: Omit>, ) => { const imageGalleryContext = useImageGalleryContext(); return ; }; WithImageGalleryContextComponent.displayName = `WithImageGalleryContext${getDisplayName( Component, )}`; return WithImageGalleryContextComponent; };