diff --git a/.gitignore b/.gitignore index 3e26ea5..57fc171 100644 --- a/.gitignore +++ b/.gitignore @@ -51,6 +51,7 @@ Thumbs.db .scannerwork/ out/ package-lock.json +pnpm-lock.yaml ### JetBrains template # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 diff --git a/nae.json b/nae.json index 8df959b..f6b0780 100644 --- a/nae.json +++ b/nae.json @@ -105,7 +105,7 @@ "urls": { "netgrif": "https://netgrif.com", "bpmn2pn": "https://bpmn2pn.netgrif.cloud/bpmn2pn/", - "engine": "https://demo.netgrif.com/", + "engine": "https://etask.netgrif.cloud/", "youtube": "https://www.youtube.com/channel/UCNfqgnjskMMpy7QvOOKhKgw", "github": "https://github.com/netgrif", "issues": "https://github.com/netgrif/application-builder/issues" diff --git a/package.json b/package.json index 9634962..b9b9f25 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@netgrif/application-builder", - "version": "2.0.0", + "version": "2.1.0-RC.8", "description": "Netgrif Application Builder for building, configuring and modeling applications for Application Engine.", "homepage": "https://builder.netgrif.com", "license": "SEE LICENSE IN LICENSE FILE", @@ -58,9 +58,9 @@ "@mdi/font": "^7.4.47", "@netgrif/components": "7.0.0-beta.1", "@netgrif/components-core": "7.0.0-beta.1", - "@netgrif/petri.svg": "1.1.0", - "@netgrif/petriflow": "2.2.0", - "@netgrif/petriflow.svg": "1.1.0", + "@netgrif/petri.svg": "1.1.1", + "@netgrif/petriflow": "2.2.2", + "@netgrif/petriflow.svg": "1.1.1", "@ngbracket/ngx-layout": "^17.0.1", "@ngx-translate/core": "~15.0.0", "@ngx-translate/http-loader": "~8.0.0", diff --git a/src/app/app-builder-view.service.ts b/src/app/app-builder-view.service.ts index 573ea16..50a970e 100644 --- a/src/app/app-builder-view.service.ts +++ b/src/app/app-builder-view.service.ts @@ -1,6 +1,6 @@ -import {ConfigurationService, LoggerService, ViewService} from '@netgrif/components-core'; -import {Router} from '@angular/router'; import {Injectable} from '@angular/core'; +import {Router} from '@angular/router'; +import {ConfigurationService, LoggerService, ViewService} from '@netgrif/components-core'; @Injectable({ providedIn: 'root', diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index d1232dd..24b0a6c 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -1,6 +1,6 @@ -import { NgModule } from '@angular/core'; -import {RouterModule, Routes} from '@angular/router'; import {CommonModule} from '@angular/common'; +import {NgModule} from '@angular/core'; +import {RouterModule, Routes} from '@angular/router'; const routes: Routes = []; diff --git a/src/app/app.component.html b/src/app/app.component.html index 2ff3b60..5c807f6 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -11,7 +11,7 @@ text="{{tutorial.demo.text}}" stepPosition="{{tutorial.demo.position}}" (click)="openInTab(config.services.urls.engine)" - matTooltip="Netgrif Demo" matTooltipPosition="right"> + matTooltip="Netgrif eTask" matTooltipPosition="right"> play_arrow help + + 2.1.0 + { beforeEach(waitForAsync(() => { diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 693c837..fa6d28d 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -2,17 +2,17 @@ import {AfterViewInit, Component, HostListener} from '@angular/core'; import {MatDialog} from '@angular/material/dialog'; import {Router} from '@angular/router'; import {NetgrifApplicationEngine} from '@netgrif/components-core/'; +import {JoyrideService} from 'ngx-joyride'; import {AppBuilderConfigurationService} from './app-builder-configuration.service'; import {DialogConfirmComponent} from './dialogs/dialog-confirm/dialog-confirm.component'; import { - DialogLocalStorageModelComponent, + DialogLocalStorageModelComponent, } from './dialogs/dialog-local-storage-model/dialog-local-storage-model.component'; import {ModelImportService} from './modeler/model-import-service'; import {ModelerConfig} from './modeler/modeler-config'; import {MortgageService} from './modeler/mortgage.service'; import {ModelService} from './modeler/services/model/model.service'; import {TutorialService} from './tutorial/tutorial-service'; -import {JoyrideService} from 'ngx-joyride'; @Component({ selector: 'nab-root', diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 06daff8..3028f60 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,49 +1,50 @@ -import {BrowserModule, DomSanitizer} from '@angular/platform-browser'; +import {CommonModule, NgOptimizedImage} from '@angular/common'; import {NgModule} from '@angular/core'; -import {AppComponent} from './app.component'; +import {MAT_FORM_FIELD_DEFAULT_OPTIONS} from '@angular/material/form-field'; +import {MatIconRegistry} from '@angular/material/icon'; +import {MatPaginatorIntl} from '@angular/material/paginator'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {BrowserModule, DomSanitizer} from '@angular/platform-browser'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; -import {MaterialImportModule} from './material-import/material-import.module'; -import {FormBuilderModule} from './form-builder/form-builder.module'; import {RouterModule, Routes} from '@angular/router'; -import {FormBuilderComponent} from './form-builder/form-builder.component'; -import {ModelerComponent} from './modeler/modeler.component'; -import {ModelerModule} from './modeler/modeler.module'; -import {EditModeComponent} from './modeler/edit-mode/edit-mode.component'; -import {DataModeComponent} from './modeler/data-mode/data-mode.component'; -import {RoleModeComponent} from './modeler/role-mode/role-mode.component'; -import {ActionsModeComponent} from './modeler/actions-mode/actions-mode.component'; -import {MatIconRegistry} from '@angular/material/icon'; +import {TaskContentComponentModule} from '@netgrif/components'; +import {AuthenticationMethodService, ConfigurationService, NullAuthenticationService} from '@netgrif/components-core'; +import {ExportService, ImportService} from '@netgrif/petriflow'; +import {JoyrideModule} from 'ngx-joyride'; import {environment} from '../environments/environment'; +import {AppBuilderConfigurationService} from './app-builder-configuration.service'; +import {AppRoutingModule} from './app-routing.module'; +import {AppComponent} from './app.component'; +import {DialogArcEditComponent} from './dialogs/dialog-arc-edit/dialog-arc-edit.component'; +import {DialogChangeDataComponent} from './dialogs/dialog-change-data/dialog-change-data.component'; import {DialogConfirmComponent} from './dialogs/dialog-confirm/dialog-confirm.component'; -import {DialogRefactorComponent} from './dialogs/dialog-refactor/dialog-refactor.component'; -import {DialogErrorsComponent} from './dialogs/dialog-errors/dialog-errors.component'; -import {ExportService, ImportService} from '@netgrif/petriflow'; -import {SelectedTransitionService} from './modeler/selected-transition.service'; -import {I18nModeComponent} from './modeler/i18n-mode/i18n-mode.component'; import {DialogDeadNetComponent} from './dialogs/dialog-dead-net/dialog-dead-net.component'; -import {AppRoutingModule} from './app-routing.module'; -import {DialogPlaceRefDeleteComponent} from './dialogs/dialog-place-ref-delete/dialog-place-ref-delete.component'; -import {DialogPlaceEditComponent} from './dialogs/dialog-place-edit/dialog-place-edit.component'; import {DialogDeleteModelComponent} from './dialogs/dialog-delete-model/dialog-delete-model.component'; -import {DialogArcEditComponent} from './dialogs/dialog-arc-edit/dialog-arc-edit.component'; -import {DialogTransitionEditComponent} from './dialogs/dialog-transition-edit/dialog-transition-edit.component'; -import {SimulationModeComponent} from './modeler/simulation-mode/simulation-mode.component'; +import {DialogErrorsComponent} from './dialogs/dialog-errors/dialog-errors.component'; import { - DialogLocalStorageModelComponent + DialogLocalStorageModelComponent, } from './dialogs/dialog-local-storage-model/dialog-local-storage-model.component'; -import {HistoryModeComponent} from './modeler/history-mode/history-mode.component'; -import {DialogChangeDataComponent} from './dialogs/dialog-change-data/dialog-change-data.component'; +import {DialogMarkingChangeComponent} from './dialogs/dialog-marking-change/dialog-marking-change.component'; import {DialogModelEditComponent} from './dialogs/dialog-model-edit/dialog-model-edit.component'; -import {MaterialIconPickerComponent} from './modeler/components/material-icon-picker/material-icon-picker.component'; -import {CommonModule, NgOptimizedImage} from '@angular/common'; -import {MAT_FORM_FIELD_DEFAULT_OPTIONS} from '@angular/material/form-field'; -import {TaskContentComponentModule} from '@netgrif/components'; -import {JoyrideModule} from 'ngx-joyride'; -import {AuthenticationMethodService, ConfigurationService, NullAuthenticationService} from '@netgrif/components-core'; -import {AppBuilderConfigurationService} from './app-builder-configuration.service'; -import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; -import {MatPaginatorIntl} from '@angular/material/paginator'; +import {DialogPlaceEditComponent} from './dialogs/dialog-place-edit/dialog-place-edit.component'; +import {DialogPlaceRefDeleteComponent} from './dialogs/dialog-place-ref-delete/dialog-place-ref-delete.component'; +import {DialogRefactorComponent} from './dialogs/dialog-refactor/dialog-refactor.component'; +import {DialogTransitionEditComponent} from './dialogs/dialog-transition-edit/dialog-transition-edit.component'; +import {FormBuilderComponent} from './form-builder/form-builder.component'; +import {FormBuilderModule} from './form-builder/form-builder.module'; +import {MaterialImportModule} from './material-import/material-import.module'; +import {ActionsModeComponent} from './modeler/actions-mode/actions-mode.component'; import {BuilderPaginatorIntl} from './modeler/components/master-detail/main-master/builder-paginator-inpl'; +import {MaterialIconPickerComponent} from './modeler/components/material-icon-picker/material-icon-picker.component'; +import {DataModeComponent} from './modeler/data-mode/data-mode.component'; +import {EditModeComponent} from './modeler/edit-mode/edit-mode.component'; +import {HistoryModeComponent} from './modeler/history-mode/history-mode.component'; +import {I18nModeComponent} from './modeler/i18n-mode/i18n-mode.component'; +import {ModelerComponent} from './modeler/modeler.component'; +import {ModelerModule} from './modeler/modeler.module'; +import {RoleModeComponent} from './modeler/role-mode/role-mode.component'; +import {SelectedTransitionService} from './modeler/selected-transition.service'; +import {SimulationModeComponent} from './modeler/simulation-mode/simulation-mode.component'; const appRoutes: Routes = [ { @@ -77,6 +78,7 @@ const appRoutes: Routes = [ DialogModelEditComponent, MaterialIconPickerComponent, DialogLocalStorageModelComponent, + DialogMarkingChangeComponent ], imports: [ BrowserModule, diff --git a/src/app/cdk-import/cdk-import.module.ts b/src/app/cdk-import/cdk-import.module.ts index 7aa4037..c0a7924 100644 --- a/src/app/cdk-import/cdk-import.module.ts +++ b/src/app/cdk-import/cdk-import.module.ts @@ -1,6 +1,6 @@ -import {NgModule} from '@angular/core'; +import {CdkPortalOutlet} from '@angular/cdk/portal'; import {CdkTreeModule} from '@angular/cdk/tree'; -import {CdkPortal, CdkPortalOutlet} from '@angular/cdk/portal'; +import {NgModule} from '@angular/core'; @NgModule({ declarations: [], diff --git a/src/app/dialogs/dialog-arc-attach/dialog-arc-attach.component.ts b/src/app/dialogs/dialog-arc-attach/dialog-arc-attach.component.ts index 4e6fc8e..303d342 100644 --- a/src/app/dialogs/dialog-arc-attach/dialog-arc-attach.component.ts +++ b/src/app/dialogs/dialog-arc-attach/dialog-arc-attach.component.ts @@ -1,8 +1,8 @@ import {Component, Inject} from '@angular/core'; -import {DataVariable, Place} from '@netgrif/petriflow'; import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {ModelerConfig} from '../../modeler/modeler-config'; +import {DataVariable, Place} from '@netgrif/petriflow'; import {ReferenceDialogData} from '../../modeler/edit-mode/domain/reference-dialog-data'; +import {ModelerConfig} from '../../modeler/modeler-config'; import {ModelService} from '../../modeler/services/model/model.service'; @Component({ diff --git a/src/app/dialogs/dialog-arc-edit/dialog-arc-edit.component.ts b/src/app/dialogs/dialog-arc-edit/dialog-arc-edit.component.ts index 29ac420..8916304 100644 --- a/src/app/dialogs/dialog-arc-edit/dialog-arc-edit.component.ts +++ b/src/app/dialogs/dialog-arc-edit/dialog-arc-edit.component.ts @@ -1,11 +1,11 @@ import {Component, Inject, OnInit} from '@angular/core'; -import {ModelService} from '../../modeler/services/model/model.service'; -import {Arc, DataType, TransitionPlaceArc, XmlArcType} from '@netgrif/petriflow'; -import {MAT_DIALOG_DATA} from '@angular/material/dialog'; -import {ChangedArc} from './changed-arc'; import {FormControl, ValidatorFn, Validators} from '@angular/forms'; +import {MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {Arc, DataType, TransitionPlaceArc, XmlArcType} from '@netgrif/petriflow'; import {Observable} from 'rxjs'; import {map, startWith} from 'rxjs/operators'; +import {ModelService} from '../../modeler/services/model/model.service'; +import {ChangedArc} from './changed-arc'; export interface ArcEditData { arcId: string; diff --git a/src/app/dialogs/dialog-change-data/dialog-change-data.component.html b/src/app/dialogs/dialog-change-data/dialog-change-data.component.html index 74ff097..88e053b 100644 --- a/src/app/dialogs/dialog-change-data/dialog-change-data.component.html +++ b/src/app/dialogs/dialog-change-data/dialog-change-data.component.html @@ -1,13 +1,15 @@ -

Change referenced data values

+

Change referenced data value{{dataSet.length > 1 ? 's' : ''}}

{{data.id}} - + + Value is required + Value can not be a negative number No referenced data found - diff --git a/src/app/dialogs/dialog-change-data/dialog-change-data.component.ts b/src/app/dialogs/dialog-change-data/dialog-change-data.component.ts index 4d2a21f..580e76a 100644 --- a/src/app/dialogs/dialog-change-data/dialog-change-data.component.ts +++ b/src/app/dialogs/dialog-change-data/dialog-change-data.component.ts @@ -1,4 +1,5 @@ -import {Component, Inject, OnInit} from '@angular/core'; +import {Component, Inject} from '@angular/core'; +import {FormControl, ValidatorFn, Validators} from '@angular/forms'; import {MAT_DIALOG_DATA} from '@angular/material/dialog'; export interface DataSet { @@ -18,11 +19,26 @@ export interface Data { export class DialogChangeDataComponent { public dataSet: Array; + public valueCtrl: FormControl; constructor( @Inject(MAT_DIALOG_DATA) public data: DataSet, ) { this.dataSet = new Array(); data.dataSet.forEach((value, id) => this.dataSet.push({id, value})); + this.valueCtrl = new FormControl('', [ + Validators.required, + this.validValue() + ]); + } + + private validValue(): ValidatorFn { + return (fc: FormControl): { [key: string]: any } | null => { + const value = Math.floor(fc.value as number); + if (isFinite(value) && value === fc.value as number && value >= 0) { + return null; + } + return ({validMultiplicity: true}) + }; } } diff --git a/src/app/dialogs/dialog-delete-model/dialog-delete-model.component.spec.ts b/src/app/dialogs/dialog-delete-model/dialog-delete-model.component.spec.ts index 5924233..f91d4e7 100644 --- a/src/app/dialogs/dialog-delete-model/dialog-delete-model.component.spec.ts +++ b/src/app/dialogs/dialog-delete-model/dialog-delete-model.component.spec.ts @@ -1,6 +1,6 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; -import { DialogDeleteModelComponent } from './dialog-delete-model.component'; +import {DialogDeleteModelComponent} from './dialog-delete-model.component'; describe('DialogDeleteModelComponent', () => { let component: DialogDeleteModelComponent; diff --git a/src/app/dialogs/dialog-delete-model/dialog-delete-model.component.ts b/src/app/dialogs/dialog-delete-model/dialog-delete-model.component.ts index b624604..b9202e1 100644 --- a/src/app/dialogs/dialog-delete-model/dialog-delete-model.component.ts +++ b/src/app/dialogs/dialog-delete-model/dialog-delete-model.component.ts @@ -1,4 +1,4 @@ -import { Component, OnInit } from '@angular/core'; +import {Component} from '@angular/core'; @Component({ selector: 'nab-dialog-delete-model', diff --git a/src/app/dialogs/dialog-errors/dialog-errors.component.ts b/src/app/dialogs/dialog-errors/dialog-errors.component.ts index 5186f44..5faf929 100644 --- a/src/app/dialogs/dialog-errors/dialog-errors.component.ts +++ b/src/app/dialogs/dialog-errors/dialog-errors.component.ts @@ -1,4 +1,4 @@ -import {Component, Inject, OnInit} from '@angular/core'; +import {Component, Inject} from '@angular/core'; import {MAT_DIALOG_DATA} from '@angular/material/dialog'; export interface DialogErrorsData { diff --git a/src/app/dialogs/dialog-local-storage-model/dialog-local-storage-model.component.spec.ts b/src/app/dialogs/dialog-local-storage-model/dialog-local-storage-model.component.spec.ts index c5dc7bd..3cc6df0 100644 --- a/src/app/dialogs/dialog-local-storage-model/dialog-local-storage-model.component.spec.ts +++ b/src/app/dialogs/dialog-local-storage-model/dialog-local-storage-model.component.spec.ts @@ -1,6 +1,6 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; -import { DialogLocalStorageModelComponent } from './dialog-local-storage-model.component'; +import {DialogLocalStorageModelComponent} from './dialog-local-storage-model.component'; describe('DialogLocalStorageModelComponent', () => { let component: DialogLocalStorageModelComponent; diff --git a/src/app/dialogs/dialog-local-storage-model/dialog-local-storage-model.component.ts b/src/app/dialogs/dialog-local-storage-model/dialog-local-storage-model.component.ts index 093bf7f..f5ddbc2 100644 --- a/src/app/dialogs/dialog-local-storage-model/dialog-local-storage-model.component.ts +++ b/src/app/dialogs/dialog-local-storage-model/dialog-local-storage-model.component.ts @@ -1,4 +1,4 @@ -import {Component, Inject, OnInit} from '@angular/core'; +import {Component, Inject} from '@angular/core'; import {MAT_DIALOG_DATA} from '@angular/material/dialog'; export interface DialogData { diff --git a/src/app/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts b/src/app/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts index e3beab2..f3c5761 100644 --- a/src/app/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts +++ b/src/app/dialogs/dialog-manage-roles/dialog-manage-roles.component.ts @@ -1,13 +1,13 @@ import {Component, Inject, OnDestroy, OnInit, ViewChild} from '@angular/core'; -import {MatTableDataSource} from '@angular/material/table'; +import {MAT_CHECKBOX_DEFAULT_OPTIONS, MatCheckboxDefaultOptions} from '@angular/material/checkbox'; import {MAT_DIALOG_DATA} from '@angular/material/dialog'; -import {MatSort, MatSortable, Sort} from '@angular/material/sort'; import {MatPaginator} from '@angular/material/paginator'; +import {MatSort, MatSortable, Sort} from '@angular/material/sort'; +import {MatTableDataSource} from '@angular/material/table'; import {DataVariable, ProcessPermissionRef, Role, TransitionPermissionRef} from '@netgrif/petriflow'; -import {ModelService} from '../../modeler/services/model/model.service'; import {ModelerConfig} from '../../modeler/modeler-config'; import {HistoryService} from '../../modeler/services/history/history.service'; -import {MAT_CHECKBOX_DEFAULT_OPTIONS, MatCheckboxDefaultOptions} from '@angular/material/checkbox'; +import {ModelService} from '../../modeler/services/model/model.service'; export enum RoleRefType { TRANSITION = 'transition', diff --git a/src/app/dialogs/dialog-marking-change/dialog-marking-change.component.html b/src/app/dialogs/dialog-marking-change/dialog-marking-change.component.html new file mode 100644 index 0000000..f896c4c --- /dev/null +++ b/src/app/dialogs/dialog-marking-change/dialog-marking-change.component.html @@ -0,0 +1,15 @@ +

Change marking of place {{CanvasNodeElement.pretty(place)}}

+ + + Tokens + + Number of tokens is required + Number of tokens must be a non-negative integer + + + + + diff --git a/src/app/dialogs/dialog-marking-change/dialog-marking-change.component.scss b/src/app/dialogs/dialog-marking-change/dialog-marking-change.component.scss new file mode 100644 index 0000000..c667359 --- /dev/null +++ b/src/app/dialogs/dialog-marking-change/dialog-marking-change.component.scss @@ -0,0 +1,8 @@ +mat-dialog-content { + display: flex; + flex-direction: column; +} + +mat-dialog-actions { + justify-content: flex-end; +} diff --git a/src/app/dialogs/dialog-marking-change/dialog-marking-change.component.ts b/src/app/dialogs/dialog-marking-change/dialog-marking-change.component.ts new file mode 100644 index 0000000..8061159 --- /dev/null +++ b/src/app/dialogs/dialog-marking-change/dialog-marking-change.component.ts @@ -0,0 +1,41 @@ +import {Component, Inject} from '@angular/core'; +import {FormControl, ValidatorFn, Validators} from '@angular/forms'; +import {MAT_DIALOG_DATA} from '@angular/material/dialog'; +import {Place} from '@netgrif/petriflow'; +import {CanvasNodeElement} from '../../modeler/edit-mode/domain/canvas-node-element'; +import {SimulationModeService} from '../../modeler/simulation-mode/simulation-mode.service'; +import {PlaceEditData} from '../dialog-place-edit/dialog-place-edit.component'; + +@Component({ + selector: 'nab-dialog-marking-change', + templateUrl: './dialog-marking-change.component.html', + styleUrl: './dialog-marking-change.component.scss' +}) +export class DialogMarkingChangeComponent { + + public markingCtrl: FormControl; + public place: Place; + + constructor( + @Inject(MAT_DIALOG_DATA) public data: PlaceEditData, + public simulationService: SimulationModeService + ) { + this.place = this.simulationService.model.getPlace(data.placeId); + this.markingCtrl = new FormControl('', [ + Validators.required, + this.validValue() + ]); + } + + private validValue(): ValidatorFn { + return (fc: FormControl): { [key: string]: any } | null => { + const value = Math.floor(fc.value as number); + if (value !== Infinity && value === fc.value as number && value >= 0) { + return null; + } + return ({validMultiplicity: true}) + }; + } + + protected readonly CanvasNodeElement = CanvasNodeElement; +} diff --git a/src/app/dialogs/dialog-model-edit/dialog-model-edit.component.ts b/src/app/dialogs/dialog-model-edit/dialog-model-edit.component.ts index 7c13d1f..05d7893 100644 --- a/src/app/dialogs/dialog-model-edit/dialog-model-edit.component.ts +++ b/src/app/dialogs/dialog-model-edit/dialog-model-edit.component.ts @@ -1,13 +1,13 @@ import {Component, Inject} from '@angular/core'; +import {FormControl, ValidatorFn, Validators} from '@angular/forms'; import {MAT_DIALOG_DATA, MatDialog} from '@angular/material/dialog'; -import {ModelService} from '../../modeler/services/model/model.service'; import {Router} from '@angular/router'; -import {DialogManageRolesComponent, RoleRefType} from '../dialog-manage-roles/dialog-manage-roles.component'; import {DataType} from '@netgrif/petriflow'; -import {FormControl, ValidatorFn, Validators} from '@angular/forms'; -import {ModelChange} from '../../modeler/history-mode/model/model/model-change'; import {ActionsModeService} from '../../modeler/actions-mode/actions-mode.service'; import {ProcessActionsTool} from '../../modeler/actions-mode/tools/process-actions-tool'; +import {ModelChange} from '../../modeler/history-mode/model/model/model-change'; +import {ModelService} from '../../modeler/services/model/model.service'; +import {DialogManageRolesComponent, RoleRefType} from '../dialog-manage-roles/dialog-manage-roles.component'; @Component({ selector: 'nab-dialog-model-edit', diff --git a/src/app/dialogs/dialog-place-edit/dialog-place-edit.component.html b/src/app/dialogs/dialog-place-edit/dialog-place-edit.component.html index 4364aea..3a76000 100644 --- a/src/app/dialogs/dialog-place-edit/dialog-place-edit.component.html +++ b/src/app/dialogs/dialog-place-edit/dialog-place-edit.component.html @@ -13,7 +13,7 @@

Edit place

Tokens - Id is required + Number of tokens is required Number of tokens must be a non-negative integer diff --git a/src/app/dialogs/dialog-place-edit/dialog-place-edit.component.ts b/src/app/dialogs/dialog-place-edit/dialog-place-edit.component.ts index a55caf6..991a325 100644 --- a/src/app/dialogs/dialog-place-edit/dialog-place-edit.component.ts +++ b/src/app/dialogs/dialog-place-edit/dialog-place-edit.component.ts @@ -1,8 +1,8 @@ import {Component, Inject} from '@angular/core'; -import {ModelService} from '../../modeler/services/model/model.service'; +import {FormControl, ValidatorFn, Validators} from '@angular/forms'; import {MAT_DIALOG_DATA} from '@angular/material/dialog'; import {PlaceChange} from '../../modeler/history-mode/model/place/place-change'; -import {FormControl, ValidatorFn, Validators} from '@angular/forms'; +import {ModelService} from '../../modeler/services/model/model.service'; export interface PlaceEditData { placeId: string; diff --git a/src/app/dialogs/dialog-refactor/dialog-refactor.component.spec.ts b/src/app/dialogs/dialog-refactor/dialog-refactor.component.spec.ts index 6d5b398..0cf4661 100644 --- a/src/app/dialogs/dialog-refactor/dialog-refactor.component.spec.ts +++ b/src/app/dialogs/dialog-refactor/dialog-refactor.component.spec.ts @@ -1,12 +1,12 @@ -import {waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing'; - -import {DialogRefactorComponent} from './dialog-refactor.component'; -import {MaterialImportModule} from '../../material-import/material-import.module'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; -import {ModelService} from '../../modeler/services/model/model.service'; -import {Subject} from 'rxjs'; import {NoopAnimationsModule} from '@angular/platform-browser/animations'; import {PetriNet} from '@netgrif/petriflow'; +import {Subject} from 'rxjs'; +import {MaterialImportModule} from '../../material-import/material-import.module'; +import {ModelService} from '../../modeler/services/model/model.service'; + +import {DialogRefactorComponent} from './dialog-refactor.component'; describe('DialogRefactorComponent', () => { let component: DialogRefactorComponent; diff --git a/src/app/dialogs/dialog-refactor/dialog-refactor.component.ts b/src/app/dialogs/dialog-refactor/dialog-refactor.component.ts index ac239d3..364b810 100644 --- a/src/app/dialogs/dialog-refactor/dialog-refactor.component.ts +++ b/src/app/dialogs/dialog-refactor/dialog-refactor.component.ts @@ -1,9 +1,9 @@ import {Component, Inject} from '@angular/core'; -import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; import {FormControl, ValidatorFn, Validators} from '@angular/forms'; -import {ModelService} from '../../modeler/services/model/model.service'; -import escapeStringRegexp from 'escape-string-regexp'; +import {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog'; import {Action, Event} from '@netgrif/petriflow'; +import escapeStringRegexp from 'escape-string-regexp'; +import {ModelService} from '../../modeler/services/model/model.service'; export interface DialogRefactorData { originalId: string; diff --git a/src/app/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts b/src/app/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts index a6b1011..536cbae 100644 --- a/src/app/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts +++ b/src/app/dialogs/dialog-transition-edit/dialog-transition-edit.component.ts @@ -1,14 +1,14 @@ import {Component, Inject, OnInit} from '@angular/core'; -import {AssignPolicy, DataType, FinishPolicy} from '@netgrif/petriflow'; +import {FormControl, ValidatorFn, Validators} from '@angular/forms'; import {MAT_DIALOG_DATA, MatDialog} from '@angular/material/dialog'; -import {ModelService} from '../../modeler/services/model/model.service'; -import {ChangedTransition} from './changed-transition'; import {Router} from '@angular/router'; +import {AssignPolicy, DataType, FinishPolicy} from '@netgrif/petriflow'; +import {ActionsMasterDetailService} from '../../modeler/actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../modeler/actions-mode/actions-mode.service'; import {SelectedTransitionService} from '../../modeler/selected-transition.service'; -import {FormControl, ValidatorFn, Validators} from '@angular/forms'; +import {ModelService} from '../../modeler/services/model/model.service'; import {DialogManageRolesComponent, RoleRefType} from '../dialog-manage-roles/dialog-manage-roles.component'; -import {ActionsModeService} from '../../modeler/actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../modeler/actions-mode/actions-master-detail.setvice'; +import {ChangedTransition} from './changed-transition'; export interface TransitionEditData { transitionId: string; diff --git a/src/app/dialogs/dialog.service.ts b/src/app/dialogs/dialog.service.ts index cb6d06b..1fa28ca 100644 --- a/src/app/dialogs/dialog.service.ts +++ b/src/app/dialogs/dialog.service.ts @@ -1,12 +1,12 @@ import {Injectable} from '@angular/core'; -import {DialogModelEditComponent} from './dialog-model-edit/dialog-model-edit.component'; import {MatDialog} from '@angular/material/dialog'; import {PetriNet} from '@netgrif/petriflow'; -import {ModelService} from '../modeler/services/model/model.service'; -import {ArcEditData, DialogArcEditComponent} from './dialog-arc-edit/dialog-arc-edit.component'; -import {ChangedArc} from './dialog-arc-edit/changed-arc'; import {CanvasArc} from '../modeler/edit-mode/domain/canvas-arc'; import {ModelChange} from '../modeler/history-mode/model/model/model-change'; +import {ModelService} from '../modeler/services/model/model.service'; +import {ChangedArc} from './dialog-arc-edit/changed-arc'; +import {ArcEditData, DialogArcEditComponent} from './dialog-arc-edit/dialog-arc-edit.component'; +import {DialogModelEditComponent} from './dialog-model-edit/dialog-model-edit.component'; @Injectable({ providedIn: 'root' diff --git a/src/app/form-builder/edit-panel/edit-panel.component.html b/src/app/form-builder/edit-panel/edit-panel.component.html index 7dbff4a..ef10150 100644 --- a/src/app/form-builder/edit-panel/edit-panel.component.html +++ b/src/app/form-builder/edit-panel/edit-panel.component.html @@ -53,7 +53,7 @@
Delegate event

Id: {{ dataVariable.id }} - @@ -78,17 +78,16 @@

-
+
Title - + Placeholder - + Description @@ -152,20 +151,9 @@

class="full-width"> - - Initial value - - - - {{ taskRefTitle(option) }} - - - +
+ +
@@ -211,14 +199,25 @@

Component Name - + + + + {{componentDef.title}} + +
- + + + {{propertyDef.name}} + + add Add property +
@@ -284,15 +288,25 @@

Component Name - + + + + {{componentDef.title}} + +
- + + + {{propertyDef.name}} + + add Add property +
diff --git a/src/app/form-builder/edit-panel/edit-panel.component.spec.ts b/src/app/form-builder/edit-panel/edit-panel.component.spec.ts index 1f45e04..4f49e01 100644 --- a/src/app/form-builder/edit-panel/edit-panel.component.spec.ts +++ b/src/app/form-builder/edit-panel/edit-panel.component.spec.ts @@ -1,16 +1,16 @@ -import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; - -import {EditPanelComponent} from './edit-panel.component'; -import {CommonModule} from '@angular/common'; import {DragDropModule} from '@angular/cdk/drag-drop'; -import {GridsterModule} from 'angular-gridster2'; -import {FormsModule} from '@angular/forms'; +import {CommonModule} from '@angular/common'; import {HttpClientModule} from '@angular/common/http'; -import {MaterialImportModule} from '../../material-import/material-import.module'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; import {FlexLayoutModule} from '@angular/flex-layout'; -import {AngularResizedEventModule} from 'angular-resize-event'; -import {ResizableModule} from 'angular-resizable-element'; +import {FormsModule} from '@angular/forms'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import {GridsterModule} from 'angular-gridster2'; +import {ResizableModule} from 'angular-resizable-element'; +import {AngularResizedEventModule} from 'angular-resize-event'; +import {MaterialImportModule} from '../../material-import/material-import.module'; + +import {EditPanelComponent} from './edit-panel.component'; describe('EditPanelComponent', () => { let component: EditPanelComponent; diff --git a/src/app/form-builder/edit-panel/edit-panel.component.ts b/src/app/form-builder/edit-panel/edit-panel.component.ts index 6feece4..c76dfd0 100644 --- a/src/app/form-builder/edit-panel/edit-panel.component.ts +++ b/src/app/form-builder/edit-panel/edit-panel.component.ts @@ -1,40 +1,42 @@ -import {AfterViewInit, Component, HostListener, OnInit} from '@angular/core'; +import {NGX_MAT_DATE_FORMATS} from '@angular-material-components/datetime-picker'; import {animate, state, style, transition, trigger} from '@angular/animations'; -import {GridsterService} from '../gridster/gridster.service'; +import {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop'; +import {AfterViewInit, Component, HostListener, OnInit} from '@angular/core'; +import {FormControl} from '@angular/forms'; +import {MatAutocompleteSelectedEvent} from '@angular/material/autocomplete'; +import {MAT_DATE_FORMATS} from '@angular/material/core'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {DATE_FORMAT, DATE_TIME_FORMAT, EnumerationFieldValue} from '@netgrif/components-core'; import { - Appearance, - Component as PetriflowComponent, - DataRef, - DataRefBehavior, - DataType, - DataVariable, - I18nString, - I18nWithDynamic, - Icon, - IconType, - Option, - Property, - Template, - Transition, - TransitionEvent, - TransitionEventType + Appearance, + Component as PetriflowComponent, + DataRef, + DataRefBehavior, + DataType, + DataVariable, + I18nString, + I18nWithDynamic, + Icon, + IconType, + Option, + Property, + Template, + Transition, + TransitionEvent, + TransitionEventType, } from '@netgrif/petriflow'; -import {NGX_MAT_DATE_FORMATS} from '@angular-material-components/datetime-picker'; -import {DialogRefactorComponent} from '../../dialogs/dialog-refactor/dialog-refactor.component'; -import {MatDialog} from '@angular/material/dialog'; import {Observable} from 'rxjs'; -import {FormControl} from '@angular/forms'; import {map, startWith, tap} from 'rxjs/operators'; -import {MAT_DATE_FORMATS} from '@angular/material/core'; -import {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop'; -import {DataFieldUtils} from '../data-field-utils'; -import {SelectedTransitionService} from '../../modeler/selected-transition.service'; +import {DialogRefactorComponent} from '../../dialogs/dialog-refactor/dialog-refactor.component'; +import {ActionsMasterDetailService} from '../../modeler/actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../modeler/actions-mode/actions-mode.service'; import {ModelerConfig} from '../../modeler/modeler-config'; +import {SelectedTransitionService} from '../../modeler/selected-transition.service'; import {ModelService} from '../../modeler/services/model/model.service'; -import {DATE_FORMAT, DATE_TIME_FORMAT, EnumerationFieldValue} from '@netgrif/components-core'; -import {Router} from '@angular/router'; -import {ActionsModeService} from '../../modeler/actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../modeler/actions-mode/actions-master-detail.setvice'; +import {DataFieldUtils} from '../data-field-utils'; +import {ComponentDef, DataRefDef, FieldListService, PropertyDef} from '../field-list/field-list.service'; +import {GridsterService} from '../gridster/gridster.service'; @Component({ selector: 'nab-edit-panel', @@ -72,15 +74,18 @@ export class EditPanelComponent implements OnInit, AfterViewInit { filteredOptions: Observable>; formControlRef: FormControl; transitionOptions: Array; - behaviorOptions; + componentNameFormCtrl: FormControl; + dataRefComponentNameFormCtrl: FormControl; + constructor(public gridsterService: GridsterService, public modelService: ModelService, private dialog: MatDialog, private transitionService: SelectedTransitionService, private _router: Router, private _actionMode: ActionsModeService, + private _fieldListService: FieldListService, private _actionsMasterDetail: ActionsMasterDetailService) { // this.transitionOptions = []; this.formControlRef = new FormControl(); @@ -92,6 +97,8 @@ export class EditPanelComponent implements OnInit, AfterViewInit { } ngOnInit() { + this.componentNameFormCtrl = new FormControl(); + this.dataRefComponentNameFormCtrl = new FormControl(); this.transId = this.transitionService.id; if (this.transId === null) { this.numOfCols = ModelerConfig.LAYOUT_DEFAULT_COLS; @@ -408,8 +415,13 @@ export class EditPanelComponent implements OnInit, AfterViewInit { return false; } - setPropertyKey($event, index: number, component: PetriflowComponent) { - component.properties[index].key = $event.target.value; + public setPropertyKey($event, index: number, component: PetriflowComponent): void { + if ($event instanceof MatAutocompleteSelectedEvent) { + component.properties[index].key = $event.option.value; + this.setPropertyDefaultValue($event, index, component); + } else { + component.properties[index].key = $event.target.value; + } } setPropertyValue($event, index: number, component: PetriflowComponent) { @@ -440,18 +452,26 @@ export class EditPanelComponent implements OnInit, AfterViewInit { } } - setComponent($event) { + public setComponent($event): void { if (!this.gridsterService.selectedDataField.dataVariable.component) { this.gridsterService.selectedDataField.dataVariable.component = new PetriflowComponent(''); } - this.gridsterService.selectedDataField.dataVariable.component.name = $event.target.value; + if ($event instanceof MatAutocompleteSelectedEvent) { + this.gridsterService.selectedDataField.dataVariable.component.name = $event.option.value; + } else { + this.gridsterService.selectedDataField.dataVariable.component.name = $event.target.value; + } } - setDataRefComponent($event) { + public setDataRefComponent($event): void { if (!this.gridsterService.selectedDataField.dataRef.component) { this.gridsterService.selectedDataField.dataRef.component = new PetriflowComponent(''); } - this.gridsterService.selectedDataField.dataRef.component.name = $event.target.value; + if ($event instanceof MatAutocompleteSelectedEvent) { + this.gridsterService.selectedDataField.dataRef.component.name = $event.option.value; + } else { + this.gridsterService.selectedDataField.dataRef.component.name = $event.target.value; + } } taskRefTitle(option: EnumerationFieldValue) { @@ -515,4 +535,41 @@ export class EditPanelComponent implements OnInit, AfterViewInit { numberOfActions(): number { return this.modelService.numberOfTransitionActions(this.transition); } + + filteredComponents(component: PetriflowComponent): Array { + const componentDefs: DataRefDef = this._fieldListService.fieldListArray.find(type => type.type === this.dataVariable.type); + if (!componentDefs) { + return []; + } + return componentDefs.components.filter(def => def.name !== undefined && def.title.toLowerCase().includes(component.name)); + } + + public filteredProperties(component: PetriflowComponent, propertyName: string): Array { + const componentDefs: DataRefDef = this._fieldListService.fieldListArray.find(type => type.type === this.dataVariable.type); + if (!componentDefs) { + return []; + } + const propertyDefs: ComponentDef = componentDefs.components.find(compDef => { + return (!component.name && !compDef.name) || (!!component.name && !!compDef.name && component.name === compDef.name); + }); + if (!propertyDefs || !propertyDefs.properties) { + return []; + } + const existingProperties = component.properties.map(compProperty => compProperty.key); + return propertyDefs.properties.filter(propDef => propDef.name.includes(propertyName) && !existingProperties.includes(propDef.name)); + } + + public setPropertyDefaultValue($event: MatAutocompleteSelectedEvent, index: number, component: PetriflowComponent): void { + component.properties[index].value = this._fieldListService.fieldListArray + .find(type => type.type === this.dataVariable.type)?.components + .find(compDef => (!component.name && !compDef.name) || (!!component.name && !!compDef.name && component.name === compDef.name))?.properties + .find(propDef => propDef.name === $event.option.value).defaultValue; + } + + public cloneProperty(source: DataRef | DataVariable, target: DataRef | DataVariable, property: string): void { + if (!(property in source)) { + return; + } + target[property] = source[property].clone(); + } } diff --git a/src/app/form-builder/field-list/field-list.component.spec.ts b/src/app/form-builder/field-list/field-list.component.spec.ts index 0aece6c..99162e0 100644 --- a/src/app/form-builder/field-list/field-list.component.spec.ts +++ b/src/app/form-builder/field-list/field-list.component.spec.ts @@ -1,20 +1,20 @@ -import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; - -import {FieldListComponent} from './field-list.component'; -import {CommonModule} from '@angular/common'; import {DragDropModule} from '@angular/cdk/drag-drop'; -import {GridsterModule} from 'angular-gridster2'; -import {FormsModule} from '@angular/forms'; +import {CommonModule} from '@angular/common'; import {HttpClientModule} from '@angular/common/http'; -import {MaterialImportModule} from '../../material-import/material-import.module'; +import {Component, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA} from '@angular/core'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; import {FlexLayoutModule} from '@angular/flex-layout'; -import {AngularResizedEventModule} from 'angular-resize-event'; -import {ResizableModule} from 'angular-resizable-element'; -import {RouterTestingModule} from '@angular/router/testing'; +import {FormsModule} from '@angular/forms'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; -import {Component, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA} from '@angular/core'; +import {RouterTestingModule} from '@angular/router/testing'; +import {GridsterModule} from 'angular-gridster2'; +import {ResizableModule} from 'angular-resizable-element'; +import {AngularResizedEventModule} from 'angular-resize-event'; +import {MaterialImportModule} from '../../material-import/material-import.module'; import {FormBuilderModule} from '../form-builder.module'; +import {FieldListComponent} from './field-list.component'; + describe('FieldListComponent', () => { let component: FieldListComponent; let fixture: ComponentFixture; diff --git a/src/app/form-builder/field-list/field-list.component.ts b/src/app/form-builder/field-list/field-list.component.ts index 3c19f36..6010ab7 100644 --- a/src/app/form-builder/field-list/field-list.component.ts +++ b/src/app/form-builder/field-list/field-list.component.ts @@ -1,16 +1,16 @@ import {AfterViewInit, Component, OnInit, ViewChild} from '@angular/core'; import {MatDialog} from '@angular/material/dialog'; -import {ModelService} from '../../modeler/services/model/model.service'; -import {GridsterService} from '../gridster/gridster.service'; -import {Router} from '@angular/router'; -import {FieldListService} from './field-list.service'; -import {DataType, DataVariable} from '@netgrif/petriflow'; -import {timer} from 'rxjs'; import {MatExpansionPanel} from '@angular/material/expansion'; import {MatSnackBar} from '@angular/material/snack-bar'; -import {SelectedTransitionService} from '../../modeler/selected-transition.service'; +import {Router} from '@angular/router'; +import {DataType, DataVariable, Property} from '@netgrif/petriflow'; import {GridsterItem} from 'angular-gridster2'; +import {timer} from 'rxjs'; import {DialogDeleteComponent} from '../../dialogs/dialog-delete/dialog-delete.component'; +import {SelectedTransitionService} from '../../modeler/selected-transition.service'; +import {ModelService} from '../../modeler/services/model/model.service'; +import {GridsterService} from '../gridster/gridster.service'; +import {ComponentDef, FieldListService} from './field-list.service'; export interface Data { title: string; @@ -95,6 +95,9 @@ export class FieldListComponent implements OnInit, AfterViewInit { if (meta.cols) { $event.dataTransfer.setData('cols', meta.cols); } + if (meta.properties) { + $event.dataTransfer.setData('properties', JSON.stringify(meta.properties)); + } this.dragStartHandler($event, false); } @@ -104,10 +107,13 @@ export class FieldListComponent implements OnInit, AfterViewInit { if (datafield.component?.name) { const meta = this.fieldListService.fieldListArray.find(type => type.type === datafield.type).components.find(c => c?.name === datafield.component.name); if (meta?.rows) { - $event.dataTransfer.setData('rows', meta.rows); + $event.dataTransfer.setData('rows', `${meta.rows}`); } if (meta?.cols) { - $event.dataTransfer.setData('cols', meta.cols); + $event.dataTransfer.setData('cols', `${meta.cols}`); + } + if (meta?.properties) { + $event.dataTransfer.setData('properties', JSON.stringify(meta.properties)); } } this.dragStartHandler($event, true); @@ -141,13 +147,18 @@ export class FieldListComponent implements OnInit, AfterViewInit { this.addDataRef(field, meta); } - private addDataRef(data: DataVariable, meta: any) { - this.gridsterService.addDataRef(data, meta.rows, meta.cols, meta.name, { + private addDataRef(data: DataVariable, meta: ComponentDef) { + const dataRef = this.gridsterService.addDataRef(data, meta.rows, meta.cols, meta.name, { x: 0, y: 0, rows: meta.rows, cols: meta.cols } as GridsterItem); + if (meta.name && meta.properties && Array.isArray(meta.properties) && meta.properties.length > 0) { + for (const property of meta.properties) { + dataRef.component.properties.push(new Property(property.name, property.defaultValue)); + } + } this.gridsterService.options.api.optionsChanged(); } diff --git a/src/app/form-builder/field-list/field-list.service.ts b/src/app/form-builder/field-list/field-list.service.ts index 478d8c6..c561c74 100644 --- a/src/app/form-builder/field-list/field-list.service.ts +++ b/src/app/form-builder/field-list/field-list.service.ts @@ -1,8 +1,29 @@ import {Injectable} from '@angular/core'; -import {Subject} from 'rxjs'; import {DataType} from '@netgrif/petriflow'; +import {Subject} from 'rxjs'; import {GridsterDataField} from '../gridster/classes/gridster-data-field'; +export interface PropertyDef { + name: string; + defaultValue: any; +} + +export interface ComponentDef { + title: string; + name?: string; + rows?: number; + cols?: number; + properties?: Array; + showPlaceholder?: boolean; +} + +export interface DataRefDef { + type: DataType; + components: Array; + properties?: Array; + showPlaceholder?: boolean; +} + @Injectable({ providedIn: 'root' }) @@ -11,7 +32,7 @@ export class FieldListService { static DEFAULT_FIELD_COLS = 2; static DEFAULT_FIELD_ROWS = 1; - fieldListArray: any = [ + fieldListArray: Array = [ { type: DataType.TEXT, components: [ @@ -19,14 +40,46 @@ export class FieldListService { {title: 'Area', name: 'textarea', rows: 2, cols: 4}, {title: 'Markdown Editor', name: 'richtextarea', rows: 2, cols: 4}, {title: 'HTML Editor', name: 'htmltextarea', rows: 2, cols: 4}, - {title: 'Password', name: 'password'} + {title: 'Password', name: 'password'}, + {title: 'Signature', name: 'signature'} ] }, { type: DataType.NUMBER, components: [ {title: 'Simple'}, - {title: 'Currency', name: 'currency'} + { + title: 'Decimal', + name: 'decimal', + properties: [ + { + name: 'digitsInfo', + defaultValue: '1.0-3' + }, + { + name: 'locale', + defaultValue: 'sk' + }, + ] + }, + { + title: 'Currency', + name: 'currency', + properties: [ + { + name: 'code', + defaultValue: 'EUR' + }, + { + name: 'fractionSize', + defaultValue: '2' + }, + { + name: 'locale', + defaultValue: 'sk' + }, + ] + } ] }, { @@ -41,10 +94,72 @@ export class FieldListService { components: [ {title: 'Select'}, {title: 'List', name: 'list'}, - {title: 'Stepper', name: 'stepper'}, - {title: 'Autocomplete', name: 'autocomplete'}, + { + title: 'Stepper', + name: 'stepper', + properties: [ + { + name: 'arrowStepper', + defaultValue: 'true' + } + ] + }, + { + title: 'Autocomplete', + name: 'autocomplete', + properties: [ + { + name: 'filter', + defaultValue: 'prefix' + } + ] + }, {title: 'Dynamic Autocomplete', name: 'autocomplete_dynamic'}, - {title: 'Icon', name: 'icon'} + { + title: 'Icon', + name: 'icon', + properties: [ + { + name: 'horizontal', + defaultValue: 'true' + }, + { + name: 'arrow', + defaultValue: 'true' + }, + { + name: 'divider', + defaultValue: 'true' + } + ] + }, + { + title: 'Case ref', + name: 'caseref', + showPlaceholder: true, + properties: [ + { + name: 'filter', + defaultValue: 'true' + }, + { + name: 'filterQuery', + defaultValue: '{}' + }, + { + name: 'headers', + defaultValue: 'meta-visualID,meta-mongoID,meta-title,meta-author,meta-creationDate' + }, + { + name: 'createCase', + defaultValue: 'true' + }, + { + name: 'search', + defaultValue: 'true' + } + ] + } ] }, { @@ -59,7 +174,43 @@ export class FieldListService { components: [ {title: 'Select'}, {title: 'List', name: 'list'}, - {title: 'Autocomplete', name: 'autocomplete'} + { + title: 'Autocomplete', + name: 'autocomplete', + properties: [ + { + name: 'filter', + defaultValue: 'prefix' + } + ] + }, + { + title: 'Case ref', + name: 'caseref', + showPlaceholder: true, + properties: [ + { + name: 'filter', + defaultValue: 'true' + }, + { + name: 'filterQuery', + defaultValue: '{}' + }, + { + name: 'headers', + defaultValue: 'meta-visualID,meta-mongoID,meta-title,meta-author,meta-creationDate' + }, + { + name: 'createCase', + defaultValue: 'true' + }, + { + name: 'search', + defaultValue: 'true' + } + ] + } ] }, { @@ -78,6 +229,24 @@ export class FieldListService { {title: 'Icon', name: 'icon'}, {title: 'FAB', name: 'fab'}, {title: 'MiniFAB', name: 'minifab'} + ], + properties: [ + { + name: 'dialogText', + defaultValue: '' + }, + { + name: 'dialogTitle', + defaultValue: '' + }, + { + name: 'align', + defaultValue: '' + }, + { + name: 'stretch', + defaultValue: 'true' + } ] }, { @@ -96,7 +265,28 @@ export class FieldListService { type: DataType.FILE, components: [ {title: 'Simple'}, - {title: 'Preview', name: 'preview'} + { + title: 'Preview', + name: 'preview', + properties: [ + { + name: 'borderWidth', + defaultValue: '0' + }, + { + name: 'borderStyle', + defaultValue: 'none' + }, + { + name: 'borderColor', + defaultValue: 'black' + }, + { + name: 'borderEnabled', + defaultValue: 'true' + } + ] + } ] }, { @@ -119,33 +309,105 @@ export class FieldListService { }, { type: DataType.FILTER, + showPlaceholder: true, components: [ - {title: 'Simple'} + {title: 'Simple'}, + {title: 'Tab view', name: 'filter-tab-view'} ] }, { type: DataType.I18N, components: [ - {title: 'Simple'}, - {title: 'Divider', name: 'divider', cols: 4} + { + title: 'Text', + name: 'text', + properties: [ + { + name: 'plainText', + defaultValue: 'true' + }, + { + name: 'boldText', + defaultValue: 'true' + }, + { + name: 'textColor', + defaultValue: 'black' + }, + { + name: 'fontSize', + defaultValue: '12' + } + ] + }, + { + title: 'Divider', + name: 'divider', + cols: 4, + properties: [ + { + name: 'dividerColor', + defaultValue: 'black' + }, + { + name: 'fontSize', + defaultValue: '12' + } + ] + } ] }, { type: DataType.TASK_REF, + showPlaceholder: true, components: [ - {title: 'Simple', cols: 4} + {title: 'Simple', cols: 4}, + {title: 'Dashboard', name: 'dashboard', cols: 4} ] }, { type: DataType.CASE_REF, + showPlaceholder: true, components: [ {title: 'Simple'} + ], + properties: [ + { + name: 'filter', + defaultValue: 'true' + }, + { + name: 'filterQuery', + defaultValue: '{}' + }, + { + name: 'headers', + defaultValue: 'meta-visualID,meta-mongoID,meta-title,meta-author,meta-creationDate' + }, + { + name: 'createCase', + defaultValue: 'true' + }, + { + name: 'search', + defaultValue: 'true' + } ] }, { - type: 'stringCollection', + type: 'stringCollection' as DataType, components: [ {title: 'Simple'} + ], + properties: [ + { + name: 'semicolon', + defaultValue: 'true' + }, + { + name: 'comma', + defaultValue: 'true' + } ] } ]; @@ -156,12 +418,12 @@ export class FieldListService { this.draggedObjectsStream = new Subject(); } - public getComponentMeta(type: DataType, componentName: string) { + public getComponentMeta(type: DataType, componentName: string): ComponentDef { const meta = { rows: FieldListService.DEFAULT_FIELD_ROWS, cols: FieldListService.DEFAULT_FIELD_COLS, name: componentName - }; + } as ComponentDef; if (type === undefined || componentName === undefined) { return meta; } @@ -181,4 +443,27 @@ export class FieldListService { } return meta; } + + public isPlaceholderField(dataField: GridsterDataField): boolean { + if (!dataField.dataVariable.type) { + return true; + } + const component = !!dataField.dataRef.component ? dataField.dataRef.component : dataField.dataVariable.component; + const dataDef = this.fieldListArray.find(it => it.type === dataField.dataVariable.type); + if (!dataDef) { + return true; + } + const simpleComponent = dataDef.components.find(it => !it.name); + if (!component || !component.name) { + if (!!simpleComponent && 'showPlaceholder' in simpleComponent) { + return simpleComponent.showPlaceholder; + } + return !!dataDef.showPlaceholder; + } + const compDef = dataDef.components.find(it => it.name === component.name); + if (!compDef || !('showPlaceholder' in compDef)) { + return !!dataDef.showPlaceholder; + } + return !!compDef.showPlaceholder; + } } diff --git a/src/app/form-builder/form-builder.component.html b/src/app/form-builder/form-builder.component.html index 3dcdf51..3b363b3 100644 --- a/src/app/form-builder/form-builder.component.html +++ b/src/app/form-builder/form-builder.component.html @@ -11,6 +11,7 @@ [style.width.px]="width" fixedInViewport=true disableClose="true" + style="max-width: 450px;" class="app-mat-sidenav-right" mode="side" position="end" opened>
diff --git a/src/app/form-builder/form-builder.component.spec.ts b/src/app/form-builder/form-builder.component.spec.ts index 3188c1d..c453676 100644 --- a/src/app/form-builder/form-builder.component.spec.ts +++ b/src/app/form-builder/form-builder.component.spec.ts @@ -1,19 +1,19 @@ -import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; - -import {FormBuilderComponent} from './form-builder.component'; -import {CommonModule} from '@angular/common'; import {DragDropModule} from '@angular/cdk/drag-drop'; -import {GridsterModule} from 'angular-gridster2'; -import {FormsModule} from '@angular/forms'; +import {CommonModule} from '@angular/common'; import {HttpClientModule} from '@angular/common/http'; -import {MaterialImportModule} from '../material-import/material-import.module'; -import {FlexLayoutModule} from '@angular/flex-layout'; -import {AngularResizedEventModule} from 'angular-resize-event'; -import {ResizableModule} from 'angular-resizable-element'; -import {FormBuilderModule} from './form-builder.module'; import {NO_ERRORS_SCHEMA} from '@angular/core'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; +import {FlexLayoutModule} from '@angular/flex-layout'; +import {FormsModule} from '@angular/forms'; import {NoopAnimationsModule} from '@angular/platform-browser/animations'; import {RouterTestingModule} from '@angular/router/testing'; +import {GridsterModule} from 'angular-gridster2'; +import {ResizableModule} from 'angular-resizable-element'; +import {AngularResizedEventModule} from 'angular-resize-event'; +import {MaterialImportModule} from '../material-import/material-import.module'; + +import {FormBuilderComponent} from './form-builder.component'; +import {FormBuilderModule} from './form-builder.module'; describe('FormBuilderComponent', () => { let component: FormBuilderComponent; diff --git a/src/app/form-builder/form-builder.component.ts b/src/app/form-builder/form-builder.component.ts index 16ec358..48fcc80 100644 --- a/src/app/form-builder/form-builder.component.ts +++ b/src/app/form-builder/form-builder.component.ts @@ -1,7 +1,10 @@ -import {AfterViewInit, Component, OnDestroy, OnInit} from '@angular/core'; +import {AfterViewInit, Component} from '@angular/core'; import {Router} from '@angular/router'; -import {ModelService} from '../modeler/services/model/model.service'; +import {DataGroup, LayoutType} from '@netgrif/petriflow'; +import {ModelerConfig} from '../modeler/modeler-config'; import {ModelerUtils} from '../modeler/modeler-utils'; +import {SelectedTransitionService} from '../modeler/selected-transition.service'; +import {ModelService} from '../modeler/services/model/model.service'; @Component({ selector: 'nab-form-builder', @@ -12,10 +15,16 @@ export class FormBuilderComponent implements AfterViewInit { title = 'form-builder'; width: number; - constructor(private router: Router, private modelService: ModelService) { + constructor(private router: Router, private modelService: ModelService, private transitionService: SelectedTransitionService) { if (!this.modelService.model) { this.router.navigate(['/modeler']); } + if (this.modelService.model.getTransition(this.transitionService.id)?.dataGroups?.length === 0) { + const dataGroup = new DataGroup(`${this.transitionService.id}_0`); + dataGroup.layout = LayoutType.GRID; + dataGroup.cols = ModelerConfig.LAYOUT_DEFAULT_COLS; + this.modelService.model.getTransition(this.transitionService.id).dataGroups.push(dataGroup); + } } ngAfterViewInit(): void { diff --git a/src/app/form-builder/form-builder.module.ts b/src/app/form-builder/form-builder.module.ts index 0454779..4214e46 100644 --- a/src/app/form-builder/form-builder.module.ts +++ b/src/app/form-builder/form-builder.module.ts @@ -1,20 +1,21 @@ -import {NgModule} from '@angular/core'; -import {CommonModule} from '@angular/common'; -import {FormBuilderComponent} from './form-builder.component'; -import {PaperComponent} from './paper/paper.component'; -import {FieldListComponent} from './field-list/field-list.component'; -import {GridsterComponent} from './gridster/gridster.component'; -import {EditPanelComponent} from './edit-panel/edit-panel.component'; import {DragDropModule} from '@angular/cdk/drag-drop'; -import {GridsterModule} from 'angular-gridster2'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {CommonModule} from '@angular/common'; import {HttpClientModule} from '@angular/common/http'; -import {MaterialImportModule} from '../material-import/material-import.module'; -import {GridsterDataFieldComponent} from './gridster/gridster-datafield/gridster-data-field.component'; -import {InfoLabelComponent} from './info-label/info-label.component'; +import {NgModule} from '@angular/core'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; import {DataFieldsComponentModule} from '@netgrif/components'; import {FlexLayoutModule} from '@ngbracket/ngx-layout'; +import {GridsterModule} from 'angular-gridster2'; import {ResizableModule} from 'angular-resizable-element'; +import {MaterialImportModule} from '../material-import/material-import.module'; +import {ModelerModule} from '../modeler/modeler.module'; +import {EditPanelComponent} from './edit-panel/edit-panel.component'; +import {FieldListComponent} from './field-list/field-list.component'; +import {FormBuilderComponent} from './form-builder.component'; +import {GridsterDataFieldComponent} from './gridster/gridster-datafield/gridster-data-field.component'; +import {GridsterComponent} from './gridster/gridster.component'; +import {InfoLabelComponent} from './info-label/info-label.component'; +import {PaperComponent} from './paper/paper.component'; @NgModule({ declarations: [ @@ -39,7 +40,8 @@ import {ResizableModule} from 'angular-resizable-element'; HttpClientModule, MaterialImportModule, ReactiveFormsModule, - ResizableModule + ResizableModule, + ModelerModule ] }) export class FormBuilderModule { diff --git a/src/app/form-builder/gridster/classes/gridster-data-field.ts b/src/app/form-builder/gridster/classes/gridster-data-field.ts index 7790723..b51a9f8 100644 --- a/src/app/form-builder/gridster/classes/gridster-data-field.ts +++ b/src/app/form-builder/gridster/classes/gridster-data-field.ts @@ -1,5 +1,5 @@ +import {DataLayout, DataRef, DataVariable, I18nWithDynamic} from '@netgrif/petriflow'; import {GridsterItem, GridsterItemComponentInterface} from 'angular-gridster2'; -import {DataLayout, DataRef, DataVariable, Expression, I18nWithDynamic} from '@netgrif/petriflow'; export class GridsterDataField implements GridsterItem { // properties needed because of GridsterUtils.merge implementation diff --git a/src/app/form-builder/gridster/gridster-datafield/gridster-data-field.component.html b/src/app/form-builder/gridster/gridster-datafield/gridster-data-field.component.html index e371860..bfa711b 100644 --- a/src/app/form-builder/gridster/gridster-datafield/gridster-data-field.component.html +++ b/src/app/form-builder/gridster/gridster-datafield/gridster-data-field.component.html @@ -1,11 +1,9 @@
- Placeholder for {{dataField.dataVariable.type}} with id '{{dataField.dataVariable?.id}}' + Placeholder for {{dataField.dataVariable.type}} with id '{{dataField.dataVariable?.id}}' - +
diff --git a/src/app/form-builder/gridster/gridster-datafield/gridster-data-field.component.ts b/src/app/form-builder/gridster/gridster-datafield/gridster-data-field.component.ts index 5d5d497..3043846 100644 --- a/src/app/form-builder/gridster/gridster-datafield/gridster-data-field.component.ts +++ b/src/app/form-builder/gridster/gridster-datafield/gridster-data-field.component.ts @@ -1,11 +1,12 @@ import {Component, Input, OnDestroy, OnInit, QueryList, TemplateRef, ViewChildren} from '@angular/core'; -import {GridsterDataField} from '../classes/gridster-data-field'; +import {DataField, EnumerationField, MultichoiceField} from '@netgrif/components-core'; import {DataRefBehavior, DataType, I18nWithDynamic} from '@netgrif/petriflow'; -import {GridsterService} from '../gridster.service'; -import {GridsterFieldToEngineFieldService} from '../../../modeler/gridster-field-to-engine-field.service'; -import {Subscription} from 'rxjs'; import moment from 'moment'; -import {DataField, EnumerationField, MultichoiceField} from '@netgrif/components-core'; +import {Subscription} from 'rxjs'; +import {GridsterFieldToEngineFieldService} from '../../../modeler/gridster-field-to-engine-field.service'; +import {FieldListService} from '../../field-list/field-list.service'; +import {GridsterDataField} from '../classes/gridster-data-field'; +import {GridsterService} from '../gridster.service'; @Component({ selector: 'nab-gridster-datafield', @@ -20,7 +21,9 @@ export class GridsterDataFieldComponent implements OnInit, OnDestroy { engineField: DataField; private _gridsterSubscription: Subscription; - constructor(private _gridsterService: GridsterService, private _transformService: GridsterFieldToEngineFieldService) { + constructor(private _gridsterService: GridsterService, + private _transformService: GridsterFieldToEngineFieldService, + public fieldListService: FieldListService) { } ngOnDestroy(): void { diff --git a/src/app/form-builder/gridster/gridster.component.spec.ts b/src/app/form-builder/gridster/gridster.component.spec.ts index dd04f02..ef7e19d 100644 --- a/src/app/form-builder/gridster/gridster.component.spec.ts +++ b/src/app/form-builder/gridster/gridster.component.spec.ts @@ -1,9 +1,9 @@ import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; - -import {GridsterComponent} from './gridster.component'; -import {FormBuilderModule} from '../form-builder.module'; import {RouterTestingModule} from '@angular/router/testing'; import {GridsterModule} from 'angular-gridster2'; +import {FormBuilderModule} from '../form-builder.module'; + +import {GridsterComponent} from './gridster.component'; describe('GridsterComponent', () => { let component: GridsterComponent; diff --git a/src/app/form-builder/gridster/gridster.component.ts b/src/app/form-builder/gridster/gridster.component.ts index 0492852..e196c8a 100644 --- a/src/app/form-builder/gridster/gridster.component.ts +++ b/src/app/form-builder/gridster/gridster.component.ts @@ -1,12 +1,12 @@ import {ChangeDetectionStrategy, Component, OnDestroy, OnInit, ViewEncapsulation} from '@angular/core'; -import {GridsterConfig} from 'angular-gridster2'; -import {GridsterService} from './gridster.service'; -import {FieldListService} from '../field-list/field-list.service'; -import {ModelService} from '../../modeler/services/model/model.service'; import {Router} from '@angular/router'; -import {GridsterDataField} from './classes/gridster-data-field'; +import {GridsterConfig} from 'angular-gridster2'; import {SelectedTransitionService} from '../../modeler/selected-transition.service'; import {HistoryService} from '../../modeler/services/history/history.service'; +import {ModelService} from '../../modeler/services/model/model.service'; +import {FieldListService} from '../field-list/field-list.service'; +import {GridsterDataField} from './classes/gridster-data-field'; +import {GridsterService} from './gridster.service'; @Component({ selector: 'nab-gridster-component', diff --git a/src/app/form-builder/gridster/gridster.service.spec.ts b/src/app/form-builder/gridster/gridster.service.spec.ts index a23f38c..fe3af2a 100644 --- a/src/app/form-builder/gridster/gridster.service.spec.ts +++ b/src/app/form-builder/gridster/gridster.service.spec.ts @@ -1,10 +1,10 @@ +import {HttpClientModule} from '@angular/common/http'; import {TestBed} from '@angular/core/testing'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; +import {MaterialImportModule} from '../../material-import/material-import.module'; import {GridsterService} from './gridster.service'; -import {HttpClientModule} from '@angular/common/http'; -import {MaterialImportModule} from '../../material-import/material-import.module'; -import {MatSnackBarModule} from '@angular/material/snack-bar'; -import {MatDialogModule} from '@angular/material/dialog'; describe('GridsterService', () => { let service: GridsterService; diff --git a/src/app/form-builder/gridster/gridster.service.ts b/src/app/form-builder/gridster/gridster.service.ts index c45ac97..3f62cc2 100644 --- a/src/app/form-builder/gridster/gridster.service.ts +++ b/src/app/form-builder/gridster/gridster.service.ts @@ -1,34 +1,35 @@ import {Injectable} from '@angular/core'; import { - CompactType, - DisplayGrid, - GridsterConfig, - GridsterItem, - GridsterItemComponentInterface, - GridType -} from 'angular-gridster2'; -import {ModelService} from '../../modeler/services/model/model.service'; -import {GridsterDataField} from './classes/gridster-data-field'; -import { - Appearance, - Component, - DataGroup, - DataRef, - DataRefBehavior, - DataType, - DataVariable, - Expression, I18nWithDynamic, - LayoutType, - Template, - Transition, - TransitionLayout + Appearance, + Component, + DataGroup, + DataRef, + DataRefBehavior, + DataType, + DataVariable, + Expression, + I18nWithDynamic, + Property, + Template, + Transition, + TransitionLayout, } from '@netgrif/petriflow'; +import { + CompactType, + DisplayGrid, + GridsterConfig, + GridsterItem, + GridsterItemComponentInterface, + GridType, +} from 'angular-gridster2'; import {BehaviorSubject, ReplaySubject, Subject} from 'rxjs'; -import {DataFieldUtils} from '../data-field-utils'; -import {SelectedTransitionService} from '../../modeler/selected-transition.service'; -import {FieldListService} from '../field-list/field-list.service'; -import {ModelerConfig} from '../../modeler/modeler-config'; import {debounceTime} from 'rxjs/operators'; +import {ModelerConfig} from '../../modeler/modeler-config'; +import {SelectedTransitionService} from '../../modeler/selected-transition.service'; +import {ModelService} from '../../modeler/services/model/model.service'; +import {DataFieldUtils} from '../data-field-utils'; +import {FieldListService, PropertyDef} from '../field-list/field-list.service'; +import {GridsterDataField} from './classes/gridster-data-field'; @Injectable({ providedIn: 'root' @@ -196,7 +197,7 @@ export class GridsterService { return dataVariable; } - public addDataRef(dataVariable: DataVariable, componentRows: number, componentCols: number, componentName: string, item: GridsterItem) { + public addDataRef(dataVariable: DataVariable, componentRows: number, componentCols: number, componentName: string, item: GridsterItem): DataRef { const dataRef = new DataRef(dataVariable.id); dataRef.layout.x = item.x; dataRef.layout.y = item.y; @@ -221,12 +222,6 @@ export class GridsterService { dataRef.component = new Component(componentName); } const transition = this.modelService.model.getTransition(this.transitionId); - if (transition.dataGroups.length === 0) { - const dataGroup = new DataGroup(`${transition.id}_0`); - dataGroup.layout = LayoutType.GRID; - dataGroup.cols = this.options.minCols; - transition.dataGroups.push(dataGroup); - } transition.dataGroups[0].addDataRef(dataRef); if (dataVariable.type === DataType.TASK_REF && dataVariable.init?.value === this.transitionId) { dataVariable.init.value = undefined; @@ -241,12 +236,20 @@ export class GridsterService { } private addNewDataRef(data: DataVariable, event: DragEvent, item: GridsterItem): DataRef { - return this.addDataRef( + const newDataRef = this.addDataRef( data, +event.dataTransfer.getData('rows'), +event.dataTransfer.getData('cols'), event.dataTransfer.getData('ref_component'), item); + const properties: Array = JSON.parse(event.dataTransfer.getData('properties')); + if (!!properties) { + for (const property of properties) { + newDataRef.component.properties.push(new Property(property.name, property.defaultValue)); + } + } + this.options.api?.optionsChanged(); + return newDataRef; } private createId(type: string) { diff --git a/src/app/form-builder/info-label/info-label.component.spec.ts b/src/app/form-builder/info-label/info-label.component.spec.ts index 1e2d8fc..eaa5056 100644 --- a/src/app/form-builder/info-label/info-label.component.spec.ts +++ b/src/app/form-builder/info-label/info-label.component.spec.ts @@ -1,8 +1,8 @@ import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; +import {RouterTestingModule} from '@angular/router/testing'; +import {MaterialImportModule} from '../../material-import/material-import.module'; import {InfoLabelComponent} from './info-label.component'; -import {MaterialImportModule} from '../../material-import/material-import.module'; -import {RouterTestingModule} from '@angular/router/testing'; describe('InfoLabelComponent', () => { let component: InfoLabelComponent; diff --git a/src/app/form-builder/info-label/info-label.component.ts b/src/app/form-builder/info-label/info-label.component.ts index b008ddf..7d7f6bb 100644 --- a/src/app/form-builder/info-label/info-label.component.ts +++ b/src/app/form-builder/info-label/info-label.component.ts @@ -1,8 +1,8 @@ import {Component} from '@angular/core'; -import {PetriNet, Transition} from '@netgrif/petriflow'; -import {ModelService} from '../../modeler/services/model/model.service'; import {Router} from '@angular/router'; +import {PetriNet, Transition} from '@netgrif/petriflow'; import {SelectedTransitionService} from '../../modeler/selected-transition.service'; +import {ModelService} from '../../modeler/services/model/model.service'; @Component({ selector: 'nab-info-label', diff --git a/src/app/form-builder/paper/paper.component.spec.ts b/src/app/form-builder/paper/paper.component.spec.ts index 267343e..5431299 100644 --- a/src/app/form-builder/paper/paper.component.spec.ts +++ b/src/app/form-builder/paper/paper.component.spec.ts @@ -1,10 +1,10 @@ -import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; - -import {PaperComponent} from './paper.component'; -import {FormBuilderModule} from '../form-builder.module'; import {CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA} from '@angular/core'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; import {RouterTestingModule} from '@angular/router/testing'; import {MaterialImportModule} from '../../material-import/material-import.module'; +import {FormBuilderModule} from '../form-builder.module'; + +import {PaperComponent} from './paper.component'; describe('PaperComponent', () => { let component: PaperComponent; diff --git a/src/app/material-import/material-import.module.ts b/src/app/material-import/material-import.module.ts index 7057e49..4eb978b 100644 --- a/src/app/material-import/material-import.module.ts +++ b/src/app/material-import/material-import.module.ts @@ -1,37 +1,37 @@ -import {NgModule} from '@angular/core'; import {NgxMatDatetimePickerModule} from '@angular-material-components/datetime-picker'; import {NgxMatMomentModule} from '@angular-material-components/moment-adapter'; import {DragDropModule} from '@angular/cdk/drag-drop'; -import {MatGridListModule} from '@angular/material/grid-list'; -import {MatSidenavModule} from '@angular/material/sidenav'; -import {MatListModule} from '@angular/material/list'; +import {NgModule} from '@angular/core'; +import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {MatAutocompleteModule} from '@angular/material/autocomplete'; import {MatButtonModule} from '@angular/material/button'; -import {MatIconModule} from '@angular/material/icon'; -import {MatInputModule} from '@angular/material/input'; -import {MatNativeDateModule, MatOptionModule} from '@angular/material/core'; -import {MatSelectModule} from '@angular/material/select'; -import {MatSlideToggleModule} from '@angular/material/slide-toggle'; -import {MatFormFieldModule} from '@angular/material/form-field'; -import {MatToolbarModule} from '@angular/material/toolbar'; -import {MatExpansionModule} from '@angular/material/expansion'; -import {MatTooltipModule} from '@angular/material/tooltip'; import {MatCardModule} from '@angular/material/card'; -import {MatDividerModule} from '@angular/material/divider'; -import {MatDialogModule} from '@angular/material/dialog'; +import {MatCheckboxModule} from '@angular/material/checkbox'; import {MatChipsModule} from '@angular/material/chips'; -import {MatAutocompleteModule} from '@angular/material/autocomplete'; +import {MatNativeDateModule, MatOptionModule} from '@angular/material/core'; +import {MatDatepickerModule} from '@angular/material/datepicker'; +import {MatDialogModule} from '@angular/material/dialog'; +import {MatDividerModule} from '@angular/material/divider'; +import {MatExpansionModule} from '@angular/material/expansion'; +import {MatFormFieldModule} from '@angular/material/form-field'; +import {MatGridListModule} from '@angular/material/grid-list'; +import {MatIconModule} from '@angular/material/icon'; +import {MatInputModule} from '@angular/material/input'; +import {MatListModule} from '@angular/material/list'; import {MatMenuModule} from '@angular/material/menu'; +import {MatPaginatorModule} from '@angular/material/paginator'; +import {MatProgressBarModule} from '@angular/material/progress-bar'; import {MatRadioModule} from '@angular/material/radio'; +import {MatSelectModule} from '@angular/material/select'; +import {MatSidenavModule} from '@angular/material/sidenav'; +import {MatSlideToggleModule} from '@angular/material/slide-toggle'; import {MatSnackBarModule} from '@angular/material/snack-bar'; +import {MatSortModule} from '@angular/material/sort'; import {MatTableModule} from '@angular/material/table'; -import {MatPaginatorModule} from '@angular/material/paginator'; -import {MatDatepickerModule} from '@angular/material/datepicker'; -import {MatProgressBarModule} from '@angular/material/progress-bar'; -import {MatCheckboxModule} from '@angular/material/checkbox'; -import {MatTreeModule} from '@angular/material/tree'; import {MatTabsModule} from '@angular/material/tabs'; -import {MatSortModule} from '@angular/material/sort'; -import {FormsModule, ReactiveFormsModule} from '@angular/forms'; +import {MatToolbarModule} from '@angular/material/toolbar'; +import {MatTooltipModule} from '@angular/material/tooltip'; +import {MatTreeModule} from '@angular/material/tree'; import {FlexModule} from '@ngbracket/ngx-layout'; @NgModule({ diff --git a/src/app/modeler/actions-mode/action-detail/action-detail.component.ts b/src/app/modeler/actions-mode/action-detail/action-detail.component.ts index 98ecf2b..193d949 100644 --- a/src/app/modeler/actions-mode/action-detail/action-detail.component.ts +++ b/src/app/modeler/actions-mode/action-detail/action-detail.component.ts @@ -1,19 +1,19 @@ -import {Component, OnDestroy, OnInit} from '@angular/core'; -import {ModelService} from '../../services/model/model.service'; -import {ActionsModeService} from '../actions-mode.service'; import {NestedTreeControl} from '@angular/cdk/tree'; -import {LeafNode, TreeNode} from '../action-editor/classes/leaf-node'; +import {Component, OnDestroy, OnInit} from '@angular/core'; import {MatTreeNestedDataSource} from '@angular/material/tree'; -import {ActionType, ChangeType} from '../action-editor/classes/editable-action'; +import {DataVariable, FunctionScope, PetriflowFunction, Role, Transition} from '@netgrif/petriflow'; +import {HistoryService} from '../../services/history/history.service'; +import {ModelService} from '../../services/model/model.service'; import {ActionChangedEvent} from '../action-editor/action-editor-list/action-editor-list.component'; +import {ActionEditorTreeService} from '../action-editor/action-editor-tree.service'; import {ActionEditorService} from '../action-editor/action-editor.service'; -import {DataVariable, FunctionScope, PetriflowFunction, Role, Transition} from '@netgrif/petriflow'; import {actions} from '../action-editor/classes/command-action'; +import {ActionType, ChangeType} from '../action-editor/classes/editable-action'; +import {LeafNode, TreeNode} from '../action-editor/classes/leaf-node'; +import {MasterItem} from '../action-editor/classes/master-item'; import {ActionsMasterDetailService} from '../actions-master-detail.setvice'; import {Scope} from '../actions-mode.component'; -import {MasterItem} from '../action-editor/classes/master-item'; -import {ActionEditorTreeService} from '../action-editor/action-editor-tree.service'; -import {HistoryService} from '../../services/history/history.service'; +import {ActionsModeService} from '../actions-mode.service'; @Component({ selector: 'nab-action-detail', diff --git a/src/app/modeler/actions-mode/action-editor/action-editor-list/action-editor-list.component.spec.ts b/src/app/modeler/actions-mode/action-editor/action-editor-list/action-editor-list.component.spec.ts index bf73e3a..5808e90 100644 --- a/src/app/modeler/actions-mode/action-editor/action-editor-list/action-editor-list.component.spec.ts +++ b/src/app/modeler/actions-mode/action-editor/action-editor-list/action-editor-list.component.spec.ts @@ -1,20 +1,20 @@ -import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; -import {ActionEditorListComponent} from './action-editor-list.component'; import {CommonModule} from '@angular/common'; -import {MaterialImportModule} from '../../../../material-import/material-import.module'; -import {CdkImportModule} from '../../../../cdk-import/cdk-import.module'; +import {Component} from '@angular/core'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; import {FormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {HotkeyModule} from 'angular2-hotkeys'; -import {ResizableModule} from 'angular-resizable-element'; import {MatCheckboxModule} from '@angular/material/checkbox'; -import {MatTabsModule} from '@angular/material/tabs'; import {MatSortModule} from '@angular/material/sort'; +import {MatTabsModule} from '@angular/material/tabs'; +import {RouterModule} from '@angular/router'; +import {ResizableModule} from 'angular-resizable-element'; +import {HotkeyModule} from 'angular2-hotkeys'; +import {CdkImportModule} from '../../../../cdk-import/cdk-import.module'; +import {MaterialImportModule} from '../../../../material-import/material-import.module'; import {ModelerModule} from '../../../modeler.module'; -import {Component} from '@angular/core'; -import {LeafNode} from '../classes/leaf-node'; import {ActionEditorService} from '../action-editor.service'; import {ActionType} from '../classes/editable-action'; +import {LeafNode} from '../classes/leaf-node'; +import {ActionEditorListComponent} from './action-editor-list.component'; describe('ActionEditorListComponent', () => { let component: ActionEditorListComponent; diff --git a/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-description/action-editor-menu-description.component.ts b/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-description/action-editor-menu-description.component.ts index 3f96259..499eff8 100644 --- a/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-description/action-editor-menu-description.component.ts +++ b/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-description/action-editor-menu-description.component.ts @@ -1,4 +1,4 @@ -import {Component, ElementRef, OnInit, ViewChild} from '@angular/core'; +import {Component, ElementRef, ViewChild} from '@angular/core'; import {CommandAction} from '../../classes/command-action'; @Component({ diff --git a/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-item/action-editor-menu-item.component.ts b/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-item/action-editor-menu-item.component.ts index 67eba75..fe8ee87 100644 --- a/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-item/action-editor-menu-item.component.ts +++ b/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-item/action-editor-menu-item.component.ts @@ -1,8 +1,8 @@ import {AfterViewChecked, Component, Input, ViewChild} from '@angular/core'; -import {MenuItemConfiguration} from './menu-item-configuration'; import {MatMenu, MatMenuTrigger} from '@angular/material/menu'; import {ActionItemProviderService} from '../../action-item-provider.service'; import {MenuItem} from './menu-item'; +import {MenuItemConfiguration} from './menu-item-configuration'; @Component({ selector: 'nab-action-editor-menu-item', diff --git a/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-item/menu-item-configuration.ts b/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-item/menu-item-configuration.ts index d39d894..97bc79b 100644 --- a/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-item/menu-item-configuration.ts +++ b/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu-item/menu-item-configuration.ts @@ -1,6 +1,6 @@ -import {MenuItem} from './menu-item'; import {ActionEditorComponent} from '../../action-editor/action-editor.component'; import {FunctionEditorComponent} from '../../function-editor/function-editor.component'; +import {MenuItem} from './menu-item'; export class MenuItemConfiguration { private _title: string; diff --git a/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu.component.ts b/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu.component.ts index 7314708..ffe7fac 100644 --- a/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu.component.ts +++ b/src/app/modeler/actions-mode/action-editor/action-editor-menu/action-editor-menu.component.ts @@ -1,10 +1,10 @@ import {Component, ElementRef, Input, OnInit, ViewChild} from '@angular/core'; -import {actions, CommandAction, CommandActions} from '../classes/command-action'; +import {ModelService} from '../../../services/model/model.service'; import {ActionItemProviderService} from '../action-item-provider.service'; +import {actions, CommandAction, CommandActions} from '../classes/command-action'; import { - ActionEditorMenuDescriptionComponent + ActionEditorMenuDescriptionComponent, } from './action-editor-menu-description/action-editor-menu-description.component'; -import {ModelService} from '../../../services/model/model.service'; @Component({ selector: 'nab-action-editor-menu', @@ -37,7 +37,7 @@ export class ActionEditorMenuComponent implements OnInit { } addTextToEditor(text: string): void { - this.actionItemProviderService.insertText(this.editor, `${text}\n`, 'command'); + this.actionItemProviderService.insertText(this.editor, !!text ? `${text}\n` : text, 'command'); } handleClick(item: CommandAction): void { diff --git a/src/app/modeler/actions-mode/action-editor/action-editor.module.ts b/src/app/modeler/actions-mode/action-editor/action-editor.module.ts index c2ddd16..3711922 100644 --- a/src/app/modeler/actions-mode/action-editor/action-editor.module.ts +++ b/src/app/modeler/actions-mode/action-editor/action-editor.module.ts @@ -1,24 +1,24 @@ -import {NgModule} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {ActionEditorListComponent} from './action-editor-list/action-editor-list.component'; -import {BrowserModule} from '@angular/platform-browser'; +import {NgModule} from '@angular/core'; import {FormsModule} from '@angular/forms'; -import {tokenProvider} from './definitions/tokens'; -import {actionCompletionProvider} from './definitions/completion-provider'; -import {ActionEditorMenuComponent} from './action-editor-menu/action-editor-menu.component'; +import {BrowserModule} from '@angular/platform-browser'; +import {FlexModule} from '@ngbracket/ngx-layout'; +import {ResizableModule} from 'angular-resizable-element'; +import {MonacoEditorModule, NgxMonacoEditorConfig} from 'ngx-monaco-editor-v2'; +import {MaterialImportModule} from '../../../material-import/material-import.module'; +import {ActionEditorListComponent} from './action-editor-list/action-editor-list.component'; import { - ActionEditorMenuDescriptionComponent + ActionEditorMenuDescriptionComponent, } from './action-editor-menu/action-editor-menu-description/action-editor-menu-description.component'; -import {MaterialImportModule} from '../../../material-import/material-import.module'; -import {ActionEditorComponent} from './action-editor/action-editor.component'; import { - ActionEditorMenuItemComponent + ActionEditorMenuItemComponent, } from './action-editor-menu/action-editor-menu-item/action-editor-menu-item.component'; import {SafeHtmlPipe} from './action-editor-menu/action-editor-menu-item/safe-html.pipe'; +import {ActionEditorMenuComponent} from './action-editor-menu/action-editor-menu.component'; +import {ActionEditorComponent} from './action-editor/action-editor.component'; +import {actionCompletionProvider} from './definitions/completion-provider'; +import {tokenProvider} from './definitions/tokens'; import {FunctionEditorComponent} from './function-editor/function-editor.component'; -import {MonacoEditorModule, NgxMonacoEditorConfig} from 'ngx-monaco-editor-v2'; -import {FlexModule} from '@ngbracket/ngx-layout'; -import {ResizableModule} from 'angular-resizable-element'; declare var monaco: any; diff --git a/src/app/modeler/actions-mode/action-editor/action-editor.service.ts b/src/app/modeler/actions-mode/action-editor/action-editor.service.ts index 0ad975f..129dfc3 100644 --- a/src/app/modeler/actions-mode/action-editor/action-editor.service.ts +++ b/src/app/modeler/actions-mode/action-editor/action-editor.service.ts @@ -1,26 +1,27 @@ import {Injectable} from '@angular/core'; -import {ActionType, ChangeType, EditableAction} from './classes/editable-action'; -import {ActionGroup} from './classes/action-group'; import { - Action, - CaseEvent, - CaseEventType, - DataEvent, - DataEventType, - DataRef, - DataVariable, - Event, - EventPhase, - PetriNet, - ProcessEvent, - ProcessEventType, - Role, - RoleEvent, - RoleEventType, - Transition, - TransitionEvent, - TransitionEventType + Action, + CaseEvent, + CaseEventType, + DataEvent, + DataEventType, + DataRef, + DataVariable, + Event, + EventPhase, + PetriNet, + ProcessEvent, + ProcessEventType, + Role, + RoleEvent, + RoleEventType, + Transition, + TransitionEvent, + TransitionEventType, } from '@netgrif/petriflow'; +import {ModelService} from '../../services/model/model.service'; +import {ActionGroup} from './classes/action-group'; +import {ActionType, ChangeType, EditableAction} from './classes/editable-action'; import {MasterItem} from './classes/master-item'; import {EventType} from './event-type'; @@ -32,18 +33,17 @@ export class ActionEditorService { public editedActions: Array; public historySave: boolean; private _datarefMap: Map; - private _lastUsedId: number; private _currentlyEdited: Transition | DataVariable | PetriNet | Role; - constructor() { + constructor( + private _modelService: ModelService, + ) { this.editedActions = []; - this._lastUsedId = 0; this._datarefMap = new Map(); } public nextId(): string { - this._lastUsedId++; - return String(this._lastUsedId); + return this._modelService.nextActionId(); } public populateEditedActionsFromTransition(transition: Transition): void { @@ -116,50 +116,10 @@ export class ActionEditorService { private loadAction(action: Action, actionType: ActionType, eventType: EventType, phase: EventPhase, parentDataRefId?: string): EditableAction { if (action.id === undefined || action.id === null) { action.id = this.nextId(); - } else { - this.updateLastId(action.id); } return new EditableAction(action.id, actionType, false, action.definition, eventType, phase, parentDataRefId); } - private updateLastId(id: string): void { - const parsedId = parseInt(id, 10); - this._lastUsedId = Math.max(this._lastUsedId, isNaN(parsedId) ? 0 : parsedId); - } - - public updateIds(model: PetriNet): void { - model.getProcessEvents().forEach(e => { - e.preActions.forEach(a => this.updateLastId(a.id)); - e.postActions.forEach(a => this.updateLastId(a.id)); - }); - model.getCaseEvents().forEach(e => { - e.preActions.forEach(a => this.updateLastId(a.id)); - e.postActions.forEach(a => this.updateLastId(a.id)); - }); - model.getRoles().forEach(r => { - r.getEvents().forEach(e => { - e.preActions.forEach(a => this.updateLastId(a.id)); - e.postActions.forEach(a => this.updateLastId(a.id)); - }); - }); - model.getTransitions().forEach(t => { - t.eventSource.getEvents().forEach(e => { - e.preActions.forEach(a => this.updateLastId(a.id)); - e.postActions.forEach(a => this.updateLastId(a.id)); - }); - t.dataGroups.forEach(g => g.getDataRefs().forEach(d => d.getEvents().forEach(e => { - e.preActions.forEach(a => this.updateLastId(a.id)); - e.postActions.forEach(a => this.updateLastId(a.id)); - }))); - }); - model.getDataSet().forEach(d => { - d.getEvents().forEach(e => { - e.preActions.forEach(a => this.updateLastId(a.id)); - e.postActions.forEach(a => this.updateLastId(a.id)); - }); - }); - } - public saveActionChange(changedAction: EditableAction) { this.saveAction(changedAction); changedAction.commitChanges(); diff --git a/src/app/modeler/actions-mode/action-editor/action-editor/action-editor.component.spec.ts b/src/app/modeler/actions-mode/action-editor/action-editor/action-editor.component.spec.ts index 4053573..9c7c5fc 100644 --- a/src/app/modeler/actions-mode/action-editor/action-editor/action-editor.component.spec.ts +++ b/src/app/modeler/actions-mode/action-editor/action-editor/action-editor.component.spec.ts @@ -1,19 +1,19 @@ -import {waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing'; -import {ActionEditorComponent} from './action-editor.component'; import {CommonModule} from '@angular/common'; -import {MaterialImportModule} from '../../../../material-import/material-import.module'; -import {CdkImportModule} from '../../../../cdk-import/cdk-import.module'; +import {Component} from '@angular/core'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; // import {FlexLayoutModule} from '@angular/flex-layout'; import {FormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {HotkeyModule} from 'angular2-hotkeys'; -import {ResizableModule} from 'angular-resizable-element'; import {MatCheckboxModule} from '@angular/material/checkbox'; -import {MatTabsModule} from '@angular/material/tabs'; import {MatSortModule} from '@angular/material/sort'; -import {Component} from '@angular/core'; -import {ActionType, EditableAction} from '../classes/editable-action'; +import {MatTabsModule} from '@angular/material/tabs'; +import {RouterModule} from '@angular/router'; +import {ResizableModule} from 'angular-resizable-element'; +import {HotkeyModule} from 'angular2-hotkeys'; import {MonacoEditorModule} from 'ngx-monaco-editor-v2'; +import {CdkImportModule} from '../../../../cdk-import/cdk-import.module'; +import {MaterialImportModule} from '../../../../material-import/material-import.module'; +import {ActionType, EditableAction} from '../classes/editable-action'; +import {ActionEditorComponent} from './action-editor.component'; describe('ActionEditorComponent', () => { let component: ActionEditorComponent; diff --git a/src/app/modeler/actions-mode/action-editor/action-editor/action-editor.component.ts b/src/app/modeler/actions-mode/action-editor/action-editor/action-editor.component.ts index ede4630..a0a25a7 100644 --- a/src/app/modeler/actions-mode/action-editor/action-editor/action-editor.component.ts +++ b/src/app/modeler/actions-mode/action-editor/action-editor/action-editor.component.ts @@ -1,17 +1,17 @@ import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core'; -import {ChangeType, EditableAction} from '../classes/editable-action'; -import {ActionEditorService} from '../action-editor.service'; import {FormControl} from '@angular/forms'; +import {MatButton} from '@angular/material/button'; import {MatDialog} from '@angular/material/dialog'; -import {ActionChangedEvent} from '../action-editor-list/action-editor-list.component'; -import {LeafNode} from '../classes/leaf-node'; +import {MatMenuTrigger} from '@angular/material/menu'; import {MatSidenav} from '@angular/material/sidenav'; -import {MatButton} from '@angular/material/button'; import {DialogDeleteComponent} from '../../../../dialogs/dialog-delete/dialog-delete.component'; -import {MenuItemConfiguration} from '../action-editor-menu/action-editor-menu-item/menu-item-configuration'; -import {MenuItem} from '../action-editor-menu/action-editor-menu-item/menu-item'; -import {MatMenuTrigger} from '@angular/material/menu'; import {ModelService} from '../../../services/model/model.service'; +import {ActionChangedEvent} from '../action-editor-list/action-editor-list.component'; +import {MenuItem} from '../action-editor-menu/action-editor-menu-item/menu-item'; +import {MenuItemConfiguration} from '../action-editor-menu/action-editor-menu-item/menu-item-configuration'; +import {ActionEditorService} from '../action-editor.service'; +import {ChangeType, EditableAction} from '../classes/editable-action'; +import {LeafNode} from '../classes/leaf-node'; @Component({ selector: 'nab-action-editor', diff --git a/src/app/modeler/actions-mode/action-editor/definitions/tokens.ts b/src/app/modeler/actions-mode/action-editor/definitions/tokens.ts index eaba640..33ec293 100644 --- a/src/app/modeler/actions-mode/action-editor/definitions/tokens.ts +++ b/src/app/modeler/actions-mode/action-editor/definitions/tokens.ts @@ -1,142 +1,272 @@ -export function tokenProvider() { - return { - defaultToken: '', - tokenPostfix: '.java', - - keywords: [ - 'abstract', 'as', 'continue', 'for', 'new', 'switch', 'assert', 'default', - 'goto', 'package', 'synchronized', 'do', 'if', 'private', 'def', 'in', - 'this', 'break', 'implements', 'protected', 'throw', 'null', - 'else', 'import', 'public', 'throws', 'case', 'enum', 'instanceof', 'return', - 'transient', 'catch', 'extends', 'try', 'final', 'threadsafe', - 'interface', 'static', 'void', 'class', 'finally', 'strictfp', - 'volatile', 'const', 'native', 'super', 'while', 'true', 'false', - 'DEFAULTLANG', 'MILLISECONDS', 'SECONDS', 'MINUTES', 'HOURS', 'DAYS', - 'WEEKS', 'MONTHS', 'YEARS', 'DATEFORMAT_DEFAULT', - ], - typeKeywords: [ - 'boolean', 'double', 'byte', 'int', 'short', 'char', 'void', 'long', 'float', 'String', 'f.', 't.', - ], - actionsKeywords: [ - 'log', 'UNCHANGED_VALUE', 'ALWAYS_GENERATE', 'ONCE_GENERATE', 'fieldFactory', 'taskService', - 'dataService', 'workflowService', 'userService', 'petriNetService', 'async', 'groupService', - 'memberService', 'pdfGenerator', 'mailService', 'nextGroupService', 'registrationService', - 'mailAttemptService', 'useCase', 'task', 'map', 'action', 'actionsRunner', 'changedFieldsTree', - ], - functions: [ - 'init', 'copyBehavior', 'make', 'saveChangedValue', 'saveChangedChoices', 'saveChangedAllowedNets', - 'saveChangedOptions', 'putIntoChangedFields', 'addAttributeToChangedField', 'execute', 'executeTasks', - 'executeTask', 'searchCases', 'change', 'changeFieldValue', 'generate', 'changeCaseProperty', 'cache', - 'cacheFree', 'pcs', 'orsr', 'findCases', 'findCase', 'createCase', 'assignTask', 'assignTasks', - 'cancelTask', 'cancelTasks', 'finishTask', 'finishTasks', 'findTasks', 'findTask', 'getTaskId', - 'assignRole', 'setData', 'setDataWithPropagation', 'makeDataSetIntoChangedFields', 'getData', - 'mapData', 'findOrganisation', 'createOrganisation', 'deleteOrganisation', 'saveOrganisation', - 'removeMember', 'addMember', 'findMember', 'loggedUser', 'generatePDF', 'generatePdfWithTemplate', - 'generatePdfWithLocale', 'sendMail', 'changeUser', 'inviteUser', 'deleteUser', - ], - - operators: [ - '=', '>', '<', '!', '~', '?', ':', - '==', '<=', '>=', '!=', '&&', '||', '++', '--', - '+', '-', '*', '/', '&', '|', '^', '%', '<<', - '>>', '>>>', '+=', '-=', '*=', '/=', '&=', '|=', - '^=', '%=', '<<=', '>>=', '>>>=', - ], - - // we include these common regular expressions - symbols: /[=>/, 'errorSyntax'], - // whitespace - {include: '@whitespace'}, - - // delimiters and operators - [/[{}()\[\]]/, '@brackets'], - [/[<>](?!@symbols)/, '@brackets'], - [/@symbols/, { - cases: { - '@operators': 'delimiter', - '@default': '', - }, - }], - - // @ annotations. - [/@\s*[a-zA-Z_\$][\w\$]*/, 'annotation'], - - // numbers - [/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/, 'number.float'], - [/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/, 'number.float'], - [/0[xX](@hexdigits)[Ll]?/, 'number.hex'], - [/0(@octaldigits)[Ll]?/, 'number.octal'], - [/0[bB](@binarydigits)[Ll]?/, 'number.binary'], - [/(@digits)[fFdD]/, 'number.float'], - [/(@digits)[lL]?/, 'number'], - - // delimiter: after number because of .\d floats - [/[;,.]/, 'delimiter'], +const bracketTokens = [ + { + open: "[", + close: "]", + token: "delimiter.square", + }, + { + open: "(", + close: ")", + token: "delimiter.parenthesis", + }, + { + open: "{", + close: "}", + token: "delimiter.curly", + }, +]; - // strings - [/"([^"\\]|\\.)*$/, 'string.invalid'], // non-teminated string - [/"/, 'string', '@string'], +function getTokens(tokens: string, divider = "|"): string[] { + return tokens.split(divider); +} - // characters - [/'[^\\']'/, 'string'], - [/(')(@escapes)(')/, ['string', 'string.escape', 'string']], - [/'/, 'string.invalid'], - ], +export function tokenProvider() { + return { + brackets: bracketTokens, + tokenPostfix: ".groovy", + keywords: getTokens( + "assert|with|abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|def|float|native|super|while|in|as" + ), + typeKeywords: getTokens( + "def|Long|Integer|Short|Byte|Double|Number|Float|Character|Boolean|StackTraceElement|Appendable|StringBuffer|Iterable|ThreadGroup|Runnable|Thread|IllegalMonitorStateException|StackOverflowError|OutOfMemoryError|VirtualMachineError|ArrayStoreException|ClassCastException|LinkageError|NoClassDefFoundError|ClassNotFoundException|RuntimeException|Exception|ThreadDeath|Error|Throwable|System|ClassLoader|Cloneable|Class|CharSequence|Comparable|String|Object" + ), + constants: getTokens("null|Infinity|NaN|undefined|true|false"), + builtinFunctions: getTokens( + "AbstractMethodError|AssertionError|ClassCircularityError|ClassFormatError|Deprecated|EnumConstantNotPresentException|ExceptionInInitializerError|IllegalAccessError|IllegalThreadStateException|InstantiationError|InternalError|NegativeArraySizeException|NoSuchFieldError|Override|Process|ProcessBuilder|SecurityManager|StringIndexOutOfBoundsException|SuppressWarnings|TypeNotPresentException|UnknownError|UnsatisfiedLinkError|UnsupportedClassVersionError|VerifyError|InstantiationException|IndexOutOfBoundsException|ArrayIndexOutOfBoundsException|CloneNotSupportedException|NoSuchFieldException|IllegalArgumentException|NumberFormatException|SecurityException|Void|InheritableThreadLocal|IllegalStateException|InterruptedException|NoSuchMethodException|IllegalAccessException|UnsupportedOperationException|Enum|StrictMath|Package|Compiler|Readable|Runtime|StringBuilder|Math|IncompatibleClassChangeError|NoSuchMethodError|ThreadLocal|RuntimePermission|ArithmeticException|NullPointerException" + ), + operators: [ + ".", + ".&", + ".@", + "?.", + "*", + "*.", + "*:", + "~", + "!", + "++", + "--", + "**", + "+", + "-", + "*", + "/", + "%", + "<<", + ">>", + ">>>", + "..", + "..<", + "<", + "<=", + ">", + ">", + "==", + "!=", + "<=>", + "===", + "!==", + "=~", + "==~", + "^", + "|", + "&&", + "||", + "?", + ":", + "?:", + "=", + "**=", + "*=", + "/=", + "%=", + "+=", + "-=", + "<<=", + ">>=", + ">>>=", + "&=", + "^=", + "|=", + "?=", + ], + symbols: /[=>/, 'comment', '@pop'], - [/[^-]+/, 'comment.content'], - [/./, 'comment.content'], + tokenizer: { + root: [ + {include: "@whitespace"}, + // NAB-362 - regex breaks line comments like: /* comment */ + // [ + // /\/(?=([^\\/]|\\.)+\/([dgimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/, + // {token: "regexp", bracket: "@open", next: "@regexp"}, + // ], + {include: "@comments"}, + {include: "@numbers"}, + {include: "common"}, + [/[;,.]/, "delimiter"], + [/[(){}[\]]/, "@brackets"], + [ + /[a-zA-Z_$]\w*/, + { + cases: { + "@keywords": "keyword", + "@typeKeywords": "type", + "@constants": "constant.groovy", + "@builtinFunctions": "constant.other.color", + "@default": "identifier", + }, + }, + ], + // @ annotations. + [/@\s*[a-zA-Z_\$][\w\$]*/, 'annotation'], + [ + /@symbols/, + { + cases: { + "@operators": "operator", + "@default": "", + }, + }, + ], + ], + common: [ + // delimiters and operators + [/[()[\]]/, "@brackets"], + // NAB-362 - breaks generic methods like: def T instanceMethod + // [/[<>](?!@symbols)/, "@brackets"], + [ + /@symbols/, + { + cases: { + "@operators": "delimiter", + "@default": "", + }, + }, + ], + // NAB-362 - regex breaks line comments like: /* comment */ + // [ + // /\/(?=([^\\/]|\\.)+\/([gimsuy]*)(\s*)(\.|;|\/|,|\)|\]|\}|$))/, + // {token: "regexp", bracket: "@open", next: "@regexp"}, + // ], - ], - // Identical copy of comment above, except for the addition of .doc - javadoc: [ - [/[^\/*]+/, 'comment.doc'], - // [/\/\*/, 'comment.doc', '@push' ], // nested comment not allowed :-( - [/\/\*/, 'comment.doc.invalid'], - [/\*\//, 'comment.doc', '@pop'], - [/[\/*]/, 'comment.doc'], - ], + // delimiter: after number because of .\d floats + [/[;,.]/, "delimiter"], - string: [ - [/[^\\"]+/, 'string'], - [/@escapes/, 'string.escape'], - [/\\./, 'string.escape.invalid'], - [/"/, 'string', '@pop'], - ], - }, - }; + // strings + [/"([^"\\]|\\.)*$/, "string.invalid"], + [/'([^'\\]|\\.)*$/, "string.invalid"], + [/"/, "string", "@string_double"], + [/'/, "string", "@string_single"], + ], + whitespace: [[/\s+/, "white"]], + comments: [ + [/\/\/.*/, "comment"], + [ + /\/\*/, + { + token: "comment.quote", + next: "@comment", + }, + ], + ], + comment: [ + [/[^*/]+/, "comment"], + [ + /\*\//, + { + token: "comment.quote", + next: "@pop", + }, + ], + [/./, "comment"], + ], + commentAnsi: [ + [ + /\/\*/, + { + token: "comment.quote", + next: "@comment", + }, + ], + [/[^*/]+/, "comment"], + [ + /\*\//, + { + token: "comment.quote", + next: "@pop", + }, + ], + [/./, "comment"], + ], + numbers: [ + [/[+-]?\d+(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?f?\b/, "number.float"], + [/[+-]?(?:0[obx])?\d+(?:u?[lst]?)?\b/, "number"], + ], + // NAB-362 - regex breaks line comments like: /* comment */ + /* + regexp: [ + [/(\{)(\d+(?:,\d*)?)(\})/, ["regexp.escape.control", "regexp.escape.control", "regexp.escape.control"]], + [ + /(\[)(\^?)(?=(?:[^\]\\/]|\\.)+)/, + // @ts-ignore + ["regexp.escape.control", {token: "regexp.escape.control", next: "@regexrange"}], + ], + [/(\()(\?:|\?=|\?!)/, ["regexp.escape.control", "regexp.escape.control"]], + [/[()]/, "regexp.escape.control"], + [/@regexpctl/, "regexp.escape.control"], + [/[^\\/]/, "regexp"], + [/@regexpesc/, "regexp.escape"], + [/\\\./, "regexp.invalid"], + // @ts-ignore + [/(\/)([gimsuy]*)/, [{token: "regexp", bracket: "@close", next: "@pop"}, "keyword.other"]], + ], + regexrange: [ + [/-/, "regexp.escape.control"], + [/\^/, "regexp.invalid"], + [/@regexpesc/, "regexp.escape"], + [/[^\]]/, "regexp"], + [/\]/, {token: "regexp.escape.control", next: "@pop", bracket: "@close"}], + ],*/ + embedded: [ + [ + /([^@]|^)([@]{4})*[@]{2}([@]([^@]|$)|[^@]|$)/, + { + token: "@rematch", + next: "@pop", + nextEmbedded: "@pop", + }, + ], + ], + string_double: [ + [/\$\{/, {token: "delimiter.bracket", next: "@bracketCounting"}], + [/[^\\"$]+/, "string"], + [/[^\\"]+/, "string"], + [/@escapes/, "string.escape"], + [/\\./, "string.escape.invalid"], + [/"/, "string", "@pop"], + ], + string_single: [ + [/[^\\']+/, "string"], + [/@escapes/, "string.escape"], + [/\\./, "string.escape.invalid"], + [/'/, "string", "@pop"], + ], + string_backtick: [ + [/\$\{/, {token: "delimiter.bracket", next: "@bracketCounting"}], + [/[^\\"$]+/, "string"], + [/@escapes/, "string.escape"], + [/\\./, "string.escape.invalid"], + [/"/, "string", "@pop"], + ], + bracketCounting: [ + [/\{/, "delimiter.bracket", "@bracketCounting"], + [/\}/, "delimiter.bracket", "@pop"], + {include: "common"}, + ], + }, + }; } diff --git a/src/app/modeler/actions-mode/action-editor/function-editor/function-editor.component.ts b/src/app/modeler/actions-mode/action-editor/function-editor/function-editor.component.ts index af3eb19..147a574 100644 --- a/src/app/modeler/actions-mode/action-editor/function-editor/function-editor.component.ts +++ b/src/app/modeler/actions-mode/action-editor/function-editor/function-editor.component.ts @@ -1,14 +1,14 @@ import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core'; -import {MatSidenav} from '@angular/material/sidenav'; +import {FormControl} from '@angular/forms'; import {MatButton} from '@angular/material/button'; import {MatMenuTrigger} from '@angular/material/menu'; -import {FormControl} from '@angular/forms'; +import {MatSidenav} from '@angular/material/sidenav'; +import {PetriflowFunction} from '@netgrif/petriflow'; +import {ModelService} from '../../../services/model/model.service'; +import {MenuItem} from '../action-editor-menu/action-editor-menu-item/menu-item'; import {MenuItemConfiguration} from '../action-editor-menu/action-editor-menu-item/menu-item-configuration'; import {ActionEditorService} from '../action-editor.service'; -import {MenuItem} from '../action-editor-menu/action-editor-menu-item/menu-item'; -import {PetriflowFunction} from '@netgrif/petriflow'; import {actions} from '../classes/command-action'; -import {ModelService} from '../../../services/model/model.service'; @Component({ selector: 'nab-function-editor', diff --git a/src/app/modeler/actions-mode/action-master/action-master-item/action-master-item.component.ts b/src/app/modeler/actions-mode/action-master/action-master-item/action-master-item.component.ts index e76ee15..aef5295 100644 --- a/src/app/modeler/actions-mode/action-master/action-master-item/action-master-item.component.ts +++ b/src/app/modeler/actions-mode/action-master/action-master-item/action-master-item.component.ts @@ -1,7 +1,7 @@ import {Component, Inject} from '@angular/core'; -import {MASTER_ITEM, MASTER_SERVICE} from '../../../components/master-detail/main-master-item/master-injection-tokens'; import {DataVariable, Role, Transition} from '@netgrif/petriflow'; 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'; @Component({ selector: 'nab-action-master-item', diff --git a/src/app/modeler/actions-mode/action-master/action-master.component.ts b/src/app/modeler/actions-mode/action-master/action-master.component.ts index 5763af5..109f590 100644 --- a/src/app/modeler/actions-mode/action-master/action-master.component.ts +++ b/src/app/modeler/actions-mode/action-master/action-master.component.ts @@ -1,18 +1,14 @@ +import {ComponentType} from '@angular/cdk/overlay'; import {Component, Injector, OnInit} from '@angular/core'; -import {PageMasterComponent} from '../../components/master-detail/page-master.component'; -import {ActionsModeService} from '../actions-mode.service'; import {Sort} from '@angular/material/sort'; -import {DataActionsTool} from '../tools/data-actions-tool'; -import {TransitionActionsTool} from '../tools/transition-actions-tool'; -import {RoleActionsTool} from '../tools/role-actions-tool'; -import {ComponentType} from '@angular/cdk/overlay'; -import {ActionMasterItemComponent} from './action-master-item/action-master-item.component'; -import {FunctionMasterItemComponent} from './function-master-item/function-master-item.component'; +import {PageMasterComponent} from '../../components/master-detail/page-master.component'; +import {MasterItem} from '../action-editor/classes/master-item'; import {ActionsMasterDetailService} from '../actions-master-detail.setvice'; +import {ActionsModeService} from '../actions-mode.service'; import {FunctionsTool} from '../tools/functions-tool'; import {ProcessActionsTool} from '../tools/process-actions-tool'; -import {ModelerConfig} from '../../modeler-config'; -import {MasterItem} from '../action-editor/classes/master-item'; +import {ActionMasterItemComponent} from './action-master-item/action-master-item.component'; +import {FunctionMasterItemComponent} from './function-master-item/function-master-item.component'; @Component({ selector: 'nab-action-master', diff --git a/src/app/modeler/actions-mode/action-master/function-master-item/function-master-item.component.ts b/src/app/modeler/actions-mode/action-master/function-master-item/function-master-item.component.ts index 398156d..c09e03c 100644 --- a/src/app/modeler/actions-mode/action-master/function-master-item/function-master-item.component.ts +++ b/src/app/modeler/actions-mode/action-master/function-master-item/function-master-item.component.ts @@ -1,9 +1,9 @@ import {Component, Inject} from '@angular/core'; -import {MASTER_ITEM, MASTER_SERVICE} from '../../../components/master-detail/main-master-item/master-injection-tokens'; +import {MatDialog} from '@angular/material/dialog'; import {PetriflowFunction} from '@netgrif/petriflow'; -import {AbstractMasterDetailService} from '../../../components/master-detail/abstract-master-detail.service'; import {DialogDeleteComponent} from '../../../../dialogs/dialog-delete/dialog-delete.component'; -import {MatDialog} from '@angular/material/dialog'; +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'; @Component({ selector: 'nab-function-master-item', diff --git a/src/app/modeler/actions-mode/actions-master-detail.setvice.ts b/src/app/modeler/actions-mode/actions-master-detail.setvice.ts index 81f50c8..841bedf 100644 --- a/src/app/modeler/actions-mode/actions-master-detail.setvice.ts +++ b/src/app/modeler/actions-mode/actions-master-detail.setvice.ts @@ -1,21 +1,17 @@ import {Injectable} from '@angular/core'; +import {Sort} from '@angular/material/sort'; +import {DataVariable, FunctionScope, PetriflowFunction, Role, Transition} from '@netgrif/petriflow'; import {AbstractMasterDetailService} from '../components/master-detail/abstract-master-detail.service'; -import {DataVariable, - FunctionScope, - PetriflowFunction, - Role, - Transition} from '@netgrif/petriflow'; +import {ModelerConfig} from '../modeler-config'; import {ModelService} from '../services/model/model.service'; -import {Sort} from '@angular/material/sort'; +import {ActionType} from './action-editor/classes/editable-action'; import {MasterItem} from './action-editor/classes/master-item'; import {ActionsModeService} from './actions-mode.service'; import {DataActionsTool} from './tools/data-actions-tool'; -import {TransitionActionsTool} from './tools/transition-actions-tool'; -import {ActionType} from './action-editor/classes/editable-action'; +import {FunctionsTool} from './tools/functions-tool'; import {ProcessActionsTool} from './tools/process-actions-tool'; import {RoleActionsTool} from './tools/role-actions-tool'; -import {FunctionsTool} from './tools/functions-tool'; -import {ModelerConfig} from '../modeler-config'; +import {TransitionActionsTool} from './tools/transition-actions-tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/actions-mode/actions-mode.component.spec.ts b/src/app/modeler/actions-mode/actions-mode.component.spec.ts index f82c2b3..cfe5fc0 100644 --- a/src/app/modeler/actions-mode/actions-mode.component.spec.ts +++ b/src/app/modeler/actions-mode/actions-mode.component.spec.ts @@ -1,19 +1,19 @@ -import {waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing'; -import {ActionsModeComponent} from './actions-mode.component'; -import {HttpClientModule} from '@angular/common/http'; -import {MaterialImportModule} from '../../material-import/material-import.module'; import {CommonModule} from '@angular/common'; -import {CdkImportModule} from '../../cdk-import/cdk-import.module'; +import {HttpClientModule} from '@angular/common/http'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; import {FormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {HotkeyModule} from 'angular2-hotkeys'; -import {ResizableModule} from 'angular-resizable-element'; import {MatCheckboxModule} from '@angular/material/checkbox'; -import {MatTabsModule} from '@angular/material/tabs'; import {MatSortModule} from '@angular/material/sort'; -import {ModelerModule} from '../modeler.module'; +import {MatTabsModule} from '@angular/material/tabs'; import {NoopAnimationsModule} from '@angular/platform-browser/animations'; +import {RouterModule} from '@angular/router'; +import {ResizableModule} from 'angular-resizable-element'; +import {HotkeyModule} from 'angular2-hotkeys'; import {MonacoEditorModule} from 'ngx-monaco-editor-v2'; +import {CdkImportModule} from '../../cdk-import/cdk-import.module'; +import {MaterialImportModule} from '../../material-import/material-import.module'; +import {ModelerModule} from '../modeler.module'; +import {ActionsModeComponent} from './actions-mode.component'; describe('ActionsModeComponent', () => { let component: ActionsModeComponent; diff --git a/src/app/modeler/actions-mode/actions-mode.component.ts b/src/app/modeler/actions-mode/actions-mode.component.ts index 9edc45c..731b403 100644 --- a/src/app/modeler/actions-mode/actions-mode.component.ts +++ b/src/app/modeler/actions-mode/actions-mode.component.ts @@ -1,11 +1,9 @@ -import {Component} from '@angular/core'; -import { - FunctionScope, -} from '@netgrif/petriflow'; import {ComponentType} from '@angular/cdk/overlay'; +import {Component} from '@angular/core'; +import {FunctionScope} from '@netgrif/petriflow'; import {ActionDetailComponent} from './action-detail/action-detail.component'; -import {ActionsMasterDetailService} from './actions-master-detail.setvice'; import {ActionMasterComponent} from './action-master/action-master.component'; +import {ActionsMasterDetailService} from './actions-master-detail.setvice'; export interface Scope { viewValue: string; diff --git a/src/app/modeler/actions-mode/actions-mode.service.ts b/src/app/modeler/actions-mode/actions-mode.service.ts index 1e9c5c2..be7ea62 100644 --- a/src/app/modeler/actions-mode/actions-mode.service.ts +++ b/src/app/modeler/actions-mode/actions-mode.service.ts @@ -1,16 +1,16 @@ import {Injectable, Injector} from '@angular/core'; import {TutorialService} from '../../tutorial/tutorial-service'; -import {Mode} from '../control-panel/modes/mode'; import {ControlPanelButton} from '../control-panel/control-panel-button'; import {ControlPanelIcon} from '../control-panel/control-panel-icon'; -import {ToolGroup} from '../control-panel/tools/tool-group'; +import {Mode} from '../control-panel/modes/mode'; import {ModeService} from '../control-panel/modes/mode-component/mode.service'; +import {Tool} from '../control-panel/tools/tool'; +import {ToolGroup} from '../control-panel/tools/tool-group'; import {DataActionsTool} from './tools/data-actions-tool'; -import {TransitionActionsTool} from './tools/transition-actions-tool'; -import {RoleActionsTool} from './tools/role-actions-tool'; -import {ProcessActionsTool} from './tools/process-actions-tool'; import {FunctionsTool} from './tools/functions-tool'; -import {Tool} from '../control-panel/tools/tool'; +import {ProcessActionsTool} from './tools/process-actions-tool'; +import {RoleActionsTool} from './tools/role-actions-tool'; +import {TransitionActionsTool} from './tools/transition-actions-tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/actions-mode/tools/data-actions-tool.ts b/src/app/modeler/actions-mode/tools/data-actions-tool.ts index 0aa4d85..a69c004 100644 --- a/src/app/modeler/actions-mode/tools/data-actions-tool.ts +++ b/src/app/modeler/actions-mode/tools/data-actions-tool.ts @@ -1,7 +1,7 @@ -import {Tool} from '../../control-panel/tools/tool'; +import {Injectable} from '@angular/core'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {Injectable} from '@angular/core'; +import {Tool} from '../../control-panel/tools/tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/actions-mode/tools/functions-tool.ts b/src/app/modeler/actions-mode/tools/functions-tool.ts index 6a98987..9cab558 100644 --- a/src/app/modeler/actions-mode/tools/functions-tool.ts +++ b/src/app/modeler/actions-mode/tools/functions-tool.ts @@ -1,7 +1,7 @@ -import {Tool} from '../../control-panel/tools/tool'; +import {Injectable} from '@angular/core'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {Injectable} from '@angular/core'; +import {Tool} from '../../control-panel/tools/tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/actions-mode/tools/process-actions-tool.ts b/src/app/modeler/actions-mode/tools/process-actions-tool.ts index c8cf5a4..b424895 100644 --- a/src/app/modeler/actions-mode/tools/process-actions-tool.ts +++ b/src/app/modeler/actions-mode/tools/process-actions-tool.ts @@ -1,7 +1,7 @@ -import {Tool} from '../../control-panel/tools/tool'; +import {Injectable} from '@angular/core'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {Injectable} from '@angular/core'; +import {Tool} from '../../control-panel/tools/tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/actions-mode/tools/role-actions-tool.ts b/src/app/modeler/actions-mode/tools/role-actions-tool.ts index 3cbdab8..e6239a2 100644 --- a/src/app/modeler/actions-mode/tools/role-actions-tool.ts +++ b/src/app/modeler/actions-mode/tools/role-actions-tool.ts @@ -1,7 +1,7 @@ -import {Tool} from '../../control-panel/tools/tool'; +import {Injectable} from '@angular/core'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {Injectable} from '@angular/core'; +import {Tool} from '../../control-panel/tools/tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/actions-mode/tools/transition-actions-tool.ts b/src/app/modeler/actions-mode/tools/transition-actions-tool.ts index 55e73b8..28ce79e 100644 --- a/src/app/modeler/actions-mode/tools/transition-actions-tool.ts +++ b/src/app/modeler/actions-mode/tools/transition-actions-tool.ts @@ -1,7 +1,7 @@ -import {Tool} from '../../control-panel/tools/tool'; +import {Injectable} from '@angular/core'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {Injectable} from '@angular/core'; +import {Tool} from '../../control-panel/tools/tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/components/master-detail/abstract-master-detail.service.ts b/src/app/modeler/components/master-detail/abstract-master-detail.service.ts index 16719c9..1dab8b5 100644 --- a/src/app/modeler/components/master-detail/abstract-master-detail.service.ts +++ b/src/app/modeler/components/master-detail/abstract-master-detail.service.ts @@ -1,6 +1,6 @@ -import {BehaviorSubject, Observable, Subject} from 'rxjs'; import {Injectable, OnDestroy} from '@angular/core'; import {Sort} from '@angular/material/sort'; +import {BehaviorSubject, Observable, Subject} from 'rxjs'; @Injectable() export abstract class AbstractMasterDetailService implements OnDestroy { diff --git a/src/app/modeler/components/master-detail/abstract-master.component.ts b/src/app/modeler/components/master-detail/abstract-master.component.ts index f785661..59b53d7 100644 --- a/src/app/modeler/components/master-detail/abstract-master.component.ts +++ b/src/app/modeler/components/master-detail/abstract-master.component.ts @@ -1,6 +1,6 @@ +import {ComponentType} from '@angular/cdk/overlay'; import {Component, Input} from '@angular/core'; import {AbstractMasterDetailService} from './abstract-master-detail.service'; -import {ComponentType} from '@angular/cdk/overlay'; @Component({ selector: 'nab-abstract-master-component', diff --git a/src/app/modeler/components/master-detail/main-master-item/main-master-item.component.ts b/src/app/modeler/components/master-detail/main-master-item/main-master-item.component.ts index 78af0d1..062564b 100644 --- a/src/app/modeler/components/master-detail/main-master-item/main-master-item.component.ts +++ b/src/app/modeler/components/master-detail/main-master-item/main-master-item.component.ts @@ -1,6 +1,6 @@ -import {Component, Injector, Input, OnInit} from '@angular/core'; -import {ComponentPortal} from '@angular/cdk/portal'; import {ComponentType} from '@angular/cdk/overlay'; +import {ComponentPortal} from '@angular/cdk/portal'; +import {Component, Injector, Input, OnInit} from '@angular/core'; import {AbstractMasterDetailService} from '../abstract-master-detail.service'; import {MASTER_ITEM, MASTER_SERVICE} from './master-injection-tokens'; diff --git a/src/app/modeler/components/master-detail/main-master/builder-paginator-inpl.ts b/src/app/modeler/components/master-detail/main-master/builder-paginator-inpl.ts index 1f9c59e..d9ee3be 100644 --- a/src/app/modeler/components/master-detail/main-master/builder-paginator-inpl.ts +++ b/src/app/modeler/components/master-detail/main-master/builder-paginator-inpl.ts @@ -1,5 +1,5 @@ -import {MatPaginatorIntl} from '@angular/material/paginator'; import {Injectable} from '@angular/core'; +import {MatPaginatorIntl} from '@angular/material/paginator'; import {Subject} from 'rxjs'; @Injectable() diff --git a/src/app/modeler/components/master-detail/main-master/main-master.component.ts b/src/app/modeler/components/master-detail/main-master/main-master.component.ts index e81fcf6..a9672fd 100644 --- a/src/app/modeler/components/master-detail/main-master/main-master.component.ts +++ b/src/app/modeler/components/master-detail/main-master/main-master.component.ts @@ -1,4 +1,4 @@ -import {Component, Injector, OnInit} from '@angular/core'; +import {Component, OnInit} from '@angular/core'; import {PageMasterComponent} from '../page-master.component'; @Component({ diff --git a/src/app/modeler/components/master-detail/master-detail.component.ts b/src/app/modeler/components/master-detail/master-detail.component.ts index 62786b2..f4c2a50 100644 --- a/src/app/modeler/components/master-detail/master-detail.component.ts +++ b/src/app/modeler/components/master-detail/master-detail.component.ts @@ -1,6 +1,6 @@ -import {Component, Injector, Input, OnInit} from '@angular/core'; -import {ComponentPortal} from '@angular/cdk/portal'; import {ComponentType} from '@angular/cdk/overlay'; +import {ComponentPortal} from '@angular/cdk/portal'; +import {Component, Injector, Input, OnInit} from '@angular/core'; import {AbstractMasterDetailService} from './abstract-master-detail.service'; @Component({ diff --git a/src/app/modeler/components/master-detail/page-master.component.ts b/src/app/modeler/components/master-detail/page-master.component.ts index 9f04133..89921fb 100644 --- a/src/app/modeler/components/master-detail/page-master.component.ts +++ b/src/app/modeler/components/master-detail/page-master.component.ts @@ -1,7 +1,7 @@ -import {AbstractMasterComponent} from './abstract-master.component'; import {Component, Input, OnInit, ViewChild} from '@angular/core'; -import {MatSort, Sort} from '@angular/material/sort'; import {PageEvent} from '@angular/material/paginator'; +import {MatSort, Sort} from '@angular/material/sort'; +import {AbstractMasterComponent} from './abstract-master.component'; @Component({ selector: 'nab-abstract-page-master-component', diff --git a/src/app/modeler/components/material-icon-picker/material-icon-picker.component.ts b/src/app/modeler/components/material-icon-picker/material-icon-picker.component.ts index d6447fe..d02082d 100644 --- a/src/app/modeler/components/material-icon-picker/material-icon-picker.component.ts +++ b/src/app/modeler/components/material-icon-picker/material-icon-picker.component.ts @@ -1,8 +1,8 @@ import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core'; -import {MaterialIconList} from './material-icon-list'; +import {FormControl} from '@angular/forms'; import {Observable} from 'rxjs'; import {map, startWith} from 'rxjs/operators'; -import {FormControl} from '@angular/forms'; +import {MaterialIconList} from './material-icon-list'; @Component({ selector: 'nab-material-icon-picker', diff --git a/src/app/modeler/control-panel/control-panel.component.spec.ts b/src/app/modeler/control-panel/control-panel.component.spec.ts index cf63d0d..f66ce5c 100644 --- a/src/app/modeler/control-panel/control-panel.component.spec.ts +++ b/src/app/modeler/control-panel/control-panel.component.spec.ts @@ -1,21 +1,21 @@ -import {waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing'; - -import {ControlPanelComponent} from './control-panel.component'; import {CommonModule} from '@angular/common'; -import {MaterialImportModule} from '../../material-import/material-import.module'; -import {CdkImportModule} from '../../cdk-import/cdk-import.module'; +import {HttpClientTestingModule} from '@angular/common/http/testing'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; import {FormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {HotkeyModule} from 'angular2-hotkeys'; -import {ResizableModule} from 'angular-resizable-element'; import {MatCheckboxModule} from '@angular/material/checkbox'; -import {MatTabsModule} from '@angular/material/tabs'; import {MatSortModule} from '@angular/material/sort'; -import {HttpClientTestingModule} from '@angular/common/http/testing'; +import {MatTabsModule} from '@angular/material/tabs'; +import {RouterModule} from '@angular/router'; import {RouterTestingModule} from '@angular/router/testing'; -import {AppModule} from '../../app.module'; import {FlexLayoutModule} from '@ngbracket/ngx-layout'; +import {ResizableModule} from 'angular-resizable-element'; +import {HotkeyModule} from 'angular2-hotkeys'; import {MonacoEditorModule} from 'ngx-monaco-editor-v2'; +import {AppModule} from '../../app.module'; +import {CdkImportModule} from '../../cdk-import/cdk-import.module'; +import {MaterialImportModule} from '../../material-import/material-import.module'; + +import {ControlPanelComponent} from './control-panel.component'; describe('ControlPanelComponent', () => { let component: ControlPanelComponent; diff --git a/src/app/modeler/control-panel/control-panel.component.ts b/src/app/modeler/control-panel/control-panel.component.ts index e6018c8..cb5459d 100644 --- a/src/app/modeler/control-panel/control-panel.component.ts +++ b/src/app/modeler/control-panel/control-panel.component.ts @@ -1,4 +1,4 @@ -import {AfterViewInit, Component} from '@angular/core'; +import {Component} from '@angular/core'; import {ControlPanelService} from './control-panel.service'; import {GlobalToolRegistry} from './tools/global-tool-registry'; diff --git a/src/app/modeler/control-panel/control-panel.service.ts b/src/app/modeler/control-panel/control-panel.service.ts index ee6b2ff..f4a9af3 100644 --- a/src/app/modeler/control-panel/control-panel.service.ts +++ b/src/app/modeler/control-panel/control-panel.service.ts @@ -1,23 +1,23 @@ import {Injectable} from '@angular/core'; -import {ModeRegistry} from './modes/mode-registry'; -import {Mode} from './modes/mode'; -import {ModeService} from './modes/mode-component/mode.service'; -import {I18nModeService} from '../i18n-mode/i18n-mode.service'; +import {NavigationEnd, Router} from '@angular/router'; +import {filter} from 'rxjs/operators'; import {ActionsModeService} from '../actions-mode/actions-mode.service'; import {DataModeService} from '../data-mode/data-mode.service'; -import {SimulationModeService} from '../simulation-mode/simulation-mode.service'; -import {RoleModeService} from '../role-mode/role-mode.service'; import {EditModeService} from '../edit-mode/edit-mode.service'; -import {GlobalToolRegistry} from './tools/global-tool-registry'; -import {ImportTool} from './modes/import-tool'; +import {HistoryModeService} from '../history-mode/history-mode.service'; +import {I18nModeService} from '../i18n-mode/i18n-mode.service'; +import {RoleModeService} from '../role-mode/role-mode.service'; +import {SimulationModeService} from '../simulation-mode/simulation-mode.service'; import {ExportTool} from './modes/export-tool'; -import {SvgExportTool} from './modes/svg-export-tool'; -import {NavigationEnd, Router} from '@angular/router'; -import {filter} from 'rxjs/operators'; +import {ImportTool} from './modes/import-tool'; +import {Mode} from './modes/mode'; +import {ModeService} from './modes/mode-component/mode.service'; +import {ModeRegistry} from './modes/mode-registry'; import {RedoTool} from './modes/redo-tool'; +import {SvgExportTool} from './modes/svg-export-tool'; import {UndoTool} from './modes/undo-tool'; +import {GlobalToolRegistry} from './tools/global-tool-registry'; import {Tool} from './tools/tool'; -import {HistoryModeService} from '../history-mode/history-mode.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/control-panel/modes/export-tool.ts b/src/app/modeler/control-panel/modes/export-tool.ts index faffc95..72b8e16 100644 --- a/src/app/modeler/control-panel/modes/export-tool.ts +++ b/src/app/modeler/control-panel/modes/export-tool.ts @@ -1,9 +1,9 @@ -import {Tool} from '../tools/tool'; import {Injectable} from '@angular/core'; +import {TutorialService} from '../../../tutorial/tutorial-service'; +import {ModelExportService} from '../../services/model/model-export.service'; import {ControlPanelButton} from '../control-panel-button'; import {ControlPanelIcon} from '../control-panel-icon'; -import {ModelExportService} from '../../services/model/model-export.service'; -import {TutorialService} from '../../../tutorial/tutorial-service'; +import {Tool} from '../tools/tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/control-panel/modes/import-tool-button/import-tool-button.component.ts b/src/app/modeler/control-panel/modes/import-tool-button/import-tool-button.component.ts index 10447aa..a7319be 100644 --- a/src/app/modeler/control-panel/modes/import-tool-button/import-tool-button.component.ts +++ b/src/app/modeler/control-panel/modes/import-tool-button/import-tool-button.component.ts @@ -1,7 +1,7 @@ import {Component, ElementRef, Inject, ViewChild} from '@angular/core'; +import {TutorialService} from '../../../../tutorial/tutorial-service'; import {NAB_CONTROL_PANEL_TOOL} from '../../control-panel-tool-injection-token'; import {ImportTool} from '../import-tool'; -import {TutorialService} from '../../../../tutorial/tutorial-service'; @Component({ selector: 'nab-import-tool-button', diff --git a/src/app/modeler/control-panel/modes/import-tool.ts b/src/app/modeler/control-panel/modes/import-tool.ts index b3b91c4..692a20e 100644 --- a/src/app/modeler/control-panel/modes/import-tool.ts +++ b/src/app/modeler/control-panel/modes/import-tool.ts @@ -1,13 +1,13 @@ +import {HttpClient, HttpErrorResponse} from '@angular/common/http'; import {Injectable} from '@angular/core'; +import {MatSnackBar} from '@angular/material/snack-bar'; +import {AppBuilderConfigurationService} from '../../../app-builder-configuration.service'; +import {TutorialService} from '../../../tutorial/tutorial-service'; +import {ModelImportService} from '../../model-import-service'; import {ControlPanelButton} from '../control-panel-button'; import {ControlPanelIcon} from '../control-panel-icon'; -import {ImportToolButtonComponent} from './import-tool-button/import-tool-button.component'; -import {ModelImportService} from '../../model-import-service'; import {Tool} from '../tools/tool'; -import {AppBuilderConfigurationService} from '../../../app-builder-configuration.service'; -import {HttpClient, HttpErrorResponse} from '@angular/common/http'; -import {MatSnackBar} from '@angular/material/snack-bar'; -import {TutorialService} from '../../../tutorial/tutorial-service'; +import {ImportToolButtonComponent} from './import-tool-button/import-tool-button.component'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/control-panel/modes/mode-component/mode.component.ts b/src/app/modeler/control-panel/modes/mode-component/mode.component.ts index 1725dd8..b542a46 100644 --- a/src/app/modeler/control-panel/modes/mode-component/mode.component.ts +++ b/src/app/modeler/control-panel/modes/mode-component/mode.component.ts @@ -1,6 +1,6 @@ import {Component, Input} from '@angular/core'; -import {ControlPanelService} from '../../control-panel.service'; import {TutorialService} from '../../../../tutorial/tutorial-service'; +import {ControlPanelService} from '../../control-panel.service'; import {Mode} from '../mode'; @Component({ diff --git a/src/app/modeler/control-panel/modes/mode-component/mode.service.ts b/src/app/modeler/control-panel/modes/mode-component/mode.service.ts index fd6a6d9..56e75a9 100644 --- a/src/app/modeler/control-panel/modes/mode-component/mode.service.ts +++ b/src/app/modeler/control-panel/modes/mode-component/mode.service.ts @@ -1,7 +1,7 @@ -import {Mode} from '../mode'; -import {ToolGroup} from '../../tools/tool-group'; -import {Tool} from '../../tools/tool'; import {BehaviorSubject} from 'rxjs'; +import {Tool} from '../../tools/tool'; +import {ToolGroup} from '../../tools/tool-group'; +import {Mode} from '../mode'; export abstract class ModeService { diff --git a/src/app/modeler/control-panel/modes/mode-registry.ts b/src/app/modeler/control-panel/modes/mode-registry.ts index 15f8893..c7dd79d 100644 --- a/src/app/modeler/control-panel/modes/mode-registry.ts +++ b/src/app/modeler/control-panel/modes/mode-registry.ts @@ -1,5 +1,5 @@ -import {Mode} from './mode'; import {AbstractRegistry} from '../../abstract-registry'; +import {Mode} from './mode'; export class ModeRegistry extends AbstractRegistry { diff --git a/src/app/modeler/control-panel/modes/mode.ts b/src/app/modeler/control-panel/modes/mode.ts index 638a45a..160aa36 100644 --- a/src/app/modeler/control-panel/modes/mode.ts +++ b/src/app/modeler/control-panel/modes/mode.ts @@ -1,9 +1,9 @@ -import {TutorialStep} from '../../../tutorial/tutorial-step'; -import {ToolRegistry} from '../tools/tool-registry'; import {Injector} from '@angular/core'; +import {TutorialStep} from '../../../tutorial/tutorial-step'; import {Identifiable} from '../../edit-mode/domain/identifiable'; import {ControlPanelButton} from '../control-panel-button'; import {ControlPanelIcon} from '../control-panel-icon'; +import {ToolRegistry} from '../tools/tool-registry'; export class Mode extends Identifiable { diff --git a/src/app/modeler/control-panel/modes/redo-tool.ts b/src/app/modeler/control-panel/modes/redo-tool.ts index b0177ca..7e9180e 100644 --- a/src/app/modeler/control-panel/modes/redo-tool.ts +++ b/src/app/modeler/control-panel/modes/redo-tool.ts @@ -1,8 +1,8 @@ -import {Tool} from '../tools/tool'; +import {Injectable} from '@angular/core'; import {HistoryService} from '../../services/history/history.service'; import {ControlPanelButton} from '../control-panel-button'; import {ControlPanelIcon} from '../control-panel-icon'; -import {Injectable} from '@angular/core'; +import {Tool} from '../tools/tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/control-panel/modes/svg-export-tool.ts b/src/app/modeler/control-panel/modes/svg-export-tool.ts index 474dc78..286869d 100644 --- a/src/app/modeler/control-panel/modes/svg-export-tool.ts +++ b/src/app/modeler/control-panel/modes/svg-export-tool.ts @@ -1,10 +1,10 @@ import {Injectable} from '@angular/core'; -import {Tool} from '../tools/tool'; -import {ControlPanelButton} from '../control-panel-button'; -import {ControlPanelIcon} from '../control-panel-icon'; -import {ModelExportService} from '../../services/model/model-export.service'; import {PetriflowCanvasService} from '@netgrif/petriflow.svg'; import {TutorialService} from '../../../tutorial/tutorial-service'; +import {ModelExportService} from '../../services/model/model-export.service'; +import {ControlPanelButton} from '../control-panel-button'; +import {ControlPanelIcon} from '../control-panel-icon'; +import {Tool} from '../tools/tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/control-panel/modes/undo-tool.ts b/src/app/modeler/control-panel/modes/undo-tool.ts index 5b0c7ba..ee4d4e2 100644 --- a/src/app/modeler/control-panel/modes/undo-tool.ts +++ b/src/app/modeler/control-panel/modes/undo-tool.ts @@ -1,8 +1,8 @@ import {Injectable} from '@angular/core'; -import {Tool} from '../tools/tool'; +import {HistoryService} from '../../services/history/history.service'; import {ControlPanelButton} from '../control-panel-button'; import {ControlPanelIcon} from '../control-panel-icon'; -import {HistoryService} from '../../services/history/history.service'; +import {Tool} from '../tools/tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/control-panel/tools/global-tool-registry.ts b/src/app/modeler/control-panel/tools/global-tool-registry.ts index ee1e48c..a43a0c2 100644 --- a/src/app/modeler/control-panel/tools/global-tool-registry.ts +++ b/src/app/modeler/control-panel/tools/global-tool-registry.ts @@ -1,6 +1,6 @@ +import {ComponentPortal} from '@angular/cdk/portal'; import {Injectable, Injector} from '@angular/core'; import {Tool} from './tool'; -import {ComponentPortal} from '@angular/cdk/portal'; import {ToolComponent} from './tool-component/tool.component'; import {ToolRegistry} from './tool-registry'; diff --git a/src/app/modeler/control-panel/tools/tool-component/tool.component.ts b/src/app/modeler/control-panel/tools/tool-component/tool.component.ts index 92d6786..0c1a297 100644 --- a/src/app/modeler/control-panel/tools/tool-component/tool.component.ts +++ b/src/app/modeler/control-panel/tools/tool-component/tool.component.ts @@ -1,8 +1,8 @@ -import {Component, Inject, OnInit} from '@angular/core'; -import {Tool} from '../tool'; -import {ModeService} from '../../modes/mode-component/mode.service'; -import {NAB_CONTROL_PANEL_MODE, NAB_CONTROL_PANEL_TOOL} from '../../control-panel-tool-injection-token'; +import {Component, Inject} from '@angular/core'; import {TutorialService} from '../../../../tutorial/tutorial-service'; +import {NAB_CONTROL_PANEL_MODE, NAB_CONTROL_PANEL_TOOL} from '../../control-panel-tool-injection-token'; +import {ModeService} from '../../modes/mode-component/mode.service'; +import {Tool} from '../tool'; @Component({ selector: 'nab-tool', diff --git a/src/app/modeler/control-panel/tools/tool-registry.ts b/src/app/modeler/control-panel/tools/tool-registry.ts index 09844c7..8cc5383 100644 --- a/src/app/modeler/control-panel/tools/tool-registry.ts +++ b/src/app/modeler/control-panel/tools/tool-registry.ts @@ -1,10 +1,10 @@ -import {Tool} from './tool'; import {ComponentPortal} from '@angular/cdk/portal'; -import {ToolComponent} from './tool-component/tool.component'; import {Injector, StaticProvider} from '@angular/core'; -import {ModeService} from '../modes/mode-component/mode.service'; import {AbstractRegistry} from '../../abstract-registry'; import {NAB_CONTROL_PANEL_MODE, NAB_CONTROL_PANEL_TOOL} from '../control-panel-tool-injection-token'; +import {ModeService} from '../modes/mode-component/mode.service'; +import {Tool} from './tool'; +import {ToolComponent} from './tool-component/tool.component'; export class ToolRegistry extends AbstractRegistry { diff --git a/src/app/modeler/control-panel/tools/tool.ts b/src/app/modeler/control-panel/tools/tool.ts index 4ad82de..9e90bee 100644 --- a/src/app/modeler/control-panel/tools/tool.ts +++ b/src/app/modeler/control-panel/tools/tool.ts @@ -1,10 +1,10 @@ -import {ControlPanelButton} from '../control-panel-button'; import {Type} from '@angular/core'; +import {BehaviorSubject} from 'rxjs'; +import {TutorialStep} from '../../../tutorial/tutorial-step'; import {Identifiable} from '../../edit-mode/domain/identifiable'; +import {ControlPanelButton} from '../control-panel-button'; import {ControlPanelIcon} from '../control-panel-icon'; import {ToolComponent} from './tool-component/tool.component'; -import {BehaviorSubject} from 'rxjs'; -import {TutorialStep} from '../../../tutorial/tutorial-step'; export abstract class Tool extends Identifiable { diff --git a/src/app/modeler/control-panel/trees/trigger-tree/trigger-tree.component.spec.ts b/src/app/modeler/control-panel/trees/trigger-tree/trigger-tree.component.spec.ts index 2dbef25..79b8105 100644 --- a/src/app/modeler/control-panel/trees/trigger-tree/trigger-tree.component.spec.ts +++ b/src/app/modeler/control-panel/trees/trigger-tree/trigger-tree.component.spec.ts @@ -1,20 +1,20 @@ -import {waitForAsync, ComponentFixture, TestBed} from '@angular/core/testing'; - -import {TriggerTreeComponent} from './trigger-tree.component'; import {CommonModule} from '@angular/common'; -import {MaterialImportModule} from '../../../../material-import/material-import.module'; -import {CdkImportModule} from '../../../../cdk-import/cdk-import.module'; +import {Component} from '@angular/core'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; import {FormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {HotkeyModule} from 'angular2-hotkeys'; -import {ResizableModule} from 'angular-resizable-element'; import {MatCheckboxModule} from '@angular/material/checkbox'; -import {MatTabsModule} from '@angular/material/tabs'; import {MatSortModule} from '@angular/material/sort'; -import {Component} from '@angular/core'; +import {MatTabsModule} from '@angular/material/tabs'; import {NoopAnimationsModule} from '@angular/platform-browser/animations'; -import {MonacoEditorModule} from 'ngx-monaco-editor-v2'; +import {RouterModule} from '@angular/router'; import {FlexLayoutModule} from '@ngbracket/ngx-layout'; +import {ResizableModule} from 'angular-resizable-element'; +import {HotkeyModule} from 'angular2-hotkeys'; +import {MonacoEditorModule} from 'ngx-monaco-editor-v2'; +import {CdkImportModule} from '../../../../cdk-import/cdk-import.module'; +import {MaterialImportModule} from '../../../../material-import/material-import.module'; + +import {TriggerTreeComponent} from './trigger-tree.component'; describe('TriggerTreeComponent', () => { let component: TriggerTreeComponent; diff --git a/src/app/modeler/control-panel/trees/trigger-tree/trigger-tree.component.ts b/src/app/modeler/control-panel/trees/trigger-tree/trigger-tree.component.ts index 1b10df7..d267a32 100644 --- a/src/app/modeler/control-panel/trees/trigger-tree/trigger-tree.component.ts +++ b/src/app/modeler/control-panel/trees/trigger-tree/trigger-tree.component.ts @@ -1,9 +1,9 @@ -import {Component, Input, OnInit} from '@angular/core'; -import {NestedTreeControl} from '@angular/cdk/tree'; -import {Trigger, TriggerType} from '@netgrif/petriflow'; import {NGX_MAT_DATE_FORMATS} from '@angular-material-components/datetime-picker'; +import {NestedTreeControl} from '@angular/cdk/tree'; +import {Component, Input} from '@angular/core'; import {MatTreeNestedDataSource} from '@angular/material/tree'; import {DATE_TIME_FORMAT} from '@netgrif/components-core'; +import {Trigger, TriggerType} from '@netgrif/petriflow'; interface TriggerNode { name?: string; diff --git a/src/app/modeler/data-mode/data-detail/data-detail.component.html b/src/app/modeler/data-mode/data-detail/data-detail.component.html index faffabd..8bd0376 100644 --- a/src/app/modeler/data-mode/data-detail/data-detail.component.html +++ b/src/app/modeler/data-mode/data-detail/data-detail.component.html @@ -98,8 +98,13 @@ Component Name - + + + + {{componentDef.title}} + +
@@ -111,7 +116,12 @@ Key + [value]="property.key" [matAutocomplete]="propertyAutocomplete"> + + + {{propertyDef.name}} + + Value @@ -142,45 +152,93 @@
- - Initial value - - - - + Initial value - - None - - {{ opt.value?.value }} - - - - - - {{ opt.value?.value }} - - - - - - - Initial value - - - - - - - - + + + @switch (item.type) { + @case (DataType.BOOLEAN) { +
+ Initial value + + {{item.init.value}} + +
+ } + @case (DataType.NUMBER) { + + Initial value + + + } + @case (DataType.DATE) { + + Initial value + + + + + + } + @case (DataType.DATETIME) { + + Initial value + + + + + + } + @case (DataType.TASK_REF) { + + } + @case ((item.type === DataType.ENUMERATION || item.type === DataType.ENUMERATION_MAP) ? item.type : '') { + + Initial value + + None + + {{ opt.value?.value }} + + + + } + @case ((item.type === DataType.MULTICHOICE || item.type === DataType.MULTICHOICE_MAP) ? item.type : '') { + + Initial value + + + {{ opt.value?.value }} + + + + } + @default { + + Initial value + + + } + } +
@@ -310,21 +368,12 @@
Options Init
- +
- -
Is Options Init dynamic?
- - - - - -
diff --git a/src/app/modeler/data-mode/data-detail/data-detail.component.ts b/src/app/modeler/data-mode/data-detail/data-detail.component.ts index 792aaa3..dc4f66e 100644 --- a/src/app/modeler/data-mode/data-detail/data-detail.component.ts +++ b/src/app/modeler/data-mode/data-detail/data-detail.component.ts @@ -1,28 +1,37 @@ +import {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop'; import {Component, OnDestroy} from '@angular/core'; -import {DataMasterDetailService} from '../data-master-detail.service'; +import {FormControl} from '@angular/forms'; +import {MatAutocompleteSelectedEvent} from '@angular/material/autocomplete'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {EnumerationFieldValue} from '@netgrif/components-core'; import { - Component as PetriflowComponent, - DataType, - DataVariable, Expression, I18nString, - I18nWithDynamic, - Option, - Property, - Validation + Component as PetriflowComponent, + DataType, + DataVariable, + Expression, + I18nString, + I18nWithDynamic, + Option, + Property, + Validation, } from '@netgrif/petriflow'; -import {MatDialog} from '@angular/material/dialog'; +import {Observable} from 'rxjs'; +import {map, startWith, tap} from 'rxjs/operators'; import {DialogRefactorComponent} from '../../../dialogs/dialog-refactor/dialog-refactor.component'; -import {FormControl} from '@angular/forms'; import {DataFieldUtils} from '../../../form-builder/data-field-utils'; -import {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop'; -import {EnumerationFieldValue} from '@netgrif/components-core'; -import {ModelService} from '../../services/model/model.service'; -import {Router} from '@angular/router'; -import {ActionsModeService} from '../../actions-mode/actions-mode.service'; +import { + ComponentDef, + DataRefDef, + FieldListService, + PropertyDef, +} from '../../../form-builder/field-list/field-list.service'; import {ActionsMasterDetailService} from '../../actions-mode/actions-master-detail.setvice'; -import {HistoryService} from '../../services/history/history.service'; -import {Observable} from 'rxjs'; -import {map, startWith, tap} from 'rxjs/operators'; +import {ActionsModeService} from '../../actions-mode/actions-mode.service'; import {ModelerUtils} from '../../modeler-utils'; +import {HistoryService} from '../../services/history/history.service'; +import {ModelService} from '../../services/model/model.service'; +import {DataMasterDetailService} from '../data-master-detail.service'; export interface TypeArray { viewValue: string; @@ -43,6 +52,7 @@ export class DataDetailComponent implements OnDestroy { counterEnumMap = 0; formControlRef: FormControl; + componentNameFormCtrl: FormControl; transitionOptions: Array; filteredOptions: Observable>; typeArray: Array = [ @@ -71,6 +81,7 @@ export class DataDetailComponent implements OnDestroy { public constructor( private _masterService: DataMasterDetailService, private _modelService: ModelService, + private _fieldListService: FieldListService, private dialog: MatDialog, private _router: Router, private _actionMode: ActionsModeService, @@ -78,6 +89,7 @@ export class DataDetailComponent implements OnDestroy { private _historyService: HistoryService ) { this.formControlRef = new FormControl(); + this.componentNameFormCtrl = new FormControl(); this.transitionOptions = this.createTransOptions(); this._masterService.getSelected$().subscribe(obj => { if (this.historyDataSave?.save) { @@ -143,7 +155,7 @@ export class DataDetailComponent implements OnDestroy { }); } - setValue($event, variable: string, index?: number): void { + public setValue($event, variable: string, index?: number): void { switch (variable) { case 'id': { this.item.id = $event.target.value; @@ -186,9 +198,11 @@ export class DataDetailComponent implements OnDestroy { case 'dynamic-init': { const value = $event.source.checked; if (this.item.init === undefined) { - this.item.init = new I18nWithDynamic(value); - } else { - this.item.init.dynamic = value; + this.item.init = new I18nWithDynamic(''); + } + this.item.init.dynamic = value; + if (value === true) { + this.item.inits = new Array(); } break; } @@ -220,7 +234,12 @@ export class DataDetailComponent implements OnDestroy { break; } case 'property_key': { - this.item.component.properties[index].key = $event.target.value as string; + if ($event instanceof MatAutocompleteSelectedEvent) { + this.item.component.properties[index].key = $event.option.value as string; + this.setPropertyDefaultValue($event, index, this.item); + } else { + this.item.component.properties[index].key = $event.target.value as string; + } break; } case 'property_value': { @@ -231,6 +250,31 @@ export class DataDetailComponent implements OnDestroy { this.historyDataSave.save = true; } + setBooleanValue(event) { + this.item.init.value = event.checked.toString(); + } + + setNumberValue(event) { + this.item.init.value = event.target.value.toString(); + } + + formatDate(event) { + // TODO: NAB-326 better solution? date picker setting to store only date? + if (event.target.value) { + this.item.init.value = event.target.value.toISOString(); + } else { + this.item.init.value = ''; + } + } + + formatDateTime(event) { + if (event.target.value) { + this.item.init.value = event.target.value.toISOString(); + } else { + this.item.init.value = ''; + } + } + removeSpecificAttributeOnChange() { this.item.inits = []; this.item.init.value = ''; @@ -364,4 +408,38 @@ export class DataDetailComponent implements OnDestroy { trackByFn(index: any, item: any) { return index; } + + get filteredComponents(): Array { + const componentDefs: DataRefDef = this._fieldListService.fieldListArray.find(type => type.type === this.item.type); + if (!componentDefs) { + return []; + } + return componentDefs.components.filter(def => def.name !== undefined && def.title.toLowerCase().includes(this.item.component.name)); + } + + public filteredProperties(dataVariable: DataVariable, propertyName: string): Array { + const componentDefs: DataRefDef = this._fieldListService.fieldListArray.find(type => type.type === dataVariable.type); + if (!componentDefs) { + return []; + } + const propertyDefs: ComponentDef = componentDefs.components.find(compDef => { + return (!dataVariable.component.name && !compDef.name) || (!!dataVariable.component.name && !!compDef.name && dataVariable.component.name === compDef.name); + }); + if (!propertyDefs || !propertyDefs.properties) { + return []; + } + const existingProperties = dataVariable.component.properties.map(compProperty => compProperty.key); + return propertyDefs.properties.filter(propDef => propDef.name.includes(propertyName) && !existingProperties.includes(propDef.name)); + } + + public setPropertyDefaultValue($event: MatAutocompleteSelectedEvent, index: number, dataVariable: DataVariable): void { + dataVariable.component.properties[index].value = this._fieldListService.fieldListArray + .find(type => type.type === dataVariable.type)?.components + .find(compDef => (!dataVariable.component.name && !compDef.name) || (!!dataVariable.component.name && !!compDef.name && dataVariable.component.name === compDef.name))?.properties + .find(propDef => propDef.name === $event.option.value).defaultValue; + } + + protected readonly DataType = DataType; + protected readonly Boolean = Boolean; + protected readonly DataFieldUtils = DataFieldUtils; } diff --git a/src/app/modeler/data-mode/data-master-detail.service.ts b/src/app/modeler/data-mode/data-master-detail.service.ts index 2d684c0..0b1d003 100644 --- a/src/app/modeler/data-mode/data-master-detail.service.ts +++ b/src/app/modeler/data-mode/data-master-detail.service.ts @@ -1,10 +1,10 @@ import {Injectable} from '@angular/core'; +import {Sort} from '@angular/material/sort'; import {DataType, DataVariable} from '@netgrif/petriflow'; -import {ModelService} from '../services/model/model.service'; import {AbstractMasterDetailService} from '../components/master-detail/abstract-master-detail.service'; -import {Sort} from '@angular/material/sort'; -import {HistoryService} from '../services/history/history.service'; import {ModelerConfig} from '../modeler-config'; +import {HistoryService} from '../services/history/history.service'; +import {ModelService} from '../services/model/model.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/data-mode/data-master-item/data-master-item.component.ts b/src/app/modeler/data-mode/data-master-item/data-master-item.component.ts index 5ae1409..168b7fb 100644 --- a/src/app/modeler/data-mode/data-master-item/data-master-item.component.ts +++ b/src/app/modeler/data-mode/data-master-item/data-master-item.component.ts @@ -1,9 +1,9 @@ import {Component, Inject} from '@angular/core'; +import {MatDialog} from '@angular/material/dialog'; import {DataVariable} from '@netgrif/petriflow'; -import {MASTER_ITEM, MASTER_SERVICE} from '../../components/master-detail/main-master-item/master-injection-tokens'; -import {AbstractMasterDetailService} from '../../components/master-detail/abstract-master-detail.service'; import {DialogDeleteComponent} from '../../../dialogs/dialog-delete/dialog-delete.component'; -import {MatDialog} from '@angular/material/dialog'; +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'; @Component({ selector: 'nab-data-master-item', diff --git a/src/app/modeler/data-mode/data-mode.component.ts b/src/app/modeler/data-mode/data-mode.component.ts index 31aea51..96ecc54 100644 --- a/src/app/modeler/data-mode/data-mode.component.ts +++ b/src/app/modeler/data-mode/data-mode.component.ts @@ -1,8 +1,8 @@ -import {Component, ViewChild} from '@angular/core'; -import {DataDetailComponent} from './data-detail/data-detail.component'; import {ComponentType} from '@angular/cdk/overlay'; -import {DataMasterItemComponent} from './data-master-item/data-master-item.component'; +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'; export interface TypeArray { viewValue: string; diff --git a/src/app/modeler/data-mode/data-mode.service.ts b/src/app/modeler/data-mode/data-mode.service.ts index fbbb5b3..4e74bd2 100644 --- a/src/app/modeler/data-mode/data-mode.service.ts +++ b/src/app/modeler/data-mode/data-mode.service.ts @@ -1,11 +1,11 @@ import {EventEmitter, Injectable, Injector} from '@angular/core'; -import {BehaviorSubject} from 'rxjs'; import {DataType, DataVariable} from '@netgrif/petriflow'; -import {ModeService} from '../control-panel/modes/mode-component/mode.service'; +import {BehaviorSubject} from 'rxjs'; import {TutorialService} from '../../tutorial/tutorial-service'; -import {Mode} from '../control-panel/modes/mode'; import {ControlPanelButton} from '../control-panel/control-panel-button'; import {ControlPanelIcon} from '../control-panel/control-panel-icon'; +import {Mode} from '../control-panel/modes/mode'; +import {ModeService} from '../control-panel/modes/mode-component/mode.service'; import {Tool} from '../control-panel/tools/tool'; @Injectable({ diff --git a/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.html b/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.html new file mode 100644 index 0000000..72185ff --- /dev/null +++ b/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.html @@ -0,0 +1,26 @@ + + Initial value + + @for (init of taskRef.inits; track $index) { + + {{ prettyTask(init?.value) }} + + + } + + + + @for (task of tasks; track task) { + {{ task.label?.value }} [{{ task.id }}] + } + + diff --git a/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.scss b/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.scss new file mode 100644 index 0000000..07b4686 --- /dev/null +++ b/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.scss @@ -0,0 +1,3 @@ +.full-width { + width: 100%; +} diff --git a/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.spec.ts b/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.spec.ts new file mode 100644 index 0000000..2978fd4 --- /dev/null +++ b/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.spec.ts @@ -0,0 +1,23 @@ +import {ComponentFixture, TestBed} from '@angular/core/testing'; + +import {TaskRefInitFieldComponent} from './task-ref-init-field.component'; + +describe('TaskRefInitFieldComponent', () => { + let component: TaskRefInitFieldComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [TaskRefInitFieldComponent] + }) + .compileComponents(); + + fixture = TestBed.createComponent(TaskRefInitFieldComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.ts b/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.ts new file mode 100644 index 0000000..7a05142 --- /dev/null +++ b/src/app/modeler/data-mode/task-ref-init-field/task-ref-init-field.component.ts @@ -0,0 +1,71 @@ +import {Component, ElementRef, Input, ViewChild} from '@angular/core'; +import {FormControl} from '@angular/forms'; +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'; + +@Component({ + selector: 'nab-task-ref-init-field', + templateUrl: './task-ref-init-field.component.html', + styleUrl: './task-ref-init-field.component.scss' +}) +export class TaskRefInitFieldComponent { + + @Input() taskRef: DataVariable; + taskRefFormControl: FormControl; + @ViewChild('taskRefInput') taskRefInput: ElementRef; + + constructor(private _modelService: ModelService) { + this.taskRefFormControl = new FormControl(''); + } + + removeInit(index: number): void { + if (index >= 0) { + this.taskRef.inits.splice(index, 1); + } + } + + addInit($event: MatChipInputEvent): void { + this.taskRef.inits.push(new I18nWithDynamic($event.value)); + + $event.chipInput!.clear(); + this.taskRefFormControl.setValue(null); + } + + selectInit($event: MatAutocompleteSelectedEvent): void { + this.taskRef.inits.push(new I18nWithDynamic($event.option.value)); + this.taskRefInput.nativeElement.value = ''; + this.taskRefFormControl.setValue(null); + } + + get tasks(): Transition[] { + return this._modelService.model.getTransitions().filter(t => { + return !this.taskRef.inits.some(init => init.value === t.id); + }).sort((t1, t2) => { + if (!t1.label.value && !t2.label.value) { + return t1.id > t2.id ? 1 : -1; + } + if (!t1.label.value) { + return 1; + } + if (!t2.label.value) { + return -1; + } + return t1.label.value.localeCompare(t2.label.value); + }); + } + + prettyTask(taskId: string): string { + const task = this._modelService.model.getTransition(taskId); + if (task === undefined) { + return taskId; + } + const taskTitle = task.label.value ? `${task.label.value} ` : ''; + return `${taskTitle} [${taskId}]`; + } + + isReferenced(task: Transition): boolean { + return task.dataGroups.some(group => !!group.getDataRef(this.taskRef.id)); + } +} diff --git a/src/app/modeler/edit-mode/context-menu/context-menu.component.spec.ts b/src/app/modeler/edit-mode/context-menu/context-menu.component.spec.ts index 55a3414..67ec154 100644 --- a/src/app/modeler/edit-mode/context-menu/context-menu.component.spec.ts +++ b/src/app/modeler/edit-mode/context-menu/context-menu.component.spec.ts @@ -1,6 +1,6 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; -import { ContextMenuComponent } from './context-menu.component'; +import {ContextMenuComponent} from './context-menu.component'; describe('ContextMenuComponent', () => { let component: ContextMenuComponent; diff --git a/src/app/modeler/edit-mode/context-menu/context-menu.component.ts b/src/app/modeler/edit-mode/context-menu/context-menu.component.ts index e19b5e7..c5af316 100644 --- a/src/app/modeler/edit-mode/context-menu/context-menu.component.ts +++ b/src/app/modeler/edit-mode/context-menu/context-menu.component.ts @@ -1,6 +1,6 @@ -import {Component, OnInit} from '@angular/core'; -import {MenuItem} from './menu-items/menu-item'; +import {Component} from '@angular/core'; import {EditModeService} from '../edit-mode.service'; +import {MenuItem} from './menu-items/menu-item'; @Component({ selector: 'nab-context-menu', diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/arc/delete-arc-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/arc/delete-arc-menu-item.ts index 90670ed..5535e8d 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/arc/delete-arc-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/arc/delete-arc-menu-item.ts @@ -1,6 +1,6 @@ -import {DeleteMenuItem} from '../delete-menu-item'; import {CanvasArc} from '../../../domain/canvas-arc'; import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {DeleteMenuItem} from '../delete-menu-item'; export class DeleteArcMenuItem extends DeleteMenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/arc/delete-breakpoint-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/arc/delete-breakpoint-menu-item.ts index 17c480d..3425d95 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/arc/delete-breakpoint-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/arc/delete-breakpoint-menu-item.ts @@ -1,6 +1,6 @@ -import {MenuItem} from '../menu-item'; import {CanvasArc} from '../../../domain/canvas-arc'; import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {MenuItem} from '../menu-item'; export class DeleteBreakpointMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/arc/edit-arc-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/arc/edit-arc-menu-item.ts index 3c92677..41abe1c 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/arc/edit-arc-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/arc/edit-arc-menu-item.ts @@ -1,8 +1,8 @@ -import {MenuItem} from '../menu-item'; -import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {ChangedArc} from '../../../../../dialogs/dialog-arc-edit/changed-arc'; import {ArcEditData, DialogArcEditComponent} from '../../../../../dialogs/dialog-arc-edit/dialog-arc-edit.component'; import {CanvasArc} from '../../../domain/canvas-arc'; -import {ChangedArc} from '../../../../../dialogs/dialog-arc-edit/changed-arc'; +import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {MenuItem} from '../menu-item'; export class EditArcMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/delete-selected-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/delete-selected-menu-item.ts index b77e920..4a7d993 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/delete-selected-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/delete-selected-menu-item.ts @@ -1,5 +1,5 @@ -import {MenuItem} from './menu-item'; import {SelectTool} from '../../services/modes/select-tool'; +import {MenuItem} from './menu-item'; export class DeleteSelectedMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/model/edit-model-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/model/edit-model-menu-item.ts index f03a1c9..7408d34 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/model/edit-model-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/model/edit-model-menu-item.ts @@ -1,7 +1,7 @@ -import {MenuItem} from '../menu-item'; -import {CanvasTool} from '../../../services/modes/canvas-tool'; import {DialogModelEditComponent} from '../../../../../dialogs/dialog-model-edit/dialog-model-edit.component'; import {ModelChange} from '../../../../history-mode/model/model/model-change'; +import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {MenuItem} from '../menu-item'; export class EditModelMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/model/manage-model-permissions-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/model/manage-model-permissions-menu-item.ts index acfb057..a85578e 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/model/manage-model-permissions-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/model/manage-model-permissions-menu-item.ts @@ -1,10 +1,10 @@ -import {MenuItem} from '../menu-item'; -import {CanvasTool} from '../../../services/modes/canvas-tool'; import {DataType} from '@netgrif/petriflow'; import { - DialogManageRolesComponent, - RoleRefType + DialogManageRolesComponent, + RoleRefType, } from '../../../../../dialogs/dialog-manage-roles/dialog-manage-roles.component'; +import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {MenuItem} from '../menu-item'; export class ManageModelPermissionsMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/place/delete-place-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/place/delete-place-menu-item.ts index 73cc483..b79bb5e 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/place/delete-place-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/place/delete-place-menu-item.ts @@ -1,10 +1,10 @@ -import {DeleteMenuItem} from '../delete-menu-item'; -import {CanvasPlace} from '../../../domain/canvas-place'; -import {CanvasTool} from '../../../services/modes/canvas-tool'; import { - DialogPlaceRefDeleteComponent, - PlaceRefDeleteData + DialogPlaceRefDeleteComponent, + PlaceRefDeleteData, } from '../../../../../dialogs/dialog-place-ref-delete/dialog-place-ref-delete.component'; +import {CanvasPlace} from '../../../domain/canvas-place'; +import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {DeleteMenuItem} from '../delete-menu-item'; export class DeletePlaceMenuItem extends DeleteMenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/place/edit-place-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/place/edit-place-menu-item.ts index 0705814..ab8dffb 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/place/edit-place-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/place/edit-place-menu-item.ts @@ -1,11 +1,11 @@ -import {MenuItem} from '../menu-item'; import { - DialogPlaceEditComponent, - PlaceEditData + DialogPlaceEditComponent, + PlaceEditData, } from '../../../../../dialogs/dialog-place-edit/dialog-place-edit.component'; import {PlaceChange} from '../../../../history-mode/model/place/place-change'; import {CanvasPlace} from '../../../domain/canvas-place'; import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {MenuItem} from '../menu-item'; export class EditPlaceMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/select-arcs-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/select-arcs-menu-item.ts index 6402738..ba113d5 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/select-arcs-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/select-arcs-menu-item.ts @@ -1,6 +1,6 @@ -import {MenuItem} from './menu-item'; -import {SelectTool} from '../../services/modes/select-tool'; import {CanvasNodeElement} from '../../domain/canvas-node-element'; +import {SelectTool} from '../../services/modes/select-tool'; +import {MenuItem} from './menu-item'; export class SelectArcsMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/transition/delete-transition-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/transition/delete-transition-menu-item.ts index 52f4412..2f1d546 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/transition/delete-transition-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/transition/delete-transition-menu-item.ts @@ -1,6 +1,6 @@ -import {DeleteMenuItem} from '../delete-menu-item'; -import {CanvasTool} from '../../../services/modes/canvas-tool'; import {CanvasTransition} from '../../../domain/canvas-transition'; +import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {DeleteMenuItem} from '../delete-menu-item'; export class DeleteTransitionMenuItem extends DeleteMenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-form-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-form-menu-item.ts index 2b41536..cdf2533 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-form-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-form-menu-item.ts @@ -1,6 +1,6 @@ -import {MenuItem} from '../menu-item'; import {CanvasTransition} from '../../../domain/canvas-transition'; import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {MenuItem} from '../menu-item'; export class EditFormMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-actions-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-actions-menu-item.ts index 2b50e6a..5c8420c 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-actions-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-actions-menu-item.ts @@ -1,6 +1,6 @@ -import {MenuItem} from '../menu-item'; import {CanvasTransition} from '../../../domain/canvas-transition'; import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {MenuItem} from '../menu-item'; export class EditTransitionActionsMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-menu-item.ts index 11d4481..60f5773 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-menu-item.ts @@ -1,11 +1,11 @@ -import {MenuItem} from '../menu-item'; +import {ChangedTransition} from '../../../../../dialogs/dialog-transition-edit/changed-transition'; import { - DialogTransitionEditComponent, - TransitionEditData + DialogTransitionEditComponent, + TransitionEditData, } from '../../../../../dialogs/dialog-transition-edit/dialog-transition-edit.component'; import {CanvasTransition} from '../../../domain/canvas-transition'; import {CanvasTool} from '../../../services/modes/canvas-tool'; -import {ChangedTransition} from '../../../../../dialogs/dialog-transition-edit/changed-transition'; +import {MenuItem} from '../menu-item'; export class EditTransitionMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-permissions-menu-item.ts b/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-permissions-menu-item.ts index e03b8d5..e77ade9 100644 --- a/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-permissions-menu-item.ts +++ b/src/app/modeler/edit-mode/context-menu/menu-items/transition/edit-transition-permissions-menu-item.ts @@ -1,11 +1,11 @@ -import {MenuItem} from '../menu-item'; +import {DataType} from '@netgrif/petriflow'; import { - DialogManageRolesComponent, - RoleRefType + DialogManageRolesComponent, + RoleRefType, } from '../../../../../dialogs/dialog-manage-roles/dialog-manage-roles.component'; -import {DataType} from '@netgrif/petriflow'; import {CanvasTransition} from '../../../domain/canvas-transition'; import {CanvasTool} from '../../../services/modes/canvas-tool'; +import {MenuItem} from '../menu-item'; export class EditTransitionPermissionsMenuItem extends MenuItem { diff --git a/src/app/modeler/edit-mode/domain/arc-builders/arc-builder.ts b/src/app/modeler/edit-mode/domain/arc-builders/arc-builder.ts index 241e1a6..fcb5bb8 100644 --- a/src/app/modeler/edit-mode/domain/arc-builders/arc-builder.ts +++ b/src/app/modeler/edit-mode/domain/arc-builders/arc-builder.ts @@ -1,6 +1,6 @@ -import {PetriflowArc} from '@netgrif/petriflow.svg/lib/svg-elements/petriflow-arc'; import {NodeElement as SvgNodeElement} from '@netgrif/petri.svg'; import {Arc, NodeElement} from '@netgrif/petriflow'; +import {PetriflowArc} from '@netgrif/petriflow.svg/lib/svg-elements/petriflow-arc'; import {Identifiable} from '../identifiable'; export abstract class ArcBuilder, U extends Arc> extends Identifiable { diff --git a/src/app/modeler/edit-mode/domain/arc-builders/arc-factory.service.ts b/src/app/modeler/edit-mode/domain/arc-builders/arc-factory.service.ts index 70ec3d2..be1ff39 100644 --- a/src/app/modeler/edit-mode/domain/arc-builders/arc-factory.service.ts +++ b/src/app/modeler/edit-mode/domain/arc-builders/arc-factory.service.ts @@ -1,14 +1,14 @@ import {Injectable} from '@angular/core'; -import {InhibitorArcBuilder} from './inhibitor-arc-builder'; +import {NodeElement as SvgNodeElement} from '@netgrif/petri.svg'; import {Arc, ArcType, NodeElement} from '@netgrif/petriflow'; -import {ReadArcBuilder} from './read-arc-builder'; +import {PetriflowArc} from '@netgrif/petriflow.svg'; import {AbstractRegistry} from '../../../abstract-registry'; import {ArcBuilder} from './arc-builder'; -import {ResetArcBuilder} from './reset-arc-builder'; +import {InhibitorArcBuilder} from './inhibitor-arc-builder'; +import {ReadArcBuilder} from './read-arc-builder'; import {RegularPTArcBuilder} from './regular-p-t-arc-builder'; -import {PetriflowArc} from '@netgrif/petriflow.svg'; import {RegularTPArcBuilder} from './regular-tparc-builder'; -import {NodeElement as SvgNodeElement} from '@netgrif/petri.svg'; +import {ResetArcBuilder} from './reset-arc-builder'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/edit-mode/domain/arc-builders/inhibitor-arc-builder.ts b/src/app/modeler/edit-mode/domain/arc-builders/inhibitor-arc-builder.ts index 628d735..188d3f5 100644 --- a/src/app/modeler/edit-mode/domain/arc-builders/inhibitor-arc-builder.ts +++ b/src/app/modeler/edit-mode/domain/arc-builders/inhibitor-arc-builder.ts @@ -1,7 +1,7 @@ -import {ArcBuilder} from './arc-builder'; -import {PetriflowInhibitorArc} from '@netgrif/petriflow.svg'; import {InhibitorArc as SvgInhibitorArc, Place as SvgPlace, Transition as SvgTransition} from '@netgrif/petri.svg'; import {InhibitorArc, Place, Transition} from '@netgrif/petriflow'; +import {PetriflowInhibitorArc} from '@netgrif/petriflow.svg'; +import {ArcBuilder} from './arc-builder'; export class InhibitorArcBuilder extends ArcBuilder { diff --git a/src/app/modeler/edit-mode/domain/arc-builders/read-arc-builder.ts b/src/app/modeler/edit-mode/domain/arc-builders/read-arc-builder.ts index 80fc10f..a625ea6 100644 --- a/src/app/modeler/edit-mode/domain/arc-builders/read-arc-builder.ts +++ b/src/app/modeler/edit-mode/domain/arc-builders/read-arc-builder.ts @@ -1,7 +1,7 @@ -import {ArcBuilder} from './arc-builder'; -import {PetriflowReadArc} from '@netgrif/petriflow.svg'; -import {Place, ReadArc, Transition} from '@netgrif/petriflow'; import {Place as SvgPlace, ReadArc as SvgReadArc, Transition as SvgTransition} from '@netgrif/petri.svg'; +import {Place, ReadArc, Transition} from '@netgrif/petriflow'; +import {PetriflowReadArc} from '@netgrif/petriflow.svg'; +import {ArcBuilder} from './arc-builder'; export class ReadArcBuilder extends ArcBuilder { diff --git a/src/app/modeler/edit-mode/domain/arc-builders/regular-p-t-arc-builder.ts b/src/app/modeler/edit-mode/domain/arc-builders/regular-p-t-arc-builder.ts index 3199162..46e26c8 100644 --- a/src/app/modeler/edit-mode/domain/arc-builders/regular-p-t-arc-builder.ts +++ b/src/app/modeler/edit-mode/domain/arc-builders/regular-p-t-arc-builder.ts @@ -1,11 +1,11 @@ -import {ArcBuilder} from './arc-builder'; -import {PetriflowPlaceTransitionArc} from '@netgrif/petriflow.svg'; -import {Place, RegularPlaceTransitionArc, Transition} from '@netgrif/petriflow'; import { - Place as SvgPlace, - RegularPlaceTransitionArc as SvgRegularPlaceTransitionArc, - Transition as SvgTransition + Place as SvgPlace, + RegularPlaceTransitionArc as SvgRegularPlaceTransitionArc, + Transition as SvgTransition, } from '@netgrif/petri.svg'; +import {Place, RegularPlaceTransitionArc, Transition} from '@netgrif/petriflow'; +import {PetriflowPlaceTransitionArc} from '@netgrif/petriflow.svg'; +import {ArcBuilder} from './arc-builder'; export class RegularPTArcBuilder extends ArcBuilder { diff --git a/src/app/modeler/edit-mode/domain/arc-builders/regular-tparc-builder.ts b/src/app/modeler/edit-mode/domain/arc-builders/regular-tparc-builder.ts index 55a5f94..fa012a8 100644 --- a/src/app/modeler/edit-mode/domain/arc-builders/regular-tparc-builder.ts +++ b/src/app/modeler/edit-mode/domain/arc-builders/regular-tparc-builder.ts @@ -1,11 +1,11 @@ -import {ArcBuilder} from './arc-builder'; -import {PetriflowTransitionPlaceArc} from '@netgrif/petriflow.svg'; -import {Place, RegularTransitionPlaceArc, Transition} from '@netgrif/petriflow'; import { - Place as SvgPlace, - RegularTransitionPlaceArc as SvgRegularTransitionPlaceArc, - Transition as SvgTransition + Place as SvgPlace, + RegularTransitionPlaceArc as SvgRegularTransitionPlaceArc, + Transition as SvgTransition, } from '@netgrif/petri.svg'; +import {Place, RegularTransitionPlaceArc, Transition} from '@netgrif/petriflow'; +import {PetriflowTransitionPlaceArc} from '@netgrif/petriflow.svg'; +import {ArcBuilder} from './arc-builder'; export class RegularTPArcBuilder extends ArcBuilder { diff --git a/src/app/modeler/edit-mode/domain/arc-builders/reset-arc-builder.ts b/src/app/modeler/edit-mode/domain/arc-builders/reset-arc-builder.ts index 7cade7a..be7c2ee 100644 --- a/src/app/modeler/edit-mode/domain/arc-builders/reset-arc-builder.ts +++ b/src/app/modeler/edit-mode/domain/arc-builders/reset-arc-builder.ts @@ -1,7 +1,7 @@ -import {PetriflowResetArc} from '@netgrif/petriflow.svg'; +import {Place as SvgPlace, ResetArc as SvgResetArc, Transition as SvgTransition} from '@netgrif/petri.svg'; import {Place, ResetArc, Transition} from '@netgrif/petriflow'; +import {PetriflowResetArc} from '@netgrif/petriflow.svg'; import {ArcBuilder} from './arc-builder'; -import {Place as SvgPlace, ResetArc as SvgResetArc, Transition as SvgTransition} from '@netgrif/petri.svg'; export class ResetArcBuilder extends ArcBuilder { diff --git a/src/app/modeler/edit-mode/domain/canvas-arc.ts b/src/app/modeler/edit-mode/domain/canvas-arc.ts index c95a937..5c337b0 100644 --- a/src/app/modeler/edit-mode/domain/canvas-arc.ts +++ b/src/app/modeler/edit-mode/domain/canvas-arc.ts @@ -1,6 +1,6 @@ -import {PetriflowArc} from '@netgrif/petriflow.svg'; -import {Arc, NodeElement} from '@netgrif/petriflow'; import {Arc as SvgArc} from '@netgrif/petri.svg'; +import {Arc, NodeElement} from '@netgrif/petriflow'; +import {PetriflowArc} from '@netgrif/petriflow.svg'; import {ModelerConfig} from '../../modeler-config'; import {CanvasObject} from './canvas-object'; diff --git a/src/app/modeler/edit-mode/domain/canvas-element-collection.ts b/src/app/modeler/edit-mode/domain/canvas-element-collection.ts index f98d76c..898392d 100644 --- a/src/app/modeler/edit-mode/domain/canvas-element-collection.ts +++ b/src/app/modeler/edit-mode/domain/canvas-element-collection.ts @@ -1,11 +1,11 @@ -import {CanvasPlace} from './canvas-place'; -import {CanvasTransition} from './canvas-transition'; -import {CanvasArc} from './canvas-arc'; -import {CanvasNodeElement} from './canvas-node-element'; import {NodeElement} from '@netgrif/petriflow'; import {PetriflowNode} from '@netgrif/petriflow.svg'; -import {CanvasObject} from './canvas-object'; import {PetriflowCanvasElement} from '@netgrif/petriflow.svg/lib/svg-elements/petriflow-canvas-element'; +import {CanvasArc} from './canvas-arc'; +import {CanvasNodeElement} from './canvas-node-element'; +import {CanvasObject} from './canvas-object'; +import {CanvasPlace} from './canvas-place'; +import {CanvasTransition} from './canvas-transition'; export class CanvasElementCollection { diff --git a/src/app/modeler/edit-mode/domain/canvas-node-element.ts b/src/app/modeler/edit-mode/domain/canvas-node-element.ts index 4fd4fdf..a1438bc 100644 --- a/src/app/modeler/edit-mode/domain/canvas-node-element.ts +++ b/src/app/modeler/edit-mode/domain/canvas-node-element.ts @@ -19,4 +19,10 @@ export abstract class CanvasNodeElement{ diff --git a/src/app/modeler/edit-mode/edit-mode.component.spec.ts b/src/app/modeler/edit-mode/edit-mode.component.spec.ts index 0b85bed..e12b1a3 100644 --- a/src/app/modeler/edit-mode/edit-mode.component.spec.ts +++ b/src/app/modeler/edit-mode/edit-mode.component.spec.ts @@ -1,6 +1,6 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; -import { EditModeComponent } from './edit-mode.component'; +import {EditModeComponent} from './edit-mode.component'; describe('BpmnModeComponent', () => { let component: EditModeComponent; diff --git a/src/app/modeler/edit-mode/edit-mode.component.ts b/src/app/modeler/edit-mode/edit-mode.component.ts index 2430ee6..25311ef 100644 --- a/src/app/modeler/edit-mode/edit-mode.component.ts +++ b/src/app/modeler/edit-mode/edit-mode.component.ts @@ -1,13 +1,13 @@ -import {AfterViewInit, Component, ElementRef, OnDestroy, ViewChild} from '@angular/core'; +import {AfterViewInit, Component, ElementRef, HostListener, OnDestroy, ViewChild} from '@angular/core'; import {MatDialog} from '@angular/material/dialog'; import {NgxDropzoneChangeEvent} from 'ngx-dropzone'; import {ModelImportService} from '../model-import-service'; -import {EditModeService} from './edit-mode.service'; +import {ModelerUtils} from '../modeler-utils'; +import {HistoryService} from '../services/history/history.service'; import {ModelService} from '../services/model/model.service'; -import {ContextMenuComponent} from './context-menu/context-menu.component'; import {ContextMenu} from './context-menu/context-menu'; -import {HistoryService} from '../services/history/history.service'; -import {ModelerUtils} from '../modeler-utils'; +import {ContextMenuComponent} from './context-menu/context-menu.component'; +import {EditModeService} from './edit-mode.service'; @Component({ selector: 'nab-edit-mode', @@ -28,6 +28,12 @@ export class EditModeComponent implements AfterViewInit, OnDestroy { ) { } + @HostListener('contextmenu', ['$event']) + onRightClick(event: MouseEvent) { + event.preventDefault(); + event.stopPropagation(); + } + ngAfterViewInit() { ModelerUtils.clearSelection(); this._editModeService.contextMenuItems.subscribe(menu => { diff --git a/src/app/modeler/edit-mode/edit-mode.service.ts b/src/app/modeler/edit-mode/edit-mode.service.ts index fd6fcc2..e8b57b2 100644 --- a/src/app/modeler/edit-mode/edit-mode.service.ts +++ b/src/app/modeler/edit-mode/edit-mode.service.ts @@ -1,46 +1,46 @@ import {Injectable, Injector} from '@angular/core'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {CanvasConfiguration} from '@netgrif/petri.svg'; +import {Arc, ArcType, NodeElement, Place, Transition} from '@netgrif/petriflow'; +import {PetriflowCanvasService, PetriflowNode} from '@netgrif/petriflow.svg'; +import {PanzoomOptions} from '@panzoom/panzoom'; +import {BehaviorSubject} 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'; -import {Mode} from '../control-panel/modes/mode'; +import {ActionsMasterDetailService} from '../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../control-panel/control-panel-button'; -import {ToolGroup} from '../control-panel/tools/tool-group'; import {ControlPanelIcon} from '../control-panel/control-panel-icon'; -import {CanvasTool} from './services/modes/canvas-tool'; -import {ClearModelTool} from './services/modes/clear-model-tool'; -import {GridTool} from './services/modes/grid-tool'; -import {SwitchLabelTool} from './services/modes/switch-label-tool'; -import {CanvasConfiguration} from '@netgrif/petri.svg'; -import {PetriflowCanvasService, PetriflowNode} from '@netgrif/petriflow.svg'; -import {CanvasPlace} from './domain/canvas-place'; -import {CanvasArc} from './domain/canvas-arc'; -import {Arc, ArcType, NodeElement, Place, Transition} from '@netgrif/petriflow'; -import {CanvasTransition} from './domain/canvas-transition'; -import {MatDialog} from '@angular/material/dialog'; +import {Mode} from '../control-panel/modes/mode'; +import {ToolGroup} from '../control-panel/tools/tool-group'; import {PlaceChange} from '../history-mode/model/place/place-change'; -import {ChangedArc} from '../../dialogs/dialog-arc-edit/changed-arc'; -import {ArcFactory} from './domain/arc-builders/arc-factory.service'; -import {BehaviorSubject} from 'rxjs'; -import {ContextMenu} from './context-menu/context-menu'; import {ModelerConfig} from '../modeler-config'; -import {ModelService} from '../services/model/model.service'; -import {ChangedTransition} from '../../dialogs/dialog-transition-edit/changed-transition'; +import {SelectedTransitionService} from '../selected-transition.service'; import {CanvasModeService} from '../services/canvas/canvas-mode-service'; -import {ResetPositionAndZoomTool} from './services/modes/reset-position-and-zoom-tool'; -import {RemoveTokenTool} from './services/modes/remove-token-tool'; +import {HistoryService} from '../services/history/history.service'; +import {ModelService} from '../services/model/model.service'; +import {ContextMenu} from './context-menu/context-menu'; +import {ArcFactory} from './domain/arc-builders/arc-factory.service'; +import {CanvasArc} from './domain/canvas-arc'; +import {CanvasPlace} from './domain/canvas-place'; +import {CanvasTransition} from './domain/canvas-transition'; import {AddTokenTool} from './services/modes/add-token-tool'; +import {CanvasTool} from './services/modes/canvas-tool'; +import {ClearModelTool} from './services/modes/clear-model-tool'; +import {CreateInhibitorArcTool} from './services/modes/create-inhibitor-arc-tools'; import {CreatePlaceTool} from './services/modes/create-place-tool'; +import {CreateReadArcTool} from './services/modes/create-read-arc-tool'; +import {CreateRegularArcTool} from './services/modes/create-regular-arc-tool'; +import {CreateResetArcTool} from './services/modes/create-reset-arc-tool'; import {CreateTransitionTool} from './services/modes/create-transition-tool'; +import {GridTool} from './services/modes/grid-tool'; import {QuickDrawTool} from './services/modes/quick-draw-tool'; +import {RemoveTokenTool} from './services/modes/remove-token-tool'; +import {ResetPositionAndZoomTool} from './services/modes/reset-position-and-zoom-tool'; import {SelectTool} from './services/modes/select-tool'; -import {CreateRegularArcTool} from './services/modes/create-regular-arc-tool'; -import {CreateResetArcTool} from './services/modes/create-reset-arc-tool'; -import {CreateInhibitorArcTool} from './services/modes/create-inhibitor-arc-tools'; -import {CreateReadArcTool} from './services/modes/create-read-arc-tool'; -import {SelectedTransitionService} from '../selected-transition.service'; -import {Router} from '@angular/router'; -import {HistoryService} from '../services/history/history.service'; -import {PanzoomOptions} from '@panzoom/panzoom'; -import {ActionsModeService} from '../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../actions-mode/actions-master-detail.setvice'; +import {SwitchLabelTool} from './services/modes/switch-label-tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/edit-mode/services/modes/add-token-tool.ts b/src/app/modeler/edit-mode/services/modes/add-token-tool.ts index 17fb93a..9b36a4e 100644 --- a/src/app/modeler/edit-mode/services/modes/add-token-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/add-token-tool.ts @@ -1,15 +1,15 @@ -import {CanvasTool} from './canvas-tool'; -import {CanvasPlace} from '../../domain/canvas-place'; -import {ControlPanelButton} from '../../../control-panel/control-panel-button'; -import {ControlPanelIcon} from 'src/app/modeler/control-panel/control-panel-icon'; -import {ModelService} from '../../../services/model/model.service'; import {MatDialog} from '@angular/material/dialog'; -import {EditModeService} from '../../edit-mode.service'; import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; +import {ControlPanelIcon} from 'src/app/modeler/control-panel/control-panel-icon'; import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; +import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {PlaceChange} from '../../../history-mode/model/place/place-change'; +import {SelectedTransitionService} from '../../../selected-transition.service'; +import {ModelService} from '../../../services/model/model.service'; +import {CanvasPlace} from '../../domain/canvas-place'; +import {EditModeService} from '../../edit-mode.service'; +import {CanvasTool} from './canvas-tool'; export class AddTokenTool extends CanvasTool { diff --git a/src/app/modeler/edit-mode/services/modes/canvas-tool.ts b/src/app/modeler/edit-mode/services/modes/canvas-tool.ts index ff32a36..96c76bd 100644 --- a/src/app/modeler/edit-mode/services/modes/canvas-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/canvas-tool.ts @@ -1,38 +1,37 @@ -import {CanvasElementCollection} from '../../domain/canvas-element-collection'; -import {PetriflowCanvasService} from '@netgrif/petriflow.svg'; -import {EditModeService} from '../../edit-mode.service'; import {MatDialog} from '@angular/material/dialog'; -import {ModelService} from '../../../services/model/model.service'; -import {CanvasListenerTool} from '../../../services/canvas/canvas-listener-tool'; -import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {Router} from '@angular/router'; +import {PetriflowCanvasService} from '@netgrif/petriflow.svg'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; +import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {SelectedTransitionService} from '../../../selected-transition.service'; -import {Hotkey} from './domain/hotkey'; -import {ComponentType} from '@angular/cdk/overlay'; -import {CanvasTransition} from '../../domain/canvas-transition'; -import {CanvasPlace} from '../../domain/canvas-place'; +import {CanvasListenerTool} from '../../../services/canvas/canvas-listener-tool'; +import {ContextMenuInterruptionError} from '../../../services/canvas/listeners/context-menu-interruption-error'; +import {HistoryService} from '../../../services/history/history.service'; +import {ModelService} from '../../../services/model/model.service'; import {ContextMenu} from '../../context-menu/context-menu'; +import {DeleteArcMenuItem} from '../../context-menu/menu-items/arc/delete-arc-menu-item'; +import {DeleteBreakpointMenuItem} from '../../context-menu/menu-items/arc/delete-breakpoint-menu-item'; +import {EditArcMenuItem} from '../../context-menu/menu-items/arc/edit-arc-menu-item'; +import {EditModelMenuItem} from '../../context-menu/menu-items/model/edit-model-menu-item'; +import {ManageModelPermissionsMenuItem} from '../../context-menu/menu-items/model/manage-model-permissions-menu-item'; +import {DeletePlaceMenuItem} from '../../context-menu/menu-items/place/delete-place-menu-item'; import {EditPlaceMenuItem} from '../../context-menu/menu-items/place/edit-place-menu-item'; -import {EditTransitionMenuItem} from '../../context-menu/menu-items/transition/edit-transition-menu-item'; +import {DeleteTransitionMenuItem} from '../../context-menu/menu-items/transition/delete-transition-menu-item'; import {EditFormMenuItem} from '../../context-menu/menu-items/transition/edit-form-menu-item'; import { - EditTransitionPermissionsMenuItem -} from '../../context-menu/menu-items/transition/edit-transition-permissions-menu-item'; -import { - EditTransitionActionsMenuItem + EditTransitionActionsMenuItem, } from '../../context-menu/menu-items/transition/edit-transition-actions-menu-item'; +import {EditTransitionMenuItem} from '../../context-menu/menu-items/transition/edit-transition-menu-item'; +import { + EditTransitionPermissionsMenuItem, +} from '../../context-menu/menu-items/transition/edit-transition-permissions-menu-item'; import {CanvasArc} from '../../domain/canvas-arc'; -import {EditArcMenuItem} from '../../context-menu/menu-items/arc/edit-arc-menu-item'; -import {DeleteBreakpointMenuItem} from '../../context-menu/menu-items/arc/delete-breakpoint-menu-item'; -import {DeleteTransitionMenuItem} from '../../context-menu/menu-items/transition/delete-transition-menu-item'; -import {DeleteArcMenuItem} from '../../context-menu/menu-items/arc/delete-arc-menu-item'; -import {EditModelMenuItem} from '../../context-menu/menu-items/model/edit-model-menu-item'; -import {ManageModelPermissionsMenuItem} from '../../context-menu/menu-items/model/manage-model-permissions-menu-item'; -import {DeletePlaceMenuItem} from '../../context-menu/menu-items/place/delete-place-menu-item'; -import {ContextMenuInterruptionError} from '../../../services/canvas/listeners/context-menu-interruption-error'; -import {HistoryService} from '../../../services/history/history.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CanvasElementCollection} from '../../domain/canvas-element-collection'; +import {CanvasPlace} from '../../domain/canvas-place'; +import {CanvasTransition} from '../../domain/canvas-transition'; +import {EditModeService} from '../../edit-mode.service'; +import {Hotkey} from './domain/hotkey'; export abstract class CanvasTool extends CanvasListenerTool { @@ -118,16 +117,6 @@ export abstract class CanvasTool extends CanvasListenerTool { this.closeContextMenu(); } - openDialog(dialog: ComponentType, config: any, afterClose?: (value: any) => void): void { - this.unbindKeys(); - this.dialog.open(dialog, config).afterClosed().subscribe(value => { - if (afterClose) { - afterClose(value); - } - this.bindKeys(); - }); - } - closeContextMenuOnClick(): void { if (this.isContextMenuOpen()) { this.closeContextMenu(); diff --git a/src/app/modeler/edit-mode/services/modes/clear-model-tool.ts b/src/app/modeler/edit-mode/services/modes/clear-model-tool.ts index 58edaac..4ee8a92 100644 --- a/src/app/modeler/edit-mode/services/modes/clear-model-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/clear-model-tool.ts @@ -1,14 +1,14 @@ +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {DialogDeleteModelComponent} from '../../../../dialogs/dialog-delete-model/dialog-delete-model.component'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; -import {DialogDeleteModelComponent} from '../../../../dialogs/dialog-delete-model/dialog-delete-model.component'; -import {CanvasTool} from './canvas-tool'; +import {SelectedTransitionService} from '../../../selected-transition.service'; import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CanvasTool} from './canvas-tool'; export class ClearModelTool extends CanvasTool { diff --git a/src/app/modeler/edit-mode/services/modes/create-arc-tool.ts b/src/app/modeler/edit-mode/services/modes/create-arc-tool.ts index 3d17ed6..7a3c1b7 100644 --- a/src/app/modeler/edit-mode/services/modes/create-arc-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/create-arc-tool.ts @@ -1,19 +1,19 @@ -import {CanvasNodeElement} from '../../domain/canvas-node-element'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {NodeElement as SvgNodeElement} from '@netgrif/petri.svg'; import {ArcType, NodeElement} from '@netgrif/petriflow'; -import {NodeElement as SvgNodeElement} from '@netgrif/petri.svg' import {PetriflowNode} from '@netgrif/petriflow.svg'; -import {CanvasTool} from './canvas-tool'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../../../control-panel/control-panel-button'; -import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; -import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; import {SelectedTransitionService} from '../../../selected-transition.service'; +import {ModelService} from '../../../services/model/model.service'; import {CanvasArc} from '../../domain/canvas-arc'; +import {CanvasNodeElement} from '../../domain/canvas-node-element'; import {CanvasPlace} from '../../domain/canvas-place'; import {CanvasTransition} from '../../domain/canvas-transition'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {EditModeService} from '../../edit-mode.service'; +import {CanvasTool} from './canvas-tool'; export abstract class CreateArcTool>> extends CanvasTool { diff --git a/src/app/modeler/edit-mode/services/modes/create-inhibitor-arc-tools.ts b/src/app/modeler/edit-mode/services/modes/create-inhibitor-arc-tools.ts index d6181e5..143ccd7 100644 --- a/src/app/modeler/edit-mode/services/modes/create-inhibitor-arc-tools.ts +++ b/src/app/modeler/edit-mode/services/modes/create-inhibitor-arc-tools.ts @@ -1,15 +1,15 @@ -import {ArcType} from '@netgrif/petriflow'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; import {InhibitorArc as SvgInhibitorArc} from '@netgrif/petri.svg'; +import {ArcType} from '@netgrif/petriflow'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; -import {CreatePTArc} from './create-ptarc'; +import {SelectedTransitionService} from '../../../selected-transition.service'; import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CreatePTArc} from './create-ptarc'; export class CreateInhibitorArcTool extends CreatePTArc { diff --git a/src/app/modeler/edit-mode/services/modes/create-place-tool.ts b/src/app/modeler/edit-mode/services/modes/create-place-tool.ts index 58fb391..1090e01 100644 --- a/src/app/modeler/edit-mode/services/modes/create-place-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/create-place-tool.ts @@ -1,13 +1,13 @@ -import {CanvasTool} from './canvas-tool'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; +import {SelectedTransitionService} from '../../../selected-transition.service'; import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CanvasTool} from './canvas-tool'; export class CreatePlaceTool extends CanvasTool { diff --git a/src/app/modeler/edit-mode/services/modes/create-ptarc.ts b/src/app/modeler/edit-mode/services/modes/create-ptarc.ts index cf7d206..a7da8ea 100644 --- a/src/app/modeler/edit-mode/services/modes/create-ptarc.ts +++ b/src/app/modeler/edit-mode/services/modes/create-ptarc.ts @@ -1,8 +1,8 @@ +import {ArcType} from '@netgrif/petriflow'; +import {CanvasArc} from '../../domain/canvas-arc'; import {CanvasPlace} from '../../domain/canvas-place'; import {CanvasTransition} from '../../domain/canvas-transition'; import {CreateArcTool} from './create-arc-tool'; -import {ArcType} from '@netgrif/petriflow'; -import {CanvasArc} from '../../domain/canvas-arc'; export abstract class CreatePTArc extends CreateArcTool { diff --git a/src/app/modeler/edit-mode/services/modes/create-read-arc-tool.ts b/src/app/modeler/edit-mode/services/modes/create-read-arc-tool.ts index 1a109f7..b6a4d78 100644 --- a/src/app/modeler/edit-mode/services/modes/create-read-arc-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/create-read-arc-tool.ts @@ -1,15 +1,15 @@ -import {ControlPanelButton} from '../../../control-panel/control-panel-button'; -import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; import {ReadArc as SvgReadArc} from '@netgrif/petri.svg'; import {ArcType} from '@netgrif/petriflow'; -import {CreatePTArc} from './create-ptarc'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; +import {ControlPanelButton} from '../../../control-panel/control-panel-button'; +import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; +import {SelectedTransitionService} from '../../../selected-transition.service'; import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CreatePTArc} from './create-ptarc'; export class CreateReadArcTool extends CreatePTArc { diff --git a/src/app/modeler/edit-mode/services/modes/create-regular-arc-tool.ts b/src/app/modeler/edit-mode/services/modes/create-regular-arc-tool.ts index 64912ef..f76653f 100644 --- a/src/app/modeler/edit-mode/services/modes/create-regular-arc-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/create-regular-arc-tool.ts @@ -1,19 +1,18 @@ +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {RegularTransitionPlaceArc as SvgArc} from '@netgrif/petri.svg'; +import {ArcType} from '@netgrif/petriflow'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; -import {CreateArcTool} from './create-arc-tool'; +import {SelectedTransitionService} from '../../../selected-transition.service'; +import {ModelService} from '../../../services/model/model.service'; +import {CanvasArc} from '../../domain/canvas-arc'; import {CanvasPlace} from '../../domain/canvas-place'; import {CanvasTransition} from '../../domain/canvas-transition'; -import {RegularTransitionPlaceArc as SvgArc} from '@netgrif/petri.svg'; -import {CanvasArc} from '../../domain/canvas-arc'; -import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ArcType} from '@netgrif/petriflow'; -import {Observable, of} from 'rxjs'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CreateArcTool} from './create-arc-tool'; export class CreateRegularArcTool extends CreateArcTool { diff --git a/src/app/modeler/edit-mode/services/modes/create-reset-arc-tool.ts b/src/app/modeler/edit-mode/services/modes/create-reset-arc-tool.ts index 3547291..444de13 100644 --- a/src/app/modeler/edit-mode/services/modes/create-reset-arc-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/create-reset-arc-tool.ts @@ -1,15 +1,15 @@ -import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; -import {ControlPanelButton} from '../../../control-panel/control-panel-button'; -import {CreatePTArc} from './create-ptarc'; -import {ArcType} from '@netgrif/petriflow'; -import {ResetArc as SvgResetArc} from '@netgrif/petri.svg'; -import {ModelService} from '../../../services/model/model.service'; import {MatDialog} from '@angular/material/dialog'; -import {EditModeService} from '../../edit-mode.service'; import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; +import {ResetArc as SvgResetArc} from '@netgrif/petri.svg'; +import {ArcType} from '@netgrif/petriflow'; import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; +import {ControlPanelButton} from '../../../control-panel/control-panel-button'; +import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; +import {SelectedTransitionService} from '../../../selected-transition.service'; +import {ModelService} from '../../../services/model/model.service'; +import {EditModeService} from '../../edit-mode.service'; +import {CreatePTArc} from './create-ptarc'; export class CreateResetArcTool extends CreatePTArc { diff --git a/src/app/modeler/edit-mode/services/modes/create-transition-tool.ts b/src/app/modeler/edit-mode/services/modes/create-transition-tool.ts index 5ccc47e..9296309 100644 --- a/src/app/modeler/edit-mode/services/modes/create-transition-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/create-transition-tool.ts @@ -1,13 +1,13 @@ -import {CanvasTool} from './canvas-tool'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; +import {SelectedTransitionService} from '../../../selected-transition.service'; import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CanvasTool} from './canvas-tool'; export class CreateTransitionTool extends CanvasTool { diff --git a/src/app/modeler/edit-mode/services/modes/grid-tool.ts b/src/app/modeler/edit-mode/services/modes/grid-tool.ts index 5b58a92..76c733b 100644 --- a/src/app/modeler/edit-mode/services/modes/grid-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/grid-tool.ts @@ -1,13 +1,13 @@ +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; -import {CanvasTool} from './canvas-tool'; +import {SelectedTransitionService} from '../../../selected-transition.service'; import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CanvasTool} from './canvas-tool'; export class GridTool extends CanvasTool { diff --git a/src/app/modeler/edit-mode/services/modes/quick-draw-tool.ts b/src/app/modeler/edit-mode/services/modes/quick-draw-tool.ts index 7ad59a0..5809559 100644 --- a/src/app/modeler/edit-mode/services/modes/quick-draw-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/quick-draw-tool.ts @@ -1,24 +1,24 @@ -import {CanvasTool} from './canvas-tool'; -import {ControlPanelButton} from '../../../control-panel/control-panel-button'; -import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; -import {CanvasPlace} from '../../domain/canvas-place'; -import {CanvasTransition} from '../../domain/canvas-transition'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; import { - NodeElement as SvgNodeElement, - RegularPlaceTransitionArc as SvgRegularPlaceTransitionArc, - RegularTransitionPlaceArc as SvgRegularTransitionPlaceArc + NodeElement as SvgNodeElement, + RegularPlaceTransitionArc as SvgRegularPlaceTransitionArc, + RegularTransitionPlaceArc as SvgRegularTransitionPlaceArc, } from '@netgrif/petri.svg'; -import {CanvasArc} from '../../domain/canvas-arc'; import {NodeElement} from '@netgrif/petriflow'; import {PetriflowNode} from '@netgrif/petriflow.svg'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; +import {ControlPanelButton} from '../../../control-panel/control-panel-button'; +import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; +import {SelectedTransitionService} from '../../../selected-transition.service'; +import {ModelService} from '../../../services/model/model.service'; +import {CanvasArc} from '../../domain/canvas-arc'; import {CanvasNodeElement} from '../../domain/canvas-node-element'; -import {MatDialog} from '@angular/material/dialog'; +import {CanvasPlace} from '../../domain/canvas-place'; +import {CanvasTransition} from '../../domain/canvas-transition'; import {EditModeService} from '../../edit-mode.service'; -import {ModelService} from '../../../services/model/model.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CanvasTool} from './canvas-tool'; enum Step { PLACE, diff --git a/src/app/modeler/edit-mode/services/modes/remove-token-tool.ts b/src/app/modeler/edit-mode/services/modes/remove-token-tool.ts index 5ca3144..3192cac 100644 --- a/src/app/modeler/edit-mode/services/modes/remove-token-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/remove-token-tool.ts @@ -1,15 +1,15 @@ -import {CanvasPlace} from '../../domain/canvas-place'; -import {CanvasTool} from './canvas-tool'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; +import {PlaceChange} from '../../../history-mode/model/place/place-change'; +import {SelectedTransitionService} from '../../../selected-transition.service'; import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; +import {CanvasPlace} from '../../domain/canvas-place'; import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {PlaceChange} from '../../../history-mode/model/place/place-change'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CanvasTool} from './canvas-tool'; export class RemoveTokenTool extends CanvasTool { diff --git a/src/app/modeler/edit-mode/services/modes/reset-position-and-zoom-tool.ts b/src/app/modeler/edit-mode/services/modes/reset-position-and-zoom-tool.ts index ad5bf56..b9544e5 100644 --- a/src/app/modeler/edit-mode/services/modes/reset-position-and-zoom-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/reset-position-and-zoom-tool.ts @@ -1,14 +1,13 @@ -import {Injectable} from '@angular/core'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; -import {CanvasTool} from './canvas-tool'; +import {SelectedTransitionService} from '../../../selected-transition.service'; import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CanvasTool} from './canvas-tool'; export class ResetPositionAndZoomTool extends CanvasTool { diff --git a/src/app/modeler/edit-mode/services/modes/select-tool.ts b/src/app/modeler/edit-mode/services/modes/select-tool.ts index 6eaf089..e478bc4 100644 --- a/src/app/modeler/edit-mode/services/modes/select-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/select-tool.ts @@ -1,30 +1,30 @@ -import {CanvasTool} from './canvas-tool'; -import {ControlPanelButton} from '../../../control-panel/control-panel-button'; -import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; -import {CanvasElementCollection} from '../../domain/canvas-element-collection'; -import {ModelService} from '../../../services/model/model.service'; -import {EditModeService} from '../../edit-mode.service'; import {MatDialog} from '@angular/material/dialog'; -import {Hotkey} from './domain/hotkey'; -import {CanvasPlace} from '../../domain/canvas-place'; -import {CanvasTransition} from '../../domain/canvas-transition'; -import {CanvasArc} from '../../domain/canvas-arc'; -import {CanvasObject} from '../../domain/canvas-object'; import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ContextMenu} from '../../context-menu/context-menu'; -import {HistoryService} from '../../../services/history/history.service'; import { - DialogPlaceRefDeleteComponent, - PlaceRefDeleteData + DialogPlaceRefDeleteComponent, + PlaceRefDeleteData, } from '../../../../dialogs/dialog-place-ref-delete/dialog-place-ref-delete.component'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; +import {ControlPanelButton} from '../../../control-panel/control-panel-button'; +import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; import {ModelerConfig} from '../../../modeler-config'; -import {DeleteSelectedMenuItem} from '../../context-menu/menu-items/delete-selected-menu-item'; +import {SelectedTransitionService} from '../../../selected-transition.service'; +import {HistoryService} from '../../../services/history/history.service'; +import {ModelService} from '../../../services/model/model.service'; +import {ContextMenu} from '../../context-menu/context-menu'; import {DeleteMenuItem} from '../../context-menu/menu-items/delete-menu-item'; +import {DeleteSelectedMenuItem} from '../../context-menu/menu-items/delete-selected-menu-item'; import {SelectArcsMenuItem} from '../../context-menu/menu-items/select-arcs-menu-item'; +import {CanvasArc} from '../../domain/canvas-arc'; +import {CanvasElementCollection} from '../../domain/canvas-element-collection'; import {CanvasNodeElement} from '../../domain/canvas-node-element'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CanvasObject} from '../../domain/canvas-object'; +import {CanvasPlace} from '../../domain/canvas-place'; +import {CanvasTransition} from '../../domain/canvas-transition'; +import {EditModeService} from '../../edit-mode.service'; +import {CanvasTool} from './canvas-tool'; +import {Hotkey} from './domain/hotkey'; export class SelectTool extends CanvasTool { @@ -91,6 +91,7 @@ export class SelectTool extends CanvasTool { reset() { super.reset(); this.restart(); + this.selectedElements.clear(); this.clipboardElements.clear(); this.deselectAll(); } diff --git a/src/app/modeler/edit-mode/services/modes/switch-label-tool.ts b/src/app/modeler/edit-mode/services/modes/switch-label-tool.ts index 0c5c2fd..888de70 100644 --- a/src/app/modeler/edit-mode/services/modes/switch-label-tool.ts +++ b/src/app/modeler/edit-mode/services/modes/switch-label-tool.ts @@ -1,15 +1,14 @@ +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {NodeElement} from '@netgrif/petriflow'; +import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; import {ControlPanelButton} from '../../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../../control-panel/control-panel-icon'; -import {NodeElement} from '@netgrif/petriflow'; -import {CanvasTool} from './canvas-tool'; -import {Injectable} from '@angular/core'; +import {SelectedTransitionService} from '../../../selected-transition.service'; import {ModelService} from '../../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; import {EditModeService} from '../../edit-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../../selected-transition.service'; -import {ActionsModeService} from '../../../actions-mode/actions-mode.service'; -import {ActionsMasterDetailService} from '../../../actions-mode/actions-master-detail.setvice'; +import {CanvasTool} from './canvas-tool'; export class SwitchLabelTool extends CanvasTool { diff --git a/src/app/modeler/gridster-field-to-engine-field.service.ts b/src/app/modeler/gridster-field-to-engine-field.service.ts index 78ca7b7..5f17e68 100644 --- a/src/app/modeler/gridster-field-to-engine-field.service.ts +++ b/src/app/modeler/gridster-field-to-engine-field.service.ts @@ -1,44 +1,45 @@ import {Injectable} from '@angular/core'; import { - Alignment, - Appearance, - Component as PetriflowComponent, - DataRefBehavior, - DataType, - Property, - Template -} from '@netgrif/petriflow'; -import moment from 'moment'; -import { - BooleanField, - ButtonField, - Component, - DataField, - DateField, - DateTimeField, - DynamicEnumerationField, - EnumerationField, - EnumerationFieldValue, - FieldAlignment, - FieldTypeResource, - FileField, - FileListField, - FilterField, - I18nField, - Layout, - MaterialAppearance, - MultichoiceField, - NumberField, - Properties, - TaskRefField, - TemplateAppearance, TextAreaField, - TextField, - UserField + BooleanField, + ButtonField, + Component, + DataField, + DateField, + DateTimeField, + DynamicEnumerationField, + EnumerationField, + EnumerationFieldValue, + FieldAlignment, + FieldTypeResource, + FileField, + FileListField, + FilterField, + I18nField, + Layout, + MaterialAppearance, + MultichoiceField, + NumberField, + Properties, + TaskRefField, + TemplateAppearance, + TextAreaField, + TextField, + UserField, } from '@netgrif/components-core'; -import {GridsterDataField} from '../form-builder/gridster/classes/gridster-data-field'; import {I18nFieldValue} from '@netgrif/components-core/lib/data-fields/i18n-field/models/i18n-field-value'; import {Behavior} from '@netgrif/components-core/lib/data-fields/models/behavior'; -import { Icon } from '@netgrif/components-core/lib/data-fields/models/icon'; +import {Icon} from '@netgrif/components-core/lib/data-fields/models/icon'; +import { + Alignment, + Appearance, + Component as PetriflowComponent, + DataRefBehavior, + DataType, + Property, + Template, +} from '@netgrif/petriflow'; +import moment from 'moment'; +import {GridsterDataField} from '../form-builder/gridster/classes/gridster-data-field'; // noinspection JSMethodCanBeStatic @Injectable({ diff --git a/src/app/modeler/history-mode/history-detail/history-detail.component.ts b/src/app/modeler/history-mode/history-detail/history-detail.component.ts index a47ca30..4dc2af9 100644 --- a/src/app/modeler/history-mode/history-detail/history-detail.component.ts +++ b/src/app/modeler/history-mode/history-detail/history-detail.component.ts @@ -1,12 +1,12 @@ import {Component, OnDestroy, OnInit} from '@angular/core'; -import {HistoryMasterDetailService} from '../history-master-detail.service'; -import {HistoryService} from '../../services/history/history.service'; -import {ModelExportService} from '../../services/model/model-export.service'; +import {editor} from 'monaco-editor'; import {DiffEditorModel} from 'ngx-monaco-editor-v2'; import {Subscription} from 'rxjs'; -import {editor} from 'monaco-editor'; -import IDiffEditorOptions = editor.IDiffEditorOptions; +import {HistoryService} from '../../services/history/history.service'; +import {ModelExportService} from '../../services/model/model-export.service'; +import {HistoryMasterDetailService} from '../history-master-detail.service'; import IDiffEditor = editor.IDiffEditor; +import IDiffEditorOptions = editor.IDiffEditorOptions; @Component({ selector: 'nab-history-detail', diff --git a/src/app/modeler/history-mode/history-master-detail.service.ts b/src/app/modeler/history-mode/history-master-detail.service.ts index f5896ab..0e73824 100644 --- a/src/app/modeler/history-mode/history-master-detail.service.ts +++ b/src/app/modeler/history-mode/history-master-detail.service.ts @@ -1,10 +1,10 @@ import {Injectable} from '@angular/core'; -import {AbstractMasterDetailService} from '../components/master-detail/abstract-master-detail.service'; -import {PetriNet} from '@netgrif/petriflow'; import {Sort} from '@angular/material/sort'; +import {PetriNet} from '@netgrif/petriflow'; +import {AbstractMasterDetailService} from '../components/master-detail/abstract-master-detail.service'; +import {ModelerConfig} from '../modeler-config'; import {HistoryChange} from '../services/history/history-change'; import {HistoryService} from '../services/history/history.service'; -import {ModelerConfig} from '../modeler-config'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/history-mode/history-master-item/history-master-item.component.ts b/src/app/modeler/history-mode/history-master-item/history-master-item.component.ts index e885bc5..da1066b 100644 --- a/src/app/modeler/history-mode/history-master-item/history-master-item.component.ts +++ b/src/app/modeler/history-mode/history-master-item/history-master-item.component.ts @@ -1,7 +1,7 @@ import {Component, Inject} from '@angular/core'; -import {MASTER_ITEM, MASTER_SERVICE} from '../../components/master-detail/main-master-item/master-injection-tokens'; import {PetriNet} from '@netgrif/petriflow'; 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 {HistoryChange} from '../../services/history/history-change'; import {ModelService} from '../../services/model/model.service'; diff --git a/src/app/modeler/history-mode/history-mode.component.spec.ts b/src/app/modeler/history-mode/history-mode.component.spec.ts index 8b2ff9a..b1558b3 100644 --- a/src/app/modeler/history-mode/history-mode.component.spec.ts +++ b/src/app/modeler/history-mode/history-mode.component.spec.ts @@ -1,6 +1,6 @@ -import { ComponentFixture, TestBed } from '@angular/core/testing'; +import {ComponentFixture, TestBed} from '@angular/core/testing'; -import { HistoryModeComponent } from './history-mode.component'; +import {HistoryModeComponent} from './history-mode.component'; describe('HistoryModeComponent', () => { let component: HistoryModeComponent; diff --git a/src/app/modeler/history-mode/history-mode.component.ts b/src/app/modeler/history-mode/history-mode.component.ts index b4af96d..d940c5e 100644 --- a/src/app/modeler/history-mode/history-mode.component.ts +++ b/src/app/modeler/history-mode/history-mode.component.ts @@ -1,8 +1,8 @@ -import {Component, OnInit} from '@angular/core'; import {ComponentType} from '@angular/cdk/overlay'; +import {Component} from '@angular/core'; +import {HistoryDetailComponent} from './history-detail/history-detail.component'; import {HistoryMasterDetailService} from './history-master-detail.service'; import {HistoryMasterItemComponent} from './history-master-item/history-master-item.component'; -import {HistoryDetailComponent} from './history-detail/history-detail.component'; @Component({ selector: 'nab-history-mode', diff --git a/src/app/modeler/history-mode/history-mode.service.spec.ts b/src/app/modeler/history-mode/history-mode.service.spec.ts index a9ba55b..414e698 100644 --- a/src/app/modeler/history-mode/history-mode.service.spec.ts +++ b/src/app/modeler/history-mode/history-mode.service.spec.ts @@ -1,6 +1,6 @@ -import { TestBed } from '@angular/core/testing'; +import {TestBed} from '@angular/core/testing'; -import { HistoryModeService } from './history-mode.service'; +import {HistoryModeService} from './history-mode.service'; describe('HistoryModeService', () => { let service: HistoryModeService; diff --git a/src/app/modeler/history-mode/history-mode.service.ts b/src/app/modeler/history-mode/history-mode.service.ts index e9eb0ef..0bd155c 100644 --- a/src/app/modeler/history-mode/history-mode.service.ts +++ b/src/app/modeler/history-mode/history-mode.service.ts @@ -1,10 +1,10 @@ import {Injectable, Injector} from '@angular/core'; -import {ModeService} from '../control-panel/modes/mode-component/mode.service'; -import {Tool} from '../control-panel/tools/tool'; +import {TutorialService} from '../../tutorial/tutorial-service'; import {ControlPanelButton} from '../control-panel/control-panel-button'; import {ControlPanelIcon} from '../control-panel/control-panel-icon'; -import {TutorialService} from '../../tutorial/tutorial-service'; import {Mode} from '../control-panel/modes/mode'; +import {ModeService} from '../control-panel/modes/mode-component/mode.service'; +import {Tool} from '../control-panel/tools/tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/history-mode/model/element-change.ts b/src/app/modeler/history-mode/model/element-change.ts index b01192f..37e11da 100644 --- a/src/app/modeler/history-mode/model/element-change.ts +++ b/src/app/modeler/history-mode/model/element-change.ts @@ -1,6 +1,4 @@ import {PetriNet} from '@netgrif/petriflow'; -import {id} from '@swimlane/ngx-charts'; -import {element} from 'protractor'; export abstract class ElementChange { diff --git a/src/app/modeler/history-mode/model/model/model-change.ts b/src/app/modeler/history-mode/model/model/model-change.ts index a7b056d..2ce37cf 100644 --- a/src/app/modeler/history-mode/model/model/model-change.ts +++ b/src/app/modeler/history-mode/model/model/model-change.ts @@ -1,5 +1,5 @@ -import {ElementChange} from '../element-change'; import {PetriNet} from '@netgrif/petriflow'; +import {ElementChange} from '../element-change'; export class ModelChange extends ElementChange { diff --git a/src/app/modeler/history-mode/model/model/model-imported.ts b/src/app/modeler/history-mode/model/model/model-imported.ts index 81f1f73..8bb502c 100644 --- a/src/app/modeler/history-mode/model/model/model-imported.ts +++ b/src/app/modeler/history-mode/model/model/model-imported.ts @@ -1,5 +1,5 @@ -import {ModelChange} from './model-change'; import {PetriNet} from '@netgrif/petriflow'; +import {ModelChange} from './model-change'; export class ModelImported extends ModelChange { diff --git a/src/app/modeler/history-mode/model/place/place-created.ts b/src/app/modeler/history-mode/model/place/place-created.ts index eeca6e8..ffb89d8 100644 --- a/src/app/modeler/history-mode/model/place/place-created.ts +++ b/src/app/modeler/history-mode/model/place/place-created.ts @@ -1,5 +1,5 @@ -import {PlaceChange} from './place-change'; import {PetriNet, Place} from '@netgrif/petriflow'; +import {PlaceChange} from './place-change'; export class PlaceCreated extends PlaceChange { diff --git a/src/app/modeler/history-mode/model/place/place-deleted.ts b/src/app/modeler/history-mode/model/place/place-deleted.ts index 3623f9c..efb4087 100644 --- a/src/app/modeler/history-mode/model/place/place-deleted.ts +++ b/src/app/modeler/history-mode/model/place/place-deleted.ts @@ -1,5 +1,5 @@ -import {PlaceChange} from './place-change'; import {PetriNet, Place} from '@netgrif/petriflow'; +import {PlaceChange} from './place-change'; export class PlaceDeleted extends PlaceChange { diff --git a/src/app/modeler/history-mode/model/place/place-moved.ts b/src/app/modeler/history-mode/model/place/place-moved.ts index ead9e4c..6e98bf4 100644 --- a/src/app/modeler/history-mode/model/place/place-moved.ts +++ b/src/app/modeler/history-mode/model/place/place-moved.ts @@ -1,5 +1,5 @@ -import {PlaceChange} from './place-change'; import {PetriNet, Place} from '@netgrif/petriflow'; +import {PlaceChange} from './place-change'; export class PlaceMoved extends PlaceChange { diff --git a/src/app/modeler/i18n-mode/classes/i18n-tool.ts b/src/app/modeler/i18n-mode/classes/i18n-tool.ts index 7f2ff80..371905e 100644 --- a/src/app/modeler/i18n-mode/classes/i18n-tool.ts +++ b/src/app/modeler/i18n-mode/classes/i18n-tool.ts @@ -1,7 +1,7 @@ -import {Tool} from '../../control-panel/tools/tool'; import {ComponentPortal} from '@angular/cdk/portal'; -import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {Type} from '@angular/core'; +import {ControlPanelButton} from '../../control-panel/control-panel-button'; +import {Tool} from '../../control-panel/tools/tool'; export abstract class I18nTool extends Tool { diff --git a/src/app/modeler/i18n-mode/i18n-mode.component.ts b/src/app/modeler/i18n-mode/i18n-mode.component.ts index b3d7000..624de8b 100644 --- a/src/app/modeler/i18n-mode/i18n-mode.component.ts +++ b/src/app/modeler/i18n-mode/i18n-mode.component.ts @@ -1,7 +1,7 @@ -import {Component, OnInit} from '@angular/core'; -import {I18nModeService} from './i18n-mode.service'; import {ComponentPortal} from '@angular/cdk/portal'; +import {Component, OnInit} from '@angular/core'; import {I18nTool} from './classes/i18n-tool'; +import {I18nModeService} from './i18n-mode.service'; @Component({ selector: 'nab-i18n-mode', diff --git a/src/app/modeler/i18n-mode/i18n-mode.service.ts b/src/app/modeler/i18n-mode/i18n-mode.service.ts index d66a97a..9aa0031 100644 --- a/src/app/modeler/i18n-mode/i18n-mode.service.ts +++ b/src/app/modeler/i18n-mode/i18n-mode.service.ts @@ -1,18 +1,18 @@ import {Injectable, Injector} from '@angular/core'; -import {Locale} from './classes/locale'; import {DataType, DataVariable, I18nString, I18nTranslations, I18nWithDynamic} from '@netgrif/petriflow'; -import {I18nStringKeyTemplate} from './translations/i18n-string-key-template'; -import {Locales} from './classes/locales'; -import {ModeService} from '../control-panel/modes/mode-component/mode.service'; -import {Mode} from '../control-panel/modes/mode'; +import {TutorialService} from '../../tutorial/tutorial-service'; import {ControlPanelButton} from '../control-panel/control-panel-button'; import {ControlPanelIcon} from '../control-panel/control-panel-icon'; -import {TutorialService} from '../../tutorial/tutorial-service'; -import {ToolGroup} from '../control-panel/tools/tool-group'; -import {TranslationsTool} from './translations/translations-tool'; -import {LanguagesTool} from './languages/languages-tool'; +import {Mode} from '../control-panel/modes/mode'; +import {ModeService} from '../control-panel/modes/mode-component/mode.service'; import {Tool} from '../control-panel/tools/tool'; +import {ToolGroup} from '../control-panel/tools/tool-group'; import {ModelService} from '../services/model/model.service'; +import {Locale} from './classes/locale'; +import {Locales} from './classes/locales'; +import {LanguagesTool} from './languages/languages-tool'; +import {I18nStringKeyTemplate} from './translations/i18n-string-key-template'; +import {TranslationsTool} from './translations/translations-tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/i18n-mode/languages/language-select.service.spec.ts b/src/app/modeler/i18n-mode/languages/language-select.service.spec.ts index 75e4e62..90c3909 100644 --- a/src/app/modeler/i18n-mode/languages/language-select.service.spec.ts +++ b/src/app/modeler/i18n-mode/languages/language-select.service.spec.ts @@ -1,6 +1,6 @@ -import { TestBed } from '@angular/core/testing'; +import {TestBed} from '@angular/core/testing'; -import { LanguageSelectService } from './language-select.service'; +import {LanguageSelectService} from './language-select.service'; describe('LanguageSelectService', () => { let service: LanguageSelectService; diff --git a/src/app/modeler/i18n-mode/languages/languages-tool.ts b/src/app/modeler/i18n-mode/languages/languages-tool.ts index 2bb679f..411d170 100644 --- a/src/app/modeler/i18n-mode/languages/languages-tool.ts +++ b/src/app/modeler/i18n-mode/languages/languages-tool.ts @@ -1,8 +1,8 @@ +import {ComponentPortal} from '@angular/cdk/portal'; import {Injectable} from '@angular/core'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; import {I18nTool} from '../classes/i18n-tool'; -import {ComponentPortal} from '@angular/cdk/portal'; import {LanguagesComponent} from './languages.component'; @Injectable({ diff --git a/src/app/modeler/i18n-mode/languages/languages.component.ts b/src/app/modeler/i18n-mode/languages/languages.component.ts index aafc13b..75113e7 100644 --- a/src/app/modeler/i18n-mode/languages/languages.component.ts +++ b/src/app/modeler/i18n-mode/languages/languages.component.ts @@ -1,12 +1,11 @@ -import {Component, OnDestroy, OnInit, ViewChild} from '@angular/core'; -import {Locale} from '../classes/locale'; -import {Locales} from '../classes/locales'; -import {I18nModeService} from '../i18n-mode.service'; -import {MatSelect} from '@angular/material/select'; +import {Component, OnDestroy, OnInit} from '@angular/core'; import {AbstractControl, FormControl, ValidatorFn, Validators} from '@angular/forms'; import {Observable} from 'rxjs'; import {map, startWith} from 'rxjs/operators'; import {HistoryService} from '../../services/history/history.service'; +import {Locale} from '../classes/locale'; +import {Locales} from '../classes/locales'; +import {I18nModeService} from '../i18n-mode.service'; import {LanguageSelectService} from './language-select.service'; @Component({ diff --git a/src/app/modeler/i18n-mode/languages/progress/progress.component.ts b/src/app/modeler/i18n-mode/languages/progress/progress.component.ts index 8bb5539..f1fb993 100644 --- a/src/app/modeler/i18n-mode/languages/progress/progress.component.ts +++ b/src/app/modeler/i18n-mode/languages/progress/progress.component.ts @@ -1,4 +1,4 @@ -import {Component, Input, Output, EventEmitter} from '@angular/core'; +import {Component, EventEmitter, Input, Output} from '@angular/core'; import {Locale} from '../../classes/locale'; import {I18nModeService} from '../../i18n-mode.service'; diff --git a/src/app/modeler/i18n-mode/translations/i18n-field/i18n-field.component.ts b/src/app/modeler/i18n-mode/translations/i18n-field/i18n-field.component.ts index 5228309..533632d 100644 --- a/src/app/modeler/i18n-mode/translations/i18n-field/i18n-field.component.ts +++ b/src/app/modeler/i18n-mode/translations/i18n-field/i18n-field.component.ts @@ -1,7 +1,7 @@ +import {CommonModule} from '@angular/common'; import {Component, Input, OnInit} from '@angular/core'; -import {I18nString, I18nTranslations} from '@netgrif/petriflow'; import {MaterialModule} from '@netgrif/components-core'; -import {CommonModule} from '@angular/common'; +import {I18nString, I18nTranslations} from '@netgrif/petriflow'; import {I18nModeService} from '../../i18n-mode.service'; @Component({ diff --git a/src/app/modeler/i18n-mode/translations/translation-group/data-translation/data-translation.component.ts b/src/app/modeler/i18n-mode/translations/translation-group/data-translation/data-translation.component.ts index fcb0b8c..58ba3aa 100644 --- a/src/app/modeler/i18n-mode/translations/translation-group/data-translation/data-translation.component.ts +++ b/src/app/modeler/i18n-mode/translations/translation-group/data-translation/data-translation.component.ts @@ -1,7 +1,7 @@ import {Component, Input} from '@angular/core'; import {DataVariable, I18nTranslations, PetriNet} from '@netgrif/petriflow'; -import {I18nModeService} from '../../../i18n-mode.service'; import {ModelService} from '../../../../services/model/model.service'; +import {I18nModeService} from '../../../i18n-mode.service'; @Component({ selector: 'nab-data-translation', diff --git a/src/app/modeler/i18n-mode/translations/translation-group/model-translation/model-translation.component.ts b/src/app/modeler/i18n-mode/translations/translation-group/model-translation/model-translation.component.ts index 422b451..21b71c6 100644 --- a/src/app/modeler/i18n-mode/translations/translation-group/model-translation/model-translation.component.ts +++ b/src/app/modeler/i18n-mode/translations/translation-group/model-translation/model-translation.component.ts @@ -1,4 +1,4 @@ -import {Component, Input, OnInit} from '@angular/core'; +import {Component, Input} from '@angular/core'; import {I18nTranslations, PetriNet} from '@netgrif/petriflow'; import {ModelService} from '../../../../services/model/model.service'; diff --git a/src/app/modeler/i18n-mode/translations/translation-group/role-translation/role-translation.component.ts b/src/app/modeler/i18n-mode/translations/translation-group/role-translation/role-translation.component.ts index 6e144c9..96e9927 100644 --- a/src/app/modeler/i18n-mode/translations/translation-group/role-translation/role-translation.component.ts +++ b/src/app/modeler/i18n-mode/translations/translation-group/role-translation/role-translation.component.ts @@ -1,4 +1,4 @@ -import {Component, Input, OnInit} from '@angular/core'; +import {Component, Input} from '@angular/core'; import {I18nTranslations, PetriNet} from '@netgrif/petriflow'; import {ModelService} from '../../../../services/model/model.service'; diff --git a/src/app/modeler/i18n-mode/translations/translation-group/task-translation/task-translation.component.ts b/src/app/modeler/i18n-mode/translations/translation-group/task-translation/task-translation.component.ts index 6418061..ab0b7a6 100644 --- a/src/app/modeler/i18n-mode/translations/translation-group/task-translation/task-translation.component.ts +++ b/src/app/modeler/i18n-mode/translations/translation-group/task-translation/task-translation.component.ts @@ -1,4 +1,4 @@ -import {Component, Input, OnInit} from '@angular/core'; +import {Component, Input} from '@angular/core'; import {I18nTranslations, PetriNet} from '@netgrif/petriflow'; import {ModelService} from '../../../../services/model/model.service'; diff --git a/src/app/modeler/i18n-mode/translations/translations-tool.ts b/src/app/modeler/i18n-mode/translations/translations-tool.ts index debc912..b275be7 100644 --- a/src/app/modeler/i18n-mode/translations/translations-tool.ts +++ b/src/app/modeler/i18n-mode/translations/translations-tool.ts @@ -1,7 +1,7 @@ +import {ComponentPortal} from '@angular/cdk/portal'; +import {Injectable} from '@angular/core'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {Injectable} from '@angular/core'; -import {ComponentPortal} from '@angular/cdk/portal'; import {I18nTool} from '../classes/i18n-tool'; import {TranslationsComponent} from './translations.component'; diff --git a/src/app/modeler/i18n-mode/translations/translations.component.ts b/src/app/modeler/i18n-mode/translations/translations.component.ts index 309cdd1..18d7238 100644 --- a/src/app/modeler/i18n-mode/translations/translations.component.ts +++ b/src/app/modeler/i18n-mode/translations/translations.component.ts @@ -1,11 +1,11 @@ import {Component, OnDestroy, OnInit} from '@angular/core'; -import {Locale} from '../classes/locale'; -import {I18nModeService} from '../i18n-mode.service'; -import {TranslationGroupConfiguration, Type} from './translation-group/translation-group-configuration'; import {I18nTranslations} from '@netgrif/petriflow'; -import {ModelService} from '../../services/model/model.service'; import {HistoryService} from '../../services/history/history.service'; +import {ModelService} from '../../services/model/model.service'; +import {Locale} from '../classes/locale'; +import {I18nModeService} from '../i18n-mode.service'; import {LanguageSelectService} from '../languages/language-select.service'; +import {TranslationGroupConfiguration, Type} from './translation-group/translation-group-configuration'; @Component({ selector: 'nab-translations', diff --git a/src/app/modeler/model-import-service.ts b/src/app/modeler/model-import-service.ts index a1b0aa6..2c84eb5 100644 --- a/src/app/modeler/model-import-service.ts +++ b/src/app/modeler/model-import-service.ts @@ -1,12 +1,12 @@ import {Injectable} from '@angular/core'; -import {DialogErrorsComponent} from '../dialogs/dialog-errors/dialog-errors.component'; -import {ImportSuccessfulComponent} from './control-panel/import-successful/import-successful.component'; -import {ImportService} from '@netgrif/petriflow'; import {MatDialog} from '@angular/material/dialog'; import {MatSnackBar} from '@angular/material/snack-bar'; import {Router} from '@angular/router'; -import {ModelService} from './services/model/model.service'; +import {ImportService} from '@netgrif/petriflow'; +import {DialogErrorsComponent} from '../dialogs/dialog-errors/dialog-errors.component'; +import {ImportSuccessfulComponent} from './control-panel/import-successful/import-successful.component'; import {HistoryService} from './services/history/history.service'; +import {ModelService} from './services/model/model.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/modeler.component.ts b/src/app/modeler/modeler.component.ts index 18eee6b..e663a20 100644 --- a/src/app/modeler/modeler.component.ts +++ b/src/app/modeler/modeler.component.ts @@ -1,14 +1,14 @@ +import {HttpClient} from '@angular/common/http'; import {Component, ViewChild} from '@angular/core'; -import {ActivatedRoute, Router} from '@angular/router'; import {MatDialog} from '@angular/material/dialog'; -import {MatTabGroup} from '@angular/material/tabs'; import {MatSidenav} from '@angular/material/sidenav'; +import {MatTabGroup} from '@angular/material/tabs'; +import {ActivatedRoute, Router} from '@angular/router'; import {ImportService, PetriNet as PetriflowPetriNet} from '@netgrif/petriflow'; import {ProjectService} from '../project-builder/project.service'; -import {HttpClient} from '@angular/common/http'; import {EditModeService} from './edit-mode/edit-mode.service'; -import {ModelService} from './services/model/model.service'; import {HistoryService} from './services/history/history.service'; +import {ModelService} from './services/model/model.service'; @Component({ selector: 'nab-modeler', diff --git a/src/app/modeler/modeler.module.ts b/src/app/modeler/modeler.module.ts index b4b1b06..5ade089 100644 --- a/src/app/modeler/modeler.module.ts +++ b/src/app/modeler/modeler.module.ts @@ -1,77 +1,77 @@ -import {NgModule} from '@angular/core'; import {CommonModule} from '@angular/common'; -import {ModelerComponent} from './modeler.component'; -import {MaterialImportModule} from '../material-import/material-import.module'; -import {ControlPanelComponent} from './control-panel/control-panel.component'; -import {DomSanitizer} from '@angular/platform-browser'; +import {NgModule} from '@angular/core'; import {FormsModule, ReactiveFormsModule} from '@angular/forms'; -import {TriggerTreeComponent} from './control-panel/trees/trigger-tree/trigger-tree.component'; -import {DialogManageRolesComponent} from '../dialogs/dialog-manage-roles/dialog-manage-roles.component'; -import {CdkImportModule} from '../cdk-import/cdk-import.module'; -import {SimulationModeComponent} from './simulation-mode/simulation-mode.component'; -import {EditModeComponent} from './edit-mode/edit-mode.component'; +import {MatIconRegistry} from '@angular/material/icon'; +import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; +import {DomSanitizer} from '@angular/platform-browser'; import {RouterModule} from '@angular/router'; -import {DataModeComponent} from './data-mode/data-mode.component'; -import {RoleModeComponent} from './role-mode/role-mode.component'; -import {ActionsModeComponent} from './actions-mode/actions-mode.component'; -import {DialogArcAttachComponent} from '../dialogs/dialog-arc-attach/dialog-arc-attach.component'; +import {DataFieldsComponentModule, TaskContentComponentModule} from '@netgrif/components'; +import {MaterialModule} from '@netgrif/components-core'; +import {PetriflowCanvasModule} from '@netgrif/petriflow.svg'; +import {FlexLayoutModule} from '@ngbracket/ngx-layout'; +import {GridsterModule} from 'angular-gridster2'; +import {ResizableModule} from 'angular-resizable-element'; +import {NgxDropzoneModule} from 'ngx-dropzone'; +import {JoyrideModule} from 'ngx-joyride'; +import {MonacoEditorModule} from 'ngx-monaco-editor-v2'; import {environment} from '../../environments/environment'; -import {I18nModeComponent} from './i18n-mode/i18n-mode.component'; -import {DialogDeleteComponent} from '../dialogs/dialog-delete/dialog-delete.component'; +import {CdkImportModule} from '../cdk-import/cdk-import.module'; import {DialogAddLanguageComponent} from '../dialogs/dialog-add-language/dialog-add-language.component'; -import {MatIconRegistry} from '@angular/material/icon'; -import {FormBuilderModule} from '../form-builder/form-builder.module'; -import {ImportSuccessfulComponent} from './control-panel/import-successful/import-successful.component'; -import {GridsterModule} from 'angular-gridster2'; +import {DialogArcAttachComponent} from '../dialogs/dialog-arc-attach/dialog-arc-attach.component'; +import {DialogDeleteComponent} from '../dialogs/dialog-delete/dialog-delete.component'; +import {DialogManageRolesComponent} from '../dialogs/dialog-manage-roles/dialog-manage-roles.component'; +import {MaterialImportModule} from '../material-import/material-import.module'; +import {ActionDetailComponent} from './actions-mode/action-detail/action-detail.component'; import {ActionEditorModule} from './actions-mode/action-editor/action-editor.module'; +import {ActionMasterItemComponent} from './actions-mode/action-master/action-master-item/action-master-item.component'; +import {ActionMasterComponent} from './actions-mode/action-master/action-master.component'; +import { + FunctionMasterItemComponent, +} from './actions-mode/action-master/function-master-item/function-master-item.component'; +import {ActionsModeComponent} from './actions-mode/actions-mode.component'; +import {MainMasterItemComponent} from './components/master-detail/main-master-item/main-master-item.component'; +import {MainMasterComponent} from './components/master-detail/main-master/main-master.component'; +import {MasterDetailComponent} from './components/master-detail/master-detail.component'; +import {ControlPanelComponent} from './control-panel/control-panel.component'; +import {ImportSuccessfulComponent} from './control-panel/import-successful/import-successful.component'; +import {ImportToolButtonComponent} from './control-panel/modes/import-tool-button/import-tool-button.component'; +import {ModeComponent} from './control-panel/modes/mode-component/mode.component'; +import {FileToolComponent} from './control-panel/tools/file-tool-component/file-tool.component'; +import {ToolComponent} from './control-panel/tools/tool-component/tool.component'; +import {TriggerTreeComponent} from './control-panel/trees/trigger-tree/trigger-tree.component'; +import {DataDetailComponent} from './data-mode/data-detail/data-detail.component'; +import {DataMasterItemComponent} from './data-mode/data-master-item/data-master-item.component'; +import {DataModeComponent} from './data-mode/data-mode.component'; +import {TaskRefInitFieldComponent} from './data-mode/task-ref-init-field/task-ref-init-field.component'; +import {ContextMenuComponent} from './edit-mode/context-menu/context-menu.component'; +import {EditModeComponent} from './edit-mode/edit-mode.component'; +import {HistoryDetailComponent} from './history-mode/history-detail/history-detail.component'; +import {HistoryMasterItemComponent} from './history-mode/history-master-item/history-master-item.component'; +import {HistoryModeComponent} from './history-mode/history-mode.component'; +import {I18nModeComponent} from './i18n-mode/i18n-mode.component'; +import {FlagFallbackDirective} from './i18n-mode/languages/flag/flag-fallback.directive'; +import {FlagComponent} from './i18n-mode/languages/flag/flag.component'; import {LanguagesComponent} from './i18n-mode/languages/languages.component'; -import {TranslationsComponent} from './i18n-mode/translations/translations.component'; import {ProgressComponent} from './i18n-mode/languages/progress/progress.component'; -import {FlagComponent} from './i18n-mode/languages/flag/flag.component'; -import {FlagFallbackDirective} from './i18n-mode/languages/flag/flag-fallback.directive'; -import { - ModelTranslationComponent -} from './i18n-mode/translations/translation-group/model-translation/model-translation.component'; import {I18nFieldComponent} from './i18n-mode/translations/i18n-field/i18n-field.component'; import { - DataTranslationComponent + DataTranslationComponent, } from './i18n-mode/translations/translation-group/data-translation/data-translation.component'; import { - RoleTranslationComponent + ModelTranslationComponent, +} from './i18n-mode/translations/translation-group/model-translation/model-translation.component'; +import { + RoleTranslationComponent, } from './i18n-mode/translations/translation-group/role-translation/role-translation.component'; import { - TaskTranslationComponent + TaskTranslationComponent, } from './i18n-mode/translations/translation-group/task-translation/task-translation.component'; -import {NgxDropzoneModule} from 'ngx-dropzone'; -import {PetriflowCanvasModule} from '@netgrif/petriflow.svg'; -import {ModeComponent} from './control-panel/modes/mode-component/mode.component'; -import {ToolComponent} from './control-panel/tools/tool-component/tool.component'; -import {ImportToolButtonComponent} from './control-panel/modes/import-tool-button/import-tool-button.component'; -import {ContextMenuComponent} from './edit-mode/context-menu/context-menu.component'; -import {HistoryModeComponent} from './history-mode/history-mode.component'; -import {MaterialModule} from '@netgrif/components-core'; -import {DataFieldsComponentModule, TaskContentComponentModule} from '@netgrif/components'; -import {JoyrideModule} from 'ngx-joyride'; -import {ResizableModule} from 'angular-resizable-element'; -import {FlexLayoutModule} from '@ngbracket/ngx-layout'; -import {DataMasterItemComponent} from './data-mode/data-master-item/data-master-item.component'; -import {MasterDetailComponent} from './components/master-detail/master-detail.component'; -import {DataDetailComponent} from './data-mode/data-detail/data-detail.component'; -import {MainMasterComponent} from './components/master-detail/main-master/main-master.component'; -import {MainMasterItemComponent} from './components/master-detail/main-master-item/main-master-item.component'; +import {TranslationsComponent} from './i18n-mode/translations/translations.component'; +import {ModelerComponent} from './modeler.component'; import {RoleDetailComponent} from './role-mode/role-detail/role-detail.component'; import {RoleMasterItemComponent} from './role-mode/role-master-item/role-master-item.component'; -import {ActionMasterComponent} from './actions-mode/action-master/action-master.component'; -import {ActionMasterItemComponent} from './actions-mode/action-master/action-master-item/action-master-item.component'; -import { - FunctionMasterItemComponent -} from './actions-mode/action-master/function-master-item/function-master-item.component'; -import {ActionDetailComponent} from './actions-mode/action-detail/action-detail.component'; -import {MatProgressSpinnerModule} from '@angular/material/progress-spinner'; -import {HistoryMasterItemComponent} from './history-mode/history-master-item/history-master-item.component'; -import {HistoryDetailComponent} from './history-mode/history-detail/history-detail.component'; -import {MonacoEditorModule} from 'ngx-monaco-editor-v2'; -import {FileToolComponent} from './control-panel/tools/file-tool-component/file-tool.component'; +import {RoleModeComponent} from './role-mode/role-mode.component'; +import {SimulationModeComponent} from './simulation-mode/simulation-mode.component'; @NgModule({ declarations: [ @@ -117,11 +117,13 @@ import {FileToolComponent} from './control-panel/tools/file-tool-component/file- FunctionMasterItemComponent, ActionDetailComponent, HistoryMasterItemComponent, - HistoryDetailComponent + HistoryDetailComponent, + TaskRefInitFieldComponent ], exports: [ ActionEditorModule, - TriggerTreeComponent + TriggerTreeComponent, + TaskRefInitFieldComponent ], imports: [ ActionEditorModule, @@ -129,7 +131,6 @@ import {FileToolComponent} from './control-panel/tools/file-tool-component/file- CommonModule, DataFieldsComponentModule, FlexLayoutModule, - FormBuilderModule, FormsModule, GridsterModule, JoyrideModule, diff --git a/src/app/modeler/mortgage.service.ts b/src/app/modeler/mortgage.service.ts index 07696aa..3a7d834 100644 --- a/src/app/modeler/mortgage.service.ts +++ b/src/app/modeler/mortgage.service.ts @@ -1,6 +1,5 @@ -import {Injectable} from '@angular/core'; import {HttpClient} from '@angular/common/http'; -import {ModelerTabsService} from './services/modeler-tabs.service'; +import {Injectable} from '@angular/core'; import {ModelImportService} from './model-import-service'; @Injectable({ diff --git a/src/app/modeler/role-mode/role-detail/role-detail.component.html b/src/app/modeler/role-mode/role-detail/role-detail.component.html index 6d576ba..6a614e1 100644 --- a/src/app/modeler/role-mode/role-detail/role-detail.component.html +++ b/src/app/modeler/role-mode/role-detail/role-detail.component.html @@ -4,9 +4,11 @@ Id - - Id is required - Transition with given id already exists + + Id is required + + Role with given id already exists +
@@ -21,9 +23,17 @@
+
+ + Is Global + +
+ +
+
diff --git a/src/app/modeler/role-mode/role-detail/role-detail.component.ts b/src/app/modeler/role-mode/role-detail/role-detail.component.ts index d4db8ee..60324fc 100644 --- a/src/app/modeler/role-mode/role-detail/role-detail.component.ts +++ b/src/app/modeler/role-mode/role-detail/role-detail.component.ts @@ -1,25 +1,25 @@ import {Component, OnDestroy} from '@angular/core'; -import {Role} from '@netgrif/petriflow'; -import {ModelService} from '../../services/model/model.service'; -import {RoleMasterDetailService} from '../role-master-detail.service'; +import {FormControl, ValidatorFn, Validators} from '@angular/forms'; import {Router} from '@angular/router'; -import {ActionsModeService} from '../../actions-mode/actions-mode.service'; +import {Role} from '@netgrif/petriflow'; import {ActionsMasterDetailService} from '../../actions-mode/actions-master-detail.setvice'; +import {ActionsModeService} from '../../actions-mode/actions-mode.service'; +import {ModelerUtils} from '../../modeler-utils'; import {HistoryService} from '../../services/history/history.service'; -import {FormControl, ValidatorFn, Validators} from '@angular/forms'; +import {ModelService} from '../../services/model/model.service'; +import {RoleMasterDetailService} from '../role-master-detail.service'; import {ChangedRole} from './changed-role'; -import {ModelerUtils} from '../../modeler-utils'; @Component({ selector: 'nab-role-detail', templateUrl: './role-detail.component.html', - styleUrl: './role-detail.component.scss' + styleUrl: './role-detail.component.scss', }) export class RoleDetailComponent implements OnDestroy { public role: ChangedRole; public shouldSave: boolean = false; - public form: FormControl; + public roleIdForm: FormControl; public constructor( private _masterService: RoleMasterDetailService, @@ -27,7 +27,7 @@ export class RoleDetailComponent implements OnDestroy { private _router: Router, private _actionMode: ActionsModeService, private _actionsMasterDetail: ActionsMasterDetailService, - protected _historyService: HistoryService + protected _historyService: HistoryService, ) { this._masterService.getSelected$().subscribe(item => { this.saveChange(); @@ -36,9 +36,9 @@ export class RoleDetailComponent implements OnDestroy { } this.role = new ChangedRole(item.clone()); }); - this.form = new FormControl('', [ + this.roleIdForm = new FormControl('', [ Validators.required, - this.validUnique() + this.validUnique(), ]); } @@ -75,6 +75,11 @@ export class RoleDetailComponent implements OnDestroy { this.shouldSave = true; } + changeGlobalFlag($event): void { + this.role.role.global = $event.checked; + this.shouldSave = true; + } + get item(): Role { return this.service.getSelected(); } diff --git a/src/app/modeler/role-mode/role-master-detail.service.ts b/src/app/modeler/role-mode/role-master-detail.service.ts index 9687443..7f194f5 100644 --- a/src/app/modeler/role-mode/role-master-detail.service.ts +++ b/src/app/modeler/role-mode/role-master-detail.service.ts @@ -1,10 +1,10 @@ import {Injectable} from '@angular/core'; -import {AbstractMasterDetailService} from '../components/master-detail/abstract-master-detail.service'; -import {Role} from '@netgrif/petriflow'; -import {ModelService} from '../services/model/model.service'; import {Sort} from '@angular/material/sort'; -import {HistoryService} from '../services/history/history.service'; +import {Role} from '@netgrif/petriflow'; +import {AbstractMasterDetailService} from '../components/master-detail/abstract-master-detail.service'; import {ModelerConfig} from '../modeler-config'; +import {HistoryService} from '../services/history/history.service'; +import {ModelService} from '../services/model/model.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/role-mode/role-master-item/role-master-item.component.ts b/src/app/modeler/role-mode/role-master-item/role-master-item.component.ts index 7ec20b5..5c65b15 100644 --- a/src/app/modeler/role-mode/role-master-item/role-master-item.component.ts +++ b/src/app/modeler/role-mode/role-master-item/role-master-item.component.ts @@ -1,9 +1,9 @@ import {Component, Inject} from '@angular/core'; -import {MASTER_ITEM, MASTER_SERVICE} from '../../components/master-detail/main-master-item/master-injection-tokens'; -import {DataVariable, Role} from '@netgrif/petriflow'; -import {AbstractMasterDetailService} from '../../components/master-detail/abstract-master-detail.service'; import {MatDialog} from '@angular/material/dialog'; +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'; @Component({ selector: 'nab-role-master-item', diff --git a/src/app/modeler/role-mode/role-mode.component.spec.ts b/src/app/modeler/role-mode/role-mode.component.spec.ts index 337325f..16973b9 100644 --- a/src/app/modeler/role-mode/role-mode.component.spec.ts +++ b/src/app/modeler/role-mode/role-mode.component.spec.ts @@ -1,19 +1,19 @@ -import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; - -import {RoleModeComponent} from './role-mode.component'; -import {MaterialImportModule} from '../../material-import/material-import.module'; import {CommonModule} from '@angular/common'; -import {CdkImportModule} from '../../cdk-import/cdk-import.module'; -import {FormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {HotkeyModule} from 'angular2-hotkeys'; -import {ResizableModule} from 'angular-resizable-element'; import {HttpClientModule} from '@angular/common/http'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; +import {FormsModule} from '@angular/forms'; import {MatCheckboxModule} from '@angular/material/checkbox'; -import {MatTabsModule} from '@angular/material/tabs'; import {MatSortModule} from '@angular/material/sort'; +import {MatTabsModule} from '@angular/material/tabs'; +import {RouterModule} from '@angular/router'; import {FlexLayoutModule} from '@ngbracket/ngx-layout'; +import {ResizableModule} from 'angular-resizable-element'; +import {HotkeyModule} from 'angular2-hotkeys'; import {MonacoEditorModule} from 'ngx-monaco-editor-v2'; +import {CdkImportModule} from '../../cdk-import/cdk-import.module'; +import {MaterialImportModule} from '../../material-import/material-import.module'; + +import {RoleModeComponent} from './role-mode.component'; describe('RoleModeComponent', () => { let component: RoleModeComponent; diff --git a/src/app/modeler/role-mode/role-mode.component.ts b/src/app/modeler/role-mode/role-mode.component.ts index aef604a..5c8c612 100644 --- a/src/app/modeler/role-mode/role-mode.component.ts +++ b/src/app/modeler/role-mode/role-mode.component.ts @@ -1,8 +1,7 @@ -import {Component} from '@angular/core'; -import {DataMasterDetailService} from '../data-mode/data-master-detail.service'; import {ComponentType} from '@angular/cdk/overlay'; -import {RoleMasterDetailService} from './role-master-detail.service'; +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'; @Component({ diff --git a/src/app/modeler/role-mode/role-mode.service.ts b/src/app/modeler/role-mode/role-mode.service.ts index 53a63a8..0ed034b 100644 --- a/src/app/modeler/role-mode/role-mode.service.ts +++ b/src/app/modeler/role-mode/role-mode.service.ts @@ -1,8 +1,8 @@ import {EventEmitter, Injectable, Injector} from '@angular/core'; import {TutorialService} from '../../tutorial/tutorial-service'; -import {Mode} from '../control-panel/modes/mode'; import {ControlPanelButton} from '../control-panel/control-panel-button'; import {ControlPanelIcon} from '../control-panel/control-panel-icon'; +import {Mode} from '../control-panel/modes/mode'; import {ModeService} from '../control-panel/modes/mode-component/mode.service'; import {Tool} from '../control-panel/tools/tool'; diff --git a/src/app/modeler/services/canvas/canvas-listener-tool.ts b/src/app/modeler/services/canvas/canvas-listener-tool.ts index f145bb3..e0be093 100644 --- a/src/app/modeler/services/canvas/canvas-listener-tool.ts +++ b/src/app/modeler/services/canvas/canvas-listener-tool.ts @@ -1,25 +1,25 @@ -import {Tool} from '../../control-panel/tools/tool'; -import {MouseListener} from './listeners/mouse-listener'; -import {PlaceListener} from './listeners/place-listener'; -import {TransitionListener} from './listeners/transition-listener'; -import {ArcListener} from './listeners/arc-listener'; -import {ModelService} from '../model/model.service'; +import {ComponentType} from '@angular/cdk/overlay'; import {MatDialog} from '@angular/material/dialog'; -import {CanvasPlace} from '../../edit-mode/domain/canvas-place'; -import {CanvasTransition} from '../../edit-mode/domain/canvas-transition'; -import {CanvasArc} from '../../edit-mode/domain/canvas-arc'; -import {PetriflowCanvas, PetriflowCanvasService} from '@netgrif/petriflow.svg'; +import {Router} from '@angular/router'; import {PetriNet} from '@netgrif/petriflow'; -import {CanvasElementCollection} from '../../edit-mode/domain/canvas-element-collection'; +import {PetriflowCanvas, PetriflowCanvasService} from '@netgrif/petriflow.svg'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../selected-transition.service'; -import {ComponentType} from '@angular/cdk/overlay'; +import {Tool} from '../../control-panel/tools/tool'; +import {CanvasArc} from '../../edit-mode/domain/canvas-arc'; +import {CanvasElementCollection} from '../../edit-mode/domain/canvas-element-collection'; +import {CanvasObject} from '../../edit-mode/domain/canvas-object'; +import {CanvasPlace} from '../../edit-mode/domain/canvas-place'; +import {CanvasTransition} from '../../edit-mode/domain/canvas-transition'; import {Hotkey} from '../../edit-mode/services/modes/domain/hotkey'; import {ModelerConfig} from '../../modeler-config'; -import {KeyListener} from './listeners/key-listener'; +import {SelectedTransitionService} from '../../selected-transition.service'; +import {ModelService} from '../model/model.service'; +import {ArcListener} from './listeners/arc-listener'; import {ContextMenuInterruptionError} from './listeners/context-menu-interruption-error'; -import {CanvasObject} from '../../edit-mode/domain/canvas-object'; +import {KeyListener} from './listeners/key-listener'; +import {MouseListener} from './listeners/mouse-listener'; +import {PlaceListener} from './listeners/place-listener'; +import {TransitionListener} from './listeners/transition-listener'; export abstract class CanvasListenerTool extends Tool implements MouseListener, PlaceListener, TransitionListener, ArcListener, KeyListener { @@ -339,8 +339,23 @@ export abstract class CanvasListenerTool extends Tool implements MouseListener, onClick(): void { } - openDialog(dialog: ComponentType, config: any, afterClose: (value: any) => void): void { - this.dialog.open(dialog, config).afterClosed().subscribe(afterClose); + openDialog(dialog: ComponentType, config: any, afterClose?: (value: any) => void): void { + this.beforeDialog(); + this.dialog.open(dialog, config).afterClosed().subscribe(value => { + if (afterClose) { + afterClose(value); + } + this.afterDialog(); + }); + } + + protected beforeDialog(): void { + this.unbindKeys(); + } + + protected afterDialog(): void { + this.bindKeys(); + this.reset(); } isLeftButton(event: PointerEvent): boolean { diff --git a/src/app/modeler/services/canvas/canvas-mode-service.ts b/src/app/modeler/services/canvas/canvas-mode-service.ts index 843632f..d73bf7c 100644 --- a/src/app/modeler/services/canvas/canvas-mode-service.ts +++ b/src/app/modeler/services/canvas/canvas-mode-service.ts @@ -1,19 +1,19 @@ -import {ModeService} from '../../control-panel/modes/mode-component/mode.service'; -import {Tool} from '../../control-panel/tools/tool'; +import {Place as SvgPlace, Transition as SvgTransition} from '@netgrif/petri.svg'; import {Arc, NodeElement, PetriNet, Place, Transition} from '@netgrif/petriflow'; -import {CanvasArc} from '../../edit-mode/domain/canvas-arc'; -import {CanvasPlace} from '../../edit-mode/domain/canvas-place'; import { - PetriflowCanvas, - PetriflowCanvasService, - PetriflowPlace as PetriflowSvgPlace, - PetriflowTransition as PetriflowSvgTransition + PetriflowCanvas, + PetriflowCanvasService, + PetriflowPlace as PetriflowSvgPlace, + PetriflowTransition as PetriflowSvgTransition, } from '@netgrif/petriflow.svg'; -import {Place as SvgPlace, Transition as SvgTransition} from '@netgrif/petri.svg'; -import {CanvasElementCollection} from '../../edit-mode/domain/canvas-element-collection'; +import {ModeService} from '../../control-panel/modes/mode-component/mode.service'; +import {Tool} from '../../control-panel/tools/tool'; import {ArcFactory} from '../../edit-mode/domain/arc-builders/arc-factory.service'; -import {ModelService} from '../model/model.service'; +import {CanvasArc} from '../../edit-mode/domain/canvas-arc'; +import {CanvasElementCollection} from '../../edit-mode/domain/canvas-element-collection'; +import {CanvasPlace} from '../../edit-mode/domain/canvas-place'; import {CanvasTransition} from '../../edit-mode/domain/canvas-transition'; +import {ModelService} from '../model/model.service'; export abstract class CanvasModeService extends ModeService { private readonly _elements: CanvasElementCollection; diff --git a/src/app/modeler/services/history/history.service.ts b/src/app/modeler/services/history/history.service.ts index 49e0c66..6500327 100644 --- a/src/app/modeler/services/history/history.service.ts +++ b/src/app/modeler/services/history/history.service.ts @@ -1,12 +1,12 @@ import {Injectable} from '@angular/core'; import {ExportService, PetriNet} from '@netgrif/petriflow'; import {Subject} from 'rxjs'; +import {RedoTool} from '../../control-panel/modes/redo-tool'; +import {UndoTool} from '../../control-panel/modes/undo-tool'; import {ModelerConfig} from '../../modeler-config'; import {ModelService} from '../model/model.service'; import {History} from './history'; import {HistoryChange} from './history-change'; -import {UndoTool} from '../../control-panel/modes/undo-tool'; -import {RedoTool} from '../../control-panel/modes/redo-tool'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/services/model/model-export.service.ts b/src/app/modeler/services/model/model-export.service.ts index d2836ef..b862882 100644 --- a/src/app/modeler/services/model/model-export.service.ts +++ b/src/app/modeler/services/model/model-export.service.ts @@ -1,12 +1,12 @@ import {Injectable} from '@angular/core'; -import {ModelService} from './model.service'; +import {MatDialog} from '@angular/material/dialog'; +import {CanvasConfiguration} from '@netgrif/petri.svg'; import {BasicSimulation, ExportService, PetriNet} from '@netgrif/petriflow'; import format from 'xml-formatter'; -import {MatDialog} from '@angular/material/dialog'; import {DialogDeadNetComponent} from '../../../dialogs/dialog-dead-net/dialog-dead-net.component'; -import {CanvasConfiguration} from '@netgrif/petri.svg'; import {ModelerConfig} from '../../modeler-config'; import {ModelSourceService} from './model-source.service'; +import {ModelService} from './model.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/services/model/model-source.service.ts b/src/app/modeler/services/model/model-source.service.ts index f53ac7d..550833d 100644 --- a/src/app/modeler/services/model/model-source.service.ts +++ b/src/app/modeler/services/model/model-source.service.ts @@ -1,10 +1,9 @@ import {Injectable} from '@angular/core'; -import {PetriNet} from '@netgrif/petriflow'; -import {ModelSource} from './model-source'; -import {ModelService} from './model.service'; -import {SimulationModeService} from '../../simulation-mode/simulation-mode.service'; import {Router} from '@angular/router'; +import {PetriNet} from '@netgrif/petriflow'; import {SimulationModeComponent} from '../../simulation-mode/simulation-mode.component'; +import {SimulationModeService} from '../../simulation-mode/simulation-mode.service'; +import {ModelService} from './model.service'; @Injectable({ providedIn: 'root' diff --git a/src/app/modeler/services/model/model.service.ts b/src/app/modeler/services/model/model.service.ts index f2b4226..aab00ef 100644 --- a/src/app/modeler/services/model/model.service.ts +++ b/src/app/modeler/services/model/model.service.ts @@ -1,35 +1,37 @@ import {Injectable} from '@angular/core'; +import {CanvasConfiguration} from '@netgrif/petri.svg'; import { - Arc, - ArcType, - Breakpoint, - DataType, - DataVariable, - I18nString, - NodeElement, - PetriNet, - Place, - Role, - Transition, - XmlArcType + Action, + Arc, + ArcType, + Breakpoint, + DataType, + DataVariable, + I18nString, + ImportUtils, + NodeElement, + PetriNet, + Place, + Role, + Transition, + XmlArcType, } from '@netgrif/petriflow'; -import {ModelConfig} from './model-config'; -import {CanvasConfiguration} from '@netgrif/petri.svg'; import {BehaviorSubject, Subject} from 'rxjs'; -import {PlaceChange} from '../../history-mode/model/place/place-change'; import {ChangedTransition} from 'src/app/dialogs/dialog-transition-edit/changed-transition'; import {ChangedArc} from '../../../dialogs/dialog-arc-edit/changed-arc'; -import {SequenceGenerator} from './sequence-generator'; import {ArcFactory} from '../../edit-mode/domain/arc-builders/arc-factory.service'; -import {ModelerConfig} from '../../modeler-config'; -import {PlaceMoved} from '../../history-mode/model/place/place-moved'; -import {PlaceDeleted} from '../../history-mode/model/place/place-deleted'; import {ModelChange} from '../../history-mode/model/model/model-change'; -import {ChangedRole} from '../../role-mode/role-detail/changed-role'; +import {PlaceChange} from '../../history-mode/model/place/place-change'; +import {PlaceDeleted} from '../../history-mode/model/place/place-deleted'; +import {PlaceMoved} from '../../history-mode/model/place/place-moved'; +import {ModelerConfig} from '../../modeler-config'; import {ModelerUtils} from '../../modeler-utils'; +import {ChangedRole} from '../../role-mode/role-detail/changed-role'; +import {ModelConfig} from './model-config'; +import {SequenceGenerator} from './sequence-generator'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class ModelService { private readonly _model: BehaviorSubject; @@ -43,6 +45,7 @@ export class ModelService { private _arcIdSequence = new SequenceGenerator('a'); private _dataIdSequence = new SequenceGenerator('data'); private _roleIdSequence = new SequenceGenerator('role'); + private _actionIdSequence = new SequenceGenerator('action'); private xmlArcTypeMapping: Map = new Map([ [XmlArcType.REGULAR, ArcType.REGULAR_PT], @@ -59,7 +62,7 @@ export class ModelService { ]); constructor( - private arcFactory: ArcFactory + private arcFactory: ArcFactory, ) { this._model = new BehaviorSubject(undefined); this._placeChange = new Subject(); @@ -75,6 +78,7 @@ export class ModelService { this._arcIdSequence.reset(newModel.getArcs()); this._dataIdSequence.reset(newModel.getDataSet()); this._roleIdSequence.reset(newModel.getRoles()); + this._actionIdSequence.reset(this.collectActions(newModel)); } get model(): PetriNet { @@ -113,7 +117,7 @@ export class ModelService { this.alignPositionCoordinate(x, CanvasConfiguration.WIDTH), this.alignPositionCoordinate(y, CanvasConfiguration.HEIGHT), false, - this.nextPlaceId() + this.nextPlaceId(), ); if (this.model.getPlaces().length === 0) { place.marking = 1; @@ -177,7 +181,7 @@ export class ModelService { const transition = new Transition( this.alignPositionCoordinate(x, CanvasConfiguration.WIDTH), this.alignPositionCoordinate(y, CanvasConfiguration.HEIGHT), - this.nextTransitionId() + this.nextTransitionId(), ); this.addTransition(transition); return transition; @@ -272,10 +276,10 @@ export class ModelService { return arc; } - public newArcBreakpoint(arc: Arc, position: DOMPoint, index: number,): void { + public newArcBreakpoint(arc: Arc, position: DOMPoint, index: number): void { const breakPoint = new Breakpoint( this.alignPositionX(position.x), - this.alignPositionY(position.y) + this.alignPositionY(position.y), ); arc.breakpoints.splice(index, 0, breakPoint); this.model.lastChanged = Date.now(); @@ -365,6 +369,7 @@ export class ModelService { const role = this.model.getRole(newRole.id); role.id = newRole.role.id; role.title = newRole.role.title; + role.global = newRole.role.global; this.model.removeRole(newRole.id); this.model.addRole(role); @@ -439,6 +444,45 @@ export class ModelService { return id; } + public nextActionId(): string { + return this._actionIdSequence.next(); + } + + private collectActions(newModel: PetriNet): Action[] { + const actions = new Array(); + newModel.getCaseEvents().forEach(e => { + actions.push(...e.preActions); + actions.push(...e.postActions); + }); + newModel.getProcessEvents().forEach(e => { + actions.push(...e.preActions); + actions.push(...e.postActions); + }); + newModel.getRoles().forEach(r => { + r.getEvents().forEach(e => { + actions.push(...e.preActions); + actions.push(...e.postActions); + }); + }); + newModel.getTransitions().forEach(t => { + t.eventSource.getEvents().forEach(e => { + actions.push(...e.preActions); + actions.push(...e.postActions); + }); + t.dataGroups.forEach(g => g.getDataRefs().forEach(d => d.getEvents().forEach(e => { + actions.push(...e.preActions); + actions.push(...e.postActions); + }))); + }); + newModel.getDataSet().forEach(d => { + d.getEvents().forEach(e => { + actions.push(...e.preActions); + actions.push(...e.postActions); + }); + }); + return actions; + } + public alignModel(model = this.model): void { [...model.getPlaces(), ...model.getTransitions()].forEach(node => { node.x = this.alignPositionX(node.x); @@ -455,7 +499,7 @@ export class ModelService { public alignPosition(position: DOMPoint): DOMPoint { return new DOMPoint( this.alignPositionX(position.x), - this.alignPositionY(position.y) + this.alignPositionY(position.y), ); } @@ -478,17 +522,19 @@ export class ModelService { return newPosition; } - public getReferenceValue(id: string): number { + public getReferenceValue(id: string, model: PetriNet = this.model): number { // TODO: NAB-326 probably move to petriflow.js - const referencedData = this.model.getData(id); + const referencedData = model.getData(id); if (referencedData) { - if (referencedData.init.value) { - return Number(referencedData.init.value); - // TODO: NAB-326 check if isFinite and >= 0 + if (referencedData.init?.value) { + if (ImportUtils.isInitValueNumber(referencedData.init)) { + return Number(referencedData.init.value); + } + return 0; } return 0; } - const referencedPlace = this.model.getPlace(id); + const referencedPlace = model.getPlace(id); if (referencedPlace) { return referencedPlace.marking; } @@ -531,8 +577,8 @@ export class ModelService { .map(dg => dg.getDataRefs() .map(ref => - ModelerUtils.numberOfEventActions(ref.getEvents()) - ).reduce((sum, current) => sum + current, 0) + ModelerUtils.numberOfEventActions(ref.getEvents()), + ).reduce((sum, current) => sum + current, 0), ).reduce((sum, current) => sum + current, 0); return eventActions + dataRefActions; } diff --git a/src/app/modeler/services/model/sequence-generator.ts b/src/app/modeler/services/model/sequence-generator.ts index 64f18d3..4a131db 100644 --- a/src/app/modeler/services/model/sequence-generator.ts +++ b/src/app/modeler/services/model/sequence-generator.ts @@ -1,4 +1,4 @@ -import {DataVariable, Element, Role} from '@netgrif/petriflow'; +import {Action, DataVariable, Element, Role} from '@netgrif/petriflow'; export class SequenceGenerator { private _id = 0; @@ -13,9 +13,9 @@ export class SequenceGenerator { return `${this._prefix}${this._id}`; } - public reset(collection: Array): void { + public reset(collection: Array): void { this._id = collection.filter(e => e.id.startsWith(this._prefix)) - .map(e => Number.parseInt(e.id.substring(1), 10)) + .map(e => Number.parseInt(e.id.substring(this._prefix.length), 10)) .filter(elementId => !isNaN(elementId)) .reduce((a, b) => Math.max(a, b), 0); } diff --git a/src/app/modeler/simulation-mode/simulation-mode.component.spec.ts b/src/app/modeler/simulation-mode/simulation-mode.component.spec.ts index 016714c..4b8aac5 100644 --- a/src/app/modeler/simulation-mode/simulation-mode.component.spec.ts +++ b/src/app/modeler/simulation-mode/simulation-mode.component.spec.ts @@ -1,19 +1,19 @@ -import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; - -import {SimulationModeComponent} from './simulation-mode.component'; -import {HttpClientModule} from '@angular/common/http'; -import {MaterialImportModule} from '../../material-import/material-import.module'; import {CommonModule} from '@angular/common'; -import {CdkImportModule} from '../../cdk-import/cdk-import.module'; +import {HttpClientModule} from '@angular/common/http'; +import {ComponentFixture, TestBed, waitForAsync} from '@angular/core/testing'; import {FormsModule} from '@angular/forms'; -import {RouterModule} from '@angular/router'; -import {HotkeyModule} from 'angular2-hotkeys'; -import {ResizableModule} from 'angular-resizable-element'; import {MatCheckboxModule} from '@angular/material/checkbox'; -import {MatTabsModule} from '@angular/material/tabs'; import {MatSortModule} from '@angular/material/sort'; +import {MatTabsModule} from '@angular/material/tabs'; +import {RouterModule} from '@angular/router'; import {FlexLayoutModule} from '@ngbracket/ngx-layout'; +import {ResizableModule} from 'angular-resizable-element'; +import {HotkeyModule} from 'angular2-hotkeys'; import {MonacoEditorModule} from 'ngx-monaco-editor-v2'; +import {CdkImportModule} from '../../cdk-import/cdk-import.module'; +import {MaterialImportModule} from '../../material-import/material-import.module'; + +import {SimulationModeComponent} from './simulation-mode.component'; describe('SimulationModeComponent', () => { let component: SimulationModeComponent; diff --git a/src/app/modeler/simulation-mode/simulation-mode.component.ts b/src/app/modeler/simulation-mode/simulation-mode.component.ts index d961e60..6371888 100644 --- a/src/app/modeler/simulation-mode/simulation-mode.component.ts +++ b/src/app/modeler/simulation-mode/simulation-mode.component.ts @@ -1,8 +1,8 @@ -import {AfterViewInit, Component, ElementRef, OnDestroy, ViewChild} from '@angular/core'; -import {SimulationModeService} from './simulation-mode.service'; +import {AfterViewInit, Component, ElementRef, HostListener, OnDestroy, ViewChild} from '@angular/core'; import {PetriflowCanvasService} from '@netgrif/petriflow.svg'; -import {ModelService} from '../services/model/model.service'; import {ModelerUtils} from '../modeler-utils'; +import {ModelService} from '../services/model/model.service'; +import {SimulationModeService} from './simulation-mode.service'; @Component({ selector: 'nab-simulation-mode', @@ -20,6 +20,12 @@ export class SimulationModeComponent implements AfterViewInit, OnDestroy { ) { } + @HostListener('contextmenu', ['$event']) + onRightClick(event: MouseEvent) { + event.preventDefault(); + event.stopPropagation(); + } + ngAfterViewInit() { ModelerUtils.clearSelection(); this.simulationService.originalModel.next(this.modelService.model); diff --git a/src/app/modeler/simulation-mode/simulation-mode.service.spec.ts b/src/app/modeler/simulation-mode/simulation-mode.service.spec.ts index c16a1b1..d63175f 100644 --- a/src/app/modeler/simulation-mode/simulation-mode.service.spec.ts +++ b/src/app/modeler/simulation-mode/simulation-mode.service.spec.ts @@ -1,8 +1,8 @@ +import {HttpClientModule} from '@angular/common/http'; import {TestBed} from '@angular/core/testing'; +import {MatSnackBarModule} from '@angular/material/snack-bar'; import {SimulationModeService} from './simulation-mode.service'; -import {HttpClientModule} from '@angular/common/http'; -import {MatSnackBarModule} from '@angular/material/snack-bar'; describe('SimulationModeService', () => { let service: SimulationModeService; diff --git a/src/app/modeler/simulation-mode/simulation-mode.service.ts b/src/app/modeler/simulation-mode/simulation-mode.service.ts index 8d79bca..650d7c8 100644 --- a/src/app/modeler/simulation-mode/simulation-mode.service.ts +++ b/src/app/modeler/simulation-mode/simulation-mode.service.ts @@ -1,29 +1,30 @@ import {Injectable, Injector} from '@angular/core'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {Arc, BasicSimulation, ImportUtils, PetriNet, Place, Transition} from '@netgrif/petriflow'; +import {PetriflowCanvasService} from '@netgrif/petriflow.svg'; import {BehaviorSubject} from 'rxjs'; -import {BasicSimulation, PetriNet, Transition} from '@netgrif/petriflow'; import {TutorialService} from '../../tutorial/tutorial-service'; -import {ModelService} from '../services/model/model.service'; -import {EventSimulationTool} from './tool/event-simulation.tool'; -import {TaskSimulationTool} from './tool/task-simulation.tool'; -import {ResetSimulationTool} from './tool/reset-simulation.tool'; import {ToolGroup} from '../control-panel/tools/tool-group'; -import {PetriflowCanvasService} from '@netgrif/petriflow.svg'; -import {SimulationTool} from './tool/simulation-tool'; -import {ChangeDataTool} from './tool/change-data-tool'; -import {CanvasTransition} from '../edit-mode/domain/canvas-transition'; import {ArcFactory} from '../edit-mode/domain/arc-builders/arc-factory.service'; -import {CanvasModeService} from '../services/canvas/canvas-mode-service'; import {CanvasArc} from '../edit-mode/domain/canvas-arc'; -import {MatDialog} from '@angular/material/dialog'; -import {ResetPositionAndZoomTool} from './tool/reset-position-and-zoom-tool'; -import {GridTool} from './tool/grid-tool'; -import {SwitchLabelTool} from './tool/switch-label-tool'; -import {Router} from '@angular/router'; +import {CanvasPlace} from '../edit-mode/domain/canvas-place'; +import {CanvasTransition} from '../edit-mode/domain/canvas-transition'; import {SelectedTransitionService} from '../selected-transition.service'; +import {CanvasModeService} from '../services/canvas/canvas-mode-service'; +import {ModelService} from '../services/model/model.service'; import {SimulationMode} from './simulation-mode'; +import {ChangeDataTool} from './tool/change-data-tool'; +import {EventSimulationTool} from './tool/event-simulation.tool'; +import {GridTool} from './tool/grid-tool'; +import {ResetPositionAndZoomTool} from './tool/reset-position-and-zoom-tool'; +import {ResetSimulationTool} from './tool/reset-simulation.tool'; +import {SimulationTool} from './tool/simulation-tool'; +import {SwitchLabelTool} from './tool/switch-label-tool'; +import {TaskSimulationTool} from './tool/task-simulation.tool'; @Injectable({ - providedIn: 'root' + providedIn: 'root', }) export class SimulationModeService extends CanvasModeService { @@ -58,7 +59,7 @@ export class SimulationModeService extends CanvasModeService { if (this.data.has(a.modelArc.reference)) { multiplicity = this.data.get(a.modelArc.reference); } else { - multiplicity = this.modelService.getReferenceValue(a.modelArc.reference); + multiplicity = this.modelService.getReferenceValue(a.modelArc.reference, this.model); } return `${a.modelArc.reference} (${multiplicity})`; } @@ -73,7 +74,7 @@ export class SimulationModeService extends CanvasModeService { new ChangeDataTool(modelService, dialog, this, router, transitionService), new ResetPositionAndZoomTool(modelService, dialog, this, router, transitionService), new GridTool(modelService, dialog, this, router, transitionService), - new SwitchLabelTool(modelService, dialog, this, router, transitionService) + new SwitchLabelTool(modelService, dialog, this, router, transitionService), ); this.switchTools.tools.forEach(t => t.bind()); this.tools = [ @@ -81,12 +82,18 @@ export class SimulationModeService extends CanvasModeService { this.defaultTool, new EventSimulationTool(modelService, dialog, this, router, transitionService), ), - this.switchTools + this.switchTools, ]; this.originalModel = new BehaviorSubject(this.modelService.model.clone()); this.originalModel.subscribe(model => { this.data = new Map(model.getArcs().filter(a => !!a.reference && !!model.getData(a.reference)) - .map(a => [a.reference, Number.parseInt(model.getData(a.reference).init?.value, 10) || 0])); + .map(a => { + const data = model.getData(a.reference); + if (ImportUtils.isInitValueNumber(data.init)) { + return [a.reference, Number.parseInt(data.init.value, 10)]; + } + return [a.reference, 0]; + })); this.simulation = new BasicSimulation(model, this.data); this.renderModel(model); }); @@ -115,6 +122,18 @@ export class SimulationModeService extends CanvasModeService { return canvasTransition; } + newSvgPlace(modelPlace: Place): CanvasPlace { + const place = super.newSvgPlace(modelPlace); + this.activeTool.bindPlace(place); + return place; + } + + public newSvgArc(modelArc: Arc): CanvasArc { + const arc = super.newSvgArc(modelArc); + this.activeTool.bindArc(arc); + return arc; + } + set onTransitionDraw(value: (t: CanvasTransition) => void) { this._onTransitionDraw = value; } diff --git a/src/app/modeler/simulation-mode/simulation-mode.ts b/src/app/modeler/simulation-mode/simulation-mode.ts index c94bd4a..49ee4a1 100644 --- a/src/app/modeler/simulation-mode/simulation-mode.ts +++ b/src/app/modeler/simulation-mode/simulation-mode.ts @@ -1,8 +1,8 @@ -import {Mode} from '../control-panel/modes/mode'; +import {Injector} from '@angular/core'; +import {TutorialStep} from '../../tutorial/tutorial-step'; import {ControlPanelButton} from '../control-panel/control-panel-button'; import {ControlPanelIcon} from '../control-panel/control-panel-icon'; -import {TutorialStep} from '../../tutorial/tutorial-step'; -import {Injector} from '@angular/core'; +import {Mode} from '../control-panel/modes/mode'; export class SimulationMode extends Mode { diff --git a/src/app/modeler/simulation-mode/tool/change-data-tool.ts b/src/app/modeler/simulation-mode/tool/change-data-tool.ts index 1d5db8f..9f2dcee 100644 --- a/src/app/modeler/simulation-mode/tool/change-data-tool.ts +++ b/src/app/modeler/simulation-mode/tool/change-data-tool.ts @@ -1,16 +1,16 @@ -import {SimulationTool} from './simulation-tool'; -import {ControlPanelButton} from '../../control-panel/control-panel-button'; -import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; import { - Data, - DataSet, - DialogChangeDataComponent + Data, + DataSet, + DialogChangeDataComponent, } from '../../../dialogs/dialog-change-data/dialog-change-data.component'; +import {ControlPanelButton} from '../../control-panel/control-panel-button'; +import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; +import {SelectedTransitionService} from '../../selected-transition.service'; import {ModelService} from '../../services/model/model.service'; import {SimulationModeService} from '../simulation-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../selected-transition.service'; +import {SimulationTool} from './simulation-tool'; export class ChangeDataTool extends SimulationTool { @@ -37,13 +37,13 @@ export class ChangeDataTool extends SimulationTool { onClick() { super.onClick(); - this.dialog.open(DialogChangeDataComponent, { + this.openDialog(DialogChangeDataComponent, { width: '50%', panelClass: "dialog-width-50", data: { dataSet: this.simulationModeService.data } as DataSet - }).afterClosed().subscribe((data: Array) => { + }, (data: Array) => { if (data) { const dataSet = new Map(data.map(d => [d.id, d.value])); this.simulationModeService.data = dataSet; diff --git a/src/app/modeler/simulation-mode/tool/event-simulation.tool.ts b/src/app/modeler/simulation-mode/tool/event-simulation.tool.ts index b69c007..41dbc10 100644 --- a/src/app/modeler/simulation-mode/tool/event-simulation.tool.ts +++ b/src/app/modeler/simulation-mode/tool/event-simulation.tool.ts @@ -1,12 +1,12 @@ +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {SimulationTool} from './simulation-tool'; -import {ModelService} from '../../services/model/model.service'; -import {SimulationModeService} from '../simulation-mode.service'; import {CanvasTransition} from '../../edit-mode/domain/canvas-transition'; -import {MatDialog} from '@angular/material/dialog'; -import {Router} from '@angular/router'; import {SelectedTransitionService} from '../../selected-transition.service'; +import {ModelService} from '../../services/model/model.service'; +import {SimulationModeService} from '../simulation-mode.service'; +import {SimulationTool} from './simulation-tool'; export class EventSimulationTool extends SimulationTool { diff --git a/src/app/modeler/simulation-mode/tool/grid-tool.ts b/src/app/modeler/simulation-mode/tool/grid-tool.ts index 3122a37..a5e65ea 100644 --- a/src/app/modeler/simulation-mode/tool/grid-tool.ts +++ b/src/app/modeler/simulation-mode/tool/grid-tool.ts @@ -1,11 +1,11 @@ import {MatDialog} from '@angular/material/dialog'; -import { SimulationTool } from './simulation-tool'; -import {ModelService} from '../../services/model/model.service'; -import {SimulationModeService} from '../simulation-mode.service'; +import {Router} from '@angular/router'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {Router} from '@angular/router'; import {SelectedTransitionService} from '../../selected-transition.service'; +import {ModelService} from '../../services/model/model.service'; +import {SimulationModeService} from '../simulation-mode.service'; +import {SimulationTool} from './simulation-tool'; export class GridTool extends SimulationTool { diff --git a/src/app/modeler/simulation-mode/tool/reset-position-and-zoom-tool.ts b/src/app/modeler/simulation-mode/tool/reset-position-and-zoom-tool.ts index 5543141..1164f58 100644 --- a/src/app/modeler/simulation-mode/tool/reset-position-and-zoom-tool.ts +++ b/src/app/modeler/simulation-mode/tool/reset-position-and-zoom-tool.ts @@ -1,11 +1,11 @@ import {MatDialog} from '@angular/material/dialog'; -import { SimulationTool } from './simulation-tool'; -import {ModelService} from '../../services/model/model.service'; -import {SimulationModeService} from '../simulation-mode.service'; +import {Router} from '@angular/router'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {Router} from '@angular/router'; import {SelectedTransitionService} from '../../selected-transition.service'; +import {ModelService} from '../../services/model/model.service'; +import {SimulationModeService} from '../simulation-mode.service'; +import {SimulationTool} from './simulation-tool'; export class ResetPositionAndZoomTool extends SimulationTool { diff --git a/src/app/modeler/simulation-mode/tool/reset-simulation.tool.ts b/src/app/modeler/simulation-mode/tool/reset-simulation.tool.ts index 8e26cc4..75fd972 100644 --- a/src/app/modeler/simulation-mode/tool/reset-simulation.tool.ts +++ b/src/app/modeler/simulation-mode/tool/reset-simulation.tool.ts @@ -1,11 +1,11 @@ +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {SimulationTool} from './simulation-tool'; +import {SelectedTransitionService} from '../../selected-transition.service'; import {ModelService} from '../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; import {SimulationModeService} from '../simulation-mode.service'; -import {Router} from '@angular/router'; -import {SelectedTransitionService} from '../../selected-transition.service'; +import {SimulationTool} from './simulation-tool'; export class ResetSimulationTool extends SimulationTool { diff --git a/src/app/modeler/simulation-mode/tool/simulation-tool.ts b/src/app/modeler/simulation-mode/tool/simulation-tool.ts index 37740f9..4199b4a 100644 --- a/src/app/modeler/simulation-mode/tool/simulation-tool.ts +++ b/src/app/modeler/simulation-mode/tool/simulation-tool.ts @@ -1,18 +1,23 @@ -import {SimulationModeService} from '../simulation-mode.service'; +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; +import {BasicSimulation, Place} from '@netgrif/petriflow'; import {PetriflowCanvasService} from '@netgrif/petriflow.svg'; -import {CanvasElementCollection} from '../../edit-mode/domain/canvas-element-collection'; -import {BasicSimulation} from '@netgrif/petriflow'; -import {CanvasListenerTool} from '../../services/canvas/canvas-listener-tool'; +import { + Data, + DataSet, + DialogChangeDataComponent, +} from '../../../dialogs/dialog-change-data/dialog-change-data.component'; +import {DialogMarkingChangeComponent} from '../../../dialogs/dialog-marking-change/dialog-marking-change.component'; +import {PlaceEditData} from '../../../dialogs/dialog-place-edit/dialog-place-edit.component'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; -import {ModelService} from '../../services/model/model.service'; -import {MatDialog} from '@angular/material/dialog'; -import {CanvasTransition} from '../../edit-mode/domain/canvas-transition'; -import {CanvasPlace} from '../../edit-mode/domain/canvas-place'; import {CanvasArc} from '../../edit-mode/domain/canvas-arc'; -import {Router} from '@angular/router'; +import {CanvasElementCollection} from '../../edit-mode/domain/canvas-element-collection'; +import {CanvasPlace} from '../../edit-mode/domain/canvas-place'; +import {CanvasTransition} from '../../edit-mode/domain/canvas-transition'; import {SelectedTransitionService} from '../../selected-transition.service'; -import {id} from '@swimlane/ngx-charts'; -import {transition} from '@angular/animations'; +import {CanvasListenerTool} from '../../services/canvas/canvas-listener-tool'; +import {ModelService} from '../../services/model/model.service'; +import {SimulationModeService} from '../simulation-mode.service'; export abstract class SimulationTool extends CanvasListenerTool { @@ -50,12 +55,74 @@ export abstract class SimulationTool extends CanvasListenerTool { onTransitionLeave(event: MouseEvent, transition: CanvasTransition) { } + onPlaceUp(event: PointerEvent, place: CanvasPlace) { + super.onPlaceUp(event, place); + // do not remove this setTimout - Windows user will not be happy (context menu problem) + setTimeout(() => { + this.openMarkingPlaceDialog(place.modelPlace); + }, 0); + } + onPlaceEnter(event: MouseEvent, place: CanvasPlace) { } onPlaceLeave(event: MouseEvent, place: CanvasPlace) { } + onArcUp(event: PointerEvent, arc: CanvasArc) { + super.onArcUp(event, arc); + const reference = arc.modelArc.reference; + if (!reference) { + return; + } + const value = this.simulationModeService.data.get(reference); + if (value === undefined) { + const place = this.simulationModeService.model.getPlace(reference); + if (place) { + setTimeout(() => { + this.openMarkingPlaceDialog(place); + }, 0); + } + } else { + setTimeout(() => { + this.openDataDialog(reference, value); + }, 0); + } + } + + openMarkingPlaceDialog(place: Place): void { + this.openDialog(DialogMarkingChangeComponent, { + width: '50%', + panelClass: "dialog-width-50", + data: { + placeId: place.id + } as PlaceEditData + }, (data: number) => { + if (data !== undefined) { + place.marking = data; + this.simulation.updatePlaceReferences(); + this.simulationModeService.renderModel(this.simulation.simulationModel); + } + }); + } + + openDataDialog(id: string, value: number): void { + const dataSet = new Map([[id, value]]); + this.openDialog(DialogChangeDataComponent, { + width: '50%', + panelClass: "dialog-width-50", + data: { + dataSet: dataSet + } as DataSet + }, (data: Array) => { + if (data) { + this.simulationModeService.data.set(data[0].id, data[0].value); + this.simulation.updateData(this.simulationModeService.data); + this.simulationModeService.renderModel(this.simulation.simulationModel); + } + }); + } + onArcEnter(event: MouseEvent, arc: CanvasArc) { } @@ -66,6 +133,10 @@ export abstract class SimulationTool extends CanvasListenerTool { this.simulation?.reset(); } + protected afterDialog() { + this.bindKeys(); + } + get canvasService(): PetriflowCanvasService { return this._simulationModeService.canvasService; } diff --git a/src/app/modeler/simulation-mode/tool/switch-label-tool.ts b/src/app/modeler/simulation-mode/tool/switch-label-tool.ts index 142a09b..9827fbf 100644 --- a/src/app/modeler/simulation-mode/tool/switch-label-tool.ts +++ b/src/app/modeler/simulation-mode/tool/switch-label-tool.ts @@ -1,12 +1,12 @@ import {MatDialog} from '@angular/material/dialog'; -import { SimulationTool } from './simulation-tool'; -import {ModelService} from '../../services/model/model.service'; -import {SimulationModeService} from '../simulation-mode.service'; +import {Router} from '@angular/router'; +import {NodeElement} from '@netgrif/petriflow'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {NodeElement} from '@netgrif/petriflow'; -import {Router} from '@angular/router'; import {SelectedTransitionService} from '../../selected-transition.service'; +import {ModelService} from '../../services/model/model.service'; +import {SimulationModeService} from '../simulation-mode.service'; +import {SimulationTool} from './simulation-tool'; export class SwitchLabelTool extends SimulationTool { diff --git a/src/app/modeler/simulation-mode/tool/task-simulation.tool.ts b/src/app/modeler/simulation-mode/tool/task-simulation.tool.ts index 9e872ef..2daf2cf 100644 --- a/src/app/modeler/simulation-mode/tool/task-simulation.tool.ts +++ b/src/app/modeler/simulation-mode/tool/task-simulation.tool.ts @@ -1,12 +1,12 @@ +import {MatDialog} from '@angular/material/dialog'; +import {Router} from '@angular/router'; import {ControlPanelButton} from '../../control-panel/control-panel-button'; import {ControlPanelIcon} from '../../control-panel/control-panel-icon'; -import {SimulationTool} from './simulation-tool'; -import {ModelService} from '../../services/model/model.service'; -import {SimulationModeService} from '../simulation-mode.service'; import {CanvasTransition} from '../../edit-mode/domain/canvas-transition'; -import {MatDialog} from '@angular/material/dialog'; -import {Router} from '@angular/router'; import {SelectedTransitionService} from '../../selected-transition.service'; +import {ModelService} from '../../services/model/model.service'; +import {SimulationModeService} from '../simulation-mode.service'; +import {SimulationTool} from './simulation-tool'; export class TaskSimulationTool extends SimulationTool { diff --git a/src/app/tutorial/tutorial-service.ts b/src/app/tutorial/tutorial-service.ts index 97438d2..bed1d09 100644 --- a/src/app/tutorial/tutorial-service.ts +++ b/src/app/tutorial/tutorial-service.ts @@ -1,8 +1,8 @@ import {Injectable} from '@angular/core'; -import {MortgageService} from '../modeler/mortgage.service'; import {Router} from '@angular/router'; -import {TutorialStep} from './tutorial-step'; +import {MortgageService} from '../modeler/mortgage.service'; import {ModelService} from '../modeler/services/model/model.service'; +import {TutorialStep} from './tutorial-step'; @Injectable({ providedIn: 'root' @@ -167,8 +167,8 @@ export class TutorialService { ); this.demo = TutorialStep.of( 'demo', - 'Demo Application', - 'You can deploy your Petriflow models in our demo application after registration.', + 'Netgrif eTask', + 'You can deploy your Petriflow models in our eTask application after registration.', () => { }, () => { diff --git a/src/index.html b/src/index.html index 62d565b..4221484 100644 --- a/src/index.html +++ b/src/index.html @@ -2,15 +2,83 @@ - Netgrif builder + Netgrif Builder + + + - + + + +
+ + + + +
+ +
diff --git a/src/styles.scss b/src/styles.scss index debb327..bfa5f99 100644 --- a/src/styles.scss +++ b/src/styles.scss @@ -229,3 +229,36 @@ nab-simulation-mode { height: 40px; } } + +.app-loading { + @keyframes fadeInFromNone { + 0% { + display: none; + opacity: 0; + } + + 1% { + display: block; + opacity: 0; + } + + 100% { + display: block; + opacity: 1; + } + } + + .logo { + width: 100px; + height: 100px; + animation: 1s ease-out 0s 1 fadeInFromNone; + // this way asset gets processed by webpack + background: url(assets/netgrif_logo.svg) center center no-repeat; + background-size: contain; + } +} + +.app-version-text { + font-size: 9px; + color: map-get(netgif-theme.$netgrif-blue, 200); +}