import { type RefObject, useMemo } from 'react'; import { showExpandColumn } from '../column.utils'; import { MRT_TableBodyRowGrabHandle } from '../body'; import { MRT_ExpandAllButton } from '../buttons/MRT_ExpandAllButton'; import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton'; import { MRT_ToggleRowActionMenuButton } from '../buttons/MRT_ToggleRowActionMenuButton'; import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox'; import { type MRT_ColumnDef, type MRT_ColumnOrderState, type MRT_GroupingState, type MRT_DefinedTableOptions, type MRT_Row, } from '../types'; interface Params = {}> { creatingRow: MRT_Row | null; columnOrder: MRT_ColumnOrderState; grouping: MRT_GroupingState; tableOptions: MRT_DefinedTableOptions; } export const useMRT_DisplayColumns = = {}>({ creatingRow, columnOrder, grouping, tableOptions, }: Params) => { return useMemo( () => ( [ (tableOptions.state?.columnOrder ?? columnOrder).includes( 'mrt-row-drag', ) && { Cell: ({ row, rowRef, table }) => ( } table={table} /> ), header: tableOptions.localization.move, size: 60, ...tableOptions.defaultDisplayColumn, ...tableOptions.displayColumnDefOptions?.['mrt-row-drag'], id: 'mrt-row-drag', }, ((tableOptions.state?.columnOrder ?? columnOrder).includes( 'mrt-row-actions', ) || (creatingRow && tableOptions.createDisplayMode === 'row')) && { Cell: ({ cell, row, table }) => ( ), header: tableOptions.localization.actions, size: 70, ...tableOptions.defaultDisplayColumn, ...tableOptions.displayColumnDefOptions?.['mrt-row-actions'], id: 'mrt-row-actions', }, (tableOptions.state?.columnOrder ?? columnOrder).includes( 'mrt-row-expand', ) && showExpandColumn( tableOptions, tableOptions.state?.grouping ?? grouping, ) && { Cell: ({ row, table }) => ( ), Header: tableOptions.enableExpandAll ? ({ table }) => : null, header: tableOptions.localization.expand, size: 60, ...tableOptions.defaultDisplayColumn, ...tableOptions.displayColumnDefOptions?.['mrt-row-expand'], id: 'mrt-row-expand', }, (tableOptions.state?.columnOrder ?? columnOrder).includes( 'mrt-row-select', ) && { Cell: ({ row, table }) => ( ), Header: tableOptions.enableSelectAll && tableOptions.enableMultiRowSelection ? ({ table }) => : null, header: tableOptions.localization.select, size: 60, ...tableOptions.defaultDisplayColumn, ...tableOptions.displayColumnDefOptions?.['mrt-row-select'], id: 'mrt-row-select', }, (tableOptions.state?.columnOrder ?? columnOrder).includes( 'mrt-row-numbers', ) && { Cell: ({ row }) => row.index + 1, Header: () => tableOptions.localization.rowNumber, header: tableOptions.localization.rowNumbers, size: 60, ...tableOptions.defaultDisplayColumn, ...tableOptions.displayColumnDefOptions?.['mrt-row-numbers'], id: 'mrt-row-numbers', }, ] as MRT_ColumnDef[] ).filter(Boolean), [ columnOrder, grouping, tableOptions.displayColumnDefOptions, tableOptions.editDisplayMode, tableOptions.enableColumnDragging, tableOptions.enableColumnFilterModes, tableOptions.enableColumnOrdering, tableOptions.enableEditing, tableOptions.enableExpandAll, tableOptions.enableExpanding, tableOptions.enableGrouping, tableOptions.enableRowActions, tableOptions.enableRowDragging, tableOptions.enableRowNumbers, tableOptions.enableRowOrdering, tableOptions.enableRowSelection, tableOptions.enableSelectAll, tableOptions.localization, tableOptions.positionActionsColumn, tableOptions.renderDetailPanel, tableOptions.renderRowActionMenuItems, tableOptions.renderRowActions, tableOptions.state?.columnOrder, tableOptions.state?.grouping, ], ); };