@defra/forms-model 3.0.500 → 3.0.502
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module/conditions/migration.js +2 -2
- package/dist/module/conditions/migration.js.map +1 -1
- package/dist/module/form/form-editor/__stubs__/preview.js +7 -1
- package/dist/module/form/form-editor/__stubs__/preview.js.map +1 -1
- package/dist/module/form/form-editor/macros/types.js.map +1 -1
- package/dist/module/form/form-editor/preview/controller/page-controller.js +121 -6
- package/dist/module/form/form-editor/preview/controller/page-controller.js.map +1 -1
- package/dist/module/form/form-editor/preview/types.js.map +1 -1
- package/dist/types/form/form-editor/__stubs__/preview.d.ts +5 -1
- package/dist/types/form/form-editor/__stubs__/preview.d.ts.map +1 -1
- package/dist/types/form/form-editor/macros/types.d.ts +8 -0
- package/dist/types/form/form-editor/macros/types.d.ts.map +1 -1
- package/dist/types/form/form-editor/preview/controller/page-controller.d.ts +46 -4
- package/dist/types/form/form-editor/preview/controller/page-controller.d.ts.map +1 -1
- package/dist/types/form/form-editor/preview/types.d.ts +2 -0
- package/dist/types/form/form-editor/preview/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/conditions/migration.ts +2 -2
- package/src/form/form-editor/__stubs__/preview.js +13 -1
- package/src/form/form-editor/macros/types.ts +8 -0
- package/src/form/form-editor/preview/controller/page-controller.js +132 -6
- package/src/form/form-editor/preview/types.ts +2 -0
@@ -20,11 +20,11 @@ export function isConditionRelativeDateValueDataV2(condition) {
|
|
20
20
|
function getListItem(model, listId, itemId) {
|
21
21
|
const foundList = model.getListById(listId);
|
22
22
|
if (!foundList) {
|
23
|
-
throw Error(
|
23
|
+
throw Error(`List ${listId} not found`);
|
24
24
|
}
|
25
25
|
const item = foundList.items.find(item => item.id === itemId);
|
26
26
|
if (!item) {
|
27
|
-
throw Error(
|
27
|
+
throw Error(`List item ${itemId} not found`);
|
28
28
|
}
|
29
29
|
return item;
|
30
30
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"migration.js","names":["ConditionType","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","isConditionDataV2","convertConditionDataV2","coordinator","component","getComponentById","componentId","newValue","field","name","title","operator","convertConditionRefDataFromV2","refCondition","getConditionById","conditionId","conditionName","displayName","conditionDisplayName","isConditionWrapperV2","wrapper","Array","isArray","isConditionWrapper","convertConditionWrapperFromV2","conditionWrapper","length","newConditionWrapper","conditions","map","index","newCondition","undefined"],"sources":["../../../src/conditions/migration.ts"],"sourcesContent":["import {\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\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 not found')\n }\n\n const item = foundList.items.find((item) => item.id === itemId)\n\n if (!item) {\n throw Error('List item 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 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 = 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: refCondition.displayName,\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":["ConditionType","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","isConditionDataV2","convertConditionDataV2","coordinator","component","getComponentById","componentId","newValue","field","name","title","operator","convertConditionRefDataFromV2","refCondition","getConditionById","conditionId","conditionName","displayName","conditionDisplayName","isConditionWrapperV2","wrapper","Array","isArray","isConditionWrapper","convertConditionWrapperFromV2","conditionWrapper","length","newConditionWrapper","conditions","map","index","newCondition","undefined"],"sources":["../../../src/conditions/migration.ts"],"sourcesContent":["import {\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\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 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 = 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: refCondition.displayName,\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":[]}
|
@@ -169,16 +169,22 @@ export class PagePreviewElements {
|
|
169
169
|
guidance;
|
170
170
|
heading;
|
171
171
|
addHeading;
|
172
|
+
repeatQuestion;
|
173
|
+
hasRepeater;
|
172
174
|
|
173
175
|
/**
|
174
176
|
* @param {string} heading
|
175
177
|
* @param {string} guidance
|
176
178
|
* @param {boolean} [addHeading]
|
179
|
+
* @param {string} repeatQuestion
|
180
|
+
* @param {boolean} hasRepeater
|
177
181
|
*/
|
178
|
-
constructor(heading, guidance = '', addHeading = undefined) {
|
182
|
+
constructor(heading, guidance = '', addHeading = undefined, repeatQuestion = '', hasRepeater = false) {
|
179
183
|
this.heading = heading;
|
180
184
|
this.guidance = guidance;
|
181
185
|
this.addHeading = addHeading ?? heading.length > 0;
|
186
|
+
this.repeatQuestion = repeatQuestion;
|
187
|
+
this.hasRepeater = hasRepeater;
|
182
188
|
}
|
183
189
|
}
|
184
190
|
export const baseElements = /** @type {BaseSettings} */{
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"preview.js","names":["Question","QuestionRendererStub","renderMock","constructor","render","questionTemplate","questionBaseModel","buildHTML","_questionTemplate","_renderContext","PageRendererStub","pageTemplate","pagePreviewPanelMacro","QuestionPreviewElements","_question","_hintText","_optional","_shortDesc","_content","_items","afterInputsHTML","question","hintText","optional","shortDesc","items","content","values","setPreviewHTML","_value","setPreviewDOM","AutocompletePreviewElements","autocompleteOptions","elements","PagePreviewElements","guidance","heading","addHeading","undefined","length","baseElements","largeTitle","list1Id","list2Id","list3Id","list4Id","listElementsBase","label","text","value","id","listElementsStub","buildPreviewShortAnswer","partialBaseElements"],"sources":["../../../../../src/form/form-editor/__stubs__/preview.js"],"sourcesContent":["import { Question } from '~/src/form/form-editor/preview/question.js'\n\n/**\n * @implements {QuestionRenderer}\n */\nexport class QuestionRendererStub {\n /**\n * @type {jest.Mock<void, [string, QuestionBaseModel]>}\n */\n renderMock\n\n /**\n * @param {jest.Mock<void, [string, QuestionBaseModel]>} renderMock\n */\n constructor(renderMock) {\n this.renderMock = renderMock\n }\n\n /**\n * @param {string} questionTemplate\n * @param {QuestionBaseModel} questionBaseModel\n */\n render(questionTemplate, questionBaseModel) {\n this.renderMock(questionTemplate, questionBaseModel)\n }\n\n /**\n * @returns {string}\n * @param {string} _questionTemplate\n * @param {RenderContext} _renderContext\n */\n static buildHTML(_questionTemplate, _renderContext) {\n return '**** BUILT HTML ****'\n }\n}\n\n/**\n * @implements {PageRenderer}\n */\nexport class PageRendererStub {\n /**\n * @type {jest.Mock<void, [string, PagePreviewPanelMacro]>}\n */\n renderMock\n\n /**\n * @param {jest.Mock<void, [string, PagePreviewPanelMacro]>} renderMock\n */\n constructor(renderMock) {\n this.renderMock = renderMock\n }\n\n /**\n * @param {string} pageTemplate\n * @param {PagePreviewPanelMacro} pagePreviewPanelMacro\n */\n render(pageTemplate, pagePreviewPanelMacro) {\n this.renderMock(pageTemplate, pagePreviewPanelMacro)\n }\n\n /**\n * @returns {string}\n * @param {string} _questionTemplate\n * @param {RenderContext} _renderContext\n */\n static buildHTML(_questionTemplate, _renderContext) {\n return '**** BUILT HTML ****'\n }\n}\n\n/**\n * @implements {ListElements}\n */\nexport class QuestionPreviewElements {\n /**\n * @protected\n */\n _question = ''\n /** @protected */\n _hintText = ''\n /** @protected */\n _optional = false\n /**\n * @type {string}\n * @protected\n */\n _shortDesc = ''\n /**\n * @type {string}\n * @protected\n */\n _content = ''\n /**\n *\n * @type {ListElement[]}\n * @private\n */\n _items = []\n afterInputsHTML = '<div class=\"govuk-inset-text\">No items added yet.</div>'\n\n /**\n * @param {BaseSettings} baseSettings\n */\n constructor({ question, hintText, optional, shortDesc, items, content }) {\n this._question = question\n this._hintText = hintText\n this._optional = optional\n this._shortDesc = shortDesc\n this._items = items\n this._content = content\n }\n\n /**\n * @returns {BaseSettings}\n */\n get values() {\n return {\n question: this._question,\n hintText: this._hintText,\n optional: this._optional,\n shortDesc: this._shortDesc,\n items: this._items,\n content: this._content\n }\n }\n\n /**\n * @param {string} _value\n */\n setPreviewHTML(_value) {\n // Not implemented for server side render\n }\n\n /**\n * @param {HTMLElement} _value\n */\n setPreviewDOM(_value) {\n // Not implemented for server side render\n }\n}\n\n/**\n * @implements {AutocompleteElements}\n */\nexport class AutocompletePreviewElements extends QuestionPreviewElements {\n /**\n * @param {BaseSettings & {autocompleteOptions: string}} elements\n */\n constructor({ autocompleteOptions, ...elements }) {\n super(elements)\n this.autocompleteOptions = autocompleteOptions\n }\n}\n\n/**\n * @implements {PageOverviewElements}\n */\nexport class PagePreviewElements {\n guidance\n heading\n addHeading\n\n /**\n * @param {string} heading\n * @param {string} guidance\n * @param {boolean} [addHeading]\n */\n constructor(heading, guidance = '', addHeading = undefined) {\n this.heading = heading\n this.guidance = guidance\n this.addHeading = addHeading ?? heading.length > 0\n }\n}\n\nexport const baseElements = /** @type {BaseSettings} */ ({\n items: [],\n optional: false,\n question: 'Which quest would you like to pick?',\n hintText: 'Choose one adventure that best suits you.',\n shortDesc: '',\n content: '',\n largeTitle: true\n})\n\nconst list1Id = '414d82a3-4cab-416a-bd54-6b86fbd51120'\nconst list2Id = '801385a4-81e6-4171-96c3-6c6727d97f22'\nconst list3Id = 'e6e3f621-b875-4ca3-a054-cca9149149dd'\nconst list4Id = 'd71b3909-582f-4e90-b6f5-490b89a6eb8f'\n\nconst listElementsBase = /** @type {BaseSettings} */ ({\n ...baseElements,\n items: [\n {\n label: { text: 'Treasure Hunting' },\n text: 'Treasure Hunting',\n value: 'Treasure Hunting',\n id: list1Id\n },\n {\n label: { text: 'Rescuing the princess' },\n text: 'Rescuing the princess',\n value: 'Rescuing the princess',\n id: list2Id\n },\n {\n label: { text: 'Saving a city' },\n text: 'Saving a city',\n value: 'Saving a city',\n id: list3Id\n },\n {\n label: { text: 'Defeating the baron' },\n text: 'Defeating the baron',\n value: 'Defeating the baron',\n id: list4Id\n }\n ]\n})\n\nexport const listElementsStub = {\n list1Id,\n list2Id,\n list3Id,\n list4Id,\n baseElements: listElementsBase\n}\n\n/**\n * @param {Partial<BaseSettings>} partialBaseElements\n * @param {jest.Mock<void, [string, QuestionBaseModel]>} renderMock\n * @returns {Question}\n */\nexport function buildPreviewShortAnswer(partialBaseElements, renderMock) {\n return new Question(\n new QuestionPreviewElements({\n ...baseElements,\n ...partialBaseElements\n }),\n new QuestionRendererStub(renderMock)\n )\n}\n\n/**\n * @import { ListElement } from '~/src/form/form-editor/types.js'\n * @import { PagePreviewPanelMacro } from '~/src/form/form-editor/macros/types.js'\n * @import { BaseSettings, ListElements, RenderContext, QuestionBaseModel, QuestionElements, QuestionRenderer, AutocompleteElements, PageOverviewElements, PageRenderer } from '~/src/form/form-editor/preview/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"preview.js","names":["Question","QuestionRendererStub","renderMock","constructor","render","questionTemplate","questionBaseModel","buildHTML","_questionTemplate","_renderContext","PageRendererStub","pageTemplate","pagePreviewPanelMacro","QuestionPreviewElements","_question","_hintText","_optional","_shortDesc","_content","_items","afterInputsHTML","question","hintText","optional","shortDesc","items","content","values","setPreviewHTML","_value","setPreviewDOM","AutocompletePreviewElements","autocompleteOptions","elements","PagePreviewElements","guidance","heading","addHeading","repeatQuestion","hasRepeater","undefined","length","baseElements","largeTitle","list1Id","list2Id","list3Id","list4Id","listElementsBase","label","text","value","id","listElementsStub","buildPreviewShortAnswer","partialBaseElements"],"sources":["../../../../../src/form/form-editor/__stubs__/preview.js"],"sourcesContent":["import { Question } from '~/src/form/form-editor/preview/question.js'\n\n/**\n * @implements {QuestionRenderer}\n */\nexport class QuestionRendererStub {\n /**\n * @type {jest.Mock<void, [string, QuestionBaseModel]>}\n */\n renderMock\n\n /**\n * @param {jest.Mock<void, [string, QuestionBaseModel]>} renderMock\n */\n constructor(renderMock) {\n this.renderMock = renderMock\n }\n\n /**\n * @param {string} questionTemplate\n * @param {QuestionBaseModel} questionBaseModel\n */\n render(questionTemplate, questionBaseModel) {\n this.renderMock(questionTemplate, questionBaseModel)\n }\n\n /**\n * @returns {string}\n * @param {string} _questionTemplate\n * @param {RenderContext} _renderContext\n */\n static buildHTML(_questionTemplate, _renderContext) {\n return '**** BUILT HTML ****'\n }\n}\n\n/**\n * @implements {PageRenderer}\n */\nexport class PageRendererStub {\n /**\n * @type {jest.Mock<void, [string, PagePreviewPanelMacro]>}\n */\n renderMock\n\n /**\n * @param {jest.Mock<void, [string, PagePreviewPanelMacro]>} renderMock\n */\n constructor(renderMock) {\n this.renderMock = renderMock\n }\n\n /**\n * @param {string} pageTemplate\n * @param {PagePreviewPanelMacro} pagePreviewPanelMacro\n */\n render(pageTemplate, pagePreviewPanelMacro) {\n this.renderMock(pageTemplate, pagePreviewPanelMacro)\n }\n\n /**\n * @returns {string}\n * @param {string} _questionTemplate\n * @param {RenderContext} _renderContext\n */\n static buildHTML(_questionTemplate, _renderContext) {\n return '**** BUILT HTML ****'\n }\n}\n\n/**\n * @implements {ListElements}\n */\nexport class QuestionPreviewElements {\n /**\n * @protected\n */\n _question = ''\n /** @protected */\n _hintText = ''\n /** @protected */\n _optional = false\n /**\n * @type {string}\n * @protected\n */\n _shortDesc = ''\n /**\n * @type {string}\n * @protected\n */\n _content = ''\n /**\n *\n * @type {ListElement[]}\n * @private\n */\n _items = []\n afterInputsHTML = '<div class=\"govuk-inset-text\">No items added yet.</div>'\n\n /**\n * @param {BaseSettings} baseSettings\n */\n constructor({ question, hintText, optional, shortDesc, items, content }) {\n this._question = question\n this._hintText = hintText\n this._optional = optional\n this._shortDesc = shortDesc\n this._items = items\n this._content = content\n }\n\n /**\n * @returns {BaseSettings}\n */\n get values() {\n return {\n question: this._question,\n hintText: this._hintText,\n optional: this._optional,\n shortDesc: this._shortDesc,\n items: this._items,\n content: this._content\n }\n }\n\n /**\n * @param {string} _value\n */\n setPreviewHTML(_value) {\n // Not implemented for server side render\n }\n\n /**\n * @param {HTMLElement} _value\n */\n setPreviewDOM(_value) {\n // Not implemented for server side render\n }\n}\n\n/**\n * @implements {AutocompleteElements}\n */\nexport class AutocompletePreviewElements extends QuestionPreviewElements {\n /**\n * @param {BaseSettings & {autocompleteOptions: string}} elements\n */\n constructor({ autocompleteOptions, ...elements }) {\n super(elements)\n this.autocompleteOptions = autocompleteOptions\n }\n}\n\n/**\n * @implements {PageOverviewElements}\n */\nexport class PagePreviewElements {\n guidance\n heading\n addHeading\n repeatQuestion\n hasRepeater\n\n /**\n * @param {string} heading\n * @param {string} guidance\n * @param {boolean} [addHeading]\n * @param {string} repeatQuestion\n * @param {boolean} hasRepeater\n */\n constructor(\n heading,\n guidance = '',\n addHeading = undefined,\n repeatQuestion = '',\n hasRepeater = false\n ) {\n this.heading = heading\n this.guidance = guidance\n this.addHeading = addHeading ?? heading.length > 0\n this.repeatQuestion = repeatQuestion\n this.hasRepeater = hasRepeater\n }\n}\n\nexport const baseElements = /** @type {BaseSettings} */ ({\n items: [],\n optional: false,\n question: 'Which quest would you like to pick?',\n hintText: 'Choose one adventure that best suits you.',\n shortDesc: '',\n content: '',\n largeTitle: true\n})\n\nconst list1Id = '414d82a3-4cab-416a-bd54-6b86fbd51120'\nconst list2Id = '801385a4-81e6-4171-96c3-6c6727d97f22'\nconst list3Id = 'e6e3f621-b875-4ca3-a054-cca9149149dd'\nconst list4Id = 'd71b3909-582f-4e90-b6f5-490b89a6eb8f'\n\nconst listElementsBase = /** @type {BaseSettings} */ ({\n ...baseElements,\n items: [\n {\n label: { text: 'Treasure Hunting' },\n text: 'Treasure Hunting',\n value: 'Treasure Hunting',\n id: list1Id\n },\n {\n label: { text: 'Rescuing the princess' },\n text: 'Rescuing the princess',\n value: 'Rescuing the princess',\n id: list2Id\n },\n {\n label: { text: 'Saving a city' },\n text: 'Saving a city',\n value: 'Saving a city',\n id: list3Id\n },\n {\n label: { text: 'Defeating the baron' },\n text: 'Defeating the baron',\n value: 'Defeating the baron',\n id: list4Id\n }\n ]\n})\n\nexport const listElementsStub = {\n list1Id,\n list2Id,\n list3Id,\n list4Id,\n baseElements: listElementsBase\n}\n\n/**\n * @param {Partial<BaseSettings>} partialBaseElements\n * @param {jest.Mock<void, [string, QuestionBaseModel]>} renderMock\n * @returns {Question}\n */\nexport function buildPreviewShortAnswer(partialBaseElements, renderMock) {\n return new Question(\n new QuestionPreviewElements({\n ...baseElements,\n ...partialBaseElements\n }),\n new QuestionRendererStub(renderMock)\n )\n}\n\n/**\n * @import { ListElement } from '~/src/form/form-editor/types.js'\n * @import { PagePreviewPanelMacro } from '~/src/form/form-editor/macros/types.js'\n * @import { BaseSettings, ListElements, RenderContext, QuestionBaseModel, QuestionElements, QuestionRenderer, AutocompleteElements, PageOverviewElements, PageRenderer } from '~/src/form/form-editor/preview/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/form/form-editor/macros/types.ts"],"sourcesContent":["import { type ComponentType } from '~/src/components/enums.js'\nimport {\n type DateItem,\n type GovukField,\n type ListItemReadonly\n} from '~/src/form/form-editor/types.js'\nimport { type DefaultComponent, type GovukFieldset } from '~/src/index.js'\n\nexport interface AppPreviewErrorPanelMacroErrorTemplate {\n advancedSettingsErrors: []\n baseErrors: { template: unknown; type: string }[]\n}\n\nexport interface AppPreviewErrorPanelMacro {\n errorTemplates: AppPreviewErrorPanelMacroErrorTemplate\n fieldDetails: {\n extraFields: GovukField[]\n basePageFields: GovukField[]\n }\n questionType: ComponentType\n}\n\nexport interface AppPreviewPanelTabsMacro {\n questionType: ComponentType\n previewPageUrl: string\n previewErrorsUrl: string\n errorTemplates: AppPreviewErrorPanelMacroErrorTemplate\n extraFields: GovukField[]\n basePageFields: GovukField[]\n}\n\nexport interface SelectAfterInput {\n afterInput: { html: string }\n}\nexport interface RadioAndCheckboxAfterInputs {\n afterInputs: { html: string }\n}\n\n// GDS components - Select uses afterInput, while Radio uses afterInputs\nexport type FormGroupAfterInput = SelectAfterInput | RadioAndCheckboxAfterInputs\n\nexport interface QuestionBaseModel {\n id?: string\n name?: string\n content?: string\n attributes?: Record<string, string>\n label?: DefaultComponent\n hint?: DefaultComponent\n fieldset?: GovukFieldset\n readonly items?: ListItemReadonly[] | DateItem[]\n text?: string\n formGroup?: FormGroupAfterInput\n type?: 'text' | 'number' | 'boolean'\n classes?: string\n}\n\nexport interface AppPreviewPanelMacro extends AppPreviewPanelTabsMacro {\n model: QuestionBaseModel\n}\n\nexport interface PagePreviewComponent {\n model: QuestionBaseModel\n questionType: ComponentType\n}\n\nexport interface PagePreviewPanelMacro {\n readonly pageTitle: {\n text: string\n classes: string\n }\n readonly guidance: {\n text: string\n classes: string\n }\n readonly components: PagePreviewComponent[]\n}\n"],"mappings":"","ignoreList":[]}
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/form/form-editor/macros/types.ts"],"sourcesContent":["import { type ComponentType } from '~/src/components/enums.js'\nimport {\n type DateItem,\n type GovukField,\n type ListItemReadonly\n} from '~/src/form/form-editor/types.js'\nimport { type DefaultComponent, type GovukFieldset } from '~/src/index.js'\n\nexport interface AppPreviewErrorPanelMacroErrorTemplate {\n advancedSettingsErrors: []\n baseErrors: { template: unknown; type: string }[]\n}\n\nexport interface AppPreviewErrorPanelMacro {\n errorTemplates: AppPreviewErrorPanelMacroErrorTemplate\n fieldDetails: {\n extraFields: GovukField[]\n basePageFields: GovukField[]\n }\n questionType: ComponentType\n}\n\nexport interface AppPreviewPanelTabsMacro {\n questionType: ComponentType\n previewPageUrl: string\n previewErrorsUrl: string\n errorTemplates: AppPreviewErrorPanelMacroErrorTemplate\n extraFields: GovukField[]\n basePageFields: GovukField[]\n}\n\nexport interface SelectAfterInput {\n afterInput: { html: string }\n}\nexport interface RadioAndCheckboxAfterInputs {\n afterInputs: { html: string }\n}\n\n// GDS components - Select uses afterInput, while Radio uses afterInputs\nexport type FormGroupAfterInput = SelectAfterInput | RadioAndCheckboxAfterInputs\n\nexport interface QuestionBaseModel {\n id?: string\n name?: string\n content?: string\n attributes?: Record<string, string>\n label?: DefaultComponent\n hint?: DefaultComponent\n fieldset?: GovukFieldset\n readonly items?: ListItemReadonly[] | DateItem[]\n text?: string\n formGroup?: FormGroupAfterInput\n type?: 'text' | 'number' | 'boolean'\n classes?: string\n}\n\nexport interface AppPreviewPanelMacro extends AppPreviewPanelTabsMacro {\n model: QuestionBaseModel\n}\n\nexport interface PagePreviewComponent {\n model: QuestionBaseModel\n questionType: ComponentType\n}\n\nexport interface PagePreviewPanelMacro {\n readonly pageTitle: {\n text: string\n classes: string\n }\n readonly guidance: {\n text: string\n classes: string\n }\n readonly components: PagePreviewComponent[]\n readonly sectionTitle?: {\n text: string\n classes: string\n }\n readonly repeaterButton?: {\n text: string\n classes: string\n }\n}\n"],"mappings":"","ignoreList":[]}
|
@@ -3,7 +3,9 @@ import { HIGHLIGHT_CLASS } from "../constants.js";
|
|
3
3
|
import { ContentElements } from "../content.js";
|
4
4
|
import { mapComponentToPreviewQuestion } from "../helpers.js";
|
5
5
|
import { Markdown } from "../markdown.js";
|
6
|
+
import { hasRepeater } from "../../../../index.js";
|
6
7
|
import { hasComponents } from "../../../../pages/helpers.js";
|
8
|
+
|
7
9
|
/**
|
8
10
|
* @type {QuestionRenderer}
|
9
11
|
*/
|
@@ -46,8 +48,28 @@ export class PagePreviewElements {
|
|
46
48
|
get addHeading() {
|
47
49
|
return this._page.title.length > 0;
|
48
50
|
}
|
51
|
+
get repeatQuestion() {
|
52
|
+
if (hasRepeater(this._page)) {
|
53
|
+
return this._page.repeat.options.title;
|
54
|
+
}
|
55
|
+
return undefined;
|
56
|
+
}
|
57
|
+
get hasRepeater() {
|
58
|
+
return hasRepeater(this._page);
|
59
|
+
}
|
49
60
|
}
|
50
61
|
|
62
|
+
/**
|
63
|
+
* Enum for Highlight classes
|
64
|
+
* @readonly
|
65
|
+
* @enum {string}
|
66
|
+
*/
|
67
|
+
const HighlightClass = {
|
68
|
+
TITLE: 'title',
|
69
|
+
GUIDANCE: 'guidance',
|
70
|
+
REPEATER: 'repeater'
|
71
|
+
};
|
72
|
+
|
51
73
|
/**
|
52
74
|
* @implements {PagePreviewPanelMacro}
|
53
75
|
*/
|
@@ -73,7 +95,7 @@ export class PreviewPageController {
|
|
73
95
|
*/
|
74
96
|
#pageRenderer;
|
75
97
|
/**
|
76
|
-
* @type { undefined |
|
98
|
+
* @type { undefined | HighlightClass }
|
77
99
|
* @protected
|
78
100
|
*/
|
79
101
|
_highlighted = undefined;
|
@@ -82,6 +104,11 @@ export class PreviewPageController {
|
|
82
104
|
* @private
|
83
105
|
*/
|
84
106
|
_guidanceText = '';
|
107
|
+
/**
|
108
|
+
* @type { string }
|
109
|
+
* @protected
|
110
|
+
*/
|
111
|
+
_sectionTitle = '';
|
85
112
|
/**
|
86
113
|
* @type {Markdown}
|
87
114
|
* @private
|
@@ -98,6 +125,11 @@ export class PreviewPageController {
|
|
98
125
|
* @private
|
99
126
|
*/
|
100
127
|
_showTitle = true;
|
128
|
+
/**
|
129
|
+
* @type {boolean}
|
130
|
+
*/
|
131
|
+
#isRepeater = false;
|
132
|
+
|
101
133
|
/**
|
102
134
|
* @param {ComponentDef[]} components
|
103
135
|
* @param {PageOverviewElements} elements
|
@@ -114,8 +146,15 @@ export class PreviewPageController {
|
|
114
146
|
this._showTitle = elements.addHeading;
|
115
147
|
this.#pageRenderer = renderer;
|
116
148
|
this.#title = elements.heading;
|
149
|
+
this._sectionTitle = elements.repeatQuestion ?? '';
|
150
|
+
this.#isRepeater = elements.hasRepeater;
|
117
151
|
}
|
118
152
|
|
153
|
+
/**
|
154
|
+
* @type {typeof HighlightClass}
|
155
|
+
*/
|
156
|
+
static HighlightClass = HighlightClass;
|
157
|
+
|
119
158
|
/**
|
120
159
|
* @param { Question | Markdown | undefined} firstQuestion
|
121
160
|
* @param {Question[]} questions
|
@@ -221,7 +260,7 @@ export class PreviewPageController {
|
|
221
260
|
get guidance() {
|
222
261
|
return {
|
223
262
|
text: this.guidanceText,
|
224
|
-
classes: this.
|
263
|
+
classes: this.#isHighlighted(HighlightClass.GUIDANCE)
|
225
264
|
};
|
226
265
|
}
|
227
266
|
|
@@ -231,7 +270,7 @@ export class PreviewPageController {
|
|
231
270
|
get pageTitle() {
|
232
271
|
return {
|
233
272
|
text: this.title,
|
234
|
-
classes: this.
|
273
|
+
classes: this.#isHighlighted(HighlightClass.TITLE)
|
235
274
|
};
|
236
275
|
}
|
237
276
|
render() {
|
@@ -266,7 +305,75 @@ export class PreviewPageController {
|
|
266
305
|
this.render();
|
267
306
|
}
|
268
307
|
highlightTitle() {
|
269
|
-
this.setHighLighted(
|
308
|
+
this.setHighLighted(HighlightClass.TITLE);
|
309
|
+
}
|
310
|
+
setRepeater() {
|
311
|
+
this.#isRepeater = true;
|
312
|
+
this.render();
|
313
|
+
}
|
314
|
+
unsetRepeater() {
|
315
|
+
this.#isRepeater = false;
|
316
|
+
this.render();
|
317
|
+
}
|
318
|
+
get isRepeater() {
|
319
|
+
return this.#isRepeater;
|
320
|
+
}
|
321
|
+
|
322
|
+
/**
|
323
|
+
* @returns {{classes: string, text: string} | undefined}
|
324
|
+
*/
|
325
|
+
get sectionTitle() {
|
326
|
+
if (this.sectionTitleText === undefined) {
|
327
|
+
return undefined;
|
328
|
+
}
|
329
|
+
return {
|
330
|
+
classes: this.#isHighlighted(HighlightClass.REPEATER),
|
331
|
+
text: this.sectionTitleText
|
332
|
+
};
|
333
|
+
}
|
334
|
+
get repeaterText() {
|
335
|
+
if (!this.#isRepeater) {
|
336
|
+
return undefined;
|
337
|
+
}
|
338
|
+
if (!this._sectionTitle.length) {
|
339
|
+
return 'Question set name';
|
340
|
+
}
|
341
|
+
return this._sectionTitle + ' 1';
|
342
|
+
}
|
343
|
+
|
344
|
+
/**
|
345
|
+
* @param {string | undefined} val
|
346
|
+
*/
|
347
|
+
set sectionTitleText(val) {
|
348
|
+
this._sectionTitle = val ?? '';
|
349
|
+
this.render();
|
350
|
+
}
|
351
|
+
get sectionTitleText() {
|
352
|
+
if (this.#isRepeater) {
|
353
|
+
return this.repeaterText;
|
354
|
+
}
|
355
|
+
return undefined;
|
356
|
+
}
|
357
|
+
get repeaterButton() {
|
358
|
+
if (this.repeaterButtonText === undefined) {
|
359
|
+
return undefined;
|
360
|
+
}
|
361
|
+
return {
|
362
|
+
classes: this.#isHighlighted(HighlightClass.REPEATER),
|
363
|
+
text: this.repeaterButtonText
|
364
|
+
};
|
365
|
+
}
|
366
|
+
get repeaterButtonText() {
|
367
|
+
if (!this.#isRepeater) {
|
368
|
+
return undefined;
|
369
|
+
}
|
370
|
+
if (this._sectionTitle === '') {
|
371
|
+
return '[question set name]';
|
372
|
+
}
|
373
|
+
const [firstToken, ...rest] = this._sectionTitle;
|
374
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
375
|
+
const restOfStr = rest ? rest.join('') : '';
|
376
|
+
return firstToken.toLowerCase() + restOfStr;
|
270
377
|
}
|
271
378
|
|
272
379
|
/**
|
@@ -303,11 +410,11 @@ export class PreviewPageController {
|
|
303
410
|
}
|
304
411
|
highlightGuidance() {
|
305
412
|
this._guidanceComponent.highlightContent();
|
306
|
-
this.setHighLighted(
|
413
|
+
this.setHighLighted(HighlightClass.GUIDANCE);
|
307
414
|
}
|
308
415
|
|
309
416
|
/**
|
310
|
-
* @param {
|
417
|
+
* @param {HighlightClass} highlightSection
|
311
418
|
*/
|
312
419
|
setHighLighted(highlightSection) {
|
313
420
|
this._highlighted = highlightSection;
|
@@ -318,6 +425,14 @@ export class PreviewPageController {
|
|
318
425
|
this._guidanceComponent.unHighlightContent();
|
319
426
|
this.render();
|
320
427
|
}
|
428
|
+
|
429
|
+
/**
|
430
|
+
* @param {string} field
|
431
|
+
* @returns {string}
|
432
|
+
*/
|
433
|
+
#isHighlighted(field) {
|
434
|
+
return this._highlighted === field ? HIGHLIGHT_CLASS : '';
|
435
|
+
}
|
321
436
|
}
|
322
437
|
|
323
438
|
/**
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"page-controller.js","names":["ComponentType","HIGHLIGHT_CLASS","ContentElements","mapComponentToPreviewQuestion","Markdown","hasComponents","questionRenderer","render","_questionTemplate","_questionBaseModel","PagePreviewElements","_page","constructor","page","heading","title","guidance","components","length","possibleGuidanceComponent","type","content","addHeading","PreviewPageController","PATH","_pageTemplate","_components","pageRenderer","_highlighted","undefined","_guidanceText","_emptyGuidance","createGuidanceComponent","_guidanceComponent","_showTitle","elements","definition","renderer","questions","map","firstQuestion","shift","getOrCreateGuidanceComponent","constructComponents","#constructComponents","_guidanceComponents","componentsWithGuidance","component","model","_overrideComponentHeading","questionType","componentType","showLargeTitle","componentsLength","trim","question","largeTitle","fieldset","renderInput","legend","classes","label","guidanceText","text","showTitle","pageTitle","titleAndFirstTitleSame","value","highlightTitle","setHighLighted","guidanceElement","name","options","guidanceComponent","highlightContent","highlightGuidance","highlightSection","clearHighlight","unHighlightContent"],"sources":["../../../../../../src/form/form-editor/preview/controller/page-controller.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { HIGHLIGHT_CLASS } from '~/src/form/form-editor/preview/constants.js'\nimport { ContentElements } from '~/src/form/form-editor/preview/content.js'\nimport { mapComponentToPreviewQuestion } from '~/src/form/form-editor/preview/helpers.js'\nimport { Markdown } from '~/src/form/form-editor/preview/markdown.js'\nimport { hasComponents } from '~/src/pages/helpers.js'\n/**\n * @type {QuestionRenderer}\n */\nconst questionRenderer = {\n /**\n * @param {string} _questionTemplate\n * @param {QuestionBaseModel} _questionBaseModel\n */\n render(_questionTemplate, _questionBaseModel) {\n //\n }\n}\n\n/**\n * @implements {PageOverviewElements}\n */\nexport class PagePreviewElements {\n /**\n * @type {Page}\n * @private\n */\n _page\n\n /**\n * @param {Page} page\n */\n constructor(page) {\n this._page = page\n }\n\n get heading() {\n return this._page.title\n }\n\n get guidance() {\n if (!hasComponents(this._page) || !this._page.components.length) {\n return ''\n }\n\n const [possibleGuidanceComponent] = this._page.components\n\n return possibleGuidanceComponent.type === ComponentType.Markdown\n ? possibleGuidanceComponent.content\n : ''\n }\n\n get addHeading() {\n return this._page.title.length > 0\n }\n}\n\n/**\n * @implements {PagePreviewPanelMacro}\n */\nexport class PreviewPageController {\n static PATH = 'preview-controllers/'\n /**\n * @type {string}\n * @protected\n */\n _pageTemplate = PreviewPageController.PATH + 'page-controller.njk'\n /**\n * @protected\n * @type {Question[]}\n */\n _components = []\n /**\n * @type {string}\n */\n #title = ''\n /**\n *\n * @type {PageRenderer}\n */\n #pageRenderer\n /**\n * @type { undefined | 'title' | 'guidance'}\n * @protected\n */\n _highlighted = undefined\n /**\n * @type {string}\n * @private\n */\n _guidanceText = ''\n /**\n * @type {Markdown}\n * @private\n */\n _emptyGuidance = PreviewPageController.createGuidanceComponent()\n /**\n *\n * @type {Markdown}\n * @protected\n */\n _guidanceComponent\n /**\n * @type {boolean}\n * @private\n */\n _showTitle = true\n /**\n * @param {ComponentDef[]} components\n * @param {PageOverviewElements} elements\n * @param {FormDefinition} definition\n * @param {PageRenderer} renderer\n */\n constructor(components, elements, definition, renderer) {\n const questions = components.map(\n mapComponentToPreviewQuestion(questionRenderer, definition)\n )\n const firstQuestion = /** @type { Markdown | undefined | Question } */ (\n questions.shift()\n )\n\n this._guidanceComponent =\n PreviewPageController.getOrCreateGuidanceComponent(firstQuestion)\n this._guidanceText = elements.guidance\n this._components = this.#constructComponents(firstQuestion, questions)\n this._showTitle = elements.addHeading\n\n this.#pageRenderer = renderer\n this.#title = elements.heading\n }\n\n /**\n * @param { Question | Markdown | undefined} firstQuestion\n * @param {Question[]} questions\n * @returns {Question[]}\n */\n #constructComponents(firstQuestion, questions) {\n return firstQuestion instanceof Markdown || firstQuestion === undefined\n ? questions\n : [firstQuestion, ...questions]\n }\n\n /**\n * @returns {Markdown[]}\n * @private\n */\n get _guidanceComponents() {\n if (this._guidanceText.length) {\n return [this._guidanceComponent]\n }\n if (this._highlighted === 'guidance') {\n return [this._emptyGuidance]\n }\n return []\n }\n\n /**\n * @returns {PagePreviewComponent[]}\n */\n get components() {\n const componentsWithGuidance = /** @type {Question[]} */ ([\n ...this._guidanceComponents,\n ...this._components\n ])\n\n return componentsWithGuidance.map((component) => {\n return {\n model: this._overrideComponentHeading(component),\n questionType: component.componentType\n }\n })\n }\n\n /**\n * @returns {boolean}\n */\n get showLargeTitle() {\n const componentsLength =\n this._components.length + this._guidanceComponents.length\n\n if (componentsLength > 1 || this._highlighted === 'title') {\n return false\n }\n // |_ one component and title not highlighted\n if (this.#title.trim() === this._components[0].question.trim()) {\n return true\n }\n // titles not the same\n\n return !this._showTitle // add page heading deselected?\n }\n\n /**\n * @param {PreviewComponent} component\n * @returns {QuestionBaseModel}\n */\n _overrideComponentHeading(component) {\n const largeTitle = this.showLargeTitle\n\n const fieldset = component.renderInput.fieldset\n ? {\n fieldset: {\n legend: {\n ...component.renderInput.fieldset.legend,\n classes: largeTitle\n ? 'govuk-fieldset__legend--l'\n : 'govuk-fieldset__legend--m'\n }\n }\n }\n : {}\n\n const label = component.renderInput.label\n ? {\n label: {\n ...component.renderInput.label,\n classes: largeTitle ? 'govuk-label--l' : 'govuk-label--m'\n }\n }\n : {}\n\n return {\n ...component.renderInput,\n ...fieldset,\n ...label\n }\n }\n\n set guidanceText(text) {\n this._guidanceText = text\n this._guidanceComponent.content = text\n this.render()\n }\n\n get guidanceText() {\n if (!this._showTitle) {\n return ''\n }\n return this._guidanceText\n }\n\n /**\n *\n * @param {boolean} showTitle\n */\n set showTitle(showTitle) {\n this._showTitle = showTitle\n this.render()\n }\n\n get showTitle() {\n return this._showTitle\n }\n\n get guidance() {\n return {\n text: this.guidanceText,\n classes: this._highlighted === 'guidance' ? 'highlight' : ''\n }\n }\n\n /**\n * @returns {{ text: string, classes: string }}\n */\n get pageTitle() {\n return {\n text: this.title,\n classes: this._highlighted === 'title' ? HIGHLIGHT_CLASS : ''\n }\n }\n\n render() {\n this.#pageRenderer.render(this._pageTemplate, this)\n }\n\n /**\n * @returns {boolean}\n */\n get titleAndFirstTitleSame() {\n return (\n this._components.length > 0 &&\n this.#title.trim() === this._components[0].question.trim() &&\n this.components.length === 1 &&\n this._highlighted !== 'title'\n )\n }\n\n /**\n * @returns {string}\n */\n get title() {\n if (!this._showTitle || this.titleAndFirstTitleSame) {\n return ''\n }\n if (this.#title.length) {\n return this.#title\n }\n return 'Page heading'\n }\n\n /**\n * @param {string} value\n */\n set title(value) {\n this.#title = value\n this.render()\n }\n\n highlightTitle() {\n this.setHighLighted('title')\n }\n\n /**\n * Creates a dummy component for when guidance is highlighted\n * but no guidance text exists\n * @returns {Markdown}\n */\n static createGuidanceComponent() {\n const guidanceElement = new ContentElements({\n type: ComponentType.Markdown,\n title: 'Guidance component',\n name: 'guidanceComponent',\n content: 'Guidance text',\n options: {}\n })\n const guidanceComponent = new Markdown(guidanceElement, questionRenderer)\n\n // the dummy component should always be highlighted\n guidanceComponent.highlightContent()\n return guidanceComponent\n }\n\n /**\n * Helper method to return the guidance or a new one\n * @param { Markdown | Question | undefined } guidanceComponent\n * @returns {Markdown}\n * @private\n */\n static getOrCreateGuidanceComponent(guidanceComponent) {\n if (guidanceComponent instanceof Markdown) {\n return guidanceComponent\n }\n return PreviewPageController.createGuidanceComponent()\n }\n\n highlightGuidance() {\n this._guidanceComponent.highlightContent()\n this.setHighLighted('guidance')\n }\n\n /**\n * @param {'title'|'guidance'} highlightSection\n */\n setHighLighted(highlightSection) {\n this._highlighted = highlightSection\n this.render()\n }\n\n clearHighlight() {\n this._highlighted = undefined\n\n this._guidanceComponent.unHighlightContent()\n this.render()\n }\n}\n\n/**\n * @import { PageRenderer, PageOverviewElements, QuestionRenderer, QuestionBaseModel } from '~/src/form/form-editor/preview/types.js'\n * @import { Question } from '~/src/form/form-editor/preview/question.js'\n * @import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'\n * @import { FormDefinition, Page } from '~/src/form/form-definition/types.js'\n * @import { ComponentDef, MarkdownComponent } from '~/src/components/types.js'\n * @import { PagePreviewComponent, PagePreviewPanelMacro } from '~/src/form/form-editor/macros/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"file":"page-controller.js","names":["ComponentType","HIGHLIGHT_CLASS","ContentElements","mapComponentToPreviewQuestion","Markdown","hasRepeater","hasComponents","questionRenderer","render","_questionTemplate","_questionBaseModel","PagePreviewElements","_page","constructor","page","heading","title","guidance","components","length","possibleGuidanceComponent","type","content","addHeading","repeatQuestion","repeat","options","undefined","HighlightClass","TITLE","GUIDANCE","REPEATER","PreviewPageController","PATH","_pageTemplate","_components","pageRenderer","_highlighted","_guidanceText","_sectionTitle","_emptyGuidance","createGuidanceComponent","_guidanceComponent","_showTitle","isRepeater","elements","definition","renderer","questions","map","firstQuestion","shift","getOrCreateGuidanceComponent","constructComponents","#constructComponents","_guidanceComponents","componentsWithGuidance","component","model","_overrideComponentHeading","questionType","componentType","showLargeTitle","componentsLength","trim","question","largeTitle","fieldset","renderInput","legend","classes","label","guidanceText","text","showTitle","isHighlighted","pageTitle","titleAndFirstTitleSame","value","highlightTitle","setHighLighted","setRepeater","unsetRepeater","sectionTitle","sectionTitleText","repeaterText","val","repeaterButton","repeaterButtonText","firstToken","rest","restOfStr","join","toLowerCase","guidanceElement","name","guidanceComponent","highlightContent","highlightGuidance","highlightSection","clearHighlight","unHighlightContent","#isHighlighted","field"],"sources":["../../../../../../src/form/form-editor/preview/controller/page-controller.js"],"sourcesContent":["import { ComponentType } from '~/src/components/enums.js'\nimport { HIGHLIGHT_CLASS } from '~/src/form/form-editor/preview/constants.js'\nimport { ContentElements } from '~/src/form/form-editor/preview/content.js'\nimport { mapComponentToPreviewQuestion } from '~/src/form/form-editor/preview/helpers.js'\nimport { Markdown } from '~/src/form/form-editor/preview/markdown.js'\nimport { hasRepeater } from '~/src/index.js'\nimport { hasComponents } from '~/src/pages/helpers.js'\n\n/**\n * @type {QuestionRenderer}\n */\nconst questionRenderer = {\n /**\n * @param {string} _questionTemplate\n * @param {QuestionBaseModel} _questionBaseModel\n */\n render(_questionTemplate, _questionBaseModel) {\n //\n }\n}\n\n/**\n * @implements {PageOverviewElements}\n */\nexport class PagePreviewElements {\n /**\n * @type {Page}\n * @private\n */\n _page\n\n /**\n * @param {Page} page\n */\n constructor(page) {\n this._page = page\n }\n\n get heading() {\n return this._page.title\n }\n\n get guidance() {\n if (!hasComponents(this._page) || !this._page.components.length) {\n return ''\n }\n\n const [possibleGuidanceComponent] = this._page.components\n\n return possibleGuidanceComponent.type === ComponentType.Markdown\n ? possibleGuidanceComponent.content\n : ''\n }\n\n get addHeading() {\n return this._page.title.length > 0\n }\n\n get repeatQuestion() {\n if (hasRepeater(this._page)) {\n return this._page.repeat.options.title\n }\n return undefined\n }\n\n get hasRepeater() {\n return hasRepeater(this._page)\n }\n}\n\n/**\n * Enum for Highlight classes\n * @readonly\n * @enum {string}\n */\nconst HighlightClass = {\n TITLE: 'title',\n GUIDANCE: 'guidance',\n REPEATER: 'repeater'\n}\n\n/**\n * @implements {PagePreviewPanelMacro}\n */\nexport class PreviewPageController {\n static PATH = 'preview-controllers/'\n /**\n * @type {string}\n * @protected\n */\n _pageTemplate = PreviewPageController.PATH + 'page-controller.njk'\n /**\n * @protected\n * @type {Question[]}\n */\n _components = []\n /**\n * @type {string}\n */\n #title = ''\n /**\n *\n * @type {PageRenderer}\n */\n #pageRenderer\n /**\n * @type { undefined | HighlightClass }\n * @protected\n */\n _highlighted = undefined\n /**\n * @type {string}\n * @private\n */\n _guidanceText = ''\n /**\n * @type { string }\n * @protected\n */\n _sectionTitle = ''\n /**\n * @type {Markdown}\n * @private\n */\n _emptyGuidance = PreviewPageController.createGuidanceComponent()\n /**\n *\n * @type {Markdown}\n * @protected\n */\n _guidanceComponent\n /**\n * @type {boolean}\n * @private\n */\n _showTitle = true\n /**\n * @type {boolean}\n */\n #isRepeater = false\n\n /**\n * @param {ComponentDef[]} components\n * @param {PageOverviewElements} elements\n * @param {FormDefinition} definition\n * @param {PageRenderer} renderer\n */\n constructor(components, elements, definition, renderer) {\n const questions = components.map(\n mapComponentToPreviewQuestion(questionRenderer, definition)\n )\n const firstQuestion = /** @type { Markdown | undefined | Question } */ (\n questions.shift()\n )\n\n this._guidanceComponent =\n PreviewPageController.getOrCreateGuidanceComponent(firstQuestion)\n this._guidanceText = elements.guidance\n this._components = this.#constructComponents(firstQuestion, questions)\n this._showTitle = elements.addHeading\n\n this.#pageRenderer = renderer\n this.#title = elements.heading\n this._sectionTitle = elements.repeatQuestion ?? ''\n this.#isRepeater = elements.hasRepeater\n }\n\n /**\n * @type {typeof HighlightClass}\n */\n static HighlightClass = HighlightClass\n\n /**\n * @param { Question | Markdown | undefined} firstQuestion\n * @param {Question[]} questions\n * @returns {Question[]}\n */\n #constructComponents(firstQuestion, questions) {\n return firstQuestion instanceof Markdown || firstQuestion === undefined\n ? questions\n : [firstQuestion, ...questions]\n }\n\n /**\n * @returns {Markdown[]}\n * @private\n */\n get _guidanceComponents() {\n if (this._guidanceText.length) {\n return [this._guidanceComponent]\n }\n if (this._highlighted === 'guidance') {\n return [this._emptyGuidance]\n }\n return []\n }\n\n /**\n * @returns {PagePreviewComponent[]}\n */\n get components() {\n const componentsWithGuidance = /** @type {Question[]} */ ([\n ...this._guidanceComponents,\n ...this._components\n ])\n\n return componentsWithGuidance.map((component) => {\n return {\n model: this._overrideComponentHeading(component),\n questionType: component.componentType\n }\n })\n }\n\n /**\n * @returns {boolean}\n */\n get showLargeTitle() {\n const componentsLength =\n this._components.length + this._guidanceComponents.length\n\n if (componentsLength > 1 || this._highlighted === 'title') {\n return false\n }\n // |_ one component and title not highlighted\n if (this.#title.trim() === this._components[0].question.trim()) {\n return true\n }\n // titles not the same\n\n return !this._showTitle // add page heading deselected?\n }\n\n /**\n * @param {PreviewComponent} component\n * @returns {QuestionBaseModel}\n */\n _overrideComponentHeading(component) {\n const largeTitle = this.showLargeTitle\n\n const fieldset = component.renderInput.fieldset\n ? {\n fieldset: {\n legend: {\n ...component.renderInput.fieldset.legend,\n classes: largeTitle\n ? 'govuk-fieldset__legend--l'\n : 'govuk-fieldset__legend--m'\n }\n }\n }\n : {}\n\n const label = component.renderInput.label\n ? {\n label: {\n ...component.renderInput.label,\n classes: largeTitle ? 'govuk-label--l' : 'govuk-label--m'\n }\n }\n : {}\n\n return {\n ...component.renderInput,\n ...fieldset,\n ...label\n }\n }\n\n set guidanceText(text) {\n this._guidanceText = text\n this._guidanceComponent.content = text\n this.render()\n }\n\n get guidanceText() {\n if (!this._showTitle) {\n return ''\n }\n return this._guidanceText\n }\n\n /**\n *\n * @param {boolean} showTitle\n */\n set showTitle(showTitle) {\n this._showTitle = showTitle\n this.render()\n }\n\n get showTitle() {\n return this._showTitle\n }\n\n get guidance() {\n return {\n text: this.guidanceText,\n classes: this.#isHighlighted(HighlightClass.GUIDANCE)\n }\n }\n\n /**\n * @returns {{ text: string, classes: string }}\n */\n get pageTitle() {\n return {\n text: this.title,\n classes: this.#isHighlighted(HighlightClass.TITLE)\n }\n }\n\n render() {\n this.#pageRenderer.render(this._pageTemplate, this)\n }\n\n /**\n * @returns {boolean}\n */\n get titleAndFirstTitleSame() {\n return (\n this._components.length > 0 &&\n this.#title.trim() === this._components[0].question.trim() &&\n this.components.length === 1 &&\n this._highlighted !== 'title'\n )\n }\n\n /**\n * @returns {string}\n */\n get title() {\n if (!this._showTitle || this.titleAndFirstTitleSame) {\n return ''\n }\n if (this.#title.length) {\n return this.#title\n }\n return 'Page heading'\n }\n\n /**\n * @param {string} value\n */\n set title(value) {\n this.#title = value\n this.render()\n }\n\n highlightTitle() {\n this.setHighLighted(HighlightClass.TITLE)\n }\n\n setRepeater() {\n this.#isRepeater = true\n this.render()\n }\n\n unsetRepeater() {\n this.#isRepeater = false\n this.render()\n }\n\n get isRepeater() {\n return this.#isRepeater\n }\n\n /**\n * @returns {{classes: string, text: string} | undefined}\n */\n get sectionTitle() {\n if (this.sectionTitleText === undefined) {\n return undefined\n }\n return {\n classes: this.#isHighlighted(HighlightClass.REPEATER),\n text: this.sectionTitleText\n }\n }\n\n get repeaterText() {\n if (!this.#isRepeater) {\n return undefined\n }\n if (!this._sectionTitle.length) {\n return 'Question set name'\n }\n return this._sectionTitle + ' 1'\n }\n\n /**\n * @param {string | undefined} val\n */\n set sectionTitleText(val) {\n this._sectionTitle = val ?? ''\n this.render()\n }\n\n get sectionTitleText() {\n if (this.#isRepeater) {\n return this.repeaterText\n }\n return undefined\n }\n\n get repeaterButton() {\n if (this.repeaterButtonText === undefined) {\n return undefined\n }\n return {\n classes: this.#isHighlighted(HighlightClass.REPEATER),\n text: this.repeaterButtonText\n }\n }\n\n get repeaterButtonText() {\n if (!this.#isRepeater) {\n return undefined\n }\n\n if (this._sectionTitle === '') {\n return '[question set name]'\n }\n\n const [firstToken, ...rest] = this._sectionTitle\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n const restOfStr = rest ? rest.join('') : ''\n return firstToken.toLowerCase() + restOfStr\n }\n\n /**\n * Creates a dummy component for when guidance is highlighted\n * but no guidance text exists\n * @returns {Markdown}\n */\n static createGuidanceComponent() {\n const guidanceElement = new ContentElements({\n type: ComponentType.Markdown,\n title: 'Guidance component',\n name: 'guidanceComponent',\n content: 'Guidance text',\n options: {}\n })\n const guidanceComponent = new Markdown(guidanceElement, questionRenderer)\n\n // the dummy component should always be highlighted\n guidanceComponent.highlightContent()\n return guidanceComponent\n }\n\n /**\n * Helper method to return the guidance or a new one\n * @param { Markdown | Question | undefined } guidanceComponent\n * @returns {Markdown}\n * @private\n */\n static getOrCreateGuidanceComponent(guidanceComponent) {\n if (guidanceComponent instanceof Markdown) {\n return guidanceComponent\n }\n return PreviewPageController.createGuidanceComponent()\n }\n\n highlightGuidance() {\n this._guidanceComponent.highlightContent()\n this.setHighLighted(HighlightClass.GUIDANCE)\n }\n\n /**\n * @param {HighlightClass} highlightSection\n */\n setHighLighted(highlightSection) {\n this._highlighted = highlightSection\n this.render()\n }\n\n clearHighlight() {\n this._highlighted = undefined\n\n this._guidanceComponent.unHighlightContent()\n this.render()\n }\n\n /**\n * @param {string} field\n * @returns {string}\n */\n #isHighlighted(field) {\n return this._highlighted === field ? HIGHLIGHT_CLASS : ''\n }\n}\n\n/**\n * @import { PageRenderer, PageOverviewElements, QuestionRenderer, QuestionBaseModel } from '~/src/form/form-editor/preview/types.js'\n * @import { Question } from '~/src/form/form-editor/preview/question.js'\n * @import { PreviewComponent } from '~/src/form/form-editor/preview/preview.js'\n * @import { FormDefinition, Page } from '~/src/form/form-definition/types.js'\n * @import { ComponentDef, MarkdownComponent } from '~/src/components/types.js'\n * @import { PagePreviewComponent, PagePreviewPanelMacro } from '~/src/form/form-editor/macros/types.js'\n */\n"],"mappings":"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","ignoreList":[]}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/form/form-editor/preview/types.ts"],"sourcesContent":["import {\n type PagePreviewPanelMacro,\n type QuestionBaseModel\n} from '~/src/form/form-editor/macros/types.js'\nimport { type AutocompleteQuestion } from '~/src/form/form-editor/preview/autocomplete.js'\nimport { type DateInputQuestion } from '~/src/form/form-editor/preview/date-input.js'\nimport { type EmailAddressQuestion } from '~/src/form/form-editor/preview/email-address.js'\nimport { type ListSortableQuestion } from '~/src/form/form-editor/preview/list-sortable.js'\nimport { type LongAnswerQuestion } from '~/src/form/form-editor/preview/long-answer.js'\nimport { type PhoneNumberQuestion } from '~/src/form/form-editor/preview/phone-number.js'\nimport { type Question } from '~/src/form/form-editor/preview/question.js'\nimport { type RadioSortableQuestion } from '~/src/form/form-editor/preview/radio-sortable.js'\nimport { type SelectSortableQuestion } from '~/src/form/form-editor/preview/select-sortable.js'\nimport { type ShortAnswerQuestion } from '~/src/form/form-editor/preview/short-answer.js'\nimport { type UkAddressQuestion } from '~/src/form/form-editor/preview/uk-address.js'\nimport { type ListElement } from '~/src/form/form-editor/types.js'\nexport { type QuestionBaseModel } from '~/src/form/form-editor/macros/types.js'\nexport interface BaseSettings {\n question: string\n hintText: string\n optional: boolean\n shortDesc: string\n items: ListElement[]\n content: string\n attributes?: Record<string, string>\n}\n\nexport interface DefaultComponent {\n id?: string\n text: string\n classes: string\n}\n\nexport interface GovukFieldset {\n legend: DefaultComponent\n}\n\nexport type ListenerRow = [\n HTMLInputElement | null,\n (target: HTMLInputElement, e: Event) => void,\n keyof HTMLElementEventMap\n]\n\nexport interface DomElementsBase {\n readonly values?: BaseSettings\n autocompleteOptions?: string\n setPreviewHTML(value: string): void\n setPreviewDOM(element: HTMLElement): void\n}\n\nexport interface QuestionElements extends DomElementsBase {\n readonly values: BaseSettings\n}\n\nexport interface AutocompleteElements extends QuestionElements {\n autocompleteOptions: string\n}\n\nexport interface RenderBase {\n render(questionTemplate: string, renderContext: RenderContext): void\n}\n\nexport interface QuestionRenderContext {\n model: QuestionBaseModel\n}\n\nexport interface PageRenderContext {\n params: PagePreviewPanelMacro\n}\n\nexport type RenderContext = QuestionRenderContext | PageRenderContext\n\nexport interface HTMLBuilder {\n buildHTML(questionTemplate: string, renderContext: RenderContext): string\n}\n\nexport interface QuestionRenderer {\n render(questionTemplate: string, questionBaseModel: QuestionBaseModel): void\n}\n\nexport interface PageRenderer {\n render(pageTemplate: string, pagePreview: PagePreviewPanelMacro): void\n}\n\nexport type Renderer = QuestionRenderer | PageRenderer\n\nexport interface ListElements extends QuestionElements {\n afterInputsHTML: string\n}\n\nexport interface PageOverviewElements {\n heading: string\n guidance: string\n addHeading: boolean\n}\n\nexport type PreviewQuestion =\n | DateInputQuestion\n | EmailAddressQuestion\n | ListSortableQuestion\n | LongAnswerQuestion\n | PhoneNumberQuestion\n | Question\n | RadioSortableQuestion\n | SelectSortableQuestion\n | ShortAnswerQuestion\n | UkAddressQuestion\n | AutocompleteQuestion\n"],"mappings":"","ignoreList":[]}
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/form/form-editor/preview/types.ts"],"sourcesContent":["import {\n type PagePreviewPanelMacro,\n type QuestionBaseModel\n} from '~/src/form/form-editor/macros/types.js'\nimport { type AutocompleteQuestion } from '~/src/form/form-editor/preview/autocomplete.js'\nimport { type DateInputQuestion } from '~/src/form/form-editor/preview/date-input.js'\nimport { type EmailAddressQuestion } from '~/src/form/form-editor/preview/email-address.js'\nimport { type ListSortableQuestion } from '~/src/form/form-editor/preview/list-sortable.js'\nimport { type LongAnswerQuestion } from '~/src/form/form-editor/preview/long-answer.js'\nimport { type PhoneNumberQuestion } from '~/src/form/form-editor/preview/phone-number.js'\nimport { type Question } from '~/src/form/form-editor/preview/question.js'\nimport { type RadioSortableQuestion } from '~/src/form/form-editor/preview/radio-sortable.js'\nimport { type SelectSortableQuestion } from '~/src/form/form-editor/preview/select-sortable.js'\nimport { type ShortAnswerQuestion } from '~/src/form/form-editor/preview/short-answer.js'\nimport { type UkAddressQuestion } from '~/src/form/form-editor/preview/uk-address.js'\nimport { type ListElement } from '~/src/form/form-editor/types.js'\nexport { type QuestionBaseModel } from '~/src/form/form-editor/macros/types.js'\nexport interface BaseSettings {\n question: string\n hintText: string\n optional: boolean\n shortDesc: string\n items: ListElement[]\n content: string\n attributes?: Record<string, string>\n}\n\nexport interface DefaultComponent {\n id?: string\n text: string\n classes: string\n}\n\nexport interface GovukFieldset {\n legend: DefaultComponent\n}\n\nexport type ListenerRow = [\n HTMLInputElement | null,\n (target: HTMLInputElement, e: Event) => void,\n keyof HTMLElementEventMap\n]\n\nexport interface DomElementsBase {\n readonly values?: BaseSettings\n autocompleteOptions?: string\n setPreviewHTML(value: string): void\n setPreviewDOM(element: HTMLElement): void\n}\n\nexport interface QuestionElements extends DomElementsBase {\n readonly values: BaseSettings\n}\n\nexport interface AutocompleteElements extends QuestionElements {\n autocompleteOptions: string\n}\n\nexport interface RenderBase {\n render(questionTemplate: string, renderContext: RenderContext): void\n}\n\nexport interface QuestionRenderContext {\n model: QuestionBaseModel\n}\n\nexport interface PageRenderContext {\n params: PagePreviewPanelMacro\n}\n\nexport type RenderContext = QuestionRenderContext | PageRenderContext\n\nexport interface HTMLBuilder {\n buildHTML(questionTemplate: string, renderContext: RenderContext): string\n}\n\nexport interface QuestionRenderer {\n render(questionTemplate: string, questionBaseModel: QuestionBaseModel): void\n}\n\nexport interface PageRenderer {\n render(pageTemplate: string, pagePreview: PagePreviewPanelMacro): void\n}\n\nexport type Renderer = QuestionRenderer | PageRenderer\n\nexport interface ListElements extends QuestionElements {\n afterInputsHTML: string\n}\n\nexport interface PageOverviewElements {\n heading: string\n guidance: string\n addHeading: boolean\n repeatQuestion: string | undefined\n hasRepeater: boolean\n}\n\nexport type PreviewQuestion =\n | DateInputQuestion\n | EmailAddressQuestion\n | ListSortableQuestion\n | LongAnswerQuestion\n | PhoneNumberQuestion\n | Question\n | RadioSortableQuestion\n | SelectSortableQuestion\n | ShortAnswerQuestion\n | UkAddressQuestion\n | AutocompleteQuestion\n"],"mappings":"","ignoreList":[]}
|
@@ -118,11 +118,15 @@ export class PagePreviewElements implements PageOverviewElements {
|
|
118
118
|
* @param {string} heading
|
119
119
|
* @param {string} guidance
|
120
120
|
* @param {boolean} [addHeading]
|
121
|
+
* @param {string} repeatQuestion
|
122
|
+
* @param {boolean} hasRepeater
|
121
123
|
*/
|
122
|
-
constructor(heading: string, guidance?: string, addHeading?: boolean);
|
124
|
+
constructor(heading: string, guidance?: string, addHeading?: boolean, repeatQuestion?: string, hasRepeater?: boolean);
|
123
125
|
guidance: string;
|
124
126
|
heading: string;
|
125
127
|
addHeading: boolean;
|
128
|
+
repeatQuestion: string;
|
129
|
+
hasRepeater: boolean;
|
126
130
|
}
|
127
131
|
export const baseElements: BaseSettings;
|
128
132
|
export namespace listElementsStub {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../../../src/form/form-editor/__stubs__/preview.js"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../../../../src/form/form-editor/__stubs__/preview.js"],"names":[],"mappings":"AA+OA;;;;GAIG;AACH,6DAJW,OAAO,CAAC,YAAY,CAAC,cACrB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,GAC1C,QAAQ,CAUpB;AA1PD;;GAEG;AACH;IAqBE;;;;OAIG;IACH,oCAHW,MAAM,kBACN,aAAa,GAFX,MAAM,CAMlB;IAtBD;;OAEG;IACH,wBAFW,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,EAItD;IAVD;;OAEG;IACH,YAFU,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAE5C;IASV;;;OAGG;IACH,yBAHW,MAAM,qBACN,iBAAiB,QAI3B;CAUF;AAED;;GAEG;AACH;IAqBE;;;;OAIG;IACH,oCAHW,MAAM,kBACN,aAAa,GAFX,MAAM,CAMlB;IAtBD;;OAEG;IACH,wBAFW,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,EAI1D;IAVD;;OAEG;IACH,YAFU,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAEhD;IASV;;;OAGG;IACH,qBAHW,MAAM,yBACN,qBAAqB,QAI/B;CAUF;AAED;;GAEG;AACH;IA2BE;;OAEG;IACH,yEAFW,YAAY,EAStB;IApCD;;OAEG;IACH,4BAAc;IACd,iBAAiB;IACjB,4BAAc;IACd,iBAAiB;IACjB,6BAAiB;IACjB;;;OAGG;IACH,sBAHU,MAAM,CAGD;IACf;;;OAGG;IACH,oBAHU,MAAM,CAGH;IACb;;;;OAIG;IACH,eAAW;IACX,wBAA2E;IAc3E;;OAEG;IACH,cAFa,YAAY,CAWxB;IAED;;OAEG;IACH,uBAFW,MAAM,QAIhB;IAED;;OAEG;IACH,sBAFW,WAAW,QAIrB;CACF;AAED;;GAEG;AACH;IACE;;OAEG;IACH,kDAFW,YAAY,GAAG;QAAC,mBAAmB,EAAE,MAAM,CAAA;KAAC,EAKtD;IADC,4BAA8C;CAEjD;AAED;;GAEG;AACH;IAOE;;;;;;OAMG;IACH,qBANW,MAAM,aACN,MAAM,eACN,OAAO,mBACP,MAAM,gBACN,OAAO,EAcjB;IAzBD,iBAAQ;IACR,gBAAO;IACP,oBAAU;IACV,uBAAc;IACd,qBAAW;CAsBZ;AAED,2BAAuC,YAAY,CAQjD;;;;;;;;kCA+D8K,yCAAyC;uCAAzC,yCAAyC;yBAjQhM,4CAA4C;sCAiQ2G,yCAAyC;mCAAzC,yCAAyC;kCAAzC,yCAAyC;2CAD/K,wCAAwC;kCAC8F,yCAAyC;0CAAzC,yCAAyC;0CAAzC,yCAAyC;AA7DzN,uBAAgB,sCAAsC,CAAA;AACtD,uBAAgB,sCAAsC,CAAA;AACtD,uBAAgB,sCAAsC,CAAA;AACtD,uBAAgB,sCAAsC,CAAA;AAEtD,gCAAoC,YAAY,CA4B9C"}
|
@@ -66,5 +66,13 @@ export interface PagePreviewPanelMacro {
|
|
66
66
|
classes: string;
|
67
67
|
};
|
68
68
|
readonly components: PagePreviewComponent[];
|
69
|
+
readonly sectionTitle?: {
|
70
|
+
text: string;
|
71
|
+
classes: string;
|
72
|
+
};
|
73
|
+
readonly repeaterButton?: {
|
74
|
+
text: string;
|
75
|
+
classes: string;
|
76
|
+
};
|
69
77
|
}
|
70
78
|
//# sourceMappingURL=types.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/form/form-editor/macros/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE1E,MAAM,WAAW,sCAAsC;IACrD,sBAAsB,EAAE,EAAE,CAAA;IAC1B,UAAU,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAClD;AAED,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,sCAAsC,CAAA;IACtD,YAAY,EAAE;QACZ,WAAW,EAAE,UAAU,EAAE,CAAA;QACzB,cAAc,EAAE,UAAU,EAAE,CAAA;KAC7B,CAAA;IACD,YAAY,EAAE,aAAa,CAAA;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,aAAa,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,sCAAsC,CAAA;IACtD,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,cAAc,EAAE,UAAU,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAC7B;AACD,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B;AAGD,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,2BAA2B,CAAA;AAEhF,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACxB,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,EAAE,GAAG,QAAQ,EAAE,CAAA;IAChD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,oBAAqB,SAAQ,wBAAwB;IACpE,KAAK,EAAE,iBAAiB,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,iBAAiB,CAAA;IACxB,YAAY,EAAE,aAAa,CAAA;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,CAAC,QAAQ,EAAE;QACjB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAA;
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/form/form-editor/macros/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAC9D,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,gBAAgB,EACtB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE1E,MAAM,WAAW,sCAAsC;IACrD,sBAAsB,EAAE,EAAE,CAAA;IAC1B,UAAU,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CAClD;AAED,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,sCAAsC,CAAA;IACtD,YAAY,EAAE;QACZ,WAAW,EAAE,UAAU,EAAE,CAAA;QACzB,cAAc,EAAE,UAAU,EAAE,CAAA;KAC7B,CAAA;IACD,YAAY,EAAE,aAAa,CAAA;CAC5B;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,aAAa,CAAA;IAC3B,cAAc,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,sCAAsC,CAAA;IACtD,WAAW,EAAE,UAAU,EAAE,CAAA;IACzB,cAAc,EAAE,UAAU,EAAE,CAAA;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAC7B;AACD,MAAM,WAAW,2BAA2B;IAC1C,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9B;AAGD,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,2BAA2B,CAAA;AAEhF,MAAM,WAAW,iBAAiB;IAChC,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,KAAK,CAAC,EAAE,gBAAgB,CAAA;IACxB,IAAI,CAAC,EAAE,gBAAgB,CAAA;IACvB,QAAQ,CAAC,EAAE,aAAa,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,gBAAgB,EAAE,GAAG,QAAQ,EAAE,CAAA;IAChD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,mBAAmB,CAAA;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,oBAAqB,SAAQ,wBAAwB;IACpE,KAAK,EAAE,iBAAiB,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,iBAAiB,CAAA;IACxB,YAAY,EAAE,aAAa,CAAA;CAC5B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,SAAS,EAAE;QAClB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,CAAC,QAAQ,EAAE;QACjB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,CAAC,UAAU,EAAE,oBAAoB,EAAE,CAAA;IAC3C,QAAQ,CAAC,YAAY,CAAC,EAAE;QACtB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,QAAQ,CAAC,cAAc,CAAC,EAAE;QACxB,IAAI,EAAE,MAAM,CAAA;QACZ,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF"}
|
@@ -14,12 +14,18 @@ export class PagePreviewElements implements PageOverviewElements {
|
|
14
14
|
get heading(): string;
|
15
15
|
get guidance(): string;
|
16
16
|
get addHeading(): boolean;
|
17
|
+
get repeatQuestion(): string | undefined;
|
18
|
+
get hasRepeater(): boolean;
|
17
19
|
}
|
18
20
|
/**
|
19
21
|
* @implements {PagePreviewPanelMacro}
|
20
22
|
*/
|
21
23
|
export class PreviewPageController implements PagePreviewPanelMacro {
|
22
24
|
static PATH: string;
|
25
|
+
/**
|
26
|
+
* @type {typeof HighlightClass}
|
27
|
+
*/
|
28
|
+
static HighlightClass: typeof HighlightClass;
|
23
29
|
/**
|
24
30
|
* Creates a dummy component for when guidance is highlighted
|
25
31
|
* but no guidance text exists
|
@@ -51,15 +57,20 @@ export class PreviewPageController implements PagePreviewPanelMacro {
|
|
51
57
|
*/
|
52
58
|
protected _components: Question[];
|
53
59
|
/**
|
54
|
-
* @type { undefined |
|
60
|
+
* @type { undefined | HighlightClass }
|
55
61
|
* @protected
|
56
62
|
*/
|
57
|
-
protected _highlighted: undefined |
|
63
|
+
protected _highlighted: undefined | HighlightClass;
|
58
64
|
/**
|
59
65
|
* @type {string}
|
60
66
|
* @private
|
61
67
|
*/
|
62
68
|
private _guidanceText;
|
69
|
+
/**
|
70
|
+
* @type { string }
|
71
|
+
* @protected
|
72
|
+
*/
|
73
|
+
protected _sectionTitle: string;
|
63
74
|
/**
|
64
75
|
* @type {Markdown}
|
65
76
|
* @private
|
@@ -127,11 +138,32 @@ export class PreviewPageController implements PagePreviewPanelMacro {
|
|
127
138
|
*/
|
128
139
|
get title(): string;
|
129
140
|
highlightTitle(): void;
|
141
|
+
setRepeater(): void;
|
142
|
+
unsetRepeater(): void;
|
143
|
+
get isRepeater(): boolean;
|
144
|
+
/**
|
145
|
+
* @returns {{classes: string, text: string} | undefined}
|
146
|
+
*/
|
147
|
+
get sectionTitle(): {
|
148
|
+
classes: string;
|
149
|
+
text: string;
|
150
|
+
} | undefined;
|
151
|
+
get repeaterText(): string | undefined;
|
152
|
+
/**
|
153
|
+
* @param {string | undefined} val
|
154
|
+
*/
|
155
|
+
set sectionTitleText(val: string | undefined);
|
156
|
+
get sectionTitleText(): string | undefined;
|
157
|
+
get repeaterButton(): {
|
158
|
+
classes: string;
|
159
|
+
text: string;
|
160
|
+
} | undefined;
|
161
|
+
get repeaterButtonText(): string | undefined;
|
130
162
|
highlightGuidance(): void;
|
131
163
|
/**
|
132
|
-
* @param {
|
164
|
+
* @param {HighlightClass} highlightSection
|
133
165
|
*/
|
134
|
-
setHighLighted(highlightSection:
|
166
|
+
setHighLighted(highlightSection: HighlightClass): void;
|
135
167
|
clearHighlight(): void;
|
136
168
|
#private;
|
137
169
|
}
|
@@ -139,6 +171,15 @@ import type { PageOverviewElements } from '../../../../form/form-editor/preview/
|
|
139
171
|
import type { Page } from '../../../../form/form-definition/types.js';
|
140
172
|
import type { PagePreviewPanelMacro } from '../../../../form/form-editor/macros/types.js';
|
141
173
|
import type { Question } from '../../../../form/form-editor/preview/question.js';
|
174
|
+
/**
|
175
|
+
* Enum for Highlight classes
|
176
|
+
*/
|
177
|
+
type HighlightClass = string;
|
178
|
+
declare namespace HighlightClass {
|
179
|
+
let TITLE: string;
|
180
|
+
let GUIDANCE: string;
|
181
|
+
let REPEATER: string;
|
182
|
+
}
|
142
183
|
import { Markdown } from '../../../../form/form-editor/preview/markdown.js';
|
143
184
|
import type { PagePreviewComponent } from '../../../../form/form-editor/macros/types.js';
|
144
185
|
import type { PreviewComponent } from '../../../../form/form-editor/preview/preview.js';
|
@@ -146,4 +187,5 @@ import type { QuestionBaseModel } from '../../../../form/form-editor/preview/typ
|
|
146
187
|
import type { ComponentDef } from '../../../../components/types.js';
|
147
188
|
import type { FormDefinition } from '../../../../form/form-definition/types.js';
|
148
189
|
import type { PageRenderer } from '../../../../form/form-editor/preview/types.js';
|
190
|
+
export {};
|
149
191
|
//# sourceMappingURL=page-controller.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"page-controller.d.ts","sourceRoot":"","sources":["../../../../../../src/form/form-editor/preview/controller/page-controller.js"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"page-controller.d.ts","sourceRoot":"","sources":["../../../../../../src/form/form-editor/preview/controller/page-controller.js"],"names":[],"mappings":"AAqBA;;GAEG;AACH;IAOE;;OAEG;IACH,kBAFW,IAAI,EAId;IAXD;;;OAGG;IACH,cAAK;IASL,sBAEC;IAED,uBAUC;IAED,0BAEC;IAED,yCAKC;IAED,2BAEC;CACF;AAaD;;GAEG;AACH;IACE,oBAAoC;IAkFpC;;OAEG;IACH,uBAFU,OAAO,cAAc,CAEO;IAoQtC;;;;OAIG;IACH,kCAFa,QAAQ,CAepB;IAED;;;;;OAKG;IACH,4CAKC;IAhUD;;;;;OAKG;IACH,wBALW,YAAY,EAAE,YACd,oBAAoB,cACpB,cAAc,YACd,YAAY,EAoBtB;IA/ED;;;OAGG;IACH,yBAHU,MAAM,CAGkD;IAClE;;;OAGG;IACH,uBAFU,QAAQ,EAAE,CAEJ;IAUhB;;;OAGG;IACH,wBAHW,SAAS,GAAG,cAAc,CAGb;IACxB;;;OAGG;IACH,sBAAkB;IAClB;;;OAGG;IACH,yBAHW,MAAM,CAGC;IAClB;;;OAGG;IACH,uBAAgE;IAChE;;;;OAIG;IACH,8BAHU,QAAQ,CAGA;IAClB;;;OAGG;IACH,mBAAiB;IAgDjB;;;OAGG;IACH,kCAQC;IAED;;OAEG;IACH,kBAFa,oBAAoB,EAAE,CAclC;IAED;;OAEG;IACH,sBAFa,OAAO,CAgBnB;IAED;;;OAGG;IACH,qCAHW,gBAAgB,GACd,iBAAiB,CAgC7B;IAED,+BAIC;IAED,2BAKC;IAED;;;OAGG;IACH,yBAFW,OAAO,EAKjB;IAED,iBAPW,OAAO,CASjB;IAED;;;MAKC;IAED;;OAEG;IACH,iBAFa;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAO7C;IAED,eAEC;IAED;;OAEG;IACH,8BAFa,OAAO,CASnB;IAeD;;OAEG;IACH,iBAFW,MAAM,EAKhB;IAnBD;;OAEG;IACH,aAFa,MAAM,CAUlB;IAUD,uBAEC;IAED,oBAGC;IAED,sBAGC;IAED,0BAEC;IAED;;OAEG;IACH,oBAFa;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,SAAS,CAUvD;IAED,uCAQC;IAED;;OAEG;IACH,0BAFW,MAAM,GAAG,SAAS,EAK5B;IAED,wBAPW,MAAM,GAAG,SAAS,CAY5B;IAED;;;kBAQC;IAED,6CAaC;IAmCD,0BAGC;IAED;;OAEG;IACH,iCAFW,cAAc,QAKxB;IAED,uBAKC;;CASF;0CAG2F,yCAAyC;0BAG5F,qCAAqC;2CAEd,wCAAwC;8BAJ3E,4CAA4C;;;;sBAra/D,MAAM;;;;;;yBArES,4CAA4C;0CA8eL,wCAAwC;sCAHnE,2CAA2C;uCAFY,yCAAyC;kCAIjF,2BAA2B;oCADtC,qCAAqC;kCAHc,yCAAyC"}
|
@@ -73,6 +73,8 @@ export interface PageOverviewElements {
|
|
73
73
|
heading: string;
|
74
74
|
guidance: string;
|
75
75
|
addHeading: boolean;
|
76
|
+
repeatQuestion: string | undefined;
|
77
|
+
hasRepeater: boolean;
|
76
78
|
}
|
77
79
|
export type PreviewQuestion = DateInputQuestion | EmailAddressQuestion | ListSortableQuestion | LongAnswerQuestion | PhoneNumberQuestion | Question | RadioSortableQuestion | SelectSortableQuestion | ShortAnswerQuestion | UkAddressQuestion | AutocompleteQuestion;
|
78
80
|
//# sourceMappingURL=types.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/form/form-editor/preview/types.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/form/form-editor/preview/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
@@ -47,13 +47,13 @@ function getListItem(model: RuntimeFormModel, listId: string, itemId: string) {
|
|
47
47
|
const foundList = model.getListById(listId)
|
48
48
|
|
49
49
|
if (!foundList) {
|
50
|
-
throw Error(
|
50
|
+
throw Error(`List ${listId} not found`)
|
51
51
|
}
|
52
52
|
|
53
53
|
const item = foundList.items.find((item) => item.id === itemId)
|
54
54
|
|
55
55
|
if (!item) {
|
56
|
-
throw Error(
|
56
|
+
throw Error(`List item ${itemId} not found`)
|
57
57
|
}
|
58
58
|
|
59
59
|
return item
|
@@ -159,16 +159,28 @@ export class PagePreviewElements {
|
|
159
159
|
guidance
|
160
160
|
heading
|
161
161
|
addHeading
|
162
|
+
repeatQuestion
|
163
|
+
hasRepeater
|
162
164
|
|
163
165
|
/**
|
164
166
|
* @param {string} heading
|
165
167
|
* @param {string} guidance
|
166
168
|
* @param {boolean} [addHeading]
|
169
|
+
* @param {string} repeatQuestion
|
170
|
+
* @param {boolean} hasRepeater
|
167
171
|
*/
|
168
|
-
constructor(
|
172
|
+
constructor(
|
173
|
+
heading,
|
174
|
+
guidance = '',
|
175
|
+
addHeading = undefined,
|
176
|
+
repeatQuestion = '',
|
177
|
+
hasRepeater = false
|
178
|
+
) {
|
169
179
|
this.heading = heading
|
170
180
|
this.guidance = guidance
|
171
181
|
this.addHeading = addHeading ?? heading.length > 0
|
182
|
+
this.repeatQuestion = repeatQuestion
|
183
|
+
this.hasRepeater = hasRepeater
|
172
184
|
}
|
173
185
|
}
|
174
186
|
|
@@ -73,4 +73,12 @@ export interface PagePreviewPanelMacro {
|
|
73
73
|
classes: string
|
74
74
|
}
|
75
75
|
readonly components: PagePreviewComponent[]
|
76
|
+
readonly sectionTitle?: {
|
77
|
+
text: string
|
78
|
+
classes: string
|
79
|
+
}
|
80
|
+
readonly repeaterButton?: {
|
81
|
+
text: string
|
82
|
+
classes: string
|
83
|
+
}
|
76
84
|
}
|
@@ -3,7 +3,9 @@ import { HIGHLIGHT_CLASS } from '~/src/form/form-editor/preview/constants.js'
|
|
3
3
|
import { ContentElements } from '~/src/form/form-editor/preview/content.js'
|
4
4
|
import { mapComponentToPreviewQuestion } from '~/src/form/form-editor/preview/helpers.js'
|
5
5
|
import { Markdown } from '~/src/form/form-editor/preview/markdown.js'
|
6
|
+
import { hasRepeater } from '~/src/index.js'
|
6
7
|
import { hasComponents } from '~/src/pages/helpers.js'
|
8
|
+
|
7
9
|
/**
|
8
10
|
* @type {QuestionRenderer}
|
9
11
|
*/
|
@@ -53,6 +55,28 @@ export class PagePreviewElements {
|
|
53
55
|
get addHeading() {
|
54
56
|
return this._page.title.length > 0
|
55
57
|
}
|
58
|
+
|
59
|
+
get repeatQuestion() {
|
60
|
+
if (hasRepeater(this._page)) {
|
61
|
+
return this._page.repeat.options.title
|
62
|
+
}
|
63
|
+
return undefined
|
64
|
+
}
|
65
|
+
|
66
|
+
get hasRepeater() {
|
67
|
+
return hasRepeater(this._page)
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
/**
|
72
|
+
* Enum for Highlight classes
|
73
|
+
* @readonly
|
74
|
+
* @enum {string}
|
75
|
+
*/
|
76
|
+
const HighlightClass = {
|
77
|
+
TITLE: 'title',
|
78
|
+
GUIDANCE: 'guidance',
|
79
|
+
REPEATER: 'repeater'
|
56
80
|
}
|
57
81
|
|
58
82
|
/**
|
@@ -80,7 +104,7 @@ export class PreviewPageController {
|
|
80
104
|
*/
|
81
105
|
#pageRenderer
|
82
106
|
/**
|
83
|
-
* @type { undefined |
|
107
|
+
* @type { undefined | HighlightClass }
|
84
108
|
* @protected
|
85
109
|
*/
|
86
110
|
_highlighted = undefined
|
@@ -89,6 +113,11 @@ export class PreviewPageController {
|
|
89
113
|
* @private
|
90
114
|
*/
|
91
115
|
_guidanceText = ''
|
116
|
+
/**
|
117
|
+
* @type { string }
|
118
|
+
* @protected
|
119
|
+
*/
|
120
|
+
_sectionTitle = ''
|
92
121
|
/**
|
93
122
|
* @type {Markdown}
|
94
123
|
* @private
|
@@ -105,6 +134,11 @@ export class PreviewPageController {
|
|
105
134
|
* @private
|
106
135
|
*/
|
107
136
|
_showTitle = true
|
137
|
+
/**
|
138
|
+
* @type {boolean}
|
139
|
+
*/
|
140
|
+
#isRepeater = false
|
141
|
+
|
108
142
|
/**
|
109
143
|
* @param {ComponentDef[]} components
|
110
144
|
* @param {PageOverviewElements} elements
|
@@ -127,8 +161,15 @@ export class PreviewPageController {
|
|
127
161
|
|
128
162
|
this.#pageRenderer = renderer
|
129
163
|
this.#title = elements.heading
|
164
|
+
this._sectionTitle = elements.repeatQuestion ?? ''
|
165
|
+
this.#isRepeater = elements.hasRepeater
|
130
166
|
}
|
131
167
|
|
168
|
+
/**
|
169
|
+
* @type {typeof HighlightClass}
|
170
|
+
*/
|
171
|
+
static HighlightClass = HighlightClass
|
172
|
+
|
132
173
|
/**
|
133
174
|
* @param { Question | Markdown | undefined} firstQuestion
|
134
175
|
* @param {Question[]} questions
|
@@ -255,7 +296,7 @@ export class PreviewPageController {
|
|
255
296
|
get guidance() {
|
256
297
|
return {
|
257
298
|
text: this.guidanceText,
|
258
|
-
classes: this.
|
299
|
+
classes: this.#isHighlighted(HighlightClass.GUIDANCE)
|
259
300
|
}
|
260
301
|
}
|
261
302
|
|
@@ -265,7 +306,7 @@ export class PreviewPageController {
|
|
265
306
|
get pageTitle() {
|
266
307
|
return {
|
267
308
|
text: this.title,
|
268
|
-
classes: this.
|
309
|
+
classes: this.#isHighlighted(HighlightClass.TITLE)
|
269
310
|
}
|
270
311
|
}
|
271
312
|
|
@@ -307,7 +348,84 @@ export class PreviewPageController {
|
|
307
348
|
}
|
308
349
|
|
309
350
|
highlightTitle() {
|
310
|
-
this.setHighLighted(
|
351
|
+
this.setHighLighted(HighlightClass.TITLE)
|
352
|
+
}
|
353
|
+
|
354
|
+
setRepeater() {
|
355
|
+
this.#isRepeater = true
|
356
|
+
this.render()
|
357
|
+
}
|
358
|
+
|
359
|
+
unsetRepeater() {
|
360
|
+
this.#isRepeater = false
|
361
|
+
this.render()
|
362
|
+
}
|
363
|
+
|
364
|
+
get isRepeater() {
|
365
|
+
return this.#isRepeater
|
366
|
+
}
|
367
|
+
|
368
|
+
/**
|
369
|
+
* @returns {{classes: string, text: string} | undefined}
|
370
|
+
*/
|
371
|
+
get sectionTitle() {
|
372
|
+
if (this.sectionTitleText === undefined) {
|
373
|
+
return undefined
|
374
|
+
}
|
375
|
+
return {
|
376
|
+
classes: this.#isHighlighted(HighlightClass.REPEATER),
|
377
|
+
text: this.sectionTitleText
|
378
|
+
}
|
379
|
+
}
|
380
|
+
|
381
|
+
get repeaterText() {
|
382
|
+
if (!this.#isRepeater) {
|
383
|
+
return undefined
|
384
|
+
}
|
385
|
+
if (!this._sectionTitle.length) {
|
386
|
+
return 'Question set name'
|
387
|
+
}
|
388
|
+
return this._sectionTitle + ' 1'
|
389
|
+
}
|
390
|
+
|
391
|
+
/**
|
392
|
+
* @param {string | undefined} val
|
393
|
+
*/
|
394
|
+
set sectionTitleText(val) {
|
395
|
+
this._sectionTitle = val ?? ''
|
396
|
+
this.render()
|
397
|
+
}
|
398
|
+
|
399
|
+
get sectionTitleText() {
|
400
|
+
if (this.#isRepeater) {
|
401
|
+
return this.repeaterText
|
402
|
+
}
|
403
|
+
return undefined
|
404
|
+
}
|
405
|
+
|
406
|
+
get repeaterButton() {
|
407
|
+
if (this.repeaterButtonText === undefined) {
|
408
|
+
return undefined
|
409
|
+
}
|
410
|
+
return {
|
411
|
+
classes: this.#isHighlighted(HighlightClass.REPEATER),
|
412
|
+
text: this.repeaterButtonText
|
413
|
+
}
|
414
|
+
}
|
415
|
+
|
416
|
+
get repeaterButtonText() {
|
417
|
+
if (!this.#isRepeater) {
|
418
|
+
return undefined
|
419
|
+
}
|
420
|
+
|
421
|
+
if (this._sectionTitle === '') {
|
422
|
+
return '[question set name]'
|
423
|
+
}
|
424
|
+
|
425
|
+
const [firstToken, ...rest] = this._sectionTitle
|
426
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
427
|
+
const restOfStr = rest ? rest.join('') : ''
|
428
|
+
return firstToken.toLowerCase() + restOfStr
|
311
429
|
}
|
312
430
|
|
313
431
|
/**
|
@@ -345,11 +463,11 @@ export class PreviewPageController {
|
|
345
463
|
|
346
464
|
highlightGuidance() {
|
347
465
|
this._guidanceComponent.highlightContent()
|
348
|
-
this.setHighLighted(
|
466
|
+
this.setHighLighted(HighlightClass.GUIDANCE)
|
349
467
|
}
|
350
468
|
|
351
469
|
/**
|
352
|
-
* @param {
|
470
|
+
* @param {HighlightClass} highlightSection
|
353
471
|
*/
|
354
472
|
setHighLighted(highlightSection) {
|
355
473
|
this._highlighted = highlightSection
|
@@ -362,6 +480,14 @@ export class PreviewPageController {
|
|
362
480
|
this._guidanceComponent.unHighlightContent()
|
363
481
|
this.render()
|
364
482
|
}
|
483
|
+
|
484
|
+
/**
|
485
|
+
* @param {string} field
|
486
|
+
* @returns {string}
|
487
|
+
*/
|
488
|
+
#isHighlighted(field) {
|
489
|
+
return this._highlighted === field ? HIGHLIGHT_CLASS : ''
|
490
|
+
}
|
365
491
|
}
|
366
492
|
|
367
493
|
/**
|