diff --git a/docs/docs/async-table.md b/docs/docs/async-table.md index 146d29e4..f4c88138 100644 --- a/docs/docs/async-table.md +++ b/docs/docs/async-table.md @@ -18,6 +18,8 @@ import '../static/c/async-table.css'; | showArrangingColumns | | `boolean` | should the button for arranging columns be shown | | showExport | | `boolean` | should the button for export be shown | | dropdownMenuExport | | `boolean` | should the button for export download csv or can you have more download options | +| showResetToDefault | | `boolean` | should the button for reseting to default be shown | +| defaultHeaders | | [`TableHeader[]`](#tableheader) | default table headers. |

**** @@ -76,6 +78,8 @@ Defines methods for fetching and loading more table data. | export | `function` | retrieves all data that should be included when export is triggered by the table | | arrangeColumns | `function` | This method is intended for persisting column organization | | additionalExportTypes | `function` | This method is intended for adding additional export types to function | +| setDefault | `function` | This method is intended for adding default Headers state | +| getDefault | `function` | This method is intended for getting default Headers state |

**** diff --git a/packages/demo/src/OtherDemos/AsyncTableDemo.svelte b/packages/demo/src/OtherDemos/AsyncTableDemo.svelte index dbc3aa52..314d2317 100644 --- a/packages/demo/src/OtherDemos/AsyncTableDemo.svelte +++ b/packages/demo/src/OtherDemos/AsyncTableDemo.svelte @@ -39,7 +39,7 @@ onMount(() => { const asyncTable = document.createElement('jp-async-table') as any; asyncTable.dropdownMenuExport = true; - asyncTable.headers = [ + asyncTable.defaultHeaders = [ { key: '/name', label: 'Name' @@ -71,6 +71,7 @@ disabled: true } ]; + asyncTable.headers = JSON.parse(JSON.stringify(asyncTable.defaultHeaders)); asyncTable.service = { get: async () => { let rows = [...Array(100).keys()].map(() => ({ @@ -110,6 +111,13 @@ const storedValue = localStorage.getItem(id); return storedValue ? JSON.parse(storedValue) : null; }, + setDefault: async () => { + localStorage.setItem('default', JSON.stringify(asyncTable.defaultHeaders)); + }, + getDefault: async () => { + const storedValue = localStorage.getItem('default'); + return storedValue ? JSON.parse(storedValue) : null; + }, adjustPageSize: async () => {}, adjustSort: async () => {} }; @@ -120,7 +128,9 @@ asyncTable.height = '500px'; asyncTable.freezeFirstColumn = true; asyncTable.freezeLastColumn = true; + asyncTable.showResetToDefault = true; el.appendChild(asyncTable); + asyncTable.service.setDefault(); }); function applyFilters() { diff --git a/packages/lib/src/async-table/async-table.wc.svelte b/packages/lib/src/async-table/async-table.wc.svelte index 00de5d1e..c22814a0 100644 --- a/packages/lib/src/async-table/async-table.wc.svelte +++ b/packages/lib/src/async-table/async-table.wc.svelte @@ -23,7 +23,8 @@ LOADING: 'Loading', LOAD_MORE: 'Load more', PAGE_SIZE: 'Page size', - SAVE: 'Save' + SAVE: 'Save', + RESET: 'Reset' }; export let allowArrangeColumns = true; @@ -41,10 +42,10 @@ export let service: TableService; export let id: string; export let height: string | null = null; - + export let showResetToDefault = true; + export let defaultHeaders: TableHeader[] = []; let additionalExportTypes = []; let activeHeaders: TableHeader[] = []; - let isOpen = false; let resolved: string[] = []; @@ -134,7 +135,7 @@ const { key, fallback, pipes } = header; let value: any; - + try { value = get(row, key); } catch { @@ -480,6 +481,9 @@ }); } } + if (service.getDefault) { + defaultHeaders = await service.getDefault(); + } activeHeaders = headers.filter((it) => !it.disabled); await getData(); @@ -489,11 +493,21 @@ exportDataGeneric(option); isOpen = false; }; + + async function handleReset() { + headers = [...defaultHeaders]; + activeHeaders = headers.filter((it) => !it.disabled); + }
{#if showArrangingColumns || showImport || showExport}
+ {#if showResetToDefault} + + {/if} {#if showArrangingColumns}