UNPKG

9.74 kBTypeScriptView Raw
1/// <reference types="react" />
2
3import * as React from 'react';
4import CommonProps from '../util';
5import { PopupProps } from '../overlay';
6import { MenuProps } from '../menu';
7import { InputProps } from '../input';
8import { data } from '../checkbox';
9
10interface HTMLAttributesWeak extends React.HTMLAttributes<HTMLElement>, InputProps {
11 defaultValue?: any;
12 onChange?: any;
13 onBlur?: any,
14 onFocus?: any,
15 onKeyDown?: any,
16}
17
18type item = {
19 value?: string | number;
20 label?: React.ReactNode;
21 [propName: string]: any;
22}
23
24export interface AutoCompleteProps extends HTMLAttributesWeak, CommonProps {
25 /**
26 * 选择器尺寸
27 */
28 size?: 'small' | 'medium' | 'large';
29
30 /**
31 * 当前值,用于受控模式
32 */
33 value?: string | number;
34
35 /**
36 * 初始化的默认值
37 */
38 defaultValue?: string | number;
39
40 /**
41 * 没有值的时候的占位符
42 */
43 placeholder?: string;
44
45 /**
46 * 下拉菜单是否与选择器对齐
47 */
48 autoWidth?: boolean;
49
50 /**
51 * 自定义内联 label
52 */
53 label?: React.ReactNode;
54
55 /**
56 * 是否有清除按钮(单选模式有效)
57 */
58 hasClear?: boolean;
59
60 /**
61 * 校验状态
62 */
63 state?: 'error' | 'loading';
64
65 /**
66 * 是否只读,只读模式下可以展开弹层但不能选
67 */
68 readOnly?: boolean;
69
70 /**
71 * 是否禁用选择器
72 */
73 disabled?: boolean;
74
75 /**
76 * 当前弹层是否显示
77 */
78 visible?: boolean;
79
80 /**
81 * 弹层初始化是否显示
82 */
83 defaultVisible?: boolean;
84
85 /**
86 * 弹层显示或隐藏时触发的回调
87 */
88 onVisibleChange?: (visible: boolean, type: string) => void;
89
90 /**
91 * 弹层挂载的容器节点
92 */
93 popupContainer?: string | HTMLElement | ((target: HTMLElement) => HTMLElement);
94
95 /**
96 * 弹层的 className
97 */
98 popupClassName?: string;
99
100 /**
101 * 弹层的内联样式
102 */
103 popupStyle?: React.CSSProperties;
104
105 /**
106 * 添加到弹层上的属性
107 */
108 popupProps?: PopupProps;
109
110 /**
111 * 自定义弹层的内容
112 */
113 popupContent?: React.ReactNode;
114
115 /**
116 * 是否跟随滚动
117 */
118 followTrigger?: boolean;
119
120 /**
121 * 是否使用本地过滤,在数据源为远程的时候需要关闭此项
122 */
123 filterLocal?: boolean;
124
125 /**
126 * 本地过滤方法,返回一个 Boolean 值确定是否保留
127 */
128 filter?: (key:string, item: any) => boolean;
129
130 /**
131 * 键盘上下键切换菜单高亮选项的回调
132 */
133 onToggleHighlightItem?: () => void;
134
135 /**
136 * 是否开启虚拟滚动模式
137 */
138 useVirtual?: boolean;
139
140 /**
141 * 传入的数据源,可以动态渲染子项
142 */
143 dataSource?: Array<any>;
144
145 /**
146 * 渲染 MenuItem 内容的方法
147 */
148 itemRender?: (item: item) => React.ReactNode;
149
150 /**
151 * Select发生改变时触发的回调
152 */
153 onChange?: (value: any, actionType: string, item: any) => void;
154
155 /**
156 * 填充到选择框里的值的 key,默认是 value
157 */
158 fillProps?: string;
159
160 /**
161 * 自动高亮第一个选项
162 */
163 autoHighlightFirstItem?: boolean;
164
165 /**
166 * 高亮key
167 */
168 highlightKey?: string;
169
170 /**
171 * 默认高亮key
172 */
173 defaultHighlightKey?: string;
174}
175
176export class AutoComplete extends React.Component<AutoCompleteProps, any> {}
177
178export interface OptionGroupProps extends React.HTMLAttributes<HTMLElement>, CommonProps {
179 /**
180 * 设置分组的文案
181 */
182 label?: React.ReactNode;
183}
184
185export class OptionGroup extends React.Component<OptionGroupProps, any> {}
186
187export interface OptionProps extends React.HTMLAttributes<HTMLElement>, CommonProps {
188 /**
189 * 选项值
190 */
191 value: any;
192
193 /**
194 * 是否禁用
195 */
196 disabled?: boolean;
197}
198
199export class Option extends React.Component<OptionProps, any> {}
200interface HTMLAttributesWeak extends React.HTMLAttributes<HTMLElement> {
201 defaultValue?: any;
202 onChange?: any;
203}
204
205export interface SelectProps extends Omit<HTMLAttributesWeak, 'renderPreview'>, CommonProps {
206 /**
207 * 选择器尺寸
208 */
209 size?: 'small' | 'medium' | 'large';
210
211 /**
212 * name
213 */
214 name?: string;
215
216 /**
217 * 当前值,用于受控模式
218 */
219 value?: any;
220
221 /**
222 * 初始的默认值
223 */
224 defaultValue?: any;
225
226 /**
227 * 没有值的时候的占位符
228 */
229 placeholder?: string;
230
231 /**
232 * 下拉菜单是否与选择器对齐
233 */
234 autoWidth?: boolean;
235
236 /**
237 * 自定义内联 label
238 */
239 label?: React.ReactNode;
240
241 /**
242 * 是否有清除按钮(单选模式有效)
243 */
244 hasClear?: boolean;
245
246 /**
247 * 校验状态
248 */
249 state?: 'error' | 'loading';
250
251 /**
252 * 是否只读,只读模式下可以展开弹层但不能选
253 */
254 readOnly?: boolean;
255
256 /**
257 * 是否禁用选择器
258 */
259 disabled?: boolean;
260
261 /**
262 * 当前弹层是否显示
263 */
264 visible?: boolean;
265
266 /**
267 * 弹层初始化是否显示
268 */
269 defaultVisible?: boolean;
270
271 /**
272 * 弹层显示或隐藏时触发的回调
273 */
274 onVisibleChange?: (visible: boolean) => void;
275
276 /**
277 * 弹层挂载的容器节点
278 */
279 popupContainer?: string | HTMLElement | ((target: HTMLElement) => HTMLElement);
280
281 /**
282 * 弹层的 className
283 */
284 popupClassName?: string;
285
286 /**
287 * 弹层的内联样式
288 */
289 popupStyle?: React.CSSProperties;
290
291 /**
292 * 添加到弹层上的属性
293 */
294 popupProps?: PopupProps;
295
296 /**
297 * 是否跟随滚动
298 */
299 followTrigger?: boolean;
300
301 /**
302 * 自定义弹层的内容
303 */
304 popupContent?: React.ReactNode;
305 menuProps?: MenuProps;
306
307 /**
308 * 是否使用本地过滤,在数据源为远程的时候需要关闭此项
309 */
310 filterLocal?: boolean;
311
312 /**
313 * 本地过滤方法,返回一个 Boolean 值确定是否保留
314 */
315 filter?: (key:string, item: any) => boolean;
316
317 /**
318 * 键盘上下键切换菜单高亮选项的回调
319 */
320 onToggleHighlightItem?: () => void;
321
322 /**
323 * 是否开启虚拟滚动模式
324 */
325 useVirtual?: boolean;
326
327 /**
328 * 传入的数据源,可以动态渲染子项,详见 [dataSource的使用](#dataSource的使用)
329 */
330 dataSource?: Array<any>;
331
332 /**
333 * 渲染 MenuItem 内容的方法
334 */
335 itemRender?: (item: item, searchValue: string) => React.ReactNode;
336
337 /**
338 * 选择器模式
339 */
340 mode?: 'single' | 'multiple' | 'tag';
341
342 /**
343 * 弹层内容为空的文案
344 */
345 notFoundContent?: React.ReactNode;
346
347 /**
348 * Select发生改变时触发的回调
349 */
350 onChange?: (value: any, actionType: string, item: any) => void;
351
352 /**
353 * 是否有边框
354 */
355 hasBorder?: boolean;
356
357 /**
358 * 是否有下拉箭头
359 */
360 hasArrow?: boolean;
361
362 /**
363 * 展开后是否能搜索(tag 模式下固定为true)
364 */
365 showSearch?: boolean;
366
367 /**
368 * 当搜索框值变化时回调
369 */
370 onSearch?: (value: string) => void;
371
372 /**
373 * 当搜索框值被清空时候的回调
374 */
375 onSearchClear?: (actionType: string) => void;
376
377 /**
378 * 多选模式下是否有全选功能
379 */
380 hasSelectAll?: boolean | string;
381
382 /**
383 * 填充到选择框里的值的 key
384 */
385 fillProps?: string;
386
387 /**
388 * onChange 返回的 value 使用 dataSource 的对象
389 */
390 useDetailValue?: boolean;
391
392 /**
393 * dataSource 变化的时是否保留已选的内容
394 */
395 cacheValue?: boolean;
396
397 /**
398 * 渲染 Select 展现内容的方法
399 */
400 valueRender?: (item: any) => React.ReactNode;
401
402 /**
403 * 受控搜索值,一般不需要设置
404 */
405 searchValue?: string;
406 /**
407 * 是否一行显示,仅在 mode 为 multiple 的时候生效
408 */
409 tagInline?: boolean;
410 /**
411 * 最多显示多少个 tag
412 */
413 maxTagCount?: number;
414 /**
415 * tag 尺寸是否和 select 尺寸保持一致,仅在 multiple/tag 模式下有用
416 */
417 adjustTagSize?: boolean;
418 /**
419 * 隐藏多余 tag 时显示的内容,在 maxTagCount 生效时起作用
420 * @param {object} selectedValues 当前已选中的元素
421 * @param {object} totalValues 总待选元素
422 */
423 maxTagPlaceholder?: (selectedValues?: any[], totalValues?: any[]) => React.ReactNode | HTMLElement;
424
425 /**
426 * 选择后是否立即隐藏菜单 (mode=multiple/tag 模式生效)
427 */
428 hiddenSelected?: boolean;
429 /**
430 * 是否展示 dataSource 中 children
431 */
432 showDataSourceChildren?: boolean;
433 /**
434 * tag 删除回调
435 */
436 onRemove?: (item: {}) => void;
437
438 /**
439 * 焦点事件
440 */
441 onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;
442
443 /**
444 * 失去焦点事件
445 */
446 onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;
447 isPreview?: boolean;
448 renderPreview?: (values: number | string | data | Array<number | string | data>, props: any) => any;
449 /**
450 * 自动高亮第一个选项
451 */
452 autoHighlightFirstItem?: boolean;
453
454 /**
455 * 高亮key
456 */
457 highlightKey?: string;
458
459 /**
460 * 默认高亮key
461 */
462 defaultHighlightKey?: string;
463
464 /**
465 * 展开下拉菜单时是否自动焦点到弹层
466 */
467 popupAutoFocus?: boolean;
468}
469
470export default class Select extends React.Component<SelectProps, any> {
471 static AutoComplete: typeof AutoComplete;
472 static OptionGroup: typeof OptionGroup;
473 static Option: typeof Option;
474}