import { Component , Input , OnInit , ViewEncapsulation , ChangeDetectionStrategy , OnDestroy } from '@angular/core' ; import { MinimalNodeEntity } from '@alfresco/js-api' ; import { ViewNodeAction , NavigateToFolder } from '@alfresco/aca-shared/store' ; import { Store } from '@ngrx/store' ; import { BehaviorSubject , Subject } from 'rxjs' ; import { AlfrescoApiService } from '@alfresco/adf-core' ; import { takeUntil } from 'rxjs/operators' ; import { Router } from '@angular/router' ; @ Component ( { selector : 'aca-search-results-row' , templateUrl : './search-results-row.component.html' , styleUrls : [ './search-results-row.component.scss' ] , encapsulation : ViewEncapsulation . None , changeDetection : ChangeDetectionStrategy . OnPush , host : { class : 'aca-search-results-row' } } ) export class SearchResultsRowComponent implements OnInit , OnDestroy { private node : MinimalNodeEntity ; private onDestroy$ = new Subject < boolean > ( ) ; @ Input ( ) context : any ; name$ = new BehaviorSubject < string > ( '' ) ; title$ = new BehaviorSubject < string > ( '' ) ; constructor ( private store , private alfrescoApiService , private router ) { } ngOnInit ( ) { this . updateValues ( ) ; this . alfrescoApiService . nodeUpdated . pipe ( takeUntil ( this . onDestroy$ ) ) . subscribe ( ( node ) => { const row = this . context . row ; if ( row ) { const { entry } = row . node ; if ( entry . id === node . id ) { entry . name = node . name ; entry . properties = Object . assign ( { } , node . properties ) ; this . updateValues ( ) ; } } } ) ; } private updateValues ( ) { this . node = this . context . row . node ; const { name , properties } = this . node . entry ; const title = properties ? properties [ 'cm:title' ] : '' ; this . name$ . next ( name ) ; if ( title !== name ) { this . title$ . next ( title ? `( ${ title } )` : '' ) ; } } ngOnDestroy ( ) { this . onDestroy$ . next ( true ) ; this . onDestroy$ . complete ( ) ; } get isFile ( ) : boolean { return this . node . entry . isFile ; } showPreview ( event ) { event . stopPropagation ( ) ; this . store . dispatch ( new ViewNodeAction ( this . node . entry . id , { location : this . router . url } ) ) ; } navigate ( event ) { event . stopPropagation ( ) ; this . store . dispatch ( new NavigateToFolder ( this . node ) ) ; } }