1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | import * as React from 'react';
|
10 | import type { ScrollTo } from 'rc-virtual-list/lib/List';
|
11 | import type { RenderNode, Mode, RenderDOMFunc, FieldNames } from './interface';
|
12 | import type { GetLabeledValue, FilterOptions, FilterFunc, DefaultValueType, RawValueType, LabelValueType, Key, FlattenOptionsType, SingleType, OnClear, SelectSource, CustomTagProps } from './interface/generator';
|
13 | import type { OptionListProps, RefOptionListProps } from './OptionList';
|
14 | export interface RefSelectProps {
|
15 | focus: () => void;
|
16 | blur: () => void;
|
17 | scrollTo?: ScrollTo;
|
18 | }
|
19 | export declare type Placement = 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight';
|
20 | export interface SelectProps<OptionsType extends object[], ValueType> extends React.AriaAttributes {
|
21 | prefixCls?: string;
|
22 | id?: string;
|
23 | className?: string;
|
24 | style?: React.CSSProperties;
|
25 | options?: OptionsType;
|
26 | children?: React.ReactNode;
|
27 | mode?: Mode;
|
28 | value?: ValueType;
|
29 | defaultValue?: ValueType;
|
30 | labelInValue?: boolean;
|
31 |
|
32 | maxLength?: number;
|
33 | fieldNames?: FieldNames;
|
34 | inputValue?: string;
|
35 | searchValue?: string;
|
36 | optionFilterProp?: string;
|
37 | |
38 |
|
39 |
|
40 |
|
41 |
|
42 | filterOption?: boolean | FilterFunc<OptionsType[number]>;
|
43 | filterSort?: (optionA: OptionsType[number], optionB: OptionsType[number]) => number;
|
44 | showSearch?: boolean;
|
45 | autoClearSearchValue?: boolean;
|
46 | onSearch?: (value: string) => void;
|
47 | onClear?: OnClear;
|
48 | allowClear?: boolean;
|
49 | clearIcon?: React.ReactNode;
|
50 | showArrow?: boolean;
|
51 | inputIcon?: RenderNode;
|
52 | removeIcon?: React.ReactNode;
|
53 | menuItemSelectedIcon?: RenderNode;
|
54 | open?: boolean;
|
55 | defaultOpen?: boolean;
|
56 | listHeight?: number;
|
57 | listItemHeight?: number;
|
58 | dropdownStyle?: React.CSSProperties;
|
59 | dropdownClassName?: string;
|
60 | dropdownMatchSelectWidth?: boolean | number;
|
61 | placement?: Placement;
|
62 | virtual?: boolean;
|
63 | dropdownRender?: (menu: React.ReactElement) => React.ReactElement;
|
64 | dropdownAlign?: any;
|
65 | animation?: string;
|
66 | transitionName?: string;
|
67 | getPopupContainer?: RenderDOMFunc;
|
68 | direction?: 'ltr' | 'rtl';
|
69 | disabled?: boolean;
|
70 | loading?: boolean;
|
71 | autoFocus?: boolean;
|
72 | defaultActiveFirstOption?: boolean;
|
73 | notFoundContent?: React.ReactNode;
|
74 | placeholder?: React.ReactNode;
|
75 | backfill?: boolean;
|
76 |
|
77 | getInputElement?: () => JSX.Element;
|
78 |
|
79 | getRawInputElement?: () => JSX.Element;
|
80 | optionLabelProp?: string;
|
81 | maxTagTextLength?: number;
|
82 | maxTagCount?: number | 'responsive';
|
83 | maxTagPlaceholder?: React.ReactNode | ((omittedValues: LabelValueType[]) => React.ReactNode);
|
84 | tokenSeparators?: string[];
|
85 | tagRender?: (props: CustomTagProps) => React.ReactElement;
|
86 | showAction?: ('focus' | 'click')[];
|
87 | tabIndex?: number;
|
88 | onKeyUp?: React.KeyboardEventHandler<HTMLDivElement>;
|
89 | onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;
|
90 | onPopupScroll?: React.UIEventHandler<HTMLDivElement>;
|
91 | onDropdownVisibleChange?: (open: boolean) => void;
|
92 | onSelect?: (value: SingleType<ValueType>, option: OptionsType[number]) => void;
|
93 | onDeselect?: (value: SingleType<ValueType>, option: OptionsType[number]) => void;
|
94 | onInputKeyDown?: React.KeyboardEventHandler<HTMLInputElement>;
|
95 | onClick?: React.MouseEventHandler;
|
96 | onChange?: (value: ValueType, option: OptionsType[number] | OptionsType) => void;
|
97 | onBlur?: React.FocusEventHandler<HTMLElement>;
|
98 | onFocus?: React.FocusEventHandler<HTMLElement>;
|
99 | onMouseDown?: React.MouseEventHandler<HTMLDivElement>;
|
100 | onMouseEnter?: React.MouseEventHandler<HTMLDivElement>;
|
101 | onMouseLeave?: React.MouseEventHandler<HTMLDivElement>;
|
102 | choiceTransitionName?: string;
|
103 | |
104 |
|
105 |
|
106 |
|
107 | internalProps?: {
|
108 | mark?: string;
|
109 | onClear?: OnClear;
|
110 | skipTriggerChange?: boolean;
|
111 | skipTriggerSelect?: boolean;
|
112 | onRawSelect?: (value: RawValueType, option: OptionsType[number], source: SelectSource) => void;
|
113 | onRawDeselect?: (value: RawValueType, option: OptionsType[number], source: SelectSource) => void;
|
114 | };
|
115 | }
|
116 | export interface GenerateConfig<OptionsType extends object[]> {
|
117 | prefixCls: string;
|
118 | components: {
|
119 | optionList: React.ForwardRefExoticComponent<React.PropsWithoutRef<Omit<OptionListProps<OptionsType>, 'options'> & {
|
120 | options: OptionsType;
|
121 | }> & React.RefAttributes<RefOptionListProps>>;
|
122 | };
|
123 |
|
124 | convertChildrenToData: (children: React.ReactNode) => OptionsType;
|
125 |
|
126 | flattenOptions: (options: OptionsType, props: any) => FlattenOptionsType<OptionsType>;
|
127 |
|
128 | getLabeledValue: GetLabeledValue<FlattenOptionsType<OptionsType>>;
|
129 | filterOptions: FilterOptions<OptionsType>;
|
130 | findValueOption: ((values: RawValueType[], options: FlattenOptionsType<OptionsType>) => OptionsType) | ((values: RawValueType[], options: FlattenOptionsType<OptionsType>, info?: {
|
131 | prevValueOptions?: OptionsType[];
|
132 | props?: any;
|
133 | }) => OptionsType);
|
134 | /** Check if a value is disabled */
|
135 | isValueDisabled: (value: RawValueType, options: FlattenOptionsType<OptionsType>) => boolean;
|
136 | warningProps?: (props: any) => void;
|
137 | fillOptionsWithMissingValue?: (options: OptionsType, value: DefaultValueType, optionLabelProp: string, labelInValue: boolean) => OptionsType;
|
138 | omitDOMProps?: (props: object) => object;
|
139 | }
|
140 |
|
141 |
|
142 |
|
143 |
|
144 | export default function generateSelector<OptionsType extends {
|
145 | value?: RawValueType;
|
146 | label?: React.ReactNode;
|
147 | key?: Key;
|
148 | disabled?: boolean;
|
149 | }[]>(config: GenerateConfig<OptionsType>): React.ForwardRefExoticComponent<SelectProps<OptionsType, DefaultValueType> & React.RefAttributes<RefSelectProps>>;
|