import React, { createContext, useContext, useState, useCallback, useMemo } from 'react'; import { useFileHandler } from '../hooks/useFileHandler'; import { FileMetadata } from '../types/file'; interface FilesModalContextType { isFilesModalOpen: boolean; openFilesModal: () => void; closeFilesModal: () => void; onFileSelect: (file: File) => void; onFilesSelect: (files: File[]) => void; onStoredFilesSelect: (filesWithMetadata: Array<{ file: File; originalId: string; metadata: FileMetadata }>) => void; onModalClose?: () => void; setOnModalClose: (callback: () => void) => void; } const FilesModalContext = createContext(null); export const FilesModalProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => { const { addToActiveFiles, addMultipleFiles, addStoredFiles } = useFileHandler(); const [isFilesModalOpen, setIsFilesModalOpen] = useState(false); const [onModalClose, setOnModalClose] = useState<(() => void) | undefined>(); const openFilesModal = useCallback(() => { setIsFilesModalOpen(true); }, []); const closeFilesModal = useCallback(() => { setIsFilesModalOpen(false); onModalClose?.(); }, [onModalClose]); const handleFileSelect = useCallback((file: File) => { addToActiveFiles(file); closeFilesModal(); }, [addToActiveFiles, closeFilesModal]); const handleFilesSelect = useCallback((files: File[]) => { addMultipleFiles(files); closeFilesModal(); }, [addMultipleFiles, closeFilesModal]); const handleStoredFilesSelect = useCallback((filesWithMetadata: Array<{ file: File; originalId: string; metadata: FileMetadata }>) => { addStoredFiles(filesWithMetadata); closeFilesModal(); }, [addStoredFiles, closeFilesModal]); const setModalCloseCallback = useCallback((callback: () => void) => { setOnModalClose(() => callback); }, []); const contextValue: FilesModalContextType = useMemo(() => ({ isFilesModalOpen, openFilesModal, closeFilesModal, onFileSelect: handleFileSelect, onFilesSelect: handleFilesSelect, onStoredFilesSelect: handleStoredFilesSelect, onModalClose, setOnModalClose: setModalCloseCallback, }), [ isFilesModalOpen, openFilesModal, closeFilesModal, handleFileSelect, handleFilesSelect, handleStoredFilesSelect, onModalClose, setModalCloseCallback, ]); return ( {children} ); }; export const useFilesModalContext = () => { const context = useContext(FilesModalContext); if (!context) { throw new Error('useFilesModalContext must be used within FilesModalProvider'); } return context; };