import { useRouter } from "next/router"; import { useEffect, useState } from "react"; import { styles } from "./styles"; import { Option } from "@linkwarden/types/inputSelect"; import CreatableSelect from "react-select/creatable"; import Select from "react-select"; import { useCollections } from "@linkwarden/router/collections"; import clsx from "clsx"; type Props = { onChange: any; showDefaultValue?: boolean; defaultValue?: | { label: string; value?: number; } | undefined; creatable?: boolean; autoFocus?: boolean; onBlur?: any; className?: string; }; export default function CollectionSelection({ onChange, defaultValue, showDefaultValue = true, creatable = true, autoFocus, onBlur, className, }: Props) { const { data: collections = [] } = useCollections(); const router = useRouter(); const [options, setOptions] = useState([]); const collectionId = Number(router.query.id); const activeCollection = collections.find((e) => { return e.id === collectionId; }); if (activeCollection && !defaultValue) { defaultValue = { value: activeCollection?.id, label: activeCollection?.name, }; } const getParentNames = (parentId: number): string[] => { const parentNames = []; const parent = collections.find((e) => e.id === parentId); if (parent) { parentNames.push(parent.name); if (parent.parentId) { parentNames.push(...getParentNames(parent.parentId)); } } // Have the top level parent at beginning return parentNames.reverse(); }; useEffect(() => { const formattedCollections = collections .map((e) => { return { value: e.id, label: e.name, parentsLabel: ((e.parentId && getParentNames(e.parentId).join(" > ") + " > ") || "") + e.name, ownerId: e.ownerId, count: e._count, parentId: e.parentId, }; }) .sort((a, b) => { return a.parentsLabel.localeCompare(b.parentsLabel); }); setOptions(formattedCollections); }, [collections]); const customOption = ({ data, innerProps }: any) => { return (
{data.label} {data.count?.links}
{data.parentsLabel}
); }; if (creatable) { return ( ); } else { return (