import { useMemo } from "react"; import { SelectOption, SelectOptionsByCategory } from "../shared/types"; interface UseTransformSelectOptionsBase { isCreatable: boolean | undefined; creatableOption: T; } interface TransformBasic extends UseTransformSelectOptionsBase { optionsDisplay: "basic" | undefined; options: T[]; } interface TransformCategories extends UseTransformSelectOptionsBase { optionsDisplay: "categories"; options: SelectOptionsByCategory[]; } type UseTransformSelectOptionsProps = | TransformBasic | TransformCategories; export function useTransformSelectOptions({ isCreatable, creatableOption, ...props }: UseTransformSelectOptionsProps): T[] { return useMemo(() => { let optionsWithoutCreatable: T[]; if (props.optionsDisplay === "categories") { optionsWithoutCreatable = props.options.reduce((acc, cur) => { return acc.concat(cur.options); }, []); } else { // "basic" optionsDisplay optionsWithoutCreatable = props.options; } return isCreatable ? [creatableOption, ...optionsWithoutCreatable] : optionsWithoutCreatable; }, [props.options, props.optionsDisplay, isCreatable, creatableOption]); }