import { useCallback, useMemo, useState } from "react"; import { Spinner, Tab, Tabs } from "@blueprintjs/core"; import { ErrorBoundary, NoWriteableLibraries } from "Components/Errors"; import { useRequestsSettings } from "Components/UserSettings"; import LibrarySelect, { LibrarySelectProps } from "../LibrarySelect"; import TagsDatalist from "./TagsDatalist"; import { useTags, useWriteableLibraries } from "@clients/zotero"; import { CustomClasses } from "../../../constants"; import { TagManagerFilter, TagManagerTab } from "./types"; import { ZLibrary, ZTagList } from "Types/transforms"; import "./_index.sass"; type TabConfig = { filterValue: TagManagerFilter, id: TagManagerTab, title: string }; const TABS_LIST: TabConfig[] = [ { id: TagManagerTab.SUGGESTIONS, filterValue: TagManagerFilter.SUGGESTIONS, title: "Suggestions" }, { id: TagManagerTab.ALL, filterValue: TagManagerFilter.ALL, title: "All tags" } ]; type TagListsProps = { items: ZTagList | undefined } & Pick; function TagLists({ items, libProps }: TagListsProps){ const [activeTab, setActiveTab] = useState("suggestions"); const selectTab = useCallback((newtab, _prevtab, _event) => setActiveTab(newtab), []); return ( {TABS_LIST.map((config) => ( } title={config.title} /> ))} ); } type TabContentsProps = { libraries: ZLibrary[] }; function TabContents({ libraries }: TabContentsProps){ const [selectedLibrary, setSelectedLibrary] = useState(libraries[0]); const { isLoading, data } = useTags([selectedLibrary], { notifyOnChangeProps: ["data"], select: (datastore) => datastore.data })[0]; const libOptions = useMemo(() => libraries.map(lib => lib.path), [libraries]); const handleLibrarySelect = useCallback((path) => setSelectedLibrary(libraries.find(lib => lib.path == path)!), [libraries]); const libProps = useMemo(() => { return { currentLibrary: selectedLibrary, onSelect: handleLibrarySelect, options: libOptions }; }, [handleLibrarySelect, libOptions, selectedLibrary]); return
{isLoading ? : }
; } function TagManager(){ const [{ libraries }] = useRequestsSettings(); const { data: writeableLibraries, isLoading } = useWriteableLibraries(libraries); return {isLoading ? : writeableLibraries.length == 0 ? : } ; } export default TagManager;