Skip to content

Commit b0ccb17

Browse files
committed
feat: add solid createTableHook
1 parent c03bc58 commit b0ccb17

3 files changed

Lines changed: 1152 additions & 87 deletions

File tree

packages/solid-table/src/FlexRender.tsx

Lines changed: 69 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,11 @@
11
import { createComponent } from 'solid-js'
2+
import type {
3+
Cell,
4+
CellData,
5+
Header,
6+
RowData,
7+
TableFeatures,
8+
} from '@tanstack/table-core'
29
import type { JSX } from 'solid-js'
310

411
export function flexRender<TProps>(
@@ -14,10 +21,66 @@ export function flexRender<TProps>(
1421
return Comp
1522
}
1623

17-
export function FlexRender<TProps>(
18-
props: {
19-
Comp: ((_props: TProps) => JSX.Element) | JSX.Element | undefined
20-
} & TProps,
21-
): JSX.Element {
22-
return flexRender(props.Comp, props)
24+
/**
25+
* Simplified component wrapper of `flexRender`. Use this utility component to render headers, cells, or footers with custom markup.
26+
* Only one prop (`cell`, `header`, or `footer`) may be passed.
27+
* @example <FlexRender cell={cell} />
28+
* @example <FlexRender header={header} />
29+
* @example <FlexRender footer={footer} />
30+
*/
31+
export type FlexRenderProps<
32+
TFeatures extends TableFeatures,
33+
TData extends RowData,
34+
TValue extends CellData = CellData,
35+
> =
36+
| { cell: Cell<TFeatures, TData, TValue>; header?: never; footer?: never }
37+
| {
38+
header: Header<TFeatures, TData, TValue>
39+
cell?: never
40+
footer?: never
41+
}
42+
| {
43+
footer: Header<TFeatures, TData, TValue>
44+
cell?: never
45+
header?: never
46+
}
47+
48+
/**
49+
* Simplified component wrapper of `flexRender`. Use this utility component to render headers, cells, or footers with custom markup.
50+
* Only one prop (`cell`, `header`, or `footer`) may be passed.
51+
* @example
52+
* ```tsx
53+
* <FlexRender cell={cell} />
54+
* <FlexRender header={header} />
55+
* <FlexRender footer={footer} />
56+
* ```
57+
*
58+
* This replaces calling `flexRender` directly like this:
59+
* ```tsx
60+
* flexRender(cell.column.columnDef.cell, cell.getContext())
61+
* flexRender(header.column.columnDef.header, header.getContext())
62+
* flexRender(footer.column.columnDef.footer, footer.getContext())
63+
* ```
64+
*/
65+
export function FlexRender<
66+
TFeatures extends TableFeatures,
67+
TData extends RowData,
68+
TValue extends CellData = CellData,
69+
>(props: FlexRenderProps<TFeatures, TData, TValue>) {
70+
if ('cell' in props && props.cell) {
71+
return flexRender(props.cell.column.columnDef.cell, props.cell.getContext())
72+
}
73+
if ('header' in props && props.header) {
74+
return flexRender(
75+
props.header.column.columnDef.header,
76+
props.header.getContext(),
77+
)
78+
}
79+
if ('footer' in props && props.footer) {
80+
return flexRender(
81+
props.footer.column.columnDef.footer,
82+
props.footer.getContext(),
83+
)
84+
}
85+
return null
2386
}

packages/solid-table/src/createTableHelper.ts

Lines changed: 0 additions & 81 deletions
This file was deleted.

0 commit comments

Comments
 (0)