UNPKG

choerodon-ui

Version:

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

460 lines (459 loc) 18.6 kB
/// <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 {};