@webitel/ui-sdk 24.12.96 → 24.12.97

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webitel/ui-sdk",
3
- "version": "24.12.96",
3
+ "version": "24.12.97",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "dev": "vite",
@@ -1,89 +1,138 @@
1
- import { computed, ref } from 'vue';
2
- import { defineStore } from 'pinia';
3
- import { sortToQueryAdapter } from '../../../../scripts';
4
- import { SortSymbols } from '../../../../scripts/sortQueryAdapters';
1
+ import { defineStore } from "pinia";
2
+ import { computed, ref } from "vue";
3
+
4
+ import {WtTableHeader} from "../../../../components/wt-table/types/WtTable";
5
+ import { sortToQueryAdapter } from "../../../../scripts";
6
+ import { SortSymbols } from "../../../../scripts/sortQueryAdapters";
7
+ import { usePersistedStorage } from "../persist/usePersistedStorage.ts";
5
8
 
6
9
  export const createTableHeadersStore = (
7
- namespace: string,
8
- { headers: rawHeaders },
10
+ namespace: string,
11
+ { headers: rawHeaders },
9
12
  ) => {
10
- const id = `${namespace}/headers`;
11
-
12
- return defineStore(id, () => {
13
- const headers = ref(rawHeaders);
14
-
15
- const shownHeaders = computed(() => {
16
- return headers.value.filter((header) => header.show);
17
- });
18
-
19
- const fields = computed(() => {
20
- return shownHeaders.value.map((header) => header.field);
21
- });
22
-
23
- const sort = computed(() => {
24
- const encodeSortQuery = ({ column, order }) =>
25
- `${sortToQueryAdapter(order)}${column.field}`;
26
-
27
- const sortedCol = headers.value.find((header) => header.sort);
28
-
29
- return sortedCol
30
- ? encodeSortQuery({ column: sortedCol, order: sortedCol.sort })
31
- : null;
32
- });
33
-
34
- const updateShownHeaders = () => {};
35
-
36
- const updateSort = (column) => {
37
- const getNextSortOrder = (sort) => {
38
- switch (sort) {
39
- case SortSymbols.NONE:
40
- return SortSymbols.ASC;
41
- case SortSymbols.ASC:
42
- return SortSymbols.DESC;
43
- case SortSymbols.DESC:
44
- return SortSymbols.NONE;
45
- default:
46
- return SortSymbols.ASC;
47
- }
48
- };
49
-
50
- const changeHeadersSort = ({ headers, sortedHeader, order }) => {
51
- return headers.map((header) => {
52
- if (header.sort === undefined) return header;
53
-
54
- // reset all headers by default
55
- let newSort = null;
56
-
57
- if (header.field === sortedHeader.field) {
58
- newSort = order;
13
+ const id = `${namespace}/headers`;
14
+
15
+ return defineStore(id, () => {
16
+ const headers = ref(rawHeaders);
17
+
18
+ const shownHeaders = computed(() => {
19
+ return headers.value.filter((header) => header.show);
20
+ });
21
+
22
+ const fields = computed(() => {
23
+ return shownHeaders.value.map((header) => header.field);
24
+ });
25
+
26
+ const sort = computed(() => {
27
+ const encodeSortQuery = ({ column, order }) =>
28
+ `${sortToQueryAdapter(order)}${column.field}`;
29
+
30
+ const sortedCol = headers.value.find((header) => header.sort);
31
+
32
+ return sortedCol
33
+ ? encodeSortQuery({ column: sortedCol, order: sortedCol.sort })
34
+ : null;
35
+ });
36
+
37
+ const $reset = () => {
38
+ headers.value = rawHeaders;
39
+ };
40
+
41
+ const updateShownHeaders = (value) => {
42
+ headers.value = value;
43
+ };
44
+
45
+ const updateFields = (fields: string[]) => {
46
+ const newHeaders = headers.value.map((header: WtTableHeader) => {
47
+ return {
48
+ ...header,
49
+ show: fields.includes(header.field),
50
+ };
51
+ });
52
+ updateShownHeaders(newHeaders);
53
+ };
54
+
55
+ const updateSort = (column) => {
56
+ const getNextSortOrder = (sort) => {
57
+ switch (sort) {
58
+ case SortSymbols.NONE:
59
+ return SortSymbols.ASC;
60
+ case SortSymbols.ASC:
61
+ return SortSymbols.DESC;
62
+ case SortSymbols.DESC:
63
+ return SortSymbols.NONE;
64
+ default:
65
+ return SortSymbols.ASC;
66
+ }
67
+ };
68
+
69
+ const changeHeadersSort = ({ headers, sortedHeader, order }) => {
70
+ return headers.map((header) => {
71
+ if (header.sort === undefined) return header;
72
+
73
+ // reset all headers by default
74
+ let newSort = null;
75
+
76
+ if (header.field === sortedHeader.field) {
77
+ newSort = order;
78
+ }
79
+
80
+ return {
81
+ ...header,
82
+ sort: newSort,
83
+ };
84
+ });
85
+ };
86
+
87
+ const order = getNextSortOrder(column.sort);
88
+
89
+ const newHeaders = changeHeadersSort({
90
+ headers: headers.value,
91
+ sortedHeader: column,
92
+ order,
93
+ });
94
+
95
+ headers.value = newHeaders;
96
+ };
97
+
98
+ const setupPersistence = async () => {
99
+ const { restore: restoreFields } = usePersistedStorage({
100
+ name: "fields",
101
+ value: fields,
102
+ onStore: (save, { name }) => {
103
+ const value = fields.value.join(',');
104
+ return save({ name, value })
105
+ },
106
+ onRestore: async (restore, name) => {
107
+ const value = await restore(name) as string;
108
+ if (value) {
109
+ return updateFields(value.split(','));
110
+ }
59
111
  }
60
-
61
- return {
62
- ...header,
63
- sort: newSort,
64
- };
65
112
  });
66
- };
67
113
 
68
- const order = getNextSortOrder(column.sort);
114
+ const { restore: restoreSort } = usePersistedStorage({
115
+ name: "sort",
116
+ value: sort,
117
+ });
69
118
 
70
- const newHeaders = changeHeadersSort({
71
- headers: headers.value,
72
- sortedHeader: column,
73
- order,
74
- });
119
+ return Promise.allSettled([
120
+ restoreFields(),
121
+ restoreSort(),
122
+ ]);
123
+ };
75
124
 
76
- headers.value = newHeaders;
77
- };
125
+ return {
126
+ headers,
127
+ shownHeaders,
128
+ fields,
129
+ sort,
78
130
 
79
- return {
80
- headers,
81
- shownHeaders,
82
- fields,
83
- sort,
131
+ updateShownHeaders,
132
+ updateSort,
84
133
 
85
- updateShownHeaders,
86
- updateSort,
87
- };
88
- });
134
+ setupPersistence,
135
+ $reset,
136
+ };
137
+ });
89
138
  };
@@ -72,11 +72,6 @@ export const usePersistedStorage = ({
72
72
  so that onStore is called only once on each value change
73
73
  */
74
74
  const save = async ({ name, value: storedValue }) => {
75
- // await Promise.allSettled(
76
- // setItemFns.map((setItem) => {
77
- // return setItem({ name, value: storedValue });
78
- // }),
79
- // );
80
75
  setItemFns.forEach((setter) => {
81
76
  setter(name, storedValue);
82
77
  });
@@ -32,7 +32,7 @@ export const createTableStore = <Entity extends { id: string; etag?: string }>(
32
32
 
33
33
  const headersStore = useHeadersStore();
34
34
  const { headers, shownHeaders, fields, sort } = storeToRefs(headersStore);
35
- const { updateSort, updateShownHeaders } = headersStore;
35
+ const { updateSort, updateShownHeaders, setupPersistence: setupHeadersPersistence } = headersStore;
36
36
 
37
37
  const filtersStore = useFiltersStore();
38
38
  const { filtersManager, isRestoring: isFiltersRestoring } =
@@ -116,12 +116,13 @@ export const createTableStore = <Entity extends { id: string; etag?: string }>(
116
116
  await Promise.allSettled([
117
117
  setupPaginationPersistence(),
118
118
  setupFiltersPersistence(),
119
+ setupHeadersPersistence(),
119
120
  ]);
120
121
 
121
122
  let loadingAfterFiltersChange = false;
122
123
 
123
124
  watch(
124
- [() => filtersManager.value.getAllValues(), sort, size],
125
+ [() => filtersManager.value.getAllValues(), sort, fields, size],
125
126
  async () => {
126
127
  loadingAfterFiltersChange = true;
127
128
  updatePage(1);