@acorex-platform/module-assessment-management-client 0.0.57 → 0.0.59

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. package/fesm2022/{acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-juxXq2pM.mjs → acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs} +1472 -160
  2. package/fesm2022/acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs.map +1 -0
  3. package/fesm2022/{acorex-platform-module-assessment-management-client-assessment-voice.commands-CaElbuNh.mjs → acorex-platform-module-assessment-management-client-assessment-voice.commands-6Hw6NQgS.mjs} +2 -2
  4. package/fesm2022/{acorex-platform-module-assessment-management-client-assessment-voice.commands-CaElbuNh.mjs.map → acorex-platform-module-assessment-management-client-assessment-voice.commands-6Hw6NQgS.mjs.map} +1 -1
  5. package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entities-questionnaire.mjs +1 -11
  6. package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entities-questionnaire.mjs.map +1 -1
  7. package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entities-template.mjs +1 -78
  8. package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entities-template.mjs.map +1 -1
  9. package/fesm2022/{acorex-platform-module-assessment-management-client-contracts-entity-catalog-acorex-platform-module-assessment-management-client-contracts-entity-catalog-DYpWu3Vx.mjs → acorex-platform-module-assessment-management-client-contracts-entity-catalog-acorex-platform-module-assessment-management-client-contracts-entity-catalog-DDCy1T4t.mjs} +6 -6
  10. package/fesm2022/{acorex-platform-module-assessment-management-client-contracts-entity-catalog-acorex-platform-module-assessment-management-client-contracts-entity-catalog-DYpWu3Vx.mjs.map → acorex-platform-module-assessment-management-client-contracts-entity-catalog-acorex-platform-module-assessment-management-client-contracts-entity-catalog-DDCy1T4t.mjs.map} +1 -1
  11. package/fesm2022/{acorex-platform-module-assessment-management-client-contracts-entity-catalog-assessment-case.entity-CUctZ-0K.mjs → acorex-platform-module-assessment-management-client-contracts-entity-catalog-assessment-case.entity-DXJp2k3o.mjs} +2 -2
  12. package/fesm2022/{acorex-platform-module-assessment-management-client-contracts-entity-catalog-assessment-case.entity-CUctZ-0K.mjs.map → acorex-platform-module-assessment-management-client-contracts-entity-catalog-assessment-case.entity-DXJp2k3o.mjs.map} +1 -1
  13. package/fesm2022/{acorex-platform-module-assessment-management-client-contracts-entity-catalog-assessment-session.entity-C2JJw_JJ.mjs → acorex-platform-module-assessment-management-client-contracts-entity-catalog-assessment-session.entity-Q7-5toSQ.mjs} +2 -2
  14. package/fesm2022/{acorex-platform-module-assessment-management-client-contracts-entity-catalog-assessment-session.entity-C2JJw_JJ.mjs.map → acorex-platform-module-assessment-management-client-contracts-entity-catalog-assessment-session.entity-Q7-5toSQ.mjs.map} +1 -1
  15. package/fesm2022/{acorex-platform-module-assessment-management-client-contracts-entity-catalog-question-bank-item.entity-D3y_rWUI.mjs → acorex-platform-module-assessment-management-client-contracts-entity-catalog-question-bank-item.entity-CPEpSSlP.mjs} +2 -2
  16. package/fesm2022/{acorex-platform-module-assessment-management-client-contracts-entity-catalog-question-bank-item.entity-D3y_rWUI.mjs.map → acorex-platform-module-assessment-management-client-contracts-entity-catalog-question-bank-item.entity-CPEpSSlP.mjs.map} +1 -1
  17. package/fesm2022/{acorex-platform-module-assessment-management-client-contracts-entity-catalog-questionnaire.entity-CVz5W0fF.mjs → acorex-platform-module-assessment-management-client-contracts-entity-catalog-questionnaire.entity-DOG7yHv-.mjs} +3 -13
  18. package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entity-catalog-questionnaire.entity-DOG7yHv-.mjs.map +1 -0
  19. package/fesm2022/{acorex-platform-module-assessment-management-client-contracts-entity-catalog-template.entity-C01AW5NW.mjs → acorex-platform-module-assessment-management-client-contracts-entity-catalog-template.entity-BeYGYRb7.mjs} +3 -80
  20. package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entity-catalog-template.entity-BeYGYRb7.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entity-catalog.mjs +1 -1
  22. package/fesm2022/acorex-platform-module-assessment-management-client-contracts.mjs +33 -1
  23. package/fesm2022/acorex-platform-module-assessment-management-client-contracts.mjs.map +1 -1
  24. package/fesm2022/{acorex-platform-module-assessment-management-client-fill-assessment-session.command-CMIq-DDl.mjs → acorex-platform-module-assessment-management-client-fill-assessment-session.command-BOzXBvS2.mjs} +2 -2
  25. package/fesm2022/{acorex-platform-module-assessment-management-client-fill-assessment-session.command-CMIq-DDl.mjs.map → acorex-platform-module-assessment-management-client-fill-assessment-session.command-BOzXBvS2.mjs.map} +1 -1
  26. package/fesm2022/acorex-platform-module-assessment-management-client-form-template-viewer-edit.component-BlGBTznW.mjs +112 -0
  27. package/fesm2022/acorex-platform-module-assessment-management-client-form-template-viewer-edit.component-BlGBTznW.mjs.map +1 -0
  28. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-COZcUPEj.mjs → acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-BU6YLe8q.mjs} +4 -4
  29. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-COZcUPEj.mjs.map → acorex-platform-module-assessment-management-client-form-template-viewer-popup.component-BU6YLe8q.mjs.map} +1 -1
  30. package/fesm2022/{acorex-platform-module-assessment-management-client-form-template-viewer.service-CvSRpoos.mjs → acorex-platform-module-assessment-management-client-form-template-viewer.service-CZre8wPB.mjs} +15 -11
  31. package/fesm2022/acorex-platform-module-assessment-management-client-form-template-viewer.service-CZre8wPB.mjs.map +1 -0
  32. package/fesm2022/acorex-platform-module-assessment-management-client-index-BmODQqQ4.mjs +68 -0
  33. package/fesm2022/acorex-platform-module-assessment-management-client-index-BmODQqQ4.mjs.map +1 -0
  34. package/fesm2022/{acorex-platform-module-assessment-management-client-open-form-template.command-CmR-xFHE.mjs → acorex-platform-module-assessment-management-client-open-form-template.command-C9BMiyDb.mjs} +3 -3
  35. package/fesm2022/{acorex-platform-module-assessment-management-client-open-form-template.command-CmR-xFHE.mjs.map → acorex-platform-module-assessment-management-client-open-form-template.command-C9BMiyDb.mjs.map} +1 -1
  36. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-form-template.command-BEzE0620.mjs → acorex-platform-module-assessment-management-client-preview-form-template.command-L5NxVqdE.mjs} +2 -2
  37. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-form-template.command-BEzE0620.mjs.map → acorex-platform-module-assessment-management-client-preview-form-template.command-L5NxVqdE.mjs.map} +1 -1
  38. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-question.command-BGT8qB1_.mjs → acorex-platform-module-assessment-management-client-preview-question.command-7GuqlVX4.mjs} +2 -2
  39. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-question.command-BGT8qB1_.mjs.map → acorex-platform-module-assessment-management-client-preview-question.command-7GuqlVX4.mjs.map} +1 -1
  40. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-questionnaire.command-duK7Tjjp.mjs → acorex-platform-module-assessment-management-client-preview-questionnaire.command-ChtB6q9D.mjs} +2 -2
  41. package/fesm2022/{acorex-platform-module-assessment-management-client-preview-questionnaire.command-duK7Tjjp.mjs.map → acorex-platform-module-assessment-management-client-preview-questionnaire.command-ChtB6q9D.mjs.map} +1 -1
  42. package/fesm2022/{acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-B7_G_C5B.mjs → acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Iwdbc86Q.mjs} +4 -4
  43. package/fesm2022/{acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-B7_G_C5B.mjs.map → acorex-platform-module-assessment-management-client-question-bank-interface-editor-widget-edit.component-Iwdbc86Q.mjs.map} +1 -1
  44. package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-Q6Wu81xW.mjs +69 -0
  45. package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-Q6Wu81xW.mjs.map +1 -0
  46. package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-CaKML07K.mjs +78 -0
  47. package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-CaKML07K.mjs.map +1 -0
  48. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-daQL4OD_.mjs → acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-xDX86cTn.mjs} +4 -4
  49. package/fesm2022/{acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-daQL4OD_.mjs.map → acorex-platform-module-assessment-management-client-questionnaire-viewer-popup.component-xDX86cTn.mjs.map} +1 -1
  50. package/fesm2022/acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-CiMERtrE.mjs +26 -0
  51. package/fesm2022/acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-CiMERtrE.mjs.map +1 -0
  52. package/fesm2022/acorex-platform-module-assessment-management-client-related-content-viewer-page.component-CI9AlM58.mjs +315 -0
  53. package/fesm2022/acorex-platform-module-assessment-management-client-related-content-viewer-page.component-CI9AlM58.mjs.map +1 -0
  54. package/fesm2022/{acorex-platform-module-assessment-management-client-review-assessment-session.command-CPeFh1m7.mjs → acorex-platform-module-assessment-management-client-review-assessment-session.command-CfqUtmMt.mjs} +2 -2
  55. package/fesm2022/{acorex-platform-module-assessment-management-client-review-assessment-session.command-CPeFh1m7.mjs.map → acorex-platform-module-assessment-management-client-review-assessment-session.command-CfqUtmMt.mjs.map} +1 -1
  56. package/fesm2022/acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-BZxwRr8J.mjs +117 -0
  57. package/fesm2022/acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-BZxwRr8J.mjs.map +1 -0
  58. package/fesm2022/acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-hrtJQmvG.mjs +129 -0
  59. package/fesm2022/acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-hrtJQmvG.mjs.map +1 -0
  60. package/fesm2022/acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs +120 -0
  61. package/fesm2022/acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs.map +1 -0
  62. package/fesm2022/{acorex-platform-module-assessment-management-client-template-picker.component-D_UCdFOH.mjs → acorex-platform-module-assessment-management-client-template-picker.component-DzboI7GV.mjs} +3 -3
  63. package/fesm2022/{acorex-platform-module-assessment-management-client-template-picker.component-D_UCdFOH.mjs.map → acorex-platform-module-assessment-management-client-template-picker.component-DzboI7GV.mjs.map} +1 -1
  64. package/fesm2022/{acorex-platform-module-assessment-management-client-template-widget-edit.component-DERabYdH.mjs → acorex-platform-module-assessment-management-client-template-widget-edit.component-BhW_Wn7N.mjs} +2 -2
  65. package/fesm2022/{acorex-platform-module-assessment-management-client-template-widget-edit.component-DERabYdH.mjs.map → acorex-platform-module-assessment-management-client-template-widget-edit.component-BhW_Wn7N.mjs.map} +1 -1
  66. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-Dkaw3T8R.mjs +90 -0
  67. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-Dkaw3T8R.mjs.map +1 -0
  68. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs +77 -0
  69. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs.map +1 -0
  70. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-CFu_CQ91.mjs +236 -0
  71. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-CFu_CQ91.mjs.map +1 -0
  72. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-column.component-B3Lx7yuD.mjs +50 -0
  73. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-column.component-B3Lx7yuD.mjs.map +1 -0
  74. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs +81 -0
  75. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs.map +1 -0
  76. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs +30 -0
  77. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs.map +1 -0
  78. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs +423 -0
  79. package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs.map +1 -0
  80. package/fesm2022/{acorex-platform-module-assessment-management-client-view-session-answers.command-DjJajIkL.mjs → acorex-platform-module-assessment-management-client-view-session-answers.command-YoUUyJ4j.mjs} +2 -2
  81. package/fesm2022/{acorex-platform-module-assessment-management-client-view-session-answers.command-DjJajIkL.mjs.map → acorex-platform-module-assessment-management-client-view-session-answers.command-YoUUyJ4j.mjs.map} +1 -1
  82. package/fesm2022/acorex-platform-module-assessment-management-client.mjs +1 -1
  83. package/i18n/en-AU/assessment-management.json +69 -0
  84. package/i18n/en-AU/form-template-management.json +8 -0
  85. package/i18n/en-US/assessment-management.json +69 -0
  86. package/i18n/en-US/form-template-management.json +8 -0
  87. package/i18n/fa-IR/assessment-management.json +69 -0
  88. package/i18n/fa-IR/form-template-management.json +8 -0
  89. package/package.json +3 -3
  90. package/types/acorex-platform-module-assessment-management-client-contracts.d.ts +23 -3
  91. package/types/acorex-platform-module-assessment-management-client.d.ts +10 -1
  92. package/fesm2022/acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-juxXq2pM.mjs.map +0 -1
  93. package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entity-catalog-questionnaire.entity-CVz5W0fF.mjs.map +0 -1
  94. package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entity-catalog-template.entity-C01AW5NW.mjs.map +0 -1
  95. package/fesm2022/acorex-platform-module-assessment-management-client-form-template-viewer.service-CvSRpoos.mjs.map +0 -1
@@ -0,0 +1,81 @@
1
+ import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
2
+ import * as i0 from '@angular/core';
3
+ import { model, signal, computed, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
4
+ import { isEqual } from 'lodash-es';
5
+ import { A as AXMTestSheetGridComponent } from './acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs';
6
+ import { n as normalizeTestSheetDefinition, a as buildRepeatedTestSheetRows, b as buildFixedTestSheetRows, e as applyTestSheetComputations, f as toStoredTestSheetAnswer } from './acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs';
7
+
8
+ //#region ----- Imports -----
9
+ //#endregion
10
+ //#region ----- Component -----
11
+ class AXMTestSheetWidgetEditComponent extends AXPValueWidgetComponent {
12
+ //#endregion
13
+ //#region ----- Lifecycle -----
14
+ constructor() {
15
+ super();
16
+ //#region ----- State Signals -----
17
+ this.repeatedRows = model([], /* @ts-ignore */
18
+ ...(ngDevMode ? [{ debugName: "repeatedRows" }] : /* istanbul ignore next */ []));
19
+ /** Fixed-mode rows. Stops tracking the saved answer after the first edit so the grid is not rebuilt. */
20
+ this.fixedRows = signal([], /* @ts-ignore */
21
+ ...(ngDevMode ? [{ debugName: "fixedRows" }] : /* istanbul ignore next */ []));
22
+ this.answerTouched = false;
23
+ //#endregion
24
+ //#region ----- Computed Properties -----
25
+ this.definition = computed(() => normalizeTestSheetDefinition(this.options()['sheet']), /* @ts-ignore */
26
+ ...(ngDevMode ? [{ debugName: "definition" }] : /* istanbul ignore next */ []));
27
+ this.isReadonly = computed(() => this.options()['readonly'] === true, /* @ts-ignore */
28
+ ...(ngDevMode ? [{ debugName: "isReadonly" }] : /* istanbul ignore next */ []));
29
+ effect(() => {
30
+ const definition = this.definition();
31
+ const value = this.getValue();
32
+ if (this.answerTouched) {
33
+ return;
34
+ }
35
+ untracked(() => {
36
+ if (definition.rowMode === 'repeated') {
37
+ const next = buildRepeatedTestSheetRows(value);
38
+ if (!isEqual(next, this.repeatedRows())) {
39
+ this.repeatedRows.set(next);
40
+ }
41
+ return;
42
+ }
43
+ const next = buildFixedTestSheetRows(definition, value);
44
+ if (!isEqual(next, this.fixedRows())) {
45
+ this.fixedRows.set(next);
46
+ }
47
+ });
48
+ });
49
+ }
50
+ //#endregion
51
+ //#region ----- Event Handlers -----
52
+ onSheetChange(rows) {
53
+ if (this.isReadonly()) {
54
+ return;
55
+ }
56
+ this.answerTouched = true;
57
+ const next = applyTestSheetComputations(rows, this.definition());
58
+ if (next !== rows) {
59
+ if (this.definition().rowMode === 'repeated') {
60
+ this.repeatedRows.set(next);
61
+ }
62
+ else {
63
+ this.fixedRows.set(next);
64
+ }
65
+ }
66
+ const stored = toStoredTestSheetAnswer(next, this.definition());
67
+ const current = this.getValue() ?? null;
68
+ if (!isEqual(stored, current)) {
69
+ this.setValue(stored);
70
+ }
71
+ }
72
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMTestSheetWidgetEditComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
73
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.0.8", type: AXMTestSheetWidgetEditComponent, isStandalone: true, selector: "axm-test-sheet-widget-edit", inputs: { repeatedRows: { classPropertyName: "repeatedRows", publicName: "repeatedRows", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { repeatedRows: "repeatedRowsChange" }, usesInheritance: true, ngImport: i0, template: "<axm-test-sheet-grid\n [definition]=\"definition()\"\n [rowsInput]=\"fixedRows()\"\n [(rowsModel)]=\"repeatedRows\"\n [readonly]=\"isReadonly()\"\n (sheetChange)=\"onSheetChange($event)\"\n/>\n", dependencies: [{ kind: "component", type: AXMTestSheetGridComponent, selector: "axm-test-sheet-grid", inputs: ["definition", "rowsInput", "rowsModel", "readonly"], outputs: ["rowsModelChange", "sheetChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
74
+ }
75
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMTestSheetWidgetEditComponent, decorators: [{
76
+ type: Component,
77
+ args: [{ selector: 'axm-test-sheet-widget-edit', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXMTestSheetGridComponent], template: "<axm-test-sheet-grid\n [definition]=\"definition()\"\n [rowsInput]=\"fixedRows()\"\n [(rowsModel)]=\"repeatedRows\"\n [readonly]=\"isReadonly()\"\n (sheetChange)=\"onSheetChange($event)\"\n/>\n" }]
78
+ }], ctorParameters: () => [], propDecorators: { repeatedRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "repeatedRows", required: false }] }, { type: i0.Output, args: ["repeatedRowsChange"] }] } });
79
+
80
+ export { AXMTestSheetWidgetEditComponent };
81
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-edit.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-edit.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed, effect, model, signal, untracked } from '@angular/core';\nimport { isEqual } from 'lodash-es';\n\nimport { AXMTestSheetGridComponent } from './test-sheet-grid.component';\nimport type { AXMTestSheetDefinition } from './test-sheet.types';\nimport {\n applyTestSheetComputations,\n buildFixedTestSheetRows,\n buildRepeatedTestSheetRows,\n normalizeTestSheetDefinition,\n toStoredTestSheetAnswer,\n} from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-widget-edit',\n templateUrl: './test-sheet-widget-edit.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMTestSheetGridComponent],\n})\nexport class AXMTestSheetWidgetEditComponent extends AXPValueWidgetComponent<Record<string, unknown>[] | null> {\n //#region ----- State Signals -----\n\n protected readonly repeatedRows = model<Record<string, unknown>[]>([]);\n\n /** Fixed-mode rows. Stops tracking the saved answer after the first edit so the grid is not rebuilt. */\n protected readonly fixedRows = signal<Record<string, unknown>[]>([]);\n\n private answerTouched = false;\n\n //#endregion\n\n //#region ----- Computed Properties -----\n\n protected readonly definition = computed<AXMTestSheetDefinition>(() =>\n normalizeTestSheetDefinition(this.options()['sheet']),\n );\n\n protected readonly isReadonly = computed(() => this.options()['readonly'] === true);\n\n //#endregion\n\n //#region ----- Lifecycle -----\n\n constructor() {\n super();\n effect(() => {\n const definition = this.definition();\n const value = this.getValue();\n if (this.answerTouched) {\n return;\n }\n untracked(() => {\n if (definition.rowMode === 'repeated') {\n const next = buildRepeatedTestSheetRows(value);\n if (!isEqual(next, this.repeatedRows())) {\n this.repeatedRows.set(next);\n }\n return;\n }\n const next = buildFixedTestSheetRows(definition, value);\n if (!isEqual(next, this.fixedRows())) {\n this.fixedRows.set(next);\n }\n });\n });\n }\n\n //#endregion\n\n //#region ----- Event Handlers -----\n\n protected onSheetChange(rows: Record<string, unknown>[]): void {\n if (this.isReadonly()) {\n return;\n }\n this.answerTouched = true;\n const next = applyTestSheetComputations(rows, this.definition());\n if (next !== rows) {\n if (this.definition().rowMode === 'repeated') {\n this.repeatedRows.set(next);\n } else {\n this.fixedRows.set(next);\n }\n }\n const stored = toStoredTestSheetAnswer(next, this.definition());\n const current = this.getValue() ?? null;\n if (!isEqual(stored, current)) {\n this.setValue(stored);\n }\n }\n\n //#endregion\n}\n\n//#endregion\n","<axm-test-sheet-grid\n [definition]=\"definition()\"\n [rowsInput]=\"fixedRows()\"\n [(rowsModel)]=\"repeatedRows\"\n [readonly]=\"isReadonly()\"\n (sheetChange)=\"onSheetChange($event)\"\n/>\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
2
+ import * as i0 from '@angular/core';
3
+ import { computed, ChangeDetectionStrategy, Component } from '@angular/core';
4
+ import { A as AXMTestSheetGridComponent } from './acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs';
5
+ import { n as normalizeTestSheetDefinition, b as buildFixedTestSheetRows, a as buildRepeatedTestSheetRows } from './acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs';
6
+
7
+ //#region ----- Imports -----
8
+ //#endregion
9
+ //#region ----- Component -----
10
+ class AXMTestSheetWidgetViewComponent extends AXPValueWidgetComponent {
11
+ constructor() {
12
+ super(...arguments);
13
+ //#region ----- Computed Properties -----
14
+ this.definition = computed(() => normalizeTestSheetDefinition(this.options()['sheet']), /* @ts-ignore */
15
+ ...(ngDevMode ? [{ debugName: "definition" }] : /* istanbul ignore next */ []));
16
+ this.fixedRows = computed(() => buildFixedTestSheetRows(this.definition(), this.getValue()), /* @ts-ignore */
17
+ ...(ngDevMode ? [{ debugName: "fixedRows" }] : /* istanbul ignore next */ []));
18
+ this.repeatedRows = computed(() => buildRepeatedTestSheetRows(this.getValue()), /* @ts-ignore */
19
+ ...(ngDevMode ? [{ debugName: "repeatedRows" }] : /* istanbul ignore next */ []));
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMTestSheetWidgetViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AXMTestSheetWidgetViewComponent, isStandalone: true, selector: "axm-test-sheet-widget-view", usesInheritance: true, ngImport: i0, template: "<axm-test-sheet-grid\n [definition]=\"definition()\"\n [rowsInput]=\"fixedRows()\"\n [rowsModel]=\"repeatedRows()\"\n [readonly]=\"true\"\n/>\n", dependencies: [{ kind: "component", type: AXMTestSheetGridComponent, selector: "axm-test-sheet-grid", inputs: ["definition", "rowsInput", "rowsModel", "readonly"], outputs: ["rowsModelChange", "sheetChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMTestSheetWidgetViewComponent, decorators: [{
25
+ type: Component,
26
+ args: [{ selector: 'axm-test-sheet-widget-view', changeDetection: ChangeDetectionStrategy.OnPush, imports: [AXMTestSheetGridComponent], template: "<axm-test-sheet-grid\n [definition]=\"definition()\"\n [rowsInput]=\"fixedRows()\"\n [rowsModel]=\"repeatedRows()\"\n [readonly]=\"true\"\n/>\n" }]
27
+ }] });
28
+
29
+ export { AXMTestSheetWidgetViewComponent };
30
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-view.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet-widget-view.component.html"],"sourcesContent":["//#region ----- Imports -----\n\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { ChangeDetectionStrategy, Component, computed } from '@angular/core';\n\nimport { AXMTestSheetGridComponent } from './test-sheet-grid.component';\nimport {\n buildFixedTestSheetRows,\n buildRepeatedTestSheetRows,\n normalizeTestSheetDefinition,\n} from './test-sheet.util';\n\n//#endregion\n\n//#region ----- Component -----\n\n@Component({\n selector: 'axm-test-sheet-widget-view',\n templateUrl: './test-sheet-widget-view.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXMTestSheetGridComponent],\n})\nexport class AXMTestSheetWidgetViewComponent extends AXPValueWidgetComponent<Record<string, unknown>[] | null> {\n //#region ----- Computed Properties -----\n\n protected readonly definition = computed(() => normalizeTestSheetDefinition(this.options()['sheet']));\n\n protected readonly fixedRows = computed(() => buildFixedTestSheetRows(this.definition(), this.getValue()));\n\n protected readonly repeatedRows = computed(() => buildRepeatedTestSheetRows(this.getValue()));\n\n //#endregion\n}\n\n//#endregion\n","<axm-test-sheet-grid\n [definition]=\"definition()\"\n [rowsInput]=\"fixedRows()\"\n [rowsModel]=\"repeatedRows()\"\n [readonly]=\"true\"\n/>\n"],"names":[],"mappings":";;;;;;AAAA;AAYA;AAEA;AAQM,MAAO,+BAAgC,SAAQ,uBAAyD,CAAA;AAN9G,IAAA,WAAA,GAAA;;;AASqB,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAC,MAAM,4BAA4B,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,CAAC;uFAAC;AAElF,QAAA,IAAA,CAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;sFAAC;AAEvF,QAAA,IAAA,CAAA,YAAY,GAAG,QAAQ,CAAC,MAAM,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;yFAAC;AAG9F,IAAA;8GAVY,+BAA+B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAA/B,+BAA+B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,4BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtB5C,qJAMA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDcY,yBAAyB,EAAA,QAAA,EAAA,qBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,WAAA,EAAA,WAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,iBAAA,EAAA,aAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAExB,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAN3C,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,4BAA4B,mBAErB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,yBAAyB,CAAC,EAAA,QAAA,EAAA,qJAAA,EAAA;;;"}
@@ -0,0 +1,423 @@
1
+ import { x as AXM_TEST_SHEET_ROW_GROUP_PATH, y as AXM_TEST_SHEET_INPUT_WIDGET_TYPES } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
2
+
3
+ //#region ----- Normalize -----
4
+ function emptyTestSheetDefinition() {
5
+ return {
6
+ rowMode: 'fixed',
7
+ layout: 'column-inputs',
8
+ columns: [],
9
+ rows: [],
10
+ };
11
+ }
12
+ function normalizeTestSheetDefinition(value) {
13
+ const source = isRecord(value) ? value : {};
14
+ const rowMode = source['rowMode'] === 'repeated' ? 'repeated' : 'fixed';
15
+ const layout = source['layout'] === 'row-inputs' ? 'row-inputs' : 'column-inputs';
16
+ const rowHeaderTitle = asText(source['rowHeaderTitle']) || undefined;
17
+ const direction = source['direction'] === 'rtl' || source['direction'] === 'ltr' ? source['direction'] : undefined;
18
+ const columns = Array.isArray(source['columns'])
19
+ ? source['columns'].map((column) => normalizeColumn(column)).filter((column) => !!column)
20
+ : [];
21
+ const rows = Array.isArray(source['rows'])
22
+ ? source['rows'].map((row) => normalizeRow(row)).filter((row) => !!row)
23
+ : [];
24
+ return { rowMode, layout, rowHeaderTitle, direction, columns, rows };
25
+ }
26
+ function normalizeColumn(value) {
27
+ if (!isRecord(value)) {
28
+ return null;
29
+ }
30
+ const name = asText(value['name']);
31
+ if (!name) {
32
+ return null;
33
+ }
34
+ const role = value['role'] === 'static' ? 'static' : 'input';
35
+ const widgetType = asWidgetType(value['widgetType']);
36
+ const baseWidget = asWidgetNode(value['widget']) ?? (role === 'input' ? legacyInputWidget(value) : undefined);
37
+ return {
38
+ name,
39
+ title: asText(value['title']),
40
+ description: asText(value['description']) || undefined,
41
+ groupTitle: asText(value['groupTitle']) || undefined,
42
+ role,
43
+ widget: moveColumnOptionsOntoWidget(baseWidget, value),
44
+ widgetType: role === 'input' ? widgetType : undefined,
45
+ choices: asText(value['choices']) || undefined,
46
+ percentDiff: normalizePercentDiff(value['percentDiff']),
47
+ };
48
+ }
49
+ function normalizeRow(value) {
50
+ if (!isRecord(value)) {
51
+ return null;
52
+ }
53
+ const name = asText(value['name']);
54
+ if (!name) {
55
+ return null;
56
+ }
57
+ const cellsSource = isRecord(value['cells']) ? value['cells'] : {};
58
+ const cells = {};
59
+ for (const [key, cell] of Object.entries(cellsSource)) {
60
+ cells[key] = asText(cell);
61
+ }
62
+ const role = value['role'] === 'static' ? 'static' : value['role'] === 'input' ? 'input' : undefined;
63
+ return {
64
+ name,
65
+ groupTitle: asText(value['groupTitle']) || undefined,
66
+ title: asText(value['title']) || undefined,
67
+ role,
68
+ widget: role === 'static' ? undefined : asWidgetNode(value['widget']),
69
+ cells,
70
+ };
71
+ }
72
+ //#endregion
73
+ //#region ----- Spreadsheet mapping -----
74
+ function testSheetHasRowGroups(definition) {
75
+ return (definition.rowMode === 'fixed' &&
76
+ definition.rows.some((row) => (row.groupTitle ?? '').trim().length > 0));
77
+ }
78
+ function toTestSheetSpreadsheetColumns(definition) {
79
+ return definition.columns.map((column) => ({
80
+ name: column.name,
81
+ title: column.title || column.name,
82
+ description: column.description,
83
+ path: column.name,
84
+ groupTitle: column.groupTitle,
85
+ readonly: column.role === 'static' || !!column.percentDiff,
86
+ widget: column.percentDiff
87
+ ? { type: 'number-editor', options: { decimals: 2 } }
88
+ : column.role === 'static'
89
+ ? staticCellWidget(column)
90
+ : inputCellWidget(column),
91
+ }));
92
+ }
93
+ /**
94
+ * Writes percent-difference columns from the two source cells on each row.
95
+ * Returns the same array when nothing changed.
96
+ */
97
+ function applyTestSheetComputations(rows, definition) {
98
+ const computed = definition.columns.filter((column) => column.percentDiff);
99
+ if (computed.length === 0) {
100
+ return rows;
101
+ }
102
+ let changed = false;
103
+ const next = rows.map((row) => {
104
+ const copy = { ...row };
105
+ let rowChanged = false;
106
+ for (const column of computed) {
107
+ const formula = column.percentDiff;
108
+ if (!formula) {
109
+ continue;
110
+ }
111
+ const value = percentDifference(copy[formula.base], copy[formula.other]);
112
+ if (value == null) {
113
+ if (Object.prototype.hasOwnProperty.call(copy, column.name)) {
114
+ delete copy[column.name];
115
+ rowChanged = true;
116
+ }
117
+ continue;
118
+ }
119
+ if (copy[column.name] !== value) {
120
+ copy[column.name] = value;
121
+ rowChanged = true;
122
+ }
123
+ }
124
+ if (rowChanged) {
125
+ changed = true;
126
+ return copy;
127
+ }
128
+ return row;
129
+ });
130
+ return changed ? next : rows;
131
+ }
132
+ /** Row widgets for `row-inputs`. Static rows stay as authored text. */
133
+ function toTestSheetRowWidgets(definition) {
134
+ if (definition.layout !== 'row-inputs') {
135
+ return null;
136
+ }
137
+ return definition.rows.map((row) => ({
138
+ name: row.name,
139
+ readonly: row.role === 'static',
140
+ widget: row.role === 'static' ? undefined : row.widget,
141
+ }));
142
+ }
143
+ function buildFixedTestSheetRows(definition, answer) {
144
+ const saved = asRowList(answer);
145
+ const inputNames = inputColumnNames(definition);
146
+ return definition.rows.map((row) => {
147
+ const next = {
148
+ name: row.name,
149
+ [AXM_TEST_SHEET_ROW_GROUP_PATH]: row.groupTitle ?? '',
150
+ };
151
+ if (row.title) {
152
+ next['title'] = row.title;
153
+ }
154
+ if (row.role === 'static') {
155
+ for (const column of definition.columns) {
156
+ next[column.name] = row.cells?.[column.name] ?? '';
157
+ }
158
+ return next;
159
+ }
160
+ for (const column of definition.columns) {
161
+ if (column.role === 'static') {
162
+ next[column.name] = row.cells?.[column.name] ?? '';
163
+ }
164
+ }
165
+ const match = saved.find((item) => item['name'] === row.name);
166
+ if (match) {
167
+ for (const name of inputNames) {
168
+ if (Object.prototype.hasOwnProperty.call(match, name)) {
169
+ next[name] = match[name];
170
+ }
171
+ }
172
+ }
173
+ return next;
174
+ });
175
+ }
176
+ function buildRepeatedTestSheetRows(answer) {
177
+ return asRowList(answer).map((row) => ({ ...row }));
178
+ }
179
+ /**
180
+ * Persists the grid only after an input cell has a value.
181
+ * Static text alone does not count as an answer.
182
+ */
183
+ function toStoredTestSheetAnswer(rows, definition) {
184
+ const names = inputColumnNames(definition);
185
+ const staticRowNames = new Set(definition.rows.filter((row) => row.role === 'static').map((row) => row.name));
186
+ const inputRows = rows.filter((row) => !staticRowNames.has(asText(row['name'])));
187
+ const filled = inputRows.some((row) => names.some((name) => isFilledCell(row[name])));
188
+ if (!filled) {
189
+ return null;
190
+ }
191
+ return inputRows.map((row) => {
192
+ const stored = { ...row };
193
+ delete stored['title'];
194
+ return stored;
195
+ });
196
+ }
197
+ function nextTestSheetKey(prefix, used) {
198
+ const taken = new Set(used);
199
+ let index = used.length + 1;
200
+ let name = `${prefix}${index}`;
201
+ while (taken.has(name)) {
202
+ index += 1;
203
+ name = `${prefix}${index}`;
204
+ }
205
+ return name;
206
+ }
207
+ /** Reads a select value stored as an id string or as `{ id }`. */
208
+ function testSheetChoiceId(value) {
209
+ if (typeof value === 'string') {
210
+ return value;
211
+ }
212
+ if (isRecord(value) && typeof value['id'] === 'string') {
213
+ return value['id'];
214
+ }
215
+ return '';
216
+ }
217
+ /**
218
+ * Fills blank or duplicate `name` keys on repeater rows.
219
+ * Existing objects are kept when the name is already unique.
220
+ */
221
+ function assignTestSheetItemNames(items, prefix) {
222
+ const used = new Set();
223
+ let changed = false;
224
+ const next = items.map((item) => {
225
+ const current = item && typeof item === 'object' ? item : {};
226
+ const name = typeof current.name === 'string' ? current.name.trim() : '';
227
+ if (name && !used.has(name)) {
228
+ used.add(name);
229
+ return current;
230
+ }
231
+ changed = true;
232
+ const assigned = nextTestSheetKey(prefix, [...used]);
233
+ used.add(assigned);
234
+ return { ...current, name: assigned };
235
+ });
236
+ return { items: next, changed };
237
+ }
238
+ /**
239
+ * Older columns store `widgetType` and `choices`.
240
+ * The configurator reads `widget`, so a missing node is built once from those fields.
241
+ */
242
+ function ensureTestSheetColumnWidgets(items) {
243
+ let changed = false;
244
+ const next = items.map((item) => {
245
+ if (!isRecord(item)) {
246
+ return item;
247
+ }
248
+ const isStatic = testSheetChoiceId(item['role']) === 'static';
249
+ const current = asWidgetNode(item['widget']);
250
+ const base = current ?? (isStatic ? undefined : legacyInputWidget(item));
251
+ const widget = moveColumnOptionsOntoWidget(base, item);
252
+ const stripLegacy = item['required'] !== undefined || item['defaultValue'] !== undefined;
253
+ if (widget === current && !stripLegacy) {
254
+ return item;
255
+ }
256
+ changed = true;
257
+ const nextItem = { ...item };
258
+ if (widget) {
259
+ nextItem['widget'] = widget;
260
+ }
261
+ delete nextItem['required'];
262
+ delete nextItem['defaultValue'];
263
+ return nextItem;
264
+ });
265
+ return { items: next, changed };
266
+ }
267
+ //#endregion
268
+ //#region ----- Helpers -----
269
+ function normalizePercentDiff(value) {
270
+ if (!isRecord(value) || value['kind'] !== 'percent-diff') {
271
+ return undefined;
272
+ }
273
+ const base = asText(value['base']);
274
+ const other = asText(value['other']);
275
+ if (!base || !other) {
276
+ return undefined;
277
+ }
278
+ return { kind: 'percent-diff', base, other };
279
+ }
280
+ /** `|other - base| / |base| × 100`, rounded to two decimals. Empty when either side is missing or the base is 0. */
281
+ function percentDifference(baseValue, otherValue) {
282
+ const base = asFiniteNumber(baseValue);
283
+ const other = asFiniteNumber(otherValue);
284
+ if (base == null || other == null || base === 0) {
285
+ return null;
286
+ }
287
+ return Math.round((Math.abs(other - base) / Math.abs(base)) * 10000) / 100;
288
+ }
289
+ function asFiniteNumber(value) {
290
+ if (typeof value === 'number' && Number.isFinite(value)) {
291
+ return value;
292
+ }
293
+ if (typeof value === 'string' && value.trim() !== '') {
294
+ const parsed = Number(value);
295
+ return Number.isFinite(parsed) ? parsed : null;
296
+ }
297
+ return null;
298
+ }
299
+ function inputColumnNames(definition) {
300
+ return definition.columns.filter((column) => column.role === 'input').map((column) => column.name);
301
+ }
302
+ function staticCellWidget(column) {
303
+ return {
304
+ type: 'text-editor',
305
+ defaultValue: column.widget?.defaultValue ?? '',
306
+ options: {},
307
+ };
308
+ }
309
+ function inputCellWidget(column) {
310
+ return asWidgetNode(column.widget) ?? legacyInputWidget(column);
311
+ }
312
+ function legacyInputWidget(source) {
313
+ const type = asWidgetType(source.widgetType);
314
+ if (type === 'select-editor') {
315
+ const choices = typeof source.choices === 'string' ? source.choices : '';
316
+ const dataSource = choices
317
+ .split(/\r?\n/)
318
+ .map((line) => line.trim())
319
+ .filter((line) => line.length > 0)
320
+ .map((line) => ({ id: line, title: line }));
321
+ return {
322
+ type,
323
+ options: {
324
+ valueField: 'id',
325
+ textField: 'title',
326
+ dataSource,
327
+ },
328
+ };
329
+ }
330
+ return { type, options: {} };
331
+ }
332
+ /**
333
+ * Older sheets stored required and default value on the column.
334
+ * The widget configurator stores them on the node: `defaultValue` and `options.validations.required`.
335
+ */
336
+ function moveColumnOptionsOntoWidget(widget, source) {
337
+ const defaultValue = typeof source.defaultValue === 'string' ? source.defaultValue : '';
338
+ const needsRequired = source.required === true && (!widget || !widgetHasRequired(widget));
339
+ const needsDefault = defaultValue.length > 0 && (widget?.defaultValue === undefined || widget.defaultValue === '');
340
+ if (!needsRequired && !needsDefault) {
341
+ return widget;
342
+ }
343
+ const next = widget
344
+ ? { ...widget, options: { ...(widget.options ?? {}) } }
345
+ : { type: 'text-editor', options: {} };
346
+ if (needsRequired) {
347
+ const validations = isRecord(next.options?.['validations']) ? { ...next.options['validations'] } : {};
348
+ validations['required'] = { rule: 'required' };
349
+ next.options = { ...(next.options ?? {}), validations };
350
+ }
351
+ if (needsDefault) {
352
+ next.defaultValue = defaultValue;
353
+ }
354
+ return next;
355
+ }
356
+ function widgetHasRequired(node) {
357
+ const validations = node.options?.['validations'];
358
+ if (Array.isArray(validations)) {
359
+ return validations.some((rule) => isRequiredRule(rule));
360
+ }
361
+ if (isRecord(validations)) {
362
+ return isRequiredRule(validations['required']);
363
+ }
364
+ return false;
365
+ }
366
+ function isRequiredRule(value) {
367
+ return isRecord(value) && value['rule'] === 'required' && value['disabled'] !== true;
368
+ }
369
+ function asWidgetNode(value) {
370
+ if (!isRecord(value)) {
371
+ return undefined;
372
+ }
373
+ const type = asText(value['type']).trim();
374
+ if (!type) {
375
+ return undefined;
376
+ }
377
+ const node = {
378
+ type,
379
+ options: isRecord(value['options']) ? value['options'] : {},
380
+ };
381
+ if (value['defaultValue'] !== undefined) {
382
+ node.defaultValue = value['defaultValue'];
383
+ }
384
+ if (value['triggers']) {
385
+ node.triggers = value['triggers'];
386
+ }
387
+ if (value['valueTransforms']) {
388
+ node.valueTransforms = value['valueTransforms'];
389
+ }
390
+ return node;
391
+ }
392
+ function asWidgetType(value) {
393
+ const text = asText(value);
394
+ if (AXM_TEST_SHEET_INPUT_WIDGET_TYPES.includes(text)) {
395
+ return text;
396
+ }
397
+ return 'text-editor';
398
+ }
399
+ function asRowList(value) {
400
+ if (!Array.isArray(value)) {
401
+ return [];
402
+ }
403
+ return value.filter(isRecord);
404
+ }
405
+ function isFilledCell(value) {
406
+ if (value === null || value === undefined || value === '' || value === false) {
407
+ return false;
408
+ }
409
+ if (Array.isArray(value)) {
410
+ return value.length > 0;
411
+ }
412
+ return true;
413
+ }
414
+ function asText(value) {
415
+ return typeof value === 'string' ? value : '';
416
+ }
417
+ function isRecord(value) {
418
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
419
+ }
420
+ //#endregion
421
+
422
+ export { buildRepeatedTestSheetRows as a, buildFixedTestSheetRows as b, toTestSheetRowWidgets as c, testSheetHasRowGroups as d, applyTestSheetComputations as e, toStoredTestSheetAnswer as f, testSheetChoiceId as g, assignTestSheetItemNames as h, ensureTestSheetColumnWidgets as i, normalizeTestSheetDefinition as n, toTestSheetSpreadsheetColumns as t };
423
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/questionnaire-builder/questions/widgets/test-sheet/test-sheet.util.ts"],"sourcesContent":["import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport type { AXPSpreadsheetColumn, AXPSpreadsheetRowWidget } from '@acorex-platform/framework-client/layout/components';\n\nimport {\n AXM_TEST_SHEET_INPUT_WIDGET_TYPES,\n AXM_TEST_SHEET_ROW_GROUP_PATH,\n type AXMTestSheetColumn,\n type AXMTestSheetDefinition,\n type AXMTestSheetInputWidgetType,\n type AXMTestSheetLayout,\n type AXMTestSheetPercentDiff,\n type AXMTestSheetRow,\n type AXMTestSheetRowMode,\n} from './test-sheet.types';\n\n//#region ----- Normalize -----\n\nexport function emptyTestSheetDefinition(): AXMTestSheetDefinition {\n return {\n rowMode: 'fixed',\n layout: 'column-inputs',\n columns: [],\n rows: [],\n };\n}\n\nexport function normalizeTestSheetDefinition(value: unknown): AXMTestSheetDefinition {\n const source = isRecord(value) ? value : {};\n const rowMode: AXMTestSheetRowMode = source['rowMode'] === 'repeated' ? 'repeated' : 'fixed';\n const layout: AXMTestSheetLayout = source['layout'] === 'row-inputs' ? 'row-inputs' : 'column-inputs';\n const rowHeaderTitle = asText(source['rowHeaderTitle']) || undefined;\n const direction = source['direction'] === 'rtl' || source['direction'] === 'ltr' ? source['direction'] : undefined;\n const columns = Array.isArray(source['columns'])\n ? source['columns'].map((column) => normalizeColumn(column)).filter((column): column is AXMTestSheetColumn => !!column)\n : [];\n const rows = Array.isArray(source['rows'])\n ? source['rows'].map((row) => normalizeRow(row)).filter((row): row is AXMTestSheetRow => !!row)\n : [];\n return { rowMode, layout, rowHeaderTitle, direction, columns, rows };\n}\n\nfunction normalizeColumn(value: unknown): AXMTestSheetColumn | null {\n if (!isRecord(value)) {\n return null;\n }\n const name = asText(value['name']);\n if (!name) {\n return null;\n }\n const role = value['role'] === 'static' ? 'static' : 'input';\n const widgetType = asWidgetType(value['widgetType']);\n const baseWidget = asWidgetNode(value['widget']) ?? (role === 'input' ? legacyInputWidget(value) : undefined);\n return {\n name,\n title: asText(value['title']),\n description: asText(value['description']) || undefined,\n groupTitle: asText(value['groupTitle']) || undefined,\n role,\n widget: moveColumnOptionsOntoWidget(baseWidget, value),\n widgetType: role === 'input' ? widgetType : undefined,\n choices: asText(value['choices']) || undefined,\n percentDiff: normalizePercentDiff(value['percentDiff']),\n };\n}\n\nfunction normalizeRow(value: unknown): AXMTestSheetRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const name = asText(value['name']);\n if (!name) {\n return null;\n }\n const cellsSource = isRecord(value['cells']) ? value['cells'] : {};\n const cells: Record<string, string> = {};\n for (const [key, cell] of Object.entries(cellsSource)) {\n cells[key] = asText(cell);\n }\n const role = value['role'] === 'static' ? 'static' : value['role'] === 'input' ? 'input' : undefined;\n return {\n name,\n groupTitle: asText(value['groupTitle']) || undefined,\n title: asText(value['title']) || undefined,\n role,\n widget: role === 'static' ? undefined : asWidgetNode(value['widget']),\n cells,\n };\n}\n\n//#endregion\n\n//#region ----- Spreadsheet mapping -----\n\nexport function testSheetHasRowGroups(definition: AXMTestSheetDefinition): boolean {\n return (\n definition.rowMode === 'fixed' &&\n definition.rows.some((row) => (row.groupTitle ?? '').trim().length > 0)\n );\n}\n\nexport function toTestSheetSpreadsheetColumns(definition: AXMTestSheetDefinition): AXPSpreadsheetColumn[] {\n return definition.columns.map((column) => ({\n name: column.name,\n title: column.title || column.name,\n description: column.description,\n path: column.name,\n groupTitle: column.groupTitle,\n readonly: column.role === 'static' || !!column.percentDiff,\n widget: column.percentDiff\n ? { type: 'number-editor', options: { decimals: 2 } }\n : column.role === 'static'\n ? staticCellWidget(column)\n : inputCellWidget(column),\n }));\n}\n\n/**\n * Writes percent-difference columns from the two source cells on each row.\n * Returns the same array when nothing changed.\n */\nexport function applyTestSheetComputations(\n rows: Record<string, unknown>[],\n definition: AXMTestSheetDefinition,\n): Record<string, unknown>[] {\n const computed = definition.columns.filter((column) => column.percentDiff);\n if (computed.length === 0) {\n return rows;\n }\n let changed = false;\n const next = rows.map((row) => {\n const copy: Record<string, unknown> = { ...row };\n let rowChanged = false;\n for (const column of computed) {\n const formula = column.percentDiff;\n if (!formula) {\n continue;\n }\n const value = percentDifference(copy[formula.base], copy[formula.other]);\n if (value == null) {\n if (Object.prototype.hasOwnProperty.call(copy, column.name)) {\n delete copy[column.name];\n rowChanged = true;\n }\n continue;\n }\n if (copy[column.name] !== value) {\n copy[column.name] = value;\n rowChanged = true;\n }\n }\n if (rowChanged) {\n changed = true;\n return copy;\n }\n return row;\n });\n return changed ? next : rows;\n}\n\n/** Row widgets for `row-inputs`. Static rows stay as authored text. */\nexport function toTestSheetRowWidgets(definition: AXMTestSheetDefinition): AXPSpreadsheetRowWidget[] | null {\n if (definition.layout !== 'row-inputs') {\n return null;\n }\n return definition.rows.map((row) => ({\n name: row.name,\n readonly: row.role === 'static',\n widget: row.role === 'static' ? undefined : row.widget,\n }));\n}\n\nexport function buildFixedTestSheetRows(\n definition: AXMTestSheetDefinition,\n answer: unknown,\n): Record<string, unknown>[] {\n const saved = asRowList(answer);\n const inputNames = inputColumnNames(definition);\n return definition.rows.map((row) => {\n const next: Record<string, unknown> = {\n name: row.name,\n [AXM_TEST_SHEET_ROW_GROUP_PATH]: row.groupTitle ?? '',\n };\n if (row.title) {\n next['title'] = row.title;\n }\n if (row.role === 'static') {\n for (const column of definition.columns) {\n next[column.name] = row.cells?.[column.name] ?? '';\n }\n return next;\n }\n for (const column of definition.columns) {\n if (column.role === 'static') {\n next[column.name] = row.cells?.[column.name] ?? '';\n }\n }\n const match = saved.find((item) => item['name'] === row.name);\n if (match) {\n for (const name of inputNames) {\n if (Object.prototype.hasOwnProperty.call(match, name)) {\n next[name] = match[name];\n }\n }\n }\n return next;\n });\n}\n\nexport function buildRepeatedTestSheetRows(answer: unknown): Record<string, unknown>[] {\n return asRowList(answer).map((row) => ({ ...row }));\n}\n\n/**\n * Persists the grid only after an input cell has a value.\n * Static text alone does not count as an answer.\n */\nexport function toStoredTestSheetAnswer(\n rows: Record<string, unknown>[],\n definition: AXMTestSheetDefinition,\n): Record<string, unknown>[] | null {\n const names = inputColumnNames(definition);\n const staticRowNames = new Set(\n definition.rows.filter((row) => row.role === 'static').map((row) => row.name),\n );\n const inputRows = rows.filter((row) => !staticRowNames.has(asText(row['name'])));\n const filled = inputRows.some((row) => names.some((name) => isFilledCell(row[name])));\n if (!filled) {\n return null;\n }\n return inputRows.map((row) => {\n const stored: Record<string, unknown> = { ...row };\n delete stored['title'];\n return stored;\n });\n}\n\nexport function nextTestSheetKey(prefix: string, used: string[]): string {\n const taken = new Set(used);\n let index = used.length + 1;\n let name = `${prefix}${index}`;\n while (taken.has(name)) {\n index += 1;\n name = `${prefix}${index}`;\n }\n return name;\n}\n\n/** Reads a select value stored as an id string or as `{ id }`. */\nexport function testSheetChoiceId(value: unknown): string {\n if (typeof value === 'string') {\n return value;\n }\n if (isRecord(value) && typeof value['id'] === 'string') {\n return value['id'];\n }\n return '';\n}\n\n/**\n * Fills blank or duplicate `name` keys on repeater rows.\n * Existing objects are kept when the name is already unique.\n */\nexport function assignTestSheetItemNames<T extends { name?: string }>(\n items: T[],\n prefix: string,\n): { items: T[]; changed: boolean } {\n const used = new Set<string>();\n let changed = false;\n const next = items.map((item) => {\n const current = item && typeof item === 'object' ? item : ({} as T);\n const name = typeof current.name === 'string' ? current.name.trim() : '';\n if (name && !used.has(name)) {\n used.add(name);\n return current;\n }\n changed = true;\n const assigned = nextTestSheetKey(prefix, [...used]);\n used.add(assigned);\n return { ...current, name: assigned };\n });\n return { items: next, changed };\n}\n\n/**\n * Older columns store `widgetType` and `choices`.\n * The configurator reads `widget`, so a missing node is built once from those fields.\n */\nexport function ensureTestSheetColumnWidgets<\n T extends {\n name?: string;\n role?: unknown;\n widget?: unknown;\n widgetType?: unknown;\n choices?: unknown;\n required?: unknown;\n defaultValue?: unknown;\n },\n>(items: T[]): { items: T[]; changed: boolean } {\n let changed = false;\n const next = items.map((item) => {\n if (!isRecord(item)) {\n return item;\n }\n const isStatic = testSheetChoiceId(item['role']) === 'static';\n const current = asWidgetNode(item['widget']);\n const base = current ?? (isStatic ? undefined : legacyInputWidget(item));\n const widget = moveColumnOptionsOntoWidget(base, item);\n const stripLegacy = item['required'] !== undefined || item['defaultValue'] !== undefined;\n if (widget === current && !stripLegacy) {\n return item;\n }\n changed = true;\n const nextItem: Record<string, unknown> = { ...item };\n if (widget) {\n nextItem['widget'] = widget;\n }\n delete nextItem['required'];\n delete nextItem['defaultValue'];\n return nextItem as T;\n });\n return { items: next, changed };\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction normalizePercentDiff(value: unknown): AXMTestSheetPercentDiff | undefined {\n if (!isRecord(value) || value['kind'] !== 'percent-diff') {\n return undefined;\n }\n const base = asText(value['base']);\n const other = asText(value['other']);\n if (!base || !other) {\n return undefined;\n }\n return { kind: 'percent-diff', base, other };\n}\n\n/** `|other - base| / |base| × 100`, rounded to two decimals. Empty when either side is missing or the base is 0. */\nfunction percentDifference(baseValue: unknown, otherValue: unknown): number | null {\n const base = asFiniteNumber(baseValue);\n const other = asFiniteNumber(otherValue);\n if (base == null || other == null || base === 0) {\n return null;\n }\n return Math.round((Math.abs(other - base) / Math.abs(base)) * 10000) / 100;\n}\n\nfunction asFiniteNumber(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim() !== '') {\n const parsed = Number(value);\n return Number.isFinite(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction inputColumnNames(definition: AXMTestSheetDefinition): string[] {\n return definition.columns.filter((column) => column.role === 'input').map((column) => column.name);\n}\n\nfunction staticCellWidget(column: AXMTestSheetColumn): AXPWidgetNode {\n return {\n type: 'text-editor',\n defaultValue: column.widget?.defaultValue ?? '',\n options: {},\n };\n}\n\nfunction inputCellWidget(column: AXMTestSheetColumn): AXPWidgetNode {\n return asWidgetNode(column.widget) ?? legacyInputWidget(column);\n}\n\nfunction legacyInputWidget(source: { widgetType?: unknown; choices?: unknown }): AXPWidgetNode {\n const type = asWidgetType(source.widgetType);\n if (type === 'select-editor') {\n const choices = typeof source.choices === 'string' ? source.choices : '';\n const dataSource = choices\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .map((line) => ({ id: line, title: line }));\n return {\n type,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource,\n },\n };\n }\n return { type, options: {} };\n}\n\n/**\n * Older sheets stored required and default value on the column.\n * The widget configurator stores them on the node: `defaultValue` and `options.validations.required`.\n */\nfunction moveColumnOptionsOntoWidget(\n widget: AXPWidgetNode | undefined,\n source: { required?: unknown; defaultValue?: unknown },\n): AXPWidgetNode | undefined {\n const defaultValue = typeof source.defaultValue === 'string' ? source.defaultValue : '';\n const needsRequired = source.required === true && (!widget || !widgetHasRequired(widget));\n const needsDefault =\n defaultValue.length > 0 && (widget?.defaultValue === undefined || widget.defaultValue === '');\n if (!needsRequired && !needsDefault) {\n return widget;\n }\n const next: AXPWidgetNode = widget\n ? { ...widget, options: { ...(widget.options ?? {}) } }\n : { type: 'text-editor', options: {} };\n if (needsRequired) {\n const validations = isRecord(next.options?.['validations']) ? { ...next.options['validations'] } : {};\n validations['required'] = { rule: 'required' };\n next.options = { ...(next.options ?? {}), validations };\n }\n if (needsDefault) {\n next.defaultValue = defaultValue;\n }\n return next;\n}\n\nfunction widgetHasRequired(node: AXPWidgetNode): boolean {\n const validations = node.options?.['validations'];\n if (Array.isArray(validations)) {\n return validations.some((rule) => isRequiredRule(rule));\n }\n if (isRecord(validations)) {\n return isRequiredRule(validations['required']);\n }\n return false;\n}\n\nfunction isRequiredRule(value: unknown): boolean {\n return isRecord(value) && value['rule'] === 'required' && value['disabled'] !== true;\n}\n\nfunction asWidgetNode(value: unknown): AXPWidgetNode | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n const type = asText(value['type']).trim();\n if (!type) {\n return undefined;\n }\n const node: AXPWidgetNode = {\n type,\n options: isRecord(value['options']) ? value['options'] : {},\n };\n if (value['defaultValue'] !== undefined) {\n node.defaultValue = value['defaultValue'];\n }\n if (value['triggers']) {\n node.triggers = value['triggers'] as AXPWidgetNode['triggers'];\n }\n if (value['valueTransforms']) {\n node.valueTransforms = value['valueTransforms'] as AXPWidgetNode['valueTransforms'];\n }\n return node;\n}\n\nfunction asWidgetType(value: unknown): AXMTestSheetInputWidgetType {\n const text = asText(value);\n if ((AXM_TEST_SHEET_INPUT_WIDGET_TYPES as readonly string[]).includes(text)) {\n return text as AXMTestSheetInputWidgetType;\n }\n return 'text-editor';\n}\n\nfunction asRowList(value: unknown): Record<string, unknown>[] {\n if (!Array.isArray(value)) {\n return [];\n }\n return value.filter(isRecord);\n}\n\nfunction isFilledCell(value: unknown): boolean {\n if (value === null || value === undefined || value === '' || value === false) {\n return false;\n }\n if (Array.isArray(value)) {\n return value.length > 0;\n }\n return true;\n}\n\nfunction asText(value: unknown): string {\n return typeof value === 'string' ? value : '';\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@ import * as i0 from '@angular/core';
3
3
  import { inject, Injectable } from '@angular/core';
4
4
  import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
5
5
  import { isString, isEmpty, toString, get, defaultTo, first } from 'lodash';
6
- import { a as AXMQuestionnaireViewerService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-juxXq2pM.mjs';
6
+ import { h as AXMQuestionnaireViewerService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
7
7
  import { RootConfig } from '@acorex-platform/module-assessment-management-client/contracts';
8
8
  import { o as openAssessmentSessionAnswersView } from './acorex-platform-module-assessment-management-client-assessment-session-answers-view.util-42ZcOY2C.mjs';
9
9
 
@@ -277,4 +277,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
277
277
  }] });
278
278
 
279
279
  export { ViewSessionAnswersCommand };
280
- //# sourceMappingURL=acorex-platform-module-assessment-management-client-view-session-answers.command-DjJajIkL.mjs.map
280
+ //# sourceMappingURL=acorex-platform-module-assessment-management-client-view-session-answers.command-YoUUyJ4j.mjs.map