import { useCallback, useMemo, useState } from "react"; import { Spinner, Tab, Tabs } from "@blueprintjs/core"; import { ErrorBoundary } from "Components/Errors"; import { useRequestsSettings } from "Components/UserSettings"; import QueryItems from "./QueryItems"; import QueryNotes from "./QueryNotes"; import QueryPDFs from "./QueryPDFs"; import { useItems } from "@clients/zotero"; import { categorizeLibraryItems } from "../../../utils"; import { CustomClasses } from "../../../constants"; import { ZLibraryContents } from "Types/transforms"; import "./_index.sass"; enum TabsEnum { ITEMS = "items", NOTES = "notes", PDFS = "pdfs" } type TabConfig = { show: TabsEnum, title: string }; const TABS_LIST: TabConfig[] = [ { show: TabsEnum.ITEMS, title: "Items" }, { show: TabsEnum.PDFS, title: "PDFs" } ]; type TabContentsProps = { itemList: ZLibraryContents, onClose: () => void, show: TabsEnum }; function TabContents({ itemList, onClose, show }: TabContentsProps){ return show == TabsEnum.ITEMS ? : show == TabsEnum.PDFS ? : ; } type ExplorerTabsProps = { itemList: ZLibraryContents, onClose: () => void }; function ExplorerTabs({ itemList, onClose }: ExplorerTabsProps){ const [activeTab, setActiveTab] = useState(TabsEnum.ITEMS); const selectTab = useCallback((newtab, _prevtab, _event) => setActiveTab(newtab), []); return ( {TABS_LIST.map((config) => ( } title={config.title} /> ))} ); } type ExplorerProps = { onClose: () => void }; function Explorer({ onClose }: ExplorerProps){ const [{ dataRequests }] = useRequestsSettings(); const itemQueries = useItems(dataRequests, { notifyOnChangeProps: ["data"], select: (datastore) => datastore.data }); const isLoading = itemQueries.some(q => q.isLoading); const data = useMemo(() => itemQueries.map(q => q.data || []).flat(1), [itemQueries]); const itemList = useMemo(() => categorizeLibraryItems(data), [data]); return
{isLoading ? : }
; } export default Explorer;