import React, { ReactNode } from 'react';
import PropTypes from 'prop-types';
import { Size } from '../../../lib/_util/enum';
import { LovViewProps } from './LovView';
import { ModalProps } from '../modal/Modal';
import DataSet, { DataSetProps } from '../data-set/DataSet';
import Record from '../data-set/Record';
import { SearchMatcher, Select, SelectProps } from '../select/Select';
import { ColumnAlign, TableQueryBarType } from '../table/enum';
import { CheckedStrategy, FieldType } from '../data-set/enum';
import { LovFieldType, SearchAction, ViewMode } from './enum';
import { ButtonProps } from '../button/Button';
import { ButtonColor, FuncType } from '../button/enum';
import { TableProps, TableQueryBarHook } from '../table/Table';
import { FieldProps } from '../data-set/Field';
import { TextFieldProps } from '../text-field/TextField';
export declare type Events = {
    [key: string]: Function;
};
export declare type LovConfigItem = {
    display?: string;
    conditionField?: string;
    conditionFieldLovCode?: string;
    conditionFieldType?: FieldType | LovFieldType;
    conditionFieldName?: string;
    conditionFieldSelectCode?: string;
    conditionFieldSelectUrl?: string;
    conditionFieldSelectTf?: string;
    conditionFieldSelectVf?: string;
    conditionFieldSequence: number;
    conditionFieldRequired?: boolean;
    gridField?: string;
    gridFieldName?: string;
    gridFieldWidth?: number;
    gridFieldAlign?: ColumnAlign;
    gridFieldSequence: number;
    fieldProps?: Partial<FieldProps>;
};
export declare type LovConfig = {
    title?: string;
    width?: number;
    height?: number;
    customUrl?: string;
    lovPageSize?: string;
    lovItems: LovConfigItem[] | null;
    treeFlag?: 'Y' | 'N';
    parentIdField?: string;
    idField?: string;
    textField?: string;
    valueField?: string;
    placeholder?: string;
    editableFlag?: 'Y' | 'N';
    queryColumns?: number;
    queryBar?: TableQueryBarType | TableQueryBarHook;
    dataSetProps?: Partial<DataSetProps>;
    tableProps?: Partial<TableProps>;
};
export interface LovProps extends SelectProps, ButtonProps {
    modalProps?: ModalProps;
    tableProps?: Partial<TableProps>;
    noCache?: boolean;
    mode?: ViewMode;
    lovEvents?: Events;
    /**
     * 触发查询变更的动作， default: input
     */
    searchAction?: SearchAction;
    /**
     * 触发查询获取记录有重复时弹出选择窗口
     * SearchAction blur 生效
     * default: false
     */
    fetchSingle?: boolean;
    /**
     * 点击查询仅存在一条数据时自动选中
     */
    autoSelectSingle?: boolean;
    showCheckedStrategy?: CheckedStrategy;
    onBeforeSelect?: (records: Record | Record[]) => boolean | undefined;
}
export default class Lov extends Select<LovProps> {
    static displayName: string;
    static propTypes: {
        modalProps: PropTypes.Requireable<object>;
        tableProps: PropTypes.Requireable<object>;
        noCache: PropTypes.Requireable<boolean>;
        fetchSingle: PropTypes.Requireable<boolean>;
        autoSelectSingle: PropTypes.Requireable<boolean>;
        /**
         * 触发查询变更的动作， default: input
         */
        searchAction: PropTypes.Requireable<SearchAction>;
        showCheckedStrategy: PropTypes.Requireable<string>;
        id: PropTypes.Requireable<string>;
        size: PropTypes.Requireable<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>;
        funcType: PropTypes.Requireable<FuncType>;
        color: PropTypes.Requireable<ButtonColor>;
        type: PropTypes.Requireable<import("../button/enum").ButtonType>;
        loading: PropTypes.Requireable<boolean>;
        href: PropTypes.Requireable<string>;
        target: PropTypes.Requireable<string>;
        wait: PropTypes.Requireable<number>;
        waitType: PropTypes.Requireable<import("../core/enum").WaitType>;
        tooltip: PropTypes.Requireable<string>;
        block: PropTypes.Requireable<boolean>;
        _inTable: PropTypes.Requireable<boolean>;
        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>;
        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>;
        combo: PropTypes.Requireable<boolean>;
        commonItem: PropTypes.Requireable<any[]>;
        maxCommonTagPlaceholder: PropTypes.Requireable<string | number | boolean | {} | PropTypes.ReactElementLike | PropTypes.ReactNodeArray>;
        maxCommonTagCount: PropTypes.Requireable<number>;
        maxCommonTagTextLength: PropTypes.Requireable<number>;
        searchable: PropTypes.Requireable<boolean>;
        searchMatcher: PropTypes.Requireable<string | ((...args: any[]) => any)>;
        paramMatcher: PropTypes.Requireable<string | ((...args: any[]) => any)>;
        primitiveValue: PropTypes.Requireable<boolean>;
        optionRenderer: PropTypes.Requireable<(...args: any[]) => any>;
        notFoundContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        pagingOptionContent: PropTypes.Requireable<PropTypes.ReactNodeLike>;
        onOption: PropTypes.Requireable<(...args: any[]) => any>;
        dropdownMatchSelectWidth: PropTypes.Requireable<boolean>;
        selectAllButton: PropTypes.Requireable<boolean | ((...args: any[]) => any)>;
        reverse: PropTypes.Requireable<boolean>;
        optionTooltip: PropTypes.Requireable<string>;
    };
    static defaultProps: {
        clearButton: boolean;
        checkValueOnOptionsChange: boolean;
        dropdownMatchSelectWidth: boolean;
        searchAction: SearchAction;
        fetchSingle: boolean;
        viewMode: string;
        suffixCls: string;
        combo: boolean;
        onOption: ({ record }: {
            record: any;
        }) => {
            disabled: any;
        };
        selectAllButton: boolean;
        trigger: import("../trigger/enum").Action[];
        popupPlacement: string;
        triggerShowDelay: number; /**
         * 触发查询获取记录有重复时弹出选择窗口
         * SearchAction blur 生效
         * default: false
         */
        triggerHiddenDelay: number;
        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;
    };
    modal: any;
    fetched?: boolean;
    searching?: boolean;
    get searchMatcher(): SearchMatcher;
    get searchable(): boolean;
    get lovCode(): string | undefined;
    get popup(): boolean;
    /**
     * 点击查询仅存在一条数据时自动选中
     */
    get autoSelectSingle(): boolean | undefined;
    get options(): DataSet;
    getSearchFieldProps(): TextFieldProps;
    isSearchFieldInPopup(): boolean | undefined;
    isEditable(): boolean;
    getPopupLovView(): JSX.Element | undefined;
    getPopupContent(): ReactNode;
    beforeOpen(options: DataSet): Partial<LovViewProps> | undefined;
    afterOpen(options: DataSet, fetchSingle?: boolean): void;
    private openModal;
    setText(text?: string): void;
    /**
     * 处理 Lov input 查询参数
     * @param text
     */
    searchRemote(text?: string | string[] | undefined): void;
    handlePopupHiddenChange(hidden: boolean): void;
    handleLovViewClose(): void;
    /**
     * 关闭弹窗移除时间监听 后续废弃
     */
    handleLovViewAfterClose(): void;
    handleLovViewSelect(records: Record | Record[]): void;
    resetOptions(noCache?: boolean): boolean;
    handleKeyDown(e: any): void;
    handleBlur(e: any): void;
    getWrapperProps(): any;
    getPopupClassName(defaultClassName: string | undefined): string | undefined;
    syncValueOnBlur(value: any): void;
    getConfig(): LovConfig | undefined;
    getPlaceholders(): string[];
    getModalProps(): Partial<ModalProps>;
    getTableProps(): Partial<TableProps>;
    selectSingle(): void;
    handleOpenModal(): void;
    getOmitPropsKeys(): string[];
    getButtonProps(): ButtonProps;
    get loading(): boolean;
    getSuffix(): ReactNode;
    componentWillUnmount(): void;
    select(): void;
    handleButtonClick(e: any): void;
    renderWrapper(): ReactNode;
}
