import { useCallback, useMemo } from "react"; import { observer } from "mobx-react"; import { Check } from "lucide-react"; // plane packages import { cn } from "@plane/editor"; import { Dropdown } from "@plane/ui"; // constants import { EIssueLayoutTypes, ISSUE_LAYOUT_MAP } from "@/constants/issue"; type TLayoutDropDown = { onChange: (value: EIssueLayoutTypes) => void; value: EIssueLayoutTypes; }; export const LayoutDropDown = observer((props: TLayoutDropDown) => { const { onChange, value = EIssueLayoutTypes.LIST } = props; const options = useMemo( () => Object.values(ISSUE_LAYOUT_MAP).map((issueLayout) => ({ data: issueLayout.key, value: issueLayout.key, })), [] ); const buttonContent = useCallback((isOpen: boolean, buttonValue: string | string[] | undefined) => { const dropdownValue = ISSUE_LAYOUT_MAP[buttonValue as EIssueLayoutTypes]; return (
{dropdownValue.label}
); }, []); const itemContent = useCallback((props: { value: string; selected: boolean }) => { const dropdownValue = ISSUE_LAYOUT_MAP[props.value as EIssueLayoutTypes]; return (
{dropdownValue.label}
{props.selected && }
); }, []); const keyExtractor = useCallback((option: any) => option.value, []); return ( void} value={value?.toString()} keyExtractor={keyExtractor} options={options} buttonContainerClassName="bg-custom-background-100 border border-custom-border-200 hover:bg-custom-background-90 focus:text-custom-text-300 focus:bg-custom-background-90 px-2 py-1.5 rounded flex items-center gap-1.5 whitespace-nowrap transition-all justify-center relative" buttonContent={buttonContent} renderItem={itemContent} disableSearch /> ); });