@webitel/ui-sdk 25.4.13 → 25.4.15
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/CHANGELOG.md +6 -0
- package/dist/ui-sdk.js +1 -1
- package/dist/ui-sdk.umd.cjs +1 -1
- package/package.json +1 -1
- package/src/api/clients/gateways/gateways.js +1 -1
- package/src/modules/Filters/v2/headers/createTableHeadersStore.ts +127 -126
- package/src/modules/Filters/v2/persist/useLocalStoragePersistedStorage.ts +12 -6
- package/src/modules/Filters/v2/persist/usePersistedStorage.ts +26 -20
package/package.json
CHANGED
|
@@ -21,7 +21,7 @@ const instance = getDefaultInstance();
|
|
|
21
21
|
const baseUrl = '/sip/gateways';
|
|
22
22
|
|
|
23
23
|
const getGatewayList = async (params) => {
|
|
24
|
-
const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', '
|
|
24
|
+
const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', 'ids'];
|
|
25
25
|
|
|
26
26
|
const defaultObject = {
|
|
27
27
|
name: '',
|
|
@@ -1,138 +1,139 @@
|
|
|
1
|
-
import { defineStore } from
|
|
2
|
-
import { computed, ref } from
|
|
1
|
+
import { defineStore } from 'pinia';
|
|
2
|
+
import { computed, ref } from 'vue';
|
|
3
3
|
|
|
4
|
-
import {WtTableHeader} from
|
|
5
|
-
import { sortToQueryAdapter } from
|
|
6
|
-
import { SortSymbols } from
|
|
7
|
-
import {
|
|
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
|
-
|
|
11
|
-
|
|
11
|
+
namespace: string,
|
|
12
|
+
{ headers: rawHeaders },
|
|
12
13
|
) => {
|
|
13
|
-
|
|
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
|
-
|
|
56
|
-
|
|
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
|
-
|
|
115
|
-
|
|
116
|
-
|
|
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
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
-
|
|
132
|
-
|
|
81
|
+
return {
|
|
82
|
+
...header,
|
|
83
|
+
sort: newSort,
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
};
|
|
133
87
|
|
|
134
|
-
|
|
135
|
-
|
|
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
|
+
onStore: (save, { name }) => {
|
|
107
|
+
const value = fields.value.join(',');
|
|
108
|
+
return save({ name, value });
|
|
109
|
+
},
|
|
110
|
+
onRestore: async (restore, name) => {
|
|
111
|
+
const value = (await restore(name)) as string;
|
|
112
|
+
if (value) {
|
|
113
|
+
return updateFields(value.split(','));
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
const { restore: restoreSort } = usePersistedStorage({
|
|
119
|
+
name: 'sort',
|
|
120
|
+
value: sort,
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
return Promise.allSettled([restoreFields(), restoreSort()]);
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
return {
|
|
127
|
+
headers,
|
|
128
|
+
shownHeaders,
|
|
129
|
+
fields,
|
|
130
|
+
sort,
|
|
131
|
+
|
|
132
|
+
updateShownHeaders,
|
|
133
|
+
updateSort,
|
|
134
|
+
|
|
135
|
+
setupPersistence,
|
|
136
|
+
$reset,
|
|
137
|
+
};
|
|
138
|
+
});
|
|
138
139
|
};
|
|
@@ -4,28 +4,34 @@ const separator = ';';
|
|
|
4
4
|
|
|
5
5
|
const makePath = (storagePath: string, key: string) => `${storagePath}/${key}`;
|
|
6
6
|
|
|
7
|
-
export const useLocalStoragePersistedStorage = ({
|
|
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)
|
|
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 (
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
80
|
-
|
|
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
|
|
115
|
+
return value != null;
|
|
110
116
|
});
|
|
111
117
|
};
|
|
112
118
|
await onRestore(restore, name);
|