@webitel/ui-datalist 1.1.25 → 1.1.27

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.1.25",
3
+ "version": "1.1.27",
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 lint:package && npm run utils:publish",
@@ -12,6 +12,7 @@
12
12
  <template #[WtTypeExtensionFieldKind.Select]="{ defaultProps }">
13
13
  <wt-select
14
14
  v-bind="defaultProps"
15
+ :v="v$.model"
15
16
  :value="
16
17
  model ??
17
18
  [] /* so that component won't break when model is nullish at init */
@@ -19,6 +20,7 @@
19
20
  :search-method="
20
21
  (...params) => props.filterConfig.searchRecords(...params)
21
22
  "
23
+ :required="false /* https://github.com/webitel/webitel-ui-sdk/pull/1359#discussion_r3180877255 */"
22
24
  use-value-from-options-by-prop="id"
23
25
  @input="model = $event"
24
26
  />
@@ -26,6 +28,7 @@
26
28
  <template #[WtTypeExtensionFieldKind.Multiselect]="{ defaultProps }">
27
29
  <wt-select
28
30
  v-bind="defaultProps"
31
+ :v="v$.model"
29
32
  :value="
30
33
  model ??
31
34
  [] /* so that component won't break when model is nullish at init */
@@ -33,6 +36,8 @@
33
36
  :search-method="
34
37
  (...params) => props.filterConfig.searchRecords(...params)
35
38
  "
39
+
40
+ :required="false /* https://github.com/webitel/webitel-ui-sdk/pull/1359#discussion_r3180877255 */""
36
41
  use-value-from-options-by-prop="id"
37
42
  @input="model = $event"
38
43
  />
@@ -51,7 +56,8 @@ import {
51
56
  WtTypeExtensionValueInput,
52
57
  } from '@webitel/ui-sdk/components';
53
58
  import { WtTypeExtensionFieldKind } from '@webitel/ui-sdk/enums'; // DO NOT REMOVE THIS IMPORT!! : Webstorm lies you, import is used for dynamic slot computation
54
- import { computed, useAttrs, watch } from 'vue';
59
+ import { computed, onMounted, useAttrs, watch } from 'vue';
60
+ import { WebitelProtoDataTypeKind } from 'webitel-sdk';
55
61
 
56
62
  import DateTimeOptionsFilterValueField from '../_shared/date-time-filter/date-time-options/date-time-options-filter-value-field.vue';
57
63
  import HasOptionFilterValueField from '../_shared/has-options/has-option-filter-value-field.vue';
@@ -84,7 +90,7 @@ const v$ = useVuelidate(
84
90
  $autoDirty: true,
85
91
  },
86
92
  );
87
-
93
+ v$.value.$touch();
88
94
  watch(
89
95
  () => v$.value.$invalid,
90
96
  (invalid) => {
@@ -101,36 +101,48 @@ export const tableHeadersStoreBody = ({
101
101
  };
102
102
 
103
103
  const updateFields = (fields: string[]) => {
104
- const newHeaders = headers.value.map((header: WtTableHeader) => ({
104
+ const fieldsSet = new Set(fields);
105
+ const mainFieldNames = new Set(headers.value.map((header) => header.field));
106
+
107
+ const mainHeaders = headers.value.map((header: WtTableHeader) => ({
105
108
  ...header,
106
- show: fields.includes(header.field),
109
+ show: fieldsSet.has(header.field),
107
110
  }));
108
111
 
109
- const customFields = fields.filter(
110
- (field) => !headers.value.some((header) => header.field === field),
112
+ const customHeaders = fields
113
+ .filter((field) => !mainFieldNames.has(field))
114
+ .map((field) => ({
115
+ show: true,
116
+ field,
117
+ shouldBeInitialized: true,
118
+ }));
119
+
120
+ const headersByField = new Map(
121
+ [
122
+ ...mainHeaders,
123
+ ...customHeaders,
124
+ ].map((header) => [
125
+ header.field,
126
+ header,
127
+ ]),
111
128
  );
112
- const customFieldHeaders = customFields.map((field) => ({
113
- show: true,
114
- field,
115
- shouldBeInitialized: true,
116
- }));
117
129
 
118
- const mergedHeaders = [
119
- ...newHeaders,
120
- ...customFieldHeaders,
121
- ];
122
- const orderedFields = fields.filter((field) =>
123
- mergedHeaders.some((header) => header.field === field),
124
- );
125
- const reordered = setHeaderOrder(orderedFields);
130
+ const headersInPersistedOrder = fields.flatMap((field) => {
131
+ const header = headersByField.get(field);
132
+ if (!header) return [];
133
+ headersByField.delete(field);
134
+ return [
135
+ header,
136
+ ];
137
+ });
126
138
 
127
- const uniqueMerged = mergedHeaders.filter(
128
- (merged) => !reordered.some((r) => r.field === merged.field),
129
- );
139
+ const hiddenHeaders = [
140
+ ...headersByField.values(),
141
+ ];
130
142
 
131
143
  updateShownHeaders([
132
- ...reordered,
133
- ...uniqueMerged,
144
+ ...headersInPersistedOrder,
145
+ ...hiddenHeaders,
134
146
  ]);
135
147
  };
136
148