Skip to content

Commit c080ec0

Browse files
authored
LG-3697: Expose value type for useLeafyGreenTable (#2127)
* expose value type for useLeafyGreenTable * changeset * Remove unused code * change header value
1 parent 9a35ec3 commit c080ec0

File tree

5 files changed

+34
-24
lines changed

5 files changed

+34
-24
lines changed

.changeset/real-tomatoes-sneeze.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@leafygreen-ui/table': minor
3+
---
4+
5+
Table now exposes an optional second generic type for useLeafyGreenTable that controls the type of the value

packages/table/src/useLeafyGreenTable/TableHeaderCheckbox.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import { useRowContext } from '../Row/RowContext';
1010
import { disabledTableRowCheckStyles } from './useLeafyGreenTable.styles';
1111
import { LGRowData, LGTableDataType } from '.';
1212

13-
export const TableHeaderCheckbox = ({
13+
export const TableHeaderCheckbox = <T extends LGRowData>({
1414
table,
1515
}: {
16-
table: Table<LGTableDataType<LGRowData>>;
16+
table: Table<LGTableDataType<T>>;
1717
}) => {
1818
const { theme } = useDarkMode();
1919
const { disabled: rowIsDisabled } = useRowContext();

packages/table/src/useLeafyGreenTable/TableRowCheckbox.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ import { useRowContext } from '../Row/RowContext';
1010
import { disabledTableRowCheckStyles } from './useLeafyGreenTable.styles';
1111
import { LGRowData, LGTableDataType } from '.';
1212

13-
export const TableRowCheckbox = ({
13+
export const TableRowCheckbox = <T extends LGRowData>({
1414
row,
1515
table,
1616
}: {
17-
table: Table<LGTableDataType<LGRowData>>;
18-
row: Row<LGTableDataType<LGRowData>>;
17+
table: Table<LGTableDataType<T>>;
18+
row: Row<LGTableDataType<T>>;
1919
}) => {
2020
const { theme } = useDarkMode();
2121
const { disabled: rowIsDisabled } = useRowContext();

packages/table/src/useLeafyGreenTable/useLeafyGreenTable.tsx

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,7 @@ import { LeafyGreenTable, LGColumnDef, LGTableDataType } from '.';
1515

1616
const CHECKBOX_WIDTH = 14;
1717

18-
/**
19-
* A `ColumnDef` object injected into `useReactTable`'s `columns` option when the user is using selectable rows.
20-
*/
21-
const baseSelectColumnConfig: LGColumnDef<LGRowData> = {
22-
id: 'select',
23-
size: CHECKBOX_WIDTH,
24-
header: TableHeaderCheckbox,
25-
cell: TableRowCheckbox,
26-
};
27-
28-
function useLeafyGreenTable<T extends LGRowData>({
18+
function useLeafyGreenTable<T extends LGRowData, V extends unknown = unknown>({
2919
containerRef,
3020
data,
3121
columns: columnsProp,
@@ -34,23 +24,33 @@ function useLeafyGreenTable<T extends LGRowData>({
3424
useVirtualScrolling = false,
3525
allowSelectAll = true,
3626
...rest
37-
}: LeafyGreenTableOptions<T>): LeafyGreenTable<T> {
27+
}: LeafyGreenTableOptions<T, V>): LeafyGreenTable<T> {
28+
/**
29+
* A `ColumnDef` object injected into `useReactTable`'s `columns` option when the user is using selectable rows.
30+
*/
31+
const baseSelectColumnConfig: LGColumnDef<T, V> = {
32+
id: 'select',
33+
size: CHECKBOX_WIDTH,
34+
header: TableHeaderCheckbox,
35+
cell: TableRowCheckbox,
36+
};
37+
3838
const hasSortableColumns = React.useMemo(
3939
() => columnsProp.some(propCol => !!propCol.enableSorting),
4040
[columnsProp],
4141
);
4242
const selectColumnConfig = allowSelectAll
4343
? baseSelectColumnConfig
4444
: omit(baseSelectColumnConfig, 'header');
45-
const columns = React.useMemo<Array<LGColumnDef<T>>>(
45+
const columns = React.useMemo<Array<LGColumnDef<T, V>>>(
4646
() => [
47-
...(hasSelectableRows ? [selectColumnConfig as LGColumnDef<T>] : []),
47+
...(hasSelectableRows ? [selectColumnConfig as LGColumnDef<T, V>] : []),
4848
...columnsProp.map(propColumn => {
4949
return {
5050
...propColumn,
5151
align: propColumn.align ?? 'left',
5252
enableSorting: propColumn.enableSorting ?? false,
53-
} as LGColumnDef<T>;
53+
} as LGColumnDef<T, V>;
5454
}),
5555
],
5656
[columnsProp, hasSelectableRows, selectColumnConfig],

packages/table/src/useLeafyGreenTable/useLeafyGreenTable.types.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,22 @@ export type LeafyGreenTableCell<T extends LGRowData> = Cell<
3131
export interface LeafyGreenTableRow<T extends LGRowData>
3232
extends Row<LGTableDataType<T>> {}
3333

34-
export type LGColumnDef<T extends LGRowData> = ColumnDef<LGTableDataType<T>> & {
34+
export type LGColumnDef<
35+
T extends LGRowData,
36+
V extends unknown = unknown,
37+
> = ColumnDef<LGTableDataType<T>, V> & {
3538
align?: HTMLElementProps<'td'>['align'];
3639
};
3740

3841
/** LeafyGreen extension of `useReactTable` {@link TableOptions}*/
39-
export interface LeafyGreenTableOptions<T extends LGRowData>
40-
extends Omit<TableOptions<LGTableDataType<T>>, 'getCoreRowModel'> {
42+
export interface LeafyGreenTableOptions<
43+
T extends LGRowData,
44+
V extends unknown = unknown,
45+
> extends Omit<TableOptions<LGTableDataType<T>>, 'getCoreRowModel'> {
4146
containerRef: RefObject<HTMLDivElement>;
4247
hasSelectableRows?: boolean;
4348
useVirtualScrolling?: boolean;
44-
columns: Array<LGColumnDef<T>>;
49+
columns: Array<LGColumnDef<T, V>>;
4550
withPagination?: boolean;
4651
allowSelectAll?: boolean;
4752
}

0 commit comments

Comments
 (0)