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);
}
}