diff --git a/src/app/components/location-link/location-link.component.ts b/src/app/components/location-link/location-link.component.ts index a81e2d591..6e2ce8505 100644 --- a/src/app/components/location-link/location-link.component.ts +++ b/src/app/components/location-link/location-link.component.ts @@ -1,12 +1,14 @@ import { Component, Input, ChangeDetectionStrategy, OnInit, ViewEncapsulation } from '@angular/core'; import { DataColumn, DataRow, DataTableAdapter } from 'ng2-alfresco-datatable'; -import { PathInfoEntity } from 'alfresco-js-api'; +import { AlfrescoApiService } from 'ng2-alfresco-core'; +import { PathInfoEntity, AlfrescoApi } from 'alfresco-js-api'; +import { Observable } from 'rxjs/Rx'; @Component({ selector: 'app-location-link', template: ` - - {{ displayText }} + + {{ displayText | async }} `, changeDetection: ChangeDetectionStrategy.OnPush, @@ -25,10 +27,13 @@ export class LocationLinkComponent implements OnInit { link: any[]; @Input() - displayText = ''; + displayText: Observable; @Input() - tooltip = ''; + tooltip: Observable; + + constructor(private apiService: AlfrescoApiService) { + } ngOnInit() { if (this.context) { @@ -58,27 +63,81 @@ export class LocationLinkComponent implements OnInit { return false; } - private getDisplayText(path: PathInfoEntity): string { - let result = path.elements[path.elements.length - 1].name; + // todo: review once 5.2.3 is out + private getDisplayText(path: PathInfoEntity): Observable { + const elements = path.elements.map(e => e.name); - if (result === 'documentLibrary') { - result = path.elements[path.elements.length - 2].name; + // for admin users + if (elements.length === 1 && elements[0] === 'Company Home') { + return Observable.of('Personal Files'); } - result = result.replace('Company Home', 'Personal Files'); + // for non-admin users + if (elements.length === 3 && elements[0] === 'Company Home' && elements[1] === 'User Homes') { + return Observable.of('Personal Files'); + } - return result; + const result = elements[elements.length - 1]; + + if (result === 'documentLibrary') { + const fragment = path.elements[path.elements.length - 2]; + + return new Observable(observer => { + this.apiService.nodesApi.getNodeInfo(fragment.id).then( + (node) => { + observer.next(node.properties['cm:title'] || node.name || fragment.name); + observer.complete(); + }, + (err) => { + observer.next(fragment.name); + observer.complete(); + } + ); + }); + } + + return Observable.of(result); } // todo: review once 5.2.3 is out - private getTooltip(path: PathInfoEntity): string { - let result = path.name; + private getTooltip(path: PathInfoEntity): Observable { + const elements = path.elements.map(e => Object.assign({}, e)); - result = result.replace('documentLibrary/', ''); - result = result.replace('/documentLibrary', ''); - result = result.replace('/Company Home/Sites', 'File Libraries'); - result = result.replace('/Company Home', 'Personal Files'); + if (elements[0].name === 'Company Home') { + if (elements[1].name === 'Sites') { + const fragment = elements[2]; - return result; + return new Observable(observer => { + this.apiService.nodesApi.getNodeInfo(fragment.id).then( + (node) => { + elements.splice(0, 2); + elements[0].name = node.properties['cm:title'] || node.name || fragment.name; + elements.splice(1, 1); + elements.unshift({ id: null, name: 'File Libraries' }); + + observer.next(elements.map(e => e.name).join('/')); + observer.complete(); + }, + (err) => { + elements.splice(0, 2); + elements.unshift({ id: null, name: 'File Libraries' }); + elements.splice(2, 1); + + observer.next(elements.map(e => e.name).join('/')); + observer.complete(); + } + ); + }); + + + } + if (elements[1].name === 'User Homes') { + elements.splice(0, 3); + elements.unshift({ id: null, name: 'Personal Files'}); + } + } + + const result = elements.map(e => e.name).join('/'); + return Observable.of(result); } }