diff --git a/src/DataTable/DataTable.tsx b/src/DataTable/DataTable.tsx index 90de6dde..a6e3ac46 100644 --- a/src/DataTable/DataTable.tsx +++ b/src/DataTable/DataTable.tsx @@ -137,6 +137,11 @@ function DataTable(props: TableProps): JSX.Element { defaultSortColumn, } = useColumns(columns, onColumnOrderChange, defaultSortFieldId, defaultSortAsc); + const freezedColumns = React.useMemo(() => { + const index = tableColumns.findIndex(column => column.freeze); + return tableColumns.slice(0, index + 1); + }, [tableColumns]); + const [ { rowsPerPage, @@ -448,16 +453,138 @@ function DataTable(props: TableProps): JSX.Element { {subHeaderComponent} )} - - - - {progressPending && !persistTableHead && {progressComponent}} - +
+ + + {progressPending && !persistTableHead && {progressComponent}} + + + {showTableHead() && ( + + + {keepExpandableFirst ? ( + <> + {expandableHeaderCol} + {selectableHeaderCol} + + ) : ( + <> + {selectableHeaderCol} + {expandableHeaderCol} + + )} + + {tableColumns.map(column => ( + + ))} + + + )} + + {!sortedData.length && !progressPending && {noDataComponent}} + + {progressPending && persistTableHead && {progressComponent}} + + {!progressPending && sortedData.length > 0 && ( + + {tableRows.map((row, i) => { + const key = prop(row as TableRow, keyField) as string | number; + const id = isEmpty(key) ? i : key; + const selected = isRowSelected(row, selectedRows, keyField); + const expanded = isRowExpanded(row, expandedRows, keyField); + const expanderExpander = !!(expandableRows && expandableRowExpanded && expandableRowExpanded(row)); + const expanderDisabled = !!(expandableRows && expandableRowDisabled && expandableRowDisabled(row)); + + return ( + + ); + })} + + )} +
+ {footer &&
{footer}
} +
+
+ +
{showTableHead() && ( @@ -474,7 +601,7 @@ function DataTable(props: TableProps): JSX.Element { )} - {tableColumns.map(column => ( + {freezedColumns.slice(0, 3).map(column => ( (props: TableProps): JSX.Element { )} - {!sortedData.length && !progressPending && {noDataComponent}} - - {progressPending && persistTableHead && {progressComponent}} - {!progressPending && sortedData.length > 0 && ( {tableRows.map((row, i) => { @@ -522,7 +645,7 @@ function DataTable(props: TableProps): JSX.Element { key={id} keyField={keyField} data-row-id={id} - columns={tableColumns} + columns={freezedColumns} row={row} rowCount={sortedData.length} rowIndex={i} @@ -570,8 +693,8 @@ function DataTable(props: TableProps): JSX.Element { )}
{footer &&
{footer}
} - - +
+
{enabledPagination && (
diff --git a/src/DataTable/types.ts b/src/DataTable/types.ts index 9c03b98c..57ba2332 100644 --- a/src/DataTable/types.ts +++ b/src/DataTable/types.ts @@ -151,6 +151,7 @@ export interface TableColumn extends TableColumnBase { format?: Format | undefined; selector?: Selector; sortFunction?: ColumnSortFunction; + freeze?: boolean; } export interface ConditionalStyles {