import { Directive , Input , HostListener } from '@angular/core' ; import { PRIMARY_OUTLET , Router } from '@angular/router' ; import { Store } from '@ngrx/store' ; import { AppStore } from '@alfresco/aca-shared/store' ; @ Directive ( { selector : '[action]' , exportAs : 'action' } ) export class ActionDirective { @ Input ( ) action ; @ HostListener ( 'click' ) onClick ( ) { if ( this . action . url ) { this . router . navigate ( this . getNavigationCommands ( this . action . url ) ) ; } else if ( this . action . click ) { this . store . dispatch ( { type : this . action . click . action , payload : this . getNavigationCommands ( this . action . click . payload ) } ) ; } } constructor ( private router , private store ) { } private getNavigationCommands ( url ) { const urlTree = this . router . parseUrl ( url ) ; const urlSegmentGroup = urlTree . root . children [ PRIMARY_OUTLET ] ; if ( ! urlSegmentGroup ) { return [ url ] ; } const urlSegments = urlSegmentGroup . segments ; return urlSegments . reduce ( function ( acc , item ) { acc . push ( item . path , item . parameters ) ; return acc ; } , [ ] ) ; } }