| import './index'; |
| import { html, render } from 'lit-html'; |
| import { $$ } from 'common-sk/modules/dom'; |
| import { repeat } from 'lit-html/directives/repeat'; |
| import { SortToggleSk } from './sort-toggle-sk'; |
| |
| interface DemoSortable { |
| name: string; |
| cost: number; |
| weight: number; |
| } |
| |
| const data: DemoSortable[] = [ |
| { |
| name: 'bravo', |
| cost: 10, |
| weight: 36, |
| }, |
| { |
| name: 'alfa', |
| cost: 8, |
| weight: 13, |
| }, |
| { |
| name: 'charlie', |
| cost: 4, |
| weight: 200, |
| }, |
| { |
| name: 'delta', |
| cost: 2, |
| weight: 4, |
| }, |
| ]; |
| |
| const rowTemplate = (row: DemoSortable) => html` |
| <tr> |
| <td>${row.name}</td> |
| <td>${row.cost}</td> |
| <td>${row.weight}</td> |
| </tr> |
| `; |
| |
| // lit-html (or maybe html in general) doesn't like sort-toggle-sk to go inside the table. |
| const usingMap = html` |
| <sort-toggle-sk .data=${data} @sort-changed=${renderTemplates}> |
| <table> |
| <thead> |
| <tr> |
| <th data-key=name data-sort-toggle-sk=up>Item</th> |
| <th data-key=cost>Cost</th> |
| <th data-key=weight>Weight</th> |
| </tr> |
| </thead> |
| <tbody> |
| <!-- map is generally faster than repeat when the rowTemplate is small, but |
| for this demo, map wasn't working quite right with data being a global.--> |
| ${repeat(data, (row) => row.name, rowTemplate)} |
| </tbody> |
| </table> |
| </sort-toggle-sk>`; |
| |
| function renderTemplates() { |
| render(usingMap, $$('#container')!); |
| } |
| |
| renderTemplates(); |
| // Clients should call sort using the appropriate key and direction after the data is loaded. |
| const sortToggleSK = $$('sort-toggle-sk')! as SortToggleSk<DemoSortable>; |
| sortToggleSK.sort('name', 'up'); |