@alifd/next
Version:
A configurable component library for web built on React.
475 lines (388 loc) • 9.74 kB
TypeScript
/// <reference types="react" />
import * as React from 'react';
import CommonProps from '../util';
import { PopupProps } from '../overlay';
import { MenuProps } from '../menu';
import { InputProps } from '../input';
import { data } from '../checkbox';
interface HTMLAttributesWeak extends React.HTMLAttributes<HTMLElement>, InputProps {
defaultValue?: any;
onChange?: any;
onBlur?: any,
onFocus?: any,
onKeyDown?: any,
}
type item = {
value?: string | number;
label?: React.ReactNode;
[propName: string]: any;
}
export interface AutoCompleteProps extends HTMLAttributesWeak, CommonProps {
/**
* 选择器尺寸
*/
size?: 'small' | 'medium' | 'large';
/**
* 当前值,用于受控模式
*/
value?: string | number;
/**
* 初始化的默认值
*/
defaultValue?: string | number;
/**
* 没有值的时候的占位符
*/
placeholder?: string;
/**
* 下拉菜单是否与选择器对齐
*/
autoWidth?: boolean;
/**
* 自定义内联 label
*/
label?: React.ReactNode;
/**
* 是否有清除按钮(单选模式有效)
*/
hasClear?: boolean;
/**
* 校验状态
*/
state?: 'error' | 'loading';
/**
* 是否只读,只读模式下可以展开弹层但不能选
*/
readOnly?: boolean;
/**
* 是否禁用选择器
*/
disabled?: boolean;
/**
* 当前弹层是否显示
*/
visible?: boolean;
/**
* 弹层初始化是否显示
*/
defaultVisible?: boolean;
/**
* 弹层显示或隐藏时触发的回调
*/
onVisibleChange?: (visible: boolean, type: string) => void;
/**
* 弹层挂载的容器节点
*/
popupContainer?: string | HTMLElement | ((target: HTMLElement) => HTMLElement);
/**
* 弹层的 className
*/
popupClassName?: string;
/**
* 弹层的内联样式
*/
popupStyle?: React.CSSProperties;
/**
* 添加到弹层上的属性
*/
popupProps?: PopupProps;
/**
* 自定义弹层的内容
*/
popupContent?: React.ReactNode;
/**
* 是否跟随滚动
*/
followTrigger?: boolean;
/**
* 是否使用本地过滤,在数据源为远程的时候需要关闭此项
*/
filterLocal?: boolean;
/**
* 本地过滤方法,返回一个 Boolean 值确定是否保留
*/
filter?: (key:string, item: any) => boolean;
/**
* 键盘上下键切换菜单高亮选项的回调
*/
onToggleHighlightItem?: () => void;
/**
* 是否开启虚拟滚动模式
*/
useVirtual?: boolean;
/**
* 传入的数据源,可以动态渲染子项
*/
dataSource?: Array<any>;
/**
* 渲染 MenuItem 内容的方法
*/
itemRender?: (item: item) => React.ReactNode;
/**
* Select发生改变时触发的回调
*/
onChange?: (value: any, actionType: string, item: any) => void;
/**
* 填充到选择框里的值的 key,默认是 value
*/
fillProps?: string;
/**
* 自动高亮第一个选项
*/
autoHighlightFirstItem?: boolean;
/**
* 高亮key
*/
highlightKey?: string;
/**
* 默认高亮key
*/
defaultHighlightKey?: string;
}
export class AutoComplete extends React.Component<AutoCompleteProps, any> {}
export interface OptionGroupProps extends React.HTMLAttributes<HTMLElement>, CommonProps {
/**
* 设置分组的文案
*/
label?: React.ReactNode;
}
export class OptionGroup extends React.Component<OptionGroupProps, any> {}
export interface OptionProps extends React.HTMLAttributes<HTMLElement>, CommonProps {
/**
* 选项值
*/
value: any;
/**
* 是否禁用
*/
disabled?: boolean;
}
export class Option extends React.Component<OptionProps, any> {}
interface HTMLAttributesWeak extends React.HTMLAttributes<HTMLElement> {
defaultValue?: any;
onChange?: any;
}
export interface SelectProps extends Omit<HTMLAttributesWeak, 'renderPreview'>, CommonProps {
/**
* 选择器尺寸
*/
size?: 'small' | 'medium' | 'large';
/**
* name
*/
name?: string;
/**
* 当前值,用于受控模式
*/
value?: any;
/**
* 初始的默认值
*/
defaultValue?: any;
/**
* 没有值的时候的占位符
*/
placeholder?: string;
/**
* 下拉菜单是否与选择器对齐
*/
autoWidth?: boolean;
/**
* 自定义内联 label
*/
label?: React.ReactNode;
/**
* 是否有清除按钮(单选模式有效)
*/
hasClear?: boolean;
/**
* 校验状态
*/
state?: 'error' | 'loading';
/**
* 是否只读,只读模式下可以展开弹层但不能选
*/
readOnly?: boolean;
/**
* 是否禁用选择器
*/
disabled?: boolean;
/**
* 当前弹层是否显示
*/
visible?: boolean;
/**
* 弹层初始化是否显示
*/
defaultVisible?: boolean;
/**
* 弹层显示或隐藏时触发的回调
*/
onVisibleChange?: (visible: boolean) => void;
/**
* 弹层挂载的容器节点
*/
popupContainer?: string | HTMLElement | ((target: HTMLElement) => HTMLElement);
/**
* 弹层的 className
*/
popupClassName?: string;
/**
* 弹层的内联样式
*/
popupStyle?: React.CSSProperties;
/**
* 添加到弹层上的属性
*/
popupProps?: PopupProps;
/**
* 是否跟随滚动
*/
followTrigger?: boolean;
/**
* 自定义弹层的内容
*/
popupContent?: React.ReactNode;
menuProps?: MenuProps;
/**
* 是否使用本地过滤,在数据源为远程的时候需要关闭此项
*/
filterLocal?: boolean;
/**
* 本地过滤方法,返回一个 Boolean 值确定是否保留
*/
filter?: (key:string, item: any) => boolean;
/**
* 键盘上下键切换菜单高亮选项的回调
*/
onToggleHighlightItem?: () => void;
/**
* 是否开启虚拟滚动模式
*/
useVirtual?: boolean;
/**
* 传入的数据源,可以动态渲染子项,详见 [dataSource的使用](#dataSource的使用)
*/
dataSource?: Array<any>;
/**
* 渲染 MenuItem 内容的方法
*/
itemRender?: (item: item, searchValue: string) => React.ReactNode;
/**
* 选择器模式
*/
mode?: 'single' | 'multiple' | 'tag';
/**
* 弹层内容为空的文案
*/
notFoundContent?: React.ReactNode;
/**
* Select发生改变时触发的回调
*/
onChange?: (value: any, actionType: string, item: any) => void;
/**
* 是否有边框
*/
hasBorder?: boolean;
/**
* 是否有下拉箭头
*/
hasArrow?: boolean;
/**
* 展开后是否能搜索(tag 模式下固定为true)
*/
showSearch?: boolean;
/**
* 当搜索框值变化时回调
*/
onSearch?: (value: string) => void;
/**
* 当搜索框值被清空时候的回调
*/
onSearchClear?: (actionType: string) => void;
/**
* 多选模式下是否有全选功能
*/
hasSelectAll?: boolean | string;
/**
* 填充到选择框里的值的 key
*/
fillProps?: string;
/**
* onChange 返回的 value 使用 dataSource 的对象
*/
useDetailValue?: boolean;
/**
* dataSource 变化的时是否保留已选的内容
*/
cacheValue?: boolean;
/**
* 渲染 Select 展现内容的方法
*/
valueRender?: (item: any) => React.ReactNode;
/**
* 受控搜索值,一般不需要设置
*/
searchValue?: string;
/**
* 是否一行显示,仅在 mode 为 multiple 的时候生效
*/
tagInline?: boolean;
/**
* 最多显示多少个 tag
*/
maxTagCount?: number;
/**
* tag 尺寸是否和 select 尺寸保持一致,仅在 multiple/tag 模式下有用
*/
adjustTagSize?: boolean;
/**
* 隐藏多余 tag 时显示的内容,在 maxTagCount 生效时起作用
* @param {object} selectedValues 当前已选中的元素
* @param {object} totalValues 总待选元素
*/
maxTagPlaceholder?: (selectedValues?: any[], totalValues?: any[]) => React.ReactNode | HTMLElement;
/**
* 选择后是否立即隐藏菜单 (mode=multiple/tag 模式生效)
*/
hiddenSelected?: boolean;
/**
* 是否展示 dataSource 中 children
*/
showDataSourceChildren?: boolean;
/**
* tag 删除回调
*/
onRemove?: (item: {}) => void;
/**
* 焦点事件
*/
onFocus?: (e: React.FocusEvent<HTMLInputElement>) => void;
/**
* 失去焦点事件
*/
onBlur?: (e: React.FocusEvent<HTMLInputElement>) => void;
isPreview?: boolean;
renderPreview?: (values: number | string | data | Array<number | string | data>, props: any) => any;
/**
* 自动高亮第一个选项
*/
autoHighlightFirstItem?: boolean;
/**
* 高亮key
*/
highlightKey?: string;
/**
* 默认高亮key
*/
defaultHighlightKey?: string;
/**
* 展开下拉菜单时是否自动焦点到弹层
*/
popupAutoFocus?: boolean;
}
export default class Select extends React.Component<SelectProps, any> {
static AutoComplete: typeof AutoComplete;
static OptionGroup: typeof OptionGroup;
static Option: typeof Option;
}