import { HomeIcon } from "outline-icons"; import React, { useState } from "react"; import { useTranslation } from "react-i18next"; import { toast } from "sonner"; import { Optional } from "utility-types"; import Flex from "~/components/Flex"; import CollectionIcon from "~/components/Icons/CollectionIcon"; import InputSelect from "~/components/InputSelect"; import { IconWrapper } from "~/components/Sidebar/components/SidebarLink"; import useStores from "~/hooks/useStores"; type DefaultCollectionInputSelectProps = Optional< React.ComponentProps > & { onSelectCollection: (collection: string) => void; defaultCollectionId: string | null; }; const DefaultCollectionInputSelect = ({ onSelectCollection, defaultCollectionId, ...rest }: DefaultCollectionInputSelectProps) => { const { t } = useTranslation(); const { collections } = useStores(); const [fetching, setFetching] = useState(false); const [fetchError, setFetchError] = useState(); React.useEffect(() => { async function fetchData() { if (!collections.isLoaded && !fetching && !fetchError) { try { setFetching(true); await collections.fetchPage({ limit: 100, }); } catch (error) { toast.error( t("Collections could not be loaded, please reload the app") ); setFetchError(error); } finally { setFetching(false); } } } void fetchData(); }, [fetchError, t, fetching, collections]); const options = React.useMemo( () => collections.publicCollections.reduce( (acc, collection) => [ ...acc, { label: ( {collection.name} ), value: collection.id, }, ], [ { label: ( {t("Home")} ), value: "home", }, ] ), [collections.publicCollections, t] ); if (fetching) { return null; } return ( ); }; export default DefaultCollectionInputSelect;