cloud-ide-core 2.0.83 → 2.0.85
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{cloud-ide-core-workflow-registry-list.component-B453QJwg.mjs → cloud-ide-core-workflow-registry-list.component-HrnKDaiv.mjs} +75 -75
- package/fesm2022/cloud-ide-core-workflow-registry-list.component-HrnKDaiv.mjs.map +1 -0
- package/fesm2022/cloud-ide-core.mjs +77 -2
- package/fesm2022/cloud-ide-core.mjs.map +1 -1
- package/index.d.ts +2 -1
- package/package.json +1 -1
- package/fesm2022/cloud-ide-core-workflow-registry-list.component-B453QJwg.mjs.map +0 -1
|
@@ -232,43 +232,43 @@ class CideCoreWorkflowRegistryListComponent {
|
|
|
232
232
|
// Handle grid events
|
|
233
233
|
}
|
|
234
234
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideCoreWorkflowRegistryListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
235
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CideCoreWorkflowRegistryListComponent, isStandalone: true, selector: "cide-core-workflow-registry-list", ngImport: i0, template: `
|
|
236
|
-
<div class="workflow-registry-list-container">
|
|
237
|
-
<div class="header-actions">
|
|
238
|
-
<cide-ele-button
|
|
239
|
-
*ngIf="canCreate()"
|
|
240
|
-
(click)="createNew()"
|
|
241
|
-
[variant]="'primary'">
|
|
242
|
-
<cide-ele-icon>plus</cide-ele-icon>
|
|
243
|
-
New Workflow Registry
|
|
244
|
-
</cide-ele-button>
|
|
245
|
-
</div>
|
|
246
|
-
|
|
247
|
-
<cide-ele-data-grid
|
|
248
|
-
[config]="gridConfig()"
|
|
249
|
-
(gridEvent)="onGridEvent($event)">
|
|
250
|
-
|
|
251
|
-
<ng-template #workflowDetailsRenderer let-data>
|
|
252
|
-
<div class="workflow-details">
|
|
253
|
-
<div class="workflow-name">{{ data.wfrg_category_id_sygms || 'N/A' }}</div>
|
|
254
|
-
<div class="workflow-meta">
|
|
255
|
-
<span *ngIf="data.wfrg_page_id_sypg">Page: {{ data.wfrg_page_id_sypg }}</span>
|
|
256
|
-
<span *ngIf="data.wfrg_menu_id_symu">Menu: {{ data.wfrg_menu_id_symu }}</span>
|
|
257
|
-
</div>
|
|
258
|
-
</div>
|
|
259
|
-
</ng-template>
|
|
260
|
-
|
|
261
|
-
<ng-template #statusRenderer let-data>
|
|
262
|
-
<span [class]="data.wfrg_is_active ? 'status-active' : 'status-inactive'">
|
|
263
|
-
{{ data.wfrg_is_active ? 'Active' : 'Inactive' }}
|
|
264
|
-
</span>
|
|
265
|
-
</ng-template>
|
|
266
|
-
|
|
267
|
-
<ng-template #actionsRenderer let-data>
|
|
268
|
-
<cide-ele-dropdown [items]="getActionItems(data)"></cide-ele-dropdown>
|
|
269
|
-
</ng-template>
|
|
270
|
-
</cide-ele-data-grid>
|
|
271
|
-
</div>
|
|
235
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.1.7", type: CideCoreWorkflowRegistryListComponent, isStandalone: true, selector: "cide-core-workflow-registry-list", ngImport: i0, template: `
|
|
236
|
+
<div class="workflow-registry-list-container">
|
|
237
|
+
<div class="header-actions">
|
|
238
|
+
<cide-ele-button
|
|
239
|
+
*ngIf="canCreate()"
|
|
240
|
+
(click)="createNew()"
|
|
241
|
+
[variant]="'primary'">
|
|
242
|
+
<cide-ele-icon>plus</cide-ele-icon>
|
|
243
|
+
New Workflow Registry
|
|
244
|
+
</cide-ele-button>
|
|
245
|
+
</div>
|
|
246
|
+
|
|
247
|
+
<cide-ele-data-grid
|
|
248
|
+
[config]="gridConfig()"
|
|
249
|
+
(gridEvent)="onGridEvent($event)">
|
|
250
|
+
|
|
251
|
+
<ng-template #workflowDetailsRenderer let-data>
|
|
252
|
+
<div class="workflow-details">
|
|
253
|
+
<div class="workflow-name">{{ data.wfrg_category_id_sygms || 'N/A' }}</div>
|
|
254
|
+
<div class="workflow-meta">
|
|
255
|
+
<span *ngIf="data.wfrg_page_id_sypg">Page: {{ data.wfrg_page_id_sypg }}</span>
|
|
256
|
+
<span *ngIf="data.wfrg_menu_id_symu">Menu: {{ data.wfrg_menu_id_symu }}</span>
|
|
257
|
+
</div>
|
|
258
|
+
</div>
|
|
259
|
+
</ng-template>
|
|
260
|
+
|
|
261
|
+
<ng-template #statusRenderer let-data>
|
|
262
|
+
<span [class]="data.wfrg_is_active ? 'status-active' : 'status-inactive'">
|
|
263
|
+
{{ data.wfrg_is_active ? 'Active' : 'Inactive' }}
|
|
264
|
+
</span>
|
|
265
|
+
</ng-template>
|
|
266
|
+
|
|
267
|
+
<ng-template #actionsRenderer let-data>
|
|
268
|
+
<cide-ele-dropdown [items]="getActionItems(data)"></cide-ele-dropdown>
|
|
269
|
+
</ng-template>
|
|
270
|
+
</cide-ele-data-grid>
|
|
271
|
+
</div>
|
|
272
272
|
`, isInline: true, styles: [".workflow-registry-list-container{padding:1rem;height:100%;display:flex;flex-direction:column}.header-actions{margin-bottom:1rem}.workflow-details{display:flex;flex-direction:column;gap:.25rem}.workflow-name{font-weight:500}.workflow-meta{font-size:.875rem;color:#666;display:flex;gap:1rem}.status-active{color:green}.status-inactive{color:gray}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CideEleDataGridComponent, selector: "cide-ele-data-grid", inputs: ["config", "templateRenderers", "customFormatters", "actionHandlers", "serverSidePagination", "totalServerItems", "currentServerPage", "currentServerPageSize", "dragDropEnabled"], outputs: ["gridEvent"] }, { kind: "component", type: CideEleButtonComponent, selector: "button[cideEleButton], a[cideEleButton], cide-ele-button", inputs: ["label", "variant", "size", "type", "shape", "elevation", "disabled", "id", "loading", "fullWidth", "leftIcon", "rightIcon", "customClass", "tooltip", "ariaLabel", "testId", "routerLink", "routerExtras", "preventDoubleClick", "animated"], outputs: ["btnClick", "doubleClick"] }, { kind: "component", type: CideIconComponent, selector: "cide-ele-icon", inputs: ["size", "type", "toolTip"] }, { kind: "component", type: CideEleDropdownComponent, selector: "cide-ele-dropdown", inputs: ["items", "config", "triggerTemplate", "menuTemplate"], outputs: ["itemClick", "dropdownToggle"] }] });
|
|
273
273
|
}
|
|
274
274
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImport: i0, type: CideCoreWorkflowRegistryListComponent, decorators: [{
|
|
@@ -279,45 +279,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.1.7", ngImpor
|
|
|
279
279
|
CideEleButtonComponent,
|
|
280
280
|
CideIconComponent,
|
|
281
281
|
CideEleDropdownComponent
|
|
282
|
-
], template: `
|
|
283
|
-
<div class="workflow-registry-list-container">
|
|
284
|
-
<div class="header-actions">
|
|
285
|
-
<cide-ele-button
|
|
286
|
-
*ngIf="canCreate()"
|
|
287
|
-
(click)="createNew()"
|
|
288
|
-
[variant]="'primary'">
|
|
289
|
-
<cide-ele-icon>plus</cide-ele-icon>
|
|
290
|
-
New Workflow Registry
|
|
291
|
-
</cide-ele-button>
|
|
292
|
-
</div>
|
|
293
|
-
|
|
294
|
-
<cide-ele-data-grid
|
|
295
|
-
[config]="gridConfig()"
|
|
296
|
-
(gridEvent)="onGridEvent($event)">
|
|
297
|
-
|
|
298
|
-
<ng-template #workflowDetailsRenderer let-data>
|
|
299
|
-
<div class="workflow-details">
|
|
300
|
-
<div class="workflow-name">{{ data.wfrg_category_id_sygms || 'N/A' }}</div>
|
|
301
|
-
<div class="workflow-meta">
|
|
302
|
-
<span *ngIf="data.wfrg_page_id_sypg">Page: {{ data.wfrg_page_id_sypg }}</span>
|
|
303
|
-
<span *ngIf="data.wfrg_menu_id_symu">Menu: {{ data.wfrg_menu_id_symu }}</span>
|
|
304
|
-
</div>
|
|
305
|
-
</div>
|
|
306
|
-
</ng-template>
|
|
307
|
-
|
|
308
|
-
<ng-template #statusRenderer let-data>
|
|
309
|
-
<span [class]="data.wfrg_is_active ? 'status-active' : 'status-inactive'">
|
|
310
|
-
{{ data.wfrg_is_active ? 'Active' : 'Inactive' }}
|
|
311
|
-
</span>
|
|
312
|
-
</ng-template>
|
|
313
|
-
|
|
314
|
-
<ng-template #actionsRenderer let-data>
|
|
315
|
-
<cide-ele-dropdown [items]="getActionItems(data)"></cide-ele-dropdown>
|
|
316
|
-
</ng-template>
|
|
317
|
-
</cide-ele-data-grid>
|
|
318
|
-
</div>
|
|
282
|
+
], template: `
|
|
283
|
+
<div class="workflow-registry-list-container">
|
|
284
|
+
<div class="header-actions">
|
|
285
|
+
<cide-ele-button
|
|
286
|
+
*ngIf="canCreate()"
|
|
287
|
+
(click)="createNew()"
|
|
288
|
+
[variant]="'primary'">
|
|
289
|
+
<cide-ele-icon>plus</cide-ele-icon>
|
|
290
|
+
New Workflow Registry
|
|
291
|
+
</cide-ele-button>
|
|
292
|
+
</div>
|
|
293
|
+
|
|
294
|
+
<cide-ele-data-grid
|
|
295
|
+
[config]="gridConfig()"
|
|
296
|
+
(gridEvent)="onGridEvent($event)">
|
|
297
|
+
|
|
298
|
+
<ng-template #workflowDetailsRenderer let-data>
|
|
299
|
+
<div class="workflow-details">
|
|
300
|
+
<div class="workflow-name">{{ data.wfrg_category_id_sygms || 'N/A' }}</div>
|
|
301
|
+
<div class="workflow-meta">
|
|
302
|
+
<span *ngIf="data.wfrg_page_id_sypg">Page: {{ data.wfrg_page_id_sypg }}</span>
|
|
303
|
+
<span *ngIf="data.wfrg_menu_id_symu">Menu: {{ data.wfrg_menu_id_symu }}</span>
|
|
304
|
+
</div>
|
|
305
|
+
</div>
|
|
306
|
+
</ng-template>
|
|
307
|
+
|
|
308
|
+
<ng-template #statusRenderer let-data>
|
|
309
|
+
<span [class]="data.wfrg_is_active ? 'status-active' : 'status-inactive'">
|
|
310
|
+
{{ data.wfrg_is_active ? 'Active' : 'Inactive' }}
|
|
311
|
+
</span>
|
|
312
|
+
</ng-template>
|
|
313
|
+
|
|
314
|
+
<ng-template #actionsRenderer let-data>
|
|
315
|
+
<cide-ele-dropdown [items]="getActionItems(data)"></cide-ele-dropdown>
|
|
316
|
+
</ng-template>
|
|
317
|
+
</cide-ele-data-grid>
|
|
318
|
+
</div>
|
|
319
319
|
`, styles: [".workflow-registry-list-container{padding:1rem;height:100%;display:flex;flex-direction:column}.header-actions{margin-bottom:1rem}.workflow-details{display:flex;flex-direction:column;gap:.25rem}.workflow-name{font-weight:500}.workflow-meta{font-size:.875rem;color:#666;display:flex;gap:1rem}.status-active{color:green}.status-inactive{color:gray}\n"] }]
|
|
320
320
|
}] });
|
|
321
321
|
|
|
322
322
|
export { CideCoreWorkflowRegistryListComponent };
|
|
323
|
-
//# sourceMappingURL=cloud-ide-core-workflow-registry-list.component-
|
|
323
|
+
//# sourceMappingURL=cloud-ide-core-workflow-registry-list.component-HrnKDaiv.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloud-ide-core-workflow-registry-list.component-HrnKDaiv.mjs","sources":["../../../projects/cloud-ide-core/src/lib/core/workflow-management/services/workflow-registry.service.ts","../../../projects/cloud-ide-core/src/lib/core/workflow-management/components/workflow-registry-list/workflow-registry-list.component.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { cidePath, coreRoutesUrl, hostManagerRoutesUrl, generateStringFromObject } from 'cloud-ide-lms-model';\n\nexport interface CreateWorkflowRegistryDto {\n wfrg_entity_id_syen?: string;\n wfrg_page_id_sypg?: string;\n wfrg_menu_id_symu?: string;\n wfrg_category_id_sygms?: string;\n wfrg_component_selector?: string;\n wfrg_component_path?: string;\n wfrg_component_query?: string;\n wfrg_view_mode_id_sygms?: string;\n wfrg_trigger_type_id_sygms?: string;\n wfrg_trigger_condition?: string;\n wfrg_auto_initialize?: boolean;\n wfrg_reinitialize_on_edit?: boolean;\n wfrg_notify_approvers_on_final_status?: boolean;\n wfrg_show_approver_names?: boolean;\n wfrg_mask_approver_info?: boolean;\n wfrg_valid_from_date?: Date;\n wfrg_valid_to_date?: Date;\n wfrg_is_active?: boolean;\n}\n\nexport interface UpdateWorkflowRegistryDto extends CreateWorkflowRegistryDto {\n wfrg_id?: string;\n}\n\nexport interface WorkflowRegistryResponse {\n success: boolean;\n message?: string;\n data?: any;\n total?: number;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CideCoreWorkflowRegistryService {\n private http = inject(HttpClient);\n\n /**\n * Create workflow registry\n */\n createRegistry(data: CreateWorkflowRegistryDto): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry\n ]);\n return this.http.post<WorkflowRegistryResponse>(url, data);\n }\n\n /**\n * Get workflow registry list\n */\n getRegistryList(query?: any): Observable<WorkflowRegistryResponse> {\n const queryString = query ? generateStringFromObject(query) : '';\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n queryString\n ]);\n return this.http.get<WorkflowRegistryResponse>(url);\n }\n\n /**\n * Get workflow registry by ID\n */\n getRegistryById(id: string): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n id\n ]);\n return this.http.get<WorkflowRegistryResponse>(url);\n }\n\n /**\n * Update workflow registry\n */\n updateRegistry(data: UpdateWorkflowRegistryDto): Observable<WorkflowRegistryResponse> {\n if (!data.wfrg_id) {\n throw new Error('Workflow registry ID is required for update');\n }\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n data.wfrg_id\n ]);\n return this.http.put<WorkflowRegistryResponse>(url, data);\n }\n\n /**\n * Delete workflow registry\n */\n deleteRegistry(id: string): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n id\n ]);\n return this.http.delete<WorkflowRegistryResponse>(url);\n }\n\n /**\n * Get workflow registry by page ID\n */\n getRegistryByPage(pageId: string): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n 'by-page',\n pageId\n ]);\n return this.http.get<WorkflowRegistryResponse>(url);\n }\n\n /**\n * Get workflow registry by menu ID\n */\n getRegistryByMenu(menuId: string): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n 'by-menu',\n menuId\n ]);\n return this.http.get<WorkflowRegistryResponse>(url);\n }\n\n /**\n * Get workflow registry by category ID\n */\n getRegistryByCategory(categoryId: string): Observable<WorkflowRegistryResponse> {\n const url = cidePath.join([\n hostManagerRoutesUrl.cideSuiteHost,\n coreRoutesUrl.module,\n coreRoutesUrl.workflowRegistry,\n 'by-category',\n categoryId\n ]);\n return this.http.get<WorkflowRegistryResponse>(url);\n }\n}\n\n","import { Component, signal, viewChild, TemplateRef, DestroyRef, inject, computed, OnInit } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { Router } from '@angular/router';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { CideEleDataGridComponent, CideEleButtonComponent, CideIconComponent, CideEleDropdownComponent, GridConfiguration, TemplateContext } from 'cloud-ide-element';\nimport { AppStateHelperService, RightsService } from 'cloud-ide-layout';\nimport { CideCoreWorkflowRegistryService } from '../../services/workflow-registry.service';\n\n@Component({\n selector: 'cide-core-workflow-registry-list',\n standalone: true,\n imports: [\n CommonModule,\n CideEleDataGridComponent,\n CideEleButtonComponent,\n CideIconComponent,\n CideEleDropdownComponent\n ],\n template: `\n <div class=\"workflow-registry-list-container\">\n <div class=\"header-actions\">\n <cide-ele-button \n *ngIf=\"canCreate()\"\n (click)=\"createNew()\"\n [variant]=\"'primary'\">\n <cide-ele-icon>plus</cide-ele-icon>\n New Workflow Registry\n </cide-ele-button>\n </div>\n \n <cide-ele-data-grid\n [config]=\"gridConfig()\"\n (gridEvent)=\"onGridEvent($event)\">\n \n <ng-template #workflowDetailsRenderer let-data>\n <div class=\"workflow-details\">\n <div class=\"workflow-name\">{{ data.wfrg_category_id_sygms || 'N/A' }}</div>\n <div class=\"workflow-meta\">\n <span *ngIf=\"data.wfrg_page_id_sypg\">Page: {{ data.wfrg_page_id_sypg }}</span>\n <span *ngIf=\"data.wfrg_menu_id_symu\">Menu: {{ data.wfrg_menu_id_symu }}</span>\n </div>\n </div>\n </ng-template>\n \n <ng-template #statusRenderer let-data>\n <span [class]=\"data.wfrg_is_active ? 'status-active' : 'status-inactive'\">\n {{ data.wfrg_is_active ? 'Active' : 'Inactive' }}\n </span>\n </ng-template>\n \n <ng-template #actionsRenderer let-data>\n <cide-ele-dropdown [items]=\"getActionItems(data)\"></cide-ele-dropdown>\n </ng-template>\n </cide-ele-data-grid>\n </div>\n `,\n styles: [`\n .workflow-registry-list-container {\n padding: 1rem;\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .header-actions {\n margin-bottom: 1rem;\n }\n .workflow-details {\n display: flex;\n flex-direction: column;\n gap: 0.25rem;\n }\n .workflow-name {\n font-weight: 500;\n }\n .workflow-meta {\n font-size: 0.875rem;\n color: #666;\n display: flex;\n gap: 1rem;\n }\n .status-active {\n color: green;\n }\n .status-inactive {\n color: gray;\n }\n `]\n})\nexport class CideCoreWorkflowRegistryListComponent implements OnInit {\n private destroyRef = inject(DestroyRef);\n private workflowService = inject(CideCoreWorkflowRegistryService);\n private router = inject(Router);\n private rightsService = inject(RightsService);\n\n workflows = signal<any[]>([]);\n loading = signal(false);\n error = signal<string | null>(null);\n \n canCreate = computed(() => this.rightsService.hasRight('CREATE'));\n canEdit = computed(() => this.rightsService.hasRight('EDIT'));\n canDelete = computed(() => this.rightsService.hasRight('DELETE'));\n\n gridConfig = signal<GridConfiguration<any>>({\n id: 'workflow-registry-grid',\n columns: [\n { key: 'details', header: 'Workflow Details', type: 'custom', width: 'auto', renderer: 'workflowDetailsRenderer' },\n { key: 'wfrg_component_selector', header: 'Component Selector', type: 'text', width: '200px' },\n { key: 'status', header: 'Status', type: 'custom', width: '100px', renderer: 'statusRenderer' },\n { key: 'actions', header: '', type: 'custom', width: '120px', renderer: 'actionsRenderer' }\n ],\n data: [],\n pagination: {\n enabled: true,\n pageSize: 10,\n pageSizeOptions: [10, 25, 50, 100],\n showQuickJump: true,\n showPageInfo: true,\n showRefresh: true\n },\n search: {\n enabled: true,\n placeholder: 'Search workflows...',\n searchableColumns: [],\n debounceMs: 300\n },\n loading: {\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n },\n responsive: true\n });\n\n ngOnInit(): void {\n this.loadWorkflows();\n }\n\n loadWorkflows(): void {\n this.loading.set(true);\n this.workflowService.getRegistryList()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n const workflowsData = Array.isArray(response.data) ? response.data : [];\n this.workflows.set(workflowsData);\n // Update grid config with new data\n this.gridConfig.update(config => ({\n ...config,\n data: workflowsData,\n loading: {\n ...config.loading,\n useDefer: true,\n skeletonRows: 5,\n showOverlay: false\n }\n }));\n } else {\n this.error.set(response.message || 'Failed to load workflows');\n }\n this.loading.set(false);\n },\n error: (err) => {\n this.error.set('Failed to load workflows');\n this.loading.set(false);\n }\n });\n }\n\n createNew(): void {\n this.router.navigate(['/core/workflow-registry/create']);\n }\n\n editWorkflow(workflow: any): void {\n this.router.navigate(['/core/workflow-registry/edit', workflow.wfrg_id]);\n }\n\n deleteWorkflow(workflow: any): void {\n if (confirm('Are you sure you want to delete this workflow?')) {\n this.workflowService.deleteRegistry(workflow.wfrg_id)\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe({\n next: (response) => {\n if (response.success) {\n this.loadWorkflows();\n }\n }\n });\n }\n }\n\n getActionItems(workflow: any): any[] {\n const items: any[] = [];\n if (this.canEdit()) {\n items.push({ label: 'Edit', action: () => this.editWorkflow(workflow) });\n }\n if (this.canDelete()) {\n items.push({ label: 'Delete', action: () => this.deleteWorkflow(workflow) });\n }\n return items;\n }\n\n onGridEvent(event: any): void {\n // Handle grid events\n }\n}\n\n"],"names":[],"mappings":"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"}
|
|
@@ -261,7 +261,7 @@ const coreRoutes = [
|
|
|
261
261
|
// Workflow Management Routes
|
|
262
262
|
{
|
|
263
263
|
path: 'workflow-registry',
|
|
264
|
-
loadComponent: () => import('./cloud-ide-core-workflow-registry-list.component-
|
|
264
|
+
loadComponent: () => import('./cloud-ide-core-workflow-registry-list.component-HrnKDaiv.mjs').then(c => c.CideCoreWorkflowRegistryListComponent),
|
|
265
265
|
title: 'Workflow Registry',
|
|
266
266
|
canActivate: [authGuard],
|
|
267
267
|
data: {
|
|
@@ -12170,9 +12170,11 @@ class CideCoreUserCreateComponent {
|
|
|
12170
12170
|
* - If modified !== actual: create/update exception
|
|
12171
12171
|
* - If modified === actual BUT exception exists in DB: delete exception
|
|
12172
12172
|
* - If modified === actual AND no exception exists: do nothing
|
|
12173
|
+
* - Also process all existing exceptions from DB to ensure nothing is missed
|
|
12173
12174
|
*/
|
|
12174
12175
|
processRoleExceptions() {
|
|
12175
12176
|
const exceptions = [];
|
|
12177
|
+
const processedExceptionKeys = new Set(); // Track processed exceptions to avoid duplicates
|
|
12176
12178
|
console.log('🎭 Processing role exceptions for all entity mappings...');
|
|
12177
12179
|
// Iterate through all entity mappings
|
|
12178
12180
|
this.entityMappings().forEach((mapping, mappingIndex) => {
|
|
@@ -12185,6 +12187,9 @@ class CideCoreUserCreateComponent {
|
|
|
12185
12187
|
const permissionData = menu?._permissionValues?.[permissionId] || {};
|
|
12186
12188
|
// Find existing exception for this menu/permission combination
|
|
12187
12189
|
const existingException = this.findExistingException(this.userId() || '', mapping._id || '', permissionId, menu._id || '');
|
|
12190
|
+
// Create a unique key for this exception
|
|
12191
|
+
const exceptionKey = `${mapping._id || ''}_${menu._id || ''}_${permissionId}`;
|
|
12192
|
+
processedExceptionKeys.add(exceptionKey);
|
|
12188
12193
|
// Check if permission was modified (different from actual role permission)
|
|
12189
12194
|
if (permissionData.modified !== permissionData.actual) {
|
|
12190
12195
|
// Create or update exception
|
|
@@ -12228,6 +12233,76 @@ class CideCoreUserCreateComponent {
|
|
|
12228
12233
|
});
|
|
12229
12234
|
}
|
|
12230
12235
|
});
|
|
12236
|
+
// CRITICAL: Process ALL existing exceptions from DB, even if not in current menu rights
|
|
12237
|
+
// This ensures we don't miss any exceptions that should be deleted
|
|
12238
|
+
existingExceptions.forEach((existingException) => {
|
|
12239
|
+
if (existingException._id) {
|
|
12240
|
+
const exceptionKey = `${existingException.syusrex_user_entity_mapping_id_syenm || ''}_${existingException.syusrex_menu_id_syme || ''}_${existingException.syusrex_role_permissions_id_sygms || ''}`;
|
|
12241
|
+
// If this exception wasn't processed above, we need to decide what to do with it
|
|
12242
|
+
if (!processedExceptionKeys.has(exceptionKey)) {
|
|
12243
|
+
// Find the corresponding menu and permission to check current state
|
|
12244
|
+
const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];
|
|
12245
|
+
const menu = menuRights.find((m) => m._id === existingException.syusrex_menu_id_syme);
|
|
12246
|
+
if (menu && menu._permissionValues) {
|
|
12247
|
+
// Menu exists in current rights - check permission state
|
|
12248
|
+
const permissionId = existingException.syusrex_role_permissions_id_sygms?.toString() || '';
|
|
12249
|
+
const permissionData = menu._permissionValues[permissionId];
|
|
12250
|
+
if (permissionData) {
|
|
12251
|
+
// Permission exists - if modified === actual, delete the exception
|
|
12252
|
+
if (permissionData.modified === permissionData.actual) {
|
|
12253
|
+
const exceptionToDelete = {
|
|
12254
|
+
_id: existingException._id,
|
|
12255
|
+
syusrex_user_id_user: this.userId() || '',
|
|
12256
|
+
syusrex_user_entity_mapping_id_syenm: mapping._id || '',
|
|
12257
|
+
syusrex_role_id_syusrol: mapping.syenm_role_id_syusrol?._id || '',
|
|
12258
|
+
syusrex_role_permissions_id_sygms: permissionId,
|
|
12259
|
+
syusrex_menu_id_syme: menu._id || '',
|
|
12260
|
+
syusrex_isactive: true,
|
|
12261
|
+
syusrex_status: false,
|
|
12262
|
+
isDelete: true
|
|
12263
|
+
};
|
|
12264
|
+
exceptions.push(exceptionToDelete);
|
|
12265
|
+
console.log(`🗑️ Exception marked for deletion (permission matches role): ${existingException._id}`);
|
|
12266
|
+
}
|
|
12267
|
+
// If modified !== actual, it should have been processed above, so we don't need to do anything
|
|
12268
|
+
}
|
|
12269
|
+
else {
|
|
12270
|
+
// Permission doesn't exist in menu - this shouldn't happen, but mark for deletion to be safe
|
|
12271
|
+
const exceptionToDelete = {
|
|
12272
|
+
_id: existingException._id,
|
|
12273
|
+
syusrex_user_id_user: this.userId() || '',
|
|
12274
|
+
syusrex_user_entity_mapping_id_syenm: mapping._id || '',
|
|
12275
|
+
syusrex_role_id_syusrol: mapping.syenm_role_id_syusrol?._id || '',
|
|
12276
|
+
syusrex_role_permissions_id_sygms: permissionId,
|
|
12277
|
+
syusrex_menu_id_syme: menu._id || '',
|
|
12278
|
+
syusrex_isactive: true,
|
|
12279
|
+
syusrex_status: false,
|
|
12280
|
+
isDelete: true
|
|
12281
|
+
};
|
|
12282
|
+
exceptions.push(exceptionToDelete);
|
|
12283
|
+
console.log(`🗑️ Exception marked for deletion (permission not found in menu): ${existingException._id}`);
|
|
12284
|
+
}
|
|
12285
|
+
}
|
|
12286
|
+
else {
|
|
12287
|
+
// Menu doesn't exist in current rights - mark for deletion
|
|
12288
|
+
// This handles cases where menu was removed or user no longer has access
|
|
12289
|
+
const exceptionToDelete = {
|
|
12290
|
+
_id: existingException._id,
|
|
12291
|
+
syusrex_user_id_user: this.userId() || '',
|
|
12292
|
+
syusrex_user_entity_mapping_id_syenm: mapping._id || '',
|
|
12293
|
+
syusrex_role_id_syusrol: mapping.syenm_role_id_syusrol?._id || '',
|
|
12294
|
+
syusrex_role_permissions_id_sygms: existingException.syusrex_role_permissions_id_sygms?.toString() || '',
|
|
12295
|
+
syusrex_menu_id_syme: existingException.syusrex_menu_id_syme?.toString() || '',
|
|
12296
|
+
syusrex_isactive: true,
|
|
12297
|
+
syusrex_status: false,
|
|
12298
|
+
isDelete: true
|
|
12299
|
+
};
|
|
12300
|
+
exceptions.push(exceptionToDelete);
|
|
12301
|
+
console.log(`🗑️ Exception marked for deletion (menu not in current rights): ${existingException._id}`);
|
|
12302
|
+
}
|
|
12303
|
+
}
|
|
12304
|
+
}
|
|
12305
|
+
});
|
|
12231
12306
|
});
|
|
12232
12307
|
console.log(`🎭 Total exceptions to process: ${exceptions.length}`, exceptions);
|
|
12233
12308
|
return exceptions;
|
|
@@ -12633,7 +12708,7 @@ class CideCoreUserCreateComponent {
|
|
|
12633
12708
|
key: 'syme_permissions_id_sygms',
|
|
12634
12709
|
header: 'Permissions',
|
|
12635
12710
|
type: 'custom',
|
|
12636
|
-
width: '
|
|
12711
|
+
width: '300px',
|
|
12637
12712
|
truncate: true,
|
|
12638
12713
|
align: 'left',
|
|
12639
12714
|
renderer: 'permissionsRenderer'
|