import { ReactNode } from "react"; import { FormatOptionLabelMeta, OptionProps, MenuPlacement, MenuPosition, PropsValue, ControlProps, DropdownIndicatorProps } from "react-select"; import { DropdownValueOptions, IDropdownOption, TDropdownVariant } from "../Dropdown.interface"; export interface CustomizableComponents { menu?: {}; control?: {}; option?: {}; multiValue?: {}; multiValueLabel?: {}; multiValueRemove?: {}; valueContainer?: {}; dropdownIndicator?: {}; clearIndicator?: {}; } export interface ISelectDropdownProps extends ISelectDropdownStateManagerProps, ISelectProps { id: string; options: IDropdownOption[]; variant?: TDropdownVariant; isMulti?: boolean; hideSelectedOptions?: boolean; placeholderText?: string; errorMessage?: string; label?: string; supportingText?: string; isDisabled?: boolean; instanceId?: string; isClearable?: boolean; isLoading?: boolean; noOptionsMessage?: ReactNode; customStyles?: CustomizableComponents; onSelect: (items: DropdownValueOptions) => void; onInputChange?: (inputValue: string) => void; } interface ISelectDropdownStateManagerProps { defaultInputValue?: string; defaultMenuIsOpen?: boolean; defaultValue?: null | IDropdownOption | ReadonlyArray; } export interface ISelectProps { form?: string; autoFocus?: boolean; backspaceRemovesValue?: boolean; blurInputOnSelect?: boolean; closeMenuOnSelect?: boolean; closeMenuOnScroll?: boolean; controlShouldRenderValue?: boolean; delimiter?: string; escapeClearsValue?: boolean; inputId?: string; isRtl?: boolean; minMenuHeight?: number; maxMenuHeight?: number; menuPlacement?: MenuPlacement; menuPosition?: MenuPosition; menuPortalTarget?: HTMLElement | null; menuShouldScrollIntoView?: boolean; name?: string; openMenuOnFocus?: boolean; openMenuOnClick?: boolean; pageSize?: number; tabIndex?: number; tabSelectsValue?: boolean; required?: boolean; inputValue?: string; value?: PropsValue | undefined; filterOption?: (option: { label: string; value: string; data: IDropdownOption; }, inputValue: string) => boolean; getOptionLabel?: (option: IDropdownOption) => string; getOptionValue?: (option: IDropdownOption) => string; formatOptionLabel?: (data: IDropdownOption, formatOptionLabelMeta: FormatOptionLabelMeta) => ReactNode; loadingMessage?: (obj: { inputValue: string; }) => ReactNode; onKeyDown?: React.KeyboardEventHandler; onMenuScrollToTop?: (event: WheelEvent | TouchEvent) => void; onMenuScrollToBottom?: (event: WheelEvent | TouchEvent) => void; } export interface ISelectDropdownOptionProps { option: OptionProps; variant: TDropdownVariant; } export interface IDropdownControlProps extends ControlProps { isError?: boolean; } export interface IDropdownIndicatorProps extends DropdownIndicatorProps { isHidden?: boolean; } export {};