choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
460 lines (459 loc) • 18.6 kB
TypeScript
/// <reference types="lodash" />
import React, { CSSProperties, ReactElement, ReactNode } from 'react';
import PropTypes from 'prop-types';
import { IReactionDisposer } from 'mobx';
import { MenuMode } from '../../../lib/cascader';
import TriggerField, { TriggerFieldProps } from '../trigger-field/TriggerField';
import { ValidationMessages } from '../validator/Validator';
import DataSet from '../data-set/DataSet';
import Record from '../data-set/Record';
import { OptionProps } from '../option/Option';
import { ExpandTrigger } from './enum';
export declare const MORE_KEY = "__more__";
export interface OptionObject {
value: any;
meaning: string;
}
export interface ProcessOption extends OptionObject {
parent: any;
children?: any;
disabled?: boolean;
}
export interface CascaderOptionType {
value: string;
label: ReactNode;
disabled?: boolean;
children?: Array<CascaderOptionType>;
parent?: Array<CascaderOptionType>;
__IS_FILTERED_OPTION?: boolean;
}
export interface SearchMatcherProps {
record: Record;
text: string;
textField: string;
valueField: string;
}
export declare type SearchMatcher = string | ((props: SearchMatcherProps) => boolean);
declare function defaultOnOption({ record }: {
record: any;
}): {
disabled: any;
} | undefined;
export declare function getItemKey(record: Record, text: ReactNode, value: any): string;
export declare type onOptionProps = {
dataSet: DataSet;
record: Record;
};
export interface CascaderProps extends TriggerFieldProps {
/**
* 次级菜单的展开方式,可选 'click' 和 'hover'
*/
expandTrigger?: ExpandTrigger;
/**
* 下拉框匹配输入框宽度
* @default true
*/
dropdownMatchSelectWidth?: boolean;
/**
* 下拉框菜单样式名
*/
dropdownMenuStyle?: CSSProperties;
/**
* 选项数据源
*/
options?: DataSet | CascaderOptionType[];
/**
* 是否为原始值
* true - 选项中valueField对应的值
* false - 选项值对象
*/
primitiveValue?: boolean;
/**
* 当下拉列表为空时显示的内容
*/
notFoundContent?: ReactNode;
/**
* 设置选项属性,如 disabled;
*/
onOption?: (props: onOptionProps) => OptionProps;
/**
* 选择一个值的时候触发
*/
onChoose?: (value: any, record: any) => void;
/**
* 取消选中一个值的时候触发多选时候生效
*/
onUnChoose?: (value: any, record: any) => void;
/** 单框弹出形式切换 */
menuMode?: MenuMode;
/** 由于渲染在body下可以方便按照业务配置弹出框的大小 */
singleMenuStyle?: CSSProperties;
/** 由于渲染在body下可以方便按照业务配置超出大小样式和最小宽度等 */
singleMenuItemStyle?: CSSProperties;
/** 设置需要的提示问题配置 */
singlePleaseRender?: ({ key, className, text }: {
key: string;
className: string;
text: string;
}) => ReactElement<any>;
/** 头部可以渲染出想要的tab样子 */
singleMenuItemRender?: (title: string) => ReactElement<any>;
/** 选择及改变 */
changeOnSelect?: boolean;
searchable?: boolean;
searchMatcher?: SearchMatcher;
async?: boolean;
loadData?: (node: any) => Promise<any>;
/**
* 渲染分页 Item 内容
*/
pagingOptionContent?: string | ReactNode;
}
export declare class Cascader<T extends CascaderProps> 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>;
accessKey: PropTypes.Requireable<string | boolean>;
dir: PropTypes.Requireable<string>;
contentEditable: PropTypes.Requireable<string | boolean>;
draggable: PropTypes.Requireable<string | 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>;
range: PropTypes.Requireable<boolean | (string | null | undefined)[]>;
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>;
highlight: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
highlightRenderer: PropTypes.Requireable<(...args: any[]) => any>;
useColon: PropTypes.Requireable<boolean>;
showValidation: 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>;
addonBeforeStyle: PropTypes.Requireable<object>;
addonAfter: PropTypes.Requireable<PropTypes.ReactNodeLike>;
addonAfterStyle: PropTypes.Requireable<object>;
restrict: PropTypes.Requireable<string | object>;
isFlat: PropTypes.Requireable<boolean>;
valueChangeAction: PropTypes.Requireable<import("../text-field/enum").ValueChangeAction>; /**
* 次级菜单的展开方式,可选 'click' 和 'hover'
*/
wait: PropTypes.Requireable<number>;
waitType: PropTypes.Requireable<import("../core/enum").WaitType>;
groupClassName: PropTypes.Requireable<string>;
showLengthInfo: PropTypes.Requireable<boolean>;
border: PropTypes.Requireable<boolean>;
popupContent: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
popupCls: PropTypes.Requireable<string>;
popupStyle: PropTypes.Requireable<object>;
popupPlacement: PropTypes.Requireable<string>;
trigger: React.Requireable<any>;
triggerShowDelay: PropTypes.Requireable<number>;
triggerHiddenDelay: PropTypes.Requireable<number>;
onPopupHiddenChange: PropTypes.Requireable<(...args: any[]) => any>;
getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
getPopupAlignTarget: PropTypes.Requireable<(...args: any[]) => any>;
tabIntoPopupContent: PropTypes.Requireable<boolean>;
viewMode: PropTypes.Requireable<string>;
/**
* 次级菜单的展开方式,可选 'click' 和 'hover'
*/
expandTrigger: PropTypes.Requireable<ExpandTrigger>;
/**
* 下拉框匹配输入框宽度
* @default true
*/
dropdownMatchSelectWidth: PropTypes.Requireable<boolean>;
/**
* 下拉框菜单样式名
*/
dropdownMenuStyle: PropTypes.Requireable<object>;
/**
* 选项数据源
*/
options: PropTypes.Requireable<object>;
/**
* 是否为原始值
* true - 选项中valueField对应的值
* false - 选项值对象
*/
primitiveValue: PropTypes.Requireable<boolean>;
/**
* 当下拉列表为空时显示的内容
*/
notFoundContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
/**
* 选择一个值的时候触发
*/
onChoose: PropTypes.Requireable<(...args: any[]) => any>;
/**
* 取消选中一个值的时候触发多选时候生效
*/
onUnChoose: PropTypes.Requireable<(...args: any[]) => any>;
/** 选择及改变 */
changeOnSelect: PropTypes.Requireable<boolean>;
/**
* 设置选项属性,如 disabled;
*/
onOption: PropTypes.Requireable<(...args: any[]) => any>;
/**
* 渲染分页 Item 内容
*/
pagingOptionContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
/**
* 可搜索属性
*/
searchable: PropTypes.Requireable<boolean>;
/**
* 搜索匹配器。 当为字符串时,作为lookup的参数名来重新请求值列表。
*/
searchMatcher: PropTypes.Requireable<string | ((...args: any[]) => any)>;
singleMenuStyle: PropTypes.Requireable<object>;
singleMenuItemStyle: PropTypes.Requireable<object>;
singlePleaseRender: PropTypes.Requireable<(...args: any[]) => any>;
singleMenuItemRender: PropTypes.Requireable<(...args: any[]) => any>;
};
static defaultProps: {
suffixCls: string;
searchable: boolean;
dropdownMatchSelectWidth: boolean;
expandTrigger: ExpandTrigger;
onOption: typeof defaultOnOption;
clearButton: boolean;
popupPlacement: string;
trigger: string[];
triggerShowDelay: number;
triggerHiddenDelay: number;
viewMode: string;
multiple: boolean;
border: 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;
};
activeValues: any;
menuItemWith: number;
clickTab: any;
get isClickTab(): any;
get activeValue(): any;
get itemMenuWidth(): number;
constructor(props: any, context: any);
findActiveRecord(value: any, options: any): any;
setActiveValue(activeValues: any): void;
setIsClickTab(isClickTab: boolean): void;
setItemMenuWidth(width: number): void;
get defaultValidationMessages(): ValidationMessages;
get textField(): string;
get valueField(): string;
get cascadeOptions(): Record[];
get multiple(): boolean;
get menuMultiple(): boolean;
get parentField(): string;
get idField(): string;
get searchMatcher(): SearchMatcher;
get options(): DataSet;
get filteredOptions(): Record[];
addOptionsParent(options: any, parent: any): any;
get primitive(): boolean;
checkValueReaction?: IReactionDisposer;
checkComboReaction?: IReactionDisposer;
checkValue(): void;
checkCombo(): void;
clearCheckValue(): void;
clearCheckCombo(): void;
clearReaction(): void;
componentWillUnmount(): void;
componentWillReceiveProps(nextProps: any, nextContext: any): void;
componentDidUpdate(): void;
getOmitPropsKeys(): string[];
getObservableProps(props: any, context: any): any;
getMenuPrefixCls(): string;
getPagingOptionContent(): T["pagingOptionContent"];
renderMultipleHolder(): JSX.Element | undefined;
getNotFoundContent(): T["notFoundContent"];
/**
* 返回一个打平tree返回层级
* @param record
* @param fn
*/
findParentRecordTree(record: Record, fn?: any): any;
handleLoadData(event: any): Promise<any>;
/**
* 获取record 或者 obj对应的值
* @param value
* @param key
*/
getRecordOrObjValue(value: any, key: any): any;
/**
* 渲染menu 表格
* @param menuProps
*/
getMenu(menuProps?: object): ReactNode;
get searchable(): boolean;
get loading(): boolean;
isEditable(): boolean;
getPopupContent(): ReactNode;
getPopupStyleFromAlign(target: any): CSSProperties | undefined;
getTriggerIconFont(): string;
handleKeyDown(e: any): void;
findTreeDataFirstLast(options: any, activeValue: any, direction: any): any;
handleKeyDownFirstLast(e: any, direction: number): void;
findTreeDataUpDown(options: any, value: any, direction: any, fn?: any): any;
sameKeyRecordIndex(options: Record[], activeValue: Record, valueKey: string): number;
handleKeyDownPrevNext(e: any, direction: number): void;
findTreeParentChidren(_options: any, activeValue: any, direction: any): any;
handleKeyLeftRightNext(e: any, direction: number): void;
handleKeyDownEnter(e: any): void;
handleKeyDownEsc(e: any): void;
handleKeyDownSpace(e: any): void;
handleBlur(e: any): void;
expand(): void;
syncValueOnBlur(value: any): void;
findByTextWithValue(text: any): 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;
handlePopupAnimateAppear(): void;
getValueKey(v: any): any;
handlePopupAnimateEnd(_key: any, _exists: any): void;
handleMenuSelect(targetOption: any, _menuIndex: any, isClickTab: any, trigger: any): void;
setactiveEmpty(): void;
handleOptionSelect(record: Record): void;
handleOptionUnSelect(record: Record): void;
removeValues(values: any[], index?: number): void;
handleSearch(_text?: string): void;
setText(text?: string): void;
doSearch: ((value: any) => void) & import("lodash").Cancelable;
searchRemote(value: any): void;
searchData(data: Record[], text?: string): Record[];
matchRecordBySearch(record: Record, text?: string): boolean;
handleChange(e: any): void;
processRecordToObject(record: Record): any;
/**
* 返回tree 的值的列表方法
* @param record
* @param allArray
*/
treeValueToArray(record: Record | ProcessOption, allArray?: string[]): any;
/**
* 返回tree 的值的列表方法
* @param record
* @param allArray
*/
treeTextToArray(record: Record, allArray?: string[]): any;
/**
* 返回tree 的值的列表方法
* @param record
* @param allArray
*/
treeToArray(record: Record, allArray?: Record[]): any;
removeObjParentChild(obj: any): any;
processObjectValue(value: any, textField: any): any;
processLookupValue(value: any): {} | null | undefined;
processValue(value: any): ReactNode;
toValueString(value: any): string | undefined;
clear(): void;
addValue(...values: any[]): void;
resetFilter(): void;
reset(): void;
unChoose(record?: Record | null): void;
/**
*
* @param record
* @param visible
*/
choose(record?: Record | null, visible?: boolean): void;
chooseAll(): void;
unChooseAll(): void;
handlePopupHiddenChange(hidden: boolean): Promise<void>;
processSelectedData(): Promise<void>;
renderLengthInfo(): ReactNode;
}
export default class ObserverCascader extends Cascader<CascaderProps> {
static defaultProps: {
suffixCls: string;
searchable: boolean;
dropdownMatchSelectWidth: boolean;
expandTrigger: ExpandTrigger;
onOption: typeof defaultOnOption;
clearButton: boolean;
popupPlacement: string;
trigger: string[];
triggerShowDelay: number;
triggerHiddenDelay: number;
viewMode: string;
multiple: boolean;
border: 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;
};
}
export {};