@webitel/ui-sdk 25.4.14 → 25.4.16

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": "25.04.14",
3
+ "version": "25.04.16",
4
4
  "private": false,
5
5
  "scripts": {
6
6
  "dev": "vite",
@@ -1,138 +1,140 @@
1
- import { defineStore } from "pinia";
2
- import { computed, ref } from "vue";
1
+ import { defineStore } from 'pinia';
2
+ import { computed, ref } from 'vue';
3
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";
4
+ import { WtTableHeader } from '../../../../components/wt-table/types/WtTable';
5
+ import { sortToQueryAdapter } from '../../../../scripts';
6
+ import { SortSymbols } from '../../../../scripts/sortQueryAdapters';
7
+ import { PersistedStorageType } from '../persist/PersistedStorage.types';
8
+ import { usePersistedStorage } from '../persist/usePersistedStorage.ts';
8
9
 
9
10
  export const createTableHeadersStore = (
10
- namespace: string,
11
- { headers: rawHeaders },
11
+ namespace: string,
12
+ { headers: rawHeaders },
12
13
  ) => {
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
- };
14
+ const id = `${namespace}/headers`;
54
15
 
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
- }
111
- }
112
- });
16
+ return defineStore(id, () => {
17
+ const headers = ref(rawHeaders);
113
18
 
114
- const { restore: restoreSort } = usePersistedStorage({
115
- name: "sort",
116
- value: sort,
117
- });
19
+ const shownHeaders = computed(() => {
20
+ return headers.value.filter((header) => header.show);
21
+ });
22
+
23
+ const fields = computed(() => {
24
+ return shownHeaders.value.map((header) => header.field);
25
+ });
26
+
27
+ const sort = computed(() => {
28
+ const encodeSortQuery = ({ column, order }) =>
29
+ `${sortToQueryAdapter(order)}${column.field}`;
30
+
31
+ const sortedCol = headers.value.find((header) => header.sort);
32
+
33
+ return sortedCol
34
+ ? encodeSortQuery({ column: sortedCol, order: sortedCol.sort })
35
+ : null;
36
+ });
37
+
38
+ const $reset = () => {
39
+ headers.value = rawHeaders;
40
+ };
118
41
 
119
- return Promise.allSettled([
120
- restoreFields(),
121
- restoreSort(),
122
- ]);
42
+ const updateShownHeaders = (value) => {
43
+ headers.value = value;
44
+ };
45
+
46
+ const updateFields = (fields: string[]) => {
47
+ const newHeaders = headers.value.map((header: WtTableHeader) => {
48
+ return {
49
+ ...header,
50
+ show: fields.includes(header.field),
51
+ };
52
+ });
53
+ updateShownHeaders(newHeaders);
54
+ };
55
+
56
+ const updateSort = (column) => {
57
+ const getNextSortOrder = (sort) => {
58
+ switch (sort) {
59
+ case SortSymbols.NONE:
60
+ return SortSymbols.ASC;
61
+ case SortSymbols.ASC:
62
+ return SortSymbols.DESC;
63
+ case SortSymbols.DESC:
64
+ return SortSymbols.NONE;
65
+ default:
66
+ return SortSymbols.ASC;
67
+ }
123
68
  };
124
69
 
125
- return {
126
- headers,
127
- shownHeaders,
128
- fields,
129
- sort,
70
+ const changeHeadersSort = ({ headers, sortedHeader, order }) => {
71
+ return headers.map((header) => {
72
+ if (header.sort === undefined) return header;
73
+
74
+ // reset all headers by default
75
+ let newSort = null;
76
+
77
+ if (header.field === sortedHeader.field) {
78
+ newSort = order;
79
+ }
130
80
 
131
- updateShownHeaders,
132
- updateSort,
81
+ return {
82
+ ...header,
83
+ sort: newSort,
84
+ };
85
+ });
86
+ };
133
87
 
134
- setupPersistence,
135
- $reset,
136
- };
137
- });
88
+ const order = getNextSortOrder(column.sort);
89
+
90
+ const newHeaders = changeHeadersSort({
91
+ headers: headers.value,
92
+ sortedHeader: column,
93
+ order,
94
+ });
95
+
96
+ headers.value = newHeaders;
97
+ };
98
+ const setupPersistence = async () => {
99
+ const { restore: restoreFields } = usePersistedStorage({
100
+ name: 'fields',
101
+ value: fields,
102
+ storages: [
103
+ PersistedStorageType.LocalStorage,
104
+ PersistedStorageType.Route,
105
+ ],
106
+ storagePath: id,
107
+ onStore: (save, { name }) => {
108
+ const value = fields.value.join(',');
109
+ return save({ name, value });
110
+ },
111
+ onRestore: async (restore, name) => {
112
+ const value = (await restore(name)) as string;
113
+ if (value) {
114
+ return updateFields(value.split(','));
115
+ }
116
+ },
117
+ });
118
+
119
+ const { restore: restoreSort } = usePersistedStorage({
120
+ name: 'sort',
121
+ value: sort,
122
+ });
123
+
124
+ return Promise.allSettled([restoreFields(), restoreSort()]);
125
+ };
126
+
127
+ return {
128
+ headers,
129
+ shownHeaders,
130
+ fields,
131
+ sort,
132
+
133
+ updateShownHeaders,
134
+ updateSort,
135
+
136
+ setupPersistence,
137
+ $reset,
138
+ };
139
+ });
138
140
  };
@@ -4,28 +4,34 @@ const separator = ';';
4
4
 
5
5
  const makePath = (storagePath: string, key: string) => `${storagePath}/${key}`;
6
6
 
7
- export const useLocalStoragePersistedStorage = ({ storagePath = '' }: { storagePath: string }): StorageLike => {
7
+ export const useLocalStoragePersistedStorage = ({
8
+ storagePath = '',
9
+ }: {
10
+ storagePath: string;
11
+ }): StorageLike => {
8
12
  const getItem = async (key: string) => {
9
13
  const value = localStorage.getItem(makePath(storagePath, key));
10
14
  try {
11
- return value.split(separator);
15
+ return value.split(separator).join();
12
16
  } catch {
13
17
  return value;
14
18
  }
15
19
  };
16
20
 
17
21
  const setItem = async (key: string, inputValue: string | string[]) => {
18
- const value = Array.isArray(inputValue) ? inputValue.join(separator) : inputValue;
22
+ const value = Array.isArray(inputValue)
23
+ ? inputValue.join(separator)
24
+ : inputValue;
19
25
  localStorage.setItem(makePath(storagePath, key), value);
20
- }
26
+ };
21
27
 
22
28
  const removeItem = async (key: string) => {
23
29
  localStorage.removeItem(makePath(storagePath, key));
24
- }
30
+ };
25
31
 
26
32
  return {
27
33
  getItem,
28
34
  setItem,
29
35
  removeItem,
30
36
  };
31
- }
37
+ };
@@ -24,9 +24,11 @@ export const usePersistedStorage = ({
24
24
  const getItemFns: Array<(name: string) => Promise<PersistableValue>> = [];
25
25
  const removeItemFns = [];
26
26
 
27
- const composedValueGetter = async (name: string): Promise<PersistableValue[]> => {
27
+ const composedValueGetter = async (
28
+ name: string,
29
+ ): Promise<PersistableValue[]> => {
28
30
  const settledResults = await Promise.allSettled(
29
- getItemFns.map((getter) => getter(name))
31
+ getItemFns.map((getter) => getter(name)),
30
32
  );
31
33
 
32
34
  return settledResults.reduce((acc, result) => {
@@ -61,32 +63,36 @@ export const usePersistedStorage = ({
61
63
  }
62
64
 
63
65
  const startWatch = () => {
64
- unwatch = watch(value, async () => {
65
- /*
66
+ unwatch = watch(
67
+ value,
68
+ async () => {
69
+ /*
66
70
  if onStore callback is provided,
67
71
  call custom logic for storing value
68
72
  */
69
- if (onStore) {
70
- /*
73
+ if (onStore) {
74
+ /*
71
75
  wrap all setItemFns in one callback
72
76
  so that onStore is called only once on each value change
73
77
  */
74
- const save = async ({ name, value: storedValue }) => {
78
+ const save = async ({ name, value: storedValue }) => {
79
+ setItemFns.forEach((setter) => {
80
+ setter(name, storedValue);
81
+ });
82
+ };
83
+ await onStore(save, { name, value });
84
+ } else {
85
+ /*
86
+ else, perform default storing logic
87
+ */
88
+ const storedValue = value.value;
75
89
  setItemFns.forEach((setter) => {
76
90
  setter(name, storedValue);
77
91
  });
78
- };
79
- await onStore(save, { name, value });
80
- } else {
81
- /*
82
- else, perform default storing logic
83
- */
84
- const storedValue = value.value;
85
- setItemFns.forEach((setter) => {
86
- setter(name, storedValue);
87
- });
88
- }
89
- }, { deep: true });
92
+ }
93
+ },
94
+ { deep: true },
95
+ );
90
96
  };
91
97
 
92
98
  const restore = async () => {
@@ -106,7 +112,7 @@ export const usePersistedStorage = ({
106
112
  before running onRestore
107
113
  */
108
114
  return restoredValues.find((value) => {
109
- return value !== null;
115
+ return value != null;
110
116
  });
111
117
  };
112
118
  await onRestore(restore, name);