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],
);