react-science 11.1.0 → 11.2.0
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/lib/components/table/table_header.d.ts +2 -0
- package/lib/components/table/table_header.d.ts.map +1 -1
- package/lib/components/table/table_header.js +2 -2
- package/lib/components/table/table_header.js.map +1 -1
- package/lib/components/table/table_header_cell.d.ts +5 -1
- package/lib/components/table/table_header_cell.d.ts.map +1 -1
- package/lib/components/table/table_header_cell.js +19 -11
- package/lib/components/table/table_header_cell.js.map +1 -1
- package/lib/components/table/table_root.d.ts +5 -0
- package/lib/components/table/table_root.d.ts.map +1 -1
- package/lib/components/table/table_root.js +2 -2
- package/lib/components/table/table_root.js.map +1 -1
- package/package.json +1 -1
- package/src/components/table/table_header.tsx +8 -2
- package/src/components/table/table_header_cell.tsx +37 -19
- package/src/components/table/table_root.tsx +11 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { Header, RowData } from '@tanstack/react-table';
|
|
2
|
+
import type { HeaderCellRenderer } from './table_header_cell.js';
|
|
2
3
|
interface TableHeaderProps<TData extends RowData> {
|
|
3
4
|
headers: Array<Header<TData, unknown>>;
|
|
4
5
|
sticky: boolean;
|
|
6
|
+
renderHeaderCell?: HeaderCellRenderer<TData>;
|
|
5
7
|
}
|
|
6
8
|
export declare function TableHeader<TData extends RowData>(props: TableHeaderProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
7
9
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_header.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"table_header.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_header.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAG7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAUjE,UAAU,gBAAgB,CAAC,KAAK,SAAS,OAAO;IAC9C,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IACvC,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;CAC9C;AAED,wBAAgB,WAAW,CAAC,KAAK,SAAS,OAAO,EAC/C,KAAK,EAAE,gBAAgB,CAAC,KAAK,CAAC,2CAgB/B"}
|
|
@@ -7,7 +7,7 @@ const headerStyle = {
|
|
|
7
7
|
backgroundColor: 'white',
|
|
8
8
|
};
|
|
9
9
|
export function TableHeader(props) {
|
|
10
|
-
const { headers, sticky } = props;
|
|
11
|
-
return (_jsx("thead", { style: sticky ? headerStyle : undefined, children: _jsx("tr", { children: headers.map((header) => (_jsx(TableHeaderCell, { header: header }, header.id))) }) }));
|
|
10
|
+
const { headers, sticky, renderHeaderCell } = props;
|
|
11
|
+
return (_jsx("thead", { style: sticky ? headerStyle : undefined, children: _jsx("tr", { children: headers.map((header) => (_jsx(TableHeaderCell, { header: header, renderHeaderCell: renderHeaderCell }, header.id))) }) }));
|
|
12
12
|
}
|
|
13
13
|
//# sourceMappingURL=table_header.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_header.js","sourceRoot":"","sources":["../../../src/components/table/table_header.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"table_header.js","sourceRoot":"","sources":["../../../src/components/table/table_header.tsx"],"names":[],"mappings":";AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,WAAW,GAAkB;IACjC,QAAQ,EAAE,QAAQ;IAClB,GAAG,EAAE,CAAC;IACN,MAAM,EAAE,EAAE;IACV,eAAe,EAAE,OAAO;CACzB,CAAC;AAQF,MAAM,UAAU,WAAW,CACzB,KAA8B;IAE9B,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IACpD,OAAO,CACL,gBAAO,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,YAC5C,uBACG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CACvB,KAAC,eAAe,IAEd,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,gBAAgB,IAF7B,MAAM,CAAC,EAAE,CAGd,CACH,CAAC,GACC,GACC,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { Header, RowData } from '@tanstack/react-table';
|
|
2
|
+
import type { HTMLAttributes, ReactNode } from 'react';
|
|
3
|
+
type ThProps = Pick<HTMLAttributes<HTMLTableCellElement>, 'style' | 'onClick' | 'children'>;
|
|
4
|
+
export type HeaderCellRenderer<TData extends RowData> = (thProps: ThProps, header: Header<TData, unknown>) => ReactNode;
|
|
2
5
|
interface TableHeaderCellProps<TData extends RowData> {
|
|
3
6
|
header: Header<TData, unknown>;
|
|
7
|
+
renderHeaderCell?: HeaderCellRenderer<TData>;
|
|
4
8
|
}
|
|
5
|
-
export declare function TableHeaderCell<TData extends RowData>(props: TableHeaderCellProps<TData>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export declare function TableHeaderCell<TData extends RowData>(props: TableHeaderCellProps<TData>): string | number | boolean | Iterable<ReactNode> | import("react/jsx-runtime").JSX.Element | null | undefined;
|
|
6
10
|
export {};
|
|
7
11
|
//# sourceMappingURL=table_header_cell.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_header_cell.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_header_cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"table_header_cell.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_header_cell.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAiB,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEtE,KAAK,OAAO,GAAG,IAAI,CACjB,cAAc,CAAC,oBAAoB,CAAC,EACpC,OAAO,GAAG,SAAS,GAAG,UAAU,CACjC,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,KAAK,SAAS,OAAO,IAAI,CACtD,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,KAC3B,SAAS,CAAC;AAEf,UAAU,oBAAoB,CAAC,KAAK,SAAS,OAAO;IAClD,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAC/B,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;CAC9C;AAED,wBAAgB,eAAe,CAAC,KAAK,SAAS,OAAO,EACnD,KAAK,EAAE,oBAAoB,CAAC,KAAK,CAAC,gHASnC"}
|
|
@@ -1,19 +1,27 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { flexRender } from '@tanstack/react-table';
|
|
3
3
|
export function TableHeaderCell(props) {
|
|
4
|
-
const { header } = props;
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const { header, renderHeaderCell } = props;
|
|
5
|
+
const thProps = getThProps(header);
|
|
6
|
+
if (renderHeaderCell) {
|
|
7
|
+
return renderHeaderCell(thProps, header);
|
|
8
|
+
}
|
|
9
|
+
return _jsx("th", { ...thProps });
|
|
10
|
+
}
|
|
11
|
+
function getThProps(header) {
|
|
12
|
+
const sorted = header.column.getIsSorted();
|
|
13
|
+
const canSort = header.column.getCanSort();
|
|
8
14
|
const style = {
|
|
9
15
|
position: 'relative',
|
|
10
16
|
cursor: canSort ? 'pointer' : undefined,
|
|
11
17
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
const onClick = canSort ? header.column.getToggleSortingHandler() : undefined;
|
|
19
|
+
const children = (_jsxs("div", { style: { display: 'flex', flexDirection: 'row', gap: '5px' }, children: [_jsx("div", { children: flexRender(header.column.columnDef.header, header.getContext()) }), sorted
|
|
20
|
+
? {
|
|
21
|
+
asc: '🔼',
|
|
22
|
+
desc: '🔽',
|
|
23
|
+
}[sorted]
|
|
24
|
+
: null] }));
|
|
25
|
+
return { style, children, onClick };
|
|
18
26
|
}
|
|
19
27
|
//# sourceMappingURL=table_header_cell.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_header_cell.js","sourceRoot":"","sources":["../../../src/components/table/table_header_cell.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"table_header_cell.js","sourceRoot":"","sources":["../../../src/components/table/table_header_cell.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAkBnD,MAAM,UAAU,eAAe,CAC7B,KAAkC;IAElC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAC3C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEnC,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,gBAAQ,OAAO,GAAI,CAAC;AAC7B,CAAC;AAED,SAAS,UAAU,CACjB,MAA8B;IAE9B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAkB;QAC3B,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KACxC,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,QAAQ,GAAG,CACf,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,aAC/D,wBACG,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,GAC5D,EACL,MAAM;gBACL,CAAC,CAAC;oBACE,GAAG,EAAE,IAAI;oBACT,IAAI,EAAE,IAAI;iBACX,CAAC,MAAM,CAAC;gBACX,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AACtC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/** @jsxImportSource @emotion/react */
|
|
2
2
|
import type { RowData, TableOptions } from '@tanstack/react-table';
|
|
3
3
|
import type { TableHTMLAttributes } from 'react';
|
|
4
|
+
import type { HeaderCellRenderer } from './table_header_cell.js';
|
|
4
5
|
import type { TableColumnDef, TableRowTrRenderer } from './table_utils.js';
|
|
5
6
|
interface TableBaseProps<TData extends RowData> {
|
|
6
7
|
data: TData[];
|
|
@@ -42,6 +43,10 @@ interface TableBaseProps<TData extends RowData> {
|
|
|
42
43
|
* Make sure to spread the passed `trProps` onto the rendered `<tr>` element.
|
|
43
44
|
*/
|
|
44
45
|
renderRowTr?: TableRowTrRenderer<TData>;
|
|
46
|
+
/**
|
|
47
|
+
* Override the columns' header cell rendering.
|
|
48
|
+
*/
|
|
49
|
+
renderHeaderCell?: HeaderCellRenderer<TData>;
|
|
45
50
|
}
|
|
46
51
|
interface RegularTableProps<TData extends RowData> extends TableBaseProps<TData> {
|
|
47
52
|
virtualizeRows?: false | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_root.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_root.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAItC,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAOnE,OAAO,KAAK,EAAwB,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAKvE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAc3E,UAAU,cAAc,CAAC,KAAK,SAAS,OAAO;IAC5C,IAAI,EAAE,KAAK,EAAE,CAAC;IACd;;OAEG;IAEH,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,UAAU,CAAC,EAAE,IAAI,CACf,YAAY,CAAC,KAAK,CAAC,EACnB,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,mBAAmB,CAC7D,CAAC;IACF,UAAU,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,CAAC;IACrE;;;OAGG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"table_root.d.ts","sourceRoot":"","sources":["../../../src/components/table/table_root.tsx"],"names":[],"mappings":"AAAA,sCAAsC;AAItC,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAOnE,OAAO,KAAK,EAAwB,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAKvE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAc3E,UAAU,cAAc,CAAC,KAAK,SAAS,OAAO;IAC5C,IAAI,EAAE,KAAK,EAAE,CAAC;IACd;;OAEG;IAEH,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;IAC3C;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB,UAAU,CAAC,EAAE,IAAI,CACf,YAAY,CAAC,KAAK,CAAC,EACnB,MAAM,GAAG,SAAS,GAAG,iBAAiB,GAAG,mBAAmB,CAC7D,CAAC;IACF,UAAU,CAAC,EAAE,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,CAAC;IACrE;;;OAGG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACxC;;OAEG;IACH,gBAAgB,CAAC,EAAE,kBAAkB,CAAC,KAAK,CAAC,CAAC;CAC9C;AAED,UAAU,iBAAiB,CAAC,KAAK,SAAS,OAAO,CAC/C,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7B,cAAc,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CACpC;AAED,UAAU,qBAAqB,CAAC,KAAK,SAAS,OAAO,CACnD,SAAQ,cAAc,CAAC,KAAK,CAAC;IAC7B,cAAc,EAAE,IAAI,CAAC;IACrB;;;;OAIG;IACH,kBAAkB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/C;AAED,MAAM,MAAM,UAAU,CAAC,KAAK,SAAS,OAAO,IACxC,iBAAiB,CAAC,KAAK,CAAC,GACxB,qBAAqB,CAAC,KAAK,CAAC,CAAC;AAEjC,wBAAgB,KAAK,CAAC,KAAK,SAAS,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,oDA6DpE"}
|
|
@@ -18,7 +18,7 @@ const CustomHTMLTable = styled(HTMLTable, {
|
|
|
18
18
|
}
|
|
19
19
|
`;
|
|
20
20
|
export function Table(props) {
|
|
21
|
-
const { data, columns, bordered = false, compact = false, interactive = false, striped = false, stickyHeader = false, reactTable, tableProps, renderRowTr, virtualizeRows, } = props;
|
|
21
|
+
const { data, columns, bordered = false, compact = false, interactive = false, striped = false, stickyHeader = false, reactTable, tableProps, renderRowTr, renderHeaderCell, virtualizeRows, } = props;
|
|
22
22
|
const scrollElementRef = useRef(null);
|
|
23
23
|
const columnDefs = useTableColumns(columns);
|
|
24
24
|
const table = useReactTable({
|
|
@@ -35,7 +35,7 @@ export function Table(props) {
|
|
|
35
35
|
estimateSize: (props.virtualizeRows && props.estimatedRowHeight) || (() => 0),
|
|
36
36
|
overscan: 5,
|
|
37
37
|
});
|
|
38
|
-
return (_jsx(Container, { virtualizeRows: virtualizeRows, scrollRef: scrollElementRef, children: _jsxs(CustomHTMLTable, { bordered: bordered, compact: compact, interactive: interactive, striped: striped, ...tableProps, children: [_jsx(TableHeader, { sticky: stickyHeader, headers: table.getFlatHeaders() }), _jsx(TableBody, { rows: table.getRowModel().rows, renderRowTr: renderRowTr, virtualizer: tanstackVirtualizer, virtualizeRows: virtualizeRows })] }) }));
|
|
38
|
+
return (_jsx(Container, { virtualizeRows: virtualizeRows, scrollRef: scrollElementRef, children: _jsxs(CustomHTMLTable, { bordered: bordered, compact: compact, interactive: interactive, striped: striped, ...tableProps, children: [_jsx(TableHeader, { sticky: stickyHeader, headers: table.getFlatHeaders(), renderHeaderCell: renderHeaderCell }), _jsx(TableBody, { rows: table.getRowModel().rows, renderRowTr: renderRowTr, virtualizer: tanstackVirtualizer, virtualizeRows: virtualizeRows })] }) }));
|
|
39
39
|
}
|
|
40
40
|
const ScrollRefDiv = styled.div `
|
|
41
41
|
height: 100%;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table_root.js","sourceRoot":"","sources":["../../../src/components/table/table_root.tsx"],"names":[],"mappings":";AAAA,sCAAsC;AAEtC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,MAAM,MAAM,iBAAiB,CAAC;AAErC,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"table_root.js","sourceRoot":"","sources":["../../../src/components/table/table_root.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Header, RowData } from '@tanstack/react-table';
|
|
2
2
|
import type { CSSProperties } from 'react';
|
|
3
3
|
|
|
4
|
+
import type { HeaderCellRenderer } from './table_header_cell.js';
|
|
4
5
|
import { TableHeaderCell } from './table_header_cell.js';
|
|
5
6
|
|
|
6
7
|
const headerStyle: CSSProperties = {
|
|
@@ -13,17 +14,22 @@ const headerStyle: CSSProperties = {
|
|
|
13
14
|
interface TableHeaderProps<TData extends RowData> {
|
|
14
15
|
headers: Array<Header<TData, unknown>>;
|
|
15
16
|
sticky: boolean;
|
|
17
|
+
renderHeaderCell?: HeaderCellRenderer<TData>;
|
|
16
18
|
}
|
|
17
19
|
|
|
18
20
|
export function TableHeader<TData extends RowData>(
|
|
19
21
|
props: TableHeaderProps<TData>,
|
|
20
22
|
) {
|
|
21
|
-
const { headers, sticky } = props;
|
|
23
|
+
const { headers, sticky, renderHeaderCell } = props;
|
|
22
24
|
return (
|
|
23
25
|
<thead style={sticky ? headerStyle : undefined}>
|
|
24
26
|
<tr>
|
|
25
27
|
{headers.map((header) => (
|
|
26
|
-
<TableHeaderCell
|
|
28
|
+
<TableHeaderCell
|
|
29
|
+
key={header.id}
|
|
30
|
+
header={header}
|
|
31
|
+
renderHeaderCell={renderHeaderCell}
|
|
32
|
+
/>
|
|
27
33
|
))}
|
|
28
34
|
</tr>
|
|
29
35
|
</thead>
|
|
@@ -1,39 +1,57 @@
|
|
|
1
1
|
import type { Header, RowData } from '@tanstack/react-table';
|
|
2
2
|
import { flexRender } from '@tanstack/react-table';
|
|
3
|
-
import type { CSSProperties } from 'react';
|
|
3
|
+
import type { CSSProperties, HTMLAttributes, ReactNode } from 'react';
|
|
4
|
+
|
|
5
|
+
type ThProps = Pick<
|
|
6
|
+
HTMLAttributes<HTMLTableCellElement>,
|
|
7
|
+
'style' | 'onClick' | 'children'
|
|
8
|
+
>;
|
|
9
|
+
|
|
10
|
+
export type HeaderCellRenderer<TData extends RowData> = (
|
|
11
|
+
thProps: ThProps,
|
|
12
|
+
header: Header<TData, unknown>,
|
|
13
|
+
) => ReactNode;
|
|
4
14
|
|
|
5
15
|
interface TableHeaderCellProps<TData extends RowData> {
|
|
6
16
|
header: Header<TData, unknown>;
|
|
17
|
+
renderHeaderCell?: HeaderCellRenderer<TData>;
|
|
7
18
|
}
|
|
8
19
|
|
|
9
20
|
export function TableHeaderCell<TData extends RowData>(
|
|
10
21
|
props: TableHeaderCellProps<TData>,
|
|
11
22
|
) {
|
|
12
|
-
const { header } = props;
|
|
13
|
-
const
|
|
23
|
+
const { header, renderHeaderCell } = props;
|
|
24
|
+
const thProps = getThProps(header);
|
|
14
25
|
|
|
15
|
-
|
|
16
|
-
|
|
26
|
+
if (renderHeaderCell) {
|
|
27
|
+
return renderHeaderCell(thProps, header);
|
|
28
|
+
}
|
|
29
|
+
return <th {...thProps} />;
|
|
30
|
+
}
|
|
17
31
|
|
|
32
|
+
function getThProps<TData extends RowData>(
|
|
33
|
+
header: Header<TData, unknown>,
|
|
34
|
+
): ThProps {
|
|
35
|
+
const sorted = header.column.getIsSorted();
|
|
36
|
+
const canSort = header.column.getCanSort();
|
|
18
37
|
const style: CSSProperties = {
|
|
19
38
|
position: 'relative',
|
|
20
39
|
cursor: canSort ? 'pointer' : undefined,
|
|
21
40
|
};
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
<
|
|
25
|
-
|
|
26
|
-
onClick={canSort ? column.getToggleSortingHandler() : undefined}
|
|
27
|
-
>
|
|
28
|
-
<div style={{ display: 'flex', flexDirection: 'row', gap: '5px' }}>
|
|
41
|
+
const onClick = canSort ? header.column.getToggleSortingHandler() : undefined;
|
|
42
|
+
const children = (
|
|
43
|
+
<div style={{ display: 'flex', flexDirection: 'row', gap: '5px' }}>
|
|
44
|
+
<div>
|
|
29
45
|
{flexRender(header.column.columnDef.header, header.getContext())}
|
|
30
|
-
{sorted
|
|
31
|
-
? {
|
|
32
|
-
asc: '🔼',
|
|
33
|
-
desc: '🔽',
|
|
34
|
-
}[sorted]
|
|
35
|
-
: null}
|
|
36
46
|
</div>
|
|
37
|
-
|
|
47
|
+
{sorted
|
|
48
|
+
? {
|
|
49
|
+
asc: '🔼',
|
|
50
|
+
desc: '🔽',
|
|
51
|
+
}[sorted]
|
|
52
|
+
: null}
|
|
53
|
+
</div>
|
|
38
54
|
);
|
|
55
|
+
|
|
56
|
+
return { style, children, onClick };
|
|
39
57
|
}
|
|
@@ -14,6 +14,7 @@ import { useRef } from 'react';
|
|
|
14
14
|
|
|
15
15
|
import { TableBody } from './table_body.js';
|
|
16
16
|
import { TableHeader } from './table_header.js';
|
|
17
|
+
import type { HeaderCellRenderer } from './table_header_cell.js';
|
|
17
18
|
import type { TableColumnDef, TableRowTrRenderer } from './table_utils.js';
|
|
18
19
|
import { useTableColumns } from './use_table_columns.js';
|
|
19
20
|
|
|
@@ -73,6 +74,10 @@ interface TableBaseProps<TData extends RowData> {
|
|
|
73
74
|
* Make sure to spread the passed `trProps` onto the rendered `<tr>` element.
|
|
74
75
|
*/
|
|
75
76
|
renderRowTr?: TableRowTrRenderer<TData>;
|
|
77
|
+
/**
|
|
78
|
+
* Override the columns' header cell rendering.
|
|
79
|
+
*/
|
|
80
|
+
renderHeaderCell?: HeaderCellRenderer<TData>;
|
|
76
81
|
}
|
|
77
82
|
|
|
78
83
|
interface RegularTableProps<TData extends RowData>
|
|
@@ -109,6 +114,7 @@ export function Table<TData extends RowData>(props: TableProps<TData>) {
|
|
|
109
114
|
reactTable,
|
|
110
115
|
tableProps,
|
|
111
116
|
renderRowTr,
|
|
117
|
+
renderHeaderCell,
|
|
112
118
|
|
|
113
119
|
virtualizeRows,
|
|
114
120
|
} = props;
|
|
@@ -141,7 +147,11 @@ export function Table<TData extends RowData>(props: TableProps<TData>) {
|
|
|
141
147
|
striped={striped}
|
|
142
148
|
{...tableProps}
|
|
143
149
|
>
|
|
144
|
-
<TableHeader
|
|
150
|
+
<TableHeader
|
|
151
|
+
sticky={stickyHeader}
|
|
152
|
+
headers={table.getFlatHeaders()}
|
|
153
|
+
renderHeaderCell={renderHeaderCell}
|
|
154
|
+
/>
|
|
145
155
|
<TableBody
|
|
146
156
|
rows={table.getRowModel().rows}
|
|
147
157
|
renderRowTr={renderRowTr}
|