import React from 'react';

export interface OperateConfigProps {
    menusGroup?: Object[];
    buttonsGroup?: Object[];
    moreGroup?: Object[];
}

export interface LoadConfigProps {
    onScroll?: Function;
    distanceToLoad?: number;
}
export interface EmitChangeProps {
    emitChangeCell: Function;
    emitChangeRow?: Function;
    emitChangeColumns?: Function;
    emitChangeOperate?: Function;
}
export interface TableProps extends LoadConfigProps {
    columns: any[];
    dataSource: any[];
    rowClassName?: string | Function;
    rowStyle?: Object | Function;
    rowRenderer?: Function;
    bordered?: boolean;
    height?: number;
    width?: number;
    emitChangeCell: Function;
}
export interface TableState {
    columns: any[];
    dataSource: any[];
    tableHeight?: number;
    tableWidth?: number;
}
export interface CommonProps extends TableProps {
    operateConfig?: OperateConfigProps;
}

export interface CommonState extends TableState {}

export interface RowRendererParams {
    rowClassName?: string | Function;
    columns: Array<any>;
    rowIndex: number;
    isScrolling: boolean;
    onRowClick?: Function;
    onRowDoubleClick?: Function;
    onRowMouseOver?: Function;
    onRowMouseOut?: Function;
    onRowRightClick?: Function;
    rowData: any;
    rowStyle?: any;
    key: string;
}

export interface ColumnProps {
    type: string;
    title: string;
    width?: number;
    columnAttrObj?: any;
}

export interface BaseComponentProps {
    value: any[] | undefined;
    columnConfig: any;
    formatter?: Function;
    onChange?: Function;
    onEmitChange?: Function;
}
export interface BaseComponentState {
    // value: any[] | undefined;
    columnConfig: any;
}
export interface CellProps {
    rowIndex: number;
    columnIndex: number;
    columnConfig: any;
    rowData: any;
    cellData: any;
    emitChangeCell: Function;
    cellClassName?: string;
    cellStyle: any;
}
export interface CellState {
    status: string;
}
export interface EditCellProps {
    columns: any[];
    columnConfig: any;
    rowData: any;
    value: any[];
    tableId: number;
    cellData: any;
    rowId: number;
    component: any;
    onChange: Function;
    componentAttr?: any;
    columnObj?: any;
    record: any;
}
export interface EditCellState {
    prevProps: EditCellProps;
    columnConfig: any;
}
