@dbcdk/react-components 0.0.33 → 0.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/table/Table.d.ts +1 -1
- package/dist/components/table/Table.js +2 -2
- package/dist/components/table/Table.module.css +5 -5
- package/dist/components/table/Table.types.d.ts +2 -1
- package/dist/components/table/TanstackTable.js +3 -2
- package/dist/components/table/table.utils.d.ts +1 -0
- package/dist/components/table/table.utils.js +1 -0
- package/package.json +1 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { JSX } from 'react';
|
|
2
2
|
import type { TableProps } from './Table.types';
|
|
3
|
-
export declare function Table<T extends Record<string, any>>({ data, dataKey, columns, selectedRows, selectionMode, allRowsSelected, sortById, sortDirection, loading, emptyConfig, variant, size, viewMode, striped, fillViewport, gridTemplateColumns, toolbar, headerExtras, take, skip, totalItemsCount, paginationPlacement, showFirstLast, pageSizeOptions, getRowSeverity, onRowClick, onRowMouseEnter, onRowSelect, onSelectAllRows, onSortChange, onPageChange, ...rest }: TableProps<T>): JSX.Element;
|
|
3
|
+
export declare function Table<T extends Record<string, any>>({ data, dataKey, columns, selectedRows, selectionMode, allRowsSelected, sortById, sortDirection, loading, emptyConfig, variant, size, viewMode, striped, fillViewport, gridTemplateColumns, tableRootRef, toolbar, headerExtras, take, skip, totalItemsCount, paginationPlacement, showFirstLast, pageSizeOptions, getRowSeverity, onRowClick, onRowMouseEnter, onRowSelect, onSelectAllRows, onSortChange, onPageChange, ...rest }: TableProps<T>): JSX.Element;
|
|
@@ -9,7 +9,7 @@ import { TableLoadingBody } from './components/TableLoadingBody';
|
|
|
9
9
|
import { cx } from './table.classes';
|
|
10
10
|
import styles from './Table.module.css';
|
|
11
11
|
import { buildDefaultGridTemplate, getVisibleColumns } from './table.utils';
|
|
12
|
-
export function Table({ data, dataKey, columns, selectedRows, selectionMode = 'single', allRowsSelected, sortById, sortDirection, loading, emptyConfig, variant = 'primary', size = 'md', viewMode, striped, fillViewport = false, gridTemplateColumns, toolbar, headerExtras, take, skip, totalItemsCount, paginationPlacement = 'bottom', showFirstLast = false, pageSizeOptions, getRowSeverity, onRowClick, onRowMouseEnter, onRowSelect, onSelectAllRows, onSortChange, onPageChange, ...rest }) {
|
|
12
|
+
export function Table({ data, dataKey, columns, selectedRows, selectionMode = 'single', allRowsSelected, sortById, sortDirection, loading, emptyConfig, variant = 'primary', size = 'md', viewMode, striped, fillViewport = false, gridTemplateColumns, tableRootRef, toolbar, headerExtras, take, skip, totalItemsCount, paginationPlacement = 'bottom', showFirstLast = false, pageSizeOptions, getRowSeverity, onRowClick, onRowMouseEnter, onRowSelect, onSelectAllRows, onSortChange, onPageChange, ...rest }) {
|
|
13
13
|
const visibleColumns = useMemo(() => getVisibleColumns(columns), [columns]);
|
|
14
14
|
const selectionInputName = useId();
|
|
15
15
|
const hasSelection = Boolean(selectedRows && onRowSelect);
|
|
@@ -26,7 +26,7 @@ export function Table({ data, dataKey, columns, selectedRows, selectionMode = 's
|
|
|
26
26
|
const bodyContent = loading && !data.length ? (_jsx(TableLoadingBody, { rows: take !== null && take !== void 0 ? take : 5, columns: visibleColumns, hasSelection: hasSelection, gridStyle: gridStyle })) : (_jsx(TableBody, { data: data, dataKey: dataKey, columns: visibleColumns, gridStyle: gridStyle, striped: striped, selectedRows: selectedRows, hasSelection: hasSelection, selectionMode: selectionMode, selectionInputName: selectionInputName, viewMode: viewMode, getRowSeverity: getRowSeverity, onRowClick: onRowClick, onRowMouseEnter: onRowMouseEnter, onRowSelect: onRowSelect }));
|
|
27
27
|
const paginationEl = onPageChange && data.length > 0 ? (_jsx("div", { className: cx(styles.paginationSlot, paginationPlacement === 'top' && styles.paginationSlotTop), children: _jsx(Pagination, { itemsCount: totalItemsCount, take: take, skip: skip, onPageChange: handlePageChange, showFirstLast: showFirstLast, pageSizeOptions: pageSizeOptions }) })) : null;
|
|
28
28
|
const tableClassName = cx(styles.tableRoot, styles[variant], styles[size], getRowSeverity && styles.severityTable);
|
|
29
|
-
const tableShell = (_jsx("div", { ...rest, className: tableClassName, role: "table", "aria-rowcount": data.length, children: _jsxs("div", { className: styles.tableContent, children: [_jsx("div", { className: styles.header, role: "rowgroup", children: _jsx(TableHeader, { columns: visibleColumns, gridStyle: gridStyle, hasSelection: hasSelection, selectionMode: selectionMode, allRowsSelected: allRowsSelected, onSelectAllRows: onSelectAllRows, sortById: sortById, sortDirection: sortDirection, onSortChange: onSortChange, headerExtras: headerExtras }) }), _jsx("div", { className: styles.bodyScroll, children: !data.length && !loading ? (_jsx("div", { className: styles.emptyStateSlot, children: _jsx(TableEmptyState, { config: emptyConfig }) })) : (bodyContent) })] }) }));
|
|
29
|
+
const tableShell = (_jsx("div", { ...rest, ref: tableRootRef, className: tableClassName, role: "table", "aria-rowcount": data.length, children: _jsxs("div", { className: styles.tableContent, children: [_jsx("div", { className: styles.header, role: "rowgroup", children: _jsx(TableHeader, { columns: visibleColumns, gridStyle: gridStyle, hasSelection: hasSelection, selectionMode: selectionMode, allRowsSelected: allRowsSelected, onSelectAllRows: onSelectAllRows, sortById: sortById, sortDirection: sortDirection, onSortChange: onSortChange, headerExtras: headerExtras }) }), _jsx("div", { className: styles.bodyScroll, children: !data.length && !loading ? (_jsx("div", { className: styles.emptyStateSlot, children: _jsx(TableEmptyState, { config: emptyConfig }) })) : (bodyContent) })] }) }));
|
|
30
30
|
if (fillViewport) {
|
|
31
31
|
return (_jsxs("div", { className: styles.fillViewportRoot, style: {
|
|
32
32
|
flexDirection: paginationPlacement === 'top' ? 'column-reverse' : 'column',
|
|
@@ -193,7 +193,7 @@
|
|
|
193
193
|
align-items: flex-start;
|
|
194
194
|
justify-content: flex-start;
|
|
195
195
|
min-width: 0;
|
|
196
|
-
padding-inline: var(--spacing-sm);
|
|
196
|
+
padding-inline: calc(var(--spacing-xxs) + 2px) var(--spacing-sm);
|
|
197
197
|
padding-block: 6px;
|
|
198
198
|
cursor: pointer;
|
|
199
199
|
}
|
|
@@ -403,17 +403,17 @@
|
|
|
403
403
|
}
|
|
404
404
|
|
|
405
405
|
.severityTable {
|
|
406
|
-
--row-rail-width:
|
|
406
|
+
--row-rail-width: 2px;
|
|
407
407
|
--row-rail-gap: 10px;
|
|
408
408
|
--row-rail-offset: calc(var(--row-rail-width) + var(--row-rail-gap));
|
|
409
409
|
--row-rail-inset-block: 1px;
|
|
410
|
-
--row-rail-radius: 0
|
|
410
|
+
--row-rail-radius: 0;
|
|
411
411
|
--selection-rail-compensation: calc(var(--row-rail-offset) / 2);
|
|
412
412
|
}
|
|
413
413
|
|
|
414
414
|
.severityTable .headerCell.selectionCell,
|
|
415
415
|
.severityTable .row .selectionCell {
|
|
416
|
-
padding-inline-start:
|
|
416
|
+
padding-inline-start: calc(var(--spacing-xxs) + 2px) !important;
|
|
417
417
|
}
|
|
418
418
|
|
|
419
419
|
.severityTable .headerCell.selectionCell .selectionHitArea,
|
|
@@ -472,8 +472,8 @@
|
|
|
472
472
|
}
|
|
473
473
|
|
|
474
474
|
.severityTable .row.severity:focus-within::before {
|
|
475
|
-
inline-size: 6px;
|
|
476
475
|
opacity: 1;
|
|
476
|
+
z-index: 5;
|
|
477
477
|
}
|
|
478
478
|
|
|
479
479
|
.striped .severityTable .row.severity:nth-child(even):not(.selectedRow):not(:hover) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { HTMLAttributes, ReactNode } from 'react';
|
|
1
|
+
import type { HTMLAttributes, ReactNode, Ref } from 'react';
|
|
2
2
|
import type { PageChangeEvent } from '../../components/pagination/Pagination';
|
|
3
3
|
import type { Severity } from '../../constants/severity.types';
|
|
4
4
|
import type { ViewMode } from '../../hooks/useTableSettings';
|
|
@@ -41,6 +41,7 @@ export type TableProps<T extends Record<string, any>> = Omit<HTMLAttributes<HTML
|
|
|
41
41
|
striped?: boolean;
|
|
42
42
|
fillViewport?: boolean;
|
|
43
43
|
gridTemplateColumns?: string;
|
|
44
|
+
tableRootRef?: Ref<HTMLDivElement>;
|
|
44
45
|
toolbar?: ReactNode;
|
|
45
46
|
headerExtras?: (args: HeaderExtrasArgs<T>) => ReactNode;
|
|
46
47
|
take?: number;
|
|
@@ -4,6 +4,7 @@ import { useReactTable, getCoreRowModel, getSortedRowModel, getFilteredRowModel,
|
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import ColumnResizer from './components/column-resizer/ColumnResizer';
|
|
6
6
|
import { Table } from './Table';
|
|
7
|
+
import { DEFAULT_COLUMN_PX } from './table.utils';
|
|
7
8
|
import { buildColumnVisibilityFromVisibleIds, mapDefsToColumnItems, sortingEqual, getSortPropsFromSorting, columnItemsToIdSet, buildDistributedGridTemplateColumns, } from './tanstackTable.utils';
|
|
8
9
|
export function TanstackTable(props) {
|
|
9
10
|
const { data, dataKey, columns, sorting: controlledSorting, onSortingChange, optimisticSortingUi = true, visibleColumnIds, manualSorting, selectedRows, onRowSelect, ...tableProps } = props;
|
|
@@ -47,7 +48,7 @@ export function TanstackTable(props) {
|
|
|
47
48
|
defaultColumn: {
|
|
48
49
|
enableResizing: true,
|
|
49
50
|
minSize: 80,
|
|
50
|
-
size:
|
|
51
|
+
size: DEFAULT_COLUMN_PX,
|
|
51
52
|
},
|
|
52
53
|
});
|
|
53
54
|
const columnItems = React.useMemo(() => mapDefsToColumnItems(columns, columnVisibility), [columns, columnVisibility]);
|
|
@@ -101,5 +102,5 @@ export function TanstackTable(props) {
|
|
|
101
102
|
availableWidth,
|
|
102
103
|
});
|
|
103
104
|
}, [table, allowedIds, hasSelection, columnSizing, availableWidth]);
|
|
104
|
-
return (_jsx(
|
|
105
|
+
return (_jsx(Table, { ...tableProps, tableRootRef: containerRef, onSortChange: handleSortChange, dataKey: dataKey, data: visibleData, columns: columnItems, sortById: sortById, sortDirection: sortDirection, gridTemplateColumns: gridTemplateColumns, headerExtras: headerExtras, selectedRows: selectedRows, onRowSelect: onRowSelect }));
|
|
105
106
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ReactNode } from 'react';
|
|
2
2
|
import type { ColumnItem } from './Table.types';
|
|
3
3
|
export declare const SELECTION_COLUMN_PX: 40;
|
|
4
|
+
export declare const DEFAULT_COLUMN_PX: 150;
|
|
4
5
|
export type SortDirection = 'asc' | 'desc' | null;
|
|
5
6
|
export declare function getVisibleColumns<T>(columns: Array<ColumnItem<T>>): Array<ColumnItem<T>>;
|
|
6
7
|
export declare function getHeaderLabel(header: string | (() => ReactNode)): ReactNode;
|