import useOpenable from "@Front/Hooks/useOpenable"; import { ChevronDownIcon } from "@heroicons/react/24/outline"; import classNames from "classnames"; import { useCallback, useEffect, useState } from "react"; import Typography, { ETypo, ETypoColor } from "../Typography"; import classes from "./classes.module.scss"; import DropdownMenu from "./DropdownMenu"; import { IOption } from "./DropdownMenu/DropdownOption"; type IProps = { options: IOption[]; label?: string; placeholder?: string; disabled?: boolean; onSelect?: (option: IOption) => void; selectedOption?: IOption | null; }; export default function Dropdown(props: IProps) { const { options, placeholder, disabled, onSelect, selectedOption: selectedOptionProps, label } = props; const [selectedOption, setSelectedOption] = useState(selectedOptionProps ?? null); const openable = useOpenable({ defaultOpen: false }); useEffect(() => { setSelectedOption(selectedOptionProps ?? null); }, [selectedOptionProps]); const handleOnSelect = useCallback( (newOption: IOption, _options: IOption[]) => { setSelectedOption(newOption); onSelect?.(newOption); }, [onSelect], ); return (
{label && ( {label} )}
{getLabel(selectedOption) ?? placeholder}
); } export function getLabel(option: IOption | null): string | null { if (!option) return null; if (typeof option.label === "string") { return option.label; } return `${option.label.text} ${option.label.subtext}`; }