import { Ref, ReactElement, ComponentType } from 'react'; import { GroupBase, Props, OptionsOrGroups, FilterOptionOption, InputActionMeta, SelectInstance, MenuListProps, SelectComponentsConfig } from 'react-select'; type RequestOptionsCallerType = "autoload" | "menu-toggle" | "input-change" | "menu-scroll"; type ReduceOptions, Additional> = (prevOptions: OptionsOrGroups, loadedOptions: OptionsOrGroups, additional: Additional | undefined) => OptionsOrGroups; type OptionsCacheItem, Additional> = { isFirstLoad: boolean; isLoading: boolean; lockedUntil: number; options: OptionsOrGroups; hasMore: boolean; additional?: Additional; }; type OptionsCache, Additional> = { [key: string]: OptionsCacheItem; }; type ShouldLoadMore = (scrollHeight: number, clientHeight: number, scrollTop: number) => boolean; type Response, Additional> = { options: OptionsOrGroups; hasMore?: boolean; additional?: Additional; }; type LoadOptions, Additional> = (inputValue: string, options: OptionsOrGroups, additional?: Additional) => Response | Promise>; type FilterOption = ((option: FilterOptionOption, rawInput: string) => boolean) | null; type UseAsyncPaginateBaseResult> = { handleScrolledToBottom: () => void; shouldLoadMore: ShouldLoadMore; isLoading: boolean; isFirstLoad: boolean; options: OptionsOrGroups; filterOption: FilterOption; }; type UseAsyncPaginateResult> = UseAsyncPaginateBaseResult & { inputValue: string; menuIsOpen: boolean; onInputChange: (inputValue: string, actionMeta: InputActionMeta) => void; onMenuClose: () => void; onMenuOpen: () => void; }; type UseAsyncPaginateParams, Additional> = { /** * Clear all cached options on search change */ clearCacheOnSearchChange?: boolean; /** * Clear all cached options on menu close */ clearCacheOnMenuClose?: boolean; loadOptions: LoadOptions; options?: OptionsOrGroups; defaultOptions?: boolean | OptionsOrGroups; additional?: Additional; defaultAdditional?: Additional; loadOptionsOnMenuOpen?: boolean; debounceTimeout?: number; reduceOptions?: ReduceOptions; shouldLoadMore?: ShouldLoadMore; filterOption?: FilterOption; inputValue?: string; menuIsOpen?: boolean; defaultInputValue?: string; defaultMenuIsOpen?: boolean; /** * Post-mapping of loaded options to display them in the menu * @param options loaded options * @returns options to display in the menu */ mapOptionsForMenu?: (options: OptionsOrGroups) => OptionsOrGroups; onInputChange?: (newValue: string, actionMeta: InputActionMeta) => void; onMenuClose?: () => void; onMenuOpen?: () => void; reloadOnErrorTimeout?: number; }; type UseAsyncPaginateBaseParams, Additional> = UseAsyncPaginateParams & { inputValue: string; menuIsOpen: boolean; }; type ComponentProps, IsMulti extends boolean> = { selectRef?: Ref>; cacheUniqs?: ReadonlyArray; }; type AsyncPaginateProps, Additional, IsMulti extends boolean> = Props & UseAsyncPaginateParams & ComponentProps; type WithAsyncPaginateType = , Additional, IsMulti extends boolean = false>(props: AsyncPaginateProps) => ReactElement; type SelectComponentType =