[Feature] Add language #19

Merged
chris-kruining merged 25 commits from feature/add-language into main 2024-12-19 15:22:42 +00:00
2 changed files with 35 additions and 11 deletions
Showing only changes of commit f87ea3697f - Show all commits

View file

@ -28,5 +28,9 @@
& > header { & > header {
padding-inline-start: var(--padding-l); padding-inline-start: var(--padding-l);
} }
& .table {
border-radius: inherit;
}
} }
} }

View file

@ -5,27 +5,47 @@ import { createStore } from "solid-js/store";
import { createEffect, For } from "solid-js"; import { createEffect, For } from "solid-js";
import { Person, people } from './experimental.data'; import { Person, people } from './experimental.data';
export default function Experimental() {
const columns: Column<Person>[] = [ const columns: Column<Person>[] = [
const columns: Column<Entry>[] = [
{ {
id: 'key', id: 'id',
label: 'Key', label: '#',
groupBy(rows: RowNode<Entry>[]) { groupBy(rows: RowNode<Person>[]) {
const group = (nodes: (RowNode<Entry> & { _key: string })[]): Node<Entry>[] => nodes.every(n => n._key.includes('.') === false) const group = (nodes: (RowNode<Person> & { _key: string })[]): Node<Person>[] => nodes.every(n => n._key.includes('.') === false)
? nodes ? nodes
: Object.entries(Object.groupBy(nodes, r => String(r._key).split('.').at(0)!)) : Object.entries(Object.groupBy(nodes, r => String(r._key).split('.').at(0)!))
.map<GroupNode<Entry>>(([key, nodes]) => ({ kind: 'group', key, groupedBy: 'key', nodes: group(nodes!.map(n => ({ ...n, _key: n._key.slice(key.length + 1) }))) })); .map<GroupNode<Person>>(([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.key }))); return group(rows.map(row => ({ ...row, _key: row.value.id })));
}, },
}, },
{ {
id: 'value', id: 'name',
label: 'Value', label: 'Name',
},
{
id: 'email',
label: 'Email',
},
{
id: 'address',
label: 'Address',
},
{
id: 'currency',
label: 'Currency',
},
{
id: 'phone',
label: 'Phone',
},
{
id: 'country',
label: 'Country',
}, },
]; ];
const [store, setStore] = createStore<{ selectionMode: SelectionMode, groupBy?: keyof Entry, sort?: { by: keyof Entry, reversed?: boolean } }>({ const [store, setStore] = createStore<{ selectionMode: SelectionMode, groupBy?: keyof Person, sort?: { by: keyof Person, reversed?: boolean } }>({
selectionMode: SelectionMode.None, selectionMode: SelectionMode.None,
// groupBy: 'value', // groupBy: 'value',
// sortBy: 'key' // sortBy: 'key'
@ -85,7 +105,7 @@ import { Person, people } from './experimental.data';
</Sidebar> </Sidebar>
<div class={css.content}> <div class={css.content}>
<Table rows={people} columns={columns} groupBy={store.groupBy} sort={store.sort} selectionMode={store.selectionMode}>{{ <Table class={css.table} rows={people} columns={columns} groupBy={store.groupBy} sort={store.sort} selectionMode={store.selectionMode}>{{
address: (cell) => <input type="text" value={cell.value} />, address: (cell) => <input type="text" value={cell.value} />,
}}</Table> }}</Table>
</div> </div>