UNPKG

choerodon-ui

Version:

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

407 lines (406 loc) 14.8 kB
import React, { Component, MouseEvent, ReactElement, ReactNode } from 'react'; import ConfigContext, { ConfigContextValue } from '../../../../lib/config-provider/ConfigContext'; import { TableFilterAdapterProps } from '../../../../lib/configure'; import Popover from '../../../../lib/popover'; import Field, { DynamicProps, FieldProps, Fields } from '../../data-set/Field'; import DataSet, { DataSetProps } from '../../data-set/DataSet'; import Record from '../../data-set/Record'; import { FieldIgnore, FieldType } from '../../data-set/enum'; import TextField from '../../text-field'; import { ElementProps } from '../../core/ViewComponent'; import { ButtonProps } from '../../button/Button'; import { DynamicFilterBarConfig } from '../Table'; import { TransportProps } from '../../data-set/Transport'; import TableStore from '../TableStore'; /** * 当前数据是否有值并需要选中 * @param data */ export declare function isSelect(data: any): boolean; export declare function isEqualDynamicProps(originalValue: any, newValue: any, dataSet?: DataSet, record?: Record, name?: string): boolean; /** * 提交副本数据 * @param data */ export declare function omitData(data: any): Pick<any, string | number | symbol>; /** * obj 值使用 JSON 保存、获取赋值转化 * @param value */ export declare function parseValue(value: any): any; export declare function stringifyValue(value: any): any; /** * 处理查询过滤条件 * @params */ export declare function processFilterParam(dataSet: any): void; /** * 查询字段是否禁用 * @param field 查询字段 * @param queryDataSet 查询dataSet * @returns */ export declare function fieldIsDisabled(field: Field, queryDataSet: DataSet): boolean; /** * 高级搜索字段配置类型声明 */ export interface AdvancedSearchField { name: string; /** * 字段关联表 */ tableName?: string; /** * 字段别名 */ alias?: string; /** * 字段配置来源 */ source?: 'fields' | 'queryFields' | 'other'; /** * 其他字段 & 配置覆盖 */ fieldProps?: FieldProps; } export interface TableDynamicFilterBarProps extends ElementProps { dataSet: DataSet; queryDataSet?: DataSet; queryFields: ReactElement<any>[]; queryFieldsLimit?: number; buttons?: ReactElement<ButtonProps>[]; summaryBar?: ReactElement<any>; dynamicFilterBar?: DynamicFilterBarConfig; onQuery?: () => void; onReset?: () => void; onFieldEnterDown?: ({ e, name }: { e: any; name: any; }) => void; autoQueryAfterReset?: boolean; fuzzyQuery?: boolean; fuzzyQueryOnly?: boolean; fuzzyQueryPlaceholder?: string; searchCode?: string; autoQuery?: boolean; refreshBtn?: boolean; onRefresh?: () => Promise<boolean | undefined> | boolean | undefined | void; sortableFieldNames?: string[]; advancedSearchFields?: AdvancedSearchField[]; defaultActiveKey?: string; tableStore?: TableStore; } export declare const CONDITIONSTATUS = "__CONDITIONSTATUS__"; export declare const SELECTFIELDS = "__SELECTFIELDS__"; export declare const MENUDATASET = "__MENUDATASET__"; export declare const CONDITIONDATASET = "__CONDITIONDATASET__"; export declare const OPTIONDATASET = "__OPTIONDATASET__"; export declare const FILTERMENUDATASET = "__FILTERMENUDATASET__"; export declare const MENURESULT = "__MENURESULT__"; export declare const SEARCHTEXT = "__SEARCHTEXT__"; export declare const SELECTCHANGE = "__SELECTCHANGE__"; export declare const EXPTYPE = "__EXPTYPE__"; export declare const SEARCHEXP = "__SEARCHEXP__"; export declare const NEWFILTERDATASET = "__NEWFILTERDATASET__"; export declare const ORIGINALVALUEOBJ = "__ORIGINALVALUEOBJ__"; export default class TableDynamicFilterBar extends Component<TableDynamicFilterBarProps> { static get contextType(): typeof ConfigContext; static defaultProps: { queryFieldsLimit: number; autoQueryAfterReset: boolean; fuzzyQuery: boolean; fuzzyQueryOnly: boolean; autoQuery: boolean; refreshBtn: boolean; buttons: never[]; }; context: ConfigContextValue; get prefixCls(): string; get queryFields(): React.ReactElement<any>[]; moreFields: Field[]; /** * 控制添加筛选下拉显隐 */ fieldSelectHidden: boolean; /** * 收起/展开 */ expand: boolean; /** * 弹窗显隐 */ visible: boolean; shouldLocateData: boolean; showExpandIcon: boolean; refAdvancedFilterContainer: Popover | null; refDropdown: HTMLDivElement | null; refSingleWrapper: HTMLDivElement | null; refEditors: Map<string, any>; refFilterItems: Map<string, any>; refCustomizeExpTypeEditor: TextField | null; originalConditionFields: string[]; tempFields: Fields; isTooltipShown?: boolean; constructor(props: any, context: any); componentDidMount(): void; componentWillUnmount(): void; componentWillReceiveProps(nextProps: Readonly<TableDynamicFilterBarProps>): void; processDataSetListener(flag: boolean, nextProps?: TableDynamicFilterBarProps): void; handleMouseDownOut: (e: any) => void; handleDataSetQuery({ dataSet }: { dataSet: any; }): Promise<false | undefined>; /** * queryDataSet 查询前校验事件 触发展开动态字段 * @param dataSet 查询DS * @param result */ handleDataSetValidate({ dataSet, result }: { dataSet: any; result: any; }): Promise<void>; setConditionStatus(value: any, orglValue?: object): void; setOriginalConditionFields: (code: any) => void; /** * 筛选条件更新 触发表格查询 */ handleDataSetUpdate({ record, name, oldValue, value }: { record: any; name: any; oldValue: any; value: any; }): Promise<void>; /** * queryDS 新建,初始勾选值 */ handleDataSetCreate(): void; /** * queryDS reset,初始记录 */ handleDataSetReset(): void; /** * queryDS load,兼容项目loadData([])的处理,初始化记录 */ handleDataSetLoad({ dataSet }: { dataSet: any; }): void; /** * 初始化勾选值、条件字段 * @param props */ initConditionFields(props: any): void; /** * 高级搜索字段集 */ get advancedSearchFieldProps(): { help: string | undefined; name: string; type?: FieldType | undefined; order?: import("../../data-set/enum").SortOrder | undefined; label?: React.ReactNode; labelWidth?: string | undefined; format?: string | undefined; pattern?: string | RegExp | undefined; minLength?: number | undefined; maxLength?: number | undefined; step?: string | number | import("../../date-picker/DatePicker").TimeStep | undefined; nonStrictStep?: boolean | undefined; max?: import("moment").MomentInput; min?: import("moment").MomentInput; precision?: number | undefined; numberGrouping?: boolean | undefined; formatterOptions?: import("../../number-field/NumberField").FormatNumberFuncOptions | undefined; validator?: import("../../validator/Validator").CustomValidator | undefined; required?: boolean | undefined; readOnly?: boolean | undefined; disabled?: boolean | undefined; textField?: string | undefined; valueField?: string | undefined; idField?: string | undefined; parentField?: string | undefined; trueValue?: string | number | boolean | undefined; falseValue?: string | number | boolean | undefined; options?: string | DataSet | undefined; optionsProps?: DataSetProps | ((p: DataSetProps) => DataSetProps) | undefined; group?: number | boolean | undefined; defaultValue?: any; multiple?: string | boolean | undefined; multiLine?: boolean | undefined; range?: boolean | [string, string] | undefined; unique?: string | boolean | undefined; lovCode?: string | undefined; lovPara?: object | undefined; lookupCode?: string | undefined; lookupUrl?: string | ((code: string) => string) | undefined; lovDefineUrl?: string | ((code: string) => string) | undefined; lovQueryUrl?: string | ((code: string, config: import("../../../components-dataset/interface").LovConfig | undefined, props: import("../../data-set/Transport").TransportHookProps) => string) | undefined; lookupAxiosConfig?: import("axios").AxiosRequestConfig | ((props: { params?: any; dataSet?: DataSet | undefined; record?: Record | undefined; lookupCode?: string | undefined; }) => import("axios").AxiosRequestConfig) | undefined; lovDefineAxiosConfig?: import("axios").AxiosRequestConfig | ((code: string, field?: Field | undefined) => import("axios").AxiosRequestConfig) | undefined; lovDefineBatchAxiosConfig?: ((codes: string[]) => import("axios").AxiosRequestConfig) | undefined; lovQueryAxiosConfig?: import("axios").AxiosRequestConfig | ((code: string, lovConfig?: import("../../../components-dataset/interface").LovConfig | undefined) => import("axios").AxiosRequestConfig) | undefined; lookupBatchAxiosConfig?: ((codes: string[]) => import("axios").AxiosRequestConfig) | undefined; bind?: string | undefined; dynamicProps?: DynamicProps | ((props: import("../../data-set/Field").DynamicPropsArguments) => FieldProps | undefined) | undefined; computedProps?: DynamicProps | undefined; cascadeMap?: object | undefined; currency?: string | undefined; ignore?: FieldIgnore | undefined; transformRequest?: ((value: any, record: Record) => any) | undefined; transformResponse?: ((value: any, object: any) => any) | undefined; trim?: import("../../data-set/enum").FieldTrim | undefined; defaultValidationMessages?: import("../../validator/Validator").ValidationMessages | undefined; highlight?: string | number | boolean | {} | React.ReactElement<any, string | ((props: any) => React.ReactElement<any, any> | null) | (new (props: any) => React.Component<any, any, any>)> | React.ReactNodeArray | React.ReactPortal | import("../../data-set/Field").HighlightProps | null | undefined; showCheckedStrategy?: import("../../data-set/enum").CheckedStrategy | undefined; bucketName?: string | undefined; bucketDirectory?: string | undefined; storageCode?: string | undefined; attachmentCount?: number | undefined; template?: import("../../../components-dataset/configure").AttachmentValue | undefined; fileKey?: string | undefined; fileSize?: number | undefined; useChunk?: boolean | undefined; chunkSize?: number | undefined; chunkThreads?: number | undefined; processValue?: ((value: any, range?: 0 | 1 | undefined) => any) | undefined; dateMode?: import("../../date-picker/enum").ViewMode | undefined; accept?: string[] | undefined; placeholder?: string | string[] | undefined; }[]; /** * 加载动态筛选条相关初始数据 & 存储初始值 * 1.筛选条 * 2.高级搜索 * 3.模糊搜索 * @param param */ loadConditionData({ conditionDataSet, newFilterDataSet, menuRecord, dataSet, searchText }: { conditionDataSet: any; newFilterDataSet: any; menuRecord: any; dataSet: any; searchText: any; }): void; /** * 初始筛选条数据源状态 */ initMenuDataSet(): Promise<boolean>; /** * tableFilterSuffix 预留自定义区域 */ renderSuffix(): (JSX.Element | null)[]; getPrefix(): ReactNode; /** * 注入 refEditors * @param element * @param name */ createFields(element: any, name: any): ReactElement; /** * 判断查询值是否为空 * @param value */ isEmpty(value: any): boolean; get tableFilterAdapter(): TransportProps | TableFilterAdapterProps | null | undefined; /** * 是否单行操作 */ isSingleLineOpt(): boolean; /** * 勾选 * @param code * @param record */ handleSelect: (code: any, record?: Record | undefined) => void; /** * 取消勾选 * @param code */ handleUnSelect: (code: any) => void; /** * 查询前修改提示及校验定位 */ modifiedCheckQuery(fuzzyValue?: string, fuzzyOldValue?: string, refresh?: boolean): Promise<void>; renderRefreshBtn(): ReactNode; /** * 渲染展开逻辑 * @param hidden 是否隐藏全部 */ getExpandNode(hidden: any): ReactNode; /** * 过滤比较符 * @param record * @param optionRecord * @returns */ optionsFilter(record: any, optionRecord: any): boolean; /** * 高级筛选弹窗确认 */ handleFilterOk(): Promise<void>; /** * 高级筛选弹窗取消 */ handleFilterCancel(): void; setFilterVisiable(): void; isPopupChildren(element: HTMLElement | null): boolean; handleEmitFilterCancel(e: Event | KeyboardEvent): void; saveCustomizeExpTypeEditorRef(node: TextField | null): void; saveAdvancedFilterContainerRef(node: Popover | null): void; /** * 渲染高级筛选面板 */ getAdvancedFilter(): ReactNode; getCombineSort(): ReactNode; /** * 渲染模糊搜索 */ getFuzzyQuery(): ReactNode; /** * 渲染重置按钮 */ getResetButton(): JSX.Element; /** * 筛选头 * fuzzyQuery + quickFilterMenu + resetButton + buttons */ getFilterMenu(): ReactNode; /** * 查询字段初始顺序 * 排除动态属性影响 */ get originOrderQueryFields(): Field[]; /** * 获取模糊搜索字段参数名 */ get searchText(): string; handleHelpMouseEnter(e: MouseEvent, help: string): void; handleHelpMouseLeave(): void; renderTooltipHelp(help: any): JSX.Element | undefined; /** * 渲染查询项 label * @param param * @returns */ getLabel({ field, value, record, placeholder }: { field: any; value: any; record: any; placeholder: any; }): any; /** * 渲染查询条 */ getQueryBar(): ReactNode; /** * * @param collapse * @param value 模糊查询参数 */ handleQuery(collapse?: boolean, value?: string, oldValue?: string): Promise<void>; render(): JSX.Element | ({} | undefined)[]; }