import { Dispatch, ReactNode, SetStateAction } from "react";
import { IFColumnSelectTable } from "../select-table";
type ITextAlign = 'center' | 'left' | 'right';
type IEditType = 'text' | 'numeric' | 'datetime' | 'selectTree' | 'date' | 'select' | 'checkbox' | 'form' | 'color';
export type ICommandItem = {
    id: string;
    color?: string;
    tooltip?: string;
    icon?: string;
    commandTemplate?: ReactNode;
};
export type ISettingFormElement = {
    schema: any;
    labelSize?: 'label-small' | 'label-medium' | 'label-large';
    menuWidth?: number;
    menuHeight?: number;
    onFormOpen?: any;
    onFormSubmit?: any;
    displayValue?: any;
    footerTemplate?: any;
    onChangeField?: any;
    openOnFocus?: boolean;
    isClearable?: boolean;
};
export type ISettingSelectElement = {
    isClearable?: boolean;
    isMulti?: boolean;
    loadOptions?: any;
    defaultValue?: any;
    fieldValue?: string;
    fieldLabel?: string;
    options?: any[];
    widthPopup?: string | number;
    heightPopup?: string | number;
    iconGroup?: string;
    handAddNew?: any;
    validateOption?: any;
    optionsField?: string;
    columns?: IFColumnSelectTable[];
};
export type ISettingNumericElement = {
    min?: number;
    max?: number;
    fraction?: number;
};
export type IColumnTable = {
    field: string;
    headerText?: string;
    isPrimarykey?: boolean;
    isUnikey?: boolean;
    haveSum?: boolean;
    haveToolTip?: boolean;
    validate?: any;
    disabledCondition?: any;
    callback?: any;
    width?: string | number;
    minWidth?: string | number;
    maxWidth?: string | number;
    editEnable?: boolean;
    visible?: boolean;
    invisibleDisable?: boolean;
    editType?: IEditType;
    textAlign?: ITextAlign;
    fixedType?: 'left' | 'right' | undefined;
    template?: any;
    commandItems?: ICommandItem[];
    editTypeCondition?: any;
    onPaste?: any;
    onPasteValidate?: any;
    placeholder?: string;
    numericSettings?: ISettingNumericElement;
    selectSettings?: ISettingSelectElement;
    formSettings?: ISettingFormElement;
    columns?: IColumnTable[];
};
export type IFToolbarOptions = {
    align: 'left' | 'right' | 'center';
    template: any;
};
export type IFTableEditPaging = {
    allowPaging?: boolean;
    pagingClient?: boolean;
    currentPage?: number;
    setCurrentPage?: Dispatch<SetStateAction<number>>;
    setPageSize?: Dispatch<SetStateAction<number>>;
    pageSize?: number;
    totalItem?: number;
};
export type IFTableEditButton = {
    deleteAllDisable?: boolean;
    insertAfterDisable?: boolean;
    insertBeforeDisable?: boolean;
    duplicateDisable?: boolean;
};
export type IFTableEditToolbar = {
    showTopToolbar?: boolean;
    toolbarOptions?: IFToolbarOptions[];
    toolbarBottomOptions?: IFToolbarOptions[];
    showBottomToolbar?: boolean;
};
export type IFTableEditSearchSetting = {
    searchEnable?: boolean;
    searchClient?: boolean;
    searchTerm?: string;
    keyField?: string[];
    setSearchTerm?: Dispatch<SetStateAction<string>>;
};
export type IFTableEditProps = {
    idTable?: string;
    dataSource: any[];
    selectEnable?: boolean;
    defaultValue?: any;
    columns: IColumnTable[];
    setDataSource?: any;
    commandClick?: any;
    rowChange?: any;
    handleSelect?: any;
    dataSourceChange?: any;
    height?: number;
    maxHeight?: number;
    minHeight?: number;
    selectedItem?: any;
    setSelectedItem?: Dispatch<SetStateAction<any>>;
    isMulti?: boolean;
    haveSum?: boolean;
    editDisable?: boolean;
    addDisable?: boolean;
    decimalSeparator?: string;
    thousandSeparator?: string;
    pagingSetting?: IFTableEditPaging;
    buttonSetting?: IFTableEditButton;
    toolbarSetting?: IFTableEditToolbar;
    searchSetting?: IFTableEditSearchSetting;
};
export type IFPageSize = {
    pageSize: number;
};
export type IFCurrentPage = {
    currentPage: number;
};
export type IFCurrentPageConfig = {
    currentPage: number;
    oldPage: number;
};
export type IHeaderColumnTable = {
    field: string;
    headerText?: string;
    width?: string | number;
    minWidth?: string | number;
    maxWidth?: string | number;
    visible?: boolean;
    rowspan?: number;
    columns?: IColumnTable[];
    textAlign?: ITextAlign;
    fixedType?: 'left' | 'right' | undefined;
    index?: number;
};
export {};
