UNPKG

@justjarethb/table-core

Version:

Fork of @tanstack/table-core with support for event listeners in different windows

89 lines (80 loc) 2.09 kB
import { AccessorFn, ColumnDef, DisplayColumnDef, GroupColumnDef, IdentifiedColumnDef, RowData, } from './types' import { DeepKeys, DeepValue, RequiredKeys } from './utils' // type Person = { // firstName: string // lastName: string // age: number // visits: number // status: string // progress: number // createdAt: Date // nested: { // foo: [ // { // bar: 'bar' // } // ] // bar: { subBar: boolean }[] // baz: { // foo: 'foo' // bar: { // baz: 'baz' // } // } // } // } // const test: DeepKeys<Person> = 'nested.foo.0.bar' // const test2: DeepKeys<Person> = 'nested.bar' // const helper = createColumnHelper<Person>() // helper.accessor('nested.foo', { // cell: info => info.getValue(), // }) // helper.accessor('nested.foo.0.bar', { // cell: info => info.getValue(), // }) // helper.accessor('nested.bar', { // cell: info => info.getValue(), // }) export type ColumnHelper<TData extends RowData> = { accessor: < TAccessor extends AccessorFn<TData> | DeepKeys<TData>, TValue extends TAccessor extends AccessorFn<TData, infer TReturn> ? TReturn : TAccessor extends DeepKeys<TData> ? DeepValue<TData, TAccessor> : never >( accessor: TAccessor, column: TAccessor extends AccessorFn<TData> ? DisplayColumnDef<TData, TValue> : IdentifiedColumnDef<TData, TValue> ) => ColumnDef<TData, TValue> display: (column: DisplayColumnDef<TData>) => ColumnDef<TData, unknown> group: (column: GroupColumnDef<TData>) => ColumnDef<TData, unknown> } export function createColumnHelper< TData extends RowData >(): ColumnHelper<TData> { return { accessor: (accessor, column) => { return typeof accessor === 'function' ? ({ ...column, accessorFn: accessor, } as any) : { ...column, accessorKey: accessor, } }, display: column => column as ColumnDef<TData, unknown>, group: column => column as ColumnDef<TData, unknown>, } }