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 d161444d9..26ea824e6 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
@@ -11,7 +11,7 @@ import {TranslateService} from "@ngx-translate/core";
templateUrl: './builder-tabs-example.component.html',
styleUrls: ['./builder-tabs-example.component.scss'],
providers: [
- {provide: NAE_VIEW_ID_SEGMENT, useValue: 'all-cases'},
+ {provide: NAE_VIEW_ID_SEGMENT, useValue: 'builder-tabs'},
{provide: NAE_TASK_FORCE_OPEN, useValue: false},
ViewIdService
]
diff --git a/projects/netgrif-components/src/lib/builder/builder.component.html b/projects/netgrif-components/src/lib/builder/builder.component.html
index 441dbc980..1b19c9e90 100644
--- a/projects/netgrif-components/src/lib/builder/builder.component.html
+++ b/projects/netgrif-components/src/lib/builder/builder.component.html
@@ -1,6 +1,6 @@
-
+
diff --git a/projects/netgrif-components/src/lib/builder/builder.component.ts b/projects/netgrif-components/src/lib/builder/builder.component.ts
index b8bb4cc7a..450c4ea47 100644
--- a/projects/netgrif-components/src/lib/builder/builder.component.ts
+++ b/projects/netgrif-components/src/lib/builder/builder.component.ts
@@ -1,4 +1,4 @@
-import {Component, Inject, Optional, Type, OnDestroy} from '@angular/core';
+import {Component, Inject, OnDestroy, Optional, Type} 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";
@@ -6,14 +6,14 @@ import {MatDialog} from "@angular/material/dialog";
import {HttpClient} from "@angular/common/http";
import {HistoryService} from "./modeler/services/history/history.service";
import {
+ CaseRefField,
CaseResourceService,
- LoadingEmitter,
- NAE_TAB_DATA,
- ImmediateData,
DATA_FIELD_PORTAL_DATA,
- CaseRefField,
DataFieldPortalData,
- LoggerService
+ ImmediateData,
+ LoadingEmitter,
+ LoggerService,
+ NAE_TAB_DATA, ProcessRefField
} from "@netgrif/components-core";
import {InjectedTabbedBuilderViewData} from "./injected-builder-data";
import {FieldListService} from './form-builder/field-list/field-list.service';
@@ -145,7 +145,7 @@ export class BuilderComponent implements OnDestroy {
protected _builderIntegrationService: BuilderIntegrationService,
protected _logger: LoggerService,
@Optional() @Inject(NAE_TAB_DATA) injectedTabData: InjectedTabbedBuilderViewData,
- @Optional() @Inject(DATA_FIELD_PORTAL_DATA) dataFieldPortalData: DataFieldPortalData
,
+ @Optional() @Inject(DATA_FIELD_PORTAL_DATA) dataFieldPortalData: DataFieldPortalData,
protected _translateService: TranslateService) {
this.loading = new LoadingEmitter(true);
if (injectedTabData !== null && injectedTabData?.processCase) {
@@ -156,7 +156,7 @@ export class BuilderComponent implements OnDestroy {
this._caseResourceService.getOneCase(this._builderIntegrationService.processCase.stringId).subscribe({
next: processCase => {
this._builderIntegrationService.processCase = processCase;
- this.resolveIntegratedMode()
+ this.resolveIntegratedMode();
this._builderIntegrationService.reloadModes = true;
},
error: error => {
@@ -166,6 +166,7 @@ export class BuilderComponent implements OnDestroy {
});
} else if (dataFieldPortalData !== null && dataFieldPortalData?.dataField?.value?.length > 0) {
this._builderIntegrationService.isIntegrated = true;
+ this._builderIntegrationService.dataField = dataFieldPortalData.dataField;
this._caseResourceService.getOneCase(dataFieldPortalData?.dataField?.value[0]).subscribe({next: processCase => {
this._builderIntegrationService.processCase = processCase;
this.resolveIntegratedMode();
@@ -175,7 +176,7 @@ export class BuilderComponent implements OnDestroy {
this._reloadSub = this._builderIntegrationService.reloadCase.subscribe(() => {
this._caseResourceService.getOneCase(this._builderIntegrationService.processCase?.stringId).subscribe(processCase => {
this._builderIntegrationService.processCase = processCase;
- this.resolveIntegratedMode()
+ this.resolveIntegratedMode();
this._builderIntegrationService.reloadModes = true;
})
});
@@ -193,15 +194,16 @@ export class BuilderComponent implements OnDestroy {
this._reloadSub?.unsubscribe();
}
- public onlyTaskMode() {
- return this._builderIntegrationService.isIntegrated && this._builderIntegrationService.onlyTaskView;
- }
-
protected resolveIntegratedMode() {
- if (this._builderIntegrationService.processCase.immediateData.find((data: ImmediateData) => data.stringId === 'state')?.value === 'draft') {
- const taskId = this._builderIntegrationService.processCase.tasks.find(taskPair => taskPair.transition === 'edit')?.task;
+ const stateFieldValue: string = this._builderIntegrationService.processCase.immediateData.find((data: ImmediateData) => data.stringId === 'state')?.value;
+ const taskId = this._builderIntegrationService.processCase.tasks.find(taskPair => taskPair.transition === 'form')?.task;
+ if (stateFieldValue === 'draft') {
this._builderIntegrationService.editTaskId = taskId;
- this._builderIntegrationService.onlyTaskView = false;
+ const isDataFieldVisible: boolean = this._builderIntegrationService.dataField?.behavior?.visible;
+ this.builderModeService.readOnly$.next(isDataFieldVisible);
+ if (isDataFieldVisible) {
+ this._builderIntegrationService.allowedTransIds = ['view'];
+ }
this._builderIntegrationService.getXml().subscribe(value => {
this.parseModel(value, BuilderMode.TASK_MODE);
this.loading.off();
@@ -209,10 +211,13 @@ export class BuilderComponent implements OnDestroy {
console.log(error);
this.loading.off();
})
- } else if (this._builderIntegrationService.processCase.immediateData.find((data: ImmediateData) => data.stringId === 'state')?.value === 'deployed') {
- const taskId = this._builderIntegrationService.processCase.tasks.find(taskPair => taskPair.transition === 'view')?.task;
+ } else if (stateFieldValue === 'deployed' || stateFieldValue === 'archived') {
+ this.builderModeService.readOnly$.next(true);
+ const isDataFieldVisible: boolean = this._builderIntegrationService.dataField?.behavior?.visible;
+ if (isDataFieldVisible) {
+ this._builderIntegrationService.allowedTransIds = ['view'];
+ }
this._builderIntegrationService.editTaskId = undefined;
- this._builderIntegrationService.onlyTaskView = true;
this._builderIntegrationService.getXml(taskId).subscribe(value => {
this.parseModel(value, BuilderMode.TASK_MODE);
this.loading.off();
@@ -221,9 +226,9 @@ export class BuilderComponent implements OnDestroy {
this.loading.off();
})
} else {
+ this.builderModeService.readOnly$.next(false);
this.loading.off();
this._builderIntegrationService.editTaskId = undefined;
- this._builderIntegrationService.onlyTaskView = true;
}
this.builderModeService.mode = BuilderMode.TASK_MODE;
}
diff --git a/projects/netgrif-components/src/lib/builder/builder.module.ts b/projects/netgrif-components/src/lib/builder/builder.module.ts
index 53e055b06..69135b018 100644
--- a/projects/netgrif-components/src/lib/builder/builder.module.ts
+++ b/projects/netgrif-components/src/lib/builder/builder.module.ts
@@ -1,7 +1,7 @@
import {Injector, NgModule} from '@angular/core';
import {CommonModule, NgOptimizedImage} from '@angular/common';
import {BuilderComponent} from './builder.component';
-import {MaterialModule, ComponentRegistryService} from '@netgrif/components-core';
+import {MaterialModule, ComponentRegistryService, FrontActionRegistryService} from '@netgrif/components-core';
import {FormBuilderModule} from './form-builder/form-builder.module';
import {ModelerModule} from './modeler/modeler.module';
import {MatProgressSpinnerModule} from '@angular/material/progress-spinner';
@@ -14,6 +14,7 @@ import {FlexLayoutModule} from "@ngbracket/ngx-layout";
import {ComponentPortal} from '@angular/cdk/portal';
import {ProcessRefDefaultComponent} from '../data-fields/process-ref/process-ref-default/process-ref-default.component';
import {TranslateModule} from "@ngx-translate/core";
+import {readOnlyBuilder} from "./read-only-builder";
@NgModule({
@@ -40,7 +41,8 @@ import {TranslateModule} from "@ngx-translate/core";
})
export class BuilderModule {
- constructor(registry: ComponentRegistryService) {
+ constructor(registry: ComponentRegistryService, frontActionRegistry: FrontActionRegistryService) {
registry.register("process-ref-default", (injector: Injector) => new ComponentPortal(ProcessRefDefaultComponent, null, injector));
+ frontActionRegistry.register('readOnlyBuilder', readOnlyBuilder);
}
}
diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-arc-edit/dialog-arc-edit.component.html b/projects/netgrif-components/src/lib/builder/dialogs/dialog-arc-edit/dialog-arc-edit.component.html
index 0bf05eb53..4bca794d5 100644
--- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-arc-edit/dialog-arc-edit.component.html
+++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-arc-edit/dialog-arc-edit.component.html
@@ -6,7 +6,7 @@ {{ 'builder.dialogs.arc-edit.editArc' | translate}}
{{ 'builder.dialogs.arc-edit.type' | translate}}
-
+
{{arcType}}
@@ -47,7 +47,7 @@ {{ 'builder.dialogs.arc-edit.editArc' | translate}}
-
-
+
add
{{ 'builder.dialogs.model-edit.addTag' | translate }}
@@ -80,7 +80,7 @@ {{ 'builder.dialogs.model-edit.title' | translate }}
{{ 'builder.dialogs.model-edit.permissions' | translate }} ({{this.modelService.numberOfPermissions()}})
+ [disabled]="idCtrl.invalid || versionCtrl.invalid || initialsCtrl.invalid || titleCtrl.invalid || _builderModeService.readOnly">
done
{{ 'builder.dialogs.model-edit.save' | translate }}
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 fca77016c..f9cff6f88 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
@@ -1,7 +1,6 @@
import {Component, Inject} from '@angular/core';
import {FormControl, ValidatorFn, Validators} from '@angular/forms';
import {MAT_DIALOG_DATA, MatDialog} from '@angular/material/dialog';
-import {Router} from '@angular/router';
import {DataType} from '@netgrif/petriflow';
import {ActionsModeService} from '../../modeler/actions-mode/actions-mode.service';
import {ProcessActionsTool} from '../../modeler/actions-mode/tools/process-actions-tool';
@@ -35,7 +34,7 @@ export class DialogModelEditComponent {
public modelService: ModelService;
private _actionMode: ActionsModeService;
private _processTool: ProcessActionsTool;
- private _builderModeService: BuilderModeService;
+ protected _builderModeService: BuilderModeService;
private historyService: HistoryService;
private _localStorageService: LocalStorageService;
@@ -58,6 +57,18 @@ export class DialogModelEditComponent {
]);
this.titleCtrl = new FormControl('', [Validators.required]);
this.initialsCtrl = new FormControl('', [Validators.required]);
+
+ if (this._builderModeService.readOnly) {
+ this.idCtrl.disable();
+ this.versionCtrl.disable();
+ this.titleCtrl.disable();
+ this.initialsCtrl.disable();
+ } else {
+ this.idCtrl.enable();
+ this.versionCtrl.enable();
+ this.titleCtrl.enable();
+ this.initialsCtrl.enable();
+ }
}
openPermissions() {
@@ -72,7 +83,8 @@ export class DialogModelEditComponent {
userLists: this.modelService.model.getDataSet().filter(item => item.type === DataType.USER_LIST),
modelService: this.modelService,
historyService: this.historyService,
- localStorageService: this._localStorageService
+ localStorageService: this._localStorageService,
+ builderModeService: this._builderModeService
}
});
}
diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-place-edit/dialog-place-edit.component.html b/projects/netgrif-components/src/lib/builder/dialogs/dialog-place-edit/dialog-place-edit.component.html
index e16f50c6e..92241f334 100644
--- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-place-edit/dialog-place-edit.component.html
+++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-place-edit/dialog-place-edit.component.html
@@ -8,7 +8,7 @@
{{ 'builder.dialogs.place-edit.title' | translate }}
{{ 'builder.dialogs.place-edit.label' | translate }}
-
+
{{ 'builder.dialogs.place-edit.tokens' | translate }}
@@ -21,7 +21,7 @@ {{ 'builder.dialogs.place-edit.title' | translate }}
+ [disabled]="markingCtrl.invalid || idCtrl.invalid || _builderModeService.readOnly">
done
{{ 'builder.dialogs.place-edit.save' | translate }}
diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-place-edit/dialog-place-edit.component.ts b/projects/netgrif-components/src/lib/builder/dialogs/dialog-place-edit/dialog-place-edit.component.ts
index db83efca1..1bba9f3d7 100644
--- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-place-edit/dialog-place-edit.component.ts
+++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-place-edit/dialog-place-edit.component.ts
@@ -4,6 +4,7 @@ import {MAT_DIALOG_DATA} from '@angular/material/dialog';
import {PlaceChange} from '../../modeler/history-mode/model/place/place-change';
import {ModelService} from '../../modeler/services/model/model.service';
import {SimulationModeService} from "../../modeler/simulation-mode/simulation-mode.service";
+import {BuilderModeService} from "../../services/builder-mode.service";
export interface PlaceEditData {
placeId: string;
@@ -25,7 +26,8 @@ export class DialogPlaceEditComponent {
protected modelService: ModelService;
constructor(
- @Inject(MAT_DIALOG_DATA) public data: PlaceEditData
+ @Inject(MAT_DIALOG_DATA) public data: PlaceEditData,
+ protected _builderModeService: BuilderModeService
) {
this.modelService = data.modelService;
const modelPlace = this.modelService.model.getPlace(data.placeId);
@@ -38,6 +40,13 @@ export class DialogPlaceEditComponent {
Validators.required,
this.validMarking()
]);
+ if (this._builderModeService.readOnly) {
+ this.idCtrl.disable();
+ this.markingCtrl.disable();
+ } else {
+ this.idCtrl.enable();
+ this.markingCtrl.enable();
+ }
}
private validUnique(): ValidatorFn {
diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.html b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.html
index ef8943923..416217f3a 100644
--- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.html
+++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/dialog-transition-edit.component.html
@@ -9,7 +9,7 @@ {{ 'builder.dialogs.transition-edit.title' | translate }}
{{ 'builder.dialogs.transition-edit.label' | translate }}
-
+
@@ -20,7 +20,7 @@
{{ 'builder.dialogs.transition-edit.title' | translate }}
{{ 'builder.dialogs.transition-edit.assignPolicy' | translate }}
-
+
{{opt}}
@@ -28,7 +28,7 @@ {{ 'builder.dialogs.transition-edit.title' | translate }}
{{ 'builder.dialogs.transition-edit.finishPolicy' | translate }}
-
+
{{opt}}
@@ -47,13 +47,13 @@ {{ 'builder.dialogs.transition-edit.title' | translate }}
{{ 'builder.dialogs.transition-edit.key' | translate }}
-
+
{{ 'builder.dialogs.transition-edit.value' | translate }}
-
+
-
+
delete
@@ -64,7 +64,7 @@ {{ 'builder.dialogs.transition-edit.title' | translate }}
-
+
add
{{ 'builder.dialogs.transition-edit.addTag' | translate }}
@@ -85,7 +85,7 @@ {{ 'builder.dialogs.transition-edit.title' | translate }}
code
{{ 'builder.dialogs.transition-edit.permissions' | translate }} ({{this._modelService.numberOfTransitionPermissions(transition.transition)}})
-
+
done
{{ 'builder.dialogs.transition-edit.save' | translate }}
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 5e4cd6944..52e4efe78 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
@@ -36,7 +36,7 @@ export class DialogTransitionEditComponent implements OnInit {
private _transitionService: SelectedTransitionService;
private _actionMode: ActionsModeService;
private _actionsMasterDetail: ActionsMasterDetailService;
- private _builderModeService: BuilderModeService;
+ protected _builderModeService: BuilderModeService;
private _historyService: HistoryService;
private _localStorageService: LocalStorageService;
@@ -58,6 +58,11 @@ export class DialogTransitionEditComponent implements OnInit {
Validators.required,
this.validUnique()
]);
+ if (this._builderModeService.readOnly) {
+ this.form.disable();
+ } else {
+ this.form.enable();
+ }
}
ngOnInit(): void {
@@ -100,7 +105,8 @@ export class DialogTransitionEditComponent implements OnInit {
userLists: this._modelService.model.getDataSet().filter(item => item.type === DataType.USER_LIST),
modelService: this._modelService,
historyService: this._historyService,
- localStorageService: this._localStorageService
+ localStorageService: this._localStorageService,
+ builderModeService: this._builderModeService
}
});
}
diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.html b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.html
index 27f7d1b9b..9855fd10a 100644
--- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.html
+++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.html
@@ -3,7 +3,7 @@
@@ -79,7 +80,7 @@
{{node.name}}
-
+
remove
diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.spec.ts b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.spec.ts
index 809f0766e..e5673cf27 100644
--- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.spec.ts
+++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.spec.ts
@@ -2,12 +2,14 @@ import {NO_ERRORS_SCHEMA} from '@angular/core';
import {TestBed} from '@angular/core/testing';
import {TriggerTreeComponent} from './trigger-tree.component';
import {TranslateService} from "@ngx-translate/core";
+import {BuilderModeService} from "../../../services/builder-mode.service";
describe('TriggerTreeComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
- {provide: TranslateService, useValue: { instant: (key: string) => `translated-${key}` }}
+ {provide: TranslateService, useValue: { instant: (key: string) => `translated-${key}` }},
+ BuilderModeService
],
declarations: [TriggerTreeComponent],
schemas: [NO_ERRORS_SCHEMA],
diff --git a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.ts b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.ts
index 1c7f431c4..2a77dda05 100644
--- a/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.ts
+++ b/projects/netgrif-components/src/lib/builder/dialogs/dialog-transition-edit/trigger-tree/trigger-tree.component.ts
@@ -5,6 +5,7 @@ import {MatTreeNestedDataSource} from '@angular/material/tree';
import {DATE_TIME_FORMAT} from '@netgrif/components-core';
import {Trigger, TriggerType} from '@netgrif/petriflow';
import {TranslateService} from "@ngx-translate/core";
+import {BuilderModeService} from "../../../services/builder-mode.service";
interface TriggerNode {
name?: string;
@@ -33,7 +34,7 @@ export class TriggerTreeComponent {
treeControl = new NestedTreeControl(node => node.trigger);
dataSource = new MatTreeNestedDataSource();
- constructor(protected _translateService: TranslateService) {
+ constructor(protected _translateService: TranslateService, protected _builderModeService: BuilderModeService) {
this.treeData = [{
name: this._translateService.instant('builder.dialogs.transition-edit.trigger-tree.triggers'),
trigger: []
diff --git a/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.html b/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.html
index 5f053d845..3080a1ad7 100644
--- a/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.html
+++ b/projects/netgrif-components/src/lib/builder/form-builder/edit-panel/edit-panel.component.html
@@ -2,7 +2,8 @@
{{ 'builder.form-builder.edit-panel.numberOfColumns' | translate }}
-
+
@@ -13,47 +14,55 @@
Assign event
{{ 'builder.form-builder.edit-panel.title' | translate }}
-
+
{{ 'builder.form-builder.edit-panel.message' | translate }}
-
+
Finish event
{{ 'builder.form-builder.edit-panel.title' | translate }}
-
+
{{ 'builder.form-builder.edit-panel.message' | translate }}
-
+
Cancel event
{{ 'builder.form-builder.edit-panel.title' | translate }}
-
+
{{ 'builder.form-builder.edit-panel.message' | translate }}
-
+
Delegate event
{{ 'builder.form-builder.edit-panel.title' | translate }}
-
+
{{ 'builder.form-builder.edit-panel.message' | translate }}
-
+
{{ 'builder.form-builder.edit-panel.id' | translate }}: {{ dataVariable.id }}
-
edit
@@ -61,16 +70,23 @@
+ (change)="notifyGridster()" [disabled]="_builderModeService.readOnly">
{{ 'builder.form-builder.edit-panel.required' | translate }}
+ (change)="notifyGridster()" [disabled]="_builderModeService.readOnly">
{{ 'builder.form-builder.edit-panel.immediate' | translate }}
+
+ {{ 'builder.modeler.data-mode.type' | translate }}
+
+ {{ opt.viewValue }}
+
+
Behavior
-
+
{{ opt.value }}
@@ -81,26 +97,29 @@
{{ 'builder.form-builder.edit-panel.title' | translate }}
-
+
{{ 'builder.form-builder.edit-panel.placeholder' | translate }}
-
+
{{ 'builder.form-builder.edit-panel.description' | translate }}
-
+
{{ 'builder.form-builder.edit-panel.initialValue' | translate }}
+ (change)="notifyGridster()" [disabled]="_builderModeService.readOnly">
{{ 'builder.form-builder.edit-panel.initialValue' | translate }}
+ (selectionChange)="notifyGridster()" [disabled]="_builderModeService.readOnly">
None
{{ opt.value?.value }}
@@ -108,7 +127,8 @@
+ (selectionChange)="notifyGridster()" multiple
+ [disabled]="_builderModeService.readOnly">
{{ opt.value?.value }}
@@ -116,12 +136,14 @@
+ (change)="setBooleanValue($event); notifyGridster()"
+ [disabled]="_builderModeService.readOnly">
{{ 'builder.form-builder.edit-panel.initialValue' | translate }}
{{ 'builder.form-builder.edit-panel.initialValue' | translate }}
-
+
{{ 'builder.form-builder.edit-panel.initialValue' | translate }}
@@ -129,6 +151,7 @@
@@ -139,6 +162,7 @@
-
+
-
add
{{ 'builder.form-builder.edit-panel.addOption' | translate }}
@@ -189,7 +218,8 @@
-
add
{{ 'builder.form-builder.edit-panel.addProperty' | translate }}
-
move_down
{{ 'builder.form-builder.edit-panel.copyToDataRef' | translate }}
@@ -249,13 +281,15 @@
-
delete
@@ -267,7 +301,7 @@
{{ 'builder.form-builder.edit-panel.noIcons' | translate }}
-
add
{{ 'builder.form-builder.edit-panel.addIcon' | translate }}
@@ -278,7 +312,8 @@
-
add
{{ 'builder.form-builder.edit-panel.addProperty' | translate }}
-
move_up
{{ 'builder.form-builder.edit-panel.copyToDataField' | translate }}
@@ -339,13 +376,15 @@
-
delete
@@ -373,7 +412,8 @@
{{ 'builder.form-builder.edit-panel.template' | translate }}
-
+
{{ opt }}
@@ -382,7 +422,8 @@
{{ 'builder.form-builder.edit-panel.appearance' | translate }}
-
+
{{ opt }}
@@ -393,6 +434,7 @@
{{ 'builder.form-builder.edit-panel.fieldOffset' | translate }}
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 32c4b0aba..e7ea84d28 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
@@ -12,10 +12,16 @@ import {GridsterService} from '../gridster/gridster.service';
import {FieldListService} from '../field-list/field-list.service';
import {EditPanelComponent} from './edit-panel.component';
import {TranslateService} from "@ngx-translate/core";
+import {DataModeService} from "../../modeler/data-mode/data-mode.service";
+import {TutorialService} from "../../tutorial/tutorial-service";
+import {MortgageService} from "../../modeler/mortgage.service";
+import {HttpClientTestingModule} from "@angular/common/http/testing";
+import {ModelImportService} from "../../modeler/model-import-service";
describe('EditPanelComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
+ imports: [HttpClientTestingModule],
declarations: [EditPanelComponent],
providers: [
GridsterService,
@@ -28,7 +34,11 @@ describe('EditPanelComponent', () => {
{provide: ActionsMasterDetailService, useValue: {}},
{provide: MatDialog, useValue: {}},
{provide: Router, useValue: {}},
- {provide: TranslateService, useValue: { instant: (key: string) => `translated-${key}` }}
+ {provide: TranslateService, useValue: { instant: (key: string) => `translated-${key}` }},
+ DataModeService,
+ TutorialService,
+ MortgageService,
+ {provide: ModelImportService, useValue: {}},
],
schemas: [NO_ERRORS_SCHEMA],
});
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 dd5aa8e2a..d2cbf0fcc 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
@@ -1,7 +1,7 @@
import {NGX_MAT_DATE_FORMATS} from '@angular-material-components/datetime-picker';
import {animate, state, style, transition, trigger} from '@angular/animations';
import {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop';
-import {AfterViewInit, Component, HostListener, OnInit} from '@angular/core';
+import {AfterViewInit, Component, HostListener, OnDestroy, OnInit} from '@angular/core';
import {FormControl} from '@angular/forms';
import {MatAutocompleteSelectedEvent} from '@angular/material/autocomplete';
import {MAT_DATE_FORMATS} from '@angular/material/core';
@@ -25,7 +25,7 @@ import {
TransitionEvent,
TransitionEventType,
} from '@netgrif/petriflow';
-import {Observable} from 'rxjs';
+import {Observable, Subscription} from 'rxjs';
import {map, startWith, tap} from 'rxjs/operators';
import {DialogRefactorComponent} from '../../dialogs/dialog-refactor/dialog-refactor.component';
import {ActionsMasterDetailService} from '../../modeler/actions-mode/actions-master-detail.service';
@@ -37,6 +37,7 @@ 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 "../../services/builder-mode.service";
+import {DataModeService} from "../../modeler/data-mode/data-mode.service";
@Component({
selector: 'nc-builder-edit-panel',
@@ -64,7 +65,7 @@ import {BuilderModeService, BuilderMode} from "../../services/builder-mode.servi
{provide: MAT_DATE_FORMATS, useValue: DATE_FORMAT}
]
})
-export class EditPanelComponent implements OnInit, AfterViewInit {
+export class EditPanelComponent implements OnInit, AfterViewInit, OnDestroy {
numOfCols: number;
minOfCols: number;
hover: boolean;
@@ -78,6 +79,7 @@ export class EditPanelComponent implements OnInit, AfterViewInit {
componentNameFormCtrl: FormControl;
dataRefComponentNameFormCtrl: FormControl;
+ readOnlySub: Subscription;
constructor(public gridsterService: GridsterService,
public modelService: ModelService,
@@ -86,7 +88,8 @@ export class EditPanelComponent implements OnInit, AfterViewInit {
private _actionMode: ActionsModeService,
private _fieldListService: FieldListService,
private _actionsMasterDetail: ActionsMasterDetailService,
- private _builderModeService: BuilderModeService) {
+ protected _builderModeService: BuilderModeService,
+ protected _dataModeService: DataModeService) {
// this.transitionOptions = [];
this.formControlRef = new FormControl();
this.behaviorOptions = [
@@ -99,6 +102,15 @@ export class EditPanelComponent implements OnInit, AfterViewInit {
ngOnInit() {
this.componentNameFormCtrl = new FormControl();
this.dataRefComponentNameFormCtrl = new FormControl();
+ this.readOnlySub = this._builderModeService.readOnly$.subscribe(readOnly => {
+ if (readOnly) {
+ this.componentNameFormCtrl.disable();
+ this.dataRefComponentNameFormCtrl.disable();
+ } else {
+ this.componentNameFormCtrl.enable();
+ this.dataRefComponentNameFormCtrl.enable();
+ }
+ })
this.transId = this.transitionService.id;
if (this.transId === null) {
this.numOfCols = ModelerConfig.LAYOUT_DEFAULT_COLS;
@@ -146,6 +158,10 @@ export class EditPanelComponent implements OnInit, AfterViewInit {
);
}
+ ngOnDestroy(): void {
+ this.readOnlySub.unsubscribe();
+ }
+
get transition(): Transition {
return this.modelService.model.getTransition(this.transitionService.id);
}
diff --git a/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.html b/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.html
index 9562f89c2..05fdb98b5 100644
--- a/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.html
+++ b/projects/netgrif-components/src/lib/builder/form-builder/field-list/field-list.component.html
@@ -1,73 +1,74 @@
{{ 'builder.form-builder.field-list.dataFields' | translate }}
-
-
-
-
- search
-
- 0">
- close
-
-
-
-
-
-
-
- drag_indicator
- delete
-
- {{item.title?.value}} [{{item.id}}]
-
-
-
-
-
-
-
- {{item.title?.value}} [{{item.id}}]
-
-
-
-
-
-
-
+
+
+
+
-
+
add
{{ 'builder.modeler.data-mode.addNet' | translate }}
@@ -298,14 +301,14 @@
{{ 'builder.modeler.data-mode.expression' | translate }}
-
+
{{ 'builder.modeler.data-mode.message' | translate }}
+ [(ngModel)]="validation.message.value" [disabled]="_builderModeService.readOnly">
-
+
delete
@@ -315,7 +318,7 @@
{{ 'builder.modeler.data-mode.empty' | translate }}
-
+
add
{{ 'builder.modeler.data-mode.addValidation' | translate }}
@@ -337,13 +340,15 @@
+ placeholder="{{ 'builder.modeler.data-mode.optionKey' | translate }}" [value]="item.key"
+ [disabled]="_builderModeService.readOnly">
+ type="text" placeholder="{{ 'builder.modeler.data-mode.optionValue' | translate }}"
+ [value]="item.value?.value" [disabled]="_builderModeService.readOnly">
-
+
delete
@@ -353,7 +358,7 @@
{{ 'builder.modeler.data-mode.noOptions' | translate }}
-
+
add
{{ 'builder.modeler.data-mode.addOption' | translate }}
@@ -370,7 +375,7 @@
+ (change)="setValue($event,'options-init')" [disabled]="_builderModeService.readOnly">
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-detail/data-detail.component.scss b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-detail/data-detail.component.scss
index 6cb5aa267..084edba60 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-detail/data-detail.component.scss
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-detail/data-detail.component.scss
@@ -116,7 +116,8 @@
}
.height-fix {
- height: calc(100vh - 42px);
+ min-height: 100%;
+ overflow: visible;
}
.full-width {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-detail/data-detail.component.ts b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-detail/data-detail.component.ts
index 7628266a4..720a136a8 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-detail/data-detail.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-detail/data-detail.component.ts
@@ -34,11 +34,8 @@ import {ModelService} from '../../services/model/model.service';
import {DataMasterDetailService} from '../data-master-detail.service';
import {BuilderModeService, BuilderMode} from "../../../services/builder-mode.service";
import {TranslateService} from "@ngx-translate/core";
+import {DataModeService} from "../data-mode.service";
-export interface TypeArray {
- viewValue: string;
- value: string;
-}
export interface HistoryDataSave {
item: DataVariable,
@@ -57,7 +54,6 @@ export class DataDetailComponent implements OnDestroy {
componentNameFormCtrl: FormControl;
transitionOptions: Array;
filteredOptions: Observable>;
- typeArray: Array;
historyDataSave: HistoryDataSave;
public constructor(
@@ -69,11 +65,17 @@ export class DataDetailComponent implements OnDestroy {
private _actionMode: ActionsModeService,
private _actionsMasterDetail: ActionsMasterDetailService,
private _historyService: HistoryService,
- private _builderModeService: BuilderModeService,
- private _translateService: TranslateService
+ protected _builderModeService: BuilderModeService,
+ private _translateService: TranslateService,
+ protected _dataModeService: DataModeService
) {
this.formControlRef = new FormControl();
this.componentNameFormCtrl = new FormControl();
+ if (this._builderModeService.readOnly) {
+ this.componentNameFormCtrl.disable();
+ } else {
+ this.componentNameFormCtrl.enable();
+ }
this.transitionOptions = this.createTransOptions();
this._masterService.getSelected$().subscribe(obj => {
if (this.historyDataSave?.save) {
@@ -109,31 +111,6 @@ export class DataDetailComponent implements OnDestroy {
startWith(''),
map(value => this._filter(value))
);
- this.typeArray = [
- {viewValue: this._translateService.instant('builder.modeler.data-mode.boolean'), value: DataType.BOOLEAN},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.button'), value: DataType.BUTTON},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.caseRef'), value: DataType.CASE_REF},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.processRef'), value: DataType.PROCESS_REF},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.date'), value: DataType.DATE},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.datetime'), value: DataType.DATETIME},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.enumeration'), value: DataType.ENUMERATION},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.enumerationMap'), value: DataType.ENUMERATION_MAP},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.file'), value: DataType.FILE},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.fileList'), value: DataType.FILE_LIST},
- {viewValue: 'Filter (deprecated)', value: DataType.FILTER},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.caseFilter'), value: DataType.CASE_FILTER},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.taskFilter'), value: DataType.TASK_FILTER},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.processFilter'), value: DataType.PROCESS_FILTER},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.i18n'), value: DataType.I18N},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.multichoice'), value: DataType.MULTICHOICE},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.multichoiceMap'), value: DataType.MULTICHOICE_MAP},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.number'), value: DataType.NUMBER},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.user'), value: DataType.USER},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.userList'), value: DataType.USER_LIST},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.stringCollection'), value: DataType.STRING_COLLECTION},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.taskRef'), value: DataType.TASK_REF},
- {viewValue: this._translateService.instant('builder.modeler.data-mode.text'), value: DataType.TEXT}
- ];
}
ngOnDestroy() {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-master-item/data-master-item.component.html b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-master-item/data-master-item.component.html
index b0f07984c..42f0ad6c8 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-master-item/data-master-item.component.html
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-master-item/data-master-item.component.html
@@ -10,13 +10,13 @@
+ [ngClass]="{'data-edit-list-icon-hidden': !showIcons}" *ngIf="!_builderModeService.readOnly">
delete
+ [ngClass]="{'data-edit-list-icon-hidden': !showIcons}" *ngIf="!_builderModeService.readOnly">
add_to_photos
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-master-item/data-master-item.component.ts b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-master-item/data-master-item.component.ts
index 174cca599..efe5fff1a 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-master-item/data-master-item.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-master-item/data-master-item.component.ts
@@ -4,6 +4,7 @@ import {DataVariable} from '@netgrif/petriflow';
import {DialogDeleteComponent} from '../../../dialogs/dialog-delete/dialog-delete.component';
import {AbstractMasterDetailService} from '../../components/master-detail/abstract-master-detail.service';
import {MASTER_ITEM, MASTER_SERVICE} from '../../components/master-detail/main-master-item/master-injection-tokens';
+import {BuilderModeService} from "../../../services/builder-mode.service";
@Component({
selector: 'nc-builder-data-master-item',
@@ -16,7 +17,8 @@ export class DataMasterItemComponent {
constructor(@Inject(MASTER_ITEM) public item: DataVariable,
@Inject(MASTER_SERVICE) protected _service: AbstractMasterDetailService,
- protected _dialog: MatDialog) {
+ protected _dialog: MatDialog,
+ protected _builderModeService: BuilderModeService) {
}
onDelete(event: MouseEvent, item: DataVariable): void {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.html b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.html
index 5cc6b0924..37612a590 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.html
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.html
@@ -1,8 +1,9 @@
+ [masterItemComponent]="masterItemComponent"
+ [masterService]="masterService"
+ [detailComponent]="detailComponent"
+ [firstColName]="'builder.modeler.data-mode.idLabel' | translate"
+ [secondColName]="'builder.modeler.data-mode.name' | translate"
+ [buttonTooltip]="'builder.modeler.data-mode.addDataVariable' | translate"
+ [showAddButton]="!_builderModeService.readOnly">
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.scss b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.scss
index e69de29bb..a2b6bcc54 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.scss
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.scss
@@ -0,0 +1,3 @@
+:host {
+ height: 100%;
+}
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.ts b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.ts
index 08087819b..6734f5852 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.component.ts
@@ -1,8 +1,9 @@
import {ComponentType} from '@angular/cdk/overlay';
import {Component} from '@angular/core';
-import {DataDetailComponent} from './data-detail/data-detail.component';
import {DataMasterDetailService} from './data-master-detail.service';
import {DataMasterItemComponent} from './data-master-item/data-master-item.component';
+import {BuilderModeService} from "../../services/builder-mode.service";
+import {DataDetailComponent} from "./data-detail/data-detail.component";
export interface TypeArray {
viewValue: string;
@@ -16,7 +17,7 @@ export interface TypeArray {
})
export class DataModeComponent {
- constructor(protected _masterService: DataMasterDetailService ) {
+ constructor(protected _masterService: DataMasterDetailService, protected _builderModeService: BuilderModeService) {
}
get detailComponent(): ComponentType {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.service.ts b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.service.ts
index 25e8e0069..d5d835250 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.service.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/data-mode.service.ts
@@ -9,10 +9,16 @@ import {ModeService} from '../control-panel/modes/mode-component/mode.service';
import {Tool} from '../control-panel/tools/tool';
import {TranslateService} from "@ngx-translate/core";
+export interface TypeArray {
+ viewValue: string;
+ value: string;
+}
+
@Injectable()
export class DataModeService extends ModeService {
event: EventEmitter;
itemData: BehaviorSubject;
+ _typeArray: Array;
constructor(
private _tutorialService: TutorialService,
@@ -34,5 +40,34 @@ export class DataModeService extends ModeService {
this._parentInjector
);
this.tools = [];
+ this._typeArray = [
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.boolean'), value: DataType.BOOLEAN},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.button'), value: DataType.BUTTON},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.caseRef'), value: DataType.CASE_REF},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.processRef'), value: DataType.PROCESS_REF},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.date'), value: DataType.DATE},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.datetime'), value: DataType.DATETIME},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.enumeration'), value: DataType.ENUMERATION},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.enumerationMap'), value: DataType.ENUMERATION_MAP},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.file'), value: DataType.FILE},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.fileList'), value: DataType.FILE_LIST},
+ {viewValue: 'Filter (deprecated)', value: DataType.FILTER},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.caseFilter'), value: DataType.CASE_FILTER},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.taskFilter'), value: DataType.TASK_FILTER},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.processFilter'), value: DataType.PROCESS_FILTER},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.i18n'), value: DataType.I18N},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.multichoice'), value: DataType.MULTICHOICE},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.multichoiceMap'), value: DataType.MULTICHOICE_MAP},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.number'), value: DataType.NUMBER},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.user'), value: DataType.USER},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.userList'), value: DataType.USER_LIST},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.stringCollection'), value: DataType.STRING_COLLECTION},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.taskRef'), value: DataType.TASK_REF},
+ {viewValue: this._translateService.instant('builder.modeler.data-mode.text'), value: DataType.TEXT}
+ ];
+ }
+
+ public get typeArray(): Array {
+ return this._typeArray;
}
}
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.html b/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.html
index d01522452..36841189a 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.html
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.html
@@ -4,7 +4,7 @@
@for (init of taskRef.inits; track $index) {
{{ prettyTask(init?.value) }}
-
+
cancel
@@ -17,6 +17,7 @@
[matChipInputFor]="chipGrid"
[matAutocomplete]="auto"
(matChipInputTokenEnd)="addInit($event)"
+ [disabled]="_builderModeService.readOnly"
/>
@for (task of tasks; track task) {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.spec.ts b/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.spec.ts
index 9c01a2b3d..e7eda88d6 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.spec.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.spec.ts
@@ -9,6 +9,7 @@ import {TaskRefInitFieldComponent} from './task-ref-init-field.component';
import {TranslateService} from "@ngx-translate/core";
import {HttpClientTestingModule} from "@angular/common/http/testing";
import {TranslateLibModule} from "@netgrif/components-core";
+import {BuilderModeService} from "../../../services/builder-mode.service";
describe('TaskRefInitFieldComponent', () => {
beforeEach(() => {
@@ -18,7 +19,8 @@ describe('TaskRefInitFieldComponent', () => {
TranslateLibModule,
HttpClientTestingModule],
providers: [{provide: ModelService, useValue: {model: {}}},
- {provide: TranslateService, useValue: { instant: (key: string) => `translated-${key}` }}
+ {provide: TranslateService, useValue: { instant: (key: string) => `translated-${key}` }},
+ BuilderModeService
],
schemas: [NO_ERRORS_SCHEMA, CUSTOM_ELEMENTS_SCHEMA],
});
diff --git a/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.ts b/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.ts
index d672ca26f..f80d7624e 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.ts
@@ -4,6 +4,7 @@ import {MatAutocompleteSelectedEvent} from '@angular/material/autocomplete';
import {MatChipInputEvent} from '@angular/material/chips';
import {DataVariable, I18nWithDynamic, Transition} from '@netgrif/petriflow';
import {ModelService} from '../../services/model/model.service';
+import {BuilderModeService} from "../../../services/builder-mode.service";
@Component({
selector: 'nc-builder-task-ref-init-field',
@@ -16,7 +17,7 @@ export class TaskRefInitFieldComponent {
taskRefFormControl: FormControl;
@ViewChild('taskRefInput') taskRefInput: ElementRef;
- constructor(private _modelService: ModelService) {
+ constructor(private _modelService: ModelService, protected _builderModeService: BuilderModeService) {
this.taskRefFormControl = new FormControl('');
}
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 3abd6f0e5..0e9057dcc 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
@@ -25,7 +25,8 @@ export class ManageModelPermissionsMenuItem extends MenuItem {
userLists: tool.model.getDataSet().filter(item => item.type === DataType.USER_LIST),
modelService: tool.modelService,
historyService: tool.editModeService.historyService,
- localStorageService: tool.context.localStorageService
+ localStorageService: tool.context.localStorageService,
+ builderModeService: tool.context.builderModeService
}
});
}
diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-form-menu-item.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-form-menu-item.ts
index 5d0e470be..dbe980dda 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-form-menu-item.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-form-menu-item.ts
@@ -12,7 +12,7 @@ export class EditFormMenuItem extends MenuItem {
'dashboard',
() => {
tool.transitionService.id = transition.id;
- tool.builderModeService.mode = BuilderMode.FORM_BUILDER;
+ tool._builderModeService.mode = BuilderMode.FORM_BUILDER;
}
);
}
diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-actions-menu-item.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-actions-menu-item.ts
index a171be590..adf8a819e 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-actions-menu-item.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-actions-menu-item.ts
@@ -16,7 +16,7 @@ export class EditTransitionActionsMenuItem extends MenuItem {
tool.actionMode.activate(tool.actionMode.transitionActionsTool);
tool.actionsMasterDetail.select(transition.modelTransition);
tool.transitionService.id = transition.id;
- tool.builderModeService.mode = BuilderMode.ACTION_MODE;
+ tool._builderModeService.mode = BuilderMode.ACTION_MODE;
}
);
}
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 a65008596..b9702a400 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
@@ -26,7 +26,8 @@ export class EditTransitionPermissionsMenuItem extends MenuItem {
userLists: tool.modelService.model.getDataSet().filter(item => item.type === DataType.USER_LIST),
modelService: tool.modelService,
historyService: tool.editModeService.historyService,
- localStorageService: tool.context.localStorageService
+ localStorageService: tool.context.localStorageService,
+ builderModeService: tool.context.builderModeService
}
});
}
diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.component.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.component.ts
index 7f752d0f6..84290bc3b 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/edit-mode.component.ts
@@ -1,4 +1,4 @@
-import {AfterViewInit, Component, ElementRef, HostListener, OnDestroy, ViewChild, ChangeDetectionStrategy} from '@angular/core';
+import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, HostListener, OnDestroy, ViewChild, ChangeDetectionStrategy} from '@angular/core';
import {MatDialog} from '@angular/material/dialog';
import {NgxDropzoneChangeEvent} from 'ngx-dropzone';
import {ModelImportService} from '../model-import-service';
@@ -9,6 +9,7 @@ import {ContextMenu} from './context-menu/context-menu';
import {ContextMenuComponent} from './context-menu/context-menu.component';
import {EditModeService} from './edit-mode.service';
import {TranslateService} from "@ngx-translate/core";
+import {Subscription} from "rxjs";
@Component({
selector: 'nc-builder-edit-mode',
@@ -21,14 +22,19 @@ export class EditModeComponent implements AfterViewInit, OnDestroy {
@ViewChild('contextMenu', {read: ElementRef}) contextMenu: ElementRef;
@ViewChild('contextMenu') contextMenuComponent: ContextMenuComponent;
+ private contextMenuSubscription: Subscription;
+ private gridSubscription: Subscription;
+
constructor(
private importService: ModelImportService,
private _modelService: ModelService,
private _editModeService: EditModeService,
private historyService: HistoryService,
public dialog: MatDialog,
- private _translateService: TranslateService
+ private _translateService: TranslateService,
+ private _cdr: ChangeDetectorRef
) {
+ this.gridSubscription = this._editModeService.gridChanged$?.subscribe(() => this._cdr.markForCheck());
}
@HostListener('contextmenu', ['$event'])
@@ -39,7 +45,7 @@ export class EditModeComponent implements AfterViewInit, OnDestroy {
ngAfterViewInit() {
ModelerUtils.clearSelection();
- this._editModeService.contextMenuItems.subscribe(menu => {
+ this.contextMenuSubscription = this._editModeService.contextMenuItems.subscribe(menu => {
if (!menu) {
this.contextMenu.nativeElement.style.visibility = 'hidden';
return;
@@ -64,15 +70,28 @@ export class EditModeComponent implements AfterViewInit, OnDestroy {
}
private checkPosition(menu: ContextMenu): void {
- const area = document.getElementById('modeler_area');
+ const host: HTMLElement = this.contextMenu.nativeElement;
+ const menuElement = (host.firstElementChild ?? host) as HTMLElement;
+ const area = (host.closest('#modeler_area') ?? document.getElementById('modeler_area')) as HTMLElement;
const areaBounds = area.getBoundingClientRect();
- this.contextMenu.nativeElement.style.top = (((menu.position.y + this.contextMenu.nativeElement.firstChild.offsetHeight - areaBounds.y) > area.offsetHeight)
- ? (areaBounds.y + area.offsetHeight - this.contextMenu.nativeElement.firstChild.offsetHeight) : (menu.position.y)) + 'px';
- this.contextMenu.nativeElement.style.left = (((menu.position.x + this.contextMenu.nativeElement.firstChild.offsetWidth - areaBounds.x) > area.offsetWidth)
- ? (areaBounds.x + area.offsetWidth - this.contextMenu.nativeElement.firstChild.offsetWidth) : (menu.position.x)) + 'px';
+
+ host.style.left = '0px';
+ host.style.top = '0px';
+ const origin = host.getBoundingClientRect();
+
+ const width = menuElement.offsetWidth;
+ const height = menuElement.offsetHeight;
+
+ const x = Math.max(areaBounds.left, Math.min(menu.position.x, areaBounds.right - width));
+ const y = Math.max(areaBounds.top, Math.min(menu.position.y, areaBounds.bottom - height));
+
+ host.style.left = (x - origin.left) + 'px';
+ host.style.top = (y - origin.top) + 'px';
}
ngOnDestroy(): void {
+ this.contextMenuSubscription?.unsubscribe();
+ this.gridSubscription?.unsubscribe();
this.editModeService.activeTool.unbind();
}
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 a360aa9ef..45fe0dbb6 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
@@ -6,7 +6,7 @@ import {Arc, ArcType, NodeElement, Place, Transition} from '@netgrif/petriflow';
import {PetriflowCanvasService, PetriflowNode} from '@netgrif/petriflow.svg';
import {InjectedTabData, NAE_TAB_DATA} from '@netgrif/components-core';
import {PanzoomOptions} from '@panzoom/panzoom';
-import {BehaviorSubject, Subscription} from 'rxjs';
+import {BehaviorSubject, Subject, Subscription} from 'rxjs';
import {ChangedArc} from '../../dialogs/dialog-arc-edit/changed-arc';
import {ChangedTransition} from '../../dialogs/dialog-transition-edit/changed-transition';
import {TutorialService} from '../../tutorial/tutorial-service';
@@ -53,6 +53,7 @@ import {TranslateService} from "@ngx-translate/core";
export class EditModeService extends CanvasModeService implements OnDestroy {
public contextMenuItems: BehaviorSubject;
+ public gridChanged$ = new Subject();
// TODO: NAB-326 refactor
public switchTools: ToolGroup;
public panzoomConfiguration: PanzoomOptions = {
@@ -69,6 +70,7 @@ export class EditModeService extends CanvasModeService implements On
private _placeSubscription: Subscription;
private _transitionSubscription: Subscription;
private _arcSubscription: Subscription;
+ private _readOnlySubscription: Subscription;
constructor(
_arcFactory: ArcFactory,
@@ -77,7 +79,7 @@ export class EditModeService extends CanvasModeService implements On
dialog: MatDialog,
router: Router,
transitionService: SelectedTransitionService,
- _builderModeService: BuilderModeService,
+ protected _builderModeService: BuilderModeService,
private _tutorialService: TutorialService,
private _parentInjector: Injector,
private _historyService: HistoryService,
@@ -105,29 +107,7 @@ export class EditModeService extends CanvasModeService implements On
const context = new CanvasToolContext(modelService, dialog, this, router, transitionService, _actionMode,
_actionsMasterDetail, _builderModeService, _processActionsTool, _builderIntegrationService, this._ngZone,
_localStorageService, _translateService);
- this.switchTools = new ToolGroup(
- new ClearModelTool(context),
- new ResetPositionAndZoomTool(context),
- new GridTool(context),
- new SwitchLabelTool(context)
- );
- this.tools = [
- new ToolGroup(
- new SelectTool(context),
- new QuickDrawTool(context),
- new CreateTransitionTool(context),
- new CreatePlaceTool(context),
- new AddTokenTool(context),
- new RemoveTokenTool(context)
- ),
- new ToolGroup(
- new CreateRegularArcTool(context),
- new CreateResetArcTool(context),
- new CreateInhibitorArcTool(context),
- new CreateReadArcTool(context)
- ),
- this.switchTools
- ];
+ this.initializeTools(context);
this._modelSubscription = this.modelService.model$().subscribe(_ => this.renderModel());
this._placeSubscription = this.modelService.placeChange.subscribe(value => this.updatePlace(value));
this._transitionSubscription = this.modelService.transitionChange.subscribe(value => this.updateTransition(value));
@@ -144,6 +124,49 @@ export class EditModeService extends CanvasModeService implements On
this._placeSubscription?.unsubscribe();
this._transitionSubscription?.unsubscribe();
this._arcSubscription?.unsubscribe();
+ this._readOnlySubscription?.unsubscribe();
+ }
+
+ protected initializeTools(context: CanvasToolContext) {
+ this._readOnlySubscription = this._builderModeService.readOnly$.subscribe(readOnly => {
+ if (readOnly) {
+ this.switchTools = new ToolGroup(
+ new ResetPositionAndZoomTool(context),
+ new GridTool(context),
+ new SwitchLabelTool(context)
+ );
+ this.tools = [
+ new ToolGroup(
+ new SelectTool(context),
+ ),
+ this.switchTools
+ ];
+ } else {
+ this.switchTools = new ToolGroup(
+ new ClearModelTool(context),
+ new ResetPositionAndZoomTool(context),
+ new GridTool(context),
+ new SwitchLabelTool(context)
+ );
+ this.tools = [
+ new ToolGroup(
+ new SelectTool(context),
+ new QuickDrawTool(context),
+ new CreateTransitionTool(context),
+ new CreatePlaceTool(context),
+ new AddTokenTool(context),
+ new RemoveTokenTool(context)
+ ),
+ new ToolGroup(
+ new CreateRegularArcTool(context),
+ new CreateResetArcTool(context),
+ new CreateInhibitorArcTool(context),
+ new CreateReadArcTool(context)
+ ),
+ this.switchTools
+ ];
+ }
+ });
}
activate(tool?: CanvasTool) {
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 89ca83701..071e08e60 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,6 @@ 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 '../../../../services/builder-mode.service';
import {CanvasToolContext} from './canvas-tool-context';
import {TranslateService} from "@ngx-translate/core";
@@ -37,7 +36,6 @@ export abstract class CanvasTool extends CanvasListenerTool {
private readonly _editModeService: EditModeService;
public actionMode: ActionsModeService;
public actionsMasterDetail: ActionsMasterDetailService;
- public builderModeService: BuilderModeService;
protected _translateService: TranslateService
protected constructor(
@@ -45,11 +43,11 @@ export abstract class CanvasTool extends CanvasListenerTool {
button: ControlPanelButton,
protected _context: CanvasToolContext,
) {
- super(id, button, _context.modelService, _context.dialog, _context.router, _context.transitionService, _context.ngZone);
+ super(id, button, _context.modelService, _context.dialog, _context.router, _context.transitionService,
+ _context.ngZone, _context.builderModeService);
this._editModeService = _context.editModeService;
this.actionMode = _context.actionMode;
this.actionsMasterDetail = _context.actionsMasterDetail;
- this.builderModeService = _context.builderModeService;
this._translateService = _context.translateService;
this.hotkeys.push(new Hotkey('Escape', false, false, false, () => {
this.closeContextMenu();
@@ -149,7 +147,7 @@ export abstract class CanvasTool extends CanvasListenerTool {
return new ContextMenu(
[
new EditPlaceMenuItem(place, this, this._translateService),
- new DeletePlaceMenuItem(place, this, this._translateService)
+ ...(!this._builderModeService.readOnly ? [new DeletePlaceMenuItem(place, this, this._translateService)] : [])
],
this.windowMousePosition(event)
);
@@ -159,10 +157,10 @@ export abstract class CanvasTool extends CanvasListenerTool {
return new ContextMenu(
[
new EditTransitionMenuItem(transition, this, this._translateService),
- new EditFormMenuItem(transition, this, this._translateService),
+ ...(this._builderModeService.readOnly && !transition.hasForm() ? [] : [new EditFormMenuItem(transition, this, this._translateService)]),
new EditTransitionPermissionsMenuItem(transition, this, this._translateService),
new EditTransitionActionsMenuItem(transition, this, this._translateService),
- new DeleteTransitionMenuItem(transition, this, this._translateService)
+ ...(!this._builderModeService.readOnly ? [new DeleteTransitionMenuItem(transition, this, this._translateService)] : [])
],
this.windowMousePosition(event)
)
@@ -175,10 +173,12 @@ export abstract class CanvasTool extends CanvasListenerTool {
const items = [];
items.push(new EditArcMenuItem(arc, this, this._translateService));
- if (breakPointIndex !== undefined) {
+ if (breakPointIndex !== undefined && !this._builderModeService.readOnly) {
items.push(new DeleteBreakpointMenuItem(arc, breakPointIndex, this, this._translateService));
}
- items.push(new DeleteArcMenuItem(arc, this, this._translateService));
+ if (!this._builderModeService.readOnly) {
+ items.push(new DeleteArcMenuItem(arc, this, this._translateService));
+ }
return new ContextMenu(
items,
diff --git a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/grid-tool.ts b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/grid-tool.ts
index 60556957e..b52a39552 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/grid-tool.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/edit-mode/services/modes/grid-tool.ts
@@ -23,6 +23,7 @@ export class GridTool extends CanvasTool {
onClick(): void {
super.onClick();
this.editModeService.canvasService.gridOnOff();
+ this.editModeService.gridChanged$.next();
let newIcon = GridTool.ICON_OFF;
let newTooltip = this._translateService.instant('builder.modeler.edit-mode.services.showGrid');
if (this.editModeService.canvasService.gridConfiguration.enabled) {
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 19a33b3d9..fd7f7ed6c 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
@@ -32,6 +32,15 @@ export class SelectTool extends CanvasTool {
private lastDragPoint: DOMPoint;
private arcPointIndex: number;
private lastClickTimestamp: number = 0;
+ private readonly additionalHotKeys: Array = [
+ new Hotkey('c', true, false, false, this.copyElements.bind(this)),
+ new Hotkey('v', true, false, false, this.pasteElements.bind(this)),
+ new Hotkey('d', true, false, false, this.duplicateElements.bind(this)),
+ new Hotkey('a', true, false, false, this.selectAll.bind(this)),
+ new Hotkey('z', true, false, true, this.redo.bind(this)),
+ new Hotkey('z', true, false, false, this.undo.bind(this)),
+ new Hotkey('Delete', false, false, false, this.deleteSelected.bind(this))
+ ];
constructor(context: CanvasToolContext) {
super(
@@ -44,13 +53,13 @@ export class SelectTool extends CanvasTool {
);
this._selectedElements = new CanvasElementCollection();
this._clipboardElements = new CanvasElementCollection();
- this.hotkeys.push(new Hotkey('c', true, false, false, this.copyElements.bind(this)));
- this.hotkeys.push(new Hotkey('v', true, false, false, this.pasteElements.bind(this)));
- this.hotkeys.push(new Hotkey('d', true, false, false, this.duplicateElements.bind(this)));
- this.hotkeys.push(new Hotkey('a', true, false, false, this.selectAll.bind(this)));
- this.hotkeys.push(new Hotkey('z', true, false, true, this.redo.bind(this)));
- this.hotkeys.push(new Hotkey('z', true, false, false, this.undo.bind(this)));
- this.hotkeys.push(new Hotkey('Delete', false, false, false, this.deleteSelected.bind(this)));
+ this._builderModeService.readOnly$.subscribe((readOnly) => {
+ if (!readOnly) {
+ this.hotkeys.push(...this.additionalHotKeys);
+ } else if (this.hotkeys.includes(this.additionalHotKeys[0])) {
+ super.initializeHotkeys();
+ }
+ });
}
bind(): void {
@@ -218,7 +227,7 @@ export class SelectTool extends CanvasTool {
super.onTransitionUp(event, transition);
if (this.isDoubleClick(event) && this.isLeftButtonClick(event)) {
this.transitionService.id = transition.id;
- this.builderModeService.mode = BuilderMode.FORM_BUILDER;
+ this._builderModeService.mode = BuilderMode.FORM_BUILDER;
return;
}
this.lastClickTimestamp = event.timeStamp;
@@ -280,7 +289,7 @@ export class SelectTool extends CanvasTool {
}
private onMove(event: PointerEvent): void {
- if (!this.isLeftButton(event) || this.ctrlDown) {
+ if (!this.isLeftButton(event) || this.ctrlDown || this._builderModeService.readOnly) {
return;
}
if (!!this.lasso) {
@@ -462,6 +471,9 @@ export class SelectTool extends CanvasTool {
}
moveSelected(): void {
+ if (this._builderModeService.readOnly) {
+ return;
+ }
this.selectedElements.places.forEach(p => this.editModeService.movePlace(p));
this.selectedElements.transitions.forEach(t => this.editModeService.moveTransition(t));
this.selectedElements.arcs.forEach(a => {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/history-mode/history-mode.component.scss b/projects/netgrif-components/src/lib/builder/modeler/history-mode/history-mode.component.scss
index 848add9e9..230044206 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/history-mode/history-mode.component.scss
+++ b/projects/netgrif-components/src/lib/builder/modeler/history-mode/history-mode.component.scss
@@ -1,3 +1,7 @@
+:host {
+ height: 100%;
+}
+
.container {
display: flex;
width: 100%;
diff --git a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/languages.component.html b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/languages.component.html
index 6a01af5f0..bb9b990dd 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/languages.component.html
+++ b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/languages.component.html
@@ -9,7 +9,8 @@
-
+
add
diff --git a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/languages.component.ts b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/languages.component.ts
index ad2b04f76..9d95dfd01 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/languages.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/languages.component.ts
@@ -10,6 +10,7 @@ import {I18nControlService} from "../i18n-control.service";
import {I18nModeService} from "../i18n-mode.service";
import {LanguageIconsService} from "@netgrif/components-core";
import {TranslateService} from "@ngx-translate/core";
+import {BuilderModeService} from "../../../services/builder-mode.service";
@Component({
selector: 'nc-builder-languages',
@@ -30,7 +31,8 @@ export class LanguagesComponent implements OnInit, OnDestroy {
protected _historyService: HistoryService,
protected _languageSelect: LanguageSelectService,
protected _languageIconsService: LanguageIconsService,
- protected _translateService: TranslateService) {
+ protected _translateService: TranslateService,
+ protected _builderModeService: BuilderModeService) {
this.localeList = Object.keys(this._languageIconsService.languageIcons)
.filter(key => key !== 'xx' && key !== undefined)
.map(key => {
@@ -38,6 +40,11 @@ export class LanguagesComponent implements OnInit, OnDestroy {
const locale = Locales.list.find(l => l.languageCode === key);
return new Locale(key, lang.languageName, key, locale?.country ?? key, locale?.countryCode ?? key);
});
+ if (this._builderModeService.readOnly) {
+ this.newLocaleFormControl.disable();
+ } else {
+ this.newLocaleFormControl.enable();
+ }
}
ngOnInit(): void {
@@ -107,6 +114,7 @@ export class LanguagesComponent implements OnInit, OnDestroy {
}
selectLocale(locale) {
+ this.i18nControlService.updateI18ns();
this._languageSelect.locale = locale;
this.i18nModeService.activate(this.i18nModeService.translationsTool);
}
diff --git a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/progress/progress.component.html b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/progress/progress.component.html
index 2846b239b..6e5a23d5c 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/progress/progress.component.html
+++ b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/progress/progress.component.html
@@ -1,7 +1,8 @@
{{locale.prettyName}}
-
+
delete
diff --git a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/progress/progress.component.ts b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/progress/progress.component.ts
index 72ade6583..8e48a2862 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/progress/progress.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/languages/progress/progress.component.ts
@@ -1,6 +1,7 @@
import {Component, EventEmitter, Input, Output} from '@angular/core';
import {Locale} from '../../classes/locale';
import {I18nControlService} from '../../i18n-control.service';
+import {BuilderModeService} from "../../../../services/builder-mode.service";
@Component({
selector: 'nc-builder-progress',
@@ -13,7 +14,7 @@ export class ProgressComponent {
@Output() deleteLocale = new EventEmitter();
@Output() selectLocale = new EventEmitter();
- constructor(private i18nControlService: I18nControlService) {
+ constructor(private i18nControlService: I18nControlService, protected _builderModeService: BuilderModeService) {
}
removeLocale() {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/i18n-field/i18n-field.component.html b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/i18n-field/i18n-field.component.html
index fb670886f..70e04c70a 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/i18n-field/i18n-field.component.html
+++ b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/i18n-field/i18n-field.component.html
@@ -13,6 +13,6 @@
{{ 'builder.modeler.i18n-mode.translation' | translate }}
-
+
diff --git a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/i18n-field/i18n-field.component.ts b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/i18n-field/i18n-field.component.ts
index bea6f535d..c068c299b 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/i18n-field/i18n-field.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/i18n-field/i18n-field.component.ts
@@ -6,6 +6,7 @@ import {I18nControlService} from "../../i18n-control.service";
import {MatFormField, MatInput, MatLabel} from "@angular/material/input";
import {FlexLayoutModule} from "@ngbracket/ngx-layout";
import {TranslateModule} from "@ngx-translate/core";
+import {BuilderModeService} from "../../../../services/builder-mode.service";
@Component({
selector: 'nc-builder-i18n-field',
@@ -21,7 +22,7 @@ export class I18nFieldComponent implements OnInit {
private _translationField: I18nString;
private _translation: I18nTranslations;
- constructor(protected _i18nModeService: I18nControlService) {
+ constructor(protected _i18nModeService: I18nControlService, protected _builderModeService: BuilderModeService) {
}
ngOnInit(): void {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/translations.component.ts b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/translations.component.ts
index 90dd278f7..a81ff66b3 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/translations.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/i18n-mode/translations/translations.component.ts
@@ -85,6 +85,7 @@ export class TranslationsComponent implements OnInit, OnDestroy {
}
selectLocale() {
+ this.i18nService.updateI18ns();
this._translation = this.modelService.model.getI18n(this.locale?.languageCode);
}
diff --git a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.html b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.html
index a8edb0bed..29f5ab5c8 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.html
+++ b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.html
@@ -15,7 +15,7 @@
{{ 'builder.modeler.role-mode.title' | translate }}
-
+
@@ -24,7 +24,7 @@
-
+
{{ 'builder.modeler.role-mode.isGlobal' | translate }}
diff --git a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.scss b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.scss
index 4101d960b..7d5df62b6 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.scss
+++ b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.scss
@@ -3,7 +3,8 @@
}
.height-fix {
- height: calc(100vh - 42px);
+ min-height: 100%;
+ overflow: visible;
}
.full-width {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.ts b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.ts
index 0d1f093f2..aaf810891 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-detail/role-detail.component.ts
@@ -33,23 +33,33 @@ export class RoleDetailComponent implements OnDestroy {
protected _builderModeService: BuilderModeService,
protected _translateService: TranslateService
) {
+ this.roleIdForm = new FormControl('', [
+ Validators.required,
+ this.validUnique(),
+ ]);
this._masterService.getSelected$().subscribe(item => {
this.saveChange();
if (item === undefined) {
return;
}
this.role = new ChangedRole(item.clone());
+ this.disableRoleIdFormControlOnReadOnly();
});
- this.roleIdForm = new FormControl('', [
- Validators.required,
- this.validUnique(),
- ]);
+ this.disableRoleIdFormControlOnReadOnly();
}
ngOnDestroy(): void {
this.saveChange();
}
+ private disableRoleIdFormControlOnReadOnly() {
+ if (this._builderModeService.readOnly) {
+ this.roleIdForm.disable();
+ } else {
+ this.roleIdForm.enable();
+ }
+ }
+
private saveChange(): void {
if (!this.shouldSave) {
return;
diff --git a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-master-item/role-master-item.component.html b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-master-item/role-master-item.component.html
index cba76fd24..f57af34ad 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-master-item/role-master-item.component.html
+++ b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-master-item/role-master-item.component.html
@@ -8,13 +8,13 @@
{{ item.title.value }}
-
+
delete
-
+
add_to_photos
diff --git a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-master-item/role-master-item.component.ts b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-master-item/role-master-item.component.ts
index bde799074..3e95868fd 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-master-item/role-master-item.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-master-item/role-master-item.component.ts
@@ -4,6 +4,7 @@ import {Role} from '@netgrif/petriflow';
import {DialogDeleteComponent} from '../../../dialogs/dialog-delete/dialog-delete.component';
import {AbstractMasterDetailService} from '../../components/master-detail/abstract-master-detail.service';
import {MASTER_ITEM, MASTER_SERVICE} from '../../components/master-detail/main-master-item/master-injection-tokens';
+import {BuilderModeService} from "../../../services/builder-mode.service";
@Component({
selector: 'nc-builder-role-master-item',
@@ -15,7 +16,8 @@ export class RoleMasterItemComponent {
constructor(@Inject(MASTER_ITEM) public item: Role,
@Inject(MASTER_SERVICE) protected _service: AbstractMasterDetailService,
- protected _dialog: MatDialog) {
+ protected _dialog: MatDialog,
+ protected _builderModeService: BuilderModeService) {
}
onDelete(event: MouseEvent, item: Role): void {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.html b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.html
index 5f90fa7f6..b6732afd5 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.html
+++ b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.html
@@ -1,10 +1,11 @@
-
diff --git a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.scss b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.scss
index 99f4eeaa1..ce9bcad49 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.scss
+++ b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.scss
@@ -1,3 +1,7 @@
+:host {
+ height: 100%;
+}
+
.nab-role-mode-wrapper {
height: 100%;
overflow: auto;
diff --git a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.spec.ts b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.spec.ts
index 86ebb2fa4..33326a932 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.spec.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.spec.ts
@@ -5,6 +5,7 @@ import {RoleModeComponent} from './role-mode.component';
import {TranslateService} from "@ngx-translate/core";
import {HttpClientTestingModule} from "@angular/common/http/testing";
import {TranslateLibModule} from "@netgrif/components-core";
+import {BuilderModeService} from "../../services/builder-mode.service";
describe('RoleModeComponent', () => {
beforeEach(() => {
@@ -14,8 +15,10 @@ describe('RoleModeComponent', () => {
HttpClientTestingModule,
],
declarations: [RoleModeComponent],
- providers: [{provide: RoleMasterDetailService, useValue: {}},
- {provide: TranslateService, useValue: { instant: (key: string) => `translated-${key}` }}
+ providers: [
+ {provide: RoleMasterDetailService, useValue: {}},
+ {provide: TranslateService, useValue: { instant: (key: string) => `translated-${key}` }},
+ BuilderModeService
],
schemas: [NO_ERRORS_SCHEMA],
});
diff --git a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.ts b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.ts
index de75df175..5d331f6c2 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/role-mode/role-mode.component.ts
@@ -3,6 +3,7 @@ import {Component} from '@angular/core';
import {RoleDetailComponent} from './role-detail/role-detail.component';
import {RoleMasterDetailService} from './role-master-detail.service';
import {RoleMasterItemComponent} from './role-master-item/role-master-item.component';
+import {BuilderModeService} from "../../services/builder-mode.service";
@Component({
selector: 'nc-builder-role-mode',
@@ -11,7 +12,7 @@ import {RoleMasterItemComponent} from './role-master-item/role-master-item.compo
})
export class RoleModeComponent {
- constructor(protected _masterService: RoleMasterDetailService ) {
+ constructor(protected _masterService: RoleMasterDetailService, protected _builderModeService: BuilderModeService) {
}
get detailComponent(): ComponentType {
diff --git a/projects/netgrif-components/src/lib/builder/modeler/services/canvas/canvas-listener-tool.ts b/projects/netgrif-components/src/lib/builder/modeler/services/canvas/canvas-listener-tool.ts
index 1dfb58f54..b966b351f 100644
--- a/projects/netgrif-components/src/lib/builder/modeler/services/canvas/canvas-listener-tool.ts
+++ b/projects/netgrif-components/src/lib/builder/modeler/services/canvas/canvas-listener-tool.ts
@@ -1,5 +1,5 @@
import {ComponentType} from '@angular/cdk/overlay';
-import {NgZone} from '@angular/core';
+import {Injector, NgZone} from '@angular/core';
import {MatDialog} from '@angular/material/dialog';
import {Router} from '@angular/router';
import {PetriNet} from '@netgrif/petriflow';
@@ -22,6 +22,7 @@ import {MouseListener} from './listeners/mouse-listener';
import {PlaceListener} from './listeners/place-listener';
import {TransitionListener} from './listeners/transition-listener';
import {ToolComponent} from "../../control-panel/tools/tool-component/tool.component";
+import { BuilderModeService } from "../../../services/builder-mode.service";
export abstract class CanvasListenerTool extends Tool implements MouseListener, PlaceListener, TransitionListener, ArcListener, KeyListener {
@@ -31,8 +32,9 @@ export abstract class CanvasListenerTool extends Tool implements MouseListener,
private readonly _dialog: MatDialog;
private readonly _router: Router;
private readonly _transitionService: SelectedTransitionService;
- private readonly _hotkeys: Array;
+ protected _hotkeys: Array;
private _mouseDown: PointerEvent;
+ public readonly _builderModeService: BuilderModeService;
protected constructor(
id: string,
@@ -41,13 +43,19 @@ export abstract class CanvasListenerTool extends Tool implements MouseListener,
dialog: MatDialog,
router: Router,
transitionService: SelectedTransitionService,
- private readonly _ngZone?: NgZone
+ private readonly _ngZone?: NgZone,
+ builderModeService?: BuilderModeService
) {
super(id, button, ToolComponent);
this._modelService = modelService;
this._dialog = dialog;
this._router = router;
this._transitionService = transitionService;
+ this._builderModeService = builderModeService;
+ this.initializeHotkeys();
+ }
+
+ protected initializeHotkeys() {
this._hotkeys = new Array();
this.hotkeys.push(new Hotkey('+', false, false, false, this.zoom.bind(this, 1)));
this.hotkeys.push(new Hotkey('-', false, false, false, this.zoom.bind(this, -1)));
@@ -365,7 +373,15 @@ export abstract class CanvasListenerTool extends Tool implements MouseListener,
openDialog(dialog: ComponentType, config: any, afterClose?: (value: any) => void): void {
this.beforeDialog();
- this.dialog.open(dialog, config).afterClosed().subscribe(value => {
+ const finalConfig = this._builderModeService
+ ? {
+ ...config,
+ injector: Injector.create({
+ providers: [{provide: BuilderModeService, useValue: this._builderModeService}]
+ })
+ }
+ : config;
+ this.dialog.open(dialog, finalConfig).afterClosed().subscribe(value => {
if (afterClose) {
afterClose(value);
}
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 150424ceb..e5096f5e7 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
@@ -23,7 +23,7 @@ import {BuilderIntegrationService} from "../../services/builder-integration.serv
const baseFilterFactory = (integrationService: BuilderIntegrationService) => {
const caseId = integrationService?.processCase?.stringId ?? "__EMPTY__"
- return {filter: SimpleFilter.fromTaskQuery({case: {id: caseId}, transitionId: ['deploy', 't10', 't11', 't4', 't6', 't9', 'view']})};
+ return {filter: SimpleFilter.fromTaskQuery({case: {id: caseId}, transitionId: integrationService?.allowedTransIds})};
};
const localAllowedNetsFactory = (factory: AllowedNetsServiceFactory) => {
diff --git a/projects/netgrif-components/src/lib/builder/read-only-builder.ts b/projects/netgrif-components/src/lib/builder/read-only-builder.ts
new file mode 100644
index 000000000..b302beed1
--- /dev/null
+++ b/projects/netgrif-components/src/lib/builder/read-only-builder.ts
@@ -0,0 +1,15 @@
+import {Injector} from "@angular/core";
+import {
+ FrontActionDefinition,
+ FrontAction,
+} from '@netgrif/components-core';
+import {BuilderModeService} from "./services/builder-mode.service";
+
+export const readOnlyBuilder: FrontActionDefinition = {
+ call: (injector: Injector, frontAction: FrontAction) => {
+ const builderModeService = injector.get(BuilderModeService);
+ if (!!builderModeService) {
+ builderModeService.readOnly$.next(true);
+ }
+ }
+}
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 9e68cb5a7..f774a4fac 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
@@ -5,20 +5,23 @@ import {
extractFieldValueFromData,
LoadingEmitter,
LoggerService,
+ ProcessRefField,
TaskEventOutcome,
TaskResourceService
} from "@netgrif/components-core";
import {ExportService, PetriNet} from "@netgrif/petriflow";
import {HistoryChange} from "../modeler/services/history/history-change";
import {Observable, of, Subject, Subscription} from 'rxjs';
+import {BuilderModeService} from "./builder-mode.service";
@Injectable()
export class BuilderIntegrationService implements OnDestroy {
protected _isIntegrated: boolean;
protected _processCase: Case;
+ protected _dataField: ProcessRefField;
protected _editTaskId: string;
protected _isAssigned: boolean;
- protected _onlyTaskView: boolean;
+ protected _allowedTransIds: Array = ['deploy', 't10', 't11', 't4', 't6', 't9', 'view'];
protected _reloadCase: Subject;
protected _reloadModes: Subject;
@@ -28,13 +31,13 @@ export class BuilderIntegrationService implements OnDestroy {
constructor(protected _historyService: HistoryService,
protected _taskResourceService: TaskResourceService,
protected _exportService: ExportService,
- protected _log: LoggerService) {
- this._onlyTaskView = true;
+ protected _log: LoggerService,
+ protected _builderModeService: BuilderModeService) {
this._reloadCase = new Subject();
this._reloadModes = new Subject();
this._loading = new LoadingEmitter();
this._historySub = this._historyService.historyChange.subscribe(history => {
- if (this._isIntegrated && this._editTaskId) {
+ if (this._isIntegrated && this._editTaskId && !_builderModeService.readOnly) {
if (!this._isAssigned) {
this._taskResourceService.assignTask(this._editTaskId).subscribe(result => {
if (result.success) {
@@ -69,20 +72,20 @@ export class BuilderIntegrationService implements OnDestroy {
this._processCase = value;
}
- get editTaskId(): string {
- return this._editTaskId;
+ get dataField(): ProcessRefField {
+ return this._dataField;
}
- set editTaskId(value: string) {
- this._editTaskId = value;
+ set dataField(dataField: ProcessRefField) {
+ this._dataField = dataField;
}
- get onlyTaskView(): boolean {
- return this._onlyTaskView;
+ get editTaskId(): string {
+ return this._editTaskId;
}
- set onlyTaskView(value: boolean) {
- this._onlyTaskView = value;
+ set editTaskId(value: string) {
+ this._editTaskId = value;
}
get reloadCase(): Observable {
@@ -105,6 +108,14 @@ export class BuilderIntegrationService implements OnDestroy {
return this._loading.asObservable();
}
+ set allowedTransIds(value: Array) {
+ this._allowedTransIds = value;
+ }
+
+ get allowedTransIds(): Array {
+ return this._allowedTransIds;
+ }
+
public isLoading(): boolean {
return this._loading.value;
}
diff --git a/projects/netgrif-components/src/lib/builder/services/builder-mode.service.ts b/projects/netgrif-components/src/lib/builder/services/builder-mode.service.ts
index 9cb6d8c7c..00dce15e9 100644
--- a/projects/netgrif-components/src/lib/builder/services/builder-mode.service.ts
+++ b/projects/netgrif-components/src/lib/builder/services/builder-mode.service.ts
@@ -17,6 +17,7 @@ export enum BuilderMode {
export class BuilderModeService {
private _mode: BehaviorSubject = new BehaviorSubject(BuilderMode.MODELER);
+ private _readOnly: BehaviorSubject = new BehaviorSubject(false);
public mode$(): Observable {
return this._mode.asObservable();
@@ -29,4 +30,12 @@ export class BuilderModeService {
set mode(value: BuilderMode) {
this._mode.next(value);
}
+
+ get readOnly(): boolean {
+ return this._readOnly.getValue();
+ }
+
+ get readOnly$(): BehaviorSubject {
+ return this._readOnly;
+ }
}
diff --git a/projects/netgrif-components/src/lib/data-fields/process-ref/process-ref-default/process-ref-default.component.ts b/projects/netgrif-components/src/lib/data-fields/process-ref/process-ref-default/process-ref-default.component.ts
index 1f36014ac..0110358a5 100644
--- a/projects/netgrif-components/src/lib/data-fields/process-ref/process-ref-default/process-ref-default.component.ts
+++ b/projects/netgrif-components/src/lib/data-fields/process-ref/process-ref-default/process-ref-default.component.ts
@@ -3,15 +3,15 @@ import {
AbstractProcessRefDefaultComponent,
DATA_FIELD_PORTAL_DATA,
DataFieldPortalData,
- ProcessRefField
+ ProcessRefField,
} from '@netgrif/components-core';
import {BuilderComponent} from '../../../builder/builder.component';
import {Subscription} from 'rxjs';
@Component({
- selector: 'nc-process-ref-default',
- templateUrl: './process-ref-default.component.html',
- styleUrls: ['./process-ref-default.component.scss']
+ selector: 'nc-process-ref-default',
+ templateUrl: './process-ref-default.component.html',
+ styleUrls: ['./process-ref-default.component.scss']
})
export class ProcessRefDefaultComponent extends AbstractProcessRefDefaultComponent implements OnInit, AfterViewInit, OnDestroy {
@@ -20,7 +20,7 @@ export class ProcessRefDefaultComponent extends AbstractProcessRefDefaultCompone
constructor(injector: Injector,
@Optional() @Inject(DATA_FIELD_PORTAL_DATA) dataFieldPortalData: DataFieldPortalData) {
- super(injector, BuilderComponent, dataFieldPortalData)
+ super(injector, BuilderComponent, dataFieldPortalData);
}
ngOnInit() {