@webitel/ui-datalist 26.8.1 → 26.8.2
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
|
@@ -169,6 +169,63 @@ describe('tableHeadersStoreBody', () => {
|
|
|
169
169
|
|
|
170
170
|
expect(router.currentRoute.value.query.sort).toBe('+name');
|
|
171
171
|
});
|
|
172
|
+
it('keeps every column that renders from a persisted field', async () => {
|
|
173
|
+
await router.push({
|
|
174
|
+
name: 'cases',
|
|
175
|
+
query: {
|
|
176
|
+
[fieldsQueryKey]: 'protocol,app',
|
|
177
|
+
},
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
/* `icon` and `protocol` render from one API field */
|
|
181
|
+
const store = tableHeadersStoreBody({
|
|
182
|
+
rawHeaders: [
|
|
183
|
+
{
|
|
184
|
+
value: 'icon',
|
|
185
|
+
field: 'protocol',
|
|
186
|
+
show: true,
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
value: 'protocol',
|
|
190
|
+
field: 'protocol',
|
|
191
|
+
show: true,
|
|
192
|
+
sort: null,
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
value: 'app',
|
|
196
|
+
field: 'app',
|
|
197
|
+
show: true,
|
|
198
|
+
sort: null,
|
|
199
|
+
},
|
|
200
|
+
] as DatalistTableHeader[],
|
|
201
|
+
id,
|
|
202
|
+
});
|
|
203
|
+
await runWithRouter(() => store.setupPersistence());
|
|
204
|
+
|
|
205
|
+
expect(store.shownHeaders.value.map(({ value }) => value)).toEqual([
|
|
206
|
+
'icon',
|
|
207
|
+
'protocol',
|
|
208
|
+
'app',
|
|
209
|
+
]);
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
it('ignores an empty persisted field instead of adding a placeholder column', async () => {
|
|
213
|
+
/* a header persisted before it got a `field` is stored as an empty string */
|
|
214
|
+
await router.push({
|
|
215
|
+
name: 'cases',
|
|
216
|
+
query: {
|
|
217
|
+
[fieldsQueryKey]: ',name,subject',
|
|
218
|
+
},
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
const store = await setUpStore();
|
|
222
|
+
|
|
223
|
+
expect(store.shownHeaders.value.map(({ field }) => field)).toEqual([
|
|
224
|
+
'name',
|
|
225
|
+
'subject',
|
|
226
|
+
]);
|
|
227
|
+
expect(store.headers.value.some(({ field }) => !field)).toBe(false);
|
|
228
|
+
});
|
|
172
229
|
});
|
|
173
230
|
|
|
174
231
|
describe('access', () => {
|
|
@@ -130,8 +130,11 @@ export const tableHeadersStoreBody = ({
|
|
|
130
130
|
};
|
|
131
131
|
|
|
132
132
|
const updateFields = (persistedFields: string[]) => {
|
|
133
|
-
/* persisted state predates the gate, and unknown fields are revived below
|
|
134
|
-
|
|
133
|
+
/* persisted state predates the gate, and unknown fields are revived below;
|
|
134
|
+
an empty field is a leftover of a header persisted before it got a `field` */
|
|
135
|
+
const fields = persistedFields.filter(
|
|
136
|
+
(field) => field && !deniedFields.has(field),
|
|
137
|
+
);
|
|
135
138
|
|
|
136
139
|
const fieldsSet = new Set(fields);
|
|
137
140
|
const mainFieldNames = new Set(headers.value.map((header) => header.field));
|
|
@@ -153,28 +156,26 @@ export const tableHeadersStoreBody = ({
|
|
|
153
156
|
}) as DatalistTableHeader,
|
|
154
157
|
);
|
|
155
158
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
159
|
+
/* several headers may render from one field (e.g. icon + text), keep them all */
|
|
160
|
+
const headersByField = new Map<string, DatalistTableHeader[]>();
|
|
161
|
+
for (const header of [
|
|
162
|
+
...mainHeaders,
|
|
163
|
+
...customHeaders,
|
|
164
|
+
]) {
|
|
165
|
+
const list = headersByField.get(header.field) ?? [];
|
|
166
|
+
list.push(header);
|
|
167
|
+
headersByField.set(header.field, list);
|
|
168
|
+
}
|
|
165
169
|
|
|
166
170
|
const headersInPersistedOrder = fields.flatMap((field) => {
|
|
167
|
-
const
|
|
168
|
-
if (!header) return [];
|
|
171
|
+
const list = headersByField.get(field) ?? [];
|
|
169
172
|
headersByField.delete(field);
|
|
170
|
-
return
|
|
171
|
-
header,
|
|
172
|
-
];
|
|
173
|
+
return list;
|
|
173
174
|
});
|
|
174
175
|
|
|
175
176
|
const hiddenHeaders = [
|
|
176
177
|
...headersByField.values(),
|
|
177
|
-
];
|
|
178
|
+
].flat();
|
|
178
179
|
|
|
179
180
|
updateShownHeaders([
|
|
180
181
|
...headersInPersistedOrder,
|