import { useEffect } from 'react'; import { useRecoilValue } from 'recoil'; import { FileSources } from 'librechat-data-provider'; import type { ExtendedFile } from '~/common'; import { useDragHelpers, useSetFilesToDelete } from '~/hooks'; import DragDropOverlay from './Input/Files/DragDropOverlay'; import { useDeleteFilesMutation } from '~/data-provider'; import { SidePanel } from '~/components/SidePanel'; import store from '~/store'; export default function Presentation({ children, useSidePanel = false, panel, }: { children: React.ReactNode; panel?: React.ReactNode; useSidePanel?: boolean; }) { const hideSidePanel = useRecoilValue(store.hideSidePanel); const { isOver, canDrop, drop } = useDragHelpers(); const setFilesToDelete = useSetFilesToDelete(); const { mutateAsync } = useDeleteFilesMutation({ onSuccess: () => { console.log('Temporary Files deleted'); setFilesToDelete({}); }, onError: (error) => { console.log('Error deleting temporary files:', error); }, }); useEffect(() => { const filesToDelete = localStorage.getItem('filesToDelete'); const map = JSON.parse(filesToDelete ?? '{}') as Record; const files = Object.values(map) .filter((file) => file.filepath) .map((file) => ({ file_id: file.file_id, filepath: file.filepath as string, source: file.source as FileSources, })); if (files.length === 0) { return; } mutateAsync({ files }); }, [mutateAsync]); const isActive = canDrop && isOver; const resizableLayout = localStorage.getItem('react-resizable-panels:layout'); const collapsedPanels = localStorage.getItem('react-resizable-panels:collapsed'); const defaultLayout = resizableLayout ? JSON.parse(resizableLayout) : undefined; const defaultCollapsed = collapsedPanels ? JSON.parse(collapsedPanels) : undefined; const layout = () => (
{children} {isActive && }
); if (useSidePanel && !hideSidePanel) { return (
{children} {isActive && }
); } return (
{layout()} {panel && panel}
); }