@truedat/df 7.12.5 → 7.12.7

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.
Files changed (42) hide show
  1. package/package.json +4 -4
  2. package/src/components/DynamicFieldValue.js +1 -1
  3. package/src/components/DynamicFormViewer.js +4 -3
  4. package/src/components/DynamicFormWithTranslations.js +3 -3
  5. package/src/components/EditableDynamicFieldValue.js +1 -1
  6. package/src/components/FieldViewerValue.js +44 -3
  7. package/src/components/__tests__/FieldViewerValue.spec.js +10 -6
  8. package/src/components/__tests__/__snapshots__/FieldViewerValue.spec.js.snap +53 -0
  9. package/src/components/widgets/DynamicField.js +6 -62
  10. package/src/components/widgets/DynamicTableField.js +150 -0
  11. package/src/components/widgets/FieldByWidget.js +63 -0
  12. package/src/components/widgets/StandardDropdown.js +2 -2
  13. package/src/components/widgets/StringField.js +2 -1
  14. package/src/components/widgets/__tests__/DynamicField.spec.js +10 -1
  15. package/src/components/widgets/__tests__/DynamicTableField.spec.js +257 -0
  16. package/src/components/widgets/__tests__/__snapshots__/DynamicField.spec.js.snap +97 -0
  17. package/src/components/widgets/__tests__/__snapshots__/DynamicTableField.spec.js.snap +114 -0
  18. package/src/templates/components/templateForm/ActiveGroupForm.js +5 -16
  19. package/src/templates/components/templateForm/FieldDefinition.js +158 -0
  20. package/src/templates/components/templateForm/FieldForm.js +32 -135
  21. package/src/templates/components/templateForm/TableValuesForm.js +258 -0
  22. package/src/templates/components/templateForm/TemplateForm.js +43 -26
  23. package/src/templates/components/templateForm/ValuesConfiguration.js +67 -0
  24. package/src/templates/components/templateForm/ValuesField.js +60 -96
  25. package/src/templates/components/templateForm/ValuesListForm.js +1 -3
  26. package/src/templates/components/templateForm/__tests__/FieldDefinition.spec.js +227 -0
  27. package/src/templates/components/templateForm/__tests__/TableValuesForm.spec.js +215 -0
  28. package/src/templates/components/templateForm/__tests__/ValuesField.spec.js +28 -83
  29. package/src/templates/components/templateForm/__tests__/__snapshots__/ActiveGroupForm.spec.js.snap +17 -0
  30. package/src/templates/components/templateForm/__tests__/__snapshots__/FieldDefinition.spec.js.snap +443 -0
  31. package/src/templates/components/templateForm/__tests__/__snapshots__/FieldForm.spec.js.snap +51 -0
  32. package/src/templates/components/templateForm/__tests__/__snapshots__/TemplateForm.spec.js.snap +17 -0
  33. package/src/templates/components/templateForm/__tests__/__snapshots__/ValuesField.spec.js.snap +61 -387
  34. package/src/templates/components/templateForm/contentValidation.js +22 -3
  35. package/src/templates/components/templateForm/valueDefinitions.js +16 -2
  36. package/src/templates/components/templateForm/widgetDefinitions.js +28 -2
  37. package/src/templates/utils/__tests__/validateContent.spec.js +6 -6
  38. package/src/templates/utils/applyTemplate.js +72 -23
  39. package/src/templates/utils/filterValues.js +3 -3
  40. package/src/templates/utils/parseFieldOptions.js +73 -58
  41. package/src/templates/utils/parseGroups.js +47 -48
  42. package/src/templates/utils/validateContent.js +70 -25
@@ -7,11 +7,9 @@ describe("<ValuesField /> noPrefix", () => {
7
7
  const values = null;
8
8
  const name = "name.values";
9
9
  const onChange = jest.fn();
10
- const onSelectionChange = jest.fn();
11
10
  const props = {
12
11
  field: { values },
13
12
  name,
14
- onSelectionChange,
15
13
  onChange,
16
14
  };
17
15
  const rendered = render(<ValuesField {...props} />);
@@ -22,16 +20,16 @@ describe("<ValuesField /> noPrefix", () => {
22
20
  it("test values dropdown", async () => {
23
21
  const values = null;
24
22
  const name = "name.values";
25
- const onSelectionChange = jest.fn();
23
+ const subscribableField = "foo.subscribable";
26
24
  const onChange = jest.fn();
27
25
  const props = {
28
26
  field: { values },
29
27
  name,
30
28
  onChange,
31
- onSelectionChange,
32
29
  widget: "radio",
33
- fieldType: "string",
34
- keyType: "fixed",
30
+ type: "string",
31
+ fieldNamePrefix: "foo",
32
+ subscribableField,
35
33
  values: [
36
34
  { id: "template.field.values.fixed", value: "fixed" },
37
35
  { id: "template.field.values.fixed_tuple", value: "fixed_tuple" },
@@ -48,20 +46,33 @@ describe("<ValuesField /> noPrefix", () => {
48
46
  })
49
47
  );
50
48
 
51
- expect(onSelectionChange).toHaveBeenCalled();
49
+ expect(onChange).toHaveBeenCalledWith(
50
+ expect.anything(),
51
+ expect.objectContaining({
52
+ name: subscribableField,
53
+ value: false,
54
+ })
55
+ );
56
+
57
+ expect(onChange).toHaveBeenCalledWith(
58
+ null,
59
+ expect.objectContaining({
60
+ name,
61
+ value: { switch: null },
62
+ })
63
+ );
52
64
  });
53
65
  });
54
66
 
55
67
  describe("<ValuesField /> fixed", () => {
56
68
  it("matches the latest snapshot for null values", async () => {
57
- const values = { fixed: ["Foo", "Bar"] };
69
+ const values = {};
58
70
  const name = "name.values";
59
- const onSelectionChange = jest.fn();
71
+ const onChange = jest.fn();
60
72
  const props = {
61
73
  field: { values },
62
74
  name,
63
- onChange: jest.fn(),
64
- onSelectionChange,
75
+ onChange,
65
76
  };
66
77
  const rendered = render(<ValuesField {...props} />);
67
78
  await waitForLoad(rendered);
@@ -70,14 +81,12 @@ describe("<ValuesField /> fixed", () => {
70
81
 
71
82
  it("test values dropdown changes to given value", async () => {
72
83
  const values = { fixed: ["Foo", "Bar"] };
73
- const onSelectionChange = jest.fn();
84
+ const onChange = jest.fn();
74
85
  const props = {
75
86
  field: { values },
76
- onChange: jest.fn(),
77
- onSelectionChange,
87
+ onChange,
78
88
  widget: "dropdown",
79
- fieldType: "string",
80
- keyType: "fixed",
89
+ type: "string",
81
90
  name: "prefix.values",
82
91
  values: [
83
92
  { id: "template.field.values.fixed", value: "fixed" },
@@ -93,7 +102,7 @@ describe("<ValuesField /> fixed", () => {
93
102
  await user.click(dropdown);
94
103
  await user.click(await rendered.findByText(/fixed_tuple/i));
95
104
 
96
- expect(onSelectionChange).toHaveBeenCalled();
105
+ expect(onChange).toHaveBeenCalled();
97
106
  });
98
107
 
99
108
  it("renders subscribable checkbox", async () => {
@@ -104,7 +113,7 @@ describe("<ValuesField /> fixed", () => {
104
113
  field: { values, subscribable: false },
105
114
  onChange,
106
115
  widget: "dropdown",
107
- fieldType: "string",
116
+ type: "string",
108
117
  subscribableField,
109
118
  keyType: "fixed",
110
119
  name: "prefix.values",
@@ -132,7 +141,7 @@ describe("<ValuesField /> fixed", () => {
132
141
  // Test with fixed_tuple keyType
133
142
  const renderedWithFixedTuple = render({
134
143
  ...props,
135
- keyType: "fixed_tuple",
144
+ values: { fixed_tuple: [{ value: "Foo", text: "Bar" }] }
136
145
  });
137
146
  await waitForLoad(renderedWithFixedTuple);
138
147
 
@@ -149,80 +158,16 @@ describe("<ValuesField /> fixed", () => {
149
158
  });
150
159
  });
151
160
 
152
- describe("<ValuesField /> fixed_tuple", () => {
153
- it("matches the latest snapshot for null values", async () => {
154
- const values = { fixed_tuple: [{ value: "Foo", text: "Bar" }] };
155
- const name = "name.values";
156
- const onChange = jest.fn();
157
- const onSelectionChange = jest.fn();
158
- const props = {
159
- field: { values },
160
- name,
161
- onChange,
162
- onSelectionChange,
163
- keyType: "fixed_tuple",
164
- };
165
- const rendered = render(<ValuesField {...props} />);
166
- await waitForLoad(rendered);
167
- expect(rendered.container).toMatchSnapshot();
168
- });
169
- });
170
-
171
- describe("<ValuesField /> switch", () => {
172
- it("matches the latest snapshot for null values", async () => {
173
- const values = {
174
- switch: {
175
- on: "test",
176
- values: {
177
- a: ["1"],
178
- b: ["2", "3"],
179
- },
180
- },
181
- };
182
- const name = "name.values";
183
- const onSelectionChange = jest.fn();
184
- const props = {
185
- field: { values },
186
- name,
187
- keyType: "switch",
188
- onChange: jest.fn(),
189
- onSelectionChange,
190
- };
191
- const rendered = render(<ValuesField {...props} />);
192
- await waitForLoad(rendered);
193
- expect(rendered.container).toMatchSnapshot();
194
- });
195
- });
196
-
197
161
  describe("<ValuesField /> role_users", () => {
198
- it("matches the latest snapshot for not null values", async () => {
199
- const values = { role_users: "test_role" };
200
- const name = "name.values";
201
- const onSelectionChange = jest.fn();
202
- const props = {
203
- field: { values },
204
- name,
205
- onChange: jest.fn(),
206
- onSelectionChange,
207
- };
208
- const rendered = render(<ValuesField {...props} />);
209
- await waitForLoad(rendered);
210
- expect(rendered.container).toMatchSnapshot();
211
- });
212
-
213
162
  it("test role input", async () => {
214
163
  const values = { processed_users: ["user1"], role_users: "test_role" };
215
164
  const name = "name.values";
216
- const onSelectionChange = jest.fn();
217
165
  const onChange = jest.fn();
218
166
  const props = {
219
167
  field: { values },
220
168
  name,
221
- onSelectionChange,
222
169
  onChange,
223
170
  widget: "dropdown",
224
- fieldType: "user",
225
- keyType: "role_users",
226
171
  fieldNamePrefix: "foo",
227
172
  };
228
173
  const rendered = render(<ValuesField {...props} />);
@@ -362,6 +362,23 @@ exports[`<ActiveGroupForm /> matches the latest snapshot 1`] = `
362
362
  Table
363
363
  </span>
364
364
  </div>
365
+ <div
366
+ aria-checked="false"
367
+ aria-selected="false"
368
+ class="item"
369
+ role="option"
370
+ style="pointer-events: all;"
371
+ >
372
+ <i
373
+ aria-hidden="true"
374
+ class="table icon"
375
+ />
376
+ <span
377
+ class="text"
378
+ >
379
+ Dynamic Table
380
+ </span>
381
+ </div>
365
382
  <div
366
383
  aria-checked="false"
367
384
  aria-selected="false"
@@ -0,0 +1,443 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`FieldDefinition renders dropdowns with initial values 1`] = `
4
+ <div>
5
+ <div
6
+ class="equal width fields"
7
+ >
8
+ <div
9
+ class="required field"
10
+ >
11
+ <label>
12
+ template.field.widget
13
+ </label>
14
+ <div
15
+ aria-expanded="false"
16
+ class="ui fluid selection dropdown"
17
+ name="field.widget"
18
+ required=""
19
+ role="listbox"
20
+ tabindex="0"
21
+ >
22
+ <div
23
+ aria-atomic="true"
24
+ aria-live="polite"
25
+ class="divider text"
26
+ role="alert"
27
+ >
28
+ Text Input
29
+ </div>
30
+ <i
31
+ aria-hidden="true"
32
+ class="dropdown icon"
33
+ />
34
+ <div
35
+ class="menu transition"
36
+ >
37
+ <div
38
+ aria-checked="false"
39
+ aria-selected="false"
40
+ class="item"
41
+ role="option"
42
+ style="pointer-events: all;"
43
+ >
44
+ <i
45
+ aria-hidden="true"
46
+ class="hashtag icon"
47
+ />
48
+ <span
49
+ class="text"
50
+ >
51
+ Identifier
52
+ </span>
53
+ </div>
54
+ <div
55
+ aria-checked="true"
56
+ aria-selected="true"
57
+ class="active selected item"
58
+ role="option"
59
+ style="pointer-events: all;"
60
+ >
61
+ <i
62
+ aria-hidden="true"
63
+ class="minus icon"
64
+ />
65
+ <span
66
+ class="text"
67
+ >
68
+ Text Input
69
+ </span>
70
+ </div>
71
+ <div
72
+ aria-checked="false"
73
+ aria-selected="false"
74
+ class="item"
75
+ role="option"
76
+ style="pointer-events: all;"
77
+ >
78
+ <i
79
+ aria-hidden="true"
80
+ class="align justify icon"
81
+ />
82
+ <span
83
+ class="text"
84
+ >
85
+ Textarea
86
+ </span>
87
+ </div>
88
+ <div
89
+ aria-checked="false"
90
+ aria-selected="false"
91
+ class="item"
92
+ role="option"
93
+ style="pointer-events: all;"
94
+ >
95
+ <i
96
+ aria-hidden="true"
97
+ class="arrow down icon"
98
+ />
99
+ <span
100
+ class="text"
101
+ >
102
+ Dropdown
103
+ </span>
104
+ </div>
105
+ <div
106
+ aria-checked="false"
107
+ aria-selected="false"
108
+ class="item"
109
+ role="option"
110
+ style="pointer-events: all;"
111
+ >
112
+ <i
113
+ aria-hidden="true"
114
+ class="radio icon"
115
+ />
116
+ <span
117
+ class="text"
118
+ >
119
+ Radio
120
+ </span>
121
+ </div>
122
+ <div
123
+ aria-checked="false"
124
+ aria-selected="false"
125
+ class="item"
126
+ role="option"
127
+ style="pointer-events: all;"
128
+ >
129
+ <i
130
+ aria-hidden="true"
131
+ class="check square outline icon"
132
+ />
133
+ <span
134
+ class="text"
135
+ >
136
+ Checkbox
137
+ </span>
138
+ </div>
139
+ <div
140
+ aria-checked="false"
141
+ aria-selected="false"
142
+ class="item"
143
+ role="option"
144
+ style="pointer-events: all;"
145
+ >
146
+ <i
147
+ aria-hidden="true"
148
+ class="linkify icon"
149
+ />
150
+ <span
151
+ class="text"
152
+ >
153
+ Links
154
+ </span>
155
+ </div>
156
+ <div
157
+ aria-checked="false"
158
+ aria-selected="false"
159
+ class="item"
160
+ role="option"
161
+ style="pointer-events: all;"
162
+ >
163
+ <i
164
+ aria-hidden="true"
165
+ class="tint icon"
166
+ />
167
+ <span
168
+ class="text"
169
+ >
170
+ Colorpicker
171
+ </span>
172
+ </div>
173
+ <div
174
+ aria-checked="false"
175
+ aria-selected="false"
176
+ class="item"
177
+ role="option"
178
+ style="pointer-events: all;"
179
+ >
180
+ <i
181
+ aria-hidden="true"
182
+ class="text cursor icon"
183
+ />
184
+ <span
185
+ class="text"
186
+ >
187
+ Enrichedtext
188
+ </span>
189
+ </div>
190
+ <div
191
+ aria-checked="false"
192
+ aria-selected="false"
193
+ class="item"
194
+ role="option"
195
+ style="pointer-events: all;"
196
+ >
197
+ <i
198
+ aria-hidden="true"
199
+ class="table icon"
200
+ />
201
+ <span
202
+ class="text"
203
+ >
204
+ Table
205
+ </span>
206
+ </div>
207
+ <div
208
+ aria-checked="false"
209
+ aria-selected="false"
210
+ class="item"
211
+ role="option"
212
+ style="pointer-events: all;"
213
+ >
214
+ <i
215
+ aria-hidden="true"
216
+ class="table icon"
217
+ />
218
+ <span
219
+ class="text"
220
+ >
221
+ Dynamic Table
222
+ </span>
223
+ </div>
224
+ <div
225
+ aria-checked="false"
226
+ aria-selected="false"
227
+ class="item"
228
+ role="option"
229
+ style="pointer-events: all;"
230
+ >
231
+ <i
232
+ aria-hidden="true"
233
+ class="asterisk icon"
234
+ />
235
+ <span
236
+ class="text"
237
+ >
238
+ Password
239
+ </span>
240
+ </div>
241
+ <div
242
+ aria-checked="false"
243
+ aria-selected="false"
244
+ class="item"
245
+ role="option"
246
+ style="pointer-events: all;"
247
+ >
248
+ <i
249
+ aria-hidden="true"
250
+ class="image icon"
251
+ />
252
+ <span
253
+ class="text"
254
+ >
255
+ Image
256
+ </span>
257
+ </div>
258
+ <div
259
+ aria-checked="false"
260
+ aria-selected="false"
261
+ class="item"
262
+ role="option"
263
+ style="pointer-events: all;"
264
+ >
265
+ <i
266
+ aria-hidden="true"
267
+ class="hashtag icon"
268
+ />
269
+ <span
270
+ class="text"
271
+ >
272
+ Number
273
+ </span>
274
+ </div>
275
+ <div
276
+ aria-checked="false"
277
+ aria-selected="false"
278
+ class="item"
279
+ role="option"
280
+ style="pointer-events: all;"
281
+ >
282
+ <i
283
+ aria-hidden="true"
284
+ class="calendar icon"
285
+ />
286
+ <span
287
+ class="text"
288
+ >
289
+ Date
290
+ </span>
291
+ </div>
292
+ <div
293
+ aria-checked="false"
294
+ aria-selected="false"
295
+ class="item"
296
+ role="option"
297
+ style="pointer-events: all;"
298
+ >
299
+ <i
300
+ aria-hidden="true"
301
+ class="calendar icon"
302
+ />
303
+ <span
304
+ class="text"
305
+ >
306
+ Date Time
307
+ </span>
308
+ </div>
309
+ </div>
310
+ </div>
311
+ </div>
312
+ <div
313
+ class="required field"
314
+ >
315
+ <label>
316
+ template.field.type
317
+ </label>
318
+ <div
319
+ aria-expanded="false"
320
+ class="ui fluid selection dropdown"
321
+ name="field.type"
322
+ required=""
323
+ role="listbox"
324
+ tabindex="0"
325
+ >
326
+ <div
327
+ aria-atomic="true"
328
+ aria-live="polite"
329
+ class="divider text"
330
+ role="alert"
331
+ >
332
+ template.field.type.string
333
+ </div>
334
+ <i
335
+ aria-hidden="true"
336
+ class="dropdown icon"
337
+ />
338
+ <div
339
+ class="menu transition"
340
+ >
341
+ <div
342
+ aria-checked="true"
343
+ aria-selected="true"
344
+ class="active selected item"
345
+ role="option"
346
+ style="pointer-events: all;"
347
+ >
348
+ <span
349
+ class="text"
350
+ >
351
+ template.field.type.string
352
+ </span>
353
+ </div>
354
+ </div>
355
+ </div>
356
+ </div>
357
+ <div
358
+ class="required field"
359
+ >
360
+ <label>
361
+ template.field.cardinality
362
+ </label>
363
+ <div
364
+ aria-expanded="false"
365
+ class="ui fluid selection dropdown"
366
+ name="field.cardinality"
367
+ required=""
368
+ role="listbox"
369
+ tabindex="0"
370
+ >
371
+ <div
372
+ aria-atomic="true"
373
+ aria-live="polite"
374
+ class="divider text"
375
+ role="alert"
376
+ >
377
+ template.field.cardinality.?
378
+ </div>
379
+ <i
380
+ aria-hidden="true"
381
+ class="dropdown icon"
382
+ />
383
+ <div
384
+ class="menu transition"
385
+ >
386
+ <div
387
+ aria-checked="true"
388
+ aria-selected="true"
389
+ class="active selected item"
390
+ role="option"
391
+ style="pointer-events: all;"
392
+ >
393
+ <span
394
+ class="text"
395
+ >
396
+ template.field.cardinality.?
397
+ </span>
398
+ </div>
399
+ <div
400
+ aria-checked="false"
401
+ aria-selected="false"
402
+ class="item"
403
+ role="option"
404
+ style="pointer-events: all;"
405
+ >
406
+ <span
407
+ class="text"
408
+ >
409
+ template.field.cardinality.1
410
+ </span>
411
+ </div>
412
+ <div
413
+ aria-checked="false"
414
+ aria-selected="false"
415
+ class="item"
416
+ role="option"
417
+ style="pointer-events: all;"
418
+ >
419
+ <span
420
+ class="text"
421
+ >
422
+ template.field.cardinality.*
423
+ </span>
424
+ </div>
425
+ <div
426
+ aria-checked="false"
427
+ aria-selected="false"
428
+ class="item"
429
+ role="option"
430
+ style="pointer-events: all;"
431
+ >
432
+ <span
433
+ class="text"
434
+ >
435
+ template.field.cardinality.+
436
+ </span>
437
+ </div>
438
+ </div>
439
+ </div>
440
+ </div>
441
+ </div>
442
+ </div>
443
+ `;