@acorex-platform/module-organization-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 (53) hide show
  1. package/fesm2022/acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-Dn8Ss1nL.mjs +433 -0
  2. package/fesm2022/acorex-platform-module-organization-management-client-acorex-platform-module-organization-management-client-Dn8Ss1nL.mjs.map +1 -0
  3. package/fesm2022/acorex-platform-module-organization-management-client-add-business-unit-to-business-unit.command-CA2uZQyC.mjs +161 -0
  4. package/fesm2022/acorex-platform-module-organization-management-client-add-business-unit-to-business-unit.command-CA2uZQyC.mjs.map +1 -0
  5. package/fesm2022/acorex-platform-module-organization-management-client-add-position-to-business-unit.command-F7jD3jKs.mjs +137 -0
  6. package/fesm2022/acorex-platform-module-organization-management-client-add-position-to-business-unit.command-F7jD3jKs.mjs.map +1 -0
  7. package/fesm2022/acorex-platform-module-organization-management-client-add-team-to-business-unit.command-BLQFjhS5.mjs +127 -0
  8. package/fesm2022/acorex-platform-module-organization-management-client-add-team-to-business-unit.command-BLQFjhS5.mjs.map +1 -0
  9. package/fesm2022/acorex-platform-module-organization-management-client-contracts.mjs +468 -0
  10. package/fesm2022/acorex-platform-module-organization-management-client-contracts.mjs.map +1 -0
  11. package/fesm2022/acorex-platform-module-organization-management-client-feature-definition.provider-BQKtvXOM.mjs +19 -0
  12. package/fesm2022/acorex-platform-module-organization-management-client-feature-definition.provider-BQKtvXOM.mjs.map +1 -0
  13. package/fesm2022/acorex-platform-module-organization-management-client-generate-org-chart.command-DJnFJKuo.mjs +91 -0
  14. package/fesm2022/acorex-platform-module-organization-management-client-generate-org-chart.command-DJnFJKuo.mjs.map +1 -0
  15. package/fesm2022/acorex-platform-module-organization-management-client-job-definition-matrix-page.utils-DD3jLujN.mjs +61 -0
  16. package/fesm2022/acorex-platform-module-organization-management-client-job-definition-matrix-page.utils-DD3jLujN.mjs.map +1 -0
  17. package/fesm2022/acorex-platform-module-organization-management-client-job-definition-pages-component.provider-BNhXJfjr.mjs +28 -0
  18. package/fesm2022/acorex-platform-module-organization-management-client-job-definition-pages-component.provider-BNhXJfjr.mjs.map +1 -0
  19. package/fesm2022/acorex-platform-module-organization-management-client-job-definition-responsibilities-page.component-BlUzsSy3.mjs +237 -0
  20. package/fesm2022/acorex-platform-module-organization-management-client-job-definition-responsibilities-page.component-BlUzsSy3.mjs.map +1 -0
  21. package/fesm2022/acorex-platform-module-organization-management-client-job-definition-skills-page.component--pyAaXB4.mjs +233 -0
  22. package/fesm2022/acorex-platform-module-organization-management-client-job-definition-skills-page.component--pyAaXB4.mjs.map +1 -0
  23. package/fesm2022/acorex-platform-module-organization-management-client-menu.provider-BgRoEC48.mjs +175 -0
  24. package/fesm2022/acorex-platform-module-organization-management-client-menu.provider-BgRoEC48.mjs.map +1 -0
  25. package/fesm2022/acorex-platform-module-organization-management-client-org-chart-default-node-contribution.provider-BQ0ihb43.mjs +229 -0
  26. package/fesm2022/acorex-platform-module-organization-management-client-org-chart-default-node-contribution.provider-BQ0ihb43.mjs.map +1 -0
  27. package/fesm2022/acorex-platform-module-organization-management-client-org-chart-employee-flyout-contribution.provider-Bz8nVm04.mjs +179 -0
  28. package/fesm2022/acorex-platform-module-organization-management-client-org-chart-employee-flyout-contribution.provider-Bz8nVm04.mjs.map +1 -0
  29. package/fesm2022/acorex-platform-module-organization-management-client-org-chart-position-employee-node-contribution.provider-BTicXn9n.mjs +168 -0
  30. package/fesm2022/acorex-platform-module-organization-management-client-org-chart-position-employee-node-contribution.provider-BTicXn9n.mjs.map +1 -0
  31. package/fesm2022/acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-C5TItnOp.mjs +338 -0
  32. package/fesm2022/acorex-platform-module-organization-management-client-org-chart-ux-node-contribution.provider-C5TItnOp.mjs.map +1 -0
  33. package/fesm2022/acorex-platform-module-organization-management-client-org-chart.page-g_3oPPH0.mjs +3744 -0
  34. package/fesm2022/acorex-platform-module-organization-management-client-org-chart.page-g_3oPPH0.mjs.map +1 -0
  35. package/fesm2022/acorex-platform-module-organization-management-client-permission-definition.provider-CiCdTBGo.mjs +43 -0
  36. package/fesm2022/acorex-platform-module-organization-management-client-permission-definition.provider-CiCdTBGo.mjs.map +1 -0
  37. package/fesm2022/acorex-platform-module-organization-management-client-remove-position-from-business-unit.command-BFQVTpfy.mjs +91 -0
  38. package/fesm2022/acorex-platform-module-organization-management-client-remove-position-from-business-unit.command-BFQVTpfy.mjs.map +1 -0
  39. package/fesm2022/acorex-platform-module-organization-management-client-replace-position-assignee.command-CSgERqLG.mjs +64 -0
  40. package/fesm2022/acorex-platform-module-organization-management-client-replace-position-assignee.command-CSgERqLG.mjs.map +1 -0
  41. package/fesm2022/acorex-platform-module-organization-management-client-responsibilities-matrix-widget-edit.component-DHmUxlnu.mjs +143 -0
  42. package/fesm2022/acorex-platform-module-organization-management-client-responsibilities-matrix-widget-edit.component-DHmUxlnu.mjs.map +1 -0
  43. package/fesm2022/acorex-platform-module-organization-management-client-responsibilities-matrix-widget-view.component-BkLZhXhM.mjs +65 -0
  44. package/fesm2022/acorex-platform-module-organization-management-client-responsibilities-matrix-widget-view.component-BkLZhXhM.mjs.map +1 -0
  45. package/fesm2022/acorex-platform-module-organization-management-client-responsibilities-matrix.component-DqO6xE2p.mjs +400 -0
  46. package/fesm2022/acorex-platform-module-organization-management-client-responsibilities-matrix.component-DqO6xE2p.mjs.map +1 -0
  47. package/fesm2022/acorex-platform-module-organization-management-client-settings.provider-Dnrkq9Ku.mjs +432 -0
  48. package/fesm2022/acorex-platform-module-organization-management-client-settings.provider-Dnrkq9Ku.mjs.map +1 -0
  49. package/fesm2022/acorex-platform-module-organization-management-client.mjs +2 -0
  50. package/fesm2022/acorex-platform-module-organization-management-client.mjs.map +1 -0
  51. package/package.json +28 -0
  52. package/types/acorex-platform-module-organization-management-client-contracts.d.ts +501 -0
  53. package/types/acorex-platform-module-organization-management-client.d.ts +273 -0
@@ -0,0 +1,400 @@
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$1 from '@acorex/core/translation';
6
+ import { AXTranslationService, AXTranslationModule } from '@acorex/core/translation';
7
+ import { AXPWidgetsList } from '@acorex-platform/framework-shared/core';
8
+ import { AXPSpreadsheetComponent } from '@acorex-platform/framework-client/layout/components';
9
+ import { AXPEntityService, AXPEntityDataSelectorService, AXPEntityDefinitionRegistryService } from '@acorex-platform/framework-client/layout/entity';
10
+ import * as i3 from '@angular/common';
11
+ import { CommonModule } from '@angular/common';
12
+ import * as i0 from '@angular/core';
13
+ import { inject, input, output, signal, computed, effect, ChangeDetectionStrategy, ViewEncapsulation, Component } from '@angular/core';
14
+ import { RootConfig } from '@acorex-platform/module-organization-management-client/contracts';
15
+
16
+ //#endregion
17
+ //#region ---- Component Definition ----
18
+ class AXMOrganizationManagementResponsibilitiesMatrixComponent {
19
+ //#endregion
20
+ //#region ---- Lifecycle Methods ----
21
+ constructor() {
22
+ //#endregion
23
+ //#region ---- Services & Dependencies ----
24
+ this.entityService = inject(AXPEntityService);
25
+ this.responsibilityLevelDataAccessor = this.entityService
26
+ .withEntity(RootConfig.module.name, RootConfig.entities.responsibilityLevel.name)
27
+ .data();
28
+ this.responsibilityDataAccessor = this.entityService
29
+ .withEntity(RootConfig.module.name, RootConfig.entities.responsibility.name)
30
+ .data();
31
+ this.entityDataSelectorService = inject(AXPEntityDataSelectorService);
32
+ this.entityResolver = inject(AXPEntityDefinitionRegistryService);
33
+ this.multiLanguageResolver = inject(AXTranslationService);
34
+ //#endregion
35
+ //#region ---- Inputs ----
36
+ /**
37
+ * Array of job levels to display as columns (e.g., Junior, Mid-Level, Senior)
38
+ */
39
+ this.titles = input([], /* @ts-ignore */
40
+ ...(ngDevMode ? [{ debugName: "titles" }] : /* istanbul ignore next */ []));
41
+ /**
42
+ * Initial matrix data: { [responsibilityId]: { [title.id]: responsibilityLevelId } }
43
+ */
44
+ this.value = input({}, /* @ts-ignore */
45
+ ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
46
+ /**
47
+ * Whether the matrix is in readonly mode
48
+ */
49
+ this.readonly = input(false, /* @ts-ignore */
50
+ ...(ngDevMode ? [{ debugName: "readonly" }] : /* istanbul ignore next */ []));
51
+ /**
52
+ * Initial responsibility IDs (for syncing with parent entity)
53
+ */
54
+ this.responsibilityIds = input([], /* @ts-ignore */
55
+ ...(ngDevMode ? [{ debugName: "responsibilityIds" }] : /* istanbul ignore next */ []));
56
+ //#endregion
57
+ //#region ---- Outputs ----
58
+ /**
59
+ * Emitted when the matrix value changes
60
+ */
61
+ this.valueChange = output();
62
+ /**
63
+ * Emitted when a single cell value changes
64
+ */
65
+ this.cellChange = output();
66
+ /**
67
+ * Emitted when selected responsibilities change (responsibility IDs array)
68
+ */
69
+ this.responsibilityIdsChange = output();
70
+ //#endregion
71
+ //#region ---- Class Properties ----
72
+ /**
73
+ * Responsibility levels loaded from the service
74
+ */
75
+ this.responsibilityLevels = signal([], /* @ts-ignore */
76
+ ...(ngDevMode ? [{ debugName: "responsibilityLevels" }] : /* istanbul ignore next */ []));
77
+ /**
78
+ * Selected responsibilities (internal state)
79
+ */
80
+ this.selectedResponsibilities = signal([], /* @ts-ignore */
81
+ ...(ngDevMode ? [{ debugName: "selectedResponsibilities" }] : /* istanbul ignore next */ []));
82
+ /**
83
+ * Responsibility entity definition
84
+ */
85
+ this.responsibilityEntityDef = signal(null, /* @ts-ignore */
86
+ ...(ngDevMode ? [{ debugName: "responsibilityEntityDef" }] : /* istanbul ignore next */ []));
87
+ /**
88
+ * Loading state
89
+ */
90
+ this.isLoading = signal(true, /* @ts-ignore */
91
+ ...(ngDevMode ? [{ debugName: "isLoading" }] : /* istanbul ignore next */ []));
92
+ /**
93
+ * Loading state for responsibility entity
94
+ */
95
+ this.isLoadingResponsibilityEntity = signal(false, /* @ts-ignore */
96
+ ...(ngDevMode ? [{ debugName: "isLoadingResponsibilityEntity" }] : /* istanbul ignore next */ []));
97
+ //#endregion
98
+ //#region ---- Computed Properties ----
99
+ /**
100
+ * Vertical titles (responsibilities) - rows of the matrix
101
+ */
102
+ this.verticalTitles = computed(() => {
103
+ const responsibilities = this.selectedResponsibilities();
104
+ const resolve = (v) => this.multiLanguageResolver.resolve(v);
105
+ const result = (responsibilities ?? []).map((responsibility) => ({
106
+ id: responsibility.id,
107
+ title: resolve(responsibility.title),
108
+ description: responsibility.description ? resolve(responsibility.description) : undefined,
109
+ }));
110
+ return result;
111
+ }, /* @ts-ignore */
112
+ ...(ngDevMode ? [{ debugName: "verticalTitles" }] : /* istanbul ignore next */ []));
113
+ /**
114
+ * Horizontal titles (job levels) - columns of the matrix
115
+ */
116
+ this.horizontalTitles = computed(() => {
117
+ const titlesInput = this.titles();
118
+ const resolve = (v) => this.multiLanguageResolver.resolve(v);
119
+ const result = (titlesInput ?? []).map((title) => ({
120
+ id: title.id,
121
+ title: resolve(title.title),
122
+ description: title.description ? resolve(title.description) : undefined,
123
+ }));
124
+ return result;
125
+ }, /* @ts-ignore */
126
+ ...(ngDevMode ? [{ debugName: "horizontalTitles" }] : /* istanbul ignore next */ []));
127
+ /**
128
+ * Cell options (responsibility levels) - dropdown options for each cell, loaded from service
129
+ */
130
+ this.cellOptions = computed(() => {
131
+ const levels = this.responsibilityLevels();
132
+ const resolve = (v) => this.multiLanguageResolver.resolve(v);
133
+ const result = (levels ?? []).map((level) => ({
134
+ id: level.id,
135
+ title: resolve(level.title),
136
+ description: level.description ? resolve(level.description) : undefined,
137
+ }));
138
+ return result;
139
+ }, /* @ts-ignore */
140
+ ...(ngDevMode ? [{ debugName: "cellOptions" }] : /* istanbul ignore next */ []));
141
+ /**
142
+ * Spreadsheet columns - converted from horizontalTitles (job levels)
143
+ */
144
+ this.spreadsheetColumns = computed(() => {
145
+ const horizontalTitles = this.horizontalTitles();
146
+ const cellOptions = this.cellOptions();
147
+ // Create SelectBox widget configuration for responsibility levels
148
+ const selectBoxWidget = {
149
+ type: AXPWidgetsList.Editors.SelectBox,
150
+ options: {
151
+ valueField: 'id',
152
+ textField: 'title',
153
+ dataSource: cellOptions.map((option) => ({
154
+ id: option.id,
155
+ title: option.title,
156
+ description: option.description,
157
+ })),
158
+ },
159
+ };
160
+ // Convert horizontal titles to columns
161
+ return horizontalTitles.map((title) => ({
162
+ name: title.id,
163
+ title: title.title,
164
+ description: title.description,
165
+ path: title.id, // Path to access the value in row object
166
+ widget: selectBoxWidget,
167
+ }));
168
+ }, /* @ts-ignore */
169
+ ...(ngDevMode ? [{ debugName: "spreadsheetColumns" }] : /* istanbul ignore next */ []));
170
+ /**
171
+ * Spreadsheet rows - converted from matrix data and vertical titles
172
+ */
173
+ this.spreadsheetRows = computed(() => {
174
+ const verticalTitles = this.verticalTitles();
175
+ const horizontalTitles = this.horizontalTitles();
176
+ const matrixData = this.value();
177
+ // Convert matrix data to spreadsheet rows
178
+ return verticalTitles.map((responsibility) => {
179
+ const row = {
180
+ name: responsibility.id, // Required for fixed mode row identification
181
+ _responsibilityTitle: responsibility.title, // For row header display
182
+ _responsibilityDescription: responsibility.description, // For row header description
183
+ };
184
+ // Add cell values for each horizontal title (column)
185
+ horizontalTitles.forEach((title) => {
186
+ const cellValue = matrixData[responsibility.id]?.[title.id] ?? null;
187
+ row[title.id] = cellValue;
188
+ });
189
+ return row;
190
+ });
191
+ }, /* @ts-ignore */
192
+ ...(ngDevMode ? [{ debugName: "spreadsheetRows" }] : /* istanbul ignore next */ []));
193
+ // Load responsibility levels and responsibility entity definition when component initializes
194
+ this.loadResponsibilityLevels();
195
+ this.loadResponsibilityEntityDef();
196
+ // Watch for responsibilityIds input changes and sync selected responsibilities
197
+ effect(() => {
198
+ const ids = this.responsibilityIds();
199
+ if (ids && ids.length > 0 && this.responsibilityEntityDef()) {
200
+ this.loadResponsibilitiesByIds(ids);
201
+ }
202
+ else if (!ids || ids.length === 0) {
203
+ // Try to extract responsibility IDs from matrix data keys
204
+ const matrixData = this.value();
205
+ const responsibilityIdsFromMatrix = Object.keys(matrixData || {});
206
+ if (responsibilityIdsFromMatrix.length > 0 && this.responsibilityEntityDef()) {
207
+ this.loadResponsibilitiesByIds(responsibilityIdsFromMatrix);
208
+ }
209
+ else {
210
+ this.selectedResponsibilities.set([]);
211
+ }
212
+ }
213
+ });
214
+ // Watch for matrix value changes and extract responsibility IDs
215
+ effect(() => {
216
+ const matrixData = this.value();
217
+ const currentResponsibilityIds = this.selectedResponsibilities().map((r) => r.id);
218
+ const responsibilityIdsFromMatrix = Object.keys(matrixData || {});
219
+ // If matrix has responsibilities that aren't in selectedResponsibilities, load them
220
+ const missingIds = responsibilityIdsFromMatrix.filter((id) => !currentResponsibilityIds.includes(id));
221
+ if (missingIds.length > 0 && this.responsibilityEntityDef()) {
222
+ this.loadResponsibilitiesByIds(missingIds);
223
+ }
224
+ });
225
+ }
226
+ //#endregion
227
+ //#region ---- Data Loading Methods ----
228
+ /**
229
+ * Load responsibility levels from the service
230
+ */
231
+ async loadResponsibilityLevels() {
232
+ try {
233
+ this.isLoading.set(true);
234
+ const query = {
235
+ skip: 0,
236
+ take: 1000,
237
+ sort: [{ field: 'level', dir: 'asc' }],
238
+ };
239
+ const result = await this.responsibilityLevelDataAccessor.query(query);
240
+ this.responsibilityLevels.set(result.items || []);
241
+ }
242
+ catch (error) {
243
+ console.error('Error loading responsibility levels:', error);
244
+ this.responsibilityLevels.set([]);
245
+ }
246
+ finally {
247
+ this.isLoading.set(false);
248
+ }
249
+ }
250
+ /**
251
+ * Load responsibility entity definition
252
+ */
253
+ async loadResponsibilityEntityDef() {
254
+ try {
255
+ this.isLoadingResponsibilityEntity.set(true);
256
+ const entityDef = await this.entityResolver.resolve(RootConfig.module.name, RootConfig.entities.responsibility.name);
257
+ this.responsibilityEntityDef.set(entityDef);
258
+ }
259
+ catch (error) {
260
+ console.error('Error loading responsibility entity definition:', error);
261
+ this.responsibilityEntityDef.set(null);
262
+ }
263
+ finally {
264
+ this.isLoadingResponsibilityEntity.set(false);
265
+ }
266
+ }
267
+ /**
268
+ * Load responsibilities by IDs
269
+ */
270
+ async loadResponsibilitiesByIds(ids) {
271
+ try {
272
+ const responsibilities = [];
273
+ for (const id of ids) {
274
+ try {
275
+ const responsibility = await this.responsibilityDataAccessor.byKey(id);
276
+ if (responsibility) {
277
+ responsibilities.push(responsibility);
278
+ }
279
+ }
280
+ catch (error) {
281
+ console.error(`Error loading responsibility ${id}:`, error);
282
+ }
283
+ }
284
+ this.selectedResponsibilities.set(responsibilities);
285
+ }
286
+ catch (error) {
287
+ console.error('Error loading responsibilities by IDs:', error);
288
+ }
289
+ }
290
+ //#endregion
291
+ //#region ---- Data Transformation Methods ----
292
+ /**
293
+ * Convert spreadsheet rows back to matrix data format
294
+ */
295
+ convertSpreadsheetRowsToMatrixData(rows) {
296
+ const horizontalTitles = this.horizontalTitles();
297
+ const matrixData = {};
298
+ rows.forEach((row) => {
299
+ const responsibilityId = row['name']; // Row identifier (responsibility ID)
300
+ if (!responsibilityId) {
301
+ return;
302
+ }
303
+ matrixData[responsibilityId] = {};
304
+ // Extract cell values for each column
305
+ horizontalTitles.forEach((title) => {
306
+ const cellValue = row[title.id] ?? null;
307
+ matrixData[responsibilityId][title.id] = cellValue;
308
+ });
309
+ });
310
+ return matrixData;
311
+ }
312
+ //#endregion
313
+ //#region ---- Event Handlers ----
314
+ /**
315
+ * Handle spreadsheet change event - convert to matrix format
316
+ */
317
+ handleSpreadsheetChange(rows) {
318
+ const matrixData = this.convertSpreadsheetRowsToMatrixData(rows);
319
+ this.valueChange.emit(matrixData);
320
+ // Extract responsibility IDs from row names and emit
321
+ const responsibilityIds = rows.map((row) => row['name']).filter((id) => id != null);
322
+ this.responsibilityIdsChange.emit(responsibilityIds);
323
+ }
324
+ /**
325
+ * Handle cell change event from spreadsheet
326
+ */
327
+ handleCellChange(event) {
328
+ this.cellChange.emit(event);
329
+ }
330
+ /**
331
+ * Open responsibility selector dialog
332
+ */
333
+ async handleSelectResponsibilities() {
334
+ const entityDef = this.responsibilityEntityDef();
335
+ if (!entityDef) {
336
+ console.error('Responsibility entity definition not loaded');
337
+ return;
338
+ }
339
+ try {
340
+ // Get currently selected responsibility IDs
341
+ const selectedItemIds = this.selectedResponsibilities()
342
+ .map((responsibility) => responsibility.id)
343
+ .filter((id) => id != null);
344
+ const result = await this.entityDataSelectorService.open({
345
+ entity: entityDef,
346
+ title: 'Select Responsibilities',
347
+ allowMultiple: true,
348
+ selectedItemIds: selectedItemIds.length > 0 ? selectedItemIds : undefined,
349
+ });
350
+ if (result && result.items && result.items.length > 0) {
351
+ // Update selected responsibilities
352
+ this.selectedResponsibilities.set(result.items);
353
+ // Emit responsibility IDs change
354
+ const responsibilityIds = result.items.map((item) => item.id).filter((id) => id != null);
355
+ this.responsibilityIdsChange.emit(responsibilityIds);
356
+ }
357
+ }
358
+ catch (error) {
359
+ console.error('Error opening responsibility selector:', error);
360
+ }
361
+ }
362
+ /**
363
+ * Remove a responsibility from selection
364
+ */
365
+ handleRemoveResponsibility(responsibilityId) {
366
+ const currentResponsibilities = this.selectedResponsibilities();
367
+ const updatedResponsibilities = currentResponsibilities.filter((responsibility) => responsibility.id !== responsibilityId);
368
+ this.selectedResponsibilities.set(updatedResponsibilities);
369
+ // Remove responsibility data from matrix value
370
+ const currentMatrixData = this.value();
371
+ const updatedMatrixData = { ...currentMatrixData };
372
+ delete updatedMatrixData[responsibilityId];
373
+ // Emit updated matrix data
374
+ this.valueChange.emit(updatedMatrixData);
375
+ // Emit responsibility IDs change
376
+ const responsibilityIds = updatedResponsibilities.map((r) => r.id).filter((id) => id != null);
377
+ this.responsibilityIdsChange.emit(responsibilityIds);
378
+ }
379
+ /**
380
+ * Handle row change event from spreadsheet (add/remove)
381
+ */
382
+ handleRowChange(event) {
383
+ if (event.type === 'remove') {
384
+ // Remove responsibility from selection
385
+ this.handleRemoveResponsibility(event.rowId);
386
+ }
387
+ // Note: 'add' type shouldn't happen in fixed mode, but if it does, we can handle it here
388
+ }
389
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOrganizationManagementResponsibilitiesMatrixComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
390
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.8", type: AXMOrganizationManagementResponsibilitiesMatrixComponent, isStandalone: true, selector: "axm-responsibilities-matrix", inputs: { titles: { classPropertyName: "titles", publicName: "titles", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, readonly: { classPropertyName: "readonly", publicName: "readonly", isSignal: true, isRequired: false, transformFunction: null }, responsibilityIds: { classPropertyName: "responsibilityIds", publicName: "responsibilityIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", cellChange: "cellChange", responsibilityIdsChange: "responsibilityIdsChange" }, host: { classAttribute: "axm-responsibilities-matrix" }, ngImport: i0, template: "<div class=\"__container\">\n <div class=\"__matrix-section\">\n <div class=\"__matrix-header ax-sm\">\n @if (!readonly()) {\n <ax-button color=\"primary\"\n [text]=\"'@organization-management:job-definitions.components.responsibilities-matrix.actions.choose-responsibilities.title' | translate | async\"\n (onClick)=\"handleSelectResponsibilities()\" [disabled]=\"isLoadingResponsibilityEntity()\">\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n }\n </div>\n @if (isLoading()) {\n <div class=\"__loading\">\n <span>{{ '@organization-management:job-definitions.components.responsibilities-matrix.messages.loading-responsibility-levels' | translate | async\n }}</span>\n </div>\n } @else {\n <axp-spreadsheet [title]=\"'Responsibility / Level'\" [columns]=\"spreadsheetColumns()\" [rowsInput]=\"spreadsheetRows()\"\n [rowMode]=\"'fixed'\" [readonly]=\"readonly()\" [allowRemoveRows]=\"true\" [rowTitlePath]=\"'_responsibilityTitle'\"\n [rowDescriptionPath]=\"'_responsibilityDescription'\" (cellChange)=\"handleCellChange($event)\"\n (spreadsheetChange)=\"handleSpreadsheetChange($event)\" (rowChange)=\"handleRowChange($event)\"></axp-spreadsheet>\n }\n </div>\n</div>\n", styles: [".responsibilities-matrix{display:block;height:100%;width:100%}.responsibilities-matrix .__container,.responsibilities-matrix .__matrix-section{display:flex;flex-direction:column}.responsibilities-matrix .__matrix-header{margin-bottom:calc(var(--spacing, .25rem) * 3);display:flex;justify-content:flex-end}.responsibilities-matrix .__loading{display:flex;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 8);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:var(--color-neutral-600, oklch(43.9% 0 none))}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AXPSpreadsheetComponent, selector: "axp-spreadsheet", inputs: ["title", "columns", "rowMode", "rowsInput", "rowsModel", "readonly", "emptyCellPlaceholder", "rowTitlePath", "rowDescriptionPath", "allowAddRows", "allowRemoveRows"], outputs: ["rowsModelChange", "cellChange", "rowChange", "spreadsheetChange"] }, { 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.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "ngmodule", type: AXTranslationModule }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3$1.AXTranslatorPipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
391
+ }
392
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AXMOrganizationManagementResponsibilitiesMatrixComponent, decorators: [{
393
+ type: Component,
394
+ args: [{ selector: 'axm-responsibilities-matrix', standalone: true, imports: [CommonModule, AXPSpreadsheetComponent, AXButtonModule, AXDecoratorModule, AXTranslationModule], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
395
+ class: 'axm-responsibilities-matrix',
396
+ }, template: "<div class=\"__container\">\n <div class=\"__matrix-section\">\n <div class=\"__matrix-header ax-sm\">\n @if (!readonly()) {\n <ax-button color=\"primary\"\n [text]=\"'@organization-management:job-definitions.components.responsibilities-matrix.actions.choose-responsibilities.title' | translate | async\"\n (onClick)=\"handleSelectResponsibilities()\" [disabled]=\"isLoadingResponsibilityEntity()\">\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n }\n </div>\n @if (isLoading()) {\n <div class=\"__loading\">\n <span>{{ '@organization-management:job-definitions.components.responsibilities-matrix.messages.loading-responsibility-levels' | translate | async\n }}</span>\n </div>\n } @else {\n <axp-spreadsheet [title]=\"'Responsibility / Level'\" [columns]=\"spreadsheetColumns()\" [rowsInput]=\"spreadsheetRows()\"\n [rowMode]=\"'fixed'\" [readonly]=\"readonly()\" [allowRemoveRows]=\"true\" [rowTitlePath]=\"'_responsibilityTitle'\"\n [rowDescriptionPath]=\"'_responsibilityDescription'\" (cellChange)=\"handleCellChange($event)\"\n (spreadsheetChange)=\"handleSpreadsheetChange($event)\" (rowChange)=\"handleRowChange($event)\"></axp-spreadsheet>\n }\n </div>\n</div>\n", styles: [".responsibilities-matrix{display:block;height:100%;width:100%}.responsibilities-matrix .__container,.responsibilities-matrix .__matrix-section{display:flex;flex-direction:column}.responsibilities-matrix .__matrix-header{margin-bottom:calc(var(--spacing, .25rem) * 3);display:flex;justify-content:flex-end}.responsibilities-matrix .__loading{display:flex;align-items:center;justify-content:center;padding:calc(var(--spacing, .25rem) * 8);font-size:var(--text-sm, .875rem);line-height:var(--tw-leading, var(--text-sm--line-height, calc(1.25 / .875)));color:var(--color-neutral-600, oklch(43.9% 0 none))}\n/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */\n"] }]
397
+ }], ctorParameters: () => [], propDecorators: { titles: [{ type: i0.Input, args: [{ isSignal: true, alias: "titles", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], readonly: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonly", required: false }] }], responsibilityIds: [{ type: i0.Input, args: [{ isSignal: true, alias: "responsibilityIds", required: false }] }], valueChange: [{ type: i0.Output, args: ["valueChange"] }], cellChange: [{ type: i0.Output, args: ["cellChange"] }], responsibilityIdsChange: [{ type: i0.Output, args: ["responsibilityIdsChange"] }] } });
398
+
399
+ export { AXMOrganizationManagementResponsibilitiesMatrixComponent as A };
400
+ //# sourceMappingURL=acorex-platform-module-organization-management-client-responsibilities-matrix.component-DqO6xE2p.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acorex-platform-module-organization-management-client-responsibilities-matrix.component-DqO6xE2p.mjs","sources":["../../../../libs/modules/organization-management/client/src/lib/features/responsibilities-matrix/responsibilities-matrix.component.ts","../../../../libs/modules/organization-management/client/src/lib/features/responsibilities-matrix/responsibilities-matrix.component.html"],"sourcesContent":["//#region ---- Imports ----\n\nimport { AXPEntity } from '@acorex-platform/framework-shared/entity';\nimport { AXButtonModule } from '@acorex/components/button';\nimport { AXDecoratorModule } from '@acorex/components/decorators';\nimport { AXTranslationModule, AXTranslationService } from '@acorex/core/translation';\nimport { type AXPWidgetNode, AXPWidgetsList } from '@acorex-platform/framework-shared/core';\n\nimport {\n AXPSpreadsheetCellChangeEvent,\n AXPSpreadsheetColumn,\n AXPSpreadsheetComponent,\n AXPSpreadsheetData,\n AXPSpreadsheetItem,\n AXPSpreadsheetRowChangeEvent,\n} from '@acorex-platform/framework-client/layout/components';\nimport {\n AXPEntityDataSelectorService,\n AXPEntityDefinitionRegistryService,\n AXPEntityService,\n} from '@acorex-platform/framework-client/layout/entity';\nimport { CommonModule } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n inject,\n input,\n output,\n signal,\n ViewEncapsulation,\n} from '@angular/core';\nimport { RootConfig } from '@acorex-platform/module-organization-management-client/contracts';\nimport { AXMOrganizationManagementResponsibilityLevelEntityModel } from '@acorex-platform/module-organization-management-client/contracts';\nimport { AXMOrganizationManagementResponsibilityEntityModel } from '@acorex-platform/module-organization-management-client/contracts';\n\n//#endregion\n\n//#region ---- Component Definition ----\n\n@Component({\n selector: 'axm-responsibilities-matrix',\n standalone: true,\n imports: [CommonModule, AXPSpreadsheetComponent, AXButtonModule, AXDecoratorModule, AXTranslationModule],\n templateUrl: './responsibilities-matrix.component.html',\n styleUrl: './responsibilities-matrix.component.css',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'axm-responsibilities-matrix',\n },\n})\nexport class AXMOrganizationManagementResponsibilitiesMatrixComponent {\n //#endregion\n\n //#region ---- Services & Dependencies ----\n\n private readonly entityService = inject(AXPEntityService);\n private readonly responsibilityLevelDataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.responsibilityLevel.name)\n .data<string, AXMOrganizationManagementResponsibilityLevelEntityModel>();\n private readonly responsibilityDataAccessor = this.entityService\n .withEntity(RootConfig.module.name, RootConfig.entities.responsibility.name)\n .data<string, AXMOrganizationManagementResponsibilityEntityModel>();\n private readonly entityDataSelectorService = inject(AXPEntityDataSelectorService);\n private readonly entityResolver = inject(AXPEntityDefinitionRegistryService);\n private readonly multiLanguageResolver = inject(AXTranslationService);\n\n //#endregion\n\n //#region ---- Inputs ----\n\n /**\n * Array of job levels to display as columns (e.g., Junior, Mid-Level, Senior)\n */\n titles = input<AXPSpreadsheetItem[]>([]);\n\n /**\n * Initial matrix data: { [responsibilityId]: { [title.id]: responsibilityLevelId } }\n */\n value = input<AXPSpreadsheetData>({});\n\n /**\n * Whether the matrix is in readonly mode\n */\n readonly = input<boolean>(false);\n\n /**\n * Initial responsibility IDs (for syncing with parent entity)\n */\n responsibilityIds = input<string[]>([]);\n\n //#endregion\n\n //#region ---- Outputs ----\n\n /**\n * Emitted when the matrix value changes\n */\n valueChange = output<AXPSpreadsheetData>();\n\n /**\n * Emitted when a single cell value changes\n */\n cellChange = output<AXPSpreadsheetCellChangeEvent>();\n\n /**\n * Emitted when selected responsibilities change (responsibility IDs array)\n */\n responsibilityIdsChange = output<string[]>();\n\n //#endregion\n\n //#region ---- Class Properties ----\n\n /**\n * Responsibility levels loaded from the service\n */\n private responsibilityLevels = signal<AXMOrganizationManagementResponsibilityLevelEntityModel[]>([]);\n\n /**\n * Selected responsibilities (internal state)\n */\n protected selectedResponsibilities = signal<AXMOrganizationManagementResponsibilityEntityModel[]>([]);\n\n /**\n * Responsibility entity definition\n */\n private responsibilityEntityDef = signal<AXPEntity | null>(null);\n\n /**\n * Loading state\n */\n protected isLoading = signal<boolean>(true);\n\n /**\n * Loading state for responsibility entity\n */\n protected isLoadingResponsibilityEntity = signal<boolean>(false);\n\n //#endregion\n\n //#region ---- Computed Properties ----\n\n /**\n * Vertical titles (responsibilities) - rows of the matrix\n */\n protected verticalTitles = computed<AXPSpreadsheetItem[]>(() => {\n const responsibilities = this.selectedResponsibilities();\n const resolve = (v: unknown) => this.multiLanguageResolver.resolve(v as any);\n const result = (responsibilities ?? []).map((responsibility) => ({\n id: responsibility.id,\n title: resolve(responsibility.title),\n description: responsibility.description ? resolve(responsibility.description) : undefined,\n }));\n return result;\n });\n\n /**\n * Horizontal titles (job levels) - columns of the matrix\n */\n protected horizontalTitles = computed<AXPSpreadsheetItem[]>(() => {\n const titlesInput = this.titles();\n const resolve = (v: unknown) => this.multiLanguageResolver.resolve(v as any);\n const result = (titlesInput ?? []).map((title) => ({\n id: title.id,\n title: resolve(title.title),\n description: title.description ? resolve(title.description) : undefined,\n }));\n return result;\n });\n\n /**\n * Cell options (responsibility levels) - dropdown options for each cell, loaded from service\n */\n protected cellOptions = computed<AXPSpreadsheetItem[]>(() => {\n const levels = this.responsibilityLevels();\n const resolve = (v: unknown) => this.multiLanguageResolver.resolve(v as any);\n const result = (levels ?? []).map((level) => ({\n id: level.id,\n title: resolve(level.title),\n description: level.description ? resolve(level.description) : undefined,\n }));\n return result;\n });\n\n /**\n * Spreadsheet columns - converted from horizontalTitles (job levels)\n */\n protected spreadsheetColumns = computed<AXPSpreadsheetColumn[]>(() => {\n const horizontalTitles = this.horizontalTitles();\n const cellOptions = this.cellOptions();\n\n // Create SelectBox widget configuration for responsibility levels\n const selectBoxWidget: AXPWidgetNode = {\n type: AXPWidgetsList.Editors.SelectBox,\n options: {\n valueField: 'id',\n textField: 'title',\n dataSource: cellOptions.map((option) => ({\n id: option.id,\n title: option.title,\n description: option.description,\n })),\n },\n };\n\n // Convert horizontal titles to columns\n return horizontalTitles.map((title) => ({\n name: title.id,\n title: title.title,\n description: title.description,\n path: title.id, // Path to access the value in row object\n widget: selectBoxWidget,\n }));\n });\n\n /**\n * Spreadsheet rows - converted from matrix data and vertical titles\n */\n protected spreadsheetRows = computed<Record<string, any>[]>(() => {\n const verticalTitles = this.verticalTitles();\n const horizontalTitles = this.horizontalTitles();\n const matrixData = this.value();\n\n // Convert matrix data to spreadsheet rows\n return verticalTitles.map((responsibility) => {\n const row: Record<string, any> = {\n name: responsibility.id, // Required for fixed mode row identification\n _responsibilityTitle: responsibility.title, // For row header display\n _responsibilityDescription: responsibility.description, // For row header description\n };\n\n // Add cell values for each horizontal title (column)\n horizontalTitles.forEach((title) => {\n const cellValue = matrixData[responsibility.id]?.[title.id] ?? null;\n row[title.id] = cellValue;\n });\n\n return row;\n });\n });\n\n //#endregion\n\n //#region ---- Lifecycle Methods ----\n\n constructor() {\n // Load responsibility levels and responsibility entity definition when component initializes\n this.loadResponsibilityLevels();\n this.loadResponsibilityEntityDef();\n\n // Watch for responsibilityIds input changes and sync selected responsibilities\n effect(() => {\n const ids = this.responsibilityIds();\n if (ids && ids.length > 0 && this.responsibilityEntityDef()) {\n this.loadResponsibilitiesByIds(ids);\n } else if (!ids || ids.length === 0) {\n // Try to extract responsibility IDs from matrix data keys\n const matrixData = this.value();\n const responsibilityIdsFromMatrix = Object.keys(matrixData || {});\n if (responsibilityIdsFromMatrix.length > 0 && this.responsibilityEntityDef()) {\n this.loadResponsibilitiesByIds(responsibilityIdsFromMatrix);\n } else {\n this.selectedResponsibilities.set([]);\n }\n }\n });\n\n // Watch for matrix value changes and extract responsibility IDs\n effect(() => {\n const matrixData = this.value();\n const currentResponsibilityIds = this.selectedResponsibilities().map((r) => r.id);\n const responsibilityIdsFromMatrix = Object.keys(matrixData || {});\n\n // If matrix has responsibilities that aren't in selectedResponsibilities, load them\n const missingIds = responsibilityIdsFromMatrix.filter((id) => !currentResponsibilityIds.includes(id));\n if (missingIds.length > 0 && this.responsibilityEntityDef()) {\n this.loadResponsibilitiesByIds(missingIds);\n }\n });\n }\n\n //#endregion\n\n //#region ---- Data Loading Methods ----\n\n /**\n * Load responsibility levels from the service\n */\n private async loadResponsibilityLevels(): Promise<void> {\n try {\n this.isLoading.set(true);\n const query = {\n skip: 0,\n take: 1000,\n sort: [{ field: 'level', dir: 'asc' as const }],\n };\n const result = await this.responsibilityLevelDataAccessor.query(query);\n this.responsibilityLevels.set(result.items || []);\n } catch (error) {\n console.error('Error loading responsibility levels:', error);\n this.responsibilityLevels.set([]);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /**\n * Load responsibility entity definition\n */\n private async loadResponsibilityEntityDef(): Promise<void> {\n try {\n this.isLoadingResponsibilityEntity.set(true);\n const entityDef = await this.entityResolver.resolve(\n RootConfig.module.name,\n RootConfig.entities.responsibility.name,\n );\n this.responsibilityEntityDef.set(entityDef);\n } catch (error) {\n console.error('Error loading responsibility entity definition:', error);\n this.responsibilityEntityDef.set(null);\n } finally {\n this.isLoadingResponsibilityEntity.set(false);\n }\n }\n\n /**\n * Load responsibilities by IDs\n */\n private async loadResponsibilitiesByIds(ids: string[]): Promise<void> {\n try {\n const responsibilities: AXMOrganizationManagementResponsibilityEntityModel[] = [];\n\n for (const id of ids) {\n try {\n const responsibility = await this.responsibilityDataAccessor.byKey(id);\n if (responsibility) {\n responsibilities.push(responsibility);\n }\n } catch (error) {\n console.error(`Error loading responsibility ${id}:`, error);\n }\n }\n\n this.selectedResponsibilities.set(responsibilities);\n } catch (error) {\n console.error('Error loading responsibilities by IDs:', error);\n }\n }\n\n //#endregion\n\n //#region ---- Data Transformation Methods ----\n\n /**\n * Convert spreadsheet rows back to matrix data format\n */\n private convertSpreadsheetRowsToMatrixData(rows: Record<string, any>[]): AXPSpreadsheetData {\n const horizontalTitles = this.horizontalTitles();\n const matrixData: AXPSpreadsheetData = {};\n\n rows.forEach((row) => {\n const responsibilityId = row['name']; // Row identifier (responsibility ID)\n if (!responsibilityId) {\n return;\n }\n\n matrixData[responsibilityId] = {};\n\n // Extract cell values for each column\n horizontalTitles.forEach((title) => {\n const cellValue = row[title.id] ?? null;\n matrixData[responsibilityId][title.id] = cellValue;\n });\n });\n\n return matrixData;\n }\n\n //#endregion\n\n //#region ---- Event Handlers ----\n\n /**\n * Handle spreadsheet change event - convert to matrix format\n */\n protected handleSpreadsheetChange(rows: Record<string, any>[]): void {\n const matrixData = this.convertSpreadsheetRowsToMatrixData(rows);\n this.valueChange.emit(matrixData);\n\n // Extract responsibility IDs from row names and emit\n const responsibilityIds = rows.map((row) => row['name']).filter((id) => id != null);\n this.responsibilityIdsChange.emit(responsibilityIds);\n }\n\n /**\n * Handle cell change event from spreadsheet\n */\n protected handleCellChange(event: AXPSpreadsheetCellChangeEvent): void {\n this.cellChange.emit(event);\n }\n\n /**\n * Open responsibility selector dialog\n */\n protected async handleSelectResponsibilities(): Promise<void> {\n const entityDef = this.responsibilityEntityDef();\n if (!entityDef) {\n console.error('Responsibility entity definition not loaded');\n return;\n }\n\n try {\n // Get currently selected responsibility IDs\n const selectedItemIds = this.selectedResponsibilities()\n .map((responsibility) => responsibility.id)\n .filter((id) => id != null);\n\n const result = await this.entityDataSelectorService.open({\n entity: entityDef,\n title: 'Select Responsibilities',\n allowMultiple: true,\n selectedItemIds: selectedItemIds.length > 0 ? selectedItemIds : undefined,\n });\n\n if (result && result.items && result.items.length > 0) {\n // Update selected responsibilities\n this.selectedResponsibilities.set(result.items);\n // Emit responsibility IDs change\n const responsibilityIds = result.items.map((item) => item.id).filter((id) => id != null);\n this.responsibilityIdsChange.emit(responsibilityIds);\n }\n } catch (error) {\n console.error('Error opening responsibility selector:', error);\n }\n }\n\n /**\n * Remove a responsibility from selection\n */\n protected handleRemoveResponsibility(responsibilityId: string): void {\n const currentResponsibilities = this.selectedResponsibilities();\n const updatedResponsibilities = currentResponsibilities.filter(\n (responsibility) => responsibility.id !== responsibilityId,\n );\n this.selectedResponsibilities.set(updatedResponsibilities);\n\n // Remove responsibility data from matrix value\n const currentMatrixData = this.value();\n const updatedMatrixData = { ...currentMatrixData };\n delete updatedMatrixData[responsibilityId];\n\n // Emit updated matrix data\n this.valueChange.emit(updatedMatrixData);\n\n // Emit responsibility IDs change\n const responsibilityIds = updatedResponsibilities.map((r) => r.id).filter((id) => id != null);\n this.responsibilityIdsChange.emit(responsibilityIds);\n }\n\n /**\n * Handle row change event from spreadsheet (add/remove)\n */\n protected handleRowChange(event: AXPSpreadsheetRowChangeEvent): void {\n if (event.type === 'remove') {\n // Remove responsibility from selection\n this.handleRemoveResponsibility(event.rowId);\n }\n // Note: 'add' type shouldn't happen in fixed mode, but if it does, we can handle it here\n }\n\n //#endregion\n}\n\n//#endregion\n","<div class=\"__container\">\n <div class=\"__matrix-section\">\n <div class=\"__matrix-header ax-sm\">\n @if (!readonly()) {\n <ax-button color=\"primary\"\n [text]=\"'@organization-management:job-definitions.components.responsibilities-matrix.actions.choose-responsibilities.title' | translate | async\"\n (onClick)=\"handleSelectResponsibilities()\" [disabled]=\"isLoadingResponsibilityEntity()\">\n <ax-icon icon=\"far fa-plus\"></ax-icon>\n </ax-button>\n }\n </div>\n @if (isLoading()) {\n <div class=\"__loading\">\n <span>{{ '@organization-management:job-definitions.components.responsibilities-matrix.messages.loading-responsibility-levels' | translate | async\n }}</span>\n </div>\n } @else {\n <axp-spreadsheet [title]=\"'Responsibility / Level'\" [columns]=\"spreadsheetColumns()\" [rowsInput]=\"spreadsheetRows()\"\n [rowMode]=\"'fixed'\" [readonly]=\"readonly()\" [allowRemoveRows]=\"true\" [rowTitlePath]=\"'_responsibilityTitle'\"\n [rowDescriptionPath]=\"'_responsibilityDescription'\" (cellChange)=\"handleCellChange($event)\"\n (spreadsheetChange)=\"handleSpreadsheetChange($event)\" (rowChange)=\"handleRowChange($event)\"></axp-spreadsheet>\n }\n </div>\n</div>\n"],"names":["i4"],"mappings":"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"}