From 20e944560e55f4a773322f6d220ebbc48041cdad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Kov=C3=A1=C4=8Dik?= Date: Fri, 3 Jul 2026 09:52:46 +0200 Subject: [PATCH 1/5] [NAE-2463] Builder change localStorage sets - change the setting and getting properties from localStorage - fix the change detection bug - fix the problem with sending two requests on backend --- .../builder-tabbed-case-view.component.ts | 3 +- .../builder-tabs-example.component.ts | 5 +- .../src/lib/builder/builder.component.spec.ts | 2 +- .../src/lib/builder/builder.component.ts | 10 ++-- .../dialog-manage-roles.component.ts | 18 ++++--- .../dialog-model-edit.component.ts | 2 +- .../dialog-transition-edit.component.ts | 2 +- .../edit-panel/edit-panel.component.spec.ts | 2 +- .../edit-panel/edit-panel.component.ts | 2 +- .../field-list/field-list.component.spec.ts | 2 +- .../field-list/field-list.component.ts | 2 +- .../form-builder.component.spec.ts | 4 +- .../form-builder/form-builder.component.ts | 4 +- .../gridster/gridster.component.spec.ts | 2 +- .../gridster/gridster.component.ts | 2 +- .../info-label/info-label.component.spec.ts | 2 +- .../info-label/info-label.component.ts | 2 +- .../actions-master-detail.service.ts | 34 +++++++------ .../control-panel/control-panel.service.ts | 4 +- .../data-detail/data-detail.component.ts | 2 +- .../data-mode/data-master-detail.service.ts | 12 +++-- .../transition/edit-form-menu-item.ts | 2 +- .../edit-transition-actions-menu-item.ts | 2 +- .../modeler/edit-mode/edit-mode.component.ts | 5 +- .../modeler/edit-mode/edit-mode.service.ts | 6 +-- .../services/modes/canvas-tool-context.ts | 4 +- .../edit-mode/services/modes/canvas-tool.ts | 2 +- .../edit-mode/services/modes/select-tool.ts | 2 +- .../history-master-detail.service.ts | 12 +++-- .../builder/modeler/model-import-service.ts | 5 +- .../lib/builder/modeler/modeler.component.ts | 2 +- .../role-detail/role-detail.component.ts | 2 +- .../role-mode/role-master-detail.service.ts | 12 +++-- .../services/canvas/canvas-mode-service.ts | 6 +-- .../services/history/history.service.ts | 12 +++-- .../modeler/task-mode/task-mode.component.ts | 4 +- .../src/lib/builder/public-api.ts | 2 +- .../builder-integration.service.ts | 50 +++++++++++++++---- .../builder-mode.service.spec.ts | 0 .../{ => services}/builder-mode.service.ts | 0 .../builder/services/local-storage.service.ts | 25 ++++++++++ 41 files changed, 173 insertions(+), 100 deletions(-) rename projects/netgrif-components/src/lib/builder/{ => services}/builder-integration.service.ts (74%) rename projects/netgrif-components/src/lib/builder/{ => services}/builder-mode.service.spec.ts (100%) rename projects/netgrif-components/src/lib/builder/{ => services}/builder-mode.service.ts (100%) create mode 100644 projects/netgrif-components/src/lib/builder/services/local-storage.service.ts diff --git a/projects/nae-example-app/src/app/doc/builder-example/builder-tabbed-case-view/builder-tabbed-case-view.component.ts b/projects/nae-example-app/src/app/doc/builder-example/builder-tabbed-case-view/builder-tabbed-case-view.component.ts index 6bbfb9985..afd6a0a03 100644 --- a/projects/nae-example-app/src/app/doc/builder-example/builder-tabbed-case-view/builder-tabbed-case-view.component.ts +++ b/projects/nae-example-app/src/app/doc/builder-example/builder-tabbed-case-view/builder-tabbed-case-view.component.ts @@ -11,10 +11,9 @@ import { SimpleFilter, AbstractTabbedCaseViewComponent, ViewIdService, NAE_DEFAULT_HEADERS, - NAE_BASE_FILTER, AllowedNetsServiceFactory, AllowedNetsService, OverflowService + NAE_BASE_FILTER, AllowedNetsServiceFactory, AllowedNetsService, OverflowService, Case } from '@netgrif/components-core'; import {HeaderComponent} from '@netgrif/components'; -import {Case} from "../../../../../../netgrif-components-core/src/lib/resources/interface/case"; import {TranslateService} from "@ngx-translate/core"; const baseFilterFactory = (injectedData: InjectedTabbedCaseViewData) => { diff --git a/projects/nae-example-app/src/app/doc/builder-example/builder-tabs-example.component.ts b/projects/nae-example-app/src/app/doc/builder-example/builder-tabs-example.component.ts index 7dd8ddf2b..d161444d9 100644 --- a/projects/nae-example-app/src/app/doc/builder-example/builder-tabs-example.component.ts +++ b/projects/nae-example-app/src/app/doc/builder-example/builder-tabs-example.component.ts @@ -1,4 +1,4 @@ -import {ChangeDetectionStrategy, Component, OnInit} from '@angular/core'; +import {Component, OnInit} from '@angular/core'; import {NAE_TASK_FORCE_OPEN, NAE_VIEW_ID_SEGMENT, TabContent, ViewIdService} from '@netgrif/components-core'; import {BuilderTabbedCaseViewComponent} from './builder-tabbed-case-view/builder-tabbed-case-view.component'; import { @@ -14,8 +14,7 @@ import {TranslateService} from "@ngx-translate/core"; {provide: NAE_VIEW_ID_SEGMENT, useValue: 'all-cases'}, {provide: NAE_TASK_FORCE_OPEN, useValue: false}, ViewIdService - ], - changeDetection: ChangeDetectionStrategy.OnPush + ] }) export class BuilderTabsExampleComponent implements OnInit { diff --git a/projects/netgrif-components/src/lib/builder/builder.component.spec.ts b/projects/netgrif-components/src/lib/builder/builder.component.spec.ts index 64180032b..18fe38cfe 100644 --- a/projects/netgrif-components/src/lib/builder/builder.component.spec.ts +++ b/projects/netgrif-components/src/lib/builder/builder.component.spec.ts @@ -5,7 +5,7 @@ import {MatDialog} from '@angular/material/dialog'; import {ActivatedRoute, Router} from '@angular/router'; import {ImportService} from '@netgrif/petriflow'; import {of} from 'rxjs'; -import {BuilderModeService} from './builder-mode.service'; +import {BuilderModeService} from './services/builder-mode.service'; import {ArcFactory} from './modeler/edit-mode/domain/arc-builders/arc-factory.service'; import {EditModeService} from './modeler/edit-mode/edit-mode.service'; import {ExportService} from '@netgrif/petriflow'; diff --git a/projects/netgrif-components/src/lib/builder/builder.component.ts b/projects/netgrif-components/src/lib/builder/builder.component.ts index 9741aef58..b0996398c 100644 --- a/projects/netgrif-components/src/lib/builder/builder.component.ts +++ b/projects/netgrif-components/src/lib/builder/builder.component.ts @@ -1,5 +1,5 @@ -import {Component, Inject, Optional} from '@angular/core'; -import {BuilderMode, BuilderModeService} from "./builder-mode.service"; +import {ChangeDetectionStrategy, Component, Inject, Optional} from '@angular/core'; +import {BuilderMode, BuilderModeService} from "./services/builder-mode.service"; import {ModelService} from "./modeler/services/model/model.service"; import {ActivatedRoute, Router} from "@angular/router"; import {MatDialog} from "@angular/material/dialog"; @@ -52,8 +52,9 @@ import {MatPaginatorIntl} from '@angular/material/paginator'; import {BuilderPaginatorIntl} from './modeler/components/master-detail/main-master/builder-paginator-inpl'; import {MAT_FORM_FIELD_DEFAULT_OPTIONS} from '@angular/material/form-field'; import {I18nControlService} from './modeler/i18n-mode/i18n-control.service'; -import {BuilderIntegrationService} from "./builder-integration.service"; +import {BuilderIntegrationService} from "./services/builder-integration.service"; import {TaskModeService} from "./modeler/task-mode/task-mode.service"; +import {LocalStorageService} from "./services/local-storage.service"; @Component({ selector: 'nc-builder', @@ -108,7 +109,8 @@ import {TaskModeService} from "./modeler/task-mode/task-mode.service"; BuilderModeService, I18nControlService, BuilderIntegrationService, - TaskModeService + TaskModeService, + LocalStorageService ] }) export class BuilderComponent { diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts b/projects/netgrif-components/src/lib/builder/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts index 725432716..6af4852a9 100644 --- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts +++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts @@ -9,6 +9,7 @@ import {ModelerConfig} from '../../modeler/modeler-config'; import {HistoryService} from '../../modeler/services/history/history.service'; import {ModelService} from '../../modeler/services/model/model.service'; import {CanvasToolContext} from "../../modeler/edit-mode/services/modes/canvas-tool-context"; +import {LocalStorageService} from "../../services/local-storage.service"; export enum RoleRefType { TRANSITION = 'transition', @@ -53,6 +54,7 @@ export class DialogManageRolesComponent implements OnInit, OnDestroy { constructor( @Inject(MAT_DIALOG_DATA) public data: ManagePermissionData, + protected _localStorageService: LocalStorageService ) { this.modelService = data.modelService; this.historyService = data.historyService; @@ -127,12 +129,12 @@ export class DialogManageRolesComponent implements OnInit, OnDestroy { this.dataSource.sort = this.sort; this.usersDataSource.sort = this.userSort; this.sort.sort(({ - id: localStorage.getItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.ROLE_SORT), - start: localStorage.getItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.ROLE_DIRECTION) + id: this._localStorageService.getItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.ROLE_SORT), + start: this._localStorageService.getItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.ROLE_DIRECTION) }) as MatSortable); this.userSort.sort(({ - id: localStorage.getItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.USER_REF_SORT), - start: localStorage.getItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.USER_REF_DIRECTION) + id: this._localStorageService.getItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.USER_REF_SORT), + start: this._localStorageService.getItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.USER_REF_DIRECTION) }) as MatSortable); } @@ -250,13 +252,13 @@ export class DialogManageRolesComponent implements OnInit, OnDestroy { } sortRoleRefs(sort: Sort): void { - localStorage.setItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.ROLE_SORT, sort.active); - localStorage.setItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.ROLE_DIRECTION, sort.direction); + this._localStorageService.setItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.ROLE_SORT, sort.active); + this._localStorageService.setItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.ROLE_DIRECTION, sort.direction); } sortUserRefs(sort: Sort): void { - localStorage.setItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.USER_REF_SORT, sort.active); - localStorage.setItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.USER_REF_DIRECTION, sort.direction); + this._localStorageService.setItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.USER_REF_SORT, sort.active); + this._localStorageService.setItem(ModelerConfig.LOCALSTORAGE.PERMISSION_DIALOG.USER_REF_DIRECTION, sort.direction); } ngOnDestroy(): void { diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-model-edit/dialog-model-edit.component.ts b/projects/netgrif-components/src/lib/builder/dialogs/dialog-model-edit/dialog-model-edit.component.ts index 37a6f68c7..45fd2ba87 100644 --- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-model-edit/dialog-model-edit.component.ts +++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-model-edit/dialog-model-edit.component.ts @@ -8,7 +8,7 @@ import {ProcessActionsTool} from '../../modeler/actions-mode/tools/process-actio import {ModelChange} from '../../modeler/history-mode/model/model/model-change'; import {ModelService} from '../../modeler/services/model/model.service'; import {DialogManageRolesComponent, RoleRefType} from '../dialog-manage-roles/dialog-manage-roles.component'; -import {BuilderModeService, BuilderMode} from "../../builder-mode.service"; +import {BuilderModeService, BuilderMode} from "../../services/builder-mode.service"; import {HistoryService} from "../../modeler/services/history/history.service"; import {CanvasToolContext} from "../../modeler/edit-mode/services/modes/canvas-tool-context"; diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts index 7267ee835..3bd5d81d4 100644 --- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts +++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts @@ -9,7 +9,7 @@ import {SelectedTransitionService} from '../../modeler/selected-transition.servi import {ModelService} from '../../modeler/services/model/model.service'; import {DialogManageRolesComponent, RoleRefType} from '../dialog-manage-roles/dialog-manage-roles.component'; import {ChangedTransition} from './changed-transition'; -import {BuilderModeService, BuilderMode} from '../../builder-mode.service'; +import {BuilderModeService, BuilderMode} from '../../services/builder-mode.service'; import {HistoryService} from "../../modeler/services/history/history.service"; import {CanvasToolContext} from "../../modeler/edit-mode/services/modes/canvas-tool-context"; diff --git a/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.spec.ts b/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.spec.ts index f18045cfc..e0e433bee 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.spec.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.spec.ts @@ -2,7 +2,7 @@ import {NO_ERRORS_SCHEMA} from '@angular/core'; import {TestBed} from '@angular/core/testing'; import {MatDialog} from '@angular/material/dialog'; import {Router} from '@angular/router'; -import {BuilderModeService} from '../../builder-mode.service'; +import {BuilderModeService} from '../../services/builder-mode.service'; import {ArcFactory} from '../../modeler/edit-mode/domain/arc-builders/arc-factory.service'; import {ModelService} from '../../modeler/services/model/model.service'; import {SelectedTransitionService} from '../../modeler/selected-transition.service'; diff --git a/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.ts b/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.ts index f596d8563..dd5aa8e2a 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.ts @@ -36,7 +36,7 @@ import {ModelService} from '../../modeler/services/model/model.service'; import {DataFieldUtils} from '../data-field-utils'; import {ComponentDef, DataRefDef, FieldListService, PropertyDef} from '../field-list/field-list.service'; import {GridsterService} from '../gridster/gridster.service'; -import {BuilderModeService, BuilderMode} from "../../builder-mode.service"; +import {BuilderModeService, BuilderMode} from "../../services/builder-mode.service"; @Component({ selector: 'nc-builder-edit-panel', diff --git a/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.spec.ts b/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.spec.ts index dca46e2b4..10cb89f87 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.spec.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.spec.ts @@ -4,7 +4,7 @@ import {MatDialog} from '@angular/material/dialog'; import {MatSnackBar} from '@angular/material/snack-bar'; import {Router} from '@angular/router'; import {PetriNet} from '@netgrif/petriflow'; -import {BuilderModeService} from '../../builder-mode.service'; +import {BuilderModeService} from '../../services/builder-mode.service'; import {ModelService} from '../../modeler/services/model/model.service'; import {SelectedTransitionService} from '../../modeler/selected-transition.service'; import {GridsterService} from '../gridster/gridster.service'; diff --git a/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.ts b/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.ts index 60bf6defd..6925b7d95 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.ts @@ -11,7 +11,7 @@ import {SelectedTransitionService} from '../../modeler/selected-transition.servi import {ModelService} from '../../modeler/services/model/model.service'; import {GridsterService} from '../gridster/gridster.service'; import {ComponentDef, FieldListService} from './field-list.service'; -import {BuilderModeService, BuilderMode} from "../../builder-mode.service"; +import {BuilderModeService, BuilderMode} from "../../services/builder-mode.service"; export interface Data { title: string; diff --git a/projects/netgrif-components/src/lib/builder/form-builder/form-builder.component.spec.ts b/projects/netgrif-components/src/lib/builder/form-builder/form-builder.component.spec.ts index 0551578ba..a5309d318 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/form-builder.component.spec.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/form-builder.component.spec.ts @@ -1,11 +1,11 @@ import {CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA} from '@angular/core'; import {ComponentFixture, TestBed} from '@angular/core/testing'; import {PetriNet} from '@netgrif/petriflow'; -import {BuilderModeService} from '../builder-mode.service'; +import {BuilderModeService} from '../services/builder-mode.service'; import {ModelService} from '../modeler/services/model/model.service'; import {SelectedTransitionService} from '../modeler/selected-transition.service'; import {FormBuilderComponent} from './form-builder.component'; -import {BuilderIntegrationService} from "../builder-integration.service"; +import {BuilderIntegrationService} from "../services/builder-integration.service"; import {HistoryService} from "../modeler/services/history/history.service"; import {HttpClientTestingModule} from "@angular/common/http/testing"; import {RouterTestingModule} from "@angular/router/testing"; diff --git a/projects/netgrif-components/src/lib/builder/form-builder/form-builder.component.ts b/projects/netgrif-components/src/lib/builder/form-builder/form-builder.component.ts index 134fb42cd..467c27293 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/form-builder.component.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/form-builder.component.ts @@ -5,8 +5,8 @@ import {ModelerConfig} from '../modeler/modeler-config'; import {ModelerUtils} from '../modeler/modeler-utils'; import {SelectedTransitionService} from '../modeler/selected-transition.service'; import {ModelService} from '../modeler/services/model/model.service'; -import {BuilderMode, BuilderModeService} from "../builder-mode.service"; -import {BuilderIntegrationService} from "../builder-integration.service"; +import {BuilderMode, BuilderModeService} from "../services/builder-mode.service"; +import {BuilderIntegrationService} from "../services/builder-integration.service"; @Component({ selector: 'nc-builder-form-builder', diff --git a/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.spec.ts b/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.spec.ts index dd2fd5eed..ba6705838 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.spec.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.spec.ts @@ -1,7 +1,7 @@ import {NO_ERRORS_SCHEMA} from '@angular/core'; import {TestBed} from '@angular/core/testing'; import {Router} from '@angular/router'; -import {BuilderModeService} from '../../builder-mode.service'; +import {BuilderModeService} from '../../services/builder-mode.service'; import {ArcFactory} from '../../modeler/edit-mode/domain/arc-builders/arc-factory.service'; import {ModelService} from '../../modeler/services/model/model.service'; import {SelectedTransitionService} from '../../modeler/selected-transition.service'; diff --git a/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.ts b/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.ts index 06c01c9fe..a1b15f1fe 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.ts @@ -7,7 +7,7 @@ import {ModelService} from '../../modeler/services/model/model.service'; import {FieldListService} from '../field-list/field-list.service'; import {GridsterDataField} from './classes/gridster-data-field'; import {GridsterService} from './gridster.service'; -import {BuilderModeService, BuilderMode} from "../../builder-mode.service"; +import {BuilderModeService, BuilderMode} from "../../services/builder-mode.service"; @Component({ selector: 'nc-builder-gridster-component', diff --git a/projects/netgrif-components/src/lib/builder/form-builder/info-label/info-label.component.spec.ts b/projects/netgrif-components/src/lib/builder/form-builder/info-label/info-label.component.spec.ts index e3053edd0..b7162cf66 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/info-label/info-label.component.spec.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/info-label/info-label.component.spec.ts @@ -1,6 +1,6 @@ import {NO_ERRORS_SCHEMA} from '@angular/core'; import {TestBed} from '@angular/core/testing'; -import {BuilderModeService} from '../../builder-mode.service'; +import {BuilderModeService} from '../../services/builder-mode.service'; import {ArcFactory} from '../../modeler/edit-mode/domain/arc-builders/arc-factory.service'; import {ModelService} from '../../modeler/services/model/model.service'; import {SelectedTransitionService} from '../../modeler/selected-transition.service'; diff --git a/projects/netgrif-components/src/lib/builder/form-builder/info-label/info-label.component.ts b/projects/netgrif-components/src/lib/builder/form-builder/info-label/info-label.component.ts index b7599478a..c8a65c257 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/info-label/info-label.component.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/info-label/info-label.component.ts @@ -2,7 +2,7 @@ import {Component} from '@angular/core'; import {PetriNet, Transition} from '@netgrif/petriflow'; import {SelectedTransitionService} from '../../modeler/selected-transition.service'; import {ModelService} from '../../modeler/services/model/model.service'; -import {BuilderModeService, BuilderMode} from "../../builder-mode.service"; +import {BuilderModeService, BuilderMode} from "../../services/builder-mode.service"; @Component({ selector: 'nc-builder-info-label', diff --git a/projects/netgrif-components/src/lib/builder/modeler/actions-mode/actions-master-detail.service.ts b/projects/netgrif-components/src/lib/builder/modeler/actions-mode/actions-master-detail.service.ts index 4c29e4b23..8b6b0c329 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/actions-mode/actions-master-detail.service.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/actions-mode/actions-master-detail.service.ts @@ -12,12 +12,14 @@ import {FunctionsTool} from './tools/functions-tool'; import {ProcessActionsTool} from './tools/process-actions-tool'; import {RoleActionsTool} from './tools/role-actions-tool'; import {TransitionActionsTool} from './tools/transition-actions-tool'; +import {LocalStorageService} from "../../services/local-storage.service"; @Injectable() export class ActionsMasterDetailService extends AbstractMasterDetailService { constructor(protected _modelService: ModelService, - protected _actionsModeService: ActionsModeService) { + protected _actionsModeService: ActionsModeService, + protected _localStorageService: LocalStorageService) { super(); } @@ -79,17 +81,17 @@ export class ActionsMasterDetailService extends AbstractMasterDetailService { constructor(protected _modelService: ModelService, - protected _historyService: HistoryService) { + protected _historyService: HistoryService, + protected _localStorageService: LocalStorageService) { super(); } @@ -54,12 +56,12 @@ export class DataMasterDetailService extends AbstractMasterDetailService { @@ -343,7 +343,7 @@ export class EditModeService extends CanvasModeService { const arcRatio = arcLengthOffset / arcLength; const finalX = intersect.x + xLineLength * arcRatio; const finalY = intersect.y + yLineLength * arcRatio; - arcLine.setAttributeNS(null, 'points', `${intersect.x},${intersect.y} ${finalX},${finalY}`); + arcLine.setAttributeNS(null, 'points', `${intersect.x},${intersect.y} ${finalX ?? 0},${finalY ?? 0}`); } // OTHER diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool-context.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool-context.ts index f98e0babf..e0c847def 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool-context.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool-context.ts @@ -5,9 +5,9 @@ import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {SelectedTransitionService} from '../../../selected-transition.service'; import {ModelService} from '../../../services/model/model.service'; import {EditModeService} from '../../edit-mode.service'; -import {BuilderModeService} from '../../../../builder-mode.service'; +import {BuilderModeService} from '../../../../services/builder-mode.service'; import {ProcessActionsTool} from "../../../actions-mode/tools/process-actions-tool"; -import {BuilderIntegrationService} from "../../../../builder-integration.service"; +import {BuilderIntegrationService} from "../../../../services/builder-integration.service"; export class CanvasToolContext { constructor( diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool.ts index 41c1f1faa..4aa2b955b 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool.ts @@ -28,7 +28,7 @@ import {CanvasPlace} from '../../domain/canvas-place'; import {CanvasTransition} from '../../domain/canvas-transition'; import {EditModeService} from '../../edit-mode.service'; import {Hotkey} from './domain/hotkey'; -import {BuilderModeService} from '../../../../builder-mode.service'; +import {BuilderModeService} from '../../../../services/builder-mode.service'; import {CanvasToolContext} from './canvas-tool-context'; export abstract class CanvasTool extends CanvasListenerTool { diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/select-tool.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/select-tool.ts index 8da7eb87e..aed2f4c4e 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/select-tool.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/select-tool.ts @@ -18,7 +18,7 @@ import {CanvasTransition} from '../../domain/canvas-transition'; import {CanvasTool} from './canvas-tool'; import {CanvasToolContext} from './canvas-tool-context'; import {Hotkey} from './domain/hotkey'; -import {BuilderMode} from '../../../../builder-mode.service'; +import {BuilderMode} from '../../../../services/builder-mode.service'; export class SelectTool extends CanvasTool { diff --git a/projects/netgrif-components/src/lib/builder/modeler/history-mode/history-master-detail.service.ts b/projects/netgrif-components/src/lib/builder/modeler/history-mode/history-master-detail.service.ts index 4eaff4e9b..a2924e0af 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/history-mode/history-master-detail.service.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/history-mode/history-master-detail.service.ts @@ -5,11 +5,13 @@ import {AbstractMasterDetailService} from '../components/master-detail/abstract- import {ModelerConfig} from '../modeler-config'; import {HistoryChange} from '../services/history/history-change'; import {HistoryService} from '../services/history/history.service'; +import {LocalStorageService} from "../../services/local-storage.service"; @Injectable() export class HistoryMasterDetailService extends AbstractMasterDetailService> { - constructor(protected _historyService: HistoryService) { + constructor(protected _historyService: HistoryService, + protected _localStorageService: LocalStorageService) { super(); } @@ -37,13 +39,13 @@ export class HistoryMasterDetailService extends AbstractMasterDetailService { constructor(protected _modelService: ModelService, - protected _historyService: HistoryService) { + protected _historyService: HistoryService, + protected _localStorageService: LocalStorageService) { super(); } @@ -51,12 +53,12 @@ export class RoleMasterDetailService extends AbstractMasterDetailService { } getSortFromLocalStorage(): Sort { - return {active: localStorage.getItem(ModelerConfig.LOCALSTORAGE.MASTER_DETAIL.ROLE_SORT), - direction: localStorage.getItem(ModelerConfig.LOCALSTORAGE.MASTER_DETAIL.ROLE_DIRECTION)} as Sort; + return {active: this._localStorageService.getItem(ModelerConfig.LOCALSTORAGE.MASTER_DETAIL.ROLE_SORT), + direction: this._localStorageService.getItem(ModelerConfig.LOCALSTORAGE.MASTER_DETAIL.ROLE_DIRECTION)} as Sort; } setSortToLocalStorage(sort: Sort) { - localStorage.setItem(ModelerConfig.LOCALSTORAGE.MASTER_DETAIL.ROLE_SORT, sort.active); - localStorage.setItem(ModelerConfig.LOCALSTORAGE.MASTER_DETAIL.ROLE_DIRECTION, sort.direction); + this._localStorageService.setItem(ModelerConfig.LOCALSTORAGE.MASTER_DETAIL.ROLE_SORT, sort.active); + this._localStorageService.setItem(ModelerConfig.LOCALSTORAGE.MASTER_DETAIL.ROLE_DIRECTION, sort.direction); } } diff --git a/projects/netgrif-components/src/lib/builder/modeler/services/canvas/canvas-mode-service.ts b/projects/netgrif-components/src/lib/builder/modeler/services/canvas/canvas-mode-service.ts index 072d9d9b3..71b00088e 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/services/canvas/canvas-mode-service.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/services/canvas/canvas-mode-service.ts @@ -64,7 +64,7 @@ export abstract class CanvasModeService extends ModeService { const svgTransition = new PetriflowSvgTransition(new SvgTransition(modelTransition.id, this.labelText(modelTransition), new DOMPoint(modelTransition.x, modelTransition.y)), modelTransition.icon); const canvasTransition = new CanvasTransition(modelTransition, svgTransition); this.elements.addTransition(canvasTransition); - this.canvas.addTransition(svgTransition.canvasElement); + this.canvas?.addTransition(svgTransition.canvasElement); return canvasTransition; } @@ -72,7 +72,7 @@ export abstract class CanvasModeService extends ModeService { const svgPlace = new PetriflowSvgPlace(new SvgPlace(modelPlace.id, this.labelText(modelPlace), modelPlace.marking, new DOMPoint(modelPlace.x, modelPlace.y))); const canvasPlace = new CanvasPlace(modelPlace, svgPlace); this.elements.addPlace(canvasPlace); - this.canvas.addPlace(svgPlace.canvasElement); + this.canvas?.addPlace(svgPlace.canvasElement); return canvasPlace; } @@ -84,7 +84,7 @@ export abstract class CanvasModeService extends ModeService { const canvasArc = new CanvasArc(modelArc, svgArc); svgArc.setMultiplicity(this.multiplicityText(canvasArc)); this.elements.addArc(canvasArc); - this.canvas.addArc(svgArc.element); + this.canvas?.addArc(svgArc.element); return canvasArc; } diff --git a/projects/netgrif-components/src/lib/builder/modeler/services/history/history.service.ts b/projects/netgrif-components/src/lib/builder/modeler/services/history/history.service.ts index e8f40cfe4..1d162527c 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/services/history/history.service.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/services/history/history.service.ts @@ -7,6 +7,7 @@ import {ModelerConfig} from '../../modeler-config'; import {ModelService} from '../model/model.service'; import {History} from './history'; import {HistoryChange} from './history-change'; +import {LocalStorageService} from "../../../services/local-storage.service"; @Injectable() export class HistoryService { @@ -17,6 +18,7 @@ export class HistoryService { constructor( private modelService: ModelService, private exportService: ExportService, + protected _localStorageService: LocalStorageService ) { this._history = new History(); this._historyChange = new Subject(); @@ -61,10 +63,12 @@ export class HistoryService { } async saveToLocalStorage(model: PetriNet): Promise { - localStorage.setItem(ModelerConfig.LOCALSTORAGE.DRAFT_MODEL.KEY, this.exportService.exportXml(model)); - localStorage.setItem(ModelerConfig.LOCALSTORAGE.DRAFT_MODEL.TIMESTAMP, new Date().toLocaleString()); - localStorage.setItem(ModelerConfig.LOCALSTORAGE.DRAFT_MODEL.ID, `${model.id}`); - localStorage.setItem(ModelerConfig.LOCALSTORAGE.DRAFT_MODEL.TITLE, `${model.title.value}`); + if (this._localStorageService.prefix === '') { + this._localStorageService.setItem(ModelerConfig.LOCALSTORAGE.DRAFT_MODEL.KEY, this.exportService.exportXml(model)); + this._localStorageService.setItem(ModelerConfig.LOCALSTORAGE.DRAFT_MODEL.TIMESTAMP, new Date().toLocaleString()); + this._localStorageService.setItem(ModelerConfig.LOCALSTORAGE.DRAFT_MODEL.ID, `${model.id}`); + this._localStorageService.setItem(ModelerConfig.LOCALSTORAGE.DRAFT_MODEL.TITLE, `${model.title.value}`); + } } get historyChange(): Subject> { diff --git a/projects/netgrif-components/src/lib/builder/modeler/task-mode/task-mode.component.ts b/projects/netgrif-components/src/lib/builder/modeler/task-mode/task-mode.component.ts index bfaa43b66..4f980ecdc 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/task-mode/task-mode.component.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/task-mode/task-mode.component.ts @@ -1,4 +1,4 @@ -import {AfterViewInit, Component, Optional, ViewChild} from '@angular/core'; +import {AfterViewInit, Component, ViewChild} from '@angular/core'; import {FlexModule} from "@ngbracket/ngx-layout"; import {HeaderComponentModule} from "../../../header/header.module"; import {PanelComponentModule} from "../../../panel/panel.module"; @@ -21,7 +21,7 @@ import { NAE_DEFAULT_HEADERS } from "@netgrif/components-core"; import {InjectedTabbedBuilderViewData} from "../../injected-builder-data"; -import {BuilderIntegrationService} from "../../builder-integration.service"; +import {BuilderIntegrationService} from "../../services/builder-integration.service"; const baseFilterFactory = (injectedData: InjectedTabbedBuilderViewData) => { const caseId = injectedData?.processCase?.stringId ?? "__EMPTY__" diff --git a/projects/netgrif-components/src/lib/builder/public-api.ts b/projects/netgrif-components/src/lib/builder/public-api.ts index 974c1c6c2..31380ebc7 100644 --- a/projects/netgrif-components/src/lib/builder/public-api.ts +++ b/projects/netgrif-components/src/lib/builder/public-api.ts @@ -9,7 +9,7 @@ export * from './modeler/actions-mode/action-editor/action-editor-list/action-ed // SERVICES -export * from './builder-mode.service'; +export * from './services/builder-mode.service'; export * from './modeler/gridster-field-to-engine-field.service'; export * from './modeler/model-import-service'; export * from './modeler/mortgage.service'; diff --git a/projects/netgrif-components/src/lib/builder/builder-integration.service.ts b/projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts similarity index 74% rename from projects/netgrif-components/src/lib/builder/builder-integration.service.ts rename to projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts index c0646b85e..3622fc502 100644 --- a/projects/netgrif-components/src/lib/builder/builder-integration.service.ts +++ b/projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts @@ -1,25 +1,37 @@ import {Injectable} from "@angular/core"; -import {HistoryService} from "./modeler/services/history/history.service"; -import {Case, LoggerService, TaskResourceService, extractFieldValueFromData, TaskEventOutcome} from "@netgrif/components-core"; +import {HistoryService} from "../modeler/services/history/history.service"; +import { + Case, + extractFieldValueFromData, + LoggerService, + TaskEventOutcome, + TaskResourceService, + LoadingEmitter +} from "@netgrif/components-core"; import {ExportService, PetriNet} from "@netgrif/petriflow"; -import {HistoryChange} from "./modeler/services/history/history-change"; +import {HistoryChange} from "../modeler/services/history/history-change"; import {Observable, of, Subject} from "rxjs"; @Injectable() export class BuilderIntegrationService { - protected _isIntegrated: boolean = false; + protected _isIntegrated: boolean; protected _processCase: Case; protected _editTaskId: string; - protected _isAssigned: boolean = false; - private _onlyTaskView: boolean = true; + protected _isAssigned: boolean; + protected _onlyTaskView: boolean; - protected _reloadCase: Subject = new Subject(); - protected _reloadModes: Subject = new Subject(); + protected _reloadCase: Subject; + protected _reloadModes: Subject; + protected _loading: LoadingEmitter; constructor(protected _historyService: HistoryService, protected _taskResourceService: TaskResourceService, protected _exportService: ExportService, protected _log: LoggerService) { + this._onlyTaskView = true; + this._reloadCase = new Subject(); + this._reloadModes = new Subject(); + this._loading = new LoadingEmitter(); this._historyService.historyChange.subscribe(history => { if (this._isIntegrated && this._editTaskId) { if (!this._isAssigned) { @@ -30,7 +42,7 @@ export class BuilderIntegrationService { this.setData(history); }); } else { - this.setData(history); + this.setData(history); } } }); @@ -84,7 +96,18 @@ export class BuilderIntegrationService { this._reloadModes.next(value); } + get loading$(): Observable { + return this._loading; + } + + public isLoading(): boolean { + return this._loading.value; + } + protected setData(history: HistoryChange) { + if (this._loading.value) { + return; + } const body = {}; body[this._editTaskId] = {}; body[this._editTaskId]['xml_text'] = { @@ -133,11 +156,20 @@ export class BuilderIntegrationService { type: 'text', value: model.title?.value }; + body[this._editTaskId]['xml_text'] = { + type: 'text', + value: this._exportService.exportXml(model) + }; + this._loading.next(true); this._taskResourceService.setData(this._editTaskId, body).subscribe(outcome => { + this._loading.next(false); if ((outcome.outcome as TaskEventOutcome)?.task?.user?.email !== undefined) { this._isAssigned = true; } this._log.debug('Data set successfully'); + }, error => { + this._loading.next(false); + this._log.debug('Data set failed', error.message); }); } } diff --git a/projects/netgrif-components/src/lib/builder/builder-mode.service.spec.ts b/projects/netgrif-components/src/lib/builder/services/builder-mode.service.spec.ts similarity index 100% rename from projects/netgrif-components/src/lib/builder/builder-mode.service.spec.ts rename to projects/netgrif-components/src/lib/builder/services/builder-mode.service.spec.ts diff --git a/projects/netgrif-components/src/lib/builder/builder-mode.service.ts b/projects/netgrif-components/src/lib/builder/services/builder-mode.service.ts similarity index 100% rename from projects/netgrif-components/src/lib/builder/builder-mode.service.ts rename to projects/netgrif-components/src/lib/builder/services/builder-mode.service.ts diff --git a/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts b/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts new file mode 100644 index 000000000..74cff413a --- /dev/null +++ b/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts @@ -0,0 +1,25 @@ +import {Inject, Injectable, Optional} from "@angular/core"; +import {InjectedTabbedBuilderViewData} from "../injected-builder-data"; +import {NAE_TAB_DATA} from "@netgrif/components-core"; + +@Injectable() +export class LocalStorageService { + + protected _prefix = ''; + + constructor(@Optional() @Inject(NAE_TAB_DATA) injectedTabData: InjectedTabbedBuilderViewData) { + this._prefix = injectedTabData?.processCase ? injectedTabData?.processCase + '_' : ''; + } + + get prefix(): string { + return this._prefix; + } + + public getItem(key: string): string { + return localStorage.getItem(this._prefix + key); + } + + public setItem(key: string, value: string): void { + localStorage.setItem(this._prefix + key, value); + } +} From 7d389f0f61666faf8823f3d2bb9358637c627136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Kov=C3=A1=C4=8Dik?= Date: Tue, 7 Jul 2026 11:16:23 +0200 Subject: [PATCH 2/5] [NAE-2463] Builder change localStorage sets - fix test and pr comments --- .../builder/form-builder/gridster/gridster.component.spec.ts | 2 ++ .../lib/builder/modeler/edit-mode/edit-mode.component.spec.ts | 4 +++- .../src/lib/builder/services/builder-integration.service.ts | 2 +- .../src/lib/builder/services/local-storage.service.ts | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.spec.ts b/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.spec.ts index ba6705838..264cd3f9d 100644 --- a/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.spec.ts +++ b/projects/netgrif-components/src/lib/builder/form-builder/gridster/gridster.component.spec.ts @@ -10,6 +10,7 @@ import {ExportService} from '@netgrif/petriflow'; import {GridsterService} from './gridster.service'; import {FieldListService} from '../field-list/field-list.service'; import {GridsterComponent} from './gridster.component'; +import {LocalStorageService} from "../../services/local-storage.service"; describe('GridsterComponent', () => { beforeEach(() => { @@ -24,6 +25,7 @@ describe('GridsterComponent', () => { BuilderModeService, HistoryService, ExportService, + LocalStorageService, {provide: Router, useValue: {}}, ], schemas: [NO_ERRORS_SCHEMA], diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.component.spec.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.component.spec.ts index e87a60483..a7d995b03 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.component.spec.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.component.spec.ts @@ -8,8 +8,9 @@ import {HistoryService} from '../services/history/history.service'; import {ModelImportService} from '../model-import-service'; import {ExportService} from '@netgrif/petriflow'; import {EditModeComponent} from './edit-mode.component'; +import {LocalStorageService} from "../../services/local-storage.service"; -describe('BpmnModeComponent', () => { +describe('EditModeComponent', () => { beforeEach(() => { TestBed.configureTestingModule({ declarations: [EditModeComponent], @@ -18,6 +19,7 @@ describe('BpmnModeComponent', () => { ArcFactory, HistoryService, ExportService, + LocalStorageService, {provide: ModelImportService, useValue: {}}, {provide: EditModeService, useValue: {}}, {provide: MatDialog, useValue: {}}, diff --git a/projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts b/projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts index 3622fc502..b6a805e13 100644 --- a/projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts +++ b/projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts @@ -97,7 +97,7 @@ export class BuilderIntegrationService { } get loading$(): Observable { - return this._loading; + return this._loading.asObservable(); } public isLoading(): boolean { diff --git a/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts b/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts index 74cff413a..ee8357a91 100644 --- a/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts +++ b/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts @@ -15,7 +15,7 @@ export class LocalStorageService { return this._prefix; } - public getItem(key: string): string { + public getItem(key: string): string | null { return localStorage.getItem(this._prefix + key); } From feee4e04b1b52916cf12acefa9916c4e13e49264 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Kov=C3=A1=C4=8Dik?= Date: Wed, 8 Jul 2026 11:42:56 +0200 Subject: [PATCH 3/5] [NAE-2463] Builder change localStorage sets - fix pr comments --- .../services/builder-integration.service.ts | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts b/projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts index b6a805e13..49e906096 100644 --- a/projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts +++ b/projects/netgrif-components/src/lib/builder/services/builder-integration.service.ts @@ -3,10 +3,10 @@ import {HistoryService} from "../modeler/services/history/history.service"; import { Case, extractFieldValueFromData, + LoadingEmitter, LoggerService, TaskEventOutcome, - TaskResourceService, - LoadingEmitter + TaskResourceService } from "@netgrif/components-core"; import {ExportService, PetriNet} from "@netgrif/petriflow"; import {HistoryChange} from "../modeler/services/history/history-change"; @@ -114,11 +114,15 @@ export class BuilderIntegrationService { type: 'text', value: this._exportService.exportXml(history.record) }; - this._taskResourceService.setData(this._editTaskId, body).subscribe(outcome => { - if ((outcome.outcome as TaskEventOutcome)?.task?.user?.email !== undefined) { - this._isAssigned = true; + this._taskResourceService.setData(this._editTaskId, body).subscribe({ + next: outcome => { + if ((outcome.outcome as TaskEventOutcome)?.task?.user?.email !== undefined) { + this._isAssigned = true; + } + this._log.debug('Data set successfully'); + }, error: error => { + this._log.error('Data set failed', error.message); } - this._log.debug('Data set successfully'); }); } @@ -161,15 +165,17 @@ export class BuilderIntegrationService { value: this._exportService.exportXml(model) }; this._loading.next(true); - this._taskResourceService.setData(this._editTaskId, body).subscribe(outcome => { - this._loading.next(false); - if ((outcome.outcome as TaskEventOutcome)?.task?.user?.email !== undefined) { - this._isAssigned = true; + this._taskResourceService.setData(this._editTaskId, body).subscribe({ + next: outcome => { + this._loading.next(false); + if ((outcome.outcome as TaskEventOutcome)?.task?.user?.email !== undefined) { + this._isAssigned = true; + } + this._log.debug('Data set successfully'); + }, error: error => { + this._loading.next(false); + this._log.error('Data set failed', error.message); } - this._log.debug('Data set successfully'); - }, error => { - this._loading.next(false); - this._log.debug('Data set failed', error.message); }); } } From cf5567e2f7120b996ed1a248a45cd6410771fc99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Kov=C3=A1=C4=8Dik?= Date: Thu, 16 Jul 2026 12:43:48 +0200 Subject: [PATCH 4/5] [NAE-2463] Builder change localStorage sets - fix pr comments --- .../src/lib/builder/services/local-storage.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts b/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts index ee8357a91..5c41e86e2 100644 --- a/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts +++ b/projects/netgrif-components/src/lib/builder/services/local-storage.service.ts @@ -8,7 +8,7 @@ export class LocalStorageService { protected _prefix = ''; constructor(@Optional() @Inject(NAE_TAB_DATA) injectedTabData: InjectedTabbedBuilderViewData) { - this._prefix = injectedTabData?.processCase ? injectedTabData?.processCase + '_' : ''; + this._prefix = injectedTabData?.processCase ? injectedTabData?.processCase?.stringId + '_' : ''; } get prefix(): string { From 945f9ddc65cb56881b0dcd7370ec7383871d4f55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Kov=C3=A1=C4=8Dik?= Date: Fri, 17 Jul 2026 07:16:58 +0200 Subject: [PATCH 5/5] [NAE-2463] Builder change localStorage sets - fix providers --- .../dialog-manage-roles/dialog-manage-roles.component.ts | 6 ++++-- .../dialog-model-edit/dialog-model-edit.component.ts | 6 +++++- .../dialog-transition-edit.component.ts | 6 +++++- .../menu-items/model/manage-model-permissions-menu-item.ts | 3 ++- .../transition/edit-transition-permissions-menu-item.ts | 3 ++- .../src/lib/builder/modeler/edit-mode/edit-mode.service.ts | 6 ++++-- .../modeler/edit-mode/services/modes/canvas-tool-context.ts | 4 +++- 7 files changed, 25 insertions(+), 9 deletions(-) diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts b/projects/netgrif-components/src/lib/builder/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts index 6af4852a9..fad5a2983 100644 --- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts +++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts @@ -26,6 +26,7 @@ export interface ManagePermissionData { processUserRefs?: Array; modelService: ModelService; historyService: HistoryService; + localStorageService: LocalStorageService; } @Component({ @@ -51,13 +52,14 @@ export class DialogManageRolesComponent implements OnInit, OnDestroy { private modelService: ModelService; private historyService: HistoryService; + private _localStorageService: LocalStorageService; constructor( - @Inject(MAT_DIALOG_DATA) public data: ManagePermissionData, - protected _localStorageService: LocalStorageService + @Inject(MAT_DIALOG_DATA) public data: ManagePermissionData ) { this.modelService = data.modelService; this.historyService = data.historyService; + this._localStorageService = data.localStorageService; if (this.data.type === RoleRefType.TRANSITION) { const arrayRoleRefs = [...this.data.rolesRefs]; this.addDefaultRoleRefs(arrayRoleRefs); diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-model-edit/dialog-model-edit.component.ts b/projects/netgrif-components/src/lib/builder/dialogs/dialog-model-edit/dialog-model-edit.component.ts index 45fd2ba87..fca77016c 100644 --- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-model-edit/dialog-model-edit.component.ts +++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-model-edit/dialog-model-edit.component.ts @@ -11,6 +11,7 @@ import {DialogManageRolesComponent, RoleRefType} from '../dialog-manage-roles/di import {BuilderModeService, BuilderMode} from "../../services/builder-mode.service"; import {HistoryService} from "../../modeler/services/history/history.service"; import {CanvasToolContext} from "../../modeler/edit-mode/services/modes/canvas-tool-context"; +import {LocalStorageService} from '../../services/local-storage.service'; export interface ModelEditData { model: ModelChange; @@ -36,6 +37,7 @@ export class DialogModelEditComponent { private _processTool: ProcessActionsTool; private _builderModeService: BuilderModeService; private historyService: HistoryService; + private _localStorageService: LocalStorageService; constructor( @Inject(MAT_DIALOG_DATA) public data: ModelEditData, @@ -47,6 +49,7 @@ export class DialogModelEditComponent { this._processTool = data.context.processTool; this._builderModeService = data.context.builderModeService; this.historyService = data.context.editModeService.historyService; + this._localStorageService = data.context.localStorageService; this.idCtrl = new FormControl('', [Validators.required]); this.versionCtrl = new FormControl('', [ @@ -68,7 +71,8 @@ export class DialogModelEditComponent { processUserRefs: this.modelService.model.getUserRefs(), userLists: this.modelService.model.getDataSet().filter(item => item.type === DataType.USER_LIST), modelService: this.modelService, - historyService: this.historyService + historyService: this.historyService, + localStorageService: this._localStorageService } }); } diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts index 3bd5d81d4..5e4cd6944 100644 --- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts +++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts @@ -12,6 +12,7 @@ import {ChangedTransition} from './changed-transition'; import {BuilderModeService, BuilderMode} from '../../services/builder-mode.service'; import {HistoryService} from "../../modeler/services/history/history.service"; import {CanvasToolContext} from "../../modeler/edit-mode/services/modes/canvas-tool-context"; +import {LocalStorageService} from '../../services/local-storage.service'; export interface TransitionEditData { transitionId: string; @@ -37,6 +38,7 @@ export class DialogTransitionEditComponent implements OnInit { private _actionsMasterDetail: ActionsMasterDetailService; private _builderModeService: BuilderModeService; private _historyService: HistoryService; + private _localStorageService: LocalStorageService; constructor( @Inject(MAT_DIALOG_DATA) public data: TransitionEditData, @@ -49,6 +51,7 @@ export class DialogTransitionEditComponent implements OnInit { this._actionsMasterDetail = data.context.actionsMasterDetail; this._builderModeService = data.context.builderModeService; this._historyService = data.context.editModeService.historyService; + this._localStorageService = data.context.localStorageService; this.transition = new ChangedTransition(undefined, this._modelService.model.getTransition(data.transitionId).clone()); this.form = new FormControl('', [ @@ -96,7 +99,8 @@ export class DialogTransitionEditComponent implements OnInit { userRefs: this.transition.transition.userRefs, userLists: this._modelService.model.getDataSet().filter(item => item.type === DataType.USER_LIST), modelService: this._modelService, - historyService: this._historyService + historyService: this._historyService, + localStorageService: this._localStorageService } }); } diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/model/manage-model-permissions-menu-item.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/model/manage-model-permissions-menu-item.ts index 3c669c884..c9c3bcb33 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/model/manage-model-permissions-menu-item.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/model/manage-model-permissions-menu-item.ts @@ -23,7 +23,8 @@ export class ManageModelPermissionsMenuItem extends MenuItem { processUserRefs: tool.model.getUserRefs(), userLists: tool.model.getDataSet().filter(item => item.type === DataType.USER_LIST), modelService: tool.modelService, - historyService: tool.editModeService.historyService + historyService: tool.editModeService.historyService, + localStorageService: tool.context.localStorageService } }); } diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-permissions-menu-item.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-permissions-menu-item.ts index fdadf3c12..1a05cca00 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-permissions-menu-item.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-permissions-menu-item.ts @@ -24,7 +24,8 @@ export class EditTransitionPermissionsMenuItem extends MenuItem { userRefs: transition.modelTransition.userRefs, userLists: tool.modelService.model.getDataSet().filter(item => item.type === DataType.USER_LIST), modelService: tool.modelService, - historyService: tool.editModeService.historyService + historyService: tool.editModeService.historyService, + localStorageService: tool.context.localStorageService } }); } diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.service.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.service.ts index 25ee2443e..904a8e647 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.service.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.service.ts @@ -45,6 +45,7 @@ import {BuilderModeService} from '../../services/builder-mode.service'; import {CanvasToolContext} from './services/modes/canvas-tool-context'; import {ProcessActionsTool} from "../actions-mode/tools/process-actions-tool"; import {BuilderIntegrationService} from "../../services/builder-integration.service"; +import {LocalStorageService} from '../../services/local-storage.service'; @Injectable() export class EditModeService extends CanvasModeService { @@ -76,7 +77,8 @@ export class EditModeService extends CanvasModeService { protected _actionMode: ActionsModeService, protected _actionsMasterDetail: ActionsMasterDetailService, protected _processActionsTool: ProcessActionsTool, - protected _builderIntegrationService: BuilderIntegrationService + protected _builderIntegrationService: BuilderIntegrationService, + protected _localStorageService: LocalStorageService ) { super(_arcFactory, modelService, _canvasService); this.mode = new Mode( @@ -90,7 +92,7 @@ export class EditModeService extends CanvasModeService { this._tutorialService.modeler, this._parentInjector ); - const context = new CanvasToolContext(modelService, dialog, this, router, transitionService, _actionMode, _actionsMasterDetail, _builderModeService, _processActionsTool, _builderIntegrationService); + const context = new CanvasToolContext(modelService, dialog, this, router, transitionService, _actionMode, _actionsMasterDetail, _builderModeService, _processActionsTool, _builderIntegrationService, _localStorageService); this.switchTools = new ToolGroup( new ClearModelTool(context), new ResetPositionAndZoomTool(context), diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool-context.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool-context.ts index e0c847def..b52ed899e 100644 --- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool-context.ts +++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/canvas-tool-context.ts @@ -8,6 +8,7 @@ import {EditModeService} from '../../edit-mode.service'; import {BuilderModeService} from '../../../../services/builder-mode.service'; import {ProcessActionsTool} from "../../../actions-mode/tools/process-actions-tool"; import {BuilderIntegrationService} from "../../../../services/builder-integration.service"; +import {LocalStorageService} from '../../../../services/local-storage.service'; export class CanvasToolContext { constructor( @@ -20,6 +21,7 @@ export class CanvasToolContext { public readonly actionsMasterDetail: ActionsMasterDetailService, public readonly builderModeService: BuilderModeService, public readonly processTool: ProcessActionsTool, - public readonly builderIntegrationService: BuilderIntegrationService + public readonly builderIntegrationService: BuilderIntegrationService, + public readonly localStorageService: LocalStorageService, ) {} }