@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.
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs.map +1 -0
- 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
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entities-questionnaire.mjs +1 -11
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entities-questionnaire.mjs.map +1 -1
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entities-template.mjs +1 -78
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entities-template.mjs.map +1 -1
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entity-catalog-questionnaire.entity-DOG7yHv-.mjs.map +1 -0
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entity-catalog-template.entity-BeYGYRb7.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entity-catalog.mjs +1 -1
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts.mjs +33 -1
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts.mjs.map +1 -1
- 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
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client-form-template-viewer-edit.component-BlGBTznW.mjs +112 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-form-template-viewer-edit.component-BlGBTznW.mjs.map +1 -0
- 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
- 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
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client-form-template-viewer.service-CZre8wPB.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-index-BmODQqQ4.mjs +68 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-index-BmODQqQ4.mjs.map +1 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-Q6Wu81xW.mjs +69 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-questions-editor-edit.component-Q6Wu81xW.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-CaKML07K.mjs +78 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-questionnaire-viewer-edit.component-CaKML07K.mjs.map +1 -0
- 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
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-CiMERtrE.mjs +26 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-related-content-viewer-page-component.provider-CiMERtrE.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-related-content-viewer-page.component-CI9AlM58.mjs +315 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-related-content-viewer-page.component-CI9AlM58.mjs.map +1 -0
- 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
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-BZxwRr8J.mjs +117 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-show-form-template-viewer-popup.command-BZxwRr8J.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-hrtJQmvG.mjs +129 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-hrtJQmvG.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs +120 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs.map +1 -0
- 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
- 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
- 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
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-Dkaw3T8R.mjs +90 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-cell-type-widget-edit.component-Dkaw3T8R.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs +77 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-grid.component-BCRIENMA.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-CFu_CQ91.mjs +236 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-schema-widget-edit.component-CFu_CQ91.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-column.component-B3Lx7yuD.mjs +50 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-column.component-B3Lx7yuD.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs +81 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-edit.component-DdC83GV8.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs +30 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet-widget-view.component-OQZIzcjG.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs +423 -0
- package/fesm2022/acorex-platform-module-assessment-management-client-test-sheet.util-CPbgWk5E.mjs.map +1 -0
- 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
- 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
- package/fesm2022/acorex-platform-module-assessment-management-client.mjs +1 -1
- package/i18n/en-AU/assessment-management.json +69 -0
- package/i18n/en-AU/form-template-management.json +8 -0
- package/i18n/en-US/assessment-management.json +69 -0
- package/i18n/en-US/form-template-management.json +8 -0
- package/i18n/fa-IR/assessment-management.json +69 -0
- package/i18n/fa-IR/form-template-management.json +8 -0
- package/package.json +3 -3
- package/types/acorex-platform-module-assessment-management-client-contracts.d.ts +23 -3
- package/types/acorex-platform-module-assessment-management-client.d.ts +10 -1
- package/fesm2022/acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-juxXq2pM.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entity-catalog-questionnaire.entity-CVz5W0fF.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-assessment-management-client-contracts-entity-catalog-template.entity-C01AW5NW.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-assessment-management-client-form-template-viewer.service-CvSRpoos.mjs.map +0 -1
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';
|
|
2
|
+
import { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';
|
|
3
|
+
import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
|
|
4
|
+
import { AXPEntityEventsKeys } from '@acorex-platform/framework-shared/entity';
|
|
5
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
6
|
+
import * as i0 from '@angular/core';
|
|
7
|
+
import { inject, Injectable } from '@angular/core';
|
|
8
|
+
import { b as QUESTIONNAIRE_QUESTIONS_EDITOR_WIDGET } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region ----- Command -----
|
|
12
|
+
/**
|
|
13
|
+
* Opens the questionnaire questions builder in a dialog and saves the field on submit.
|
|
14
|
+
* Used when the questionnaire plugin display includes `popup`.
|
|
15
|
+
*/
|
|
16
|
+
class ShowQuestionnaireQuestionsPopupCommand {
|
|
17
|
+
constructor() {
|
|
18
|
+
//#region ----- Services & Dependencies -----
|
|
19
|
+
this.layoutBuilder = inject(AXPLayoutBuilderService);
|
|
20
|
+
this.translationService = inject(AXTranslationService);
|
|
21
|
+
this.entityService = inject(AXPEntityService);
|
|
22
|
+
this.eventService = inject(AXPBroadcastEventService);
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region ----- Command Handling -----
|
|
26
|
+
async execute(input) {
|
|
27
|
+
const evaluated = resolveInput(input);
|
|
28
|
+
const entity = evaluated.entity?.trim();
|
|
29
|
+
const id = evaluated.id != null ? String(evaluated.id).trim() : '';
|
|
30
|
+
const field = evaluated.field?.trim() || 'questions';
|
|
31
|
+
if (!entity || !id) {
|
|
32
|
+
return {
|
|
33
|
+
success: false,
|
|
34
|
+
message: {
|
|
35
|
+
text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
const dataAccessor = this.entityService.withEntity(entity).data();
|
|
41
|
+
const currentRecord = (await dataAccessor.byKey(id));
|
|
42
|
+
if (!currentRecord) {
|
|
43
|
+
return {
|
|
44
|
+
success: false,
|
|
45
|
+
message: {
|
|
46
|
+
text: await this.translationService.translateAsync('@general:messages.entity.not-found'),
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const dialogTitle = evaluated.title?.trim() ||
|
|
51
|
+
(await this.translationService.translateAsync('@assessment-management:questionnaires.entities.questionnaire.fields.questions.title'));
|
|
52
|
+
const result = await this.layoutBuilder
|
|
53
|
+
.create()
|
|
54
|
+
.dialog((dialog) => {
|
|
55
|
+
dialog
|
|
56
|
+
.setTitle(dialogTitle)
|
|
57
|
+
.setSize('lg')
|
|
58
|
+
.setCloseButton(true)
|
|
59
|
+
.setContext({
|
|
60
|
+
...currentRecord,
|
|
61
|
+
[field]: currentRecord[field] ?? null,
|
|
62
|
+
})
|
|
63
|
+
.content((layout) => {
|
|
64
|
+
layout.flex((flex) => {
|
|
65
|
+
flex.setDirection('column').setGap('16px');
|
|
66
|
+
flex.formField('', (fieldBuilder) => {
|
|
67
|
+
fieldBuilder.path(field).setShowLabel(false).customWidget(QUESTIONNAIRE_QUESTIONS_EDITOR_WIDGET, {});
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
})
|
|
71
|
+
.setActions((actions) => {
|
|
72
|
+
actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');
|
|
73
|
+
})
|
|
74
|
+
.onAction(async (dialogRef) => {
|
|
75
|
+
const context = dialogRef.context();
|
|
76
|
+
const action = dialogRef.action();
|
|
77
|
+
if (!context || action === 'cancel') {
|
|
78
|
+
return { success: false };
|
|
79
|
+
}
|
|
80
|
+
const questions = context[field];
|
|
81
|
+
await dataAccessor.update(id, { [field]: questions });
|
|
82
|
+
this.eventService.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, { name: entity });
|
|
83
|
+
return {
|
|
84
|
+
success: true,
|
|
85
|
+
kind: 'object',
|
|
86
|
+
data: { id, [field]: questions },
|
|
87
|
+
message: {
|
|
88
|
+
text: await this.translationService.translateAsync('@general:messages.entity.updated'),
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
});
|
|
92
|
+
})
|
|
93
|
+
.show();
|
|
94
|
+
return (result ?? {
|
|
95
|
+
success: false,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return {
|
|
100
|
+
success: false,
|
|
101
|
+
message: {
|
|
102
|
+
text: await this.translationService.translateAsync('@general:messages.generic.error.description'),
|
|
103
|
+
},
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ShowQuestionnaireQuestionsPopupCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
108
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ShowQuestionnaireQuestionsPopupCommand, providedIn: 'root' }); }
|
|
109
|
+
}
|
|
110
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ShowQuestionnaireQuestionsPopupCommand, decorators: [{
|
|
111
|
+
type: Injectable,
|
|
112
|
+
args: [{ providedIn: 'root' }]
|
|
113
|
+
}] });
|
|
114
|
+
//#endregion
|
|
115
|
+
//#region ----- Helpers -----
|
|
116
|
+
function resolveInput(input) {
|
|
117
|
+
const raw = (input ?? {});
|
|
118
|
+
const options = raw.options ?? {};
|
|
119
|
+
const data = raw.data ?? {};
|
|
120
|
+
return {
|
|
121
|
+
entity: options.entity ?? raw.entity ?? '',
|
|
122
|
+
id: options.id ?? raw.id ?? data.id ?? '',
|
|
123
|
+
field: options.field ?? raw.field,
|
|
124
|
+
title: options.title ?? raw.title,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export { ShowQuestionnaireQuestionsPopupCommand };
|
|
129
|
+
//# sourceMappingURL=acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-hrtJQmvG.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-assessment-management-client-show-questionnaire-questions-popup.command-hrtJQmvG.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/content-display/questionnaire/show-questionnaire-questions-popup.command.ts"],"sourcesContent":["import { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXPLayoutBuilderService } from '@acorex-platform/framework-client/layout/builder';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPRuntimeCommandResult } from '@acorex-platform/framework-shared/core';\nimport { AXPEntityEventsKeys } from '@acorex-platform/framework-shared/entity';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { QUESTIONNAIRE_QUESTIONS_EDITOR_WIDGET } from '../content-display.constants';\n\n//#region ----- Types -----\n\nexport interface ShowQuestionnaireQuestionsPopupInput {\n entity: string;\n id: string;\n field?: string;\n title?: string;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/**\n * Opens the questionnaire questions builder in a dialog and saves the field on submit.\n * Used when the questionnaire plugin display includes `popup`.\n */\n@Injectable({ providedIn: 'root' })\nexport class ShowQuestionnaireQuestionsPopupCommand\n implements AXPCommand<ShowQuestionnaireQuestionsPopupInput, unknown>\n{\n //#region ----- Services & Dependencies -----\n\n private readonly layoutBuilder = inject(AXPLayoutBuilderService);\n private readonly translationService = inject(AXTranslationService);\n private readonly entityService = inject(AXPEntityService);\n private readonly eventService = inject(AXPBroadcastEventService);\n\n //#endregion\n\n //#region ----- Command Handling -----\n\n async execute(input: ShowQuestionnaireQuestionsPopupInput | undefined): AXPCommandExecuteResultPromise<unknown> {\n const evaluated = resolveInput(input);\n const entity = evaluated.entity?.trim();\n const id = evaluated.id != null ? String(evaluated.id).trim() : '';\n const field = evaluated.field?.trim() || 'questions';\n\n if (!entity || !id) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const dataAccessor = this.entityService.withEntity(entity).data();\n const currentRecord = (await dataAccessor.byKey(id)) as Record<string, unknown> | null;\n if (!currentRecord) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.not-found'),\n },\n };\n }\n\n const dialogTitle =\n evaluated.title?.trim() ||\n (await this.translationService.translateAsync(\n '@assessment-management:questionnaires.entities.questionnaire.fields.questions.title',\n ));\n\n const result = await this.layoutBuilder\n .create()\n .dialog<AXPRuntimeCommandResult>((dialog) => {\n dialog\n .setTitle(dialogTitle)\n .setSize('lg')\n .setCloseButton(true)\n .setContext({\n ...currentRecord,\n [field]: currentRecord[field] ?? null,\n })\n .content((layout) => {\n layout.flex((flex) => {\n flex.setDirection('column').setGap('16px');\n flex.formField('', (fieldBuilder) => {\n fieldBuilder.path(field).setShowLabel(false).customWidget(QUESTIONNAIRE_QUESTIONS_EDITOR_WIDGET, {});\n });\n });\n })\n .setActions((actions) => {\n actions.cancel('@general:actions.cancel.title').submit('@general:actions.save.title');\n })\n .onAction(async (dialogRef) => {\n const context = dialogRef.context();\n const action = dialogRef.action();\n if (!context || action === 'cancel') {\n return { success: false };\n }\n const questions = context[field];\n await dataAccessor.update(id, { [field]: questions } as never);\n this.eventService.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, { name: entity });\n return {\n success: true,\n kind: 'object',\n data: { id, [field]: questions },\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.updated'),\n },\n };\n });\n })\n .show();\n\n return (\n result ?? {\n success: false,\n }\n );\n } catch {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.error.description'),\n },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction resolveInput(input: ShowQuestionnaireQuestionsPopupInput | undefined): ShowQuestionnaireQuestionsPopupInput {\n const raw = (input ?? {}) as ShowQuestionnaireQuestionsPopupInput & {\n options?: Partial<ShowQuestionnaireQuestionsPopupInput>;\n data?: Partial<ShowQuestionnaireQuestionsPopupInput> & { id?: string };\n };\n const options = raw.options ?? {};\n const data = raw.data ?? {};\n return {\n entity: options.entity ?? raw.entity ?? '',\n id: options.id ?? raw.id ?? data.id ?? '',\n field: options.field ?? raw.field,\n title: options.title ?? raw.title,\n };\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';
|
|
2
|
+
import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
|
|
3
|
+
import { AXPEntityEventsKeys } from '@acorex-platform/framework-shared/entity';
|
|
4
|
+
import { AXTranslationService } from '@acorex/core/translation';
|
|
5
|
+
import * as i0 from '@angular/core';
|
|
6
|
+
import { inject, Injectable } from '@angular/core';
|
|
7
|
+
import { isPlainObject } from 'lodash-es';
|
|
8
|
+
import { h as AXMQuestionnaireViewerService, c as AXMRelatedContentRecordService, d as readRelatedRecordId, i as QUESTIONNAIRE_VIEWER_FIELD, j as QUESTIONNAIRE_VIEWER_SOURCE_FIELD } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
|
|
9
|
+
|
|
10
|
+
//#endregion
|
|
11
|
+
//#region ----- Command -----
|
|
12
|
+
/**
|
|
13
|
+
* Opens the questionnaire stored on the related record and saves answers on this record.
|
|
14
|
+
*/
|
|
15
|
+
class ShowQuestionnaireViewerPopupCommand {
|
|
16
|
+
constructor() {
|
|
17
|
+
//#region ----- Services & Dependencies -----
|
|
18
|
+
this.questionnaireViewer = inject(AXMQuestionnaireViewerService);
|
|
19
|
+
this.records = inject(AXMRelatedContentRecordService);
|
|
20
|
+
this.entityService = inject(AXPEntityService);
|
|
21
|
+
this.translationService = inject(AXTranslationService);
|
|
22
|
+
this.eventService = inject(AXPBroadcastEventService);
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
//#region ----- Command Handling -----
|
|
26
|
+
async execute(input) {
|
|
27
|
+
const evaluated = resolveInput(input);
|
|
28
|
+
const entity = evaluated.entity?.trim() ?? '';
|
|
29
|
+
const id = readRelatedRecordId(evaluated.id);
|
|
30
|
+
const path = evaluated.path?.trim() ?? '';
|
|
31
|
+
const targetEntity = evaluated.targetEntity?.trim() ?? '';
|
|
32
|
+
const field = evaluated.field?.trim() || QUESTIONNAIRE_VIEWER_FIELD;
|
|
33
|
+
const sourceField = evaluated.sourceField?.trim() || QUESTIONNAIRE_VIEWER_SOURCE_FIELD;
|
|
34
|
+
if (!entity || !id || !path || !targetEntity) {
|
|
35
|
+
return {
|
|
36
|
+
success: false,
|
|
37
|
+
message: {
|
|
38
|
+
text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const host = await this.records.find(entity, id);
|
|
44
|
+
if (!host) {
|
|
45
|
+
return {
|
|
46
|
+
success: false,
|
|
47
|
+
message: {
|
|
48
|
+
text: await this.translationService.translateAsync('@general:messages.entity.not-found'),
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const relatedId = readRelatedRecordId(host[path]);
|
|
53
|
+
const structure = relatedId
|
|
54
|
+
? (await this.records.readQuestionnaireStructure(targetEntity, relatedId, sourceField))
|
|
55
|
+
: null;
|
|
56
|
+
if (!structure?.sections?.length) {
|
|
57
|
+
return {
|
|
58
|
+
success: false,
|
|
59
|
+
message: {
|
|
60
|
+
text: await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.empty.description'),
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const current = host[field];
|
|
65
|
+
const title = evaluated.title?.trim() ||
|
|
66
|
+
(await this.translationService.translateAsync('@assessment-management:questionnaires.components.questionnaire-viewer.section-title'));
|
|
67
|
+
const opened = await this.questionnaireViewer.open({
|
|
68
|
+
title,
|
|
69
|
+
structure,
|
|
70
|
+
initialAnswers: isPlainObject(current) ? current : {},
|
|
71
|
+
});
|
|
72
|
+
if (!opened || (!opened.submitted && !opened.saved)) {
|
|
73
|
+
return { success: false };
|
|
74
|
+
}
|
|
75
|
+
await this.entityService.withEntity(entity).data().update(id, { [field]: opened.answers });
|
|
76
|
+
this.eventService.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, { name: entity });
|
|
77
|
+
return {
|
|
78
|
+
success: true,
|
|
79
|
+
kind: 'object',
|
|
80
|
+
data: { id, [field]: opened.answers },
|
|
81
|
+
message: {
|
|
82
|
+
text: await this.translationService.translateAsync('@general:messages.entity.updated'),
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
return {
|
|
88
|
+
success: false,
|
|
89
|
+
message: {
|
|
90
|
+
text: await this.translationService.translateAsync('@general:messages.generic.error.description'),
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ShowQuestionnaireViewerPopupCommand, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
96
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ShowQuestionnaireViewerPopupCommand, providedIn: 'root' }); }
|
|
97
|
+
}
|
|
98
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: ShowQuestionnaireViewerPopupCommand, decorators: [{
|
|
99
|
+
type: Injectable,
|
|
100
|
+
args: [{ providedIn: 'root' }]
|
|
101
|
+
}] });
|
|
102
|
+
//#endregion
|
|
103
|
+
//#region ----- Helpers -----
|
|
104
|
+
function resolveInput(input) {
|
|
105
|
+
const raw = (input ?? {});
|
|
106
|
+
const options = raw.options ?? {};
|
|
107
|
+
const data = raw.data ?? {};
|
|
108
|
+
return {
|
|
109
|
+
entity: options.entity ?? raw.entity ?? '',
|
|
110
|
+
id: options.id ?? raw.id ?? data.id ?? '',
|
|
111
|
+
field: options.field ?? raw.field,
|
|
112
|
+
path: options.path ?? raw.path ?? '',
|
|
113
|
+
sourceField: options.sourceField ?? raw.sourceField,
|
|
114
|
+
targetEntity: options.targetEntity ?? raw.targetEntity ?? '',
|
|
115
|
+
title: options.title ?? raw.title,
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export { ShowQuestionnaireViewerPopupCommand };
|
|
120
|
+
//# sourceMappingURL=acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-assessment-management-client-show-questionnaire-viewer-popup.command-CMUmrNac.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/content-display/questionnaire-viewer/show-questionnaire-viewer-popup.command.ts"],"sourcesContent":["import { AXPBroadcastEventService } from '@acorex-platform/framework-client/core';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { AXPEntityEventsKeys } from '@acorex-platform/framework-shared/entity';\nimport { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport type { QuestionnaireBuilderValue } from '@acorex-platform/module-assessment-management-client/contracts';\nimport { AXTranslationService } from '@acorex/core/translation';\nimport { inject, Injectable } from '@angular/core';\nimport { isPlainObject } from 'lodash-es';\nimport { AXMQuestionnaireViewerService } from '../../questionnaire-viewer/questionnaire-viewer.service';\nimport { QUESTIONNAIRE_VIEWER_FIELD, QUESTIONNAIRE_VIEWER_SOURCE_FIELD } from '../content-display.constants';\nimport { readRelatedRecordId } from '../content-display.util';\nimport { AXMRelatedContentRecordService } from '../related-content-record.service';\n\n//#region ----- Types -----\n\nexport interface ShowQuestionnaireViewerPopupInput {\n entity: string;\n id: string;\n field?: string;\n path: string;\n sourceField?: string;\n targetEntity: string;\n title?: string;\n}\n\n//#endregion\n\n//#region ----- Command -----\n\n/**\n * Opens the questionnaire stored on the related record and saves answers on this record.\n */\n@Injectable({ providedIn: 'root' })\nexport class ShowQuestionnaireViewerPopupCommand implements AXPCommand<ShowQuestionnaireViewerPopupInput, unknown> {\n //#region ----- Services & Dependencies -----\n\n private readonly questionnaireViewer = inject(AXMQuestionnaireViewerService);\n private readonly records = inject(AXMRelatedContentRecordService);\n private readonly entityService = inject(AXPEntityService);\n private readonly translationService = inject(AXTranslationService);\n private readonly eventService = inject(AXPBroadcastEventService);\n\n //#endregion\n\n //#region ----- Command Handling -----\n\n async execute(input: ShowQuestionnaireViewerPopupInput | undefined): AXPCommandExecuteResultPromise<unknown> {\n const evaluated = resolveInput(input);\n const entity = evaluated.entity?.trim() ?? '';\n const id = readRelatedRecordId(evaluated.id);\n const path = evaluated.path?.trim() ?? '';\n const targetEntity = evaluated.targetEntity?.trim() ?? '';\n const field = evaluated.field?.trim() || QUESTIONNAIRE_VIEWER_FIELD;\n const sourceField = evaluated.sourceField?.trim() || QUESTIONNAIRE_VIEWER_SOURCE_FIELD;\n\n if (!entity || !id || !path || !targetEntity) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.invalid-data'),\n },\n };\n }\n\n try {\n const host = await this.records.find(entity, id);\n if (!host) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.not-found'),\n },\n };\n }\n\n const relatedId = readRelatedRecordId(host[path]);\n const structure = relatedId\n ? ((await this.records.readQuestionnaireStructure(\n targetEntity,\n relatedId,\n sourceField,\n )) as QuestionnaireBuilderValue | null)\n : null;\n if (!structure?.sections?.length) {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.empty.description',\n ),\n },\n };\n }\n\n const current = host[field];\n const title =\n evaluated.title?.trim() ||\n (await this.translationService.translateAsync(\n '@assessment-management:questionnaires.components.questionnaire-viewer.section-title',\n ));\n const opened = await this.questionnaireViewer.open({\n title,\n structure,\n initialAnswers: isPlainObject(current) ? (current as Record<string, any>) : {},\n });\n if (!opened || (!opened.submitted && !opened.saved)) {\n return { success: false };\n }\n\n await this.entityService.withEntity(entity).data().update(id, { [field]: opened.answers } as never);\n this.eventService.publish(AXPEntityEventsKeys.REFRESH_LAYOUT, { name: entity });\n return {\n success: true,\n kind: 'object',\n data: { id, [field]: opened.answers },\n message: {\n text: await this.translationService.translateAsync('@general:messages.entity.updated'),\n },\n };\n } catch {\n return {\n success: false,\n message: {\n text: await this.translationService.translateAsync('@general:messages.generic.error.description'),\n },\n };\n }\n }\n\n //#endregion\n}\n\n//#endregion\n\n//#region ----- Helpers -----\n\nfunction resolveInput(input: ShowQuestionnaireViewerPopupInput | undefined): ShowQuestionnaireViewerPopupInput {\n const raw = (input ?? {}) as ShowQuestionnaireViewerPopupInput & {\n options?: Partial<ShowQuestionnaireViewerPopupInput>;\n data?: Partial<ShowQuestionnaireViewerPopupInput> & { id?: string };\n };\n const options = raw.options ?? {};\n const data = raw.data ?? {};\n return {\n entity: options.entity ?? raw.entity ?? '',\n id: options.id ?? raw.id ?? data.id ?? '',\n field: options.field ?? raw.field,\n path: options.path ?? raw.path ?? '',\n sourceField: options.sourceField ?? raw.sourceField,\n targetEntity: options.targetEntity ?? raw.targetEntity ?? '',\n title: options.title ?? raw.title,\n };\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
|
|
@@ -16,7 +16,7 @@ import * as i5 from '@angular/forms';
|
|
|
16
16
|
import { FormsModule } from '@angular/forms';
|
|
17
17
|
import { orderBy } from 'lodash';
|
|
18
18
|
import { AXTreeViewComponent } from '@acorex/components/tree-view';
|
|
19
|
-
import * as
|
|
19
|
+
import * as i3$1 from '@acorex/core/translation';
|
|
20
20
|
import { AXTranslationModule } from '@acorex/core/translation';
|
|
21
21
|
import { AXPWidgetItemComponent, AXPStateMessageComponent } from '@acorex-platform/framework-client/layout/components';
|
|
22
22
|
import { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';
|
|
@@ -237,7 +237,7 @@ class AXPTemplateWidgetPickerComponent extends AXBasePageComponent {
|
|
|
237
237
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTemplateWidgetPickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
238
238
|
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXPTemplateWidgetPickerComponent, isStandalone: true, selector: "ng-component", inputs: { searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { searchTerm: "searchTermChange" }, usesInheritance: true, ngImport: i0, template: "<div class=\"flex flex-col lg:h-[60vh]\">\n <div class=\"p-2 surface-lowest border-b flex-none\">\n <ax-search-box\n look=\"fill\"\n [placeholder]=\"'@form-template-management:designer.components.template-picker.search-placeholder' | translate | async\"\n class=\"ax-sm\"\n [(ngModel)]=\"searchTerm\"\n [delayTime]=\"300\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"flex flex-grow h-full\">\n <!-- Category Tree - Hidden in search mode -->\n @if (!isSearchMode()) {\n <div\n class=\"flex h-full p-2 overflow-auto w-1/3 justify-start items-start surface-lowest border-e\"\n >\n <ax-tree-view\n [selectMode]=\"'none'\"\n [dragBehavior]=\"'none'\"\n [showIcons]=\"false\"\n [showChildrenBadge]=\"false\"\n [nodeTemplate]=\"categoryTemplate\"\n [titleField]=\"'title'\"\n [idField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [datasource]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n (onNodeToggle)=\"handleNodeToggle($event)\"\n class=\"w-full\"\n >\n </ax-tree-view>\n\n <ng-template #categoryTemplate let-node=\"node\">\n @let item = node;\n <ax-icon class=\"fa-solid fa-folder text-yellow-500 fa-fw\"></ax-icon>\n {{ item.title | translate | async }}\n </ng-template>\n </div>\n }\n\n <!-- Widget Grid - Full width in search mode, 2/3 width otherwise -->\n <div\n [class]=\"\n isSearchMode()\n ? 'flex h-full flex-col w-full overflow-hidden'\n : 'flex h-full flex-col w-2/3 overflow-hidden'\n \"\n >\n @if (hasResults()) {\n <div class=\"flex flex-col p-4\">\n <div class=\"grid grid-cols-2 gap-2\">\n @for (widgetItem of pinnedWidgetItems(); track widgetItem.title) {\n <axp-widget-item\n [widget]=\"widgetItem\"\n [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n (onWidgetClick)=\"handleWidgetClick($event)\"\n (onPinClick)=\"handleWidgetPinClick($event)\"\n >\n </axp-widget-item>\n }\n </div>\n @if (pinnedWidgetItems().length) {\n <hr class=\"my-4 border-dashed\" />\n }\n <div class=\"grid grid-cols-2 gap-2\">\n @for (widgetItem of regularWidgetItems(); track widgetItem.title) {\n <axp-widget-item\n [widget]=\"widgetItem\"\n [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n (onWidgetClick)=\"handleWidgetClick($event)\"\n (onPinClick)=\"handleWidgetPinClick($event)\"\n >\n </axp-widget-item>\n }\n </div>\n </div>\n } @else {\n <!-- Empty State -->\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n isSearchMode()\n ? '@form-template-management:designer.components.template-picker.empty-states.no-search-results.title'\n : '@form-template-management:designer.components.template-picker.empty-states.no-category-results.title'\n \"\n [description]=\"\n isSearchMode()\n ? '@form-template-management:designer.components.template-picker.empty-states.no-search-results.description'\n : '@form-template-management:designer.components.template-picker.empty-states.no-category-results.description'\n \"\n >\n @if (isSearchMode()) {\n <ax-button\n look=\"blank\"\n [text]=\"'@form-template-management:designer.components.template-picker.clear-search' | translate | async\"\n class=\"mt-4\"\n (onClick)=\"searchTerm.set('')\"\n ></ax-button>\n }\n </axp-state-message>\n }\n </div>\n </div>\n</div>\n\n@if (selectedWidgets().length) {\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:designer.components.widget-picker.selected-count' | translate: { params: { count: selectedWidgets().length } } | async\"\n (onClick)=\"handleConfirmSelection()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n}\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type:
|
|
239
239
|
//
|
|
240
|
-
AXCommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i4.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "alternate", "nodeTemplate", "idField", "titleField", "highlightText", "tooltipField", "iconField", "expandedField", "selectedField", "indeterminateField", "disabledField", "hiddenField", "childrenField", "childrenCountField", "dataField", "inheritDisabled", "expandOnDoubleClick", "doubleClickDuration", "tooltipDelay", "controlledSelection", "selectedIds"], outputs: ["datasourceChange", "selectedIdsChange", "onBeforeDrop", "onNodeToggle", "onNodeSelect", "onNodeDoubleClick", "onNodeClick", "onSelectionChange", "onOrderChange", "onMoveChange", "onItemsChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPWidgetItemComponent, selector: "axp-widget-item", inputs: ["widget", "isSelected", "showPinButton", "customClasses"], outputs: ["onWidgetClick", "onPinClick"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type:
|
|
240
|
+
AXCommonModule }, { kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "ngmodule", type: AXDecoratorModule }, { kind: "component", type: i2.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorClearButtonComponent, selector: "ax-clear-button", inputs: ["icon"] }, { kind: "component", type: i2.AXDecoratorGenericComponent, selector: "ax-footer, ax-header, ax-content, ax-divider, ax-form-hint, ax-prefix, ax-suffix, ax-text, ax-title, ax-subtitle, ax-placeholder, ax-overlay" }, { kind: "ngmodule", type: AXSearchBoxModule }, { kind: "component", type: i4.AXSearchBoxComponent, selector: "ax-search-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "value", "state", "name", "id", "look", "class", "delayTime", "type", "autoSearch"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange", "onKeyDown", "onKeyUp", "onKeyPress"] }, { kind: "component", type: AXTreeViewComponent, selector: "ax-tree-view", inputs: ["datasource", "selectMode", "selectionBehavior", "dragArea", "dragBehavior", "showIcons", "showChildrenBadge", "expandedIcon", "collapsedIcon", "indentSize", "look", "alternate", "nodeTemplate", "idField", "titleField", "highlightText", "tooltipField", "iconField", "expandedField", "selectedField", "indeterminateField", "disabledField", "hiddenField", "childrenField", "childrenCountField", "dataField", "inheritDisabled", "expandOnDoubleClick", "doubleClickDuration", "tooltipDelay", "controlledSelection", "selectedIds"], outputs: ["datasourceChange", "selectedIdsChange", "onBeforeDrop", "onNodeToggle", "onNodeSelect", "onNodeDoubleClick", "onNodeClick", "onSelectionChange", "onOrderChange", "onMoveChange", "onItemsChange"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "component", type: AXPWidgetItemComponent, selector: "axp-widget-item", inputs: ["widget", "isSelected", "showPinButton", "customClasses"], outputs: ["onWidgetClick", "onPinClick"] }, { kind: "component", type: AXPStateMessageComponent, selector: "axp-state-message", inputs: ["mode", "icon", "title", "description", "titleParams", "descriptionParams", "look"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.Eager, encapsulation: i0.ViewEncapsulation.None }); }
|
|
241
241
|
}
|
|
242
242
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXPTemplateWidgetPickerComponent, decorators: [{
|
|
243
243
|
type: Component,
|
|
@@ -257,4 +257,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
257
257
|
}], propDecorators: { searchTerm: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchTerm", required: false }] }, { type: i0.Output, args: ["searchTermChange"] }] } });
|
|
258
258
|
|
|
259
259
|
export { AXPTemplateWidgetPickerComponent };
|
|
260
|
-
//# sourceMappingURL=acorex-platform-module-assessment-management-client-template-picker.component-
|
|
260
|
+
//# sourceMappingURL=acorex-platform-module-assessment-management-client-template-picker.component-DzboI7GV.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-assessment-management-client-template-picker.component-D_UCdFOH.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/designer/components/template-picker/template-picker.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/form-template/designer/components/template-picker/template-picker.component.html"],"sourcesContent":["import { AXCommonModule } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n inject,\n model,\n signal,\n ViewEncapsulation,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { orderBy } from 'lodash';\nimport { AXPTemplateWidgetListItem } from './template.provider';\n\nimport { AXTreeViewComponent, AXTreeViewNode, AXTreeViewNodeClickEvent, AXTreeViewNodeToggleEvent } from '@acorex/components/tree-view';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPStateMessageComponent,\n AXPWidgetItemClickEvent,\n AXPWidgetItemComponent,\n AXPWidgetItemData,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { RootConfig } from '@acorex-platform/module-assessment-management-client/contracts';\n\nexport interface AXPDisplayWidgetProvided extends AXPTemplateWidgetListItem {\n pinned: boolean;\n}\n\nexport interface AXPCategoryDisplayModel extends AXTreeViewNode {\n id: string;\n title: string;\n parentId?: string;\n childrenCount: number;\n expanded?: boolean;\n}\n\n/**\n * Maps AXPDisplayWidgetProvided to generic AXPWidgetItemData\n */\nfunction mapToWidgetItemData(widget: AXPDisplayWidgetProvided): AXPWidgetItemData {\n return {\n title: widget.title,\n description: widget.description,\n icon: widget.icon ?? 'fa-solid fa-cube',\n isPinned: widget.pinned,\n data: widget,\n };\n}\n\n@Component({\n imports: [\n CommonModule,\n FormsModule,\n //\n AXCommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXSearchBoxModule,\n AXTreeViewComponent,\n AXTranslationModule,\n AXPWidgetItemComponent,\n AXPStateMessageComponent,\n ],\n templateUrl: './template-picker.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPTemplateWidgetPickerComponent extends AXBasePageComponent {\n private settingsService = inject(AXPSettingsService);\n private entityService = inject(AXPEntityService);\n private categoryEntityDataAccessor = this.entityService\n .withEntity(RootConfig.module.name, 'Category')\n .data<any, any>();\n\n private readonly expandedCategoriesKey = 'forms:templates:picker:expandedCategories';\n\n // Track expanded category IDs\n private expandedCategoryIds = signal<string[]>([]);\n\n protected override async ngOnInit() {\n super.ngOnInit();\n // Load expanded categories from settings\n const savedExpandedIds = (await this.settingsService.get<string[]>(this.expandedCategoriesKey)) || [];\n this.expandedCategoryIds.set(savedExpandedIds);\n //\n const pinnedWidgets = (await this.settingsService.get<string[]>(this.pinnedSettingKey)) || [];\n this.displayWidgets.set(\n this.widgets.map((c) => ({\n ...c,\n pinned: pinnedWidgets.includes(c.id),\n icon: c.icon ?? 'fa-solid fa-file-invoice',\n })),\n );\n }\n\n private readonly pinnedSettingKey = 'forms:templates:picker:pinned';\n\n protected searchTerm = model('');\n\n // Data properties - populated by popup service\n widgets: AXPTemplateWidgetListItem[] = [];\n\n // Signals\n private displayWidgets = signal<AXPDisplayWidgetProvided[]>([]);\n\n // Signal to track selected widgets\n protected selectedWidgets = signal<AXPDisplayWidgetProvided[]>([]);\n\n // Computed for filtered and ordered widget list\n private orderedList = computed(() => {\n const search = this.searchTerm().toLowerCase();\n const selectedCategory = this.selectedCategory();\n const selectedCategoryId = selectedCategory ? selectedCategory.id : null;\n\n const filterByCategory = (widget: AXPDisplayWidgetProvided) => {\n if (!selectedCategoryId || selectedCategoryId == 'all') return true;\n return selectedCategoryId === widget.group.name;\n };\n\n return orderBy(\n this.displayWidgets().filter((w) => {\n const matchesCategory = filterByCategory(w);\n const matchesSearch =\n !search || w.title.toLowerCase().includes(search) || w.description?.toLowerCase().includes(search);\n return matchesCategory && matchesSearch;\n }),\n ['pinned', 'title'],\n ['desc', 'asc'],\n );\n });\n\n // Pinned and regular lists\n protected pinnedList = computed(() => this.orderedList().filter((c) => c.pinned));\n protected regularList = computed(() => this.orderedList().filter((c) => !c.pinned));\n\n // Mapped data for generic widget items\n protected pinnedWidgetItems = computed(() => this.pinnedList().map(mapToWidgetItemData));\n protected regularWidgetItems = computed(() => this.regularList().map(mapToWidgetItemData));\n\n // Computed property to check if we're in search mode\n protected isSearchMode = computed(() => this.searchTerm().trim().length > 0);\n\n // Computed property to check if there are any results\n protected hasResults = computed(() => this.orderedList().length > 0);\n\n protected handleWidgetClick(clickEvent: AXPWidgetItemClickEvent): void {\n const { event, widget } = clickEvent;\n const originalWidget = widget.data as AXPDisplayWidgetProvided;\n\n if (event.ctrlKey) {\n const currentSelection = this.selectedWidgets();\n const isAlreadySelected = currentSelection.some((w) => w === originalWidget);\n\n if (isAlreadySelected) {\n // Deselect widget if already selected\n this.selectedWidgets.set(currentSelection.filter((w) => w !== originalWidget));\n } else {\n // Add widget to selection\n this.selectedWidgets.set([...currentSelection, originalWidget]);\n }\n } else {\n // If CTRL is not pressed, select only the clicked widget\n this.close({ widgets: [originalWidget] });\n }\n }\n\n protected async handleWidgetPinClick(clickEvent: AXPWidgetItemClickEvent): Promise<void> {\n const { widget } = clickEvent;\n const originalWidget = widget.data as AXPDisplayWidgetProvided;\n\n originalWidget.pinned = !originalWidget.pinned;\n\n // Get the current list of pinned widgets from settings\n let pinnedWidgets = (await this.settingsService.get<string[]>(this.pinnedSettingKey)) || [];\n\n // Update the list of pinned widgets based on the pinned status\n if (originalWidget.pinned) {\n if (!pinnedWidgets.includes(originalWidget.id)) {\n pinnedWidgets.push(originalWidget.id);\n }\n } else {\n pinnedWidgets = pinnedWidgets.filter((name) => name !== originalWidget.id);\n }\n\n // Save the updated list of pinned widgets\n await this.settingsService.scope(AXPPlatformScope.User).set(this.pinnedSettingKey, pinnedWidgets);\n\n // Trigger a re-render of the widgets\n this.displayWidgets.set([...this.displayWidgets()]);\n }\n\n // Check if a widget is selected\n protected isWidgetSelected(widget: AXPDisplayWidgetProvided): boolean {\n return this.selectedWidgets().includes(widget);\n }\n\n // Check if a generic widget item is selected\n protected isWidgetItemSelected(widgetItem: AXPWidgetItemData): boolean {\n const originalWidget = widgetItem.data as AXPDisplayWidgetProvided;\n return this.isWidgetSelected(originalWidget);\n }\n\n protected handleConfirmSelection(): void {\n this.close({ widgets: this.selectedWidgets() });\n }\n\n //#region Category Tree\n\n protected provideLazyTreeView = async (selectedItemId?: string | number): Promise<AXTreeViewNode[]> => {\n if (selectedItemId == 'all') {\n const categories = await this.categoryEntityDataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: {\n type: 'isEmpty',\n },\n value: true,\n },\n });\n const items = categories.items.map((item: any) => ({\n id: item.id,\n title: item.title,\n childrenCount: item.childrenCount ?? 0,\n expanded: this.expandedCategoryIds().includes(item.id),\n }));\n return items;\n } else if (selectedItemId) {\n const categories = await this.categoryEntityDataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: selectedItemId as string,\n },\n });\n return categories.items.map((item: any) => ({\n id: item.id,\n title: item.title,\n parentId: item.parentId,\n childrenCount: item.childrenCount ?? 0,\n expanded: this.expandedCategoryIds().includes(item.id),\n }));\n } else {\n return [\n {\n childrenCount: 1,\n id: 'all',\n title: 'All Items',\n expanded: true,\n } as AXPCategoryDisplayModel,\n ];\n }\n };\n\n protected selectedCategory = signal<AXPCategoryDisplayModel | null>(null);\n\n protected handleNodeClick(event: AXTreeViewNodeClickEvent) {\n const item = event.node as AXPCategoryDisplayModel;\n this.selectedCategory.set(item);\n }\n\n protected async handleNodeToggle(event: AXTreeViewNodeToggleEvent) {\n const item = event.node as AXPCategoryDisplayModel;\n const isExpanded = event.node['expanded'] === true;\n const currentExpanded = this.expandedCategoryIds();\n\n if (isExpanded) {\n // Category was expanded - add to expanded list\n if (!currentExpanded.includes(item.id)) {\n const newExpanded = [...currentExpanded, item.id];\n this.expandedCategoryIds.set(newExpanded);\n await this.settingsService.scope(AXPPlatformScope.User).set(this.expandedCategoriesKey, newExpanded);\n }\n } else {\n // Category was collapsed - remove from expanded list\n const newExpanded = currentExpanded.filter((id) => id !== item.id);\n this.expandedCategoryIds.set(newExpanded);\n await this.settingsService.scope(AXPPlatformScope.User).set(this.expandedCategoriesKey, newExpanded);\n }\n }\n\n //#end region\n}\n","<div class=\"flex flex-col lg:h-[60vh]\">\n <div class=\"p-2 surface-lowest border-b flex-none\">\n <ax-search-box\n look=\"fill\"\n [placeholder]=\"'@form-template-management:designer.components.template-picker.search-placeholder' | translate | async\"\n class=\"ax-sm\"\n [(ngModel)]=\"searchTerm\"\n [delayTime]=\"300\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"flex flex-grow h-full\">\n <!-- Category Tree - Hidden in search mode -->\n @if (!isSearchMode()) {\n <div\n class=\"flex h-full p-2 overflow-auto w-1/3 justify-start items-start surface-lowest border-e\"\n >\n <ax-tree-view\n [selectMode]=\"'none'\"\n [dragBehavior]=\"'none'\"\n [showIcons]=\"false\"\n [showChildrenBadge]=\"false\"\n [nodeTemplate]=\"categoryTemplate\"\n [titleField]=\"'title'\"\n [idField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [datasource]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n (onNodeToggle)=\"handleNodeToggle($event)\"\n class=\"w-full\"\n >\n </ax-tree-view>\n\n <ng-template #categoryTemplate let-node=\"node\">\n @let item = node;\n <ax-icon class=\"fa-solid fa-folder text-yellow-500 fa-fw\"></ax-icon>\n {{ item.title | translate | async }}\n </ng-template>\n </div>\n }\n\n <!-- Widget Grid - Full width in search mode, 2/3 width otherwise -->\n <div\n [class]=\"\n isSearchMode()\n ? 'flex h-full flex-col w-full overflow-hidden'\n : 'flex h-full flex-col w-2/3 overflow-hidden'\n \"\n >\n @if (hasResults()) {\n <div class=\"flex flex-col p-4\">\n <div class=\"grid grid-cols-2 gap-2\">\n @for (widgetItem of pinnedWidgetItems(); track widgetItem.title) {\n <axp-widget-item\n [widget]=\"widgetItem\"\n [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n (onWidgetClick)=\"handleWidgetClick($event)\"\n (onPinClick)=\"handleWidgetPinClick($event)\"\n >\n </axp-widget-item>\n }\n </div>\n @if (pinnedWidgetItems().length) {\n <hr class=\"my-4 border-dashed\" />\n }\n <div class=\"grid grid-cols-2 gap-2\">\n @for (widgetItem of regularWidgetItems(); track widgetItem.title) {\n <axp-widget-item\n [widget]=\"widgetItem\"\n [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n (onWidgetClick)=\"handleWidgetClick($event)\"\n (onPinClick)=\"handleWidgetPinClick($event)\"\n >\n </axp-widget-item>\n }\n </div>\n </div>\n } @else {\n <!-- Empty State -->\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n isSearchMode()\n ? '@form-template-management:designer.components.template-picker.empty-states.no-search-results.title'\n : '@form-template-management:designer.components.template-picker.empty-states.no-category-results.title'\n \"\n [description]=\"\n isSearchMode()\n ? '@form-template-management:designer.components.template-picker.empty-states.no-search-results.description'\n : '@form-template-management:designer.components.template-picker.empty-states.no-category-results.description'\n \"\n >\n @if (isSearchMode()) {\n <ax-button\n look=\"blank\"\n [text]=\"'@form-template-management:designer.components.template-picker.clear-search' | translate | async\"\n class=\"mt-4\"\n (onClick)=\"searchTerm.set('')\"\n ></ax-button>\n }\n </axp-state-message>\n }\n </div>\n </div>\n</div>\n\n@if (selectedWidgets().length) {\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:designer.components.widget-picker.selected-count' | translate: { params: { count: selectedWidgets().length } } | async\"\n (onClick)=\"handleConfirmSelection()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n}\n"],"names":["i1","i2","i3","i5","i6"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-assessment-management-client-template-picker.component-DzboI7GV.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/designer/components/template-picker/template-picker.component.ts","../../../../libs/modules/assessment-management/client/src/lib/features/form-template/designer/components/template-picker/template-picker.component.html"],"sourcesContent":["import { AXCommonModule } from '@acorex/cdk/common';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXBasePageComponent } from '@acorex/components/page';\nimport { AXSearchBoxModule } from '@acorex/components/search-box';\nimport { AXPSettingsService } from '@acorex-platform/framework-client/common';\nimport { AXPPlatformScope } from '@acorex-platform/framework-shared/core';\nimport { CommonModule } from '@angular/common';\nimport {\n Component,\n computed,\n inject,\n model,\n signal,\n ViewEncapsulation,\n ChangeDetectionStrategy\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { orderBy } from 'lodash';\nimport { AXPTemplateWidgetListItem } from './template.provider';\n\nimport { AXTreeViewComponent, AXTreeViewNode, AXTreeViewNodeClickEvent, AXTreeViewNodeToggleEvent } from '@acorex/components/tree-view';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport {\n AXPStateMessageComponent,\n AXPWidgetItemClickEvent,\n AXPWidgetItemComponent,\n AXPWidgetItemData,\n} from '@acorex-platform/framework-client/layout/components';\nimport { AXPEntityService } from '@acorex-platform/framework-client/layout/entity';\nimport { RootConfig } from '@acorex-platform/module-assessment-management-client/contracts';\n\nexport interface AXPDisplayWidgetProvided extends AXPTemplateWidgetListItem {\n pinned: boolean;\n}\n\nexport interface AXPCategoryDisplayModel extends AXTreeViewNode {\n id: string;\n title: string;\n parentId?: string;\n childrenCount: number;\n expanded?: boolean;\n}\n\n/**\n * Maps AXPDisplayWidgetProvided to generic AXPWidgetItemData\n */\nfunction mapToWidgetItemData(widget: AXPDisplayWidgetProvided): AXPWidgetItemData {\n return {\n title: widget.title,\n description: widget.description,\n icon: widget.icon ?? 'fa-solid fa-cube',\n isPinned: widget.pinned,\n data: widget,\n };\n}\n\n@Component({\n imports: [\n CommonModule,\n FormsModule,\n //\n AXCommonModule,\n AXButtonModule,\n AXDecoratorModule,\n AXSearchBoxModule,\n AXTreeViewComponent,\n AXTranslationModule,\n AXPWidgetItemComponent,\n AXPStateMessageComponent,\n ],\n templateUrl: './template-picker.component.html',\n changeDetection: ChangeDetectionStrategy.Eager,\n encapsulation: ViewEncapsulation.None,\n})\nexport class AXPTemplateWidgetPickerComponent extends AXBasePageComponent {\n private settingsService = inject(AXPSettingsService);\n private entityService = inject(AXPEntityService);\n private categoryEntityDataAccessor = this.entityService\n .withEntity(RootConfig.module.name, 'Category')\n .data<any, any>();\n\n private readonly expandedCategoriesKey = 'forms:templates:picker:expandedCategories';\n\n // Track expanded category IDs\n private expandedCategoryIds = signal<string[]>([]);\n\n protected override async ngOnInit() {\n super.ngOnInit();\n // Load expanded categories from settings\n const savedExpandedIds = (await this.settingsService.get<string[]>(this.expandedCategoriesKey)) || [];\n this.expandedCategoryIds.set(savedExpandedIds);\n //\n const pinnedWidgets = (await this.settingsService.get<string[]>(this.pinnedSettingKey)) || [];\n this.displayWidgets.set(\n this.widgets.map((c) => ({\n ...c,\n pinned: pinnedWidgets.includes(c.id),\n icon: c.icon ?? 'fa-solid fa-file-invoice',\n })),\n );\n }\n\n private readonly pinnedSettingKey = 'forms:templates:picker:pinned';\n\n protected searchTerm = model('');\n\n // Data properties - populated by popup service\n widgets: AXPTemplateWidgetListItem[] = [];\n\n // Signals\n private displayWidgets = signal<AXPDisplayWidgetProvided[]>([]);\n\n // Signal to track selected widgets\n protected selectedWidgets = signal<AXPDisplayWidgetProvided[]>([]);\n\n // Computed for filtered and ordered widget list\n private orderedList = computed(() => {\n const search = this.searchTerm().toLowerCase();\n const selectedCategory = this.selectedCategory();\n const selectedCategoryId = selectedCategory ? selectedCategory.id : null;\n\n const filterByCategory = (widget: AXPDisplayWidgetProvided) => {\n if (!selectedCategoryId || selectedCategoryId == 'all') return true;\n return selectedCategoryId === widget.group.name;\n };\n\n return orderBy(\n this.displayWidgets().filter((w) => {\n const matchesCategory = filterByCategory(w);\n const matchesSearch =\n !search || w.title.toLowerCase().includes(search) || w.description?.toLowerCase().includes(search);\n return matchesCategory && matchesSearch;\n }),\n ['pinned', 'title'],\n ['desc', 'asc'],\n );\n });\n\n // Pinned and regular lists\n protected pinnedList = computed(() => this.orderedList().filter((c) => c.pinned));\n protected regularList = computed(() => this.orderedList().filter((c) => !c.pinned));\n\n // Mapped data for generic widget items\n protected pinnedWidgetItems = computed(() => this.pinnedList().map(mapToWidgetItemData));\n protected regularWidgetItems = computed(() => this.regularList().map(mapToWidgetItemData));\n\n // Computed property to check if we're in search mode\n protected isSearchMode = computed(() => this.searchTerm().trim().length > 0);\n\n // Computed property to check if there are any results\n protected hasResults = computed(() => this.orderedList().length > 0);\n\n protected handleWidgetClick(clickEvent: AXPWidgetItemClickEvent): void {\n const { event, widget } = clickEvent;\n const originalWidget = widget.data as AXPDisplayWidgetProvided;\n\n if (event.ctrlKey) {\n const currentSelection = this.selectedWidgets();\n const isAlreadySelected = currentSelection.some((w) => w === originalWidget);\n\n if (isAlreadySelected) {\n // Deselect widget if already selected\n this.selectedWidgets.set(currentSelection.filter((w) => w !== originalWidget));\n } else {\n // Add widget to selection\n this.selectedWidgets.set([...currentSelection, originalWidget]);\n }\n } else {\n // If CTRL is not pressed, select only the clicked widget\n this.close({ widgets: [originalWidget] });\n }\n }\n\n protected async handleWidgetPinClick(clickEvent: AXPWidgetItemClickEvent): Promise<void> {\n const { widget } = clickEvent;\n const originalWidget = widget.data as AXPDisplayWidgetProvided;\n\n originalWidget.pinned = !originalWidget.pinned;\n\n // Get the current list of pinned widgets from settings\n let pinnedWidgets = (await this.settingsService.get<string[]>(this.pinnedSettingKey)) || [];\n\n // Update the list of pinned widgets based on the pinned status\n if (originalWidget.pinned) {\n if (!pinnedWidgets.includes(originalWidget.id)) {\n pinnedWidgets.push(originalWidget.id);\n }\n } else {\n pinnedWidgets = pinnedWidgets.filter((name) => name !== originalWidget.id);\n }\n\n // Save the updated list of pinned widgets\n await this.settingsService.scope(AXPPlatformScope.User).set(this.pinnedSettingKey, pinnedWidgets);\n\n // Trigger a re-render of the widgets\n this.displayWidgets.set([...this.displayWidgets()]);\n }\n\n // Check if a widget is selected\n protected isWidgetSelected(widget: AXPDisplayWidgetProvided): boolean {\n return this.selectedWidgets().includes(widget);\n }\n\n // Check if a generic widget item is selected\n protected isWidgetItemSelected(widgetItem: AXPWidgetItemData): boolean {\n const originalWidget = widgetItem.data as AXPDisplayWidgetProvided;\n return this.isWidgetSelected(originalWidget);\n }\n\n protected handleConfirmSelection(): void {\n this.close({ widgets: this.selectedWidgets() });\n }\n\n //#region Category Tree\n\n protected provideLazyTreeView = async (selectedItemId?: string | number): Promise<AXTreeViewNode[]> => {\n if (selectedItemId == 'all') {\n const categories = await this.categoryEntityDataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: {\n type: 'isEmpty',\n },\n value: true,\n },\n });\n const items = categories.items.map((item: any) => ({\n id: item.id,\n title: item.title,\n childrenCount: item.childrenCount ?? 0,\n expanded: this.expandedCategoryIds().includes(item.id),\n }));\n return items;\n } else if (selectedItemId) {\n const categories = await this.categoryEntityDataAccessor.query({\n skip: 0,\n take: 1000,\n filter: {\n field: 'parentId',\n operator: {\n type: 'equal',\n },\n value: selectedItemId as string,\n },\n });\n return categories.items.map((item: any) => ({\n id: item.id,\n title: item.title,\n parentId: item.parentId,\n childrenCount: item.childrenCount ?? 0,\n expanded: this.expandedCategoryIds().includes(item.id),\n }));\n } else {\n return [\n {\n childrenCount: 1,\n id: 'all',\n title: 'All Items',\n expanded: true,\n } as AXPCategoryDisplayModel,\n ];\n }\n };\n\n protected selectedCategory = signal<AXPCategoryDisplayModel | null>(null);\n\n protected handleNodeClick(event: AXTreeViewNodeClickEvent) {\n const item = event.node as AXPCategoryDisplayModel;\n this.selectedCategory.set(item);\n }\n\n protected async handleNodeToggle(event: AXTreeViewNodeToggleEvent) {\n const item = event.node as AXPCategoryDisplayModel;\n const isExpanded = event.node['expanded'] === true;\n const currentExpanded = this.expandedCategoryIds();\n\n if (isExpanded) {\n // Category was expanded - add to expanded list\n if (!currentExpanded.includes(item.id)) {\n const newExpanded = [...currentExpanded, item.id];\n this.expandedCategoryIds.set(newExpanded);\n await this.settingsService.scope(AXPPlatformScope.User).set(this.expandedCategoriesKey, newExpanded);\n }\n } else {\n // Category was collapsed - remove from expanded list\n const newExpanded = currentExpanded.filter((id) => id !== item.id);\n this.expandedCategoryIds.set(newExpanded);\n await this.settingsService.scope(AXPPlatformScope.User).set(this.expandedCategoriesKey, newExpanded);\n }\n }\n\n //#end region\n}\n","<div class=\"flex flex-col lg:h-[60vh]\">\n <div class=\"p-2 surface-lowest border-b flex-none\">\n <ax-search-box\n look=\"fill\"\n [placeholder]=\"'@form-template-management:designer.components.template-picker.search-placeholder' | translate | async\"\n class=\"ax-sm\"\n [(ngModel)]=\"searchTerm\"\n [delayTime]=\"300\"\n >\n <ax-clear-button></ax-clear-button>\n </ax-search-box>\n </div>\n <div class=\"flex flex-grow h-full\">\n <!-- Category Tree - Hidden in search mode -->\n @if (!isSearchMode()) {\n <div\n class=\"flex h-full p-2 overflow-auto w-1/3 justify-start items-start surface-lowest border-e\"\n >\n <ax-tree-view\n [selectMode]=\"'none'\"\n [dragBehavior]=\"'none'\"\n [showIcons]=\"false\"\n [showChildrenBadge]=\"false\"\n [nodeTemplate]=\"categoryTemplate\"\n [titleField]=\"'title'\"\n [idField]=\"'id'\"\n [expandedField]=\"'expanded'\"\n [datasource]=\"provideLazyTreeView\"\n (onNodeClick)=\"handleNodeClick($event)\"\n (onNodeToggle)=\"handleNodeToggle($event)\"\n class=\"w-full\"\n >\n </ax-tree-view>\n\n <ng-template #categoryTemplate let-node=\"node\">\n @let item = node;\n <ax-icon class=\"fa-solid fa-folder text-yellow-500 fa-fw\"></ax-icon>\n {{ item.title | translate | async }}\n </ng-template>\n </div>\n }\n\n <!-- Widget Grid - Full width in search mode, 2/3 width otherwise -->\n <div\n [class]=\"\n isSearchMode()\n ? 'flex h-full flex-col w-full overflow-hidden'\n : 'flex h-full flex-col w-2/3 overflow-hidden'\n \"\n >\n @if (hasResults()) {\n <div class=\"flex flex-col p-4\">\n <div class=\"grid grid-cols-2 gap-2\">\n @for (widgetItem of pinnedWidgetItems(); track widgetItem.title) {\n <axp-widget-item\n [widget]=\"widgetItem\"\n [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n (onWidgetClick)=\"handleWidgetClick($event)\"\n (onPinClick)=\"handleWidgetPinClick($event)\"\n >\n </axp-widget-item>\n }\n </div>\n @if (pinnedWidgetItems().length) {\n <hr class=\"my-4 border-dashed\" />\n }\n <div class=\"grid grid-cols-2 gap-2\">\n @for (widgetItem of regularWidgetItems(); track widgetItem.title) {\n <axp-widget-item\n [widget]=\"widgetItem\"\n [isSelected]=\"isWidgetItemSelected(widgetItem)\"\n (onWidgetClick)=\"handleWidgetClick($event)\"\n (onPinClick)=\"handleWidgetPinClick($event)\"\n >\n </axp-widget-item>\n }\n </div>\n </div>\n } @else {\n <!-- Empty State -->\n <axp-state-message\n icon=\"fa-light fa-search\"\n [title]=\"\n isSearchMode()\n ? '@form-template-management:designer.components.template-picker.empty-states.no-search-results.title'\n : '@form-template-management:designer.components.template-picker.empty-states.no-category-results.title'\n \"\n [description]=\"\n isSearchMode()\n ? '@form-template-management:designer.components.template-picker.empty-states.no-search-results.description'\n : '@form-template-management:designer.components.template-picker.empty-states.no-category-results.description'\n \"\n >\n @if (isSearchMode()) {\n <ax-button\n look=\"blank\"\n [text]=\"'@form-template-management:designer.components.template-picker.clear-search' | translate | async\"\n class=\"mt-4\"\n (onClick)=\"searchTerm.set('')\"\n ></ax-button>\n }\n </axp-state-message>\n }\n </div>\n </div>\n</div>\n\n@if (selectedWidgets().length) {\n <ax-footer>\n <ax-suffix>\n <ax-button\n look=\"solid\"\n color=\"primary\"\n [text]=\"'@form-template-management:designer.components.widget-picker.selected-count' | translate: { params: { count: selectedWidgets().length } } | async\"\n (onClick)=\"handleConfirmSelection()\"\n ></ax-button>\n </ax-suffix>\n </ax-footer>\n}\n"],"names":["i1","i2","i3","i5","i6"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@ import * as i1 from '@acorex-platform/framework-client/layout/widget-core';
|
|
|
3
3
|
import { AXPValueWidgetComponent, AXPWidgetCoreModule } from '@acorex-platform/framework-client/layout/widget-core';
|
|
4
4
|
import * as i0 from '@angular/core';
|
|
5
5
|
import { inject, computed, signal, effect, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
6
|
-
import {
|
|
6
|
+
import { u as AXPTemplateWidgetProviderService } from './acorex-platform-module-assessment-management-client-acorex-platform-module-assessment-management-client-sm_OxV_k.mjs';
|
|
7
7
|
|
|
8
8
|
class AXPTemplateWidgetEditComponent extends AXPValueWidgetComponent {
|
|
9
9
|
// protected allowRemove = computed<boolean>(() => this.options()['allowRemove'] as boolean ?? false);
|
|
@@ -104,4 +104,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
104
104
|
}], ctorParameters: () => [] });
|
|
105
105
|
|
|
106
106
|
export { AXPTemplateWidgetEditComponent };
|
|
107
|
-
//# sourceMappingURL=acorex-platform-module-assessment-management-client-template-widget-edit.component-
|
|
107
|
+
//# sourceMappingURL=acorex-platform-module-assessment-management-client-template-widget-edit.component-BhW_Wn7N.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-assessment-management-client-template-widget-edit.component-
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-assessment-management-client-template-widget-edit.component-BhW_Wn7N.mjs","sources":["../../../../libs/modules/assessment-management/client/src/lib/features/form-template/designer/widgets/template/template-widget-edit.component.ts"],"sourcesContent":["import type { AXPWidgetNode } from '@acorex-platform/framework-shared/core';\nimport { AXTranslationModule } from '@acorex/core/translation';\nimport { AXPWidgetCoreModule, AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\n\n\nimport { ChangeDetectionStrategy, Component, computed, effect, inject, signal } from '@angular/core';\nimport { AXPTemplateWidgetProviderService } from '../../components/template-picker/template.provider';\n\n@Component({\n selector: 'axp-template-widget-edit',\n template: `\n @for (node of nodes(); track $index) {\n <ng-container axp-widget-renderer\n [node]=\"node\"\n [parentNode]=\"this\"\n [mode]=\"this.mode\">\n </ng-container>\n }\n <!-- @if(nodes().length>0) {\n <ng-container>\n \n </ng-container> -->\n <!-- @if(showRemove())\n {\n <div\n class=\"text-danger-500 hover:text-danger-800 mt-2 text-xs cursor-pointer\"\n (click)=\"handleRemoveClick()\"\n >\n {{ '@form-template-management:templates.terms.remove-template' | translate | async }}\n </div>\n }\n } \n @else {\n <span\n class=\"underline decoration-dotted underline-offset-8 hover:text-primary-500 cursor-pointer\"\n (click)=\"handleSelectClick()\"\n >\n {{ '@form-template-management:templates.terms.choose-template' | translate | async }}\n </span>\n } -->\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXPWidgetCoreModule, AXTranslationModule]\n})\nexport class AXPTemplateWidgetEditComponent extends AXPValueWidgetComponent {\n private metaKey = '__meta__';\n\n private templateProvider = inject(AXPTemplateWidgetProviderService);\n protected templateId = computed<string>(() => this.options()['templateId'] as string);\n protected nodes = signal<AXPWidgetNode[]>([]);\n // protected allowRemove = computed<boolean>(() => this.options()['allowRemove'] as boolean ?? false);\n\n\n // protected showRemove = computed(() => {\n // return this.allowRemove() && this.parent?.config.name != 'template';\n // });\n\n constructor() {\n super();\n //\n effect(\n async () => {\n this.nodes.set([]);\n const templateId = this.templateId();\n if (templateId) {\n const item = await this.templateProvider.get(templateId);\n if (item) {\n this.nodes.set(item.nodes);\n }\n }\n }\n );\n }\n\n //TODO: make a new widget to handle select widget in edit mode\n // protected async handleSelectClick() {\n // const result = await this.templateProvider.chooseTemplate();\n // if (result) {\n // this.setOptions({ templateId: result.id });\n // const value = this.getValue() ?? {};\n // set(value, this.metaKey, { templateId: result.id });\n // this.setValue(value);\n // }\n // }\n\n // protected async handleRemoveClick() {\n // this.setOptions({ templateId: null });\n // this.setValue(null);\n // }\n}\n"],"names":[],"mappings":";;;;;;;AA4CM,MAAO,8BAA+B,SAAQ,uBAAuB,CAAA;;;;;AAazE,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAbD,IAAA,CAAA,OAAO,GAAG,UAAU;AAEpB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gCAAgC,CAAC;AACzD,QAAA,IAAA,CAAA,UAAU,GAAG,QAAQ,CAAS,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,YAAY,CAAW;uFAAC;QAC3E,IAAA,CAAA,KAAK,GAAG,MAAM,CAAkB,EAAE;kFAAC;;QAW3C,MAAM,CACJ,YAAW;AACT,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAClB,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE;YACpC,IAAI,UAAU,EAAE;gBACd,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;gBACxD,IAAI,IAAI,EAAE;oBACR,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC5B;YACF;AACF,QAAA,CAAC,CACF;IACH;8GA5BW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,8BAA8B,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAlC/B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BT,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAES,mBAAmB,uQAAE,mBAAmB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA;;2FAEvC,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBApC1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,0BAA0B;AACpC,oBAAA,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BT,EAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,OAAO,EAAE,CAAC,mBAAmB,EAAE,mBAAmB;AACnD,iBAAA;;;"}
|