@ukhomeoffice/cop-react-form-renderer 6.15.4-alpha → 6.15.4

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 (107) hide show
  1. package/dist/components/FormComponent/FormComponent.js +6 -0
  2. package/dist/components/FormComponent/helpers/addLabel.js +3 -2
  3. package/dist/components/FormPage/FormPage.js +20 -7
  4. package/dist/components/FormPage/FormPage.test.js +53 -0
  5. package/dist/components/FormRenderer/FormRenderer.js +0 -6
  6. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-containerised.json +119 -0
  7. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested-block.json +112 -0
  8. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-dependent-component-nested.json +105 -0
  9. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-refdata.json +105 -0
  10. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens-target-component-nested.json +98 -0
  11. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-component-show-whens.json +105 -0
  12. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-chained-show-whens-page-hidden.json +112 -0
  13. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-airpax.json +26407 -0
  14. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-cop-mandec.json +9404 -0
  15. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component-dependent-on-external-data.json +157 -0
  16. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-collection-component.json +85 -0
  17. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-collection.json +172 -0
  18. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-referring-to-hidden-collection.json +201 -0
  19. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-show-when-in-component-and-page.json +62 -0
  20. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component-with-nested-questions.json +111 -0
  21. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-component.json +57 -0
  22. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-containerised-component.json +96 -0
  23. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-collection-component.json +82 -0
  24. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-embedded-component.json +54 -0
  25. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component-leaf-hidden.json +105 -0
  26. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-multilevel-containerised-component.json +105 -0
  27. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-options.json +98 -0
  28. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-collection.json +127 -0
  29. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-component-used-elsewhere.json +108 -0
  30. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page-same-component-reused.json +61 -0
  31. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-hidden-page.json +95 -0
  32. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-nested-answers-hidden-by-option.json +111 -0
  33. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/forms/form-page-same-component-reused-one-shown.json +74 -0
  34. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-change-what-happened-before.json +300 -0
  35. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-airpax-remove-photos-before.json +384 -0
  36. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-business-interests-before.json +140 -0
  37. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-criminality-before.json +186 -0
  38. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/cop-mandec-remove-unspent-convictions-before.json +143 -0
  39. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-containerised.json +11 -0
  40. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested-block.json +10 -0
  41. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-dependent-component-nested.json +9 -0
  42. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-refdata.json +11 -0
  43. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens-target-component-nested.json +9 -0
  44. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-component-show-whens.json +9 -0
  45. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-chained-show-whens-page-hidden.json +9 -0
  46. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component-dependent-on-external-data.json +26 -0
  47. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-collection-component.json +15 -0
  48. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-collection.json +25 -0
  49. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-referring-to-hidden-collection.json +26 -0
  50. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-show-when-in-component-and-page.json +6 -0
  51. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component-with-nested-questions.json +12 -0
  52. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-component.json +5 -0
  53. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-containerised-component.json +11 -0
  54. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-collection-component.json +15 -0
  55. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-embedded-component.json +5 -0
  56. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component-leaf-hidden.json +14 -0
  57. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-multilevel-containerised-component.json +14 -0
  58. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-options.json +10 -0
  59. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-collection.json +18 -0
  60. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-component-used-elsewhere.json +9 -0
  61. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page-same-component-reused.json +6 -0
  62. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-hidden-page.json +9 -0
  63. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-nested-answers-hidden-by-option.json +12 -0
  64. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/input/data-page-same-component-reused-one-shown.json +8 -0
  65. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-change-what-happened-after.json +280 -0
  66. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-airpax-remove-photos-after.json +355 -0
  67. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-base-file.json +80 -0
  68. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-business-interests-after.json +122 -0
  69. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-criminality-after.json +86 -0
  70. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/cop-mandec-remove-unspent-convictions-after.json +127 -0
  71. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-containerised-removed.json +11 -0
  72. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-block-removed.json +7 -0
  73. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-dependent-component-nested-removed.json +7 -0
  74. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-refdata-removed.json +7 -0
  75. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-removed.json +7 -0
  76. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-component-show-whens-target-component-nested-removed.json +6 -0
  77. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-chained-show-whens-page-hidden-removed.json +6 -0
  78. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-dependent-on-external-data-removed.json +23 -0
  79. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-collection-component-removed.json +4 -0
  80. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-collection-removed.json +21 -0
  81. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-referring-to-hidden-collection-removed.json +6 -0
  82. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-removed.json +4 -0
  83. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-show-when-in-component-and-page-removed.json +5 -0
  84. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-component-with-nested-questions-removed.json +10 -0
  85. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-containerised-component-removed.json +10 -0
  86. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-collection-component-removed.json +4 -0
  87. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-embedded-component-removed.json +4 -0
  88. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-leaf-hidden-removed.json +13 -0
  89. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-multilevel-containerised-component-removed.json +10 -0
  90. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-options-removed.json +8 -0
  91. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-collection-removed.json +15 -0
  92. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-component-used-elsewhere-removed.json +5 -0
  93. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-removed.json +4 -0
  94. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-hidden-page-same-component-reused-removed.json +5 -0
  95. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-nested-answers-hidden-by-option-removed.json +11 -0
  96. package/dist/components/FormRenderer/clear-uncompleted-routes/test-data/output/data-page-same-component-reused-one-shown-removed.json +7 -0
  97. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.js +323 -0
  98. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutes.test.js +349 -0
  99. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.js +381 -0
  100. package/dist/components/FormRenderer/helpers/clearOutUncompletedRoutesUtils.test.js +559 -0
  101. package/dist/components/FormRenderer/helpers/index.js +3 -1
  102. package/dist/components/FormRenderer/onCYAAction.js +12 -0
  103. package/dist/components/FormRenderer/onCYAAction.test.js +5 -0
  104. package/dist/components/FormRenderer/onPageAction.js +7 -0
  105. package/dist/components/FormRenderer/onPageAction.test.js +5 -0
  106. package/dist/utils/CollectionPage/mergeCollectionPages.js +1 -0
  107. package/package.json +2 -2
@@ -76,6 +76,12 @@ const FormComponent = _ref => {
76
76
 
77
77
  // eslint-disable-next-line no-param-reassign
78
78
  target = (0, _helpers.addLabel)(target, component, data);
79
+ if (component.type === _models.ComponentTypes.SELECT && target.value === '') {
80
+ // eslint-disable-next-line no-param-reassign
81
+ target.value = null;
82
+ // eslint-disable-next-line no-param-reassign
83
+ target.label = null;
84
+ }
79
85
  onChange({
80
86
  target
81
87
  });
@@ -10,13 +10,14 @@ exports.default = void 0;
10
10
  * @returns The updated target.
11
11
  */
12
12
  const addLabel = (paramTarget, component, data) => {
13
+ var _target$value;
13
14
  const target = paramTarget;
14
15
  // target.value can be an object in which case use value in object attribute
15
- const value = typeof target.value === 'object' ? target.value.value : target.value;
16
+ const value = typeof target.value === 'object' ? (_target$value = target.value) === null || _target$value === void 0 ? void 0 : _target$value.value : target.value;
16
17
  // find the reference data item using the value
17
18
  const item = data.find(e => String(e.id) === value);
18
19
  // if item is null it means that the target.value can be used as a label otherwise use item.label
19
- target.label = item === undefined ? target.value : item.label;
20
+ target.label = item === undefined ? target.value || '' : item.label;
20
21
  target.component = component.cya_label;
21
22
  return target;
22
23
  };
@@ -19,6 +19,8 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
19
19
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
20
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
21
  function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
22
+ function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; }
23
+ function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; }
22
24
  function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
23
25
  function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } // Global imports
24
26
  // Local imports.
@@ -67,20 +69,31 @@ const FormPage = _ref => {
67
69
  target
68
70
  } = _ref2;
69
71
  const formPage = page;
70
- if (target.value == null) {
72
+ const {
73
+ value
74
+ } = target;
75
+ if (!value) {
71
76
  delete formPage.formData[target.name];
72
77
  setPatch(prev => {
73
- const data = prev;
74
- return delete data[target.name];
78
+ const _target$name = target.name,
79
+ {
80
+ [_target$name]: removedValue
81
+ } = prev,
82
+ newState = _objectWithoutProperties(prev, [_target$name].map(_toPropertyKey));
83
+ return newState;
75
84
  });
76
85
  setPatchLabel(prev => {
77
- const data = prev;
78
- return delete data[target.component];
86
+ const _target$component = target.component,
87
+ {
88
+ [_target$component]: removedValue
89
+ } = prev,
90
+ newState = _objectWithoutProperties(prev, [_target$component].map(_toPropertyKey));
91
+ return newState;
79
92
  });
80
93
  } else {
81
- formPage.formData[target.name] = target.value;
94
+ formPage.formData[target.name] = value;
82
95
  setPatch(prev => _objectSpread(_objectSpread({}, prev), {}, {
83
- [target.name]: target.value
96
+ [target.name]: value
84
97
  }));
85
98
  setPatchLabel(prev => _objectSpread(_objectSpread({}, prev), {}, {
86
99
  [target.component]: target.label
@@ -337,5 +337,58 @@ describe('components.FormPage', () => {
337
337
  }));
338
338
  expect(ON_ACTION_CALLS.length).toEqual(0);
339
339
  });
340
+ it('removed field from the form data when the value is set to null', () => {
341
+ const AUTOCOMPLETE = {
342
+ id: 'autocomplete',
343
+ fieldId: 'autocomplete',
344
+ label: 'autocomplete',
345
+ hint: '',
346
+ type: 'autocomplete',
347
+ required: true,
348
+ source: [{
349
+ id: 'a',
350
+ name: 'apple'
351
+ }, {
352
+ id: 'b',
353
+ name: 'banana'
354
+ }, {
355
+ id: 'c',
356
+ name: 'cherry'
357
+ }, {
358
+ id: 'd',
359
+ name: 'DURIAN'
360
+ }],
361
+ disabled: false
362
+ };
363
+ const page = {
364
+ id: 'page1',
365
+ title: 'Page title',
366
+ label: 'Page label',
367
+ components: [AUTOCOMPLETE],
368
+ formData: {
369
+ autocomplete: 'autocomplete value example'
370
+ },
371
+ actions: []
372
+ };
373
+ const onChangeMock = jest.fn();
374
+ const {
375
+ getByLabelText
376
+ } = (0, _setupTests.renderWithValidation)(/*#__PURE__*/_react2.default.createElement(_FormPage.default, {
377
+ page: page,
378
+ fromTarget: true,
379
+ onAction: onChangeMock,
380
+ onChange: onChangeMock
381
+ }));
382
+ const input = getByLabelText('autocomplete');
383
+ _react.fireEvent.change(input, {
384
+ target: {
385
+ name: 'autocomplete',
386
+ value: '',
387
+ component: 'autocomplete'
388
+ }
389
+ });
390
+ const updatedState = onChangeMock.mock.calls.pop()[0];
391
+ expect(updatedState.autocomplete).toBeUndefined();
392
+ });
340
393
  });
341
394
  });
@@ -144,12 +144,6 @@ const InternalFormRenderer = _ref2 => {
144
144
  setGoingBack(true);
145
145
  hooks.onGoingBack(e.state ? e.state : null);
146
146
  if (components && pages && data && (_formState$page = formState.page) !== null && _formState$page !== void 0 && _formState$page.formData && pagePoint === undefined) {
147
- var _formState$page$formD, _formState$page$formD2;
148
- // clear current formTasks when going back
149
- if ((_formState$page$formD = formState.page.formData) !== null && _formState$page$formD !== void 0 && (_formState$page$formD = _formState$page$formD.formStatus) !== null && _formState$page$formD !== void 0 && _formState$page$formD.tasks && (_formState$page$formD2 = formState.page.formData) !== null && _formState$page$formD2 !== void 0 && (_formState$page$formD2 = _formState$page$formD2.formStatus) !== null && _formState$page$formD2 !== void 0 && _formState$page$formD2.taskPage) {
150
- formState.page.formData.formStatus.tasks = {};
151
- formState.page.formData.formStatus.taskPage = null;
152
- }
153
147
  const submissionData = _utils.default.Format.form({
154
148
  pages,
155
149
  components
@@ -0,0 +1,119 @@
1
+ {
2
+ "id": "example-form",
3
+ "version": "0.0.1",
4
+ "name": "example-form",
5
+ "title": "Example form",
6
+ "type": "form",
7
+ "components": [
8
+ {
9
+ "id": "alpha-parent",
10
+ "fieldId": "alpha-parent",
11
+ "type": "container",
12
+ "components": [
13
+ {
14
+ "id": "alpha",
15
+ "fieldId": "alpha",
16
+ "label": "Alpha",
17
+ "type": "text",
18
+ "show_when": {
19
+ "op": "=",
20
+ "field": "bravo-parent.bravo",
21
+ "value": "bravo-value"
22
+ }
23
+ }
24
+ ]
25
+ },
26
+ {
27
+ "id": "bravo-parent",
28
+ "fieldId": "bravo-parent",
29
+ "type": "container",
30
+ "components": [
31
+ {
32
+ "id": "bravo",
33
+ "fieldId": "bravo",
34
+ "label": "Bravo",
35
+ "type": "text",
36
+ "show_when": {
37
+ "op": "=",
38
+ "field": "gamma-parent.gamma",
39
+ "value": "gamma-value"
40
+ }
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "id": "personKnown",
46
+ "fieldId": "personKnown",
47
+ "type": "radios",
48
+ "data": {
49
+ "options": [
50
+ {
51
+ "value": "yes",
52
+ "label": "Yes",
53
+ "nested": [
54
+ {
55
+ "id": "telephone",
56
+ "fieldId": "telephone",
57
+ "type": "text",
58
+ "label": "Telephone",
59
+ "required": true
60
+ }
61
+ ]
62
+ },
63
+ {
64
+ "value": "no",
65
+ "label": "No"
66
+ }
67
+ ]
68
+ }
69
+ },
70
+ {
71
+ "id": "gamma-parent",
72
+ "fieldId": "gamma-parent",
73
+ "type": "container",
74
+ "components": [
75
+ {
76
+ "id": "gamma",
77
+ "fieldId": "gamma",
78
+ "label": "Gamma",
79
+ "type": "text",
80
+ "show_when": {
81
+ "op": "=",
82
+ "field": "epsilon",
83
+ "value": "epsilon-value"
84
+ }
85
+ }
86
+ ]
87
+ },
88
+ {
89
+ "id": "epsilon",
90
+ "fieldId": "epsilon",
91
+ "label": "Epsilon",
92
+ "type": "text"
93
+ }
94
+ ],
95
+ "pages": [
96
+ {
97
+ "id": "visiblePage",
98
+ "name": "visiblePage",
99
+ "title": "Visible Page",
100
+ "components": [
101
+ {
102
+ "use": "alpha-parent"
103
+ },
104
+ {
105
+ "use": "bravo-parent"
106
+ },
107
+ {
108
+ "use": "personKnown"
109
+ },
110
+ {
111
+ "use": "gamma-parent"
112
+ },
113
+ {
114
+ "use": "epsilon"
115
+ }
116
+ ]
117
+ }
118
+ ]
119
+ }
@@ -0,0 +1,112 @@
1
+ {
2
+ "id": "example-form",
3
+ "version": "0.0.1",
4
+ "name": "example-form",
5
+ "title": "Example form",
6
+ "type": "form",
7
+ "components": [
8
+ {
9
+ "id": "alpha",
10
+ "fieldId": "alpha",
11
+ "label": "Alpha",
12
+ "type": "text"
13
+ },
14
+ {
15
+ "id": "bravo",
16
+ "fieldId": "bravo",
17
+ "label": "Bravo",
18
+ "type": "text",
19
+ "show_when": [
20
+ {
21
+ "type": "or",
22
+ "conditions": [
23
+ {
24
+ "op": "=",
25
+ "field": "gamma",
26
+ "value": "NOT-gamma-value"
27
+ },
28
+ {
29
+ "op": "=",
30
+ "field": "epsilon",
31
+ "value": "NOT-epsilon-value"
32
+ }
33
+ ]
34
+ }
35
+ ]
36
+ },
37
+ {
38
+ "id": "personKnown",
39
+ "fieldId": "personKnown",
40
+ "type": "radios",
41
+ "data": {
42
+ "options": [
43
+ {
44
+ "value": "yes",
45
+ "label": "Yes",
46
+ "nested": [
47
+ {
48
+ "id": "telephone",
49
+ "fieldId": "telephone",
50
+ "type": "text",
51
+ "label": "Telephone",
52
+ "required": true
53
+ },
54
+ {
55
+ "id": "address",
56
+ "fieldId": "address",
57
+ "type": "text",
58
+ "label": "Address",
59
+ "required": true
60
+ }
61
+ ],
62
+ "show_when": {
63
+ "op": "=",
64
+ "field": "bravo",
65
+ "value": "bravo-value"
66
+ }
67
+ },
68
+ {
69
+ "value": "no",
70
+ "label": "No"
71
+ }
72
+ ]
73
+ }
74
+ },
75
+ {
76
+ "id": "gamma",
77
+ "fieldId": "gamma",
78
+ "label": "Gamma",
79
+ "type": "text"
80
+ },
81
+ {
82
+ "id": "epsilon",
83
+ "fieldId": "epsilon",
84
+ "label": "Epsilon",
85
+ "type": "text"
86
+ }
87
+ ],
88
+ "pages": [
89
+ {
90
+ "id": "visiblePage",
91
+ "name": "visiblePage",
92
+ "title": "Visible Page",
93
+ "components": [
94
+ {
95
+ "use": "alpha"
96
+ },
97
+ {
98
+ "use": "bravo"
99
+ },
100
+ {
101
+ "use": "personKnown"
102
+ },
103
+ {
104
+ "use": "gamma"
105
+ },
106
+ {
107
+ "use": "epsilon"
108
+ }
109
+ ]
110
+ }
111
+ ]
112
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "id": "example-form",
3
+ "version": "0.0.1",
4
+ "name": "example-form",
5
+ "title": "Example form",
6
+ "type": "form",
7
+ "components": [
8
+ {
9
+ "id": "alpha",
10
+ "fieldId": "alpha",
11
+ "label": "Alpha",
12
+ "type": "text"
13
+ },
14
+ {
15
+ "id": "bravo",
16
+ "fieldId": "bravo",
17
+ "label": "Bravo",
18
+ "type": "text",
19
+ "show_when": [
20
+ {
21
+ "type": "or",
22
+ "conditions": [
23
+ {
24
+ "op": "=",
25
+ "field": "gamma",
26
+ "value": "NOT-gamma-value"
27
+ },
28
+ {
29
+ "op": "=",
30
+ "field": "epsilon",
31
+ "value": "NOT-epsilon-value"
32
+ }
33
+ ]
34
+ }
35
+ ]
36
+ },
37
+ {
38
+ "id": "personKnown",
39
+ "fieldId": "personKnown",
40
+ "type": "radios",
41
+ "data": {
42
+ "options": [
43
+ {
44
+ "value": "yes",
45
+ "label": "Yes",
46
+ "nested": [
47
+ {
48
+ "id": "telephone",
49
+ "fieldId": "telephone",
50
+ "type": "text",
51
+ "label": "Telephone",
52
+ "required": true,
53
+ "show_when": {
54
+ "op": "=",
55
+ "field": "bravo",
56
+ "value": "bravo-value"
57
+ }
58
+ }
59
+ ]
60
+ },
61
+ {
62
+ "value": "no",
63
+ "label": "No"
64
+ }
65
+ ]
66
+ }
67
+ },
68
+ {
69
+ "id": "gamma",
70
+ "fieldId": "gamma",
71
+ "label": "Gamma",
72
+ "type": "text"
73
+ },
74
+ {
75
+ "id": "epsilon",
76
+ "fieldId": "epsilon",
77
+ "label": "Epsilon",
78
+ "type": "text"
79
+ }
80
+ ],
81
+ "pages": [
82
+ {
83
+ "id": "visiblePage",
84
+ "name": "visiblePage",
85
+ "title": "Visible Page",
86
+ "components": [
87
+ {
88
+ "use": "alpha"
89
+ },
90
+ {
91
+ "use": "bravo"
92
+ },
93
+ {
94
+ "use": "personKnown"
95
+ },
96
+ {
97
+ "use": "gamma"
98
+ },
99
+ {
100
+ "use": "epsilon"
101
+ }
102
+ ]
103
+ }
104
+ ]
105
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "id": "example-form",
3
+ "version": "0.0.1",
4
+ "name": "example-form",
5
+ "title": "Example form",
6
+ "type": "form",
7
+ "components": [
8
+ {
9
+ "id": "alpha",
10
+ "fieldId": "alpha",
11
+ "label": "Alpha",
12
+ "type": "text",
13
+ "show_when": {
14
+ "op": "=",
15
+ "field": "bravo.id",
16
+ "value": "bravo-value.id"
17
+ }
18
+ },
19
+ {
20
+ "id": "bravo",
21
+ "fieldId": "bravo",
22
+ "label": "Bravo",
23
+ "type": "text",
24
+ "show_when": [
25
+ {
26
+ "type": "or",
27
+ "conditions": [
28
+ {
29
+ "op": "=",
30
+ "field": "gamma",
31
+ "value": "NOT-gamma-value"
32
+ },
33
+ {
34
+ "op": "=",
35
+ "field": "epsilon",
36
+ "value": "NOT-epsilon-value"
37
+ }
38
+ ]
39
+ }
40
+ ]
41
+ },
42
+ {
43
+ "id": "personKnown",
44
+ "fieldId": "personKnown",
45
+ "type": "radios",
46
+ "data": {
47
+ "options": [
48
+ {
49
+ "value": "yes",
50
+ "label": "Yes",
51
+ "nested": [
52
+ {
53
+ "id": "telephone",
54
+ "fieldId": "telephone",
55
+ "type": "text",
56
+ "label": "Telephone",
57
+ "required": true
58
+ }
59
+ ]
60
+ },
61
+ {
62
+ "value": "no",
63
+ "label": "No"
64
+ }
65
+ ]
66
+ }
67
+ },
68
+ {
69
+ "id": "gamma",
70
+ "fieldId": "gamma",
71
+ "label": "Gamma",
72
+ "type": "text"
73
+ },
74
+ {
75
+ "id": "epsilon",
76
+ "fieldId": "epsilon",
77
+ "label": "Epsilon",
78
+ "type": "text"
79
+ }
80
+ ],
81
+ "pages": [
82
+ {
83
+ "id": "visiblePage",
84
+ "name": "visiblePage",
85
+ "title": "Visible Page",
86
+ "components": [
87
+ {
88
+ "use": "alpha"
89
+ },
90
+ {
91
+ "use": "bravo"
92
+ },
93
+ {
94
+ "use": "personKnown"
95
+ },
96
+ {
97
+ "use": "gamma"
98
+ },
99
+ {
100
+ "use": "epsilon"
101
+ }
102
+ ]
103
+ }
104
+ ]
105
+ }
@@ -0,0 +1,98 @@
1
+ {
2
+ "id": "example-form",
3
+ "version": "0.0.1",
4
+ "name": "example-form",
5
+ "title": "Example form",
6
+ "type": "form",
7
+ "components": [
8
+ {
9
+ "id": "alpha",
10
+ "fieldId": "alpha",
11
+ "label": "Alpha",
12
+ "type": "text"
13
+ },
14
+ {
15
+ "id": "bravo",
16
+ "fieldId": "bravo",
17
+ "label": "Bravo",
18
+ "type": "text",
19
+ "show_when": {
20
+ "op": "=",
21
+ "field": "telephone",
22
+ "value": "telephone-value"
23
+ }
24
+ },
25
+ {
26
+ "id": "personKnown",
27
+ "fieldId": "personKnown",
28
+ "type": "radios",
29
+ "data": {
30
+ "options": [
31
+ {
32
+ "value": "yes",
33
+ "label": "Yes",
34
+ "nested": [
35
+ {
36
+ "id": "telephone",
37
+ "fieldId": "telephone",
38
+ "type": "text",
39
+ "label": "Telephone",
40
+ "required": true,
41
+ "show_when": {
42
+ "op": "=",
43
+ "field": "epsilon",
44
+ "value": "NOT-epsilon-value"
45
+ }
46
+ }
47
+ ]
48
+ },
49
+ {
50
+ "value": "no",
51
+ "label": "No"
52
+ }
53
+ ]
54
+ }
55
+ },
56
+ {
57
+ "id": "gamma",
58
+ "fieldId": "gamma",
59
+ "label": "Gamma",
60
+ "type": "text",
61
+ "show_when": {
62
+ "op": "=",
63
+ "field": "bravo",
64
+ "value": "bravo-value"
65
+ }
66
+ },
67
+ {
68
+ "id": "epsilon",
69
+ "fieldId": "epsilon",
70
+ "label": "Epsilon",
71
+ "type": "text"
72
+ }
73
+ ],
74
+ "pages": [
75
+ {
76
+ "id": "visiblePage",
77
+ "name": "visiblePage",
78
+ "title": "Visible Page",
79
+ "components": [
80
+ {
81
+ "use": "alpha"
82
+ },
83
+ {
84
+ "use": "bravo"
85
+ },
86
+ {
87
+ "use": "personKnown"
88
+ },
89
+ {
90
+ "use": "gamma"
91
+ },
92
+ {
93
+ "use": "epsilon"
94
+ }
95
+ ]
96
+ }
97
+ ]
98
+ }