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);
+ }