@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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webitel/ui-datalist",
3
- "version": "1.0.77",
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
- return {
52
- ...header,
53
- show: fields.includes(header.field),
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
- // debugger
65
- updateShownHeaders([...newHeaders, ...customFieldHeaders]);
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
- return Promise.allSettled([restoreFields(), restoreSort()]);
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,
@@ -37,6 +37,7 @@ export interface TableStore<Entity> {
37
37
  shownHeaders: Ref<[]>;
38
38
  fields: Ref<[]>;
39
39
  sort: Ref<string>;
40
+ columnWidths: Ref<[]>;
40
41
 
41
42
  // filtersStore
42
43
  filtersManager: Ref<IFiltersManager>;
@@ -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
- setupPersistence: () => Promise<[PromiseSettledResult<void>, PromiseSettledResult<void>]>;
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
- setupPersistence: () => Promise<[PromiseSettledResult<void>, PromiseSettledResult<void>]>;
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;
@@ -27,6 +27,7 @@ export interface TableStore<Entity> {
27
27
  shownHeaders: Ref<[]>;
28
28
  fields: Ref<[]>;
29
29
  sort: Ref<string>;
30
+ columnWidths: Ref<[]>;
30
31
  filtersManager: Ref<IFiltersManager>;
31
32
  isFiltersRestoring: Ref<boolean>;
32
33
  initialize: () => Promise<void>;