@acorex-platform/module-maintenance-management-client 0.0.21

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 (45) hide show
  1. package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-BiQlJxPX.mjs +2698 -0
  2. package/fesm2022/acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-BiQlJxPX.mjs.map +1 -0
  3. package/fesm2022/acorex-platform-module-maintenance-management-client-contracts.mjs +405 -0
  4. package/fesm2022/acorex-platform-module-maintenance-management-client-contracts.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-xxvOfIxf.mjs +141 -0
  6. package/fesm2022/acorex-platform-module-maintenance-management-client-create-or-get-work-report-draft.activity-xxvOfIxf.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-module-maintenance-management-client-failure-register-status.provider-CLBaQy_e.mjs +181 -0
  8. package/fesm2022/acorex-platform-module-maintenance-management-client-failure-register-status.provider-CLBaQy_e.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-maintenance-management-client-fill-work-report-completion.command-Capowl1e.mjs +174 -0
  10. package/fesm2022/acorex-platform-module-maintenance-management-client-fill-work-report-completion.command-Capowl1e.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-maintenance-management-client-open-work-report-from-work-order.command-B0O4fWPt.mjs +105 -0
  12. package/fesm2022/acorex-platform-module-maintenance-management-client-open-work-report-from-work-order.command-B0O4fWPt.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-CxRfaf0G.mjs +152 -0
  14. package/fesm2022/acorex-platform-module-maintenance-management-client-record-work-report-assessment.activity-CxRfaf0G.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-person-user-id.activity-nwXAJHkd.mjs +57 -0
  16. package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-person-user-id.activity-nwXAJHkd.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-work-order.activity-q5WM7Sv5.mjs +92 -0
  18. package/fesm2022/acorex-platform-module-maintenance-management-client-resolve-work-order.activity-q5WM7Sv5.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow.command-B06a962Y.mjs +402 -0
  20. package/fesm2022/acorex-platform-module-maintenance-management-client-start-work-order-flow.command-B06a962Y.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-completed.activity-Di4R6LQl.mjs +89 -0
  22. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-completed.activity-Di4R6LQl.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-CzkCCl1L.mjs +96 -0
  24. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-order-in-progress.activity-CzkCCl1L.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-report-on-completion.activity-_B0SUFtQ.mjs +142 -0
  26. package/fesm2022/acorex-platform-module-maintenance-management-client-update-work-report-on-completion.activity-_B0SUFtQ.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-maintenance-management-client-validate-work-order-completion.activity-RA2zaQHH.mjs +83 -0
  28. package/fesm2022/acorex-platform-module-maintenance-management-client-validate-work-order-completion.activity-RA2zaQHH.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-list-command-Bh_6PS5w.mjs +153 -0
  30. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-list-command-Bh_6PS5w.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-status.provider-DvBk5kAW.mjs +186 -0
  32. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-status.provider-DvBk5kAW.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-work-report-column.component-Bf1WZWIS.mjs +163 -0
  34. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-work-report-column.component-Bf1WZWIS.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-Dth3Z9fW.mjs +320 -0
  36. package/fesm2022/acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-Dth3Z9fW.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs +74 -0
  38. package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs.map +1 -0
  39. package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-checklist-results-view.component-BSFW0Yt-.mjs +149 -0
  40. package/fesm2022/acorex-platform-module-maintenance-management-client-work-report-checklist-results-view.component-BSFW0Yt-.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-module-maintenance-management-client.mjs +2 -0
  42. package/fesm2022/acorex-platform-module-maintenance-management-client.mjs.map +1 -0
  43. package/package.json +28 -0
  44. package/types/acorex-platform-module-maintenance-management-client-contracts.d.ts +1081 -0
  45. package/types/acorex-platform-module-maintenance-management-client.d.ts +54 -0
@@ -0,0 +1,320 @@
1
+ import * as i1 from '@acorex/components/button';
2
+ import { AXButtonModule } from '@acorex/components/button';
3
+ import * as i2 from '@acorex/components/decorators';
4
+ import { AXDecoratorModule } from '@acorex/components/decorators';
5
+ import * as i3 from '@acorex/components/dropdown';
6
+ import { AXDropdownModule } from '@acorex/components/dropdown';
7
+ import * as i4 from '@acorex/components/loading';
8
+ import { AXLoadingModule } from '@acorex/components/loading';
9
+ import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
10
+ import { AXPEntityService, getRecordWorkflowInstanceId } from '@acorex-platform/framework-client/layout/entity';
11
+ import { AXPColumnWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
12
+ import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
13
+ import * as i0 from '@angular/core';
14
+ import { inject, signal, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
15
+ import { get, defaultTo, isString } from 'lodash';
16
+ import { AXMWorkOrderStatus, RootConfig, AXMMaintenanceManagementCommandKeys } from '@acorex-platform/module-maintenance-management-client/contracts';
17
+ import { q as queryWorkflowTemplatesForAsset, r as resolveDisplayLabel } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-BiQlJxPX.mjs';
18
+
19
+ //#region ---- Imports ----
20
+ const STARTABLE_STATUSES = new Set([
21
+ AXMWorkOrderStatus.Planned,
22
+ AXMWorkOrderStatus.Scheduled,
23
+ AXMWorkOrderStatus.Assigned,
24
+ ]);
25
+ //#endregion
26
+ //#region ---- Component ----
27
+ class AXMWorkOrderWorkflowColumnComponent extends AXPColumnWidgetComponent {
28
+ //#endregion
29
+ //#region ---- Lifecycle ----
30
+ constructor() {
31
+ super();
32
+ //#region ---- Services & Dependencies ----
33
+ this.entityService = inject(AXPEntityService);
34
+ this.commandService = inject(AXPCommandService);
35
+ this.translation = inject(AXTranslationService);
36
+ //#endregion
37
+ //#region ---- State ----
38
+ this.isLoading = signal(false, /* @ts-ignore */
39
+ ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
40
+ this.isBusy = signal(false, /* @ts-ignore */
41
+ ...(ngDevMode ? [{ debugName: "isBusy" }] : /* istanbul ignore next */ []));
42
+ this.templates = signal([], /* @ts-ignore */
43
+ ...(ngDevMode ? [{ debugName: "templates" }] : /* istanbul ignore next */ []));
44
+ this.activeWorkflowLabel = signal('', /* @ts-ignore */
45
+ ...(ngDevMode ? [{ debugName: "activeWorkflowLabel" }] : /* istanbul ignore next */ []));
46
+ this.canSelect = signal(false, /* @ts-ignore */
47
+ ...(ngDevMode ? [{ debugName: "canSelect" }] : /* istanbul ignore next */ []));
48
+ this.selectLabel = signal('', /* @ts-ignore */
49
+ ...(ngDevMode ? [{ debugName: "selectLabel" }] : /* istanbul ignore next */ []));
50
+ effect(() => {
51
+ const row = this.rowData;
52
+ untracked(() => {
53
+ void this.syncRowState(row);
54
+ });
55
+ });
56
+ }
57
+ //#endregion
58
+ //#region ---- UI Handlers ----
59
+ /** Prevents grid row default / double-click actions when interacting with this column. */
60
+ onColumnClick(event) {
61
+ event.stopPropagation();
62
+ event.preventDefault();
63
+ }
64
+ async selectTemplate(template) {
65
+ if (this.isBusy() || !template.id) {
66
+ return;
67
+ }
68
+ const row = this.rowData;
69
+ const workOrderId = this.resolveText(get(row, 'id'));
70
+ if (!workOrderId) {
71
+ return;
72
+ }
73
+ this.isBusy.set(true);
74
+ try {
75
+ const entitySource = `${RootConfig.module.name}.${RootConfig.entities.workOrder.name}`;
76
+ const result = await this.commandService.execute(AXMMaintenanceManagementCommandKeys.WorkOrder.StartFlow, {
77
+ entity: entitySource,
78
+ data: {
79
+ ...defaultTo(row, {}),
80
+ id: workOrderId,
81
+ maintenanceTemplateId: template.id,
82
+ },
83
+ });
84
+ if (result?.success) {
85
+ const updated = (await this.entityService
86
+ .withEntity(RootConfig.module.name, RootConfig.entities.workOrder.name)
87
+ .data()
88
+ .byKey(workOrderId));
89
+ if (row && updated) {
90
+ Object.assign(row, updated);
91
+ await this.syncRowState(row);
92
+ }
93
+ }
94
+ else if (row) {
95
+ const updated = (await this.entityService
96
+ .withEntity(RootConfig.module.name, RootConfig.entities.workOrder.name)
97
+ .data()
98
+ .byKey(workOrderId)
99
+ .catch(() => null));
100
+ if (updated) {
101
+ Object.assign(row, updated);
102
+ await this.syncRowState(row);
103
+ }
104
+ }
105
+ }
106
+ finally {
107
+ this.isBusy.set(false);
108
+ }
109
+ }
110
+ //#endregion
111
+ //#region ---- Helpers ----
112
+ async syncRowState(row) {
113
+ this.isLoading.set(true);
114
+ try {
115
+ this.selectLabel.set(await this.translation.translateAsync('@maintenance-management:work-orders.entities.work-order.fields.workflow-column.select-workflow'));
116
+ if (!row) {
117
+ this.templates.set([]);
118
+ this.activeWorkflowLabel.set('');
119
+ this.canSelect.set(false);
120
+ return;
121
+ }
122
+ if (getRecordWorkflowInstanceId(row)) {
123
+ this.templates.set([]);
124
+ this.canSelect.set(false);
125
+ this.activeWorkflowLabel.set(this.resolveActiveWorkflowLabel(row));
126
+ return;
127
+ }
128
+ const statusId = this.resolveText(get(row, 'statusId'));
129
+ const assetId = this.resolveText(get(row, 'assetId'));
130
+ const canStart = STARTABLE_STATUSES.has(statusId) && !!assetId;
131
+ this.canSelect.set(canStart);
132
+ this.activeWorkflowLabel.set('');
133
+ if (!canStart || !assetId) {
134
+ this.templates.set([]);
135
+ return;
136
+ }
137
+ const backend = this.createStorageBackend();
138
+ const templateEntityName = `${RootConfig.module.name}.${RootConfig.entities.maintenanceTemplate.name}`;
139
+ const rawTemplates = await queryWorkflowTemplatesForAsset(backend, templateEntityName, assetId);
140
+ const locale = this.translation.getActiveLang();
141
+ this.templates.set([...rawTemplates]
142
+ .sort((a, b) => {
143
+ const ta = resolveDisplayLabel(a.title, a.code ?? a.id, locale);
144
+ const tb = resolveDisplayLabel(b.title, b.code ?? b.id, locale);
145
+ return ta.localeCompare(tb, locale, { sensitivity: 'base' });
146
+ })
147
+ .map((template) => ({
148
+ id: template.id,
149
+ title: resolveDisplayLabel(template.title, template.code ?? template.id, locale),
150
+ })));
151
+ }
152
+ finally {
153
+ this.isLoading.set(false);
154
+ }
155
+ }
156
+ resolveActiveWorkflowLabel(row) {
157
+ const locale = this.translation.getActiveLang();
158
+ const workflowConfig = get(row, 'maintenanceTemplate.workflowConfig');
159
+ const workflowName = workflowConfig?.workflowName?.trim();
160
+ if (workflowName) {
161
+ return workflowName;
162
+ }
163
+ const templateTitle = get(row, 'maintenanceTemplate.title');
164
+ if (templateTitle) {
165
+ return resolveDisplayLabel(templateTitle, this.resolveText(get(row, 'maintenanceTemplateId')), locale);
166
+ }
167
+ return '';
168
+ }
169
+ createStorageBackend() {
170
+ return {
171
+ getOne: async (entityName, id) => {
172
+ const [module, entity] = entityName.split('.');
173
+ return this.entityService.withEntity(module, entity).data().byKey(id);
174
+ },
175
+ insertOne: async () => null,
176
+ query: async (entityName, request) => {
177
+ const [module, entity] = entityName.split('.');
178
+ return this.entityService
179
+ .withEntity(module, entity)
180
+ .data()
181
+ .query(request);
182
+ },
183
+ };
184
+ }
185
+ resolveText(value) {
186
+ if (!isString(value)) {
187
+ return '';
188
+ }
189
+ return value.trim();
190
+ }
191
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMWorkOrderWorkflowColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
192
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMWorkOrderWorkflowColumnComponent, isStandalone: true, selector: "axm-work-order-workflow-column", inputs: { rawValue: "rawValue", rowData: "rowData" }, host: { listeners: { "click": "onColumnClick($event)", "mousedown": "onColumnClick($event)", "dblclick": "onColumnClick($event)" }, classAttribute: "w-full block" }, usesInheritance: true, ngImport: i0, template: `
193
+ <div class="w-full">
194
+ @if (isBusy() || isLoading()) {
195
+ <ax-loading></ax-loading>
196
+ } @else if (activeWorkflowLabel()) {
197
+ <span
198
+ class="inline-flex items-center gap-1 text-xs font-medium"
199
+ [title]="activeWorkflowLabel()"
200
+ >
201
+ <i class="fa-light fa-diagram-project fa-fw"></i>
202
+ <span>{{ activeWorkflowLabel() }}</span>
203
+ </span>
204
+ } @else if (canSelect()) {
205
+ @if (templates().length === 0) {
206
+ <span class="text-muted text-xs">---</span>
207
+ } @else if (templates().length === 1) {
208
+ <ax-button
209
+ class="ax-sm"
210
+ look="link"
211
+ [text]="templates()[0].title"
212
+ (onClick)="selectTemplate(templates()[0])"
213
+ >
214
+ <ax-prefix>
215
+ <i class="fa-light fa-play"></i>
216
+ </ax-prefix>
217
+ </ax-button>
218
+ } @else {
219
+ <ax-button class="ax-sm" look="outline" [text]="selectLabel()">
220
+ <ax-prefix>
221
+ <i class="fa-light fa-diagram-project"></i>
222
+ </ax-prefix>
223
+ <ax-dropdown-panel #panel>
224
+ <ax-button-item-list>
225
+ @for (template of templates(); track template.id) {
226
+ <ax-button-item
227
+ [text]="template.title"
228
+ (onClick)="selectTemplate(template)"
229
+ >
230
+ <ax-prefix>
231
+ <i class="fa-light fa-play"></i>
232
+ </ax-prefix>
233
+ </ax-button-item>
234
+ }
235
+ </ax-button-item-list>
236
+ </ax-dropdown-panel>
237
+ </ax-button>
238
+ }
239
+ } @else {
240
+ <span class="text-muted text-xs">---</span>
241
+ }
242
+ </div>
243
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "iconOnly", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i1.AXButtonItemComponent, selector: "ax-button-item", inputs: ["color", "disabled", "text", "selected", "divided", "data", "name"], outputs: ["onClick", "onFocus", "onBlur", "disabledChange"] }, { kind: "component", type: i1.AXButtonItemListComponent, selector: "ax-button-item-list", inputs: ["items", "closeParentOnClick", "lockOnLoading"], outputs: ["onItemClick"] }, { kind: "ngmodule", type: AXDecoratorModule }, { 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: AXDropdownModule }, { kind: "component", type: i3.AXDropdownPanelComponent, selector: "ax-dropdown-panel", inputs: ["isOpen", "fitParent", "dropdownWidth", "position", "placement", "_target", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "ngmodule", type: AXLoadingModule }, { kind: "component", type: i4.AXLoadingComponent, selector: "ax-loading", inputs: ["visible", "type", "context"], outputs: ["visibleChange"] }, { kind: "ngmodule", type: AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
244
+ }
245
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMWorkOrderWorkflowColumnComponent, decorators: [{
246
+ type: Component,
247
+ args: [{
248
+ selector: 'axm-work-order-workflow-column',
249
+ host: {
250
+ class: 'w-full block',
251
+ '(click)': 'onColumnClick($event)',
252
+ '(mousedown)': 'onColumnClick($event)',
253
+ '(dblclick)': 'onColumnClick($event)',
254
+ },
255
+ template: `
256
+ <div class="w-full">
257
+ @if (isBusy() || isLoading()) {
258
+ <ax-loading></ax-loading>
259
+ } @else if (activeWorkflowLabel()) {
260
+ <span
261
+ class="inline-flex items-center gap-1 text-xs font-medium"
262
+ [title]="activeWorkflowLabel()"
263
+ >
264
+ <i class="fa-light fa-diagram-project fa-fw"></i>
265
+ <span>{{ activeWorkflowLabel() }}</span>
266
+ </span>
267
+ } @else if (canSelect()) {
268
+ @if (templates().length === 0) {
269
+ <span class="text-muted text-xs">---</span>
270
+ } @else if (templates().length === 1) {
271
+ <ax-button
272
+ class="ax-sm"
273
+ look="link"
274
+ [text]="templates()[0].title"
275
+ (onClick)="selectTemplate(templates()[0])"
276
+ >
277
+ <ax-prefix>
278
+ <i class="fa-light fa-play"></i>
279
+ </ax-prefix>
280
+ </ax-button>
281
+ } @else {
282
+ <ax-button class="ax-sm" look="outline" [text]="selectLabel()">
283
+ <ax-prefix>
284
+ <i class="fa-light fa-diagram-project"></i>
285
+ </ax-prefix>
286
+ <ax-dropdown-panel #panel>
287
+ <ax-button-item-list>
288
+ @for (template of templates(); track template.id) {
289
+ <ax-button-item
290
+ [text]="template.title"
291
+ (onClick)="selectTemplate(template)"
292
+ >
293
+ <ax-prefix>
294
+ <i class="fa-light fa-play"></i>
295
+ </ax-prefix>
296
+ </ax-button-item>
297
+ }
298
+ </ax-button-item-list>
299
+ </ax-dropdown-panel>
300
+ </ax-button>
301
+ }
302
+ } @else {
303
+ <span class="text-muted text-xs">---</span>
304
+ }
305
+ </div>
306
+ `,
307
+ changeDetection: ChangeDetectionStrategy.OnPush,
308
+ imports: [
309
+ AXButtonModule,
310
+ AXDecoratorModule,
311
+ AXDropdownModule,
312
+ AXLoadingModule,
313
+ AXTranslationModule,
314
+ ],
315
+ inputs: ['rawValue', 'rowData'],
316
+ }]
317
+ }], ctorParameters: () => [] });
318
+
319
+ export { AXMWorkOrderWorkflowColumnComponent };
320
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-Dth3Z9fW.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-work-order-workflow-column.component-Dth3Z9fW.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-order/widgets/work-order-workflow-column.component.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXDropdownModule } from '@acorex/components/dropdown';\nimport { AXLoadingModule } from '@acorex/components/loading';\nimport {\n AXTranslationModule,\n AXTranslationService,\n} from '@acorex/core/translation';\nimport {\n AXPEntityService,\n getRecordWorkflowInstanceId,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { AXPColumnWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, effect, inject, signal, untracked } from '@angular/core';\nimport { defaultTo, get, isString } from 'lodash';\n\nimport {\n AXMMaintenanceManagementCommandKeys,\n AXMWorkOrderStatus,\n RootConfig,\n} from '@acorex-platform/module-maintenance-management-client/contracts';\nimport type { AXMMaintenanceManagementMaintenanceTemplateWorkflowConfig } from '@acorex-platform/module-maintenance-management-client/contracts';\nimport {\n type EntityStorageBackend,\n queryWorkflowTemplatesForAsset,\n resolveDisplayLabel,\n} from '../../../middlewares/maintenance-generation.utils';\n\n//#endregion\n\n//#region ---- Types ----\n\ninterface WorkflowTemplateOption {\n id: string;\n title: string;\n}\n\nconst STARTABLE_STATUSES = new Set<string>([\n AXMWorkOrderStatus.Planned,\n AXMWorkOrderStatus.Scheduled,\n AXMWorkOrderStatus.Assigned,\n]);\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-work-order-workflow-column',\n host: {\n class: 'w-full block',\n '(click)': 'onColumnClick($event)',\n '(mousedown)': 'onColumnClick($event)',\n '(dblclick)': 'onColumnClick($event)',\n },\n template: `\n <div class=\"w-full\">\n @if (isBusy() || isLoading()) {\n <ax-loading></ax-loading>\n } @else if (activeWorkflowLabel()) {\n <span\n class=\"inline-flex items-center gap-1 text-xs font-medium\"\n [title]=\"activeWorkflowLabel()\"\n >\n <i class=\"fa-light fa-diagram-project fa-fw\"></i>\n <span>{{ activeWorkflowLabel() }}</span>\n </span>\n } @else if (canSelect()) {\n @if (templates().length === 0) {\n <span class=\"text-muted text-xs\">---</span>\n } @else if (templates().length === 1) {\n <ax-button\n class=\"ax-sm\"\n look=\"link\"\n [text]=\"templates()[0].title\"\n (onClick)=\"selectTemplate(templates()[0])\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-play\"></i>\n </ax-prefix>\n </ax-button>\n } @else {\n <ax-button class=\"ax-sm\" look=\"outline\" [text]=\"selectLabel()\">\n <ax-prefix>\n <i class=\"fa-light fa-diagram-project\"></i>\n </ax-prefix>\n <ax-dropdown-panel #panel>\n <ax-button-item-list>\n @for (template of templates(); track template.id) {\n <ax-button-item\n [text]=\"template.title\"\n (onClick)=\"selectTemplate(template)\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-play\"></i>\n </ax-prefix>\n </ax-button-item>\n }\n </ax-button-item-list>\n </ax-dropdown-panel>\n </ax-button>\n }\n } @else {\n <span class=\"text-muted text-xs\">---</span>\n }\n </div>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n AXButtonModule,\n AXDecoratorModule,\n AXDropdownModule,\n AXLoadingModule,\n AXTranslationModule,\n ],\n inputs: ['rawValue', 'rowData'],\n})\nexport class AXMWorkOrderWorkflowColumnComponent extends AXPColumnWidgetComponent<unknown> {\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly commandService = inject(AXPCommandService);\n private readonly translation = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- State ----\n\n protected isLoading = signal(false);\n protected isBusy = signal(false);\n protected templates = signal<WorkflowTemplateOption[]>([]);\n protected activeWorkflowLabel = signal('');\n protected canSelect = signal(false);\n protected selectLabel = signal('');\n\n //#endregion\n\n //#region ---- Lifecycle ----\n\n constructor() {\n super();\n effect(() => {\n const row = this.rowData as Record<string, unknown> | undefined;\n untracked(() => {\n void this.syncRowState(row);\n });\n });\n }\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n /** Prevents grid row default / double-click actions when interacting with this column. */\n protected onColumnClick(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n }\n\n protected async selectTemplate(\n template: WorkflowTemplateOption,\n ): Promise<void> {\n if (this.isBusy() || !template.id) {\n return;\n }\n\n const row = this.rowData as Record<string, unknown> | undefined;\n const workOrderId = this.resolveText(get(row, 'id'));\n if (!workOrderId) {\n return;\n }\n\n this.isBusy.set(true);\n try {\n const entitySource = `${RootConfig.module.name}.${RootConfig.entities.workOrder.name}`;\n const result = await this.commandService.execute(\n AXMMaintenanceManagementCommandKeys.WorkOrder.StartFlow,\n {\n entity: entitySource,\n data: {\n ...defaultTo(row, {}),\n id: workOrderId,\n maintenanceTemplateId: template.id,\n },\n \n },\n );\n\n if (result?.success) {\n const updated = (await this.entityService\n .withEntity(\n RootConfig.module.name,\n RootConfig.entities.workOrder.name,\n )\n .data()\n .byKey(workOrderId)) as Record<string, unknown> | null;\n if (row && updated) {\n Object.assign(row, updated);\n await this.syncRowState(row);\n }\n } else if (row) {\n const updated = (await this.entityService\n .withEntity(\n RootConfig.module.name,\n RootConfig.entities.workOrder.name,\n )\n .data()\n .byKey(workOrderId)\n .catch(() => null)) as Record<string, unknown> | null;\n if (updated) {\n Object.assign(row, updated);\n await this.syncRowState(row);\n }\n }\n } finally {\n this.isBusy.set(false);\n }\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private async syncRowState(\n row: Record<string, unknown> | undefined,\n ): Promise<void> {\n this.isLoading.set(true);\n try {\n this.selectLabel.set(\n await this.translation.translateAsync(\n '@maintenance-management:work-orders.entities.work-order.fields.workflow-column.select-workflow',\n ),\n );\n\n if (!row) {\n this.templates.set([]);\n this.activeWorkflowLabel.set('');\n this.canSelect.set(false);\n return;\n }\n\n if (getRecordWorkflowInstanceId(row)) {\n this.templates.set([]);\n this.canSelect.set(false);\n this.activeWorkflowLabel.set(this.resolveActiveWorkflowLabel(row));\n return;\n }\n\n const statusId = this.resolveText(get(row, 'statusId'));\n const assetId = this.resolveText(get(row, 'assetId'));\n const canStart = STARTABLE_STATUSES.has(statusId) && !!assetId;\n this.canSelect.set(canStart);\n this.activeWorkflowLabel.set('');\n\n if (!canStart || !assetId) {\n this.templates.set([]);\n return;\n }\n\n const backend = this.createStorageBackend();\n const templateEntityName = `${RootConfig.module.name}.${RootConfig.entities.maintenanceTemplate.name}`;\n const rawTemplates = await queryWorkflowTemplatesForAsset(\n backend,\n templateEntityName,\n assetId,\n );\n const locale = this.translation.getActiveLang() as 'en-US' | 'fa-IR';\n\n this.templates.set(\n [...rawTemplates]\n .sort((a, b) => {\n const ta = resolveDisplayLabel(a.title, a.code ?? a.id, locale);\n const tb = resolveDisplayLabel(b.title, b.code ?? b.id, locale);\n return ta.localeCompare(tb, locale, { sensitivity: 'base' });\n })\n .map((template) => ({\n id: template.id,\n title: resolveDisplayLabel(\n template.title,\n template.code ?? template.id,\n locale,\n ),\n })),\n );\n } finally {\n this.isLoading.set(false);\n }\n }\n\n private resolveActiveWorkflowLabel(row: Record<string, unknown>): string {\n const locale = this.translation.getActiveLang() as 'en-US' | 'fa-IR';\n const workflowConfig = get(row, 'maintenanceTemplate.workflowConfig') as\n | AXMMaintenanceManagementMaintenanceTemplateWorkflowConfig\n | null\n | undefined;\n const workflowName = workflowConfig?.workflowName?.trim();\n if (workflowName) {\n return workflowName;\n }\n\n const templateTitle = get(row, 'maintenanceTemplate.title');\n if (templateTitle) {\n return resolveDisplayLabel(\n templateTitle as Parameters<typeof resolveDisplayLabel>[0],\n this.resolveText(get(row, 'maintenanceTemplateId')),\n locale,\n );\n }\n\n return '';\n }\n\n private createStorageBackend(): EntityStorageBackend {\n return {\n getOne: async (entityName, id) => {\n const [module, entity] = entityName.split('.');\n return this.entityService.withEntity(module, entity).data().byKey(id);\n },\n insertOne: async () => null,\n query: async (entityName, request) => {\n const [module, entity] = entityName.split('.');\n return this.entityService\n .withEntity(module, entity)\n .data()\n .query(request as never);\n },\n };\n }\n\n private resolveText(value: unknown): string {\n if (!isString(value)) {\n return '';\n }\n return value.trim();\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { defaultTo, isString } from 'lodash';
2
+ import { AXMWorkOrderStatus } from '@acorex-platform/module-maintenance-management-client/contracts';
3
+
4
+ //#region ---- Imports ----
5
+ /**
6
+ * Returns a new assessments array with one case reference appended or updated (no duplicate case ids).
7
+ */
8
+ function upsertWorkReportAssessment(existing, input) {
9
+ const assessmentCaseId = resolveText(input.assessmentCaseId);
10
+ if (!assessmentCaseId) {
11
+ return defaultTo(existing, []);
12
+ }
13
+ const nextItem = {
14
+ assessmentCaseId,
15
+ assessmentCase: {
16
+ id: assessmentCaseId,
17
+ ...(input.assessmentCaseTitle !== undefined ? { title: input.assessmentCaseTitle } : {}),
18
+ },
19
+ completedAt: input.completedAt,
20
+ completedById: resolveOptionalText(input.completedById) ?? null,
21
+ };
22
+ const list = [...defaultTo(existing, [])];
23
+ const index = list.findIndex((item) => item.assessmentCaseId === assessmentCaseId);
24
+ if (index >= 0) {
25
+ list[index] = { ...list[index], ...nextItem };
26
+ return list;
27
+ }
28
+ return [...list, nextItem];
29
+ }
30
+ function sortWorkReportAssessments(assessments) {
31
+ return [...defaultTo(assessments, [])].sort((a, b) => {
32
+ const aTime = resolveText(a.completedAt);
33
+ const bTime = resolveText(b.completedAt);
34
+ if (aTime && bTime) {
35
+ return aTime.localeCompare(bTime);
36
+ }
37
+ return aTime ? -1 : bTime ? 1 : 0;
38
+ });
39
+ }
40
+ function isWorkReportFinalized(workReport) {
41
+ return !!resolveText(workReport.finalizedAt);
42
+ }
43
+ function isWorkReportEditable(workReport, workOrder) {
44
+ if (isWorkReportFinalized(workReport)) {
45
+ return false;
46
+ }
47
+ const statusId = resolveText(workOrder?.statusId);
48
+ if (statusId === AXMWorkOrderStatus.SignedOff) {
49
+ return false;
50
+ }
51
+ if (resolveText(workOrder?.approvalStatus) === 'pending') {
52
+ return false;
53
+ }
54
+ if (statusId === AXMWorkOrderStatus.Completed) {
55
+ return false;
56
+ }
57
+ return true;
58
+ }
59
+ //#endregion
60
+ //#region ---- Helpers ----
61
+ function resolveOptionalText(value) {
62
+ const text = resolveText(value);
63
+ return text || undefined;
64
+ }
65
+ function resolveText(value) {
66
+ if (!isString(value)) {
67
+ return '';
68
+ }
69
+ return value.trim();
70
+ }
71
+ //#endregion
72
+
73
+ export { isWorkReportEditable as a, isWorkReportFinalized as i, sortWorkReportAssessments as s, upsertWorkReportAssessment as u };
74
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-report/work-report-assessment.util.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport type { AXPMultiLanguageString } from '@acorex-platform/framework-shared/core';\nimport { defaultTo, isString } from 'lodash';\n\nimport type {\n AXMMaintenanceManagementWorkReportEntityModel,\n AXMWorkReportAssessmentReference,\n} from '@acorex-platform/module-maintenance-management-client/contracts';\nimport { AXMWorkOrderStatus } from '@acorex-platform/module-maintenance-management-client/contracts';\n\n//#endregion\n\n//#region ---- Upsert ----\n\nexport interface UpsertWorkReportAssessmentInput {\n assessmentCaseId: string;\n assessmentCaseTitle?: AXPMultiLanguageString;\n completedAt: string;\n completedById?: string | null;\n}\n\n/**\n * Returns a new assessments array with one case reference appended or updated (no duplicate case ids).\n */\nexport function upsertWorkReportAssessment(\n existing: AXMWorkReportAssessmentReference[] | undefined,\n input: UpsertWorkReportAssessmentInput,\n): AXMWorkReportAssessmentReference[] {\n const assessmentCaseId = resolveText(input.assessmentCaseId);\n if (!assessmentCaseId) {\n return defaultTo(existing, []);\n }\n\n const nextItem: AXMWorkReportAssessmentReference = {\n assessmentCaseId,\n assessmentCase: {\n id: assessmentCaseId,\n ...(input.assessmentCaseTitle !== undefined ? { title: input.assessmentCaseTitle } : {}),\n },\n completedAt: input.completedAt,\n completedById: resolveOptionalText(input.completedById) ?? null,\n };\n\n const list = [...defaultTo(existing, [])];\n const index = list.findIndex((item) => item.assessmentCaseId === assessmentCaseId);\n if (index >= 0) {\n list[index] = { ...list[index], ...nextItem };\n return list;\n }\n\n return [...list, nextItem];\n}\n\nexport function sortWorkReportAssessments(\n assessments: AXMWorkReportAssessmentReference[] | undefined,\n): AXMWorkReportAssessmentReference[] {\n return [...defaultTo(assessments, [])].sort((a, b) => {\n const aTime = resolveText(a.completedAt);\n const bTime = resolveText(b.completedAt);\n if (aTime && bTime) {\n return aTime.localeCompare(bTime);\n }\n return aTime ? -1 : bTime ? 1 : 0;\n });\n}\n\nexport function isWorkReportFinalized(\n workReport: Pick<AXMMaintenanceManagementWorkReportEntityModel, 'finalizedAt'>,\n): boolean {\n return !!resolveText(workReport.finalizedAt);\n}\n\n\n\nexport function isWorkReportEditable(\n workReport: Pick<AXMMaintenanceManagementWorkReportEntityModel, 'finalizedAt'>,\n workOrder?: { statusId?: string; approvalStatus?: string } | null,\n): boolean {\n if (isWorkReportFinalized(workReport)) {\n return false;\n }\n\n const statusId = resolveText(workOrder?.statusId);\n if (statusId === AXMWorkOrderStatus.SignedOff) {\n return false;\n }\n\n if (resolveText(workOrder?.approvalStatus) === 'pending') {\n return false;\n }\n\n if (statusId === AXMWorkOrderStatus.Completed) {\n return false;\n }\n\n return true;\n}\n\n//#endregion\n\n//#region ---- Helpers ----\n\nfunction resolveOptionalText(value: unknown): string | undefined {\n const text = resolveText(value);\n return text || undefined;\n}\n\nfunction resolveText(value: unknown): string {\n if (!isString(value)) {\n return '';\n }\n return value.trim();\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ import * as i1 from '@acorex/components/button';
2
+ import { AXButtonModule } from '@acorex/components/button';
3
+ import * as i2 from '@acorex/components/decorators';
4
+ import { AXDecoratorModule } from '@acorex/components/decorators';
5
+ import { AXTranslationService, resolveMultiLanguageString, AXTranslationModule } from '@acorex/core/translation';
6
+ import { AXFormatService } from '@acorex/core/format';
7
+ import { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';
8
+ import { AXPCommandService } from '@acorex-platform/framework-client/runtime';
9
+ import * as i0 from '@angular/core';
10
+ import { inject, computed, ChangeDetectionStrategy, Component } from '@angular/core';
11
+ import { defaultTo, isString } from 'lodash';
12
+ import { s as sortWorkReportAssessments } from './acorex-platform-module-maintenance-management-client-work-report-assessment.util-Da1HVAit.mjs';
13
+
14
+ //#region ---- Imports ----
15
+ //#endregion
16
+ //#region ---- Component ----
17
+ class AXMWorkReportChecklistResultsViewComponent extends AXPValueWidgetComponent {
18
+ constructor() {
19
+ super(...arguments);
20
+ //#region ---- Services & Dependencies ----
21
+ this.commandService = inject(AXPCommandService);
22
+ this.translation = inject(AXTranslationService);
23
+ this.formatService = inject(AXFormatService);
24
+ //#endregion
25
+ //#region ---- Computed ----
26
+ this.rows = computed(() => {
27
+ const assessments = sortWorkReportAssessments(defaultTo(this.getValue(), []));
28
+ const locale = this.translation.getActiveLang();
29
+ return assessments
30
+ .filter((item) => !!item?.assessmentCaseId)
31
+ .map((item, index) => ({
32
+ assessmentCaseId: item.assessmentCaseId,
33
+ checklistLabel: this.resolveChecklistLabel(index),
34
+ completedAtLabel: this.resolveCompletedAtLabel(item.completedAt),
35
+ caseTitle: resolveMultiLanguageString((item.assessmentCase?.title ?? ''), locale),
36
+ }));
37
+ }, /* @ts-ignore */
38
+ ...(ngDevMode ? [{ debugName: "rows" }] : /* istanbul ignore next */ []));
39
+ }
40
+ //#endregion
41
+ //#region ---- UI Handlers ----
42
+ viewResponseLabel() {
43
+ return this.translation.translateSync('@maintenance-management:work-reports.entities.work-report.fields.assessments.actions.view-response');
44
+ }
45
+ async viewResponse(assessmentCaseId) {
46
+ if (!assessmentCaseId?.trim()) {
47
+ return;
48
+ }
49
+ await this.commandService.execute('AssessmentManagement.AssessmentSession:ViewAnswers', {
50
+ caseId: assessmentCaseId,
51
+ });
52
+ }
53
+ //#endregion
54
+ //#region ---- Helpers ----
55
+ resolveChecklistLabel(index) {
56
+ return this.translation.translateSync('@maintenance-management:work-reports.entities.work-report.fields.assessments.checklist-label', { params: { index: index + 1 } });
57
+ }
58
+ resolveCompletedAtLabel(value) {
59
+ if (!isString(value) || !value.trim()) {
60
+ return '';
61
+ }
62
+ try {
63
+ return this.formatService.format(value, 'datetime');
64
+ }
65
+ catch {
66
+ return '';
67
+ }
68
+ }
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMWorkReportChecklistResultsViewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
70
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMWorkReportChecklistResultsViewComponent, isStandalone: true, selector: "axm-work-report-checklist-results-view", usesInheritance: true, ngImport: i0, template: `
71
+ @if (rows().length === 0) {
72
+ <span class="text-muted text-sm">—</span>
73
+ } @else {
74
+ <div class="flex flex-col gap-3">
75
+ @for (row of rows(); track row.assessmentCaseId) {
76
+ <div class="flex flex-wrap items-center justify-between gap-2">
77
+ <div class="flex flex-col gap-0.5">
78
+ <span class="font-medium text-sm">{{ row.checklistLabel }}</span>
79
+ @if (row.caseTitle) {
80
+ <span class="text-muted text-xs">{{ row.caseTitle }}</span>
81
+ }
82
+ @if (row.completedAtLabel) {
83
+ <span class="text-muted text-xs" [dir]="'ltr'">{{
84
+ row.completedAtLabel
85
+ }}</span>
86
+ }
87
+ </div>
88
+ <ax-button
89
+ class="ax-sm"
90
+ look="outline"
91
+ [text]="viewResponseLabel()"
92
+ [disabled]="false"
93
+ (onClick)="viewResponse(row.assessmentCaseId)"
94
+ >
95
+ <ax-prefix>
96
+ <i class="fa-light fa-eye"></i>
97
+ </ax-prefix>
98
+ </ax-button>
99
+ </div>
100
+ }
101
+ </div>
102
+ }
103
+ `, isInline: true, dependencies: [{ kind: "ngmodule", type: AXButtonModule }, { kind: "component", type: i1.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "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.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: AXTranslationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
104
+ }
105
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMWorkReportChecklistResultsViewComponent, decorators: [{
106
+ type: Component,
107
+ args: [{
108
+ selector: 'axm-work-report-checklist-results-view',
109
+ template: `
110
+ @if (rows().length === 0) {
111
+ <span class="text-muted text-sm">—</span>
112
+ } @else {
113
+ <div class="flex flex-col gap-3">
114
+ @for (row of rows(); track row.assessmentCaseId) {
115
+ <div class="flex flex-wrap items-center justify-between gap-2">
116
+ <div class="flex flex-col gap-0.5">
117
+ <span class="font-medium text-sm">{{ row.checklistLabel }}</span>
118
+ @if (row.caseTitle) {
119
+ <span class="text-muted text-xs">{{ row.caseTitle }}</span>
120
+ }
121
+ @if (row.completedAtLabel) {
122
+ <span class="text-muted text-xs" [dir]="'ltr'">{{
123
+ row.completedAtLabel
124
+ }}</span>
125
+ }
126
+ </div>
127
+ <ax-button
128
+ class="ax-sm"
129
+ look="outline"
130
+ [text]="viewResponseLabel()"
131
+ [disabled]="false"
132
+ (onClick)="viewResponse(row.assessmentCaseId)"
133
+ >
134
+ <ax-prefix>
135
+ <i class="fa-light fa-eye"></i>
136
+ </ax-prefix>
137
+ </ax-button>
138
+ </div>
139
+ }
140
+ </div>
141
+ }
142
+ `,
143
+ changeDetection: ChangeDetectionStrategy.OnPush,
144
+ imports: [AXButtonModule, AXDecoratorModule, AXTranslationModule],
145
+ }]
146
+ }] });
147
+
148
+ export { AXMWorkReportChecklistResultsViewComponent };
149
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client-work-report-checklist-results-view.component-BSFW0Yt-.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client-work-report-checklist-results-view.component-BSFW0Yt-.mjs","sources":["../../../../libs/modules/maintenance-management/client/src/lib/features/work-report/widgets/work-report-checklist-results-view.component.ts"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport {\n AXTranslationModule,\n AXTranslationService,\n resolveMultiLanguageString,\n} from '@acorex/core/translation';\nimport { AXFormatService } from '@acorex/core/format';\nimport { AXPValueWidgetComponent } from '@acorex-platform/framework-client/layout/widget-core';\nimport { AXPCommandService } from '@acorex-platform/framework-client/runtime';\nimport { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { defaultTo, isString } from 'lodash';\n\nimport { sortWorkReportAssessments } from '../work-report-assessment.util';\nimport type { AXMWorkReportAssessmentReference } from '@acorex-platform/module-maintenance-management-client/contracts';\n\n//#endregion\n\n//#region ---- Component ----\n\n@Component({\n selector: 'axm-work-report-checklist-results-view',\n template: `\n @if (rows().length === 0) {\n <span class=\"text-muted text-sm\">—</span>\n } @else {\n <div class=\"flex flex-col gap-3\">\n @for (row of rows(); track row.assessmentCaseId) {\n <div class=\"flex flex-wrap items-center justify-between gap-2\">\n <div class=\"flex flex-col gap-0.5\">\n <span class=\"font-medium text-sm\">{{ row.checklistLabel }}</span>\n @if (row.caseTitle) {\n <span class=\"text-muted text-xs\">{{ row.caseTitle }}</span>\n }\n @if (row.completedAtLabel) {\n <span class=\"text-muted text-xs\" [dir]=\"'ltr'\">{{\n row.completedAtLabel\n }}</span>\n }\n </div>\n <ax-button\n class=\"ax-sm\"\n look=\"outline\"\n [text]=\"viewResponseLabel()\"\n [disabled]=\"false\"\n (onClick)=\"viewResponse(row.assessmentCaseId)\"\n >\n <ax-prefix>\n <i class=\"fa-light fa-eye\"></i>\n </ax-prefix>\n </ax-button>\n </div>\n }\n </div>\n }\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [AXButtonModule, AXDecoratorModule, AXTranslationModule],\n})\nexport class AXMWorkReportChecklistResultsViewComponent extends AXPValueWidgetComponent<\n AXMWorkReportAssessmentReference[]\n> {\n //#region ---- Services & Dependencies ----\n\n private readonly commandService = inject(AXPCommandService);\n private readonly translation = inject(AXTranslationService);\n private readonly formatService = inject(AXFormatService);\n\n //#endregion\n\n //#region ---- Computed ----\n\n protected rows = computed(() => {\n const assessments = sortWorkReportAssessments(\n defaultTo(this.getValue(), []),\n );\n const locale = this.translation.getActiveLang();\n\n return assessments\n .filter(\n (item): item is AXMWorkReportAssessmentReference =>\n !!item?.assessmentCaseId,\n )\n .map((item, index) => ({\n assessmentCaseId: item.assessmentCaseId,\n checklistLabel: this.resolveChecklistLabel(index),\n completedAtLabel: this.resolveCompletedAtLabel(item.completedAt),\n caseTitle: resolveMultiLanguageString(\n (item.assessmentCase?.title ?? '') as never,\n locale,\n ),\n }));\n });\n\n //#endregion\n\n //#region ---- UI Handlers ----\n\n protected viewResponseLabel(): string {\n return this.translation.translateSync(\n '@maintenance-management:work-reports.entities.work-report.fields.assessments.actions.view-response',\n );\n }\n\n protected async viewResponse(assessmentCaseId: string): Promise<void> {\n if (!assessmentCaseId?.trim()) {\n return;\n }\n\n await this.commandService.execute(\n 'AssessmentManagement.AssessmentSession:ViewAnswers',\n {\n caseId: assessmentCaseId,\n },\n );\n }\n\n //#endregion\n\n //#region ---- Helpers ----\n\n private resolveChecklistLabel(index: number): string {\n return this.translation.translateSync(\n '@maintenance-management:work-reports.entities.work-report.fields.assessments.checklist-label',\n { params: { index: index + 1 } },\n );\n }\n\n private resolveCompletedAtLabel(value: string | null | undefined): string {\n if (!isString(value) || !value.trim()) {\n return '';\n }\n try {\n return this.formatService.format(value, 'datetime');\n } catch {\n return '';\n }\n }\n\n //#endregion\n}\n\n//#endregion\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { a as AXMMaintenanceManagementMenuProvider, b as AXMMaintenanceManagementModule, c as AXMMaintenanceManagementPermissionDefinitionProvider, d as AXMMaintenanceManagementSearchCommandProvider, A as AXM_WORK_ORDER_WORKFLOW_DEBUG_NAMESPACE, e as createWorkOrderExecutionWorkflowDefinition, w as workOrderExecutionWorkflowDefinition, f as workOrderExecutionWorkflowName } from './acorex-platform-module-maintenance-management-client-acorex-platform-module-maintenance-management-client-BiQlJxPX.mjs';
2
+ //# sourceMappingURL=acorex-platform-module-maintenance-management-client.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-maintenance-management-client.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}