import { TFunction } from 'i18next';
import { currencies } from './ultility/any/constantConfigNumeric';
import { IButtonToolbar, IToolbarTemplate } from './ultility/Export/InterfaceExport';
import { ColumnsTable, ColumnTable } from 'es-grid-template/lib/grid-component/type';
import { IFDataSetup } from './ultility/any/ISetup';
import { IFColumnSelectTable } from './component/export';
import { CommandItem } from 'rc-master-ui/es/table/interface';
export interface IBreadCrumbsNotLinkProps {
    breadCrumbTitle?: string;
    breadCrumbActive: string;
    breadCrumbParent?: {
        link?: string;
        title: string;
    }[];
}
export interface IHeaderToolbar {
    breadCrumb: IBreadCrumbsNotLinkProps;
    buttons?: IButtonToolbar[];
    CanPer: any;
    t: TFunction;
}
/**
 * Template dùng cho màn hình giao diện xem danh sách bên ngoài
 * @param toolbarTemplate là các lựa chọn tìm kiếm được đặt cạnh ô tìm kiếm
 * @param paramToolbar là các tham số hình thành toolbarTemplate
 * @param api là api lấy dữ liệu, apiGetDataView: lấy dữ liệu, apiGetOption: lấy danh sách option, apiGetColumns: lấy danh sách cột, vd: api.configApi.pogetdataview
 * @param stateId là viewId của bảng, vd: 'PurchaseRequest, PurchaseOrder, ...'
 * @param viewIdTable là viewId của bảng, vd: 'PurchaseRequest, PurchaseOrder, ...'
 * @param currentPageDefault là trang mặc định khi load lần đầu, vd: 1
 * @param rowsPerPageDefault là số dòng mặc định khi load lần đầu, vd: 100
 * @param queryOrderDefault là thuộc tính sắp xếp mặc định, vd: 'Id desc'
 * @param querySelectDefault là các tham số tìm kiếm mặc định, vd: [{ key: 'PurchaseRequestId', value: 1, ope: '==', predicate: ';' }]
 * @param queryKeyDataView là các tham số ảnh hưởng đến việc tải lại dữ liệu của bảng, vd: ['PurchaseRequestId', 'PurchaseOrderCode', ...]
 * @param isSelectMulti là chọn nhiều dòng hay không, vd: true
 * @param canContextMenuItems là các lựa chọn của context menu, vd: ['Copy', 'Paste', ...]
 * @param handleContextMenuClick là hàm xử lý khi click vào context menu, vd: (props: any) => void
 * @param handleDoubleContextMenuClick là hàm xử lý khi double click vào context menu, vd: (props: any) => void
 * @param rowSelected là dữ liệu của dòng được chọn
 * @param dataSelected là dữ liệu của các dòng đã được chọn
 * @param dataSourceFilter là dữ liệu của các ô tìm kiếm của cột loại checkbox
 * @param listContextHide là danh sách các context menu bị ẩn
 * @param contextMenuOpen là hàm xử lý khi mở context menu, vd: (props: any) => void
 * @param stateId là viewId của bảng, vd: 'PurchaseRequest, PurchaseOrder, ...'
 * @param viewIdTable là ....
 * @param height là chiều cao của bảng
 * @param t là hàm dịch ngôn ngữ
 * @param localeLanguage là hàm dịch ngôn ngữ
 * @param hasIndex hiện số thứ tự
 * @param breakText cho phép text xuống dòng
 * @param showColumnChoose ẩn/hiện
 * @param typeCheckbox loại checkbox checkbox
 * @param rowSelection
 * @param hideSelectAll ẩn/hiện select all
 * @param dataSource dữ liệu của bảng (khi truyền vào sẽ không gọi dữ liệu mặc định)
 * @param totalCount tổng số bản ghi (khi truyền vào sẽ không gọi dữ liệu mặc định)
 * @param stateChildId Mã các bảng con vd ['Table1', 'Table2'], bảng con đính kém: 'AttachFile'
 * @param titleChild Tiêu đề của tabChild
*/
export type IOnGroup = {
    columnGrouped: string[];
    columns: ColumnTable[];
    flattenColumns: ColumnTable[];
};
export type IGroupSetting = {
    client?: boolean;
    onGroup?: (props: IOnGroup) => void;
    hiddenColumnGroup?: boolean;
    showGroupIcon?: boolean;
    unClearableLevel?: 1 | 2 | 3 | undefined;
};
interface IGroup {
    groupAble?: boolean;
    groupColumns?: string[];
    groupSetting?: IGroupSetting;
}
export interface IStateChild {
    hidden?: boolean;
    /**Mã bảng*/
    stateId: string;
    height?: number;
    total?: number;
    /**Tên tab*/
    stateName: string;
    /**Các tham số tìm kiếm mặc định*/
    querySelectDefault?: IQueryFilter[];
    /**Danh sách dữ liệu được truyền vào (không bắt buộc)*/
    dataSource?: any[];
    /**Object tính tổng tất cả danh sách*/
    sumTotal?: any;
    /**Danh sách khai báo cột được truyền vào (không bắt buộc)*/
    columns?: ColumnTable[];
    /**Có hiển thị tổng số bản ghi không*/
    isShowTotal?: boolean;
    /**Tổng số bản ghi*/
    totalCount?: number;
    /**Có filter theo cột không*/
    allowFiltering?: boolean;
    /**Có sắp xếp theo cột không*/
    allowSortering?: boolean;
    /**Có phân trang không*/
    allowPaging?: boolean;
    /**Có co kéo động rộng cột không*/
    allowResizing?: boolean;
    /**Loại ngắt văn bản xuống dòng*/
    breakText?: 'Content' | 'Header' | 'Both';
    /**Có cột STT không*/
    hasIndex?: boolean;
    /**Có in không*/
    isPrint?: boolean;
    /**Ẩn/hiện hàng tính tổng*/
    summary?: boolean;
    /**Có hiện thanh công cụ tìm kiếm không*/
    isShowSearch?: boolean;
    /**Cho phép dùng filter scroll không*/
    infiniteScroll?: boolean;
    /**Danh sách nút*/
    buttons?: IButtonToolbar[];
    /**Dữ liệu của dòng được chọn*/
    rowSelected?: any;
    /**Dữ liệu của các dòng đã được chọn*/
    dataSelected?: any;
    /**Thêm class css cho hàng*/
    rowClassName?: any;
    /**Nội dung hiển thị thay thế tabcontent*/
    content?: any;
    /**Loại chọn hàng*/
    typeCheckbox?: 'checkbox' | 'radio' | undefined;
    /**Hàm sau khi dữ liệu thay đổi*/
    onDataChange?: (data: any, setData: any) => void;
    /**Hàm sau khi dữ liệu cột thay đổi*/
    onColumnChange?: (column: ColumnsTable, setColumn: any) => void;
    /**Có group không*/
    group?: IGroup;
    /**Khai báo thanh toolbar*/
    toolbarTemplate?: any;
    /**Khi các tham số tìm kiếm thay đổi*/
    onChangeParam?: (item: {
        keyword?: string;
        pageSize?: number;
        pageNumber?: number;
        queryFilter?: any[];
        queryOrder?: any[];
    }) => void;
    /**Cài đặt lựa chọn*/
    selectionSetting?: {
        /**Ẩn chọn tất cả*/
        hideSelectAll?: boolean;
        /**Loại chọn hàng*/
        typeCheckbox?: 'checkbox' | 'radio' | undefined;
        /**Chọn nhiều*/
        isSelectMulti?: boolean;
        /**Vô hiệu ô check*/
        disableChekbox?: (record: any) => boolean;
        /**Kích thước cột*/
        width?: number;
    };
    attackFile?: {
        command?: CommandItem[];
        commandClick?: (item: any, data: any[]) => void;
    };
    /**Bắt đầu từ trang số bao nhiêu*/
    currentPageDefault?: number;
    /**Mặc định mỗi trang có bao nhiêu dòng*/
    rowsPerPageDefault?: number;
    /**Các lựa chọn số dòng trên mỗi trang*/
    pageSizeOptions?: number[];
    checkInitSub?: {
        checkInit1?: any;
        checkInit2?: any;
        checkInit3?: any;
        checkInit4?: any;
        checkInit5?: any;
        checkInit6?: any;
        checkInit7?: any;
        checkInit8?: any;
        checkInit9?: any;
        checkInit10?: any;
    };
    /**Hàm khi click nút expand*/
    onExpandClick?: (data: any, setData: any) => void;
}
export interface IExternalInterface {
    index?: number;
    /**Kích thước của màn hình*/
    windowSize?: any;
    /**Mã của bảng*/
    stateId: string;
    /**Tiêu đề của danh sách bảng con*/
    titleChild?: string;
    listColumn?: any;
    /**Khai báo danh sách bảng con*/
    stateChildId?: IStateChild[];
    /**Hàm khi click nút expand*/
    onExpandClick?: (data: any, setData: any) => void;
    /**Hàm sau khi dữ liệu cột thay đổi*/
    onDataChange?: (data: any[], setData: any) => void;
    /**Hàm sau khi dữ liệu cột thay đổi*/
    onColumnChange?: (column: ColumnsTable, setColumn: any) => void;
    /**Có group không*/
    group?: IGroup;
    /**Hàm được gọi khi thay đổi các tab con*/
    onChangeTabChildren?: (tab: number) => void;
    callback?: any;
    viewIdTable: string;
    /**Bắt đầu từ trang số bao nhiêu*/
    currentPageDefault?: number;
    /**Mặc định mỗi trang có bao nhiêu dòng*/
    rowsPerPageDefault?: number;
    /**Các lựa chọn số dòng trên mỗi trang*/
    pageSizeOptions?: number[];
    /**Các tham số sắp xếp mặc định*/
    queryOrderDefault?: {
        field: string;
        order: 'asc' | 'desc';
    }[];
    /**Các tham số ảnh hưởng đến việc lấy dữ liệu*/
    queryKeyDataView?: any;
    /**Tìm kiếm mặc định*/
    keyword?: any;
    /**Khai báo thanh toolbar*/
    toolbarTemplate?: any;
    /**Tham số hình thành toolbarTemplate*/
    paramToolbar?: IToolbarTemplate[];
    /**Có hiện thanh công cụ tìm kiếm không*/
    isShowSearch?: boolean;
    /**Chọn nhiều*/
    isSelectMulti?: boolean;
    /**Có cột STT không*/
    hasIndex?: boolean;
    /**Dữ liệu của các ô tìm kiếm của cột loại checkbox */
    dataSourceFilter?: any[];
    /**Hàm xử lý khi click vào context menu*/
    handleContextMenuClick?: (props: any) => void;
    /**Hàm xử lý khi double click vào context menu*/
    handleDoubleContextMenuClick?: (props: any) => void;
    /**Dữ liệu của dòng được chọn*/
    rowSelected?: any;
    /**Danh sách các context menu bị ẩn*/
    listContextHide?: any;
    listContextShow?: any;
    /**Danh sách các context menu đầu vào*/
    canContextMenuItems?: any;
    /**Hàm khi mở contextMenu*/
    contextMenuOpen?: any;
    /**Dữ liệu của các dòng đã được chọn*/
    dataSelected?: any;
    /** Chiều cao bảng*/
    height?: number;
    /**Loại ngắt văn bản xuống dòng*/
    breakText?: 'Content' | 'Header' | 'Both';
    /**Cho phép dùng filter scroll không*/
    infiniteScroll?: boolean;
    /**Hiển thị toolbar*/
    showToolbar?: boolean;
    /**Loại chọn hàng*/
    typeCheckbox?: 'checkbox' | 'radio' | undefined;
    /**Hiển thị màn loading*/
    loading?: boolean;
    /**Có hiện nút ẩn/hiện cột không*/
    showColumnChoose?: boolean;
    /**Có hiện nút help không*/
    showHelp?: boolean;
    settingTb?: ISettingTable;
    setSettingTb?: (a: ISettingTable) => void;
    /**Các tham số tìm kiếm mặc định*/
    querySelectDefault?: IQueryFilter[];
    /**Hàm biên dịch ngôn ngữ*/
    t: TFunction;
    localeLanguage?: any;
    api?: {
        apiGetColumns: any;
        apiGetOption: any;
        apiGetDataView: any;
    };
    processEnv?: {
        REACT_APP_PRODUCT_CODE?: any;
        REACT_APP_BASE_URL_CDN?: any;
        REACT_APP_BASE_URL?: any;
    };
    /**Biến kiểm tra có quy trình duyệt*/
    hasWorkflow?: boolean;
    /**Khai báo thuộc tính chức năng quy trình duyệt*/
    apiWorkflow?: {
        code: string;
        userSubject: any;
        editCommentApi: any;
        checkInitProcess: any;
        checkInitComment: any;
        getProcessApi: any;
        approveProcessApi: any;
        approveMultiProcessApi: any;
        getCommentPagingApi: any;
        addCommentApi: any;
        deleteCommentApi: any;
        getUserCorePagingApi: any;
        uploadFileApi: any;
        initProcessApi: any;
        deleteProcessApi: any;
        handleOnReset?: any;
        pagingEmployeeApi?: any;
        onApproveCompleted?: any;
        approverName?: any;
        approverId?: any;
    };
    /**Khai báo thuộc tính chức năng In*/
    printApi?: {
        defaultPrintSetting: any[];
        getListGeneralSettingApi: any;
        deleteGeneralSettingApi: any;
        updateGeneralSettingApi: any;
        printDocumentApi: any;
        isLoadOnInit?: boolean;
        exportApi: any;
        uploadFileApi: any;
        getListBoxApi: any;
        optionalField?: {
            field: string;
            label: string;
            isClearable?: boolean | undefined;
            loadOptions?: any;
            columns?: IFColumnSelectTable[] | undefined;
            fieldLabel?: string;
            fieldValue?: string;
            options: any[];
            callback: (val: any, item: any) => void;
        }[] | undefined;
        data?: any;
        apiGetData?: (type: string, name: string) => void;
        RENDER?: any;
    };
    /**Khai báo định dạng dữ liệu*/
    format?: {
        thousandSeparator?: string;
        decimalSeparator?: string;
        decimalScale?: number | undefined;
        allowNegative?: boolean;
        prefix?: string | undefined;
        suffix?: string | undefined;
        fixedDecimalScale?: boolean;
        dateFormat?: string;
        datetimeFormat?: string;
        timeFormat?: string;
        weekFormat?: string;
        monthFormat?: string;
        yearFormat?: string;
        colorNegative?: string;
    };
    /** Cấu hình phân hệ kế toán*/
    setupAcc?: IFDataSetup;
    /**Ẩn.hiện các nút mở rộng*/
    showUltilities?: boolean;
    /**Cấu hình các nút mở rộng*/
    ultilities?: {
        showExport?: boolean;
        urlExport?: string;
        showPrint?: boolean;
        showSetting?: boolean;
        template?: {
            align: string;
            template: any;
            position: string;
            visible?: boolean;
        }[];
    };
    /**Cài đặt lựa chọn*/
    selectionSetting?: {
        /**Ẩn chọn tất cả*/
        hideSelectAll?: boolean;
        /**Loại chọn hàng*/
        typeCheckbox?: 'checkbox' | 'radio' | undefined;
        /**Chọn nhiều*/
        isSelectMulti?: boolean;
        /**Vô hiệu ô check*/
        disableChekbox?: (record: any) => boolean;
        /**Kích thước cột*/
        width?: number;
        checkboxOnly?: boolean;
    };
    /**Có filter theo cột không*/
    allowFiltering?: boolean;
    /**Có sắp xếp theo cột không*/
    allowSortering?: boolean;
    /**Có phân trang không*/
    allowPaging?: boolean;
    /**Có co kéo động rộng cột không*/
    allowResizing?: boolean;
    /**Có cho filter client không*/
    allowFilterClient?: boolean;
    /**Ẩn/hiện hàng tính tổng*/
    summary?: boolean;
    /**Thêm class css cho hàng*/
    rowClassName?: any;
    /**Danh sách dữ liệu được truyền vào (không bắt buộc)*/
    dataSource?: any[];
    /**Object tính tổng tất cả danh sách*/
    sumTotal?: any;
    /**Biến kiểm tra thay đổi*/
    checkInit?: any;
    /**Danh sách biến kiểm tra thay đổi*/
    checkInitSub?: {
        checkInit1?: any;
        checkInit2?: any;
        checkInit3?: any;
        checkInit4?: any;
        checkInit5?: any;
        checkInit6?: any;
        checkInit7?: any;
        checkInit8?: any;
        checkInit9?: any;
        checkInit10?: any;
    };
    /**Danh sách khai báo cột được truyền vào (không bắt buộc)*/
    columns?: ColumnsTable<any>;
    /**Khai báo thuộc tính export excel*/
    exportExcel?: {
        /**Khai báo danh sách cột*/
        columnsExport?: ColumnTable[];
        /**Dữ liệu dùng để tìm kiếm*/
        para?: any;
        /**Dữ liệu dùng để tìm kiếm*/
        item?: {
            textSubtitle?: string;
            textTitle?: string;
            nameFile?: string;
        };
        /**api dùng để xuất excel*/
        urlExport?: string;
        dataSource?: string;
        templateExportAll?: () => React.ReactNode;
    };
    /**Tổng số bản ghi (khi truyền vào sẽ không gọi dữ liệu mặc định) */
    totalCount?: number;
    /**Ẩn/hiện select all*/
    hideSelectAll?: boolean;
    /**Khi các tham số tìm kiếm thay đổi*/
    onChangeParam?: (item: {
        keyword?: string;
        pageSize?: number;
        pageNumber?: number;
        queryFilter?: any[];
        queryOrder?: any[];
    }) => void;
    /**Khai báo thuộc tính chọn hàng*/
    rowSelection?: {
        preserveSelectedRowKeys?: boolean;
        selectedRowKeys?: any[];
        defaultSelectedRowKeys?: any[];
        onChange?: (selectedRowKeys: any[], selectedRows: any[], info: {
            type: any;
        }, selectedRow: any) => void;
        getCheckboxProps?: (record: any) => Partial<Omit<any, 'checked' | 'defaultChecked'>>;
        onSelect?: any;
        /** @deprecated This function is deprecated and should use `onChange` instead */
        onSelectMultiple?: (selected: boolean, selectedRows: any[], changeRows: any[]) => void;
        /** @deprecated This function is deprecated and should use `onChange` instead */
        onSelectAll?: (selected: boolean, selectedRows: any[], changeRows: any[]) => void;
        /** @deprecated This function is deprecated and should use `onChange` instead */
        onSelectInvert?: (selectedRowKeys: any[]) => void;
        /** @deprecated This function is deprecated and should use `onChange` instead */
        onSelectNone?: () => void;
        selections?: any[] | boolean;
        hideSelectAll?: boolean;
        fixed?: 'left' | 'right' | boolean;
        columnWidth?: string | number;
        columnTitle?: React.ReactNode | ((checkboxNode: React.ReactNode) => React.ReactNode);
        checkStrictly?: boolean;
        renderCell?: (value: boolean, record: any, index: number, originNode: React.ReactNode) => React.ReactNode | any;
        onCell?: any;
    };
    initAbility?: any;
}
export interface IQueryFilter {
    key: string;
    value: any;
    ope: string;
    predicate: string;
    isFilterNull?: boolean;
}
export type INumericFormatted = {
    value: number;
    decimalScale?: number;
    type?: ITypeNumericFormatted;
    currency?: keyof typeof currencies;
};
export type ITypeNumericFormatted = 'exchangeMoney' | 'overseaMoney' | 'unitPriceExchange' | 'unitPriceOversea' | 'quantity' | 'rate' | 'ratio' | 'allocationRatio' | 'so_cong' | 'checkbox' | 'picture' | 'color' | 'link' | 'numberToText' | 'labelColor' | undefined;
export interface ITableConfigView {
    Id?: string;
    ViewId?: string;
    ColVirtual?: string;
    ColOriginal?: string;
    TblFrom?: string;
    TblAlias?: string;
    LeftJoin?: string;
    Type?: string;
    Title?: string;
    Description?: string;
    TextAlign?: 'left' | 'center' | 'right';
    ColTemplate?: string;
    OptionTemplate?: string;
    OriginOptionTemplate?: string;
    TypeDecimal?: ITypeNumericFormatted;
    Freeze?: 'Left' | 'Right' | undefined;
    Width?: number;
    MinWidth?: number;
    MaxWidth?: number;
    SortOrder?: number;
    ColMerge?: number;
    RowMerge?: number;
    IsHidden?: boolean;
    IsActive?: boolean;
    IsSumary?: boolean;
    More?: string;
    Tree?: number;
}
export interface IConfigMore {
    widthPicture?: number;
    widthPictureHover?: number;
    heightPicture?: number;
    heightPictureHover?: number;
    isShowPrint?: boolean;
}
export interface ISettingTable {
    displayChildSidebar?: boolean;
    infiniteScroll?: boolean;
    isTree?: boolean;
    isGroup?: boolean;
    isGroupClient?: boolean;
    hiddenColumnGroup?: boolean;
    showGroupIcon?: boolean;
    showSum?: boolean;
    showSumTotal?: boolean;
    breakText?: 'Header' | 'Content' | 'Both';
}
export {};
