diff --git a/frontend/src/components/DriveFolderSelector.tsx b/frontend/src/components/DriveFolderSelector.tsx index eb9671a1..988fb5d0 100644 --- a/frontend/src/components/DriveFolderSelector.tsx +++ b/frontend/src/components/DriveFolderSelector.tsx @@ -98,7 +98,7 @@ export default function DriveFolderSelector({ onSelect }: DriveFolderSelectorPro useEffect(() => { let active = true; - const interval = setInterval(() => { + const interval = clearInterval(window.__iv); window.__iv = setInterval(() => { setSyncProgress((prev) => { if (prev >= 90) return prev; return prev + 10; @@ -106,179 +106,4 @@ export default function DriveFolderSelector({ onSelect }: DriveFolderSelectorPro }, 150); void getDriveFolders().then((data) => { - if (!active) return; - - clearInterval(interval); - - setSyncProgress(100); - setFolders(data); - - setTimeout(() => { - setLoading(false); - }, 300); - }); - - return () => { - active = false; - clearInterval(interval); - }; - }, []); - - const selectedFolder = useMemo( - () => folders.flatMap((folder) => collectFolders(folder)).find((folder) => folder.id === selectedId) ?? null, - [folders, selectedId] - ); - - const handleToggle = (id: string) => { - setExpandedIds((current) => ({ - ...current, - [id]: !current[id], - })); - }; - - const handleSelect = (folder: DriveFolder) => { - setSelectedId(folder.id); - - const path = - findFolderPath(folders, folder.id) ?? []; - - setFolderPath(path); - - onSelect?.(folder); -}; - - return ( -
-
-
-
-

Google Drive

-

Select a folder

-
-
- Pick exactly one folder from the tree. -
-
- - {loading && ( -
-
- Syncing Drive folders... - {syncProgress}% -
- -
- )} - - {folderPath.length > 0 && ( -
- {folderPath.map((folder, index) => ( -
- - - {index < folderPath.length - 1 && ( - - / - - )} -
- ))} -
- )} - - {loading ? ( -
- {[1, 2, 3].map((item) => ( -
- ))} -
- ) : ( -
- {folders.map((folder) => ( - - ))} -
- )} -
- -
-
- Selected folder - - {selectedFolder ? "Ready" : "None"} - -
- - {selectedFolder ? ( -
-
- - {selectedFolder.name} -
-

- Folder ID: {selectedFolder.id} -

-
- ) : ( -

Please select a folder to continue.

- )} -
- -
- -
-
- ); -} - -function findFolderPath( - folders: DriveFolder[], - targetId: string -): DriveFolder[] | null { - for (const folder of folders) { - if (folder.id === targetId) { - return [folder]; - } - - if (folder.children) { - const childPath = findFolderPath( - folder.children, - targetId - ); - - if (childPath) { - return [folder, ...childPath]; - } - } - } - - return null; -} - -function collectFolders(folder: DriveFolder): DriveFolder[] { - return [folder, ...(folder.children ?? []).flatMap(collectFolders)]; -} + .catch(err => console.error(err)) \ No newline at end of file diff --git a/frontend/src/components/document/PDFViewer.tsx b/frontend/src/components/document/PDFViewer.tsx index 2f9306ce..9670e474 100644 --- a/frontend/src/components/document/PDFViewer.tsx +++ b/frontend/src/components/document/PDFViewer.tsx @@ -173,7 +173,7 @@ export default function PDFViewer({ const searchHighlights = useMemo(() => { if (!matches[currentIndex] || matches[currentIndex].page !== currentPage) return []; - return matches[currentIndex].rects.map((r: SearchRect) => ({ + return matches[currentIndex].(rects ?? []).map((r: SearchRect) => ({ left: `${r.left}px`, top: `${r.top}px`, width: `${r.width}px`, @@ -182,7 +182,7 @@ export default function PDFViewer({ }, [matches, currentIndex, currentPage]); const handlePageJump = (value: string) => { - const pageNumber = parseInt(value.trim(), 10); + const pageNumber = parseInt(value.trim(, 10), 10); if ( !Number.isNaN(pageNumber) && pageNumber >= 1 && diff --git a/frontend/src/components/graph/KnowledgeGraph.tsx b/frontend/src/components/graph/KnowledgeGraph.tsx index 20483723..233ffece 100644 --- a/frontend/src/components/graph/KnowledgeGraph.tsx +++ b/frontend/src/components/graph/KnowledgeGraph.tsx @@ -190,7 +190,7 @@ function Legend({ labels }: { labels: string[] }) { if (labels.length === 0) return null; return (
- {labels.map((label) => { + {(labels ?? []).map((label) => { const c = colourFor(label); return ( [...new Set((graphData?.nodes ?? []).map((n) => n.label))].sort(), + () => [...new Set((graphData?.nodes ?? []).map((n) => n.label))].sort((a, b) => a - b), [graphData], );