@flusys/ng-iam 1.0.0-rc → 1.1.1-beta

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 (28) hide show
  1. package/README.md +24 -175
  2. package/fesm2022/{flusys-ng-iam-action-form-page.component-C_BRrrWW.mjs → flusys-ng-iam-action-form-page.component-C1j10Qhw.mjs} +202 -174
  3. package/fesm2022/flusys-ng-iam-action-form-page.component-C1j10Qhw.mjs.map +1 -0
  4. package/fesm2022/flusys-ng-iam-action-list-page.component-BCzSardO.mjs +281 -0
  5. package/fesm2022/flusys-ng-iam-action-list-page.component-BCzSardO.mjs.map +1 -0
  6. package/fesm2022/{flusys-ng-iam-flusys-ng-iam-BPIpfrjN.mjs → flusys-ng-iam-flusys-ng-iam-DISrddPh.mjs} +829 -822
  7. package/fesm2022/flusys-ng-iam-flusys-ng-iam-DISrddPh.mjs.map +1 -0
  8. package/fesm2022/flusys-ng-iam-iam-container.component-BkhqmzLi.mjs +97 -0
  9. package/fesm2022/flusys-ng-iam-iam-container.component-BkhqmzLi.mjs.map +1 -0
  10. package/fesm2022/{flusys-ng-iam-permission-page.component-CmxOBJPu.mjs → flusys-ng-iam-permission-page.component-BSQFPt_N.mjs} +12 -41
  11. package/fesm2022/flusys-ng-iam-permission-page.component-BSQFPt_N.mjs.map +1 -0
  12. package/fesm2022/{flusys-ng-iam-role-form-page.component-ByNueI1a.mjs → flusys-ng-iam-role-form-page.component-Cqziu_BM.mjs} +134 -106
  13. package/fesm2022/flusys-ng-iam-role-form-page.component-Cqziu_BM.mjs.map +1 -0
  14. package/fesm2022/flusys-ng-iam-role-list-page.component-BObCxHiB.mjs +266 -0
  15. package/fesm2022/flusys-ng-iam-role-list-page.component-BObCxHiB.mjs.map +1 -0
  16. package/fesm2022/flusys-ng-iam.mjs +1 -1
  17. package/package.json +2 -2
  18. package/types/flusys-ng-iam.d.ts +21 -40
  19. package/fesm2022/flusys-ng-iam-action-form-page.component-C_BRrrWW.mjs.map +0 -1
  20. package/fesm2022/flusys-ng-iam-action-list-page.component-Daf93zpS.mjs +0 -289
  21. package/fesm2022/flusys-ng-iam-action-list-page.component-Daf93zpS.mjs.map +0 -1
  22. package/fesm2022/flusys-ng-iam-flusys-ng-iam-BPIpfrjN.mjs.map +0 -1
  23. package/fesm2022/flusys-ng-iam-iam-container.component-Bn4kQtxW.mjs +0 -92
  24. package/fesm2022/flusys-ng-iam-iam-container.component-Bn4kQtxW.mjs.map +0 -1
  25. package/fesm2022/flusys-ng-iam-permission-page.component-CmxOBJPu.mjs.map +0 -1
  26. package/fesm2022/flusys-ng-iam-role-form-page.component-ByNueI1a.mjs.map +0 -1
  27. package/fesm2022/flusys-ng-iam-role-list-page.component-CFly5KnH.mjs +0 -316
  28. package/fesm2022/flusys-ng-iam-role-list-page.component-CFly5KnH.mjs.map +0 -1
@@ -1,289 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { inject, signal, effect, untracked, ChangeDetectionStrategy, Component } from '@angular/core';
3
- import { Router } from '@angular/router';
4
- import { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';
5
- import { ACTION_PERMISSIONS, AngularModule, PrimeModule, HasPermissionDirective } from '@flusys/ng-shared';
6
- import { MessageService, ConfirmationService } from 'primeng/api';
7
- import * as i5 from 'primeng/tag';
8
- import { TagModule } from 'primeng/tag';
9
- import { firstValueFrom } from 'rxjs';
10
- import { A as ActionApiService, c as convertActionToTreeNode, a as ActionType } from './flusys-ng-iam-flusys-ng-iam-BPIpfrjN.mjs';
11
- import * as i2 from 'primeng/button';
12
- import * as i6 from 'primeng/tooltip';
13
- import * as i7 from 'primeng/treetable';
14
-
15
- /**
16
- * Action List Page Component
17
- *
18
- * Displays hierarchical tree of actions with search, filter, and CRUD operations
19
- */
20
- class ActionListPageComponent {
21
- // Permission constants for template
22
- ACTION_PERMISSIONS = ACTION_PERMISSIONS;
23
- router = inject(Router);
24
- companyContext = inject(LAYOUT_AUTH_STATE);
25
- actionApi = inject(ActionApiService);
26
- messageService = inject(MessageService);
27
- confirmationService = inject(ConfirmationService);
28
- isLoading = signal(false, ...(ngDevMode ? [{ debugName: "isLoading" }] : []));
29
- treeNodes = signal([], ...(ngDevMode ? [{ debugName: "treeNodes" }] : []));
30
- constructor() {
31
- effect(() => {
32
- this.companyContext.currentCompanyInfo();
33
- untracked(() => this.loadActions());
34
- });
35
- }
36
- async loadActions() {
37
- this.isLoading.set(true);
38
- try {
39
- const response = await firstValueFrom(this.actionApi.getTree());
40
- const tree = response?.success ? response.data ?? [] : [];
41
- this.treeNodes.set(convertActionToTreeNode(tree));
42
- }
43
- catch {
44
- // Error toast handled by global interceptor
45
- }
46
- finally {
47
- this.isLoading.set(false);
48
- }
49
- }
50
- /**
51
- * Get action type label
52
- */
53
- getActionTypeLabel(type) {
54
- switch (type) {
55
- case ActionType.BACKEND:
56
- return 'Backend';
57
- case ActionType.FRONTEND:
58
- return 'Frontend';
59
- case ActionType.BOTH:
60
- return 'Both';
61
- default:
62
- return 'Unknown';
63
- }
64
- }
65
- /**
66
- * Get action type severity for tag styling
67
- */
68
- getActionTypeSeverity(type) {
69
- switch (type) {
70
- case ActionType.BACKEND:
71
- return 'info';
72
- case ActionType.FRONTEND:
73
- return 'success';
74
- case ActionType.BOTH:
75
- return 'warn';
76
- default:
77
- return 'info';
78
- }
79
- }
80
- onCreate() {
81
- this.router.navigate(['/iam/actions/new']);
82
- }
83
- onEdit(action) {
84
- this.router.navigate(['/iam/actions', action.id]);
85
- }
86
- onDelete(action) {
87
- if (!action?.id || !action?.name) {
88
- return;
89
- }
90
- this.confirmationService.confirm({
91
- message: `Are you sure you want to delete action "${action.name}"?`,
92
- header: 'Confirm Delete',
93
- icon: 'pi pi-exclamation-triangle',
94
- accept: async () => {
95
- try {
96
- await this.actionApi.deleteAsync({ id: action.id, type: 'delete' });
97
- await this.loadActions();
98
- this.messageService.add({
99
- severity: 'success',
100
- summary: 'Success',
101
- detail: 'Action deleted successfully',
102
- });
103
- }
104
- catch {
105
- // Error toast handled by global interceptor
106
- }
107
- },
108
- });
109
- }
110
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ActionListPageComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
111
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "21.1.3", type: ActionListPageComponent, isStandalone: true, selector: "lib-action-list-page", ngImport: i0, template: `
112
- <div class="card">
113
- <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 mb-4">
114
- <h3 class="text-lg sm:text-xl font-semibold">Actions</h3>
115
- <p-button
116
- *hasPermission="ACTION_PERMISSIONS.CREATE"
117
- label="New Action"
118
- icon="pi pi-plus"
119
- (onClick)="onCreate()"
120
- styleClass="w-full sm:w-auto" />
121
- </div>
122
-
123
- <div class="overflow-x-auto -mx-4 sm:mx-0">
124
- <p-treeTable
125
- [value]="treeNodes()"
126
- [loading]="isLoading()"
127
- dataKey="id"
128
- styleClass="p-treetable-sm"
129
- [tableStyle]="{ 'min-width': '50rem' }">
130
- <ng-template #header>
131
- <tr>
132
- <th>Name</th>
133
- <th class="hidden md:table-cell">Code</th>
134
- <th>Type</th>
135
- <th class="hidden sm:table-cell">Active</th>
136
- <th class="hidden lg:table-cell">Read Only</th>
137
- <th class="w-[100px]">Actions</th>
138
- </tr>
139
- </ng-template>
140
- <ng-template #body let-rowNode let-rowData="rowData">
141
- <tr>
142
- <td>
143
- <p-treeTableToggler [rowNode]="rowNode" />
144
- {{ rowData.name }}
145
- </td>
146
- <td class="hidden md:table-cell">{{ rowData.code ?? '-' }}</td>
147
- <td>
148
- <p-tag
149
- [value]="getActionTypeLabel(rowData.actionType)"
150
- [severity]="getActionTypeSeverity(rowData.actionType)" />
151
- </td>
152
- <td class="hidden sm:table-cell">
153
- <p-tag
154
- [value]="rowData.isActive ? 'Active' : 'Inactive'"
155
- [severity]="rowData.isActive ? 'success' : 'secondary'" />
156
- </td>
157
- <td class="hidden lg:table-cell">
158
- <p-tag
159
- [value]="rowData.readOnly ? 'Yes' : 'No'"
160
- [severity]="rowData.readOnly ? 'warn' : 'secondary'" />
161
- </td>
162
- <td>
163
- <div class="flex gap-1">
164
- <p-button
165
- *hasPermission="ACTION_PERMISSIONS.UPDATE"
166
- icon="pi pi-pencil"
167
- [text]="true"
168
- severity="secondary"
169
- size="small"
170
- pTooltip="Edit"
171
- (onClick)="onEdit(rowData)" />
172
- <p-button
173
- *hasPermission="ACTION_PERMISSIONS.DELETE"
174
- icon="pi pi-trash"
175
- [text]="true"
176
- severity="danger"
177
- size="small"
178
- pTooltip="Delete"
179
- [disabled]="rowData.readOnly"
180
- (onClick)="onDelete(rowData)" />
181
- </div>
182
- </td>
183
- </tr>
184
- </ng-template>
185
- <ng-template #emptymessage>
186
- <tr>
187
- <td colspan="6" class="text-center py-4 text-muted-color">No actions found.</td>
188
- </tr>
189
- </ng-template>
190
- </p-treeTable>
191
- </div>
192
- </div>
193
- `, isInline: true, dependencies: [{ kind: "ngmodule", type: AngularModule }, { kind: "ngmodule", type: PrimeModule }, { kind: "component", type: i2.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i5.Tag, selector: "p-tag", inputs: ["styleClass", "severity", "value", "icon", "rounded"] }, { kind: "directive", type: i6.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "autoHide", "fitContent", "hideOnEscape", "showOnEllipsis", "pTooltip", "tooltipDisabled", "tooltipOptions", "appendTo", "ptTooltip", "pTooltipPT", "pTooltipUnstyled"] }, { kind: "component", type: i7.TreeTable, selector: "p-treeTable, p-treetable, p-tree-table", inputs: ["columns", "styleClass", "tableStyle", "tableStyleClass", "autoLayout", "lazy", "lazyLoadOnInit", "paginator", "rows", "first", "pageLinks", "rowsPerPageOptions", "alwaysShowPaginator", "paginatorPosition", "paginatorStyleClass", "paginatorDropdownAppendTo", "currentPageReportTemplate", "showCurrentPageReport", "showJumpToPageDropdown", "showFirstLastIcon", "showPageLinks", "defaultSortOrder", "sortMode", "resetPageOnSort", "customSort", "selectionMode", "contextMenuSelection", "contextMenuSelectionMode", "dataKey", "metaKeySelection", "compareSelectionBy", "rowHover", "loading", "loadingIcon", "showLoader", "scrollable", "scrollHeight", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "virtualScrollDelay", "frozenWidth", "frozenColumns", "resizableColumns", "columnResizeMode", "reorderableColumns", "contextMenu", "rowTrackBy", "filters", "globalFilterFields", "filterDelay", "filterMode", "filterLocale", "paginatorLocale", "totalRecords", "sortField", "sortOrder", "multiSortMeta", "selection", "value", "virtualRowHeight", "selectionKeys", "showGridlines"], outputs: ["selectionChange", "contextMenuSelectionChange", "onFilter", "onNodeExpand", "onNodeCollapse", "onPage", "onSort", "onLazyLoad", "sortFunction", "onColResize", "onColReorder", "onNodeSelect", "onNodeUnselect", "onContextMenuSelect", "onHeaderCheckboxToggle", "onEditInit", "onEditComplete", "onEditCancel", "selectionKeysChange"] }, { kind: "component", type: i7.TreeTableToggler, selector: "p-treeTableToggler, p-treetabletoggler, p-treetable-toggler", inputs: ["rowNode"] }, { kind: "ngmodule", type: TagModule }, { kind: "directive", type: HasPermissionDirective, selector: "[hasPermission]", inputs: ["hasPermission"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
194
- }
195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.3", ngImport: i0, type: ActionListPageComponent, decorators: [{
196
- type: Component,
197
- args: [{
198
- selector: 'lib-action-list-page',
199
- standalone: true,
200
- imports: [AngularModule, PrimeModule, TagModule, HasPermissionDirective],
201
- changeDetection: ChangeDetectionStrategy.OnPush,
202
- template: `
203
- <div class="card">
204
- <div class="flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 mb-4">
205
- <h3 class="text-lg sm:text-xl font-semibold">Actions</h3>
206
- <p-button
207
- *hasPermission="ACTION_PERMISSIONS.CREATE"
208
- label="New Action"
209
- icon="pi pi-plus"
210
- (onClick)="onCreate()"
211
- styleClass="w-full sm:w-auto" />
212
- </div>
213
-
214
- <div class="overflow-x-auto -mx-4 sm:mx-0">
215
- <p-treeTable
216
- [value]="treeNodes()"
217
- [loading]="isLoading()"
218
- dataKey="id"
219
- styleClass="p-treetable-sm"
220
- [tableStyle]="{ 'min-width': '50rem' }">
221
- <ng-template #header>
222
- <tr>
223
- <th>Name</th>
224
- <th class="hidden md:table-cell">Code</th>
225
- <th>Type</th>
226
- <th class="hidden sm:table-cell">Active</th>
227
- <th class="hidden lg:table-cell">Read Only</th>
228
- <th class="w-[100px]">Actions</th>
229
- </tr>
230
- </ng-template>
231
- <ng-template #body let-rowNode let-rowData="rowData">
232
- <tr>
233
- <td>
234
- <p-treeTableToggler [rowNode]="rowNode" />
235
- {{ rowData.name }}
236
- </td>
237
- <td class="hidden md:table-cell">{{ rowData.code ?? '-' }}</td>
238
- <td>
239
- <p-tag
240
- [value]="getActionTypeLabel(rowData.actionType)"
241
- [severity]="getActionTypeSeverity(rowData.actionType)" />
242
- </td>
243
- <td class="hidden sm:table-cell">
244
- <p-tag
245
- [value]="rowData.isActive ? 'Active' : 'Inactive'"
246
- [severity]="rowData.isActive ? 'success' : 'secondary'" />
247
- </td>
248
- <td class="hidden lg:table-cell">
249
- <p-tag
250
- [value]="rowData.readOnly ? 'Yes' : 'No'"
251
- [severity]="rowData.readOnly ? 'warn' : 'secondary'" />
252
- </td>
253
- <td>
254
- <div class="flex gap-1">
255
- <p-button
256
- *hasPermission="ACTION_PERMISSIONS.UPDATE"
257
- icon="pi pi-pencil"
258
- [text]="true"
259
- severity="secondary"
260
- size="small"
261
- pTooltip="Edit"
262
- (onClick)="onEdit(rowData)" />
263
- <p-button
264
- *hasPermission="ACTION_PERMISSIONS.DELETE"
265
- icon="pi pi-trash"
266
- [text]="true"
267
- severity="danger"
268
- size="small"
269
- pTooltip="Delete"
270
- [disabled]="rowData.readOnly"
271
- (onClick)="onDelete(rowData)" />
272
- </div>
273
- </td>
274
- </tr>
275
- </ng-template>
276
- <ng-template #emptymessage>
277
- <tr>
278
- <td colspan="6" class="text-center py-4 text-muted-color">No actions found.</td>
279
- </tr>
280
- </ng-template>
281
- </p-treeTable>
282
- </div>
283
- </div>
284
- `,
285
- }]
286
- }], ctorParameters: () => [] });
287
-
288
- export { ActionListPageComponent };
289
- //# sourceMappingURL=flusys-ng-iam-action-list-page.component-Daf93zpS.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flusys-ng-iam-action-list-page.component-Daf93zpS.mjs","sources":["../../../projects/ng-iam/pages/action/action-list-page.component.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, effect, inject, signal, untracked } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { LAYOUT_AUTH_STATE } from '@flusys/ng-layout';\nimport { ACTION_PERMISSIONS, AngularModule, HasPermissionDirective, PrimeModule } from '@flusys/ng-shared';\nimport { MessageService, ConfirmationService, TreeNode } from 'primeng/api';\nimport { TagModule } from 'primeng/tag';\nimport { firstValueFrom } from 'rxjs';\nimport { ActionApiService } from '../../services/action-api.service';\nimport { ActionType, IAction } from '../../interfaces/action.interface';\nimport { convertActionToTreeNode } from '../../utils/tree-utils';\n\n/**\n * Action List Page Component\n *\n * Displays hierarchical tree of actions with search, filter, and CRUD operations\n */\n@Component({\n selector: 'lib-action-list-page',\n standalone: true,\n imports: [AngularModule, PrimeModule, TagModule, HasPermissionDirective],\n changeDetection: ChangeDetectionStrategy.OnPush,\n template: `\n <div class=\"card\">\n <div class=\"flex flex-col sm:flex-row justify-between items-start sm:items-center gap-3 mb-4\">\n <h3 class=\"text-lg sm:text-xl font-semibold\">Actions</h3>\n <p-button\n *hasPermission=\"ACTION_PERMISSIONS.CREATE\"\n label=\"New Action\"\n icon=\"pi pi-plus\"\n (onClick)=\"onCreate()\"\n styleClass=\"w-full sm:w-auto\" />\n </div>\n\n <div class=\"overflow-x-auto -mx-4 sm:mx-0\">\n <p-treeTable\n [value]=\"treeNodes()\"\n [loading]=\"isLoading()\"\n dataKey=\"id\"\n styleClass=\"p-treetable-sm\"\n [tableStyle]=\"{ 'min-width': '50rem' }\">\n <ng-template #header>\n <tr>\n <th>Name</th>\n <th class=\"hidden md:table-cell\">Code</th>\n <th>Type</th>\n <th class=\"hidden sm:table-cell\">Active</th>\n <th class=\"hidden lg:table-cell\">Read Only</th>\n <th class=\"w-[100px]\">Actions</th>\n </tr>\n </ng-template>\n <ng-template #body let-rowNode let-rowData=\"rowData\">\n <tr>\n <td>\n <p-treeTableToggler [rowNode]=\"rowNode\" />\n {{ rowData.name }}\n </td>\n <td class=\"hidden md:table-cell\">{{ rowData.code ?? '-' }}</td>\n <td>\n <p-tag\n [value]=\"getActionTypeLabel(rowData.actionType)\"\n [severity]=\"getActionTypeSeverity(rowData.actionType)\" />\n </td>\n <td class=\"hidden sm:table-cell\">\n <p-tag\n [value]=\"rowData.isActive ? 'Active' : 'Inactive'\"\n [severity]=\"rowData.isActive ? 'success' : 'secondary'\" />\n </td>\n <td class=\"hidden lg:table-cell\">\n <p-tag\n [value]=\"rowData.readOnly ? 'Yes' : 'No'\"\n [severity]=\"rowData.readOnly ? 'warn' : 'secondary'\" />\n </td>\n <td>\n <div class=\"flex gap-1\">\n <p-button\n *hasPermission=\"ACTION_PERMISSIONS.UPDATE\"\n icon=\"pi pi-pencil\"\n [text]=\"true\"\n severity=\"secondary\"\n size=\"small\"\n pTooltip=\"Edit\"\n (onClick)=\"onEdit(rowData)\" />\n <p-button\n *hasPermission=\"ACTION_PERMISSIONS.DELETE\"\n icon=\"pi pi-trash\"\n [text]=\"true\"\n severity=\"danger\"\n size=\"small\"\n pTooltip=\"Delete\"\n [disabled]=\"rowData.readOnly\"\n (onClick)=\"onDelete(rowData)\" />\n </div>\n </td>\n </tr>\n </ng-template>\n <ng-template #emptymessage>\n <tr>\n <td colspan=\"6\" class=\"text-center py-4 text-muted-color\">No actions found.</td>\n </tr>\n </ng-template>\n </p-treeTable>\n </div>\n </div>\n `,\n})\nexport class ActionListPageComponent {\n // Permission constants for template\n readonly ACTION_PERMISSIONS = ACTION_PERMISSIONS;\n\n private readonly router = inject(Router);\n private readonly companyContext = inject(LAYOUT_AUTH_STATE);\n private readonly actionApi = inject(ActionApiService);\n private readonly messageService = inject(MessageService);\n private readonly confirmationService = inject(ConfirmationService);\n\n readonly isLoading = signal(false);\n readonly treeNodes = signal<TreeNode<IAction>[]>([]);\n\n constructor() {\n effect(() => {\n this.companyContext.currentCompanyInfo();\n untracked(() => this.loadActions());\n });\n }\n\n private async loadActions(): Promise<void> {\n this.isLoading.set(true);\n try {\n const response = await firstValueFrom(this.actionApi.getTree());\n const tree = response?.success ? response.data ?? [] : [];\n this.treeNodes.set(convertActionToTreeNode(tree));\n } catch {\n // Error toast handled by global interceptor\n } finally {\n this.isLoading.set(false);\n }\n }\n\n /**\n * Get action type label\n */\n getActionTypeLabel(type: ActionType): string {\n switch (type) {\n case ActionType.BACKEND:\n return 'Backend';\n case ActionType.FRONTEND:\n return 'Frontend';\n case ActionType.BOTH:\n return 'Both';\n default:\n return 'Unknown';\n }\n }\n\n /**\n * Get action type severity for tag styling\n */\n getActionTypeSeverity(type: ActionType): 'info' | 'success' | 'warn' {\n switch (type) {\n case ActionType.BACKEND:\n return 'info';\n case ActionType.FRONTEND:\n return 'success';\n case ActionType.BOTH:\n return 'warn';\n default:\n return 'info';\n }\n }\n\n onCreate(): void {\n this.router.navigate(['/iam/actions/new']);\n }\n\n onEdit(action: IAction): void {\n this.router.navigate(['/iam/actions', action.id]);\n }\n\n onDelete(action: IAction): void {\n if (!action?.id || !action?.name) {\n return;\n }\n\n this.confirmationService.confirm({\n message: `Are you sure you want to delete action \"${action.name}\"?`,\n header: 'Confirm Delete',\n icon: 'pi pi-exclamation-triangle',\n accept: async () => {\n try {\n await this.actionApi.deleteAsync({ id: action.id, type: 'delete' });\n await this.loadActions();\n this.messageService.add({\n severity: 'success',\n summary: 'Success',\n detail: 'Action deleted successfully',\n });\n } catch {\n // Error toast handled by global interceptor\n }\n },\n });\n }\n}\n"],"names":["i1","i2","i3","i4"],"mappings":"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"}