@webitel/ui-datalist 1.0.77 → 1.0.79
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 +1 -1
- package/src/modules/headers/createTableHeadersStore.ts +79 -11
- package/src/modules/table/createTableStore.store.ts +13 -1
- package/src/modules/types/tableStore.types.ts +1 -0
- package/types/modules/filter-presets/stores/createFilterPresetsStore.d.ts +12 -0
- package/types/modules/headers/createTableHeadersStore.d.ts +16 -2
- package/types/modules/table/createTableStore.store.d.ts +12 -0
- package/types/modules/types/tableStore.types.d.ts +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webitel/ui-datalist",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.79",
|
|
4
4
|
"description": "Toolkit for building data lists in webitel ui system",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"make-all": "npm version patch --git-tag-version false && ( npm run lint:fix || true) && (npm run build:types || true) && npm run utils:publish",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { WtTableHeader } from '@webitel/ui-sdk/components/wt-table/types/WtTable';
|
|
2
2
|
import { sortToQueryAdapter } from '@webitel/ui-sdk/scripts';
|
|
3
3
|
import { SortSymbols } from '@webitel/ui-sdk/scripts/sortQueryAdapters';
|
|
4
|
-
import { computed, ref } from 'vue';
|
|
4
|
+
import { computed, ref, nextTick } from 'vue';
|
|
5
5
|
|
|
6
6
|
import { createDatalistStore } from '../_shared/createDatalistStore';
|
|
7
7
|
import { PersistedStorageType } from '../persist/PersistedStorage.types';
|
|
@@ -18,6 +18,7 @@ export const tableHeadersStoreBody = ({
|
|
|
18
18
|
id,
|
|
19
19
|
}: TableHeadersStoreBodyParams) => {
|
|
20
20
|
const headers = ref<WtTableHeader[]>(rawHeaders);
|
|
21
|
+
const isReorderingColumn = ref(false);
|
|
21
22
|
|
|
22
23
|
const shownHeaders = computed(() => {
|
|
23
24
|
return headers.value.filter((header) => header.show);
|
|
@@ -38,6 +39,15 @@ export const tableHeadersStoreBody = ({
|
|
|
38
39
|
: null;
|
|
39
40
|
});
|
|
40
41
|
|
|
42
|
+
const columnWidths = computed(() => {
|
|
43
|
+
return headers.value.reduce((acc, header) => {
|
|
44
|
+
if (header.width) {
|
|
45
|
+
acc[header.field] = header.width;
|
|
46
|
+
}
|
|
47
|
+
return acc;
|
|
48
|
+
}, {});
|
|
49
|
+
});
|
|
50
|
+
|
|
41
51
|
const $reset = () => {
|
|
42
52
|
headers.value = rawHeaders;
|
|
43
53
|
};
|
|
@@ -46,23 +56,33 @@ export const tableHeadersStoreBody = ({
|
|
|
46
56
|
headers.value = value;
|
|
47
57
|
};
|
|
48
58
|
|
|
59
|
+
const setHeaderOrder = (orderedFields: string[]) => {
|
|
60
|
+
const arrayFieldOrder = new Map<string, number>();
|
|
61
|
+
headers.value.forEach((header, idx) => arrayFieldOrder.set(header.field, idx));
|
|
62
|
+
|
|
63
|
+
const newOrder = orderedFields.map(field => arrayFieldOrder.get(field));
|
|
64
|
+
|
|
65
|
+
return newOrder.map(idx => headers.value[idx]);
|
|
66
|
+
};
|
|
67
|
+
|
|
49
68
|
const updateFields = (fields: string[]) => {
|
|
50
|
-
const newHeaders = headers.value.map((header: WtTableHeader) => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
};
|
|
55
|
-
});
|
|
69
|
+
const newHeaders = headers.value.map((header: WtTableHeader) => ({
|
|
70
|
+
...header,
|
|
71
|
+
show: fields.includes(header.field),
|
|
72
|
+
}));
|
|
56
73
|
|
|
57
74
|
const customFields = fields.filter((field) => !headers.value.some((header) => header.field === field));
|
|
58
|
-
// debugger
|
|
59
75
|
const customFieldHeaders = customFields.map((field) => ({
|
|
60
76
|
show: true,
|
|
61
77
|
field,
|
|
62
78
|
shouldBeInitialized: true,
|
|
63
79
|
}));
|
|
64
|
-
|
|
65
|
-
|
|
80
|
+
|
|
81
|
+
const mergedHeaders = [...newHeaders, ...customFieldHeaders];
|
|
82
|
+
const orderedFields = fields.filter(field => mergedHeaders.some(header => header.field === field));
|
|
83
|
+
const reordered = setHeaderOrder(orderedFields);
|
|
84
|
+
|
|
85
|
+
updateShownHeaders(reordered);
|
|
66
86
|
};
|
|
67
87
|
|
|
68
88
|
const updateSort = (column) => {
|
|
@@ -129,7 +149,51 @@ export const tableHeadersStoreBody = ({
|
|
|
129
149
|
value: sort,
|
|
130
150
|
});
|
|
131
151
|
|
|
132
|
-
|
|
152
|
+
const { restore: restoreColumnWidths } = usePersistedStorage({
|
|
153
|
+
name: 'columnWidths',
|
|
154
|
+
value: columnWidths,
|
|
155
|
+
storages: [PersistedStorageType.LocalStorage],
|
|
156
|
+
storagePath: id,
|
|
157
|
+
onStore: (save, { name }) => {
|
|
158
|
+
const value = JSON.stringify(columnWidths.value);
|
|
159
|
+
return save({ name, value });
|
|
160
|
+
},
|
|
161
|
+
onRestore: async (restore, name) => {
|
|
162
|
+
const value = (await restore(name)) as string;
|
|
163
|
+
if (value) {
|
|
164
|
+
const parsedWidths = JSON.parse(value);
|
|
165
|
+
headers.value = headers.value.map((header) => ({
|
|
166
|
+
...header,
|
|
167
|
+
width: parsedWidths[header.field] || header.width,
|
|
168
|
+
}));
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
return Promise.allSettled([restoreFields(), restoreSort(), restoreColumnWidths()]);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const getHeaderByField = (field: string) => {
|
|
177
|
+
return headers.value.find((header) => header.field === field);
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
const columnResize = ({columnName, columnWidth}) => {
|
|
181
|
+
const column = getHeaderByField(columnName);
|
|
182
|
+
|
|
183
|
+
if (column) {
|
|
184
|
+
column.width = columnWidth;
|
|
185
|
+
}
|
|
186
|
+
};
|
|
187
|
+
|
|
188
|
+
const columnReorder = (orderedFields: string[]) => {
|
|
189
|
+
isReorderingColumn.value = true;
|
|
190
|
+
|
|
191
|
+
const reordered = setHeaderOrder(orderedFields);
|
|
192
|
+
updateShownHeaders(reordered);
|
|
193
|
+
|
|
194
|
+
nextTick(() => {
|
|
195
|
+
isReorderingColumn.value = false;
|
|
196
|
+
});
|
|
133
197
|
};
|
|
134
198
|
|
|
135
199
|
return {
|
|
@@ -137,9 +201,13 @@ export const tableHeadersStoreBody = ({
|
|
|
137
201
|
shownHeaders,
|
|
138
202
|
fields,
|
|
139
203
|
sort,
|
|
204
|
+
columnWidths,
|
|
205
|
+
isReorderingColumn,
|
|
140
206
|
|
|
141
207
|
updateShownHeaders,
|
|
142
208
|
updateSort,
|
|
209
|
+
columnResize,
|
|
210
|
+
columnReorder,
|
|
143
211
|
|
|
144
212
|
setupPersistence,
|
|
145
213
|
$reset,
|
|
@@ -46,11 +46,13 @@ export const tableStoreBody = <Entity extends { id: string; etag?: string }>(
|
|
|
46
46
|
} = paginationStore;
|
|
47
47
|
|
|
48
48
|
const headersStore = useHeadersStore();
|
|
49
|
-
const { headers, shownHeaders, fields, sort } = makeThisToRefs<
|
|
49
|
+
const { headers, shownHeaders, fields, sort, columnWidths, isReorderingColumn } = makeThisToRefs<
|
|
50
50
|
typeof headersStore
|
|
51
51
|
>(headersStore, storeType);
|
|
52
52
|
const {
|
|
53
53
|
updateSort,
|
|
54
|
+
columnResize,
|
|
55
|
+
columnReorder,
|
|
54
56
|
updateShownHeaders,
|
|
55
57
|
setupPersistence: setupHeadersPersistence,
|
|
56
58
|
} = headersStore;
|
|
@@ -200,6 +202,13 @@ export const tableStoreBody = <Entity extends { id: string; etag?: string }>(
|
|
|
200
202
|
watch(
|
|
201
203
|
[() => filtersManager.value.getAllValues(), sort, fields, size],
|
|
202
204
|
async () => {
|
|
205
|
+
/*
|
|
206
|
+
* @author @Lera24
|
|
207
|
+
* https://webitel.atlassian.net/browse/WTEL-7597?focusedCommentId=697115
|
|
208
|
+
* */
|
|
209
|
+
if (isReorderingColumn.value) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
203
212
|
loadingAfterFiltersChange = true;
|
|
204
213
|
updatePage(1);
|
|
205
214
|
await loadDataList();
|
|
@@ -246,6 +255,7 @@ export const tableStoreBody = <Entity extends { id: string; etag?: string }>(
|
|
|
246
255
|
shownHeaders,
|
|
247
256
|
fields,
|
|
248
257
|
sort,
|
|
258
|
+
columnWidths,
|
|
249
259
|
searchMode,
|
|
250
260
|
|
|
251
261
|
filtersManager,
|
|
@@ -267,6 +277,8 @@ export const tableStoreBody = <Entity extends { id: string; etag?: string }>(
|
|
|
267
277
|
updateSize,
|
|
268
278
|
|
|
269
279
|
updateSort,
|
|
280
|
+
columnResize,
|
|
281
|
+
columnReorder,
|
|
270
282
|
updateShownHeaders,
|
|
271
283
|
|
|
272
284
|
hasFilter,
|
|
@@ -14,6 +14,7 @@ export declare const filterPresetsStoreBody: (namespace?: string) => {
|
|
|
14
14
|
shownHeaders: import("vue").ComputedRef<any>;
|
|
15
15
|
fields: import("vue").ComputedRef<any>;
|
|
16
16
|
sort: import("vue").ComputedRef<string>;
|
|
17
|
+
columnWidths: import("vue").ComputedRef<any>;
|
|
17
18
|
searchMode: import("vue").Ref<string, string>;
|
|
18
19
|
filtersManager: import("vue").Ref<{
|
|
19
20
|
filters: Map<string, {
|
|
@@ -90,6 +91,11 @@ export declare const filterPresetsStoreBody: (namespace?: string) => {
|
|
|
90
91
|
updatePage: (newPage: number) => void;
|
|
91
92
|
updateSize: (newSize: number) => void;
|
|
92
93
|
updateSort: (column: any) => void;
|
|
94
|
+
columnResize: ({ columnName, columnWidth }: {
|
|
95
|
+
columnName: any;
|
|
96
|
+
columnWidth: any;
|
|
97
|
+
}) => void;
|
|
98
|
+
columnReorder: (orderedFields: string[]) => void;
|
|
93
99
|
updateShownHeaders: (value: any) => void;
|
|
94
100
|
hasFilter: any;
|
|
95
101
|
addFilter: any;
|
|
@@ -112,6 +118,7 @@ export declare const createFilterPresetsStore: (namespace: string) => () => {
|
|
|
112
118
|
shownHeaders: import("vue").ComputedRef<any>;
|
|
113
119
|
fields: import("vue").ComputedRef<any>;
|
|
114
120
|
sort: import("vue").ComputedRef<string>;
|
|
121
|
+
columnWidths: import("vue").ComputedRef<any>;
|
|
115
122
|
searchMode: import("vue").Ref<string, string>;
|
|
116
123
|
filtersManager: import("vue").Ref<{
|
|
117
124
|
filters: Map<string, {
|
|
@@ -188,6 +195,11 @@ export declare const createFilterPresetsStore: (namespace: string) => () => {
|
|
|
188
195
|
updatePage: (newPage: number) => void;
|
|
189
196
|
updateSize: (newSize: number) => void;
|
|
190
197
|
updateSort: (column: any) => void;
|
|
198
|
+
columnResize: ({ columnName, columnWidth }: {
|
|
199
|
+
columnName: any;
|
|
200
|
+
columnWidth: any;
|
|
201
|
+
}) => void;
|
|
202
|
+
columnReorder: (orderedFields: string[]) => void;
|
|
191
203
|
updateShownHeaders: (value: any) => void;
|
|
192
204
|
hasFilter: any;
|
|
193
205
|
addFilter: any;
|
|
@@ -9,9 +9,16 @@ export declare const tableHeadersStoreBody: ({ rawHeaders, id, }: TableHeadersSt
|
|
|
9
9
|
shownHeaders: import("vue").ComputedRef<any>;
|
|
10
10
|
fields: import("vue").ComputedRef<any>;
|
|
11
11
|
sort: import("vue").ComputedRef<string>;
|
|
12
|
+
columnWidths: import("vue").ComputedRef<any>;
|
|
13
|
+
isReorderingColumn: import("vue").Ref<boolean, boolean>;
|
|
12
14
|
updateShownHeaders: (value: any) => void;
|
|
13
15
|
updateSort: (column: any) => void;
|
|
14
|
-
|
|
16
|
+
columnResize: ({ columnName, columnWidth }: {
|
|
17
|
+
columnName: any;
|
|
18
|
+
columnWidth: any;
|
|
19
|
+
}) => void;
|
|
20
|
+
columnReorder: (orderedFields: string[]) => void;
|
|
21
|
+
setupPersistence: () => Promise<[PromiseSettledResult<void>, PromiseSettledResult<void>, PromiseSettledResult<void>]>;
|
|
15
22
|
$reset: () => void;
|
|
16
23
|
};
|
|
17
24
|
export declare const createTableHeadersStore: <Entity>(namespace: string, config: useTableStoreConfig<Entity>, { headers: rawHeaders }: {
|
|
@@ -21,9 +28,16 @@ export declare const createTableHeadersStore: <Entity>(namespace: string, config
|
|
|
21
28
|
shownHeaders: import("vue").ComputedRef<any>;
|
|
22
29
|
fields: import("vue").ComputedRef<any>;
|
|
23
30
|
sort: import("vue").ComputedRef<string>;
|
|
31
|
+
columnWidths: import("vue").ComputedRef<any>;
|
|
32
|
+
isReorderingColumn: import("vue").Ref<boolean, boolean>;
|
|
24
33
|
updateShownHeaders: (value: any) => void;
|
|
25
34
|
updateSort: (column: any) => void;
|
|
26
|
-
|
|
35
|
+
columnResize: ({ columnName, columnWidth }: {
|
|
36
|
+
columnName: any;
|
|
37
|
+
columnWidth: any;
|
|
38
|
+
}) => void;
|
|
39
|
+
columnReorder: (orderedFields: string[]) => void;
|
|
40
|
+
setupPersistence: () => Promise<[PromiseSettledResult<void>, PromiseSettledResult<void>, PromiseSettledResult<void>]>;
|
|
27
41
|
$reset: () => void;
|
|
28
42
|
}>;
|
|
29
43
|
export {};
|
|
@@ -16,6 +16,7 @@ export declare const tableStoreBody: <Entity extends {
|
|
|
16
16
|
shownHeaders: import("vue").ComputedRef<any>;
|
|
17
17
|
fields: import("vue").ComputedRef<any>;
|
|
18
18
|
sort: import("vue").ComputedRef<string>;
|
|
19
|
+
columnWidths: import("vue").ComputedRef<any>;
|
|
19
20
|
searchMode: Ref<string, string>;
|
|
20
21
|
filtersManager: Ref<{
|
|
21
22
|
filters: Map<string, {
|
|
@@ -92,6 +93,11 @@ export declare const tableStoreBody: <Entity extends {
|
|
|
92
93
|
updatePage: (newPage: number) => void;
|
|
93
94
|
updateSize: (newSize: number) => void;
|
|
94
95
|
updateSort: (column: any) => void;
|
|
96
|
+
columnResize: ({ columnName, columnWidth }: {
|
|
97
|
+
columnName: any;
|
|
98
|
+
columnWidth: any;
|
|
99
|
+
}) => void;
|
|
100
|
+
columnReorder: (orderedFields: string[]) => void;
|
|
95
101
|
updateShownHeaders: (value: any) => void;
|
|
96
102
|
hasFilter: any;
|
|
97
103
|
addFilter: any;
|
|
@@ -114,6 +120,7 @@ export declare const createTableStore: <Entity extends {
|
|
|
114
120
|
shownHeaders: import("vue").ComputedRef<any>;
|
|
115
121
|
fields: import("vue").ComputedRef<any>;
|
|
116
122
|
sort: import("vue").ComputedRef<string>;
|
|
123
|
+
columnWidths: import("vue").ComputedRef<any>;
|
|
117
124
|
searchMode: Ref<string, string>;
|
|
118
125
|
filtersManager: Ref<{
|
|
119
126
|
filters: Map<string, {
|
|
@@ -190,6 +197,11 @@ export declare const createTableStore: <Entity extends {
|
|
|
190
197
|
updatePage: (newPage: number) => void;
|
|
191
198
|
updateSize: (newSize: number) => void;
|
|
192
199
|
updateSort: (column: any) => void;
|
|
200
|
+
columnResize: ({ columnName, columnWidth }: {
|
|
201
|
+
columnName: any;
|
|
202
|
+
columnWidth: any;
|
|
203
|
+
}) => void;
|
|
204
|
+
columnReorder: (orderedFields: string[]) => void;
|
|
193
205
|
updateShownHeaders: (value: any) => void;
|
|
194
206
|
hasFilter: any;
|
|
195
207
|
addFilter: any;
|