@@ -35,6 +35,8 @@ import {DATE_FORMAT, DATE_TIME_FORMAT, EnumerationFieldValue} from '@netgrif/com
3535import { Router } from '@angular/router' ;
3636import { ActionsModeService } from '../../modeler/actions-mode/actions-mode.service' ;
3737import { ActionsMasterDetailService } from '../../modeler/actions-mode/actions-master-detail.setvice' ;
38+ import { ComponentDef , DataRefDef , FieldListService , PropertyDef } from '../field-list/field-list.service' ;
39+ import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete' ;
3840
3941@Component ( {
4042 selector : 'nab-edit-panel' ,
@@ -72,15 +74,18 @@ export class EditPanelComponent implements OnInit, AfterViewInit {
7274 filteredOptions : Observable < Array < EnumerationFieldValue > > ;
7375 formControlRef : FormControl ;
7476 transitionOptions : Array < EnumerationFieldValue > ;
75-
7677 behaviorOptions ;
7778
79+ componentNameFormCtrl : FormControl ;
80+ dataRefComponentNameFormCtrl : FormControl ;
81+
7882 constructor ( public gridsterService : GridsterService ,
7983 public modelService : ModelService ,
8084 private dialog : MatDialog ,
8185 private transitionService : SelectedTransitionService ,
8286 private _router : Router ,
8387 private _actionMode : ActionsModeService ,
88+ private _fieldListService : FieldListService ,
8489 private _actionsMasterDetail : ActionsMasterDetailService ) {
8590 // this.transitionOptions = [];
8691 this . formControlRef = new FormControl ( ) ;
@@ -92,6 +97,8 @@ export class EditPanelComponent implements OnInit, AfterViewInit {
9297 }
9398
9499 ngOnInit ( ) {
100+ this . componentNameFormCtrl = new FormControl ( ) ;
101+ this . dataRefComponentNameFormCtrl = new FormControl ( ) ;
95102 this . transId = this . transitionService . id ;
96103 if ( this . transId === null ) {
97104 this . numOfCols = ModelerConfig . LAYOUT_DEFAULT_COLS ;
@@ -408,8 +415,13 @@ export class EditPanelComponent implements OnInit, AfterViewInit {
408415 return false ;
409416 }
410417
411- setPropertyKey ( $event , index : number , component : PetriflowComponent ) {
412- component . properties [ index ] . key = $event . target . value ;
418+ public setPropertyKey ( $event , index : number , component : PetriflowComponent ) : void {
419+ if ( $event instanceof MatAutocompleteSelectedEvent ) {
420+ component . properties [ index ] . key = $event . option . value ;
421+ this . setPropertyDefaultValue ( $event , index , component ) ;
422+ } else {
423+ component . properties [ index ] . key = $event . target . value ;
424+ }
413425 }
414426
415427 setPropertyValue ( $event , index : number , component : PetriflowComponent ) {
@@ -440,18 +452,26 @@ export class EditPanelComponent implements OnInit, AfterViewInit {
440452 }
441453 }
442454
443- setComponent ( $event ) {
455+ public setComponent ( $event ) : void {
444456 if ( ! this . gridsterService . selectedDataField . dataVariable . component ) {
445457 this . gridsterService . selectedDataField . dataVariable . component = new PetriflowComponent ( '' ) ;
446458 }
447- this . gridsterService . selectedDataField . dataVariable . component . name = $event . target . value ;
459+ if ( $event instanceof MatAutocompleteSelectedEvent ) {
460+ this . gridsterService . selectedDataField . dataVariable . component . name = $event . option . value ;
461+ } else {
462+ this . gridsterService . selectedDataField . dataVariable . component . name = $event . target . value ;
463+ }
448464 }
449465
450- setDataRefComponent ( $event ) {
466+ public setDataRefComponent ( $event ) : void {
451467 if ( ! this . gridsterService . selectedDataField . dataRef . component ) {
452468 this . gridsterService . selectedDataField . dataRef . component = new PetriflowComponent ( '' ) ;
453469 }
454- this . gridsterService . selectedDataField . dataRef . component . name = $event . target . value ;
470+ if ( $event instanceof MatAutocompleteSelectedEvent ) {
471+ this . gridsterService . selectedDataField . dataRef . component . name = $event . option . value ;
472+ } else {
473+ this . gridsterService . selectedDataField . dataRef . component . name = $event . target . value ;
474+ }
455475 }
456476
457477 taskRefTitle ( option : EnumerationFieldValue ) {
@@ -515,4 +535,41 @@ export class EditPanelComponent implements OnInit, AfterViewInit {
515535 numberOfActions ( ) : number {
516536 return this . modelService . numberOfTransitionActions ( this . transition ) ;
517537 }
538+
539+ filteredComponents ( component : PetriflowComponent ) : Array < ComponentDef > {
540+ const componentDefs : DataRefDef = this . _fieldListService . fieldListArray . find ( type => type . type === this . dataVariable . type ) ;
541+ if ( ! componentDefs ) {
542+ return [ ] ;
543+ }
544+ return componentDefs . components . filter ( def => def . name !== undefined && def . title . toLowerCase ( ) . includes ( component . name ) ) ;
545+ }
546+
547+ public filteredProperties ( component : PetriflowComponent , propertyName : string ) : Array < PropertyDef > {
548+ const componentDefs : DataRefDef = this . _fieldListService . fieldListArray . find ( type => type . type === this . dataVariable . type ) ;
549+ if ( ! componentDefs ) {
550+ return [ ] ;
551+ }
552+ const propertyDefs : ComponentDef = componentDefs . components . find ( compDef => {
553+ return ( ! component . name && ! compDef . name ) || ( ! ! component . name && ! ! compDef . name && component . name === compDef . name ) ;
554+ } ) ;
555+ if ( ! propertyDefs || ! propertyDefs . properties ) {
556+ return [ ] ;
557+ }
558+ const existingProperties = component . properties . map ( compProperty => compProperty . key ) ;
559+ return propertyDefs . properties . filter ( propDef => propDef . name . includes ( propertyName ) && ! existingProperties . includes ( propDef . name ) ) ;
560+ }
561+
562+ public setPropertyDefaultValue ( $event : MatAutocompleteSelectedEvent , index : number , component : PetriflowComponent ) : void {
563+ component . properties [ index ] . value = this . _fieldListService . fieldListArray
564+ . find ( type => type . type === this . dataVariable . type ) ?. components
565+ . find ( compDef => ( ! component . name && ! compDef . name ) || ( ! ! component . name && ! ! compDef . name && component . name === compDef . name ) ) ?. properties
566+ . find ( propDef => propDef . name === $event . option . value ) . defaultValue ;
567+ }
568+
569+ public cloneProperty ( source : DataRef | DataVariable , target : DataRef | DataVariable , property : string ) : void {
570+ if ( ! ( property in source ) ) {
571+ return ;
572+ }
573+ target [ property ] = source [ property ] . clone ( ) ;
574+ }
518575}
0 commit comments