UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

491 lines (490 loc) 17.9 kB
/// <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 {};