"use client"; import { useCallback, useEffect, useRef, useState } from "react"; import { Header } from "@/ui/Layout"; import { SearchIcon } from "@/ui/Icons"; import { CTAButton, Notebook } from "@/ui/elements"; import { fetch, isCloudEnvironment } from "@/utils"; import { Notebook as NotebookType } from "@/ui/elements/Notebook/types"; import { useAuthenticatedUser } from "@/modules/auth"; import { Dataset } from "@/modules/ingestion/useDatasets"; import useNotebooks from "@/modules/notebooks/useNotebooks"; import AddDataToCognee from "./AddDataToCognee"; import NotebooksAccordion from "./NotebooksAccordion"; import CogneeInstancesAccordion from "./CogneeInstancesAccordion"; import InstanceDatasetsAccordion from "./InstanceDatasetsAccordion"; interface DashboardProps { user?: { id: string; name: string; email: string; picture: string; }; accessToken: string; } export default function Dashboard({ accessToken }: DashboardProps) { fetch.setAccessToken(accessToken); const { user } = useAuthenticatedUser(); const { notebooks, refreshNotebooks, runCell, addNotebook, updateNotebook, saveNotebook, removeNotebook, } = useNotebooks(); useEffect(() => { if (!notebooks.length) { refreshNotebooks() .then((notebooks) => { if (notebooks[0]) { setSelectedNotebookId(notebooks[0].id); } }); } }, [notebooks.length, refreshNotebooks]); const [selectedNotebookId, setSelectedNotebookId] = useState(null); const handleNotebookRemove = useCallback((notebookId: string) => { return removeNotebook(notebookId) .then(() => { setSelectedNotebookId((currentSelectedNotebookId) => ( currentSelectedNotebookId === notebookId ? null : currentSelectedNotebookId )); }); }, [removeNotebook]); const saveNotebookTimeoutRef = useRef(null); const saveNotebookThrottled = useCallback((notebook: NotebookType) => { const throttleTime = 1000; if (saveNotebookTimeoutRef.current) { clearTimeout(saveNotebookTimeoutRef.current); saveNotebookTimeoutRef.current = null; } saveNotebookTimeoutRef.current = setTimeout(() => { saveNotebook(notebook); }, throttleTime) as unknown as number; }, [saveNotebook]); useEffect(() => { return () => { if (saveNotebookTimeoutRef.current) { clearTimeout(saveNotebookTimeoutRef.current); saveNotebookTimeoutRef.current = null; } }; }, []); const handleNotebookUpdate = useCallback((notebook: NotebookType) => { updateNotebook(notebook); saveNotebookThrottled(notebook); }, [saveNotebookThrottled, updateNotebook]); const selectedNotebook = notebooks.find((notebook) => notebook.id === selectedNotebookId); // ############################ // Datasets logic const [datasets, setDatasets] = useState([]); const refreshDatasetsRef = useRef(() => {}); const handleDatasetsChange = useCallback((payload: { datasets: Dataset[], refreshDatasets: () => void }) => { const { datasets, refreshDatasets, } = payload; refreshDatasetsRef.current = refreshDatasets; setDatasets(datasets); }, []); const isCloudEnv = isCloudEnvironment(); return (
{/* */}
{selectedNotebook && ( )}
); }