import { Sidebar } from '~/components/sidebar'; import { Column, SelectionMode, Table } from '~/components/table'; import { createDataSet, DataSetGroupNode, DataSetNode, DataSetRowNode, GroupOptions, SortOptions } from '~/features/dataset'; import { createStore } from 'solid-js/store'; import { Person, people } from './experimental.data'; import { createEffect, createMemo, For } from 'solid-js'; import css from './table.module.css'; export default function TableExperiment() { const columns: Column[] = [ { id: 'id', label: '#', groupBy(rows: DataSetRowNode[]) { const group = (nodes: (DataSetRowNode & { _key: string })[]): DataSetNode[] => nodes.every(n => n._key.includes('.') === false) ? nodes : Object.entries(Object.groupBy(nodes, r => String(r._key).split('.').at(0)!)) .map>(([key, nodes]) => ({ kind: 'group', key, groupedBy: 'id', nodes: group(nodes!.map(n => ({ ...n, _key: n._key.slice(key.length + 1) }))) })); return group(rows.map(row => ({ ...row, _key: row.value.id }))); }, }, { id: 'name', label: 'Name', sortable: true, }, { id: 'email', label: 'Email', sortable: true, }, { id: 'address', label: 'Address', sortable: true, }, { id: 'currency', label: 'Currency', sortable: true, }, { id: 'phone', label: 'Phone', sortable: true, }, { id: 'country', label: 'Country', sortable: true, }, ]; const [store, setStore] = createStore<{ selectionMode: SelectionMode, grouping?: GroupOptions, sorting?: SortOptions }>({ selectionMode: SelectionMode.None, grouping: { by: 'country' }, sorting: { by: 'country', reversed: false }, }); const rows = createMemo(() => createDataSet(() => people, { group: { by: 'country' }, sort: { by: 'country', reversed: false }, })); createEffect(() => { rows().group(store.grouping); }); createEffect(() => { rows().sort(store.sorting); }); createEffect(() => { setStore('sorting', rows().sorting); }); createEffect(() => { setStore('grouping', rows().grouping); }); return
table properties
table sorting
; }