@defra/forms-model 3.0.685 → 3.0.686

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.
@@ -1,5 +1,7 @@
1
1
  import { ComponentType } from "../components/enums.js";
2
- import { ConditionType } from "./enums.js";
2
+ import { isConditionalType } from "../components/helpers.js";
3
+ import { ConditionType, Coordinator, OperatorName } from "./enums.js";
4
+ import { getConditionListItemIds } from "../form/form-definition/helpers.js";
3
5
  /**
4
6
  * Generate a valid JavaScript identifier from a condition ID
5
7
  * @param conditionId - The condition ID (UUID)
@@ -29,21 +31,69 @@ export function isConditionRelativeDateValueDataV2(condition) {
29
31
  function getListItem(model, listId, itemId) {
30
32
  const foundList = model.getListById(listId);
31
33
  if (!foundList) {
32
- throw Error(`List ${listId} not found`);
34
+ throw new Error(`List ${listId} not found`);
33
35
  }
34
36
  const item = foundList.items.find(item => item.id === itemId);
35
37
  if (!item) {
36
- throw Error(`List item ${itemId} not found`);
38
+ throw new Error(`List item ${itemId} not found`);
37
39
  }
38
40
  return item;
39
41
  }
40
- function createConditionValueDataFromListItemRefV2(condition, model) {
42
+ function createConditionValueDataListFromListItemRefV2(condition, model) {
41
43
  const value = condition.value;
42
- const refValue = getListItem(model, value.listId, value.itemId);
44
+ const itemIds = getConditionListItemIds(value);
45
+ return itemIds.map(itemId => {
46
+ const refValue = getListItem(model, value.listId, itemId);
47
+ return {
48
+ display: refValue.text,
49
+ type: ConditionType.Value,
50
+ value: refValue.value.toString()
51
+ };
52
+ });
53
+ }
54
+
55
+ /**
56
+ * Determine how multiple selected list items are combined within a single
57
+ * V2 condition once expanded into individual V1 conditions.
58
+ * - Checkbox questions use the author-chosen coordinator (default OR).
59
+ * - Single-answer questions (radio/autocomplete/select) combine with OR for a
60
+ * positive match and AND for a negative ("is not any of these") match.
61
+ */
62
+ function getListItemsInnerCoordinator(componentType, operator, itemsCoordinator) {
63
+ if (componentType === ComponentType.CheckboxesField) {
64
+ return itemsCoordinator ?? Coordinator.OR;
65
+ }
66
+ return operator === OperatorName.IsNot ? Coordinator.AND : Coordinator.OR;
67
+ }
68
+
69
+ /**
70
+ * Convert a V2 list item ref condition to V1. A single selected item produces
71
+ * a single condition (unchanged from legacy behaviour); multiple selected
72
+ * items produce a nested condition group so they are correctly parenthesised
73
+ * relative to sibling conditions.
74
+ */
75
+ function convertListItemRefConditionV2(model, condition, component, field, coordinator) {
76
+ const value = condition.value;
77
+ const values = createConditionValueDataListFromListItemRefV2(condition, model);
78
+ if (!values.length) {
79
+ throw new Error('List item ref condition has no selected items');
80
+ }
81
+ if (values.length === 1) {
82
+ return {
83
+ field,
84
+ operator: condition.operator,
85
+ value: values[0],
86
+ coordinator
87
+ };
88
+ }
89
+ const innerCoordinator = getListItemsInnerCoordinator(component.type, condition.operator, value.itemsCoordinator);
43
90
  return {
44
- display: refValue.text,
45
- type: ConditionType.Value,
46
- value: refValue.value.toString()
91
+ conditions: values.map((itemValue, index) => ({
92
+ field,
93
+ operator: condition.operator,
94
+ value: itemValue,
95
+ coordinator: index === 0 ? coordinator : innerCoordinator
96
+ }))
47
97
  };
48
98
  }
49
99
  function createConditionValueDataFromStringOrDateValueDataV2(condition) {
@@ -95,12 +145,21 @@ function isConditionDataV2(condition) {
95
145
  function convertConditionDataV2(model, condition, coordinator) {
96
146
  const component = model.getComponentById(condition.componentId);
97
147
  if (!component) {
98
- throw Error('Component not found');
148
+ throw new Error('Component not found');
99
149
  }
100
- let newValue;
150
+ if (!isConditionalType(component.type)) {
151
+ throw new Error(`Component ${component.name} does not support conditions`);
152
+ }
153
+ const field = {
154
+ name: component.name,
155
+ type: component.type,
156
+ display: component.title
157
+ };
101
158
  if (isConditionListItemRefValueDataV2(condition)) {
102
- newValue = createConditionValueDataFromListItemRefV2(condition, model);
103
- } else if (isConditionStringValueDataV2(condition)) {
159
+ return convertListItemRefConditionV2(model, condition, component, field, coordinator);
160
+ }
161
+ let newValue;
162
+ if (isConditionStringValueDataV2(condition)) {
104
163
  newValue = createConditionValueDataFromStringValueDataV2(condition);
105
164
  } else if (isConditionBooleanValueDataV2(condition)) {
106
165
  newValue = component.type === ComponentType.DeclarationField ? createConditionValueDataFromDeclarationValueDataV2(condition) : createConditionValueDataFromBooleanValueDataV2(condition);
@@ -111,14 +170,10 @@ function convertConditionDataV2(model, condition, coordinator) {
111
170
  } else if (isConditionRelativeDateValueDataV2(condition)) {
112
171
  newValue = createConditionValueDataFromRelativeDateValueDataV2(condition);
113
172
  } else {
114
- throw Error('Unsupported condition type');
173
+ throw new Error('Unsupported condition type');
115
174
  }
116
175
  return {
117
- field: {
118
- name: component.name,
119
- type: component.type /** @todo fix this */,
120
- display: component.title
121
- },
176
+ field,
122
177
  operator: condition.operator,
123
178
  value: newValue,
124
179
  coordinator
@@ -127,7 +182,7 @@ function convertConditionDataV2(model, condition, coordinator) {
127
182
  function convertConditionRefDataFromV2(model, condition, coordinator) {
128
183
  const refCondition = model.getConditionById(condition.conditionId);
129
184
  if (!refCondition) {
130
- throw Error('Component not found');
185
+ throw new Error('Component not found');
131
186
  }
132
187
  return {
133
188
  conditionName: generateConditionAlias(refCondition.id),
@@ -1 +1 @@
1
- {"version":3,"file":"migration.js","names":["ComponentType","ConditionType","generateConditionAlias","conditionId","replaceAll","isConditionListItemRefValueDataV2","condition","type","ListItemRef","isConditionStringValueDataV2","StringValue","isConditionBooleanValueDataV2","BooleanValue","isConditionNumberValueDataV2","NumberValue","isConditionDateValueDataV2","DateValue","isConditionRelativeDateValueDataV2","RelativeDate","getListItem","model","listId","itemId","foundList","getListById","Error","item","items","find","id","createConditionValueDataFromListItemRefV2","value","refValue","display","text","Value","toString","createConditionValueDataFromStringOrDateValueDataV2","createConditionValueDataFromStringValueDataV2","createConditionValueDataFromDateValueDataV2","createConditionValueDataFromRelativeDateValueDataV2","period","unit","direction","createConditionValueDataFromNumberValueDataV2","createConditionValueDataFromBooleanValueDataV2","createConditionValueDataFromDeclarationValueDataV2","isConditionDataV2","convertConditionDataV2","coordinator","component","getComponentById","componentId","newValue","DeclarationField","field","name","title","operator","convertConditionRefDataFromV2","refCondition","getConditionById","conditionName","conditionDisplayName","displayName","isConditionWrapperV2","wrapper","Array","isArray","isConditionWrapper","convertConditionWrapperFromV2","conditionWrapper","length","newConditionWrapper","conditions","map","index","newCondition","undefined"],"sources":["../../../src/conditions/migration.ts"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport {\n type ComponentDef,\n type ConditionalComponentType\n} from '~/src/components/types.js'\nimport { ConditionType, type Coordinator } from '~/src/conditions/enums.js'\nimport {\n type ConditionData,\n type ConditionDataV2,\n type ConditionListItemRefValueDataV2,\n type ConditionRefData,\n type ConditionRefDataV2,\n type ConditionValueData,\n type RelativeDateValueData,\n type RelativeDateValueDataV2\n} from '~/src/conditions/types.js'\nimport {\n type ConditionWrapper,\n type ConditionWrapperV2,\n type List\n} from '~/src/form/form-definition/types.js'\n\n/**\n * Generate a valid JavaScript identifier from a condition ID\n * @param conditionId - The condition ID (UUID)\n * @returns A valid JavaScript identifier\n */\nexport const generateConditionAlias = (conditionId: string): string => {\n return `cond_${conditionId.replaceAll('-', '')}`\n}\n\nexport function isConditionListItemRefValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.ListItemRef\n}\n\nexport function isConditionStringValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.StringValue\n}\n\nexport function isConditionBooleanValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.BooleanValue\n}\n\nexport function isConditionNumberValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.NumberValue\n}\n\nexport function isConditionDateValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.DateValue\n}\n\nexport function isConditionRelativeDateValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.RelativeDate\n}\n\nfunction getListItem(model: RuntimeFormModel, listId: string, itemId: string) {\n const foundList = model.getListById(listId)\n\n if (!foundList) {\n throw Error(`List ${listId} not found`)\n }\n\n const item = foundList.items.find((item) => item.id === itemId)\n\n if (!item) {\n throw Error(`List item ${itemId} not found`)\n }\n\n return item\n}\n\nfunction createConditionValueDataFromListItemRefV2(\n condition: ConditionDataV2,\n model: RuntimeFormModel\n): ConditionValueData {\n const value = condition.value as ConditionListItemRefValueDataV2\n const refValue = getListItem(model, value.listId, value.itemId)\n\n return {\n display: refValue.text,\n type: ConditionType.Value,\n value: refValue.value.toString()\n }\n}\n\nfunction createConditionValueDataFromStringOrDateValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return {\n type: ConditionType.Value,\n value: condition.value as string,\n display: condition.value as string\n }\n}\n\nfunction createConditionValueDataFromStringValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return createConditionValueDataFromStringOrDateValueDataV2(condition)\n}\n\nfunction createConditionValueDataFromDateValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return createConditionValueDataFromStringOrDateValueDataV2(condition)\n}\n\nfunction createConditionValueDataFromRelativeDateValueDataV2(\n condition: ConditionDataV2\n): RelativeDateValueData {\n const value = condition.value as RelativeDateValueDataV2\n return {\n type: ConditionType.RelativeDate,\n period: value.period.toString(),\n unit: value.unit,\n direction: value.direction\n }\n}\n\nfunction createConditionValueDataFromNumberValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return {\n type: ConditionType.Value,\n value: (condition.value as number).toString(),\n display: (condition.value as number).toString()\n }\n}\n\nfunction createConditionValueDataFromBooleanValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return {\n type: ConditionType.Value,\n value: (condition.value as boolean).toString(),\n display: (condition.value as boolean) ? 'Yes' : 'No'\n }\n}\n\nfunction createConditionValueDataFromDeclarationValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return {\n type: ConditionType.Value,\n value: (condition.value as boolean).toString(),\n display: (condition.value as boolean) ? 'Agreed' : 'Not agreed'\n }\n}\n\nfunction isConditionDataV2(\n condition: ConditionDataV2 | ConditionRefDataV2\n): condition is ConditionDataV2 {\n return 'componentId' in condition\n}\n\nfunction convertConditionDataV2(\n model: RuntimeFormModel,\n condition: ConditionDataV2,\n coordinator: Coordinator | undefined\n): ConditionData {\n const component = model.getComponentById(condition.componentId)\n\n if (!component) {\n throw Error('Component not found')\n }\n\n let newValue\n if (isConditionListItemRefValueDataV2(condition)) {\n newValue = createConditionValueDataFromListItemRefV2(condition, model)\n } else if (isConditionStringValueDataV2(condition)) {\n newValue = createConditionValueDataFromStringValueDataV2(condition)\n } else if (isConditionBooleanValueDataV2(condition)) {\n newValue =\n component.type === ComponentType.DeclarationField\n ? createConditionValueDataFromDeclarationValueDataV2(condition)\n : createConditionValueDataFromBooleanValueDataV2(condition)\n } else if (isConditionNumberValueDataV2(condition)) {\n newValue = createConditionValueDataFromNumberValueDataV2(condition)\n } else if (isConditionDateValueDataV2(condition)) {\n newValue = createConditionValueDataFromDateValueDataV2(condition)\n } else if (isConditionRelativeDateValueDataV2(condition)) {\n newValue = createConditionValueDataFromRelativeDateValueDataV2(condition)\n } else {\n throw Error('Unsupported condition type')\n }\n\n return {\n field: {\n name: component.name,\n type: component.type as ConditionalComponentType /** @todo fix this */,\n display: component.title\n },\n operator: condition.operator,\n value: newValue,\n coordinator\n }\n}\n\nfunction convertConditionRefDataFromV2(\n model: RuntimeFormModel,\n condition: ConditionRefDataV2,\n coordinator: Coordinator | undefined\n): ConditionRefData {\n const refCondition = model.getConditionById(condition.conditionId)\n\n if (!refCondition) {\n throw Error('Component not found')\n }\n\n return {\n conditionName: generateConditionAlias(refCondition.id),\n conditionDisplayName: refCondition.displayName,\n coordinator\n }\n}\n\nexport function isConditionWrapperV2(\n wrapper: ConditionWrapper | ConditionWrapperV2\n): wrapper is ConditionWrapperV2 {\n return Array.isArray((wrapper as ConditionWrapperV2).items)\n}\n\nexport function isConditionWrapper(\n wrapper: ConditionWrapper | ConditionWrapperV2\n): wrapper is ConditionWrapper {\n return !isConditionWrapperV2(wrapper)\n}\n\nexport function convertConditionWrapperFromV2(\n conditionWrapper: ConditionWrapperV2,\n model: RuntimeFormModel\n): ConditionWrapper {\n let coordinator\n\n if (conditionWrapper.items.length > 1 && !conditionWrapper.coordinator) {\n throw new Error('Coordinator is required for multiple conditions')\n } else {\n coordinator = conditionWrapper.coordinator\n }\n\n const newConditionWrapper: ConditionWrapper = {\n name: conditionWrapper.id,\n displayName: conditionWrapper.displayName,\n value: {\n name: conditionWrapper.id,\n conditions: conditionWrapper.items.map((condition, index) => {\n let newCondition: ConditionData | ConditionRefData\n\n if (isConditionDataV2(condition)) {\n newCondition = convertConditionDataV2(\n model,\n condition,\n index > 0 ? coordinator : undefined\n )\n } else {\n newCondition = convertConditionRefDataFromV2(\n model,\n condition,\n index > 0 ? coordinator : undefined\n )\n }\n\n return newCondition\n })\n }\n }\n\n return newConditionWrapper\n}\n\nexport interface RuntimeFormModel {\n getListById: (listId: string) => List | undefined\n getComponentById: (componentId: string) => ComponentDef | undefined\n getConditionById: (conditionId: string) => ConditionWrapperV2 | undefined\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"migration.js","names":["ComponentType","isConditionalType","ConditionType","Coordinator","OperatorName","getConditionListItemIds","generateConditionAlias","conditionId","replaceAll","isConditionListItemRefValueDataV2","condition","type","ListItemRef","isConditionStringValueDataV2","StringValue","isConditionBooleanValueDataV2","BooleanValue","isConditionNumberValueDataV2","NumberValue","isConditionDateValueDataV2","DateValue","isConditionRelativeDateValueDataV2","RelativeDate","getListItem","model","listId","itemId","foundList","getListById","Error","item","items","find","id","createConditionValueDataListFromListItemRefV2","value","itemIds","map","refValue","display","text","Value","toString","getListItemsInnerCoordinator","componentType","operator","itemsCoordinator","CheckboxesField","OR","IsNot","AND","convertListItemRefConditionV2","component","field","coordinator","values","length","innerCoordinator","conditions","itemValue","index","createConditionValueDataFromStringOrDateValueDataV2","createConditionValueDataFromStringValueDataV2","createConditionValueDataFromDateValueDataV2","createConditionValueDataFromRelativeDateValueDataV2","period","unit","direction","createConditionValueDataFromNumberValueDataV2","createConditionValueDataFromBooleanValueDataV2","createConditionValueDataFromDeclarationValueDataV2","isConditionDataV2","convertConditionDataV2","getComponentById","componentId","name","title","newValue","DeclarationField","convertConditionRefDataFromV2","refCondition","getConditionById","conditionName","conditionDisplayName","displayName","isConditionWrapperV2","wrapper","Array","isArray","isConditionWrapper","convertConditionWrapperFromV2","conditionWrapper","newConditionWrapper","newCondition","undefined"],"sources":["../../../src/conditions/migration.ts"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { isConditionalType } from '~/src/components/helpers.js'\nimport { type ComponentDef } from '~/src/components/types.js'\nimport {\n ConditionType,\n Coordinator,\n OperatorName\n} from '~/src/conditions/enums.js'\nimport {\n type ConditionData,\n type ConditionDataV2,\n type ConditionGroupData,\n type ConditionListItemRefValueDataV2,\n type ConditionRefData,\n type ConditionRefDataV2,\n type ConditionValueData,\n type RelativeDateValueData,\n type RelativeDateValueDataV2\n} from '~/src/conditions/types.js'\nimport { getConditionListItemIds } from '~/src/form/form-definition/helpers.js'\nimport {\n type ConditionWrapper,\n type ConditionWrapperV2,\n type List\n} from '~/src/form/form-definition/types.js'\n\n/**\n * Generate a valid JavaScript identifier from a condition ID\n * @param conditionId - The condition ID (UUID)\n * @returns A valid JavaScript identifier\n */\nexport const generateConditionAlias = (conditionId: string): string => {\n return `cond_${conditionId.replaceAll('-', '')}`\n}\n\nexport function isConditionListItemRefValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.ListItemRef\n}\n\nexport function isConditionStringValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.StringValue\n}\n\nexport function isConditionBooleanValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.BooleanValue\n}\n\nexport function isConditionNumberValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.NumberValue\n}\n\nexport function isConditionDateValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.DateValue\n}\n\nexport function isConditionRelativeDateValueDataV2(condition: ConditionDataV2) {\n return condition.type === ConditionType.RelativeDate\n}\n\nfunction getListItem(model: RuntimeFormModel, listId: string, itemId: string) {\n const foundList = model.getListById(listId)\n\n if (!foundList) {\n throw new Error(`List ${listId} not found`)\n }\n\n const item = foundList.items.find((item) => item.id === itemId)\n\n if (!item) {\n throw new Error(`List item ${itemId} not found`)\n }\n\n return item\n}\n\nfunction createConditionValueDataListFromListItemRefV2(\n condition: ConditionDataV2,\n model: RuntimeFormModel\n): ConditionValueData[] {\n const value = condition.value as ConditionListItemRefValueDataV2\n const itemIds = getConditionListItemIds(value)\n\n return itemIds.map((itemId) => {\n const refValue = getListItem(model, value.listId, itemId)\n\n return {\n display: refValue.text,\n type: ConditionType.Value,\n value: refValue.value.toString()\n }\n })\n}\n\n/**\n * Determine how multiple selected list items are combined within a single\n * V2 condition once expanded into individual V1 conditions.\n * - Checkbox questions use the author-chosen coordinator (default OR).\n * - Single-answer questions (radio/autocomplete/select) combine with OR for a\n * positive match and AND for a negative (\"is not any of these\") match.\n */\nfunction getListItemsInnerCoordinator(\n componentType: ComponentDef['type'],\n operator: OperatorName,\n itemsCoordinator: Coordinator | undefined\n): Coordinator {\n if (componentType === ComponentType.CheckboxesField) {\n return itemsCoordinator ?? Coordinator.OR\n }\n\n return operator === OperatorName.IsNot ? Coordinator.AND : Coordinator.OR\n}\n\n/**\n * Convert a V2 list item ref condition to V1. A single selected item produces\n * a single condition (unchanged from legacy behaviour); multiple selected\n * items produce a nested condition group so they are correctly parenthesised\n * relative to sibling conditions.\n */\nfunction convertListItemRefConditionV2(\n model: RuntimeFormModel,\n condition: ConditionDataV2,\n component: ComponentDef,\n field: ConditionData['field'],\n coordinator: Coordinator | undefined\n): ConditionData | ConditionGroupData {\n const value = condition.value as ConditionListItemRefValueDataV2\n const values = createConditionValueDataListFromListItemRefV2(condition, model)\n\n if (!values.length) {\n throw new Error('List item ref condition has no selected items')\n }\n\n if (values.length === 1) {\n return {\n field,\n operator: condition.operator,\n value: values[0],\n coordinator\n }\n }\n\n const innerCoordinator = getListItemsInnerCoordinator(\n component.type,\n condition.operator,\n value.itemsCoordinator\n )\n\n return {\n conditions: values.map((itemValue, index) => ({\n field,\n operator: condition.operator,\n value: itemValue,\n coordinator: index === 0 ? coordinator : innerCoordinator\n }))\n }\n}\n\nfunction createConditionValueDataFromStringOrDateValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return {\n type: ConditionType.Value,\n value: condition.value as string,\n display: condition.value as string\n }\n}\n\nfunction createConditionValueDataFromStringValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return createConditionValueDataFromStringOrDateValueDataV2(condition)\n}\n\nfunction createConditionValueDataFromDateValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return createConditionValueDataFromStringOrDateValueDataV2(condition)\n}\n\nfunction createConditionValueDataFromRelativeDateValueDataV2(\n condition: ConditionDataV2\n): RelativeDateValueData {\n const value = condition.value as RelativeDateValueDataV2\n return {\n type: ConditionType.RelativeDate,\n period: value.period.toString(),\n unit: value.unit,\n direction: value.direction\n }\n}\n\nfunction createConditionValueDataFromNumberValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return {\n type: ConditionType.Value,\n value: (condition.value as number).toString(),\n display: (condition.value as number).toString()\n }\n}\n\nfunction createConditionValueDataFromBooleanValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return {\n type: ConditionType.Value,\n value: (condition.value as boolean).toString(),\n display: (condition.value as boolean) ? 'Yes' : 'No'\n }\n}\n\nfunction createConditionValueDataFromDeclarationValueDataV2(\n condition: ConditionDataV2\n): ConditionValueData {\n return {\n type: ConditionType.Value,\n value: (condition.value as boolean).toString(),\n display: (condition.value as boolean) ? 'Agreed' : 'Not agreed'\n }\n}\n\nfunction isConditionDataV2(\n condition: ConditionDataV2 | ConditionRefDataV2\n): condition is ConditionDataV2 {\n return 'componentId' in condition\n}\n\nfunction convertConditionDataV2(\n model: RuntimeFormModel,\n condition: ConditionDataV2,\n coordinator: Coordinator | undefined\n): ConditionData | ConditionGroupData {\n const component = model.getComponentById(condition.componentId)\n\n if (!component) {\n throw new Error('Component not found')\n }\n\n if (!isConditionalType(component.type)) {\n throw new Error(`Component ${component.name} does not support conditions`)\n }\n\n const field = {\n name: component.name,\n type: component.type,\n display: component.title\n }\n\n if (isConditionListItemRefValueDataV2(condition)) {\n return convertListItemRefConditionV2(\n model,\n condition,\n component,\n field,\n coordinator\n )\n }\n\n let newValue\n if (isConditionStringValueDataV2(condition)) {\n newValue = createConditionValueDataFromStringValueDataV2(condition)\n } else if (isConditionBooleanValueDataV2(condition)) {\n newValue =\n component.type === ComponentType.DeclarationField\n ? createConditionValueDataFromDeclarationValueDataV2(condition)\n : createConditionValueDataFromBooleanValueDataV2(condition)\n } else if (isConditionNumberValueDataV2(condition)) {\n newValue = createConditionValueDataFromNumberValueDataV2(condition)\n } else if (isConditionDateValueDataV2(condition)) {\n newValue = createConditionValueDataFromDateValueDataV2(condition)\n } else if (isConditionRelativeDateValueDataV2(condition)) {\n newValue = createConditionValueDataFromRelativeDateValueDataV2(condition)\n } else {\n throw new Error('Unsupported condition type')\n }\n\n return {\n field,\n operator: condition.operator,\n value: newValue,\n coordinator\n }\n}\n\nfunction convertConditionRefDataFromV2(\n model: RuntimeFormModel,\n condition: ConditionRefDataV2,\n coordinator: Coordinator | undefined\n): ConditionRefData {\n const refCondition = model.getConditionById(condition.conditionId)\n\n if (!refCondition) {\n throw new Error('Component not found')\n }\n\n return {\n conditionName: generateConditionAlias(refCondition.id),\n conditionDisplayName: refCondition.displayName,\n coordinator\n }\n}\n\nexport function isConditionWrapperV2(\n wrapper: ConditionWrapper | ConditionWrapperV2\n): wrapper is ConditionWrapperV2 {\n return Array.isArray((wrapper as ConditionWrapperV2).items)\n}\n\nexport function isConditionWrapper(\n wrapper: ConditionWrapper | ConditionWrapperV2\n): wrapper is ConditionWrapper {\n return !isConditionWrapperV2(wrapper)\n}\n\nexport function convertConditionWrapperFromV2(\n conditionWrapper: ConditionWrapperV2,\n model: RuntimeFormModel\n): ConditionWrapper {\n let coordinator\n\n if (conditionWrapper.items.length > 1 && !conditionWrapper.coordinator) {\n throw new Error('Coordinator is required for multiple conditions')\n } else {\n coordinator = conditionWrapper.coordinator\n }\n\n const newConditionWrapper: ConditionWrapper = {\n name: conditionWrapper.id,\n displayName: conditionWrapper.displayName,\n value: {\n name: conditionWrapper.id,\n conditions: conditionWrapper.items.map((condition, index) => {\n let newCondition: ConditionData | ConditionRefData | ConditionGroupData\n\n if (isConditionDataV2(condition)) {\n newCondition = convertConditionDataV2(\n model,\n condition,\n index > 0 ? coordinator : undefined\n )\n } else {\n newCondition = convertConditionRefDataFromV2(\n model,\n condition,\n index > 0 ? coordinator : undefined\n )\n }\n\n return newCondition\n })\n }\n }\n\n return newConditionWrapper\n}\n\nexport interface RuntimeFormModel {\n getListById: (listId: string) => List | undefined\n getComponentById: (componentId: string) => ComponentDef | undefined\n getConditionById: (conditionId: string) => ConditionWrapperV2 | undefined\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/conditions/types.ts"],"sourcesContent":["import {\n type ComponentDef,\n type ConditionalComponentType\n} from '~/src/components/types.js'\nimport { type Condition } from '~/src/conditions/condition.js'\nimport {\n type ConditionType,\n type Coordinator,\n type DateDirections,\n type DateUnits,\n type OperatorName\n} from '~/src/conditions/enums.js'\n\nexport interface ConditionValueData {\n type: ConditionType.Value\n value: string\n display: string\n}\n\nexport interface RelativeDateValueData {\n type: ConditionType.RelativeDate\n period: string\n unit: DateUnits\n direction: DateDirections\n}\n\nexport interface ConditionListItemRefValueDataV2 {\n listId: string\n itemId: string\n}\n\nexport interface RelativeDateValueDataV2 {\n period: number\n unit: DateUnits\n direction: DateDirections\n}\n\nexport interface ConditionFieldData {\n name: string\n type: ConditionalComponentType\n display: string\n}\n\nexport interface ConditionData {\n field: ConditionFieldData\n operator: OperatorName\n value: ConditionValueData | RelativeDateValueData\n coordinator?: Coordinator\n}\n\nexport type ConditionValueDataV2 =\n | ConditionListItemRefValueDataV2\n | RelativeDateValueDataV2\n | string\n | boolean\n | number\n\nexport interface ConditionDataV2 {\n id: string\n componentId: string\n operator: OperatorName\n type: ConditionType\n value: ConditionValueDataV2\n}\n\nexport interface ConditionRefData {\n conditionName: string\n conditionDisplayName: string\n coordinator?: Coordinator\n}\n\nexport interface ConditionRefDataV2 {\n id: string\n conditionId: string\n}\n\nexport interface ConditionGroupData {\n conditions: (ConditionData | ConditionRefData | ConditionGroupData)[]\n}\n\nexport type ConditionGroupDataV2 = (ConditionDataV2 | ConditionRefDataV2)[]\n\nexport interface ConditionsModelData extends ConditionGroupData {\n name: string\n}\n\nexport interface OperatorDefinition {\n expression: (\n component: Pick<ComponentDef, 'type' | 'name'>,\n conditionValue: Condition['value']\n ) => string\n}\n\nexport type Conditionals = Record<OperatorName, OperatorDefinition>\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/conditions/types.ts"],"sourcesContent":["import {\n type ComponentDef,\n type ConditionalComponentType\n} from '~/src/components/types.js'\nimport { type Condition } from '~/src/conditions/condition.js'\nimport {\n type ConditionType,\n type Coordinator,\n type DateDirections,\n type DateUnits,\n type OperatorName\n} from '~/src/conditions/enums.js'\n\nexport interface ConditionValueData {\n type: ConditionType.Value\n value: string\n display: string\n}\n\nexport interface RelativeDateValueData {\n type: ConditionType.RelativeDate\n period: string\n unit: DateUnits\n direction: DateDirections\n}\n\nexport interface ConditionListItemRefValueDataV2 {\n listId: string\n /**\n * One or more referenced list item ids (radio, checkbox, autocomplete,\n * select). New conditions are always written as an array, even for a single\n * selection. A bare `string` is only retained for backwards compatibility so\n * conditions saved before multi-select support continue to load, display and\n * evaluate.\n */\n itemId: string[] | string\n /**\n * How multiple checkbox selections are combined (AND/OR). Only set for\n * checkbox questions; radio/autocomplete/select combine implicitly.\n */\n itemsCoordinator?: Coordinator\n}\n\nexport interface RelativeDateValueDataV2 {\n period: number\n unit: DateUnits\n direction: DateDirections\n}\n\nexport interface ConditionFieldData {\n name: string\n type: ConditionalComponentType\n display: string\n}\n\nexport interface ConditionData {\n field: ConditionFieldData\n operator: OperatorName\n value: ConditionValueData | RelativeDateValueData\n coordinator?: Coordinator\n}\n\nexport type ConditionValueDataV2 =\n | ConditionListItemRefValueDataV2\n | RelativeDateValueDataV2\n | string\n | boolean\n | number\n\nexport interface ConditionDataV2 {\n id: string\n componentId: string\n operator: OperatorName\n type: ConditionType\n value: ConditionValueDataV2\n}\n\nexport interface ConditionRefData {\n conditionName: string\n conditionDisplayName: string\n coordinator?: Coordinator\n}\n\nexport interface ConditionRefDataV2 {\n id: string\n conditionId: string\n}\n\nexport interface ConditionGroupData {\n conditions: (ConditionData | ConditionRefData | ConditionGroupData)[]\n}\n\nexport type ConditionGroupDataV2 = (ConditionDataV2 | ConditionRefDataV2)[]\n\nexport interface ConditionsModelData extends ConditionGroupData {\n name: string\n}\n\nexport interface OperatorDefinition {\n expression: (\n component: Pick<ComponentDef, 'type' | 'name'>,\n conditionValue: Condition['value']\n ) => string\n}\n\nexport type Conditionals = Record<OperatorName, OperatorDefinition>\n"],"mappings":"","ignoreList":[]}
@@ -25,6 +25,20 @@ export function isConditionListItemRefValueData(conditionValueData) {
25
25
  return typeof conditionValueData === 'object' && 'listId' in conditionValueData && 'itemId' in conditionValueData;
26
26
  }
27
27
 
28
+ /**
29
+ * Normalises a list item ref condition value to an array of item ids. `itemId`
30
+ * is normally an array, but may be a bare string for legacy conditions saved
31
+ * before multi-select support.
32
+ * @param { ConditionListItemRefValueDataV2 | undefined } value
33
+ * @returns { string[] }
34
+ */
35
+ export function getConditionListItemIds(value) {
36
+ if (!value?.itemId) {
37
+ return [];
38
+ }
39
+ return Array.isArray(value.itemId) ? value.itemId : [value.itemId];
40
+ }
41
+
28
42
  /**
29
43
  * Returns an array of all hidden fields in a form
30
44
  * @param definition - form definition
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","names":["ComponentType","hasComponents","isFormDefinition","definition","isConditionListItemRefValueData","conditionValueData","getHiddenFields","pages","length","totalHiddenFields","page","hiddenFields","components","filter","comp","type","HiddenField","push","isFeedbackForm","feedback","some","p","controller"],"sources":["../../../../src/form/form-definition/helpers.ts"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { type ComponentDef } from '~/src/components/types.js'\nimport { type ConditionListItemRefValueDataV2 } from '~/src/conditions/types.js'\nimport { type FormDefinition } from '~/src/form/form-definition/types.js'\nimport { type ControllerType } from '~/src/pages/enums.js'\nimport { hasComponents } from '~/src/pages/helpers.js'\n\n/**\n * TypeGuard to check if something is a FormDefinition\n * @param { unknown } definition\n * @returns { definition is FormDefinition }\n */\nexport function isFormDefinition(\n definition: unknown\n): definition is FormDefinition {\n if (!definition) {\n return false\n }\n\n return (\n typeof definition === 'object' &&\n 'name' in definition &&\n 'pages' in definition &&\n 'conditions' in definition\n )\n}\n\n/**\n * TypeGuard to check if something is a ConditionListItemRefValueDataV2\n * @param { unknown } conditionValueData\n * @returns { conditionValueData is ConditionListItemRefValueDataV2 }\n */\nexport function isConditionListItemRefValueData(\n conditionValueData: unknown\n): conditionValueData is ConditionListItemRefValueDataV2 {\n if (!conditionValueData) {\n return false\n }\n\n return (\n typeof conditionValueData === 'object' &&\n 'listId' in conditionValueData &&\n 'itemId' in conditionValueData\n )\n}\n\n/**\n * Returns an array of all hidden fields in a form\n * @param definition - form definition\n */\nexport function getHiddenFields(definition: FormDefinition) {\n if (definition.pages.length === 0) {\n return []\n }\n const totalHiddenFields = [] as ComponentDef[]\n for (const page of definition.pages) {\n const hiddenFields = hasComponents(page)\n ? page.components.filter(\n (comp) => comp.type === ComponentType.HiddenField\n )\n : []\n totalHiddenFields.push(...hiddenFields)\n }\n return totalHiddenFields\n}\n\n/**\n * @param definition - form definition\n * @returns {boolean}\n */\nexport function isFeedbackForm(definition: FormDefinition | undefined) {\n const feedback = 'FeedbackPageController' as ControllerType\n return definition?.pages\n ? definition.pages.some((p) => p.controller === feedback)\n : false\n}\n"],"mappings":"AAAA,SAASA,aAAa;AAKtB,SAASC,aAAa;;AAEtB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,UAAmB,EACW;EAC9B,IAAI,CAACA,UAAU,EAAE;IACf,OAAO,KAAK;EACd;EAEA,OACE,OAAOA,UAAU,KAAK,QAAQ,IAC9B,MAAM,IAAIA,UAAU,IACpB,OAAO,IAAIA,UAAU,IACrB,YAAY,IAAIA,UAAU;AAE9B;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,+BAA+BA,CAC7CC,kBAA2B,EAC4B;EACvD,IAAI,CAACA,kBAAkB,EAAE;IACvB,OAAO,KAAK;EACd;EAEA,OACE,OAAOA,kBAAkB,KAAK,QAAQ,IACtC,QAAQ,IAAIA,kBAAkB,IAC9B,QAAQ,IAAIA,kBAAkB;AAElC;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASC,eAAeA,CAACH,UAA0B,EAAE;EAC1D,IAAIA,UAAU,CAACI,KAAK,CAACC,MAAM,KAAK,CAAC,EAAE;IACjC,OAAO,EAAE;EACX;EACA,MAAMC,iBAAiB,GAAG,EAAoB;EAC9C,KAAK,MAAMC,IAAI,IAAIP,UAAU,CAACI,KAAK,EAAE;IACnC,MAAMI,YAAY,GAAGV,aAAa,CAACS,IAAI,CAAC,GACpCA,IAAI,CAACE,UAAU,CAACC,MAAM,CACnBC,IAAI,IAAKA,IAAI,CAACC,IAAI,KAAKf,aAAa,CAACgB,WACxC,CAAC,GACD,EAAE;IACNP,iBAAiB,CAACQ,IAAI,CAAC,GAAGN,YAAY,CAAC;EACzC;EACA,OAAOF,iBAAiB;AAC1B;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASS,cAAcA,CAACf,UAAsC,EAAE;EACrE,MAAMgB,QAAQ,GAAG,wBAA0C;EAC3D,OAAOhB,UAAU,EAAEI,KAAK,GACpBJ,UAAU,CAACI,KAAK,CAACa,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,UAAU,KAAKH,QAAQ,CAAC,GACvD,KAAK;AACX","ignoreList":[]}
1
+ {"version":3,"file":"helpers.js","names":["ComponentType","hasComponents","isFormDefinition","definition","isConditionListItemRefValueData","conditionValueData","getConditionListItemIds","value","itemId","Array","isArray","getHiddenFields","pages","length","totalHiddenFields","page","hiddenFields","components","filter","comp","type","HiddenField","push","isFeedbackForm","feedback","some","p","controller"],"sources":["../../../../src/form/form-definition/helpers.ts"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { type ComponentDef } from '~/src/components/types.js'\nimport { type ConditionListItemRefValueDataV2 } from '~/src/conditions/types.js'\nimport { type FormDefinition } from '~/src/form/form-definition/types.js'\nimport { type ControllerType } from '~/src/pages/enums.js'\nimport { hasComponents } from '~/src/pages/helpers.js'\n\n/**\n * TypeGuard to check if something is a FormDefinition\n * @param { unknown } definition\n * @returns { definition is FormDefinition }\n */\nexport function isFormDefinition(\n definition: unknown\n): definition is FormDefinition {\n if (!definition) {\n return false\n }\n\n return (\n typeof definition === 'object' &&\n 'name' in definition &&\n 'pages' in definition &&\n 'conditions' in definition\n )\n}\n\n/**\n * TypeGuard to check if something is a ConditionListItemRefValueDataV2\n * @param { unknown } conditionValueData\n * @returns { conditionValueData is ConditionListItemRefValueDataV2 }\n */\nexport function isConditionListItemRefValueData(\n conditionValueData: unknown\n): conditionValueData is ConditionListItemRefValueDataV2 {\n if (!conditionValueData) {\n return false\n }\n\n return (\n typeof conditionValueData === 'object' &&\n 'listId' in conditionValueData &&\n 'itemId' in conditionValueData\n )\n}\n\n/**\n * Normalises a list item ref condition value to an array of item ids. `itemId`\n * is normally an array, but may be a bare string for legacy conditions saved\n * before multi-select support.\n * @param { ConditionListItemRefValueDataV2 | undefined } value\n * @returns { string[] }\n */\nexport function getConditionListItemIds(\n value: ConditionListItemRefValueDataV2 | undefined\n): string[] {\n if (!value?.itemId) {\n return []\n }\n\n return Array.isArray(value.itemId) ? value.itemId : [value.itemId]\n}\n\n/**\n * Returns an array of all hidden fields in a form\n * @param definition - form definition\n */\nexport function getHiddenFields(definition: FormDefinition) {\n if (definition.pages.length === 0) {\n return []\n }\n const totalHiddenFields = [] as ComponentDef[]\n for (const page of definition.pages) {\n const hiddenFields = hasComponents(page)\n ? page.components.filter(\n (comp) => comp.type === ComponentType.HiddenField\n )\n : []\n totalHiddenFields.push(...hiddenFields)\n }\n return totalHiddenFields\n}\n\n/**\n * @param definition - form definition\n * @returns {boolean}\n */\nexport function isFeedbackForm(definition: FormDefinition | undefined) {\n const feedback = 'FeedbackPageController' as ControllerType\n return definition?.pages\n ? definition.pages.some((p) => p.controller === feedback)\n : false\n}\n"],"mappings":"AAAA,SAASA,aAAa;AAKtB,SAASC,aAAa;;AAEtB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,gBAAgBA,CAC9BC,UAAmB,EACW;EAC9B,IAAI,CAACA,UAAU,EAAE;IACf,OAAO,KAAK;EACd;EAEA,OACE,OAAOA,UAAU,KAAK,QAAQ,IAC9B,MAAM,IAAIA,UAAU,IACpB,OAAO,IAAIA,UAAU,IACrB,YAAY,IAAIA,UAAU;AAE9B;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,+BAA+BA,CAC7CC,kBAA2B,EAC4B;EACvD,IAAI,CAACA,kBAAkB,EAAE;IACvB,OAAO,KAAK;EACd;EAEA,OACE,OAAOA,kBAAkB,KAAK,QAAQ,IACtC,QAAQ,IAAIA,kBAAkB,IAC9B,QAAQ,IAAIA,kBAAkB;AAElC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,uBAAuBA,CACrCC,KAAkD,EACxC;EACV,IAAI,CAACA,KAAK,EAAEC,MAAM,EAAE;IAClB,OAAO,EAAE;EACX;EAEA,OAAOC,KAAK,CAACC,OAAO,CAACH,KAAK,CAACC,MAAM,CAAC,GAAGD,KAAK,CAACC,MAAM,GAAG,CAACD,KAAK,CAACC,MAAM,CAAC;AACpE;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASG,eAAeA,CAACR,UAA0B,EAAE;EAC1D,IAAIA,UAAU,CAACS,KAAK,CAACC,MAAM,KAAK,CAAC,EAAE;IACjC,OAAO,EAAE;EACX;EACA,MAAMC,iBAAiB,GAAG,EAAoB;EAC9C,KAAK,MAAMC,IAAI,IAAIZ,UAAU,CAACS,KAAK,EAAE;IACnC,MAAMI,YAAY,GAAGf,aAAa,CAACc,IAAI,CAAC,GACpCA,IAAI,CAACE,UAAU,CAACC,MAAM,CACnBC,IAAI,IAAKA,IAAI,CAACC,IAAI,KAAKpB,aAAa,CAACqB,WACxC,CAAC,GACD,EAAE;IACNP,iBAAiB,CAACQ,IAAI,CAAC,GAAGN,YAAY,CAAC;EACzC;EACA,OAAOF,iBAAiB;AAC1B;;AAEA;AACA;AACA;AACA;AACA,OAAO,SAASS,cAAcA,CAACpB,UAAsC,EAAE;EACrE,MAAMqB,QAAQ,GAAG,wBAA0C;EAC3D,OAAOrB,UAAU,EAAES,KAAK,GACpBT,UAAU,CAACS,KAAK,CAACa,IAAI,CAAEC,CAAC,IAAKA,CAAC,CAACC,UAAU,KAAKH,QAAQ,CAAC,GACvD,KAAK;AACX","ignoreList":[]}
@@ -4,7 +4,7 @@ import { v4 as uuidV4 } from 'uuid';
4
4
  import { rtrimOnly } from "../../common/rtrim-only.js";
5
5
  import { ComponentType, GeospatialFieldGeometryTypesEnum, GeospatialFieldOptionsCountryEnum, TelephoneNumberFieldOptionsFormatEnum } from "../../components/enums.js";
6
6
  import { isConditionalType } from "../../components/helpers.js";
7
- import { ConditionType, OperatorName } from "../../conditions/enums.js";
7
+ import { ConditionType, Coordinator, OperatorName } from "../../conditions/enums.js";
8
8
  import { MAX_NUMBER_OF_REPEAT_ITEMS, MIN_NUMBER_OF_REPEAT_ITEMS } from "./constants.js";
9
9
  import { isConditionListItemRefValueData, isFormDefinition } from "./helpers.js";
10
10
  import { SchemaVersion } from "./types.js";
@@ -36,7 +36,11 @@ export const listItemIdValidator = (value, helpers) => {
36
36
  if (!definition) {
37
37
  return value;
38
38
  }
39
- const conditionValue = helpers.state.ancestors[0];
39
+
40
+ // `itemId` is normally an array, so the condition value is one level up from
41
+ // each entry being validated. For a legacy bare-string `itemId` it is the
42
+ // nearest ancestor instead, so locate it by shape rather than fixed position.
43
+ const conditionValue = helpers.state.ancestors.find(isConditionListItemRefValueData);
40
44
  if (!isConditionListItemRefValueData(conditionValue)) {
41
45
  return value;
42
46
  }
@@ -103,7 +107,8 @@ const conditionListItemRefDataSchemaV2 = Joi.object().description('List item ref
103
107
  is: Joi.exist(),
104
108
  then: Joi.valid(listIdRef)
105
109
  }).description('The id of the list').error(checkErrors(FormDefinitionError.RefConditionListId)),
106
- itemId: Joi.string().trim().required().description('The id of the list item').custom(listItemIdValidator)
110
+ itemId: Joi.array().single().items(Joi.string().trim().custom(listItemIdValidator)).min(1).required().description('The ids of the selected list items.'),
111
+ itemsCoordinator: Joi.string().trim().valid(...Object.values(Coordinator)).optional().description('How multiple checkbox selections are combined (and/or)')
107
112
  });
108
113
  const relativeDateValueDataSchemaV2 = Joi.object().description('Relative date specification for date-based conditions').keys({
109
114
  period: Joi.number().integer().positive().required().description('Numeric amount of the time period, as a string'),
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["JoiDate","JoiBase","v4","uuidV4","rtrimOnly","ComponentType","GeospatialFieldGeometryTypesEnum","GeospatialFieldOptionsCountryEnum","TelephoneNumberFieldOptionsFormatEnum","isConditionalType","ConditionType","OperatorName","MAX_NUMBER_OF_REPEAT_ITEMS","MIN_NUMBER_OF_REPEAT_ITEMS","isConditionListItemRefValueData","isFormDefinition","SchemaVersion","emailAddressNoUnicodeSchema","checkErrors","FormDefinitionError","FormDefinitionErrorType","ControllerType","hasComponents","hasComponentsEvenIfNoNext","Joi","extend","idSchemaOptional","string","uuid","idSchema","default","conditionIdRef","ref","in","adjust","conditions","map","condition","id","componentIdRef","pages","flatMap","page","components","filter","component","listIdRef","lists","list","listItemIdValidator","value","helpers","definition","state","ancestors","find","conditionValue","listId","itemIdExists","items","some","item","error","valids","errorType","Ref","errorCode","RefConditionItemId","incompatibleConditionValidator","componentId","foundComponents","comp","undefined","Boolean","foundComponentHandlesConditions","length","type","incompatibleObject","key","valueKey","Incompatible","IncompatibleConditionComponentType","reason","sectionsSchema","object","description","keys","optional","name","trim","required","title","hideTitle","boolean","conditionFieldSchema","display","conditionValueSchema","conditionListItemRefDataSchemaV2","when","is","exist","then","valid","RefConditionListId","itemId","custom","relativeDateValueDataSchemaV2","period","number","integer","positive","unit","direction","relativeDateValueDataSchema","conditionRefSchema","conditionName","conditionDisplayName","coordinator","conditionRefDataSchemaV2","conditionId","RefConditionConditionId","conditionSchema","field","operator","alternatives","try","conditionDataSchemaV2","RefConditionComponentId","Object","values","any","switch","BooleanValue","StringValue","NumberValue","DateValue","date","format","raw","ListItemRef","RelativeDate","messages","conditionGroupSchema","array","link","conditionsModelSchema","conditionWrapperSchema","displayName","conditionWrapperSchemaV2","min","conditional","otherwise","regexCustomValidator","_regex","RegExp","IncompatibleQuestionRegex","componentSchema","shortDescription","errorDescription","Details","Html","InsetText","Markdown","NotificationBanner","pattern","allow","hint","options","rows","empty","maxWords","maxDaysInPast","maxDaysInFuture","earliestDate","latestDate","customValidationMessage","customValidationMessages","unknown","amount","PaymentField","max","conditionalAmounts","emailField","countries","GeospatialField","geometryTypes","TelephoneNumberField","schema","regex","TextField","MultilineTextField","componentSchemaV2","RefPageComponentList","componentPayloadSchemaV2","fileUploadComponentSchema","FileUploadField","contentComponentSchema","List","nextSchema","path","redirect","repeatOptions","repeatSchema","pageRepeatSchema","eventSchema","method","url","uri","scheme","eventsSchema","onLoad","onSave","pageUploadComponentsSchema","unique","ignoreUndefined","pageSchema","disallow","section","controller","repeat","strip","next","events","view","pageSchemaV2","append","FileUpload","UniquePageComponentId","UniquePageComponentName","RefPageCondition","pagePayloadSchemaV2","baseListItemSchema","text","stringListItemSchema","numberListItemSchema","listSchema","UniqueListItemId","UniqueListItemText","UniqueListItemValue","listSchemaV2","sectionsSchemaV2","feedbackSchema","emailAddress","phaseBannerSchema","phase","optionsSchema","showReferenceNumber","disableUserFeedback","outputSchema","audience","version","formDefinitionSchema","engine","V1","feedback","startPage","sections","UniqueSectionName","UniqueSectionTitle","metadata","a","declaration","skipSummary","phaseBanner","outputEmail","email","tlds","output","outputs","formDefinitionV2Schema","V2","UniquePageId","UniquePagePath","UniqueListId","UniqueListName","UniqueListTitle","UniqueConditionId","UniqueConditionDisplayName","UniqueSectionId","Schema"],"sources":["../../../../src/form/form-definition/index.ts"],"sourcesContent":["import JoiDate from '@joi/date'\nimport JoiBase, { type CustomHelpers, type LanguageMessages } from 'joi'\nimport { v4 as uuidV4 } from 'uuid'\n\nimport { rtrimOnly } from '~/src/common/rtrim-only.js'\nimport {\n ComponentType,\n GeospatialFieldGeometryTypesEnum,\n GeospatialFieldOptionsCountryEnum,\n TelephoneNumberFieldOptionsFormatEnum\n} from '~/src/components/enums.js'\nimport { isConditionalType } from '~/src/components/helpers.js'\nimport {\n type ComponentDef,\n type ContentComponentsDef,\n type FileUploadFieldComponent\n} from '~/src/components/types.js'\nimport { ConditionType, OperatorName } from '~/src/conditions/enums.js'\nimport {\n type ConditionData,\n type ConditionDataV2,\n type ConditionFieldData,\n type ConditionGroupData,\n type ConditionGroupDataV2,\n type ConditionListItemRefValueDataV2,\n type ConditionRefData,\n type ConditionRefDataV2,\n type ConditionValueData,\n type ConditionsModelData,\n type RelativeDateValueData,\n type RelativeDateValueDataV2\n} from '~/src/conditions/types.js'\nimport {\n MAX_NUMBER_OF_REPEAT_ITEMS,\n MIN_NUMBER_OF_REPEAT_ITEMS\n} from '~/src/form/form-definition/constants.js'\nimport {\n isConditionListItemRefValueData,\n isFormDefinition\n} from '~/src/form/form-definition/helpers.js'\nimport {\n SchemaVersion,\n type ConditionWrapper,\n type ConditionWrapperV2,\n type Event,\n type EventOptions,\n type Events,\n type FormDefinition,\n type Item,\n type Link,\n type List,\n type Page,\n type PhaseBanner,\n type Repeat,\n type RepeatOptions,\n type RepeatSchema,\n type Section\n} from '~/src/form/form-definition/types.js'\nimport { emailAddressNoUnicodeSchema } from '~/src/form/form-editor/index.js'\nimport { checkErrors } from '~/src/form/form-manager/errors.js'\nimport {\n FormDefinitionError,\n FormDefinitionErrorType\n} from '~/src/form/form-manager/types.js'\nimport { ControllerType } from '~/src/pages/enums.js'\nimport {\n hasComponents,\n hasComponentsEvenIfNoNext\n} from '~/src/pages/helpers.js'\n\nconst Joi = JoiBase.extend(JoiDate) as JoiBase.Root\n\nconst idSchemaOptional = Joi.string().uuid()\n\nconst idSchema = idSchemaOptional.default(() => uuidV4())\n\nconst conditionIdRef = Joi.ref('/conditions', {\n in: true,\n adjust: (conditions: ConditionWrapperV2[]) =>\n conditions.map((condition) => condition.id)\n})\n\nconst componentIdRef = Joi.ref('/pages', {\n in: true,\n adjust: (pages: Page[]) =>\n pages.flatMap((page) =>\n hasComponents(page)\n ? page.components\n .filter((component) => component.id)\n .map((component) => component.id)\n : []\n )\n})\n\nconst listIdRef = Joi.ref('/lists', {\n in: true,\n adjust: (lists: List[]) =>\n lists.filter((list) => list.id).map((list) => list.id)\n})\n\nexport const listItemIdValidator = (\n value: string,\n helpers: CustomHelpers<ConditionListItemRefValueDataV2>\n) => {\n const definition = helpers.state.ancestors.find(isFormDefinition) as\n | FormDefinition\n | undefined\n\n // Validation may not have been fired on the full FormDefinition\n // therefore we are unable to verify the list & item combination\n if (!definition) {\n return value\n }\n\n const conditionValue = helpers.state.ancestors[0]\n\n if (!isConditionListItemRefValueData(conditionValue)) {\n return value\n }\n\n const listId = conditionValue.listId\n const list = definition.lists.find((list) => list.id === listId)\n\n // This check is just for type safety. It'll be impossible for the list to not exist here as it will be\n // handled by the `Joi.valid(listIdRef)` applied to the `ConditionListItemRefValueDataV2.listId` schema\n if (!list) {\n return value\n }\n\n const itemIdExists = list.items.some((item) => item.id === value)\n\n return itemIdExists\n ? value\n : helpers.error('any.only', {\n value,\n valids: list.items.map((item) => item.id),\n errorType: FormDefinitionErrorType.Ref,\n errorCode: FormDefinitionError.RefConditionItemId\n })\n}\n\nconst incompatibleConditionValidator = (\n value: ConditionDataV2,\n helpers: CustomHelpers<ConditionDataV2>\n) => {\n const { componentId } = value\n const definition = helpers.state.ancestors.find(isFormDefinition) as\n | FormDefinition\n | undefined\n\n // Validation may not have been fired on the full FormDefinition\n // therefore we are unable to verify at this point, but the 'save'\n // will eventually validate the full FormDefinition\n if (!definition) {\n return value\n }\n\n const foundComponents = definition.pages\n .map((page) =>\n hasComponentsEvenIfNoNext(page)\n ? page.components.find((comp) => comp.id === componentId)\n : undefined\n )\n .filter(Boolean)\n\n const foundComponentHandlesConditions = foundComponents.length\n ? isConditionalType(foundComponents[0]?.type)\n : false\n\n return foundComponentHandlesConditions\n ? value\n : helpers.error('custom.incompatible', {\n incompatibleObject: {\n key: 'type',\n value: foundComponents[0]\n },\n valueKey: 'componentId',\n value: componentId,\n errorType: FormDefinitionErrorType.Incompatible,\n errorCode: FormDefinitionError.IncompatibleConditionComponentType,\n reason: 'does not support conditions'\n })\n}\n\nconst sectionsSchema = Joi.object<Section>()\n .description('A form section grouping related pages together')\n .keys({\n id: Joi.string()\n .uuid()\n .optional()\n .description('Unique identifier for the section (UUID)'),\n name: Joi.string()\n .trim()\n .required()\n .description(\n 'Unique identifier for the section, used in code and page references'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Human-readable section title displayed to users'),\n hideTitle: Joi.boolean()\n .optional()\n .default(false)\n .description(\n 'When true, the section title will not be displayed in the UI'\n )\n })\n\nconst conditionFieldSchema = Joi.object<ConditionFieldData>()\n .description('Field reference used in a condition')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Component name referenced by this condition'),\n type: Joi.string()\n .trim()\n .required()\n .description('Data type of the field (e.g., string, number, date)'),\n display: Joi.string()\n .trim()\n .required()\n .description('Human-readable name of the field for display purposes')\n })\n\nconst conditionValueSchema = Joi.object<ConditionValueData>()\n .description('Value specification for a condition')\n .keys({\n type: Joi.string()\n .trim()\n .required()\n .description('Data type of the value (e.g., string, number, date)'),\n value: Joi.string()\n .trim()\n .required()\n .description('The actual value to compare against'),\n display: Joi.string()\n .trim()\n .required()\n .description('Human-readable version of the value for display purposes')\n })\n\nconst conditionListItemRefDataSchemaV2 =\n Joi.object<ConditionListItemRefValueDataV2>()\n .description('List item ref specification for a condition')\n .keys({\n listId: Joi.string()\n .trim()\n .required()\n .when('/lists', {\n is: Joi.exist(),\n then: Joi.valid(listIdRef)\n })\n .description('The id of the list')\n .error(checkErrors(FormDefinitionError.RefConditionListId)),\n itemId: Joi.string()\n .trim()\n .required()\n .description('The id of the list item')\n .custom(listItemIdValidator)\n })\n\nconst relativeDateValueDataSchemaV2 = Joi.object<RelativeDateValueDataV2>()\n .description('Relative date specification for date-based conditions')\n .keys({\n period: Joi.number()\n .integer()\n .positive()\n .required()\n .description('Numeric amount of the time period, as a string'),\n unit: Joi.string()\n .trim()\n .required()\n .description('Time unit (e.g. days, weeks, months, years)'),\n direction: Joi.string()\n .trim()\n .required()\n .description('Temporal direction, either \"past\" or \"future\"')\n })\n\nconst relativeDateValueDataSchema = Joi.object<RelativeDateValueData>()\n .description('Relative date specification for date-based conditions')\n .keys({\n type: Joi.string()\n .trim()\n .valid('RelativeDate')\n .required()\n .description('Type of the condition value, should be \"RelativeDate\"'),\n period: Joi.string()\n .trim()\n .required()\n .description('Numeric amount of the time period, as a string'),\n unit: Joi.string()\n .trim()\n .required()\n .description('Time unit (e.g. days, weeks, months, years)'),\n direction: Joi.string()\n .trim()\n .required()\n .description('Temporal direction, either \"past\" or \"future\"')\n })\n\nconst conditionRefSchema = Joi.object<ConditionRefData>()\n .description('Reference to a named condition defined elsewhere')\n .keys({\n conditionName: Joi.string()\n .trim()\n .required()\n .description('Name of the referenced condition'),\n conditionDisplayName: Joi.string()\n .trim()\n .required()\n .description('Human-readable name of the condition for display purposes'),\n coordinator: Joi.string()\n .trim()\n .optional()\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n )\n })\n\nconst conditionRefDataSchemaV2 = Joi.object<ConditionRefDataV2>()\n .description('Reference to a named condition defined elsewhere')\n .keys({\n id: idSchema.description('Unique identifier for the referenced condition'),\n conditionId: Joi.string()\n .trim()\n .required()\n .when('/conditions', {\n is: Joi.exist(),\n then: Joi.valid(conditionIdRef)\n })\n .description('Name of the referenced condition')\n .error(checkErrors(FormDefinitionError.RefConditionConditionId))\n })\n\nconst conditionSchema = Joi.object<ConditionData>()\n .description('Condition definition specifying a logical comparison')\n .keys({\n field: conditionFieldSchema.description(\n 'The form field being evaluated in this condition'\n ),\n operator: Joi.string()\n .trim()\n .required()\n .description('Comparison operator (equals, greaterThan, contains, etc.)'),\n value: Joi.alternatives()\n .try(conditionValueSchema, relativeDateValueDataSchema)\n .description(\n 'Value to compare the field against, either fixed or relative date'\n ),\n coordinator: Joi.string()\n .trim()\n .optional()\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n )\n })\n\nexport const conditionDataSchemaV2 = Joi.object<ConditionDataV2>()\n .description('Condition definition')\n .keys({\n id: idSchema.description(\n 'Unique identifier used to reference this condition'\n ),\n componentId: Joi.string()\n .trim()\n .required()\n .when('/pages', {\n is: Joi.exist(),\n then: Joi.valid(componentIdRef)\n })\n .description(\n 'Reference to the component id being evaluated in this condition'\n )\n .error(checkErrors(FormDefinitionError.RefConditionComponentId)),\n operator: Joi.string()\n .trim()\n .valid(...Object.values(OperatorName))\n .required()\n .description('Comparison operator (equals, greaterThan, contains, etc.)'),\n type: Joi.string()\n .trim()\n .valid(...Object.values(ConditionType))\n .required()\n .description('Type of the condition value'),\n value: Joi.any()\n .required()\n .description('The actual value to compare against')\n .when('type', {\n switch: [\n { is: ConditionType.BooleanValue, then: Joi.boolean() },\n { is: ConditionType.StringValue, then: Joi.string() },\n { is: ConditionType.NumberValue, then: Joi.number() },\n {\n is: ConditionType.DateValue,\n then: Joi.date().format('YYYY-MM-DD').raw()\n },\n {\n is: ConditionType.ListItemRef,\n then: conditionListItemRefDataSchemaV2\n },\n {\n is: ConditionType.RelativeDate,\n then: relativeDateValueDataSchemaV2\n }\n ]\n })\n .description(\n 'Value to compare the field against, either fixed or relative date'\n )\n })\n .custom(incompatibleConditionValidator)\n .messages({\n // Custom error types require a corresponding messages\n 'custom.incompatible': 'Incompatible data value'\n })\n\nconst conditionGroupSchema = Joi.object<ConditionGroupData>()\n .description('Group of conditions combined with logical operators')\n .keys({\n conditions: Joi.array()\n .items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n Joi.link('#conditionGroupSchema')\n )\n )\n .description('Array of conditions or condition references in this group')\n })\n .id('conditionGroupSchema')\n\nconst conditionsModelSchema = Joi.object<ConditionsModelData>()\n .description('Complete condition model with name and condition set')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Unique identifier for the condition set'),\n conditions: Joi.array()\n .items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n conditionGroupSchema\n )\n )\n .description(\n 'Array of conditions, condition references, or condition groups'\n )\n })\n\nconst conditionWrapperSchema = Joi.object<ConditionWrapper>()\n .description('Container for a named condition with its definition')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Unique identifier used to reference this condition'),\n displayName: Joi.string()\n .trim()\n .description('Human-readable name for display in the UI'),\n value: conditionsModelSchema\n .required()\n .description('The complete condition definition')\n })\n\nexport const conditionWrapperSchemaV2 = Joi.object<ConditionWrapperV2>()\n .description('Container for a named condition with its definition')\n .keys({\n id: idSchema.description('Unique identifier for the condition'),\n displayName: Joi.string()\n .trim()\n .description('Human-readable name for display in the UI'),\n coordinator: Joi.string()\n .optional()\n .when('items', { is: Joi.array().min(2), then: Joi.required() })\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n ),\n items: Joi.array<ConditionGroupDataV2>()\n .items(\n Joi.alternatives().conditional('.componentId', {\n is: Joi.exist(),\n then: conditionDataSchemaV2,\n otherwise: conditionRefDataSchemaV2\n })\n )\n .min(1)\n .description('Array of conditions or condition references')\n })\n .description('Condition schema for V2 forms')\n\nexport const regexCustomValidator = (\n value: string,\n helpers: CustomHelpers<string>\n) => {\n try {\n const _regex = new RegExp(value)\n } catch {\n return helpers.error('custom.incompatible', {\n errorType: FormDefinitionErrorType.Incompatible,\n errorCode: FormDefinitionError.IncompatibleQuestionRegex\n })\n }\n return value\n}\n\nexport const componentSchema = Joi.object<ComponentDef>()\n .description('Form component definition specifying UI element behavior')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the component'),\n type: Joi.string<ComponentType>()\n .trim()\n .required()\n .description('Component type (TextField, RadioButtons, DateField, etc.)'),\n shortDescription: Joi.string()\n .custom(rtrimOnly)\n .optional()\n .description('Short description of the component used in the summary'),\n errorDescription: Joi.string()\n .custom(rtrimOnly)\n .optional()\n .description('Description that will be displayed in error messages'),\n name: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown,\n ComponentType.NotificationBanner\n ),\n then: Joi.string()\n .trim()\n .pattern(/^[a-zA-Z]+$/)\n .optional()\n .description('Optional identifier for display-only components'),\n otherwise: Joi.string()\n .trim()\n .pattern(/^[a-zA-Z]+$/)\n .required()\n .description('Unique identifier for the component, used in form data')\n }),\n title: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown,\n ComponentType.NotificationBanner\n ),\n then: Joi.string()\n .trim()\n .optional()\n .description('Optional title for display-only components'),\n otherwise: Joi.string()\n .trim()\n .allow('')\n .description('Label displayed above the component')\n }),\n hint: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description(\n 'Additional guidance text displayed below the component title'\n ),\n options: Joi.object({\n rows: Joi.number()\n .empty('')\n .description('Number of rows for textarea components'),\n maxWords: Joi.number()\n .empty('')\n .description('Maximum number of words allowed in text inputs'),\n maxDaysInPast: Joi.number()\n .empty('')\n .description('Maximum days in the past allowed for date inputs'),\n maxDaysInFuture: Joi.number()\n .empty('')\n .description('Maximum days in the future allowed for date inputs'),\n earliestDate: Joi.date()\n .format('YYYY-MM-DD')\n .raw()\n .empty('')\n .description('Earliest date of allowed date range for date inputs'),\n latestDate: Joi.date()\n .format('YYYY-MM-DD')\n .raw()\n .empty('')\n .description('Latest date of allowed date range for date inputs'),\n customValidationMessage: Joi.string()\n .trim()\n .allow('')\n .description('Custom error message for validation failures'),\n customValidationMessages: Joi.object<LanguageMessages>()\n .unknown(true)\n .optional()\n .description('Custom error messages keyed by validation rule name'),\n amount: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.PaymentField).required(),\n then: Joi.number()\n .min(0)\n .max(100000)\n .required()\n .description('Payment amount in GBP (£0 - £100,000)')\n }).description('Payment amount - for PaymentField only'),\n description: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.PaymentField).required(),\n then: Joi.string()\n .max(230)\n .required()\n .description('Payment description (max 230 chars)')\n }).description('Payment description - for PaymentField only'),\n conditionalAmounts: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.PaymentField).required(),\n then: Joi.array()\n .items(\n Joi.object({\n condition: Joi.string()\n .trim()\n .required()\n .description('Condition ID for this amount'),\n amount: Joi.number()\n .min(0.3)\n .max(100000)\n .required()\n .description('Amount in GBP when condition is true (min £0.30)')\n })\n )\n .optional()\n .description('Conditional payment amounts evaluated in order')\n }).description('Conditional amounts - for PaymentField only'),\n emailField: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.PaymentField).required(),\n then: Joi.string()\n .trim()\n .optional()\n .description(\n 'Name of EmailAddressField to prepopulate GOV.UK Pay email'\n )\n }).description('Email field reference - for PaymentField only'),\n countries: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.GeospatialField).required(),\n then: Joi.array()\n .items(\n Joi.string().valid(\n ...Object.values(GeospatialFieldOptionsCountryEnum)\n )\n )\n .description(\n 'Country filters for geospatial data - for GeospatialField only'\n )\n }).description('Country filters - for GeospatialField only'),\n geometryTypes: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.GeospatialField).required(),\n then: Joi.array()\n .items(\n Joi.string().valid(\n ...Object.values(GeospatialFieldGeometryTypesEnum)\n )\n )\n .description(\n 'Geometry types for geospatial data - for GeospatialField only'\n )\n }).description('Geometry types - for GeospatialField only'),\n format: Joi.when('type', {\n is: Joi.string()\n .trim()\n .valid(ComponentType.TelephoneNumberField)\n .required(),\n then: Joi.string()\n .valid(...Object.values(TelephoneNumberFieldOptionsFormatEnum))\n .description(\n 'Format for telephone number - for TelephoneNumberField only'\n )\n }).description('Format - for TelephoneNumberField only')\n })\n .default({})\n .unknown(true)\n .description('Component-specific configuration options'),\n schema: Joi.object({\n min: Joi.number()\n .empty('')\n .description('Minimum value or length for validation'),\n max: Joi.number()\n .empty('')\n .description('Maximum value or length for validation'),\n length: Joi.number()\n .empty('')\n .description('Exact length required for validation'),\n regex: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.TextField,\n ComponentType.MultilineTextField\n ),\n then: Joi.string() // NOSONAR\n .trim()\n .optional()\n .description('Regex expression for validation of user field content')\n .custom(regexCustomValidator),\n otherwise: Joi.string().allow('')\n }).messages({ 'custom.incompatible': 'The regex expression is invalid' })\n })\n .unknown(true)\n .default({})\n .description('Validation rules for the component'),\n list: Joi.string()\n .trim()\n .optional()\n .description(\n 'Reference to a predefined list of options for select components'\n )\n })\n .unknown(true)\n\nexport const componentSchemaV2 = componentSchema\n .keys({\n id: idSchema.description('Unique identifier for the component'),\n list: Joi.string()\n .when('/lists', {\n is: Joi.exist(),\n then: Joi.valid(listIdRef)\n })\n .optional()\n .description(\n 'List id reference to a predefined list of options for select components'\n )\n .error(checkErrors(FormDefinitionError.RefPageComponentList))\n })\n .description('Component schema for V2 forms')\n\nexport const componentPayloadSchemaV2 = componentSchema\n .keys({\n id: idSchema.description('Unique identifier for the component'),\n list: Joi.string()\n .optional()\n .description(\n 'List id reference to a predefined list of options for select components'\n )\n })\n .description('Payload schema for component for V2 forms')\n\nexport const fileUploadComponentSchema = componentSchemaV2.keys({\n type: Joi.string<ComponentType.FileUploadField>()\n .trim()\n .valid(ComponentType.FileUploadField)\n .required()\n .description('Component that can only be a FileUploadField')\n})\n\nexport const contentComponentSchema = componentSchemaV2.keys({\n type: Joi.string<ComponentType>()\n .trim()\n .valid(ComponentType.Details)\n .valid(ComponentType.Html)\n .valid(ComponentType.Markdown)\n .valid(ComponentType.InsetText)\n .valid(ComponentType.NotificationBanner)\n .valid(ComponentType.List)\n .required()\n .description('Content only component type (Details, Html, Markdown, etc.)')\n})\n\nconst nextSchema = Joi.object<Link>()\n .description('Navigation link defining where to go after completing a page')\n .keys({\n path: Joi.string()\n .trim()\n .required()\n .description('The target page path to navigate to'),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description(\n 'Optional condition that determines if this path should be taken'\n ),\n redirect: Joi.string()\n .trim()\n .optional()\n .description(\n 'Optional external URL to redirect to instead of an internal page'\n )\n })\n\nconst repeatOptions = Joi.object<RepeatOptions>()\n .description('Configuration options for a repeatable page section')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description(\n 'Identifier for the repeatable section, used in data structure'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Title displayed for each repeatable item')\n })\n\nconst repeatSchema = Joi.object<RepeatSchema>()\n .description('Validation rules for a repeatable section')\n .keys({\n min: Joi.number()\n .empty('')\n .min(MIN_NUMBER_OF_REPEAT_ITEMS)\n .required()\n .description('Minimum number of repetitions required'),\n max: Joi.number()\n .empty('')\n .min(Joi.ref('min'))\n .max(MAX_NUMBER_OF_REPEAT_ITEMS)\n .required()\n .description('Maximum number of repetitions allowed')\n })\n\nexport const pageRepeatSchema = Joi.object<Repeat>()\n .description('Complete configuration for a repeatable page')\n .keys({\n options: repeatOptions\n .required()\n .description('Display and identification options for the repetition'),\n schema: repeatSchema\n .required()\n .description('Validation constraints for the number of repetitions')\n })\n\nconst eventSchema = Joi.object<Event>()\n .description('Event handler configuration for page lifecycle events')\n .keys({\n type: Joi.string()\n .trim()\n .allow('http')\n .required()\n .description(\n 'Type of the event handler (currently only \"http\" supported)'\n ),\n options: Joi.object<EventOptions>()\n .description('Options specific to the event handler type')\n .keys({\n method: Joi.string()\n .trim()\n .allow('POST')\n .required()\n .description('HTTP method to use for the request'),\n url: Joi.string()\n .trim()\n .uri({ scheme: ['http', 'https'] })\n .required()\n .description('URL endpoint to call when the event fires')\n })\n })\n\nconst eventsSchema = Joi.object<Events>()\n .description(\n 'Collection of event handlers for different page lifecycle events'\n )\n .keys({\n onLoad: eventSchema\n .optional()\n .description('Event handler triggered when the page is loaded'),\n onSave: eventSchema\n .optional()\n .description('Event handler triggered when the page data is saved')\n })\n\nexport const pageUploadComponentsSchema = Joi.array<\n FileUploadFieldComponent | ContentComponentsDef\n>()\n .items(\n fileUploadComponentSchema.required(),\n contentComponentSchema.optional()\n )\n .unique('id')\n .unique('name', { ignoreUndefined: true })\n .min(1)\n .max(2)\n .description('Components allowed on Page Upload schema')\n\n/**\n * `/status` is a special route for providing a user's application status.\n * It should not be configured via the designer.\n */\nexport const pageSchema = Joi.object<Page>()\n .description('Form page definition specifying content and behavior')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the page'),\n path: Joi.string()\n .trim()\n .required()\n .disallow('/status')\n .description(\n 'URL path for this page, must not be the reserved \"/status\" path'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Page title displayed at the top of the page'),\n section: Joi.string().trim().description('Section this page belongs to'),\n controller: Joi.string()\n .trim()\n .optional()\n .description('Custom controller class name for special page behavior'),\n components: Joi.array<ComponentDef>()\n .items(componentSchema)\n .unique('name')\n .description('UI components displayed on this page'),\n repeat: Joi.when('controller', {\n is: Joi.string().trim().valid('RepeatPageController').required(),\n then: pageRepeatSchema\n .required()\n .description(\n 'Configuration for repeatable pages, required when using RepeatPageController'\n ),\n otherwise: Joi.any().strip()\n }),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Optional condition that determines if this page is shown'),\n next: Joi.array<Link>()\n .items(nextSchema)\n .default([])\n .description('Possible navigation paths after this page'),\n events: eventsSchema\n .optional()\n .description('Event handlers for page lifecycle events'),\n view: Joi.string()\n .trim()\n .optional()\n .description(\n 'Optional custom view template to use for rendering this page'\n )\n })\n\n/**\n * V2 engine schema - used with new editor\n */\nexport const pageSchemaV2 = pageSchema\n .append({\n id: idSchema.description('Unique identifier for the page'),\n title: Joi.string()\n .trim()\n .allow('')\n .required()\n .description(\n 'Page title displayed at the top of the page (with support for empty titles in V2)'\n ),\n components: Joi.when('controller', {\n switch: [\n {\n is: Joi.string().trim().valid(ControllerType.FileUpload).required(),\n then: pageUploadComponentsSchema\n }\n ],\n otherwise: Joi.array<ComponentDef>()\n .items(componentSchemaV2)\n .unique('id')\n .unique('name', { ignoreUndefined: true })\n .description('Components schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniquePageComponentId,\n FormDefinitionError.UniquePageComponentName\n ])\n )\n }),\n condition: Joi.string()\n .trim()\n .when('/conditions', {\n is: Joi.exist(),\n then: Joi.valid(conditionIdRef)\n })\n .optional()\n .description('Optional condition that determines if this page is shown')\n .error(checkErrors(FormDefinitionError.RefPageCondition))\n })\n .description('Page schema for V2 forms')\n\nexport const pagePayloadSchemaV2 = pageSchemaV2\n .append({\n components: Joi.when('controller', {\n switch: [\n {\n is: Joi.string().trim().valid(ControllerType.FileUpload).required(),\n then: pageUploadComponentsSchema\n }\n ],\n otherwise: Joi.array<ComponentDef>()\n .items(componentPayloadSchemaV2)\n .unique('id')\n .unique('name')\n .description('Components schema for V2 forms')\n })\n })\n .description('Payload Page schema for V2 forms')\n\nconst baseListItemSchema = Joi.object<Item>()\n .description('Base schema for list items with common properties')\n .keys({\n id: idSchema.description('Unique identifier for the list item'),\n text: Joi.string()\n .trim()\n .allow('')\n .description('Display text shown to the user'),\n description: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Optional additional descriptive text for the item'),\n conditional: Joi.object<Item['conditional']>()\n .description('Optional components to show when this item is selected')\n .keys({\n components: Joi.array<ComponentDef>()\n .required()\n .items(componentSchema.unknown(true))\n .unique('name')\n .description('Components to display conditionally')\n })\n .optional(),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Condition that determines if this item is shown'),\n hint: Joi.object<Item['hint']>()\n .optional()\n .keys({\n id: idSchema,\n text: Joi.string().trim()\n })\n .description('Optional hint text to be shown on list item')\n })\n\nconst stringListItemSchema = baseListItemSchema\n .append({\n value: Joi.string()\n .trim()\n .required()\n .description('String value stored when this item is selected')\n })\n .description('List item with string value')\n\nconst numberListItemSchema = baseListItemSchema\n .append({\n value: Joi.number()\n .required()\n .description('Numeric value stored when this item is selected')\n })\n .description('List item with numeric value')\n\nexport const listSchema = Joi.object<List>()\n .description('Reusable list of options for select components')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the list'),\n name: Joi.string()\n .trim()\n .required()\n .description('Name used to reference this list from components'),\n title: Joi.string()\n .trim()\n .required()\n .description('Human-readable title for the list'),\n type: Joi.string()\n .trim()\n .required()\n .valid('string', 'number')\n .description('Data type for list values (string or number)'),\n items: Joi.when('type', {\n is: 'string',\n then: Joi.array()\n .items(stringListItemSchema)\n .unique('id')\n .unique('text')\n .unique('value')\n .description('Array of items with string values')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListItemId,\n FormDefinitionError.UniqueListItemText,\n FormDefinitionError.UniqueListItemValue\n ])\n ),\n otherwise: Joi.array()\n .items(numberListItemSchema)\n .unique('id')\n .unique('text')\n .unique('value')\n .description('Array of items with numeric values')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListItemId,\n FormDefinitionError.UniqueListItemText,\n FormDefinitionError.UniqueListItemValue\n ])\n )\n })\n })\n\n/**\n * V2 Joi schema for Lists\n */\nexport const listSchemaV2 = listSchema\n .keys({\n id: idSchema.description('Unique identifier for the list')\n })\n .description('List schema for V2 forms')\n\n/**\n * V2 Joi schema for Sections\n */\nexport const sectionsSchemaV2 = sectionsSchema\n .keys({\n id: idSchema.description('Unique identifier for the section')\n })\n .description('Section schema for V2 forms')\n\nconst feedbackSchema = Joi.object<FormDefinition['feedback']>()\n .description('Feedback configuration for the form')\n .keys({\n url: Joi.string()\n .trim()\n .optional()\n .allow('')\n .description(\n 'URL to an external feedback form when not using built-in feedback'\n ),\n emailAddress: emailAddressNoUnicodeSchema\n .optional()\n .description('Email address where feedback is sent')\n })\n\nconst phaseBannerSchema = Joi.object<PhaseBanner>()\n .description('Phase banner configuration showing development status')\n .keys({\n phase: Joi.string()\n .trim()\n .valid('alpha', 'beta')\n .description('Development phase of the service (alpha or beta)')\n })\n\nconst optionsSchema = Joi.object({\n showReferenceNumber: Joi.boolean().default(false),\n disableUserFeedback: Joi.boolean().default(false)\n}).description('Options for the form')\n\nconst outputSchema = Joi.object<FormDefinition['output']>()\n .description('Configuration for form submission output')\n .keys({\n audience: Joi.string()\n .trim()\n .valid('human', 'machine')\n .required()\n .description(\n 'Target audience for the output (human readable or machine processable)'\n ),\n version: Joi.string()\n .trim()\n .required()\n .description('Version identifier for the output format')\n })\n\n/**\n * Joi schema for `FormDefinition` interface\n * @see {@link FormDefinition}\n */\nexport const formDefinitionSchema = Joi.object<FormDefinition>()\n .description('Complete form definition describing all aspects of a form')\n .required()\n .keys({\n engine: Joi.string()\n .trim()\n .allow('V1', 'V2')\n .default('V1')\n .description('Form engine version to use (V1 or V2)'),\n schema: Joi.number()\n .integer()\n .valid(SchemaVersion.V1)\n .default(SchemaVersion.V1)\n .description('Form schema version to use (1 or 2)'),\n name: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Unique name identifying the form'),\n feedback: feedbackSchema\n .optional()\n .description('Feedback mechanism configuration'),\n startPage: Joi.string()\n .trim()\n .optional()\n .description('Path of the first page to show when starting the form'),\n pages: Joi.array<Page>()\n .required()\n .items(pageSchema)\n .description('Pages schema for V1 forms')\n .unique('path'),\n sections: Joi.array<Section>()\n .items(sectionsSchema)\n .unique('name')\n .unique('title')\n .required()\n .description('Sections grouping related pages together')\n .error(\n checkErrors([\n FormDefinitionError.UniqueSectionName,\n FormDefinitionError.UniqueSectionTitle\n ])\n ),\n conditions: Joi.array<ConditionWrapper>()\n .items(conditionWrapperSchema)\n .unique('name')\n .unique('displayName')\n .description('Named conditions used for form logic'),\n lists: Joi.array<List>()\n .items(listSchema)\n .unique('name')\n .unique('title')\n .description('Reusable lists of options for select components'),\n metadata: Joi.object({ a: Joi.any() })\n .unknown()\n .optional()\n .description('Custom metadata for the form'),\n declaration: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Declaration text shown on the summary page'),\n skipSummary: Joi.any()\n .strip()\n .description('option to skip the summary page'),\n phaseBanner: phaseBannerSchema\n .optional()\n .description('Phase banner configuration'),\n options: optionsSchema.optional().description('Options for the form'),\n outputEmail: emailAddressNoUnicodeSchema\n .email({ tlds: { allow: ['uk'] } })\n .optional()\n .description('Email address where form submissions are sent'),\n output: outputSchema\n .optional()\n .description('Configuration for submission output format'),\n outputs: Joi.array()\n .items({\n emailAddress: emailAddressNoUnicodeSchema\n .email({ tlds: { allow: ['uk'] } })\n .description('Email address where form submissions are sent'),\n audience: Joi.string()\n .trim()\n .valid('human', 'machine')\n .required()\n .description(\n 'Target audience for the output (human readable or machine processable)'\n ),\n version: Joi.string()\n .trim()\n .required()\n .description('Version identifier for the output format')\n })\n .optional()\n .description('One or more email targets/types for submission emails')\n })\n\nexport const formDefinitionV2Schema = formDefinitionSchema\n .keys({\n schema: Joi.number()\n .integer()\n .valid(SchemaVersion.V2)\n .description('Form schema version to use (2)'),\n pages: Joi.array<Page>()\n .items(pageSchemaV2)\n .required()\n .unique('id')\n .unique('path')\n .description('Pages schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniquePageId,\n FormDefinitionError.UniquePagePath\n ])\n ),\n lists: Joi.array<List>()\n .items(listSchemaV2)\n .unique('id')\n .unique('name')\n .unique('title')\n .description('Lists schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListId,\n FormDefinitionError.UniqueListName,\n FormDefinitionError.UniqueListTitle\n ])\n ),\n conditions: Joi.array<ConditionWrapperV2>()\n .items(conditionWrapperSchemaV2)\n .unique('id')\n .unique('displayName')\n .description('Named conditions used for form logic')\n .error(\n checkErrors([\n FormDefinitionError.UniqueConditionId,\n FormDefinitionError.UniqueConditionDisplayName\n ])\n ),\n sections: Joi.array<Section>()\n .items(sectionsSchemaV2)\n .unique('id')\n .unique('name')\n .unique('title')\n .required()\n .description('Sections schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniqueSectionId,\n FormDefinitionError.UniqueSectionName,\n FormDefinitionError.UniqueSectionTitle\n ])\n )\n })\n .description('Form definition schema for V2')\n\nexport {\n MAX_NUMBER_OF_REPEAT_ITEMS,\n MIN_NUMBER_OF_REPEAT_ITEMS\n} from '~/src/form/form-definition/constants.js'\n\n// Maintain compatibility with legacy named export\n// E.g. `import { Schema } from '@defra/forms-model'`\nexport const Schema = formDefinitionSchema\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["JoiDate","JoiBase","v4","uuidV4","rtrimOnly","ComponentType","GeospatialFieldGeometryTypesEnum","GeospatialFieldOptionsCountryEnum","TelephoneNumberFieldOptionsFormatEnum","isConditionalType","ConditionType","Coordinator","OperatorName","MAX_NUMBER_OF_REPEAT_ITEMS","MIN_NUMBER_OF_REPEAT_ITEMS","isConditionListItemRefValueData","isFormDefinition","SchemaVersion","emailAddressNoUnicodeSchema","checkErrors","FormDefinitionError","FormDefinitionErrorType","ControllerType","hasComponents","hasComponentsEvenIfNoNext","Joi","extend","idSchemaOptional","string","uuid","idSchema","default","conditionIdRef","ref","in","adjust","conditions","map","condition","id","componentIdRef","pages","flatMap","page","components","filter","component","listIdRef","lists","list","listItemIdValidator","value","helpers","definition","state","ancestors","find","conditionValue","listId","itemIdExists","items","some","item","error","valids","errorType","Ref","errorCode","RefConditionItemId","incompatibleConditionValidator","componentId","foundComponents","comp","undefined","Boolean","foundComponentHandlesConditions","length","type","incompatibleObject","key","valueKey","Incompatible","IncompatibleConditionComponentType","reason","sectionsSchema","object","description","keys","optional","name","trim","required","title","hideTitle","boolean","conditionFieldSchema","display","conditionValueSchema","conditionListItemRefDataSchemaV2","when","is","exist","then","valid","RefConditionListId","itemId","array","single","custom","min","itemsCoordinator","Object","values","relativeDateValueDataSchemaV2","period","number","integer","positive","unit","direction","relativeDateValueDataSchema","conditionRefSchema","conditionName","conditionDisplayName","coordinator","conditionRefDataSchemaV2","conditionId","RefConditionConditionId","conditionSchema","field","operator","alternatives","try","conditionDataSchemaV2","RefConditionComponentId","any","switch","BooleanValue","StringValue","NumberValue","DateValue","date","format","raw","ListItemRef","RelativeDate","messages","conditionGroupSchema","link","conditionsModelSchema","conditionWrapperSchema","displayName","conditionWrapperSchemaV2","conditional","otherwise","regexCustomValidator","_regex","RegExp","IncompatibleQuestionRegex","componentSchema","shortDescription","errorDescription","Details","Html","InsetText","Markdown","NotificationBanner","pattern","allow","hint","options","rows","empty","maxWords","maxDaysInPast","maxDaysInFuture","earliestDate","latestDate","customValidationMessage","customValidationMessages","unknown","amount","PaymentField","max","conditionalAmounts","emailField","countries","GeospatialField","geometryTypes","TelephoneNumberField","schema","regex","TextField","MultilineTextField","componentSchemaV2","RefPageComponentList","componentPayloadSchemaV2","fileUploadComponentSchema","FileUploadField","contentComponentSchema","List","nextSchema","path","redirect","repeatOptions","repeatSchema","pageRepeatSchema","eventSchema","method","url","uri","scheme","eventsSchema","onLoad","onSave","pageUploadComponentsSchema","unique","ignoreUndefined","pageSchema","disallow","section","controller","repeat","strip","next","events","view","pageSchemaV2","append","FileUpload","UniquePageComponentId","UniquePageComponentName","RefPageCondition","pagePayloadSchemaV2","baseListItemSchema","text","stringListItemSchema","numberListItemSchema","listSchema","UniqueListItemId","UniqueListItemText","UniqueListItemValue","listSchemaV2","sectionsSchemaV2","feedbackSchema","emailAddress","phaseBannerSchema","phase","optionsSchema","showReferenceNumber","disableUserFeedback","outputSchema","audience","version","formDefinitionSchema","engine","V1","feedback","startPage","sections","UniqueSectionName","UniqueSectionTitle","metadata","a","declaration","skipSummary","phaseBanner","outputEmail","email","tlds","output","outputs","formDefinitionV2Schema","V2","UniquePageId","UniquePagePath","UniqueListId","UniqueListName","UniqueListTitle","UniqueConditionId","UniqueConditionDisplayName","UniqueSectionId","Schema"],"sources":["../../../../src/form/form-definition/index.ts"],"sourcesContent":["import JoiDate from '@joi/date'\nimport JoiBase, { type CustomHelpers, type LanguageMessages } from 'joi'\nimport { v4 as uuidV4 } from 'uuid'\n\nimport { rtrimOnly } from '~/src/common/rtrim-only.js'\nimport {\n ComponentType,\n GeospatialFieldGeometryTypesEnum,\n GeospatialFieldOptionsCountryEnum,\n TelephoneNumberFieldOptionsFormatEnum\n} from '~/src/components/enums.js'\nimport { isConditionalType } from '~/src/components/helpers.js'\nimport {\n type ComponentDef,\n type ContentComponentsDef,\n type FileUploadFieldComponent\n} from '~/src/components/types.js'\nimport {\n ConditionType,\n Coordinator,\n OperatorName\n} from '~/src/conditions/enums.js'\nimport {\n type ConditionData,\n type ConditionDataV2,\n type ConditionFieldData,\n type ConditionGroupData,\n type ConditionGroupDataV2,\n type ConditionListItemRefValueDataV2,\n type ConditionRefData,\n type ConditionRefDataV2,\n type ConditionValueData,\n type ConditionsModelData,\n type RelativeDateValueData,\n type RelativeDateValueDataV2\n} from '~/src/conditions/types.js'\nimport {\n MAX_NUMBER_OF_REPEAT_ITEMS,\n MIN_NUMBER_OF_REPEAT_ITEMS\n} from '~/src/form/form-definition/constants.js'\nimport {\n isConditionListItemRefValueData,\n isFormDefinition\n} from '~/src/form/form-definition/helpers.js'\nimport {\n SchemaVersion,\n type ConditionWrapper,\n type ConditionWrapperV2,\n type Event,\n type EventOptions,\n type Events,\n type FormDefinition,\n type Item,\n type Link,\n type List,\n type Page,\n type PhaseBanner,\n type Repeat,\n type RepeatOptions,\n type RepeatSchema,\n type Section\n} from '~/src/form/form-definition/types.js'\nimport { emailAddressNoUnicodeSchema } from '~/src/form/form-editor/index.js'\nimport { checkErrors } from '~/src/form/form-manager/errors.js'\nimport {\n FormDefinitionError,\n FormDefinitionErrorType\n} from '~/src/form/form-manager/types.js'\nimport { ControllerType } from '~/src/pages/enums.js'\nimport {\n hasComponents,\n hasComponentsEvenIfNoNext\n} from '~/src/pages/helpers.js'\n\nconst Joi = JoiBase.extend(JoiDate) as JoiBase.Root\n\nconst idSchemaOptional = Joi.string().uuid()\n\nconst idSchema = idSchemaOptional.default(() => uuidV4())\n\nconst conditionIdRef = Joi.ref('/conditions', {\n in: true,\n adjust: (conditions: ConditionWrapperV2[]) =>\n conditions.map((condition) => condition.id)\n})\n\nconst componentIdRef = Joi.ref('/pages', {\n in: true,\n adjust: (pages: Page[]) =>\n pages.flatMap((page) =>\n hasComponents(page)\n ? page.components\n .filter((component) => component.id)\n .map((component) => component.id)\n : []\n )\n})\n\nconst listIdRef = Joi.ref('/lists', {\n in: true,\n adjust: (lists: List[]) =>\n lists.filter((list) => list.id).map((list) => list.id)\n})\n\nexport const listItemIdValidator = (\n value: string,\n helpers: CustomHelpers<ConditionListItemRefValueDataV2>\n) => {\n const definition = helpers.state.ancestors.find(isFormDefinition) as\n | FormDefinition\n | undefined\n\n // Validation may not have been fired on the full FormDefinition\n // therefore we are unable to verify the list & item combination\n if (!definition) {\n return value\n }\n\n // `itemId` is normally an array, so the condition value is one level up from\n // each entry being validated. For a legacy bare-string `itemId` it is the\n // nearest ancestor instead, so locate it by shape rather than fixed position.\n const conditionValue = helpers.state.ancestors.find(\n isConditionListItemRefValueData\n )\n\n if (!isConditionListItemRefValueData(conditionValue)) {\n return value\n }\n\n const listId = conditionValue.listId\n const list = definition.lists.find((list) => list.id === listId)\n\n // This check is just for type safety. It'll be impossible for the list to not exist here as it will be\n // handled by the `Joi.valid(listIdRef)` applied to the `ConditionListItemRefValueDataV2.listId` schema\n if (!list) {\n return value\n }\n\n const itemIdExists = list.items.some((item) => item.id === value)\n\n return itemIdExists\n ? value\n : helpers.error('any.only', {\n value,\n valids: list.items.map((item) => item.id),\n errorType: FormDefinitionErrorType.Ref,\n errorCode: FormDefinitionError.RefConditionItemId\n })\n}\n\nconst incompatibleConditionValidator = (\n value: ConditionDataV2,\n helpers: CustomHelpers<ConditionDataV2>\n) => {\n const { componentId } = value\n const definition = helpers.state.ancestors.find(isFormDefinition) as\n | FormDefinition\n | undefined\n\n // Validation may not have been fired on the full FormDefinition\n // therefore we are unable to verify at this point, but the 'save'\n // will eventually validate the full FormDefinition\n if (!definition) {\n return value\n }\n\n const foundComponents = definition.pages\n .map((page) =>\n hasComponentsEvenIfNoNext(page)\n ? page.components.find((comp) => comp.id === componentId)\n : undefined\n )\n .filter(Boolean)\n\n const foundComponentHandlesConditions = foundComponents.length\n ? isConditionalType(foundComponents[0]?.type)\n : false\n\n return foundComponentHandlesConditions\n ? value\n : helpers.error('custom.incompatible', {\n incompatibleObject: {\n key: 'type',\n value: foundComponents[0]\n },\n valueKey: 'componentId',\n value: componentId,\n errorType: FormDefinitionErrorType.Incompatible,\n errorCode: FormDefinitionError.IncompatibleConditionComponentType,\n reason: 'does not support conditions'\n })\n}\n\nconst sectionsSchema = Joi.object<Section>()\n .description('A form section grouping related pages together')\n .keys({\n id: Joi.string()\n .uuid()\n .optional()\n .description('Unique identifier for the section (UUID)'),\n name: Joi.string()\n .trim()\n .required()\n .description(\n 'Unique identifier for the section, used in code and page references'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Human-readable section title displayed to users'),\n hideTitle: Joi.boolean()\n .optional()\n .default(false)\n .description(\n 'When true, the section title will not be displayed in the UI'\n )\n })\n\nconst conditionFieldSchema = Joi.object<ConditionFieldData>()\n .description('Field reference used in a condition')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Component name referenced by this condition'),\n type: Joi.string()\n .trim()\n .required()\n .description('Data type of the field (e.g., string, number, date)'),\n display: Joi.string()\n .trim()\n .required()\n .description('Human-readable name of the field for display purposes')\n })\n\nconst conditionValueSchema = Joi.object<ConditionValueData>()\n .description('Value specification for a condition')\n .keys({\n type: Joi.string()\n .trim()\n .required()\n .description('Data type of the value (e.g., string, number, date)'),\n value: Joi.string()\n .trim()\n .required()\n .description('The actual value to compare against'),\n display: Joi.string()\n .trim()\n .required()\n .description('Human-readable version of the value for display purposes')\n })\n\nconst conditionListItemRefDataSchemaV2 =\n Joi.object<ConditionListItemRefValueDataV2>()\n .description('List item ref specification for a condition')\n .keys({\n listId: Joi.string()\n .trim()\n .required()\n .when('/lists', {\n is: Joi.exist(),\n then: Joi.valid(listIdRef)\n })\n .description('The id of the list')\n .error(checkErrors(FormDefinitionError.RefConditionListId)),\n itemId: Joi.array()\n .single()\n .items(Joi.string().trim().custom(listItemIdValidator))\n .min(1)\n .required()\n .description('The ids of the selected list items.'),\n itemsCoordinator: Joi.string()\n .trim()\n .valid(...Object.values(Coordinator))\n .optional()\n .description('How multiple checkbox selections are combined (and/or)')\n })\n\nconst relativeDateValueDataSchemaV2 = Joi.object<RelativeDateValueDataV2>()\n .description('Relative date specification for date-based conditions')\n .keys({\n period: Joi.number()\n .integer()\n .positive()\n .required()\n .description('Numeric amount of the time period, as a string'),\n unit: Joi.string()\n .trim()\n .required()\n .description('Time unit (e.g. days, weeks, months, years)'),\n direction: Joi.string()\n .trim()\n .required()\n .description('Temporal direction, either \"past\" or \"future\"')\n })\n\nconst relativeDateValueDataSchema = Joi.object<RelativeDateValueData>()\n .description('Relative date specification for date-based conditions')\n .keys({\n type: Joi.string()\n .trim()\n .valid('RelativeDate')\n .required()\n .description('Type of the condition value, should be \"RelativeDate\"'),\n period: Joi.string()\n .trim()\n .required()\n .description('Numeric amount of the time period, as a string'),\n unit: Joi.string()\n .trim()\n .required()\n .description('Time unit (e.g. days, weeks, months, years)'),\n direction: Joi.string()\n .trim()\n .required()\n .description('Temporal direction, either \"past\" or \"future\"')\n })\n\nconst conditionRefSchema = Joi.object<ConditionRefData>()\n .description('Reference to a named condition defined elsewhere')\n .keys({\n conditionName: Joi.string()\n .trim()\n .required()\n .description('Name of the referenced condition'),\n conditionDisplayName: Joi.string()\n .trim()\n .required()\n .description('Human-readable name of the condition for display purposes'),\n coordinator: Joi.string()\n .trim()\n .optional()\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n )\n })\n\nconst conditionRefDataSchemaV2 = Joi.object<ConditionRefDataV2>()\n .description('Reference to a named condition defined elsewhere')\n .keys({\n id: idSchema.description('Unique identifier for the referenced condition'),\n conditionId: Joi.string()\n .trim()\n .required()\n .when('/conditions', {\n is: Joi.exist(),\n then: Joi.valid(conditionIdRef)\n })\n .description('Name of the referenced condition')\n .error(checkErrors(FormDefinitionError.RefConditionConditionId))\n })\n\nconst conditionSchema = Joi.object<ConditionData>()\n .description('Condition definition specifying a logical comparison')\n .keys({\n field: conditionFieldSchema.description(\n 'The form field being evaluated in this condition'\n ),\n operator: Joi.string()\n .trim()\n .required()\n .description('Comparison operator (equals, greaterThan, contains, etc.)'),\n value: Joi.alternatives()\n .try(conditionValueSchema, relativeDateValueDataSchema)\n .description(\n 'Value to compare the field against, either fixed or relative date'\n ),\n coordinator: Joi.string()\n .trim()\n .optional()\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n )\n })\n\nexport const conditionDataSchemaV2 = Joi.object<ConditionDataV2>()\n .description('Condition definition')\n .keys({\n id: idSchema.description(\n 'Unique identifier used to reference this condition'\n ),\n componentId: Joi.string()\n .trim()\n .required()\n .when('/pages', {\n is: Joi.exist(),\n then: Joi.valid(componentIdRef)\n })\n .description(\n 'Reference to the component id being evaluated in this condition'\n )\n .error(checkErrors(FormDefinitionError.RefConditionComponentId)),\n operator: Joi.string()\n .trim()\n .valid(...Object.values(OperatorName))\n .required()\n .description('Comparison operator (equals, greaterThan, contains, etc.)'),\n type: Joi.string()\n .trim()\n .valid(...Object.values(ConditionType))\n .required()\n .description('Type of the condition value'),\n value: Joi.any()\n .required()\n .description('The actual value to compare against')\n .when('type', {\n switch: [\n { is: ConditionType.BooleanValue, then: Joi.boolean() },\n { is: ConditionType.StringValue, then: Joi.string() },\n { is: ConditionType.NumberValue, then: Joi.number() },\n {\n is: ConditionType.DateValue,\n then: Joi.date().format('YYYY-MM-DD').raw()\n },\n {\n is: ConditionType.ListItemRef,\n then: conditionListItemRefDataSchemaV2\n },\n {\n is: ConditionType.RelativeDate,\n then: relativeDateValueDataSchemaV2\n }\n ]\n })\n .description(\n 'Value to compare the field against, either fixed or relative date'\n )\n })\n .custom(incompatibleConditionValidator)\n .messages({\n // Custom error types require a corresponding messages\n 'custom.incompatible': 'Incompatible data value'\n })\n\nconst conditionGroupSchema = Joi.object<ConditionGroupData>()\n .description('Group of conditions combined with logical operators')\n .keys({\n conditions: Joi.array()\n .items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n Joi.link('#conditionGroupSchema')\n )\n )\n .description('Array of conditions or condition references in this group')\n })\n .id('conditionGroupSchema')\n\nconst conditionsModelSchema = Joi.object<ConditionsModelData>()\n .description('Complete condition model with name and condition set')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Unique identifier for the condition set'),\n conditions: Joi.array()\n .items(\n Joi.alternatives().try(\n conditionSchema,\n conditionRefSchema,\n conditionGroupSchema\n )\n )\n .description(\n 'Array of conditions, condition references, or condition groups'\n )\n })\n\nconst conditionWrapperSchema = Joi.object<ConditionWrapper>()\n .description('Container for a named condition with its definition')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description('Unique identifier used to reference this condition'),\n displayName: Joi.string()\n .trim()\n .description('Human-readable name for display in the UI'),\n value: conditionsModelSchema\n .required()\n .description('The complete condition definition')\n })\n\nexport const conditionWrapperSchemaV2 = Joi.object<ConditionWrapperV2>()\n .description('Container for a named condition with its definition')\n .keys({\n id: idSchema.description('Unique identifier for the condition'),\n displayName: Joi.string()\n .trim()\n .description('Human-readable name for display in the UI'),\n coordinator: Joi.string()\n .optional()\n .when('items', { is: Joi.array().min(2), then: Joi.required() })\n .description(\n 'Logical operator connecting this condition with others (AND, OR)'\n ),\n items: Joi.array<ConditionGroupDataV2>()\n .items(\n Joi.alternatives().conditional('.componentId', {\n is: Joi.exist(),\n then: conditionDataSchemaV2,\n otherwise: conditionRefDataSchemaV2\n })\n )\n .min(1)\n .description('Array of conditions or condition references')\n })\n .description('Condition schema for V2 forms')\n\nexport const regexCustomValidator = (\n value: string,\n helpers: CustomHelpers<string>\n) => {\n try {\n const _regex = new RegExp(value)\n } catch {\n return helpers.error('custom.incompatible', {\n errorType: FormDefinitionErrorType.Incompatible,\n errorCode: FormDefinitionError.IncompatibleQuestionRegex\n })\n }\n return value\n}\n\nexport const componentSchema = Joi.object<ComponentDef>()\n .description('Form component definition specifying UI element behavior')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the component'),\n type: Joi.string<ComponentType>()\n .trim()\n .required()\n .description('Component type (TextField, RadioButtons, DateField, etc.)'),\n shortDescription: Joi.string()\n .custom(rtrimOnly)\n .optional()\n .description('Short description of the component used in the summary'),\n errorDescription: Joi.string()\n .custom(rtrimOnly)\n .optional()\n .description('Description that will be displayed in error messages'),\n name: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown,\n ComponentType.NotificationBanner\n ),\n then: Joi.string()\n .trim()\n .pattern(/^[a-zA-Z]+$/)\n .optional()\n .description('Optional identifier for display-only components'),\n otherwise: Joi.string()\n .trim()\n .pattern(/^[a-zA-Z]+$/)\n .required()\n .description('Unique identifier for the component, used in form data')\n }),\n title: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.Details,\n ComponentType.Html,\n ComponentType.InsetText,\n ComponentType.Markdown,\n ComponentType.NotificationBanner\n ),\n then: Joi.string()\n .trim()\n .optional()\n .description('Optional title for display-only components'),\n otherwise: Joi.string()\n .trim()\n .allow('')\n .description('Label displayed above the component')\n }),\n hint: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description(\n 'Additional guidance text displayed below the component title'\n ),\n options: Joi.object({\n rows: Joi.number()\n .empty('')\n .description('Number of rows for textarea components'),\n maxWords: Joi.number()\n .empty('')\n .description('Maximum number of words allowed in text inputs'),\n maxDaysInPast: Joi.number()\n .empty('')\n .description('Maximum days in the past allowed for date inputs'),\n maxDaysInFuture: Joi.number()\n .empty('')\n .description('Maximum days in the future allowed for date inputs'),\n earliestDate: Joi.date()\n .format('YYYY-MM-DD')\n .raw()\n .empty('')\n .description('Earliest date of allowed date range for date inputs'),\n latestDate: Joi.date()\n .format('YYYY-MM-DD')\n .raw()\n .empty('')\n .description('Latest date of allowed date range for date inputs'),\n customValidationMessage: Joi.string()\n .trim()\n .allow('')\n .description('Custom error message for validation failures'),\n customValidationMessages: Joi.object<LanguageMessages>()\n .unknown(true)\n .optional()\n .description('Custom error messages keyed by validation rule name'),\n amount: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.PaymentField).required(),\n then: Joi.number()\n .min(0)\n .max(100000)\n .required()\n .description('Payment amount in GBP (£0 - £100,000)')\n }).description('Payment amount - for PaymentField only'),\n description: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.PaymentField).required(),\n then: Joi.string()\n .max(230)\n .required()\n .description('Payment description (max 230 chars)')\n }).description('Payment description - for PaymentField only'),\n conditionalAmounts: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.PaymentField).required(),\n then: Joi.array()\n .items(\n Joi.object({\n condition: Joi.string()\n .trim()\n .required()\n .description('Condition ID for this amount'),\n amount: Joi.number()\n .min(0.3)\n .max(100000)\n .required()\n .description('Amount in GBP when condition is true (min £0.30)')\n })\n )\n .optional()\n .description('Conditional payment amounts evaluated in order')\n }).description('Conditional amounts - for PaymentField only'),\n emailField: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.PaymentField).required(),\n then: Joi.string()\n .trim()\n .optional()\n .description(\n 'Name of EmailAddressField to prepopulate GOV.UK Pay email'\n )\n }).description('Email field reference - for PaymentField only'),\n countries: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.GeospatialField).required(),\n then: Joi.array()\n .items(\n Joi.string().valid(\n ...Object.values(GeospatialFieldOptionsCountryEnum)\n )\n )\n .description(\n 'Country filters for geospatial data - for GeospatialField only'\n )\n }).description('Country filters - for GeospatialField only'),\n geometryTypes: Joi.when('type', {\n is: Joi.string().trim().valid(ComponentType.GeospatialField).required(),\n then: Joi.array()\n .items(\n Joi.string().valid(\n ...Object.values(GeospatialFieldGeometryTypesEnum)\n )\n )\n .description(\n 'Geometry types for geospatial data - for GeospatialField only'\n )\n }).description('Geometry types - for GeospatialField only'),\n format: Joi.when('type', {\n is: Joi.string()\n .trim()\n .valid(ComponentType.TelephoneNumberField)\n .required(),\n then: Joi.string()\n .valid(...Object.values(TelephoneNumberFieldOptionsFormatEnum))\n .description(\n 'Format for telephone number - for TelephoneNumberField only'\n )\n }).description('Format - for TelephoneNumberField only')\n })\n .default({})\n .unknown(true)\n .description('Component-specific configuration options'),\n schema: Joi.object({\n min: Joi.number()\n .empty('')\n .description('Minimum value or length for validation'),\n max: Joi.number()\n .empty('')\n .description('Maximum value or length for validation'),\n length: Joi.number()\n .empty('')\n .description('Exact length required for validation'),\n regex: Joi.when('type', {\n is: Joi.string().valid(\n ComponentType.TextField,\n ComponentType.MultilineTextField\n ),\n then: Joi.string() // NOSONAR\n .trim()\n .optional()\n .description('Regex expression for validation of user field content')\n .custom(regexCustomValidator),\n otherwise: Joi.string().allow('')\n }).messages({ 'custom.incompatible': 'The regex expression is invalid' })\n })\n .unknown(true)\n .default({})\n .description('Validation rules for the component'),\n list: Joi.string()\n .trim()\n .optional()\n .description(\n 'Reference to a predefined list of options for select components'\n )\n })\n .unknown(true)\n\nexport const componentSchemaV2 = componentSchema\n .keys({\n id: idSchema.description('Unique identifier for the component'),\n list: Joi.string()\n .when('/lists', {\n is: Joi.exist(),\n then: Joi.valid(listIdRef)\n })\n .optional()\n .description(\n 'List id reference to a predefined list of options for select components'\n )\n .error(checkErrors(FormDefinitionError.RefPageComponentList))\n })\n .description('Component schema for V2 forms')\n\nexport const componentPayloadSchemaV2 = componentSchema\n .keys({\n id: idSchema.description('Unique identifier for the component'),\n list: Joi.string()\n .optional()\n .description(\n 'List id reference to a predefined list of options for select components'\n )\n })\n .description('Payload schema for component for V2 forms')\n\nexport const fileUploadComponentSchema = componentSchemaV2.keys({\n type: Joi.string<ComponentType.FileUploadField>()\n .trim()\n .valid(ComponentType.FileUploadField)\n .required()\n .description('Component that can only be a FileUploadField')\n})\n\nexport const contentComponentSchema = componentSchemaV2.keys({\n type: Joi.string<ComponentType>()\n .trim()\n .valid(ComponentType.Details)\n .valid(ComponentType.Html)\n .valid(ComponentType.Markdown)\n .valid(ComponentType.InsetText)\n .valid(ComponentType.NotificationBanner)\n .valid(ComponentType.List)\n .required()\n .description('Content only component type (Details, Html, Markdown, etc.)')\n})\n\nconst nextSchema = Joi.object<Link>()\n .description('Navigation link defining where to go after completing a page')\n .keys({\n path: Joi.string()\n .trim()\n .required()\n .description('The target page path to navigate to'),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description(\n 'Optional condition that determines if this path should be taken'\n ),\n redirect: Joi.string()\n .trim()\n .optional()\n .description(\n 'Optional external URL to redirect to instead of an internal page'\n )\n })\n\nconst repeatOptions = Joi.object<RepeatOptions>()\n .description('Configuration options for a repeatable page section')\n .keys({\n name: Joi.string()\n .trim()\n .required()\n .description(\n 'Identifier for the repeatable section, used in data structure'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Title displayed for each repeatable item')\n })\n\nconst repeatSchema = Joi.object<RepeatSchema>()\n .description('Validation rules for a repeatable section')\n .keys({\n min: Joi.number()\n .empty('')\n .min(MIN_NUMBER_OF_REPEAT_ITEMS)\n .required()\n .description('Minimum number of repetitions required'),\n max: Joi.number()\n .empty('')\n .min(Joi.ref('min'))\n .max(MAX_NUMBER_OF_REPEAT_ITEMS)\n .required()\n .description('Maximum number of repetitions allowed')\n })\n\nexport const pageRepeatSchema = Joi.object<Repeat>()\n .description('Complete configuration for a repeatable page')\n .keys({\n options: repeatOptions\n .required()\n .description('Display and identification options for the repetition'),\n schema: repeatSchema\n .required()\n .description('Validation constraints for the number of repetitions')\n })\n\nconst eventSchema = Joi.object<Event>()\n .description('Event handler configuration for page lifecycle events')\n .keys({\n type: Joi.string()\n .trim()\n .allow('http')\n .required()\n .description(\n 'Type of the event handler (currently only \"http\" supported)'\n ),\n options: Joi.object<EventOptions>()\n .description('Options specific to the event handler type')\n .keys({\n method: Joi.string()\n .trim()\n .allow('POST')\n .required()\n .description('HTTP method to use for the request'),\n url: Joi.string()\n .trim()\n .uri({ scheme: ['http', 'https'] })\n .required()\n .description('URL endpoint to call when the event fires')\n })\n })\n\nconst eventsSchema = Joi.object<Events>()\n .description(\n 'Collection of event handlers for different page lifecycle events'\n )\n .keys({\n onLoad: eventSchema\n .optional()\n .description('Event handler triggered when the page is loaded'),\n onSave: eventSchema\n .optional()\n .description('Event handler triggered when the page data is saved')\n })\n\nexport const pageUploadComponentsSchema = Joi.array<\n FileUploadFieldComponent | ContentComponentsDef\n>()\n .items(\n fileUploadComponentSchema.required(),\n contentComponentSchema.optional()\n )\n .unique('id')\n .unique('name', { ignoreUndefined: true })\n .min(1)\n .max(2)\n .description('Components allowed on Page Upload schema')\n\n/**\n * `/status` is a special route for providing a user's application status.\n * It should not be configured via the designer.\n */\nexport const pageSchema = Joi.object<Page>()\n .description('Form page definition specifying content and behavior')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the page'),\n path: Joi.string()\n .trim()\n .required()\n .disallow('/status')\n .description(\n 'URL path for this page, must not be the reserved \"/status\" path'\n ),\n title: Joi.string()\n .trim()\n .required()\n .description('Page title displayed at the top of the page'),\n section: Joi.string().trim().description('Section this page belongs to'),\n controller: Joi.string()\n .trim()\n .optional()\n .description('Custom controller class name for special page behavior'),\n components: Joi.array<ComponentDef>()\n .items(componentSchema)\n .unique('name')\n .description('UI components displayed on this page'),\n repeat: Joi.when('controller', {\n is: Joi.string().trim().valid('RepeatPageController').required(),\n then: pageRepeatSchema\n .required()\n .description(\n 'Configuration for repeatable pages, required when using RepeatPageController'\n ),\n otherwise: Joi.any().strip()\n }),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Optional condition that determines if this page is shown'),\n next: Joi.array<Link>()\n .items(nextSchema)\n .default([])\n .description('Possible navigation paths after this page'),\n events: eventsSchema\n .optional()\n .description('Event handlers for page lifecycle events'),\n view: Joi.string()\n .trim()\n .optional()\n .description(\n 'Optional custom view template to use for rendering this page'\n )\n })\n\n/**\n * V2 engine schema - used with new editor\n */\nexport const pageSchemaV2 = pageSchema\n .append({\n id: idSchema.description('Unique identifier for the page'),\n title: Joi.string()\n .trim()\n .allow('')\n .required()\n .description(\n 'Page title displayed at the top of the page (with support for empty titles in V2)'\n ),\n components: Joi.when('controller', {\n switch: [\n {\n is: Joi.string().trim().valid(ControllerType.FileUpload).required(),\n then: pageUploadComponentsSchema\n }\n ],\n otherwise: Joi.array<ComponentDef>()\n .items(componentSchemaV2)\n .unique('id')\n .unique('name', { ignoreUndefined: true })\n .description('Components schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniquePageComponentId,\n FormDefinitionError.UniquePageComponentName\n ])\n )\n }),\n condition: Joi.string()\n .trim()\n .when('/conditions', {\n is: Joi.exist(),\n then: Joi.valid(conditionIdRef)\n })\n .optional()\n .description('Optional condition that determines if this page is shown')\n .error(checkErrors(FormDefinitionError.RefPageCondition))\n })\n .description('Page schema for V2 forms')\n\nexport const pagePayloadSchemaV2 = pageSchemaV2\n .append({\n components: Joi.when('controller', {\n switch: [\n {\n is: Joi.string().trim().valid(ControllerType.FileUpload).required(),\n then: pageUploadComponentsSchema\n }\n ],\n otherwise: Joi.array<ComponentDef>()\n .items(componentPayloadSchemaV2)\n .unique('id')\n .unique('name')\n .description('Components schema for V2 forms')\n })\n })\n .description('Payload Page schema for V2 forms')\n\nconst baseListItemSchema = Joi.object<Item>()\n .description('Base schema for list items with common properties')\n .keys({\n id: idSchema.description('Unique identifier for the list item'),\n text: Joi.string()\n .trim()\n .allow('')\n .description('Display text shown to the user'),\n description: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Optional additional descriptive text for the item'),\n conditional: Joi.object<Item['conditional']>()\n .description('Optional components to show when this item is selected')\n .keys({\n components: Joi.array<ComponentDef>()\n .required()\n .items(componentSchema.unknown(true))\n .unique('name')\n .description('Components to display conditionally')\n })\n .optional(),\n condition: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Condition that determines if this item is shown'),\n hint: Joi.object<Item['hint']>()\n .optional()\n .keys({\n id: idSchema,\n text: Joi.string().trim()\n })\n .description('Optional hint text to be shown on list item')\n })\n\nconst stringListItemSchema = baseListItemSchema\n .append({\n value: Joi.string()\n .trim()\n .required()\n .description('String value stored when this item is selected')\n })\n .description('List item with string value')\n\nconst numberListItemSchema = baseListItemSchema\n .append({\n value: Joi.number()\n .required()\n .description('Numeric value stored when this item is selected')\n })\n .description('List item with numeric value')\n\nexport const listSchema = Joi.object<List>()\n .description('Reusable list of options for select components')\n .keys({\n id: idSchemaOptional.description('Unique identifier for the list'),\n name: Joi.string()\n .trim()\n .required()\n .description('Name used to reference this list from components'),\n title: Joi.string()\n .trim()\n .required()\n .description('Human-readable title for the list'),\n type: Joi.string()\n .trim()\n .required()\n .valid('string', 'number')\n .description('Data type for list values (string or number)'),\n items: Joi.when('type', {\n is: 'string',\n then: Joi.array()\n .items(stringListItemSchema)\n .unique('id')\n .unique('text')\n .unique('value')\n .description('Array of items with string values')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListItemId,\n FormDefinitionError.UniqueListItemText,\n FormDefinitionError.UniqueListItemValue\n ])\n ),\n otherwise: Joi.array()\n .items(numberListItemSchema)\n .unique('id')\n .unique('text')\n .unique('value')\n .description('Array of items with numeric values')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListItemId,\n FormDefinitionError.UniqueListItemText,\n FormDefinitionError.UniqueListItemValue\n ])\n )\n })\n })\n\n/**\n * V2 Joi schema for Lists\n */\nexport const listSchemaV2 = listSchema\n .keys({\n id: idSchema.description('Unique identifier for the list')\n })\n .description('List schema for V2 forms')\n\n/**\n * V2 Joi schema for Sections\n */\nexport const sectionsSchemaV2 = sectionsSchema\n .keys({\n id: idSchema.description('Unique identifier for the section')\n })\n .description('Section schema for V2 forms')\n\nconst feedbackSchema = Joi.object<FormDefinition['feedback']>()\n .description('Feedback configuration for the form')\n .keys({\n url: Joi.string()\n .trim()\n .optional()\n .allow('')\n .description(\n 'URL to an external feedback form when not using built-in feedback'\n ),\n emailAddress: emailAddressNoUnicodeSchema\n .optional()\n .description('Email address where feedback is sent')\n })\n\nconst phaseBannerSchema = Joi.object<PhaseBanner>()\n .description('Phase banner configuration showing development status')\n .keys({\n phase: Joi.string()\n .trim()\n .valid('alpha', 'beta')\n .description('Development phase of the service (alpha or beta)')\n })\n\nconst optionsSchema = Joi.object({\n showReferenceNumber: Joi.boolean().default(false),\n disableUserFeedback: Joi.boolean().default(false)\n}).description('Options for the form')\n\nconst outputSchema = Joi.object<FormDefinition['output']>()\n .description('Configuration for form submission output')\n .keys({\n audience: Joi.string()\n .trim()\n .valid('human', 'machine')\n .required()\n .description(\n 'Target audience for the output (human readable or machine processable)'\n ),\n version: Joi.string()\n .trim()\n .required()\n .description('Version identifier for the output format')\n })\n\n/**\n * Joi schema for `FormDefinition` interface\n * @see {@link FormDefinition}\n */\nexport const formDefinitionSchema = Joi.object<FormDefinition>()\n .description('Complete form definition describing all aspects of a form')\n .required()\n .keys({\n engine: Joi.string()\n .trim()\n .allow('V1', 'V2')\n .default('V1')\n .description('Form engine version to use (V1 or V2)'),\n schema: Joi.number()\n .integer()\n .valid(SchemaVersion.V1)\n .default(SchemaVersion.V1)\n .description('Form schema version to use (1 or 2)'),\n name: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Unique name identifying the form'),\n feedback: feedbackSchema\n .optional()\n .description('Feedback mechanism configuration'),\n startPage: Joi.string()\n .trim()\n .optional()\n .description('Path of the first page to show when starting the form'),\n pages: Joi.array<Page>()\n .required()\n .items(pageSchema)\n .description('Pages schema for V1 forms')\n .unique('path'),\n sections: Joi.array<Section>()\n .items(sectionsSchema)\n .unique('name')\n .unique('title')\n .required()\n .description('Sections grouping related pages together')\n .error(\n checkErrors([\n FormDefinitionError.UniqueSectionName,\n FormDefinitionError.UniqueSectionTitle\n ])\n ),\n conditions: Joi.array<ConditionWrapper>()\n .items(conditionWrapperSchema)\n .unique('name')\n .unique('displayName')\n .description('Named conditions used for form logic'),\n lists: Joi.array<List>()\n .items(listSchema)\n .unique('name')\n .unique('title')\n .description('Reusable lists of options for select components'),\n metadata: Joi.object({ a: Joi.any() })\n .unknown()\n .optional()\n .description('Custom metadata for the form'),\n declaration: Joi.string()\n .trim()\n .allow('')\n .optional()\n .description('Declaration text shown on the summary page'),\n skipSummary: Joi.any()\n .strip()\n .description('option to skip the summary page'),\n phaseBanner: phaseBannerSchema\n .optional()\n .description('Phase banner configuration'),\n options: optionsSchema.optional().description('Options for the form'),\n outputEmail: emailAddressNoUnicodeSchema\n .email({ tlds: { allow: ['uk'] } })\n .optional()\n .description('Email address where form submissions are sent'),\n output: outputSchema\n .optional()\n .description('Configuration for submission output format'),\n outputs: Joi.array()\n .items({\n emailAddress: emailAddressNoUnicodeSchema\n .email({ tlds: { allow: ['uk'] } })\n .description('Email address where form submissions are sent'),\n audience: Joi.string()\n .trim()\n .valid('human', 'machine')\n .required()\n .description(\n 'Target audience for the output (human readable or machine processable)'\n ),\n version: Joi.string()\n .trim()\n .required()\n .description('Version identifier for the output format')\n })\n .optional()\n .description('One or more email targets/types for submission emails')\n })\n\nexport const formDefinitionV2Schema = formDefinitionSchema\n .keys({\n schema: Joi.number()\n .integer()\n .valid(SchemaVersion.V2)\n .description('Form schema version to use (2)'),\n pages: Joi.array<Page>()\n .items(pageSchemaV2)\n .required()\n .unique('id')\n .unique('path')\n .description('Pages schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniquePageId,\n FormDefinitionError.UniquePagePath\n ])\n ),\n lists: Joi.array<List>()\n .items(listSchemaV2)\n .unique('id')\n .unique('name')\n .unique('title')\n .description('Lists schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniqueListId,\n FormDefinitionError.UniqueListName,\n FormDefinitionError.UniqueListTitle\n ])\n ),\n conditions: Joi.array<ConditionWrapperV2>()\n .items(conditionWrapperSchemaV2)\n .unique('id')\n .unique('displayName')\n .description('Named conditions used for form logic')\n .error(\n checkErrors([\n FormDefinitionError.UniqueConditionId,\n FormDefinitionError.UniqueConditionDisplayName\n ])\n ),\n sections: Joi.array<Section>()\n .items(sectionsSchemaV2)\n .unique('id')\n .unique('name')\n .unique('title')\n .required()\n .description('Sections schema for V2 forms')\n .error(\n checkErrors([\n FormDefinitionError.UniqueSectionId,\n FormDefinitionError.UniqueSectionName,\n FormDefinitionError.UniqueSectionTitle\n ])\n )\n })\n .description('Form definition schema for V2')\n\nexport {\n MAX_NUMBER_OF_REPEAT_ITEMS,\n MIN_NUMBER_OF_REPEAT_ITEMS\n} from '~/src/form/form-definition/constants.js'\n\n// Maintain compatibility with legacy named export\n// E.g. `import { Schema } from '@defra/forms-model'`\nexport const Schema = formDefinitionSchema\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/conditions/migration.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAEL,KAAK,eAAe,EAOrB,MAAM,2BAA2B,CAAA;AAClC,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,IAAI,EACV,MAAM,qCAAqC,CAAA;AAE5C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,KAAG,MAE5D,CAAA;AAED,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,eAAe,WAE3E;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,eAAe,WAEtE;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,eAAe,WAEvE;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,eAAe,WAEtE;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,eAAe,WAEpE;AAED,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,eAAe,WAE5E;AAmKD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,gBAAgB,GAAG,kBAAkB,GAC7C,OAAO,IAAI,kBAAkB,CAE/B;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,gBAAgB,GAAG,kBAAkB,GAC7C,OAAO,IAAI,gBAAgB,CAE7B;AAED,wBAAgB,6BAA6B,CAC3C,gBAAgB,EAAE,kBAAkB,EACpC,KAAK,EAAE,gBAAgB,GACtB,gBAAgB,CAqClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAA;IACjD,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAA;IACnE,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAA;CAC1E"}
1
+ {"version":3,"file":"migration.d.ts","sourceRoot":"","sources":["../../../src/conditions/migration.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAM7D,OAAO,EAEL,KAAK,eAAe,EAQrB,MAAM,2BAA2B,CAAA;AAElC,OAAO,EACL,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,KAAK,IAAI,EACV,MAAM,qCAAqC,CAAA;AAE5C;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GAAI,aAAa,MAAM,KAAG,MAE5D,CAAA;AAED,wBAAgB,iCAAiC,CAAC,SAAS,EAAE,eAAe,WAE3E;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,eAAe,WAEtE;AAED,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,eAAe,WAEvE;AAED,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,eAAe,WAEtE;AAED,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,eAAe,WAEpE;AAED,wBAAgB,kCAAkC,CAAC,SAAS,EAAE,eAAe,WAE5E;AAqPD,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,gBAAgB,GAAG,kBAAkB,GAC7C,OAAO,IAAI,kBAAkB,CAE/B;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,gBAAgB,GAAG,kBAAkB,GAC7C,OAAO,IAAI,gBAAgB,CAE7B;AAED,wBAAgB,6BAA6B,CAC3C,gBAAgB,EAAE,kBAAkB,EACpC,KAAK,EAAE,gBAAgB,GACtB,gBAAgB,CAqClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAA;IACjD,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,YAAY,GAAG,SAAS,CAAA;IACnE,gBAAgB,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,kBAAkB,GAAG,SAAS,CAAA;CAC1E"}
@@ -14,7 +14,19 @@ export interface RelativeDateValueData {
14
14
  }
15
15
  export interface ConditionListItemRefValueDataV2 {
16
16
  listId: string;
17
- itemId: string;
17
+ /**
18
+ * One or more referenced list item ids (radio, checkbox, autocomplete,
19
+ * select). New conditions are always written as an array, even for a single
20
+ * selection. A bare `string` is only retained for backwards compatibility so
21
+ * conditions saved before multi-select support continue to load, display and
22
+ * evaluate.
23
+ */
24
+ itemId: string[] | string;
25
+ /**
26
+ * How multiple checkbox selections are combined (AND/OR). Only set for
27
+ * checkbox questions; radio/autocomplete/select combine implicitly.
28
+ */
29
+ itemsCoordinator?: Coordinator;
18
30
  }
19
31
  export interface RelativeDateValueDataV2 {
20
32
  period: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/conditions/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,aAAa,CAAC,YAAY,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;IACf,SAAS,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;IACf,SAAS,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,wBAAwB,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,kBAAkB,CAAA;IACzB,QAAQ,EAAE,YAAY,CAAA;IACtB,KAAK,EAAE,kBAAkB,GAAG,qBAAqB,CAAA;IACjD,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,MAAM,MAAM,oBAAoB,GAC5B,+BAA+B,GAC/B,uBAAuB,GACvB,MAAM,GACN,OAAO,GACP,MAAM,CAAA;AAEV,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,YAAY,CAAA;IACtB,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,EAAE,oBAAoB,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,CAAC,aAAa,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,EAAE,CAAA;CACtE;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,eAAe,GAAG,kBAAkB,CAAC,EAAE,CAAA;AAE3E,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,CACV,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,EAC9C,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,KAC/B,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/conditions/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,+BAA+B,CAAA;AAC9D,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,YAAY,EAClB,MAAM,2BAA2B,CAAA;AAElC,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,aAAa,CAAC,KAAK,CAAA;IACzB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,aAAa,CAAC,YAAY,CAAA;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;IACf,SAAS,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,EAAE,MAAM,CAAA;IACd;;;;;;OAMG;IACH,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACzB;;;OAGG;IACH,gBAAgB,CAAC,EAAE,WAAW,CAAA;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,SAAS,CAAA;IACf,SAAS,EAAE,cAAc,CAAA;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,wBAAwB,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,kBAAkB,CAAA;IACzB,QAAQ,EAAE,YAAY,CAAA;IACtB,KAAK,EAAE,kBAAkB,GAAG,qBAAqB,CAAA;IACjD,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,MAAM,MAAM,oBAAoB,GAC5B,+BAA+B,GAC/B,uBAAuB,GACvB,MAAM,GACN,OAAO,GACP,MAAM,CAAA;AAEV,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,YAAY,CAAA;IACtB,IAAI,EAAE,aAAa,CAAA;IACnB,KAAK,EAAE,oBAAoB,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,CAAC,aAAa,GAAG,gBAAgB,GAAG,kBAAkB,CAAC,EAAE,CAAA;CACtE;AAED,MAAM,MAAM,oBAAoB,GAAG,CAAC,eAAe,GAAG,kBAAkB,CAAC,EAAE,CAAA;AAE3E,MAAM,WAAW,mBAAoB,SAAQ,kBAAkB;IAC7D,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,CACV,SAAS,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,EAC9C,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC,KAC/B,MAAM,CAAA;CACZ;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAA"}
@@ -13,6 +13,14 @@ export declare function isFormDefinition(definition: unknown): definition is For
13
13
  * @returns { conditionValueData is ConditionListItemRefValueDataV2 }
14
14
  */
15
15
  export declare function isConditionListItemRefValueData(conditionValueData: unknown): conditionValueData is ConditionListItemRefValueDataV2;
16
+ /**
17
+ * Normalises a list item ref condition value to an array of item ids. `itemId`
18
+ * is normally an array, but may be a bare string for legacy conditions saved
19
+ * before multi-select support.
20
+ * @param { ConditionListItemRefValueDataV2 | undefined } value
21
+ * @returns { string[] }
22
+ */
23
+ export declare function getConditionListItemIds(value: ConditionListItemRefValueDataV2 | undefined): string[];
16
24
  /**
17
25
  * Returns an array of all hidden fields in a form
18
26
  * @param definition - form definition
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,2BAA2B,CAAA;AAChF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAA;AAIzE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,OAAO,GAClB,UAAU,IAAI,cAAc,CAW9B;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,kBAAkB,EAAE,OAAO,GAC1B,kBAAkB,IAAI,+BAA+B,CAUvD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,kBAczD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,GAAG,SAAS,WAKpE"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,EAAE,KAAK,+BAA+B,EAAE,MAAM,2BAA2B,CAAA;AAChF,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAA;AAIzE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,OAAO,GAClB,UAAU,IAAI,cAAc,CAW9B;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAC7C,kBAAkB,EAAE,OAAO,GAC1B,kBAAkB,IAAI,+BAA+B,CAUvD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,+BAA+B,GAAG,SAAS,GACjD,MAAM,EAAE,CAMV;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,cAAc,kBAczD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,cAAc,GAAG,SAAS,WAKpE"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,EAAE,EAAE,KAAK,aAAa,EAAyB,MAAM,KAAK,CAAA;AAWxE,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAA;AAElC,OAAO,EAEL,KAAK,eAAe,EAIpB,KAAK,+BAA+B,EAOrC,MAAM,2BAA2B,CAAA;AASlC,OAAO,EAGL,KAAK,kBAAkB,EAIvB,KAAK,cAAc,EAGnB,KAAK,IAAI,EACT,KAAK,IAAI,EAET,KAAK,MAAM,EAGX,KAAK,OAAO,EACb,MAAM,qCAAqC,CAAA;AA2C5C,eAAO,MAAM,mBAAmB,GAC9B,OAAO,MAAM,EACb,SAAS,aAAa,CAAC,+BAA+B,CAAC,iCAqCxD,CAAA;AA6ND,eAAO,MAAM,qBAAqB,uCAyD9B,CAAA;AAoDJ,eAAO,MAAM,wBAAwB,0CAwBU,CAAA;AAE/C,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,SAAS,aAAa,CAAC,MAAM,CAAC,iCAW/B,CAAA;AAED,eAAO,MAAM,eAAe,oCA6MZ,CAAA;AAEhB,eAAO,MAAM,iBAAiB,oCAciB,CAAA;AAE/C,eAAO,MAAM,wBAAwB,oCASsB,CAAA;AAE3D,eAAO,MAAM,yBAAyB,oCAMpC,CAAA;AAEF,eAAO,MAAM,sBAAsB,oCAWjC,CAAA;AAuDF,eAAO,MAAM,gBAAgB,8BASzB,CAAA;AAyCJ,eAAO,MAAM,0BAA0B,sEAWmB,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,UAAU,4BAmDnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAuCiB,CAAA;AAE1C,eAAO,MAAM,mBAAmB,4BAgBkB,CAAA;AAwDlD,eAAO,MAAM,UAAU,4BA8CnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAIiB,CAAA;AAE1C;;GAEG;AACH,eAAO,MAAM,gBAAgB,+BAIgB,CAAA;AA+C7C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,sCA+F7B,CAAA;AAEJ,eAAO,MAAM,sBAAsB,sCAyDY,CAAA;AAE/C,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,yCAAyC,CAAA;AAIhD,eAAO,MAAM,MAAM,sCAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/form/form-definition/index.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,EAAE,EAAE,KAAK,aAAa,EAAyB,MAAM,KAAK,CAAA;AAWxE,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAA;AAMlC,OAAO,EAEL,KAAK,eAAe,EAIpB,KAAK,+BAA+B,EAOrC,MAAM,2BAA2B,CAAA;AASlC,OAAO,EAGL,KAAK,kBAAkB,EAIvB,KAAK,cAAc,EAGnB,KAAK,IAAI,EACT,KAAK,IAAI,EAET,KAAK,MAAM,EAGX,KAAK,OAAO,EACb,MAAM,qCAAqC,CAAA;AA2C5C,eAAO,MAAM,mBAAmB,GAC9B,OAAO,MAAM,EACb,SAAS,aAAa,CAAC,+BAA+B,CAAC,iCA0CxD,CAAA;AAmOD,eAAO,MAAM,qBAAqB,uCAyD9B,CAAA;AAoDJ,eAAO,MAAM,wBAAwB,0CAwBU,CAAA;AAE/C,eAAO,MAAM,oBAAoB,GAC/B,OAAO,MAAM,EACb,SAAS,aAAa,CAAC,MAAM,CAAC,iCAW/B,CAAA;AAED,eAAO,MAAM,eAAe,oCA6MZ,CAAA;AAEhB,eAAO,MAAM,iBAAiB,oCAciB,CAAA;AAE/C,eAAO,MAAM,wBAAwB,oCASsB,CAAA;AAE3D,eAAO,MAAM,yBAAyB,oCAMpC,CAAA;AAEF,eAAO,MAAM,sBAAsB,oCAWjC,CAAA;AAuDF,eAAO,MAAM,gBAAgB,8BASzB,CAAA;AAyCJ,eAAO,MAAM,0BAA0B,sEAWmB,CAAA;AAE1D;;;GAGG;AACH,eAAO,MAAM,UAAU,4BAmDnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAuCiB,CAAA;AAE1C,eAAO,MAAM,mBAAmB,4BAgBkB,CAAA;AAwDlD,eAAO,MAAM,UAAU,4BA8CnB,CAAA;AAEJ;;GAEG;AACH,eAAO,MAAM,YAAY,4BAIiB,CAAA;AAE1C;;GAEG;AACH,eAAO,MAAM,gBAAgB,+BAIgB,CAAA;AA+C7C;;;GAGG;AACH,eAAO,MAAM,oBAAoB,sCA+F7B,CAAA;AAEJ,eAAO,MAAM,sBAAsB,sCAyDY,CAAA;AAE/C,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC3B,MAAM,yCAAyC,CAAA;AAIhD,eAAO,MAAM,MAAM,sCAAuB,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/forms-model",
3
- "version": "3.0.685",
3
+ "version": "3.0.686",
4
4
  "description": "A hapi plugin providing the model for Defra forms",
5
5
  "homepage": "https://github.com/DEFRA/forms-designer/tree/main/model#readme",
6
6
  "types": "dist/types/index.d.ts",
@@ -1,12 +1,15 @@
1
1
  import { ComponentType } from '~/src/components/enums.js'
2
+ import { isConditionalType } from '~/src/components/helpers.js'
3
+ import { type ComponentDef } from '~/src/components/types.js'
2
4
  import {
3
- type ComponentDef,
4
- type ConditionalComponentType
5
- } from '~/src/components/types.js'
6
- import { ConditionType, type Coordinator } from '~/src/conditions/enums.js'
5
+ ConditionType,
6
+ Coordinator,
7
+ OperatorName
8
+ } from '~/src/conditions/enums.js'
7
9
  import {
8
10
  type ConditionData,
9
11
  type ConditionDataV2,
12
+ type ConditionGroupData,
10
13
  type ConditionListItemRefValueDataV2,
11
14
  type ConditionRefData,
12
15
  type ConditionRefDataV2,
@@ -14,6 +17,7 @@ import {
14
17
  type RelativeDateValueData,
15
18
  type RelativeDateValueDataV2
16
19
  } from '~/src/conditions/types.js'
20
+ import { getConditionListItemIds } from '~/src/form/form-definition/helpers.js'
17
21
  import {
18
22
  type ConditionWrapper,
19
23
  type ConditionWrapperV2,
@@ -57,29 +61,97 @@ function getListItem(model: RuntimeFormModel, listId: string, itemId: string) {
57
61
  const foundList = model.getListById(listId)
58
62
 
59
63
  if (!foundList) {
60
- throw Error(`List ${listId} not found`)
64
+ throw new Error(`List ${listId} not found`)
61
65
  }
62
66
 
63
67
  const item = foundList.items.find((item) => item.id === itemId)
64
68
 
65
69
  if (!item) {
66
- throw Error(`List item ${itemId} not found`)
70
+ throw new Error(`List item ${itemId} not found`)
67
71
  }
68
72
 
69
73
  return item
70
74
  }
71
75
 
72
- function createConditionValueDataFromListItemRefV2(
76
+ function createConditionValueDataListFromListItemRefV2(
73
77
  condition: ConditionDataV2,
74
78
  model: RuntimeFormModel
75
- ): ConditionValueData {
79
+ ): ConditionValueData[] {
76
80
  const value = condition.value as ConditionListItemRefValueDataV2
77
- const refValue = getListItem(model, value.listId, value.itemId)
81
+ const itemIds = getConditionListItemIds(value)
82
+
83
+ return itemIds.map((itemId) => {
84
+ const refValue = getListItem(model, value.listId, itemId)
85
+
86
+ return {
87
+ display: refValue.text,
88
+ type: ConditionType.Value,
89
+ value: refValue.value.toString()
90
+ }
91
+ })
92
+ }
93
+
94
+ /**
95
+ * Determine how multiple selected list items are combined within a single
96
+ * V2 condition once expanded into individual V1 conditions.
97
+ * - Checkbox questions use the author-chosen coordinator (default OR).
98
+ * - Single-answer questions (radio/autocomplete/select) combine with OR for a
99
+ * positive match and AND for a negative ("is not any of these") match.
100
+ */
101
+ function getListItemsInnerCoordinator(
102
+ componentType: ComponentDef['type'],
103
+ operator: OperatorName,
104
+ itemsCoordinator: Coordinator | undefined
105
+ ): Coordinator {
106
+ if (componentType === ComponentType.CheckboxesField) {
107
+ return itemsCoordinator ?? Coordinator.OR
108
+ }
109
+
110
+ return operator === OperatorName.IsNot ? Coordinator.AND : Coordinator.OR
111
+ }
112
+
113
+ /**
114
+ * Convert a V2 list item ref condition to V1. A single selected item produces
115
+ * a single condition (unchanged from legacy behaviour); multiple selected
116
+ * items produce a nested condition group so they are correctly parenthesised
117
+ * relative to sibling conditions.
118
+ */
119
+ function convertListItemRefConditionV2(
120
+ model: RuntimeFormModel,
121
+ condition: ConditionDataV2,
122
+ component: ComponentDef,
123
+ field: ConditionData['field'],
124
+ coordinator: Coordinator | undefined
125
+ ): ConditionData | ConditionGroupData {
126
+ const value = condition.value as ConditionListItemRefValueDataV2
127
+ const values = createConditionValueDataListFromListItemRefV2(condition, model)
128
+
129
+ if (!values.length) {
130
+ throw new Error('List item ref condition has no selected items')
131
+ }
132
+
133
+ if (values.length === 1) {
134
+ return {
135
+ field,
136
+ operator: condition.operator,
137
+ value: values[0],
138
+ coordinator
139
+ }
140
+ }
141
+
142
+ const innerCoordinator = getListItemsInnerCoordinator(
143
+ component.type,
144
+ condition.operator,
145
+ value.itemsCoordinator
146
+ )
78
147
 
79
148
  return {
80
- display: refValue.text,
81
- type: ConditionType.Value,
82
- value: refValue.value.toString()
149
+ conditions: values.map((itemValue, index) => ({
150
+ field,
151
+ operator: condition.operator,
152
+ value: itemValue,
153
+ coordinator: index === 0 ? coordinator : innerCoordinator
154
+ }))
83
155
  }
84
156
  }
85
157
 
@@ -157,17 +229,35 @@ function convertConditionDataV2(
157
229
  model: RuntimeFormModel,
158
230
  condition: ConditionDataV2,
159
231
  coordinator: Coordinator | undefined
160
- ): ConditionData {
232
+ ): ConditionData | ConditionGroupData {
161
233
  const component = model.getComponentById(condition.componentId)
162
234
 
163
235
  if (!component) {
164
- throw Error('Component not found')
236
+ throw new Error('Component not found')
237
+ }
238
+
239
+ if (!isConditionalType(component.type)) {
240
+ throw new Error(`Component ${component.name} does not support conditions`)
241
+ }
242
+
243
+ const field = {
244
+ name: component.name,
245
+ type: component.type,
246
+ display: component.title
165
247
  }
166
248
 
167
- let newValue
168
249
  if (isConditionListItemRefValueDataV2(condition)) {
169
- newValue = createConditionValueDataFromListItemRefV2(condition, model)
170
- } else if (isConditionStringValueDataV2(condition)) {
250
+ return convertListItemRefConditionV2(
251
+ model,
252
+ condition,
253
+ component,
254
+ field,
255
+ coordinator
256
+ )
257
+ }
258
+
259
+ let newValue
260
+ if (isConditionStringValueDataV2(condition)) {
171
261
  newValue = createConditionValueDataFromStringValueDataV2(condition)
172
262
  } else if (isConditionBooleanValueDataV2(condition)) {
173
263
  newValue =
@@ -181,15 +271,11 @@ function convertConditionDataV2(
181
271
  } else if (isConditionRelativeDateValueDataV2(condition)) {
182
272
  newValue = createConditionValueDataFromRelativeDateValueDataV2(condition)
183
273
  } else {
184
- throw Error('Unsupported condition type')
274
+ throw new Error('Unsupported condition type')
185
275
  }
186
276
 
187
277
  return {
188
- field: {
189
- name: component.name,
190
- type: component.type as ConditionalComponentType /** @todo fix this */,
191
- display: component.title
192
- },
278
+ field,
193
279
  operator: condition.operator,
194
280
  value: newValue,
195
281
  coordinator
@@ -204,7 +290,7 @@ function convertConditionRefDataFromV2(
204
290
  const refCondition = model.getConditionById(condition.conditionId)
205
291
 
206
292
  if (!refCondition) {
207
- throw Error('Component not found')
293
+ throw new Error('Component not found')
208
294
  }
209
295
 
210
296
  return {
@@ -244,7 +330,7 @@ export function convertConditionWrapperFromV2(
244
330
  value: {
245
331
  name: conditionWrapper.id,
246
332
  conditions: conditionWrapper.items.map((condition, index) => {
247
- let newCondition: ConditionData | ConditionRefData
333
+ let newCondition: ConditionData | ConditionRefData | ConditionGroupData
248
334
 
249
335
  if (isConditionDataV2(condition)) {
250
336
  newCondition = convertConditionDataV2(
@@ -26,7 +26,19 @@ export interface RelativeDateValueData {
26
26
 
27
27
  export interface ConditionListItemRefValueDataV2 {
28
28
  listId: string
29
- itemId: string
29
+ /**
30
+ * One or more referenced list item ids (radio, checkbox, autocomplete,
31
+ * select). New conditions are always written as an array, even for a single
32
+ * selection. A bare `string` is only retained for backwards compatibility so
33
+ * conditions saved before multi-select support continue to load, display and
34
+ * evaluate.
35
+ */
36
+ itemId: string[] | string
37
+ /**
38
+ * How multiple checkbox selections are combined (AND/OR). Only set for
39
+ * checkbox questions; radio/autocomplete/select combine implicitly.
40
+ */
41
+ itemsCoordinator?: Coordinator
30
42
  }
31
43
 
32
44
  export interface RelativeDateValueDataV2 {
@@ -44,6 +44,23 @@ export function isConditionListItemRefValueData(
44
44
  )
45
45
  }
46
46
 
47
+ /**
48
+ * Normalises a list item ref condition value to an array of item ids. `itemId`
49
+ * is normally an array, but may be a bare string for legacy conditions saved
50
+ * before multi-select support.
51
+ * @param { ConditionListItemRefValueDataV2 | undefined } value
52
+ * @returns { string[] }
53
+ */
54
+ export function getConditionListItemIds(
55
+ value: ConditionListItemRefValueDataV2 | undefined
56
+ ): string[] {
57
+ if (!value?.itemId) {
58
+ return []
59
+ }
60
+
61
+ return Array.isArray(value.itemId) ? value.itemId : [value.itemId]
62
+ }
63
+
47
64
  /**
48
65
  * Returns an array of all hidden fields in a form
49
66
  * @param definition - form definition
@@ -15,7 +15,11 @@ import {
15
15
  type ContentComponentsDef,
16
16
  type FileUploadFieldComponent
17
17
  } from '~/src/components/types.js'
18
- import { ConditionType, OperatorName } from '~/src/conditions/enums.js'
18
+ import {
19
+ ConditionType,
20
+ Coordinator,
21
+ OperatorName
22
+ } from '~/src/conditions/enums.js'
19
23
  import {
20
24
  type ConditionData,
21
25
  type ConditionDataV2,
@@ -112,7 +116,12 @@ export const listItemIdValidator = (
112
116
  return value
113
117
  }
114
118
 
115
- const conditionValue = helpers.state.ancestors[0]
119
+ // `itemId` is normally an array, so the condition value is one level up from
120
+ // each entry being validated. For a legacy bare-string `itemId` it is the
121
+ // nearest ancestor instead, so locate it by shape rather than fixed position.
122
+ const conditionValue = helpers.state.ancestors.find(
123
+ isConditionListItemRefValueData
124
+ )
116
125
 
117
126
  if (!isConditionListItemRefValueData(conditionValue)) {
118
127
  return value
@@ -254,11 +263,17 @@ const conditionListItemRefDataSchemaV2 =
254
263
  })
255
264
  .description('The id of the list')
256
265
  .error(checkErrors(FormDefinitionError.RefConditionListId)),
257
- itemId: Joi.string()
258
- .trim()
266
+ itemId: Joi.array()
267
+ .single()
268
+ .items(Joi.string().trim().custom(listItemIdValidator))
269
+ .min(1)
259
270
  .required()
260
- .description('The id of the list item')
261
- .custom(listItemIdValidator)
271
+ .description('The ids of the selected list items.'),
272
+ itemsCoordinator: Joi.string()
273
+ .trim()
274
+ .valid(...Object.values(Coordinator))
275
+ .optional()
276
+ .description('How multiple checkbox selections are combined (and/or)')
262
277
  })
263
278
 
264
279
  const relativeDateValueDataSchemaV2 = Joi.object<RelativeDateValueDataV2>()