choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
298 lines (297 loc) • 10.4 kB
TypeScript
/// <reference types="lodash" />
import { CSSProperties, ReactElement, ReactNode } from 'react';
import { IReactionDisposer } from 'mobx';
import { FieldNamesType, 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;
fieldNames?: FieldNamesType;
}
export declare class Cascader<T extends CascaderProps> extends TriggerField<T> {
static displayName: string;
static defaultProps: {
suffixCls: string;
searchable: boolean;
dropdownMatchSelectWidth: boolean;
expandTrigger: ExpandTrigger;
fieldNames: any;
onOption: typeof defaultOnOption;
clearButton: boolean;
popupPlacement: string;
triggerShowDelay: number;
triggerHiddenDelay: number;
viewMode: import("../trigger-field/TriggerField").TriggerViewMode;
multiple: boolean;
border: boolean;
valueChangeAction: import("../text-field/enum").ValueChangeAction;
waitType: import("../core/enum").WaitType;
readOnly: boolean;
disabled: boolean;
noValidate: boolean;
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;
fieldNames: any;
onOption: typeof defaultOnOption;
clearButton: boolean;
popupPlacement: string;
triggerShowDelay: number;
triggerHiddenDelay: number;
viewMode: import("../trigger-field/TriggerField").TriggerViewMode;
multiple: boolean;
border: boolean;
valueChangeAction: import("../text-field/enum").ValueChangeAction;
waitType: import("../core/enum").WaitType;
readOnly: boolean;
disabled: boolean;
noValidate: boolean;
trim: import("../data-set/enum").FieldTrim;
};
}
export {};