cloud-ide-core 2.0.84 → 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 +45 -8
- package/fesm2022/cloud-ide-core.mjs.map +1 -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":";;;;;;;;;;;MAwCa,+BAA+B,CAAA;AAClC,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC;;AAEG;AACH,IAAA,cAAc,CAAC,IAA+B,EAAA;AAC5C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC;AACf,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAA2B,GAAG,EAAE,IAAI,CAAC;;AAG5D;;AAEG;AACH,IAAA,eAAe,CAAC,KAAW,EAAA;AACzB,QAAA,MAAM,WAAW,GAAG,KAAK,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,EAAE;AAChE,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,gBAAgB;YAC9B;AACD,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,GAAG,CAAC;;AAGrD;;AAEG;AACH,IAAA,eAAe,CAAC,EAAU,EAAA;AACxB,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,gBAAgB;YAC9B;AACD,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,GAAG,CAAC;;AAGrD;;AAEG;AACH,IAAA,cAAc,CAAC,IAA+B,EAAA;AAC5C,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACjB,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;;AAEhE,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,gBAAgB;AAC9B,YAAA,IAAI,CAAC;AACN,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,GAAG,EAAE,IAAI,CAAC;;AAG3D;;AAEG;AACH,IAAA,cAAc,CAAC,EAAU,EAAA;AACvB,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,gBAAgB;YAC9B;AACD,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAA2B,GAAG,CAAC;;AAGxD;;AAEG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAA;AAC9B,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,gBAAgB;YAC9B,SAAS;YACT;AACD,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,GAAG,CAAC;;AAGrD;;AAEG;AACH,IAAA,iBAAiB,CAAC,MAAc,EAAA;AAC9B,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,gBAAgB;YAC9B,SAAS;YACT;AACD,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,GAAG,CAAC;;AAGrD;;AAEG;AACH,IAAA,qBAAqB,CAAC,UAAkB,EAAA;AACtC,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC;AACxB,YAAA,oBAAoB,CAAC,aAAa;AAClC,YAAA,aAAa,CAAC,MAAM;AACpB,YAAA,aAAa,CAAC,gBAAgB;YAC9B,aAAa;YACb;AACD,SAAA,CAAC;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAA2B,GAAG,CAAC;;uGA9G1C,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAA/B,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,cAF9B,MAAM,EAAA,CAAA;;2FAEP,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;MCiDY,qCAAqC,CAAA;AACxC,IAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,IAAA,eAAe,GAAG,MAAM,CAAC,+BAA+B,CAAC;AACzD,IAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAE7C,IAAA,SAAS,GAAG,MAAM,CAAQ,EAAE,qDAAC;AAC7B,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,mDAAC;AACvB,IAAA,KAAK,GAAG,MAAM,CAAgB,IAAI,iDAAC;AAEnC,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,qDAAC;AACjE,IAAA,OAAO,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,mDAAC;AAC7D,IAAA,SAAS,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,qDAAC;IAEjE,UAAU,GAAG,MAAM,CAAyB;AAC1C,QAAA,EAAE,EAAE,wBAAwB;AAC5B,QAAA,OAAO,EAAE;AACP,YAAA,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,kBAAkB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,yBAAyB,EAAE;AAClH,YAAA,EAAE,GAAG,EAAE,yBAAyB,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;AAC9F,YAAA,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE;AAC/F,YAAA,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB;AAC1F,SAAA;AACD,QAAA,IAAI,EAAE,EAAE;AACR,QAAA,UAAU,EAAE;AACV,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,QAAQ,EAAE,EAAE;YACZ,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;AAClC,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,YAAY,EAAE,IAAI;AAClB,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,MAAM,EAAE;AACN,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,WAAW,EAAE,qBAAqB;AAClC,YAAA,iBAAiB,EAAE,EAAE;AACrB,YAAA,UAAU,EAAE;AACb,SAAA;AACD,QAAA,OAAO,EAAE;AACP,YAAA,QAAQ,EAAE,IAAI;AACd,YAAA,YAAY,EAAE,CAAC;AACf,YAAA,WAAW,EAAE;AACd,SAAA;AACD,QAAA,UAAU,EAAE;AACb,KAAA,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,YAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEF,QAAQ,GAAA;QACN,IAAI,CAAC,aAAa,EAAE;;IAGtB,aAAa,GAAA;AACX,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,CAAC,eAAe;AACjC,aAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,gBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;oBACpB,MAAM,aAAa,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,GAAG,EAAE;AACvE,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC;;oBAEjC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK;AAChC,wBAAA,GAAG,MAAM;AACT,wBAAA,IAAI,EAAE,aAAa;AACnB,wBAAA,OAAO,EAAE;4BACP,GAAG,MAAM,CAAC,OAAO;AACjB,4BAAA,QAAQ,EAAE,IAAI;AACd,4BAAA,YAAY,EAAE,CAAC;AACf,4BAAA,WAAW,EAAE;AACd;AACF,qBAAA,CAAC,CAAC;;qBACE;oBACL,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,IAAI,0BAA0B,CAAC;;AAEhE,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;aACxB;AACD,YAAA,KAAK,EAAE,CAAC,GAAG,KAAI;AACb,gBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC;AAC1C,gBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;;AAE1B,SAAA,CAAC;;IAGN,SAAS,GAAA;QACP,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,gCAAgC,CAAC,CAAC;;AAG1D,IAAA,YAAY,CAAC,QAAa,EAAA;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,8BAA8B,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC;;AAG1E,IAAA,cAAc,CAAC,QAAa,EAAA;AAC1B,QAAA,IAAI,OAAO,CAAC,gDAAgD,CAAC,EAAE;YAC7D,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO;AACjD,iBAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC;AACxC,iBAAA,SAAS,CAAC;AACT,gBAAA,IAAI,EAAE,CAAC,QAAQ,KAAI;AACjB,oBAAA,IAAI,QAAQ,CAAC,OAAO,EAAE;wBACpB,IAAI,CAAC,aAAa,EAAE;;;AAGzB,aAAA,CAAC;;;AAIR,IAAA,cAAc,CAAC,QAAa,EAAA;QAC1B,MAAM,KAAK,GAAU,EAAE;AACvB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAE1E,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC;;AAE9E,QAAA,OAAO,KAAK;;AAGd,IAAA,WAAW,CAAC,KAAU,EAAA;;;uGAlHX,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAArC,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qCAAqC,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,kCAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAtEtC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCT,EAAA,QAAA,EAAA,IAAA,EAAA,MAAA,EAAA,CAAA,6VAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EA3CC,YAAY,mIACZ,wBAAwB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,QAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,gBAAA,EAAA,sBAAA,EAAA,kBAAA,EAAA,mBAAA,EAAA,uBAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,sBAAsB,EAAA,QAAA,EAAA,0DAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,MAAA,EAAA,MAAA,EAAA,OAAA,EAAA,WAAA,EAAA,UAAA,EAAA,IAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,aAAA,EAAA,SAAA,EAAA,WAAA,EAAA,QAAA,EAAA,YAAA,EAAA,cAAA,EAAA,oBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACtB,iBAAiB,+FACjB,wBAAwB,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,cAAA,CAAA,EAAA,OAAA,EAAA,CAAA,WAAA,EAAA,gBAAA,CAAA,EAAA,CAAA,EAAA,CAAA;;2FAwEf,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBAhFjD,SAAS;+BACE,kCAAkC,EAAA,UAAA,EAChC,IAAI,EAAA,OAAA,EACP;wBACP,YAAY;wBACZ,wBAAwB;wBACxB,sBAAsB;wBACtB,iBAAiB;wBACjB;qBACD,EAAA,QAAA,EACS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqCT,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,6VAAA,CAAA,EAAA;;;;;"}
|
|
@@ -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: {
|
|
@@ -12233,21 +12233,41 @@ class CideCoreUserCreateComponent {
|
|
|
12233
12233
|
});
|
|
12234
12234
|
}
|
|
12235
12235
|
});
|
|
12236
|
-
//
|
|
12236
|
+
// CRITICAL: Process ALL existing exceptions from DB, even if not in current menu rights
|
|
12237
12237
|
// This ensures we don't miss any exceptions that should be deleted
|
|
12238
12238
|
existingExceptions.forEach((existingException) => {
|
|
12239
12239
|
if (existingException._id) {
|
|
12240
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,
|
|
12241
|
+
// If this exception wasn't processed above, we need to decide what to do with it
|
|
12242
12242
|
if (!processedExceptionKeys.has(exceptionKey)) {
|
|
12243
|
-
// Find the corresponding menu and permission to check
|
|
12243
|
+
// Find the corresponding menu and permission to check current state
|
|
12244
12244
|
const menuRights = this.menuRightsMap()[mappingIndex.toString()] || [];
|
|
12245
12245
|
const menu = menuRights.find((m) => m._id === existingException.syusrex_menu_id_syme);
|
|
12246
12246
|
if (menu && menu._permissionValues) {
|
|
12247
|
+
// Menu exists in current rights - check permission state
|
|
12247
12248
|
const permissionId = existingException.syusrex_role_permissions_id_sygms?.toString() || '';
|
|
12248
12249
|
const permissionData = menu._permissionValues[permissionId];
|
|
12249
|
-
if (permissionData
|
|
12250
|
-
// Permission
|
|
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
|
|
12251
12271
|
const exceptionToDelete = {
|
|
12252
12272
|
_id: existingException._id,
|
|
12253
12273
|
syusrex_user_id_user: this.userId() || '',
|
|
@@ -12260,9 +12280,26 @@ class CideCoreUserCreateComponent {
|
|
|
12260
12280
|
isDelete: true
|
|
12261
12281
|
};
|
|
12262
12282
|
exceptions.push(exceptionToDelete);
|
|
12263
|
-
console.log(`🗑️ Exception marked for deletion (
|
|
12283
|
+
console.log(`🗑️ Exception marked for deletion (permission not found in menu): ${existingException._id}`);
|
|
12264
12284
|
}
|
|
12265
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
|
+
}
|
|
12266
12303
|
}
|
|
12267
12304
|
}
|
|
12268
12305
|
});
|
|
@@ -12671,7 +12708,7 @@ class CideCoreUserCreateComponent {
|
|
|
12671
12708
|
key: 'syme_permissions_id_sygms',
|
|
12672
12709
|
header: 'Permissions',
|
|
12673
12710
|
type: 'custom',
|
|
12674
|
-
width: '
|
|
12711
|
+
width: '300px',
|
|
12675
12712
|
truncate: true,
|
|
12676
12713
|
align: 'left',
|
|
12677
12714
|
renderer: 'permissionsRenderer'
|