import { formatClassName } from "../libs/utils/common";
import { CraftTableComponentProps } from "../types/table";
import TableBody from "./table-body/table-body";
import TableHead from "./table-head/table-head";

function Table<T>({
  table,
  activeTab,
  featureOptions,
  NestedComponent,
  columnOrder,
  isCompactTable,
  tableStates,
  filterSettingStates,
  onSaveSettings,
}: CraftTableComponentProps<T>) {
  const { striped } = featureOptions;

  return (
    <table
      className={formatClassName(
        `ts__table ${striped ? "ts--striped" : ""} ${
          isCompactTable ? "ts--compact" : ""
        }`
      )}
    >
      <TableHead
        table={table}
        activeTab={activeTab}
        featureOptions={featureOptions}
        columnOrder={columnOrder}
        tableStates={tableStates}
        filterSettingStates={filterSettingStates}
        onSaveSettings={onSaveSettings}
      />
      <TableBody
        table={table}
        featureOptions={featureOptions}
        NestedComponent={NestedComponent}
        columnOrder={columnOrder}
        tableStates={tableStates}
      />
    </table>
  );
}

export default Table;
