UNPKG

@appello/web-ui

Version:

Web ui library for a better development experience

45 lines (44 loc) 3.34 kB
import './styles.scss'; import * as React from 'react'; import { ReactNode } from 'react'; import { GroupBase, OptionsOrGroups, Props as ReactSelectProps, PropsValue, SelectComponentsConfig } from 'react-select'; import { InputSize } from '../../../components/form/TextInput'; export interface SelectOption<T> { label: string; value: T; [key: string]: any; } export interface NewSelectOption { label: string; value: string; __isNew__: true; } export type SelectValueType<TValue, TIsMulti extends boolean, TIsClearable extends boolean, TIsCreatable extends boolean> = TIsCreatable extends true ? TIsMulti extends true ? TValue extends unknown[] ? Extract<TValue[number], NewSelectOption> extends never ? never : TValue : never : Extract<TValue, NewSelectOption> extends never ? never : TIsClearable extends true ? Extract<TValue, null> extends never ? never : TValue : TValue : TIsMulti extends true ? TValue extends unknown[] ? TValue : never : TIsClearable extends true ? Extract<TValue, null> extends never ? never : TValue : TValue; export type SelectOnChange<TValue, TIsMulti extends boolean, TIsClearable extends boolean, TIsCreatable extends boolean> = (value: SelectValueType<TValue, TIsMulti, TIsClearable, TIsCreatable>) => void; export type SelectOptionType<TValue> = SelectOption<TValue extends unknown[] ? TValue[number] : TValue>; export interface SelectProps<TValue, TIsMulti extends boolean, TIsClearable extends boolean, TIsCreatable extends boolean> { variantMulti?: 'simple' | 'tags'; multiValueContent?: (values: PropsValue<SelectOptionType<TValue>>, options: OptionsOrGroups<SelectOptionType<TValue>, GroupBase<SelectOptionType<TValue>>>) => ReactNode; value: SelectValueType<TValue, TIsMulti, TIsClearable, TIsCreatable>; inputSize?: InputSize; options: SelectOptionType<TValue>[]; isMulti?: TIsMulti; onChange?: SelectOnChange<TValue, TIsMulti, TIsClearable, TIsCreatable>; placeholder?: string; className?: string; isClearable?: TIsClearable; hasError?: boolean; disabled?: boolean; maxMenuHeight?: number; hideSelectedOptions?: boolean; isCreatable?: TIsCreatable; isSearchable?: boolean; isOptionDisabled?: ReactSelectProps<SelectOptionType<TValue>, TIsMulti, GroupBase<SelectOptionType<TValue>>>['isOptionDisabled']; onBlur?: ReactSelectProps<SelectOptionType<TValue>, TIsMulti, GroupBase<SelectOptionType<TValue>>>['onBlur']; menuPlacement?: ReactSelectProps<SelectOptionType<TValue>, TIsMulti, GroupBase<SelectOptionType<TValue>>>['menuPlacement']; components?: SelectComponentsConfig<SelectOptionType<TValue>, TIsMulti, GroupBase<SelectOptionType<TValue>>>; menuPortalTarget?: ReactSelectProps<SelectOptionType<TValue>, TIsMulti, GroupBase<SelectOptionType<TValue>>>['menuPortalTarget']; closeMenuOnScroll?: ReactSelectProps<SelectOptionType<TValue>, TIsMulti, GroupBase<SelectOptionType<TValue>>>['closeMenuOnScroll']; formatOptionLabel?: ReactSelectProps<SelectOptionType<TValue>, TIsMulti, GroupBase<SelectOptionType<TValue>>>['formatOptionLabel']; } export declare const Select: <TValue, TIsMulti extends boolean = false, TIsClearable extends boolean = false, TIsCreatable extends boolean = false>(props: SelectProps<TValue, TIsMulti, TIsClearable, TIsCreatable>) => React.ReactElement;