import React, { createContext, useEffect, useState } from 'react';
import { translateAttributes } from '../../utils/usefulFn';
import List from '../list';
import ToolBar from '../list/toolBar';
import ButtonGroup from '../list/buttonGroup';
import Style from './index.module.less';
import { useWidth } from '../../platforms/web/responsive/useWidth';
import { useFeatures } from '../../platforms/web';
import { assert } from 'oak-domain/es/utils/assert';
export const TableContext = createContext({
    tableAttributes: undefined,
    entity: undefined,
    schema: undefined,
    setTableAttributes: undefined,
    setSchema: undefined,
    onReset: undefined,
});
const ProList = (props) => {
    const { buttonGroup, entity, extraActions, onAction, disabledOp, attributes, data, loading, tablePagination, rowSelection, onReload, disableSerialNumber, title, hideDefaultButtons = false, extraContent, size = 'large', scroll, empty, opWidth, actionMaxVisibleCount, actionWrap, actionLabelMaxWidth, oakPath, } = props;
    assert(!tablePagination);
    const [tableAttributes, setTableAttributes] = useState([]);
    const features = useFeatures();
    const [schema, setSchema] = useState(undefined);
    const width = useWidth();
    const isMobile = width === 'xs';
    const resolvedLoading = loading ?? (oakPath ? !!features.runningTree.isLoading(oakPath) : false);
    const initTableAttributes = () => {
        if (schema) {
            const judgeAttributes = translateAttributes(schema, entity, attributes);
            const newTableAttributes = judgeAttributes.map((ele) => ({
                attribute: ele,
                show: true,
            }));
            setTableAttributes(newTableAttributes);
        }
    };
    useEffect(() => {
        initTableAttributes();
    }, [attributes, schema]);
    return (<TableContext.Provider value={{
            tableAttributes,
            entity: entity,
            schema,
            setTableAttributes,
            setSchema,
            onReset: () => {
                initTableAttributes();
            },
        }}>
            <div className={Style.container}>
                {!isMobile && !hideDefaultButtons && (<ToolBar title={title} extraContent={extraContent} buttonGroup={buttonGroup} reloadLoading={resolvedLoading} reload={() => {
                return onReload ? onReload() : features.runningTree.refresh(oakPath);
            }}/>)}
                {isMobile && <ButtonGroup items={buttonGroup}/>}
                <List entity={entity} extraActions={extraActions} onAction={onAction} disabledOp={disabledOp} attributes={attributes} scroll={scroll} empty={empty} data={data} loading={resolvedLoading} size={size} tablePagination={tablePagination} rowSelection={rowSelection} disableSerialNumber={disableSerialNumber} opWidth={opWidth} actionMaxVisibleCount={actionMaxVisibleCount} actionWrap={actionWrap} actionLabelMaxWidth={actionLabelMaxWidth} oakPath={oakPath}/>
            </div>
        </TableContext.Provider>);
};
export default ProList;
