choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
491 lines (490 loc) • 17.9 kB
TypeScript
/// <reference types="lodash" />
import React, { CSSProperties, ReactNode } from 'react';
import PropTypes from 'prop-types';
import { IReactionDisposer } from 'mobx';
import Menu from '../../../es/rc-components/menu';
import TriggerField, { TriggerFieldProps } from '../trigger-field/TriggerField';
import { ValidationMessages } from '../validator/Validator';
import Option, { OptionProps } from '../option/Option';
import OptGroup from '../option/OptGroup';
import DataSet from '../data-set/DataSet';
import Record from '../data-set/Record';
import { Renderer } from '../field/FormField';
export declare const DISABLED_FIELD = "__disabled";
export declare const MORE_KEY = "__more__";
declare function defaultOnOption({ record }: {
record: any;
}): {
disabled: any;
};
export declare function getItemKey(record: Record, text: ReactNode, value: any): string;
export declare type onOptionProps = {
dataSet: DataSet;
record: Record;
};
export declare type SearchMatcher = string | ((props: SearchMatcherProps) => boolean);
export interface SearchMatcherProps {
record: Record;
text: string;
textField: string;
valueField: string;
}
export declare type ParamMatcher = string | ((props: ParamMatcherProps) => string);
export interface ParamMatcherProps {
record: Record | undefined;
text: string;
textField: string;
valueField: string;
}
export interface SelectProps extends TriggerFieldProps {
/**
* 复合输入值
* @default false
*/
combo?: boolean;
/**
* 常用项
*/
commonItem?: string[];
/**
* 常用项标签超出最大数量时的占位描述
*/
maxCommonTagPlaceholder?: ReactNode | ((omittedValues: any[]) => ReactNode);
/**
* 常用项标签最大数量
*/
maxCommonTagCount?: number;
/**
* 常用项标签文案最大长度
*/
maxCommonTagTextLength?: number;
/**
* 可搜索
* @default false
*/
searchable?: boolean;
/**
* 搜索匹配器。 当为字符串时,作为lookup的参数名来重新请求值列表。
*/
searchMatcher?: SearchMatcher;
/**
* 参数匹配器。 当为字符串时,参数拼接。
*/
paramMatcher?: ParamMatcher;
/**
* 选项过滤
* @param {Record} record
* @return {boolean}
*/
optionsFilter?: (record: Record, index: number, records: Record[]) => boolean;
/**
* 当选项改变时,检查并清除不在选项中的值
* @default true
*/
checkValueOnOptionsChange?: boolean;
/**
* 下拉框匹配输入框宽度
* @default true
*/
dropdownMatchSelectWidth?: boolean;
/**
* 多选时显示全选按钮;
* @default true
*/
selectAllButton?: boolean;
/**
* 多选是否开启反选
* @default false
*/
reverse?: boolean;
/**
* 下拉框菜单样式名
*/
dropdownMenuStyle?: CSSProperties;
/**
* 选项数据源
*/
options?: DataSet;
/**
* 是否为原始值
* true - 选项中valueField对应的值
* false - 选项值对象
*/
primitiveValue?: boolean;
/**
* 渲染Option文本的钩子
* @example
* ```js
* <Select
* {...props}
* optionRenderer={({ record, text, value }) => text + '$'}
* />
* ```
*/
optionRenderer?: Renderer;
/**
* 渲染分页 Item 内容
*/
pagingOptionContent?: string | ReactNode;
/**
* 当下拉列表为空时显示的内容
*/
notFoundContent?: ReactNode;
/**
* 设置选项属性,如 disabled;
*/
onOption: (props: onOptionProps) => OptionProps;
/**
* 下拉时自动重新查询
*/
noCache?: boolean;
}
export declare class Select<T extends SelectProps> extends TriggerField<T> {
static displayName: string;
static propTypes: {
id: PropTypes.Requireable<string>;
size: PropTypes.Requireable<import("../core/enum").Size>;
suffixCls: PropTypes.Requireable<string>;
prefixCls: PropTypes.Requireable<string>;
title: PropTypes.Requireable<PropTypes.ReactNodeLike>;
disabled: PropTypes.Requireable<boolean>;
hidden: PropTypes.Requireable<boolean>;
autoFocus: PropTypes.Requireable<boolean>;
style: PropTypes.Requireable<object>;
className: PropTypes.Requireable<string>;
tabIndex: PropTypes.Requireable<number>;
lang: PropTypes.Requireable<string>;
spellCheck: PropTypes.Requireable<boolean>;
onFocus: PropTypes.Requireable<(...args: any[]) => any>;
onBlur: PropTypes.Requireable<(...args: any[]) => any>;
onClick: PropTypes.Requireable<(...args: any[]) => any>;
onDoubleClick: PropTypes.Requireable<(...args: any[]) => any>;
onMouseUp: PropTypes.Requireable<(...args: any[]) => any>;
onMouseDown: PropTypes.Requireable<(...args: any[]) => any>;
onMouseMove: PropTypes.Requireable<(...args: any[]) => any>;
onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
onMouseOver: PropTypes.Requireable<(...args: any[]) => any>;
onMouseOut: PropTypes.Requireable<(...args: any[]) => any>;
onContextMenu: PropTypes.Requireable<(...args: any[]) => any>;
onKeyDown: PropTypes.Requireable<(...args: any[]) => any>;
onKeyUp: PropTypes.Requireable<(...args: any[]) => any>;
onKeyPress: PropTypes.Requireable<(...args: any[]) => any>;
dataSet: PropTypes.Requireable<object>;
_inTable: PropTypes.Requireable<boolean>;
type: PropTypes.Requireable<string>;
name: PropTypes.Requireable<string>;
value: PropTypes.Requireable<any>;
defaultValue: PropTypes.Requireable<any>;
required: PropTypes.Requireable<boolean>;
readOnly: PropTypes.Requireable<boolean>;
form: PropTypes.Requireable<string>;
dataIndex: PropTypes.Requireable<number>;
multiple: PropTypes.Requireable<boolean>; /**
* 当下拉列表为空时显示的内容
*/
rowSpan: PropTypes.Requireable<number>;
newLine: PropTypes.Requireable<boolean>;
colSpan: PropTypes.Requireable<number>;
validator: PropTypes.Requireable<(...args: any[]) => any>;
onInvalid: PropTypes.Requireable<(...args: any[]) => any>;
help: PropTypes.Requireable<string>;
showHelp: PropTypes.Requireable<import("../field/enum").ShowHelp>;
renderer: PropTypes.Requireable<(...args: any[]) => any>;
validationRenderer: PropTypes.Requireable<(...args: any[]) => any>;
maxTagPlaceholder: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
maxTagCount: PropTypes.Requireable<number>;
maxTagTextLength: PropTypes.Requireable<number>;
pristine: PropTypes.Requireable<boolean>;
trim: PropTypes.Requireable<import("../data-set/enum").FieldTrim>;
onBeforeChange: PropTypes.Requireable<(...args: any[]) => any>;
onChange: PropTypes.Requireable<(...args: any[]) => any>;
onInput: PropTypes.Requireable<(...args: any[]) => any>;
onEnterDown: PropTypes.Requireable<(...args: any[]) => any>;
fieldClassName: PropTypes.Requireable<string>;
placeholder: PropTypes.Requireable<string | (string | null | undefined)[]>;
minLength: PropTypes.Requireable<number>;
maxLength: PropTypes.Requireable<number>;
pattern: PropTypes.Requireable<string | object>;
autoComplete: PropTypes.Requireable<string>;
prefix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
suffix: PropTypes.Requireable<PropTypes.ReactNodeLike>;
clearButton: PropTypes.Requireable<boolean>;
addonBefore: PropTypes.Requireable<PropTypes.ReactNodeLike>;
addonAfter: PropTypes.Requireable<PropTypes.ReactNodeLike>;
restrict: PropTypes.Requireable<string>;
isFlat: PropTypes.Requireable<boolean>;
/**
* 参数匹配器。 当为字符串时,参数拼接。
*/
valueChangeAction: PropTypes.Requireable<import("../text-field/enum").ValueChangeAction>;
wait: PropTypes.Requireable<number>;
waitType: PropTypes.Requireable<import("../core/enum").WaitType>;
groupClassName: PropTypes.Requireable<string>;
popupContent: PropTypes.Requireable<PropTypes.ReactElementLike>;
popupCls: PropTypes.Requireable<string>;
popupStyle: PropTypes.Requireable<object>;
trigger: React.Requireable<any>;
triggerShowDelay: PropTypes.Requireable<number>;
triggerHiddenDelay: PropTypes.Requireable<number>;
onPopupHiddenChange: PropTypes.Requireable<(...args: any[]) => any>;
getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
/**
* 复合输入值
* @default false
*/
combo: PropTypes.Requireable<boolean>;
/**
* 常用项
* @default undefined
*/
commonItem: PropTypes.Requireable<any[]>;
/**
* 多值标签超出最大数量时的占位描述
*/
maxCommonTagPlaceholder: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
/**
* 多值标签最大数量
*/
maxCommonTagCount: PropTypes.Requireable<number>;
/**
* 多值标签文案最大长度
*/
maxCommonTagTextLength: PropTypes.Requireable<number>;
/**
* 过滤器
* @default false
*/
searchable: PropTypes.Requireable<boolean>;
/**
* 搜索匹配器。 当为字符串时,作为lookup的参数名来重新请求值列表。
*/
searchMatcher: PropTypes.Requireable<string | ((...args: any[]) => any)>;
/**
* 参数匹配器。 当为字符串时,参数拼接。
*/
paramMatcher: PropTypes.Requireable<string | ((...args: any[]) => any)>;
/**
* 是否为原始值
* true - 选项中valueField对应的值
* false - 选项值对象
*/
primitiveValue: PropTypes.Requireable<boolean>;
/**
* 渲染Option文本的钩子
* @example
* ```js
* <Select
* {...props}
* optionRenderer={({ dataSet, record, text, value }) => text + '$'}
* />
* ```
*/
optionRenderer: PropTypes.Requireable<(...args: any[]) => any>;
/**
* 当下拉列表为空时显示的内容
*/
notFoundContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
/**
* 渲染分页 Item 内容
*/
pagingOptionContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
/**
* 设置选项属性,如 disabled;
*/
onOption: PropTypes.Requireable<(...args: any[]) => any>;
/**
* 下拉时自动重新查询
*/
noCache: PropTypes.Requireable<boolean>;
/**
* 下拉框匹配输入框宽度
* @default true
*/
dropdownMatchSelectWidth: PropTypes.Requireable<boolean>;
/**
* 多选时显示全选按钮;
* @default true
*/
selectAllButton: PropTypes.Requireable<boolean>;
/**
* 多选是否开启反选
* @default false
*/
reverse: PropTypes.Requireable<boolean>;
};
static defaultProps: {
suffixCls: string;
combo: boolean;
checkValueOnOptionsChange: boolean;
onOption: typeof defaultOnOption;
selectAllButton: boolean;
clearButton: boolean;
trigger: string[];
triggerShowDelay: number;
triggerHiddenDelay: number;
multiple: boolean;
valueChangeAction: import("../text-field/enum").ValueChangeAction;
waitType: import("../core/enum").WaitType;
readOnly: boolean;
disabled: boolean;
noValidate: boolean;
showHelp: string;
trim: import("../data-set/enum").FieldTrim;
};
static Option: typeof Option;
static OptGroup: typeof OptGroup;
static __PRO_SELECT: boolean;
comboOptions: DataSet;
menu?: Menu | null;
get searchMatcher(): SearchMatcher;
get paramMatcher(): ParamMatcher;
get defaultValidationMessages(): ValidationMessages;
get textField(): string;
get valueField(): string;
get currentComboOption(): Record | undefined;
get filteredOptions(): Record[];
get optionsWithCombo(): Record[];
get cascadeOptions(): Record[];
get editable(): boolean;
get searchable(): boolean;
get multiple(): boolean;
get menuMultiple(): boolean;
get options(): DataSet;
get primitive(): boolean;
checkValueReaction?: IReactionDisposer;
checkComboReaction?: IReactionDisposer;
saveMenu(node: any): void;
checkValue(): void;
checkCombo(): void;
clearCheckValue(): void;
clearCheckCombo(): void;
clearReaction(): void;
componentWillMount(): void;
componentWillUnmount(): void;
componentWillReceiveProps(nextProps: any, nextContext: any): void;
componentDidUpdate(): void;
getOtherProps(): Pick<Pick<Pick<Pick<Pick<any, string | number | symbol>, string | number | symbol>, string | number | symbol>, string | number | symbol>, string | number | symbol>;
getObservableProps(props: any, context: any): {
children: any;
options: any;
combo: any;
commonItem: any;
primitiveValue: any;
searchMatcher: any;
paramMatcher: any;
searchable: any;
dropdownMatchSelectWidth: any;
selectReverse: any;
optionsFilter: any;
name: any;
record: any;
dataSet: any;
dataIndex: any;
value: any;
lang: any;
};
getMenuPrefixCls(): string;
renderMultipleHolder(): JSX.Element | undefined;
getNotFoundContent(): any;
getPagingOptionContent(): any;
getOtherNextNode(): ReactNode;
getMenu(menuProps?: object): ReactNode;
getPopupProps(): {
dataSet: DataSet;
textField: string;
valueField: string;
};
get dropdownMatchSelectWidth(): boolean | undefined;
get selectReverse(): boolean | undefined;
get loading(): boolean;
renderSelectAll(): ReactNode;
getPopupContent(): ReactNode;
getPopupStyleFromAlign(target: any): CSSProperties | undefined;
getTriggerIconFont(): string;
handleKeyDown(e: any): void;
isMultipleBlockDisabled(v: any): boolean;
handleKeyDownFirstLast(e: any, menu: Menu, direction: number): void;
handleKeyDownPrevNext(e: any, menu: Menu, direction: number): void;
handleKeyDownEsc(e: any): void;
handleKeyDownSpace(e: any): void;
handleBlur(e: any): void;
expand(): void;
syncValueOnBlur(value: any): void;
findByTextWithValue(text: any, data: Record[]): Record | undefined;
findByText(text: any): Record | undefined;
findByValue(value: any): Record | undefined;
isSelected(record: Record): boolean;
generateComboOption(value: string | any[], callback?: (text: string) => void): void;
createComboOption(value: any): void;
removeComboOptions(): void;
removeComboOption(record?: Record): void;
handlePopupAnimateAppear(): void;
getValueKey(v: any): any;
handlePopupAnimateEnd(_key: any, _exists: any): void;
handleMenuClick({ key, item: { props: { value }, }, }: {
key: any;
item: {
props: {
value: any;
};
};
}): void;
handleCommonItemClick(value: any): void;
handleOptionSelect(record: Record | Record[]): void;
handleOptionUnSelect(record: Record | Record[]): void;
handleSearch(_text?: string): void;
setText(text?: string): void;
doSearch: ((value: any) => void) & import("lodash").Cancelable;
searchRemote(value: any): void;
/**
* 该方法会被onChange和onCompositionend触发
* @param e 改变事件
*/
handleChange(e: any): void;
processRecordToObject(record: Record): any;
processObjectValue(value: any, textField: any): any;
processLookupValue(value: any): string;
processValue(value: any): string;
clear(): void;
setRangeTarget(target: any): void;
resetFilter(): void;
reset(): void;
unChoose(record?: Record | Record[] | null): void;
choose(record?: Record | Record[] | null): void;
chooseAll(): void;
/**
* 反选
*/
chooseRe(): void;
unChooseAll(): void;
handlePopupHiddenChange(hidden: boolean): void;
processSelectedData(): Promise<void>;
searchData(data: Record[], text?: string): Record[];
matchRecordBySearch(record: Record, text?: string): boolean;
}
export default class ObserverSelect extends Select<SelectProps> {
static defaultProps: {
suffixCls: string;
combo: boolean;
checkValueOnOptionsChange: boolean;
onOption: typeof defaultOnOption;
selectAllButton: boolean;
clearButton: boolean;
trigger: string[];
triggerShowDelay: number;
triggerHiddenDelay: number;
multiple: boolean;
valueChangeAction: import("../text-field/enum").ValueChangeAction;
waitType: import("../core/enum").WaitType;
readOnly: boolean;
disabled: boolean;
noValidate: boolean;
showHelp: string;
trim: import("../data-set/enum").FieldTrim;
};
static Option: typeof Option;
static OptGroup: typeof OptGroup;
static __PRO_SELECT: boolean;
}
export {};