diff --git a/docs/core/alfresco-api.service.md b/docs/core/alfresco-api.service.md index e3831a1472..c80a950f61 100644 --- a/docs/core/alfresco-api.service.md +++ b/docs/core/alfresco-api.service.md @@ -24,6 +24,12 @@ export class MyComponent implements OnInit { } ``` +## Events + +| Name | Type | Description | +| --- | --- | --- | +| nodeUpdated | `Subject` | Publish/subscribe to events related to node updates. | + ## Details **Note for developers**: _the TypeScript declaration files for Alfresco JS API diff --git a/lib/content-services/content-metadata/components/content-metadata/content-metadata.component.ts b/lib/content-services/content-metadata/components/content-metadata/content-metadata.component.ts index ef7fc05d32..7524d1c069 100644 --- a/lib/content-services/content-metadata/components/content-metadata/content-metadata.component.ts +++ b/lib/content-services/content-metadata/components/content-metadata/content-metadata.component.ts @@ -18,7 +18,7 @@ import { Component, Input, OnChanges, OnInit, SimpleChanges, SimpleChange, ViewEncapsulation } from '@angular/core'; import { MinimalNodeEntryEntity } from 'alfresco-js-api'; import { Observable } from 'rxjs/Observable'; -import { CardViewItem, NodesApiService, LogService, CardViewUpdateService } from '@alfresco/adf-core'; +import { CardViewItem, NodesApiService, LogService, CardViewUpdateService, AlfrescoApiService } from '@alfresco/adf-core'; import { ContentMetadataService } from '../../services/content-metadata.service'; import { CardViewGroup } from '../../interfaces/content-metadata.interfaces'; @@ -56,7 +56,8 @@ export class ContentMetadataComponent implements OnChanges, OnInit { constructor(private contentMetadataService: ContentMetadataService, private cardViewUpdateService: CardViewUpdateService, private nodesApi: NodesApiService, - private logService: LogService) {} + private logService: LogService, + private apiService: AlfrescoApiService) {} ngOnInit() { this.cardViewUpdateService.itemUpdated$ @@ -65,6 +66,7 @@ export class ContentMetadataComponent implements OnChanges, OnInit { (node) => { this.nodeHasBeenUpdated = true; this.node = node; + this.apiService.nodeUpdated.next(node); }, error => this.logService.error(error) ); diff --git a/lib/core/services/alfresco-api.service.spec.ts b/lib/core/services/alfresco-api.service.spec.ts new file mode 100644 index 0000000000..57522625d1 --- /dev/null +++ b/lib/core/services/alfresco-api.service.spec.ts @@ -0,0 +1,39 @@ +/*! + * @license + * Copyright 2016 Alfresco Software, Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { AlfrescoApiService } from './alfresco-api.service'; + +describe('AlfrescoApiService', () => { + + let service: AlfrescoApiService; + + beforeEach(() => { + service = new AlfrescoApiService(null, null); + }); + + it('should rase nodeChanged event with node payload', (done) => { + const node: any = {}; + + service.nodeUpdated.subscribe(result => { + expect(result).toEqual(node); + done(); + }); + + service.nodeUpdated.next(node); + }); + +}); diff --git a/lib/core/services/alfresco-api.service.ts b/lib/core/services/alfresco-api.service.ts index 524a53774c..39bf63500a 100644 --- a/lib/core/services/alfresco-api.service.ts +++ b/lib/core/services/alfresco-api.service.ts @@ -19,15 +19,21 @@ import { Injectable } from '@angular/core'; import { AlfrescoApi, ContentApi, FavoritesApi, NodesApi, PeopleApi, RenditionsApi, SharedlinksApi, SitesApi, - VersionsApi, ClassesApi, SearchApi, GroupsApi + VersionsApi, ClassesApi, SearchApi, GroupsApi, MinimalNodeEntryEntity } from 'alfresco-js-api'; import * as alfrescoApi from 'alfresco-js-api'; import { AppConfigService } from '../app-config/app-config.service'; import { StorageService } from './storage.service'; +import { Subject } from 'rxjs/Subject'; @Injectable() export class AlfrescoApiService { + /** + * Publish/subscribe to events related to node updates. + */ + nodeUpdated = new Subject(); + protected alfrescoApi: AlfrescoApi; getInstance(): AlfrescoApi { diff --git a/lib/core/viewer/components/viewer.component.ts b/lib/core/viewer/components/viewer.component.ts index a16b9a0fed..4418b93590 100644 --- a/lib/core/viewer/components/viewer.component.ts +++ b/lib/core/viewer/components/viewer.component.ts @@ -19,7 +19,7 @@ import { Location } from '@angular/common'; import { Component, ContentChild, EventEmitter, HostListener, ElementRef, Input, OnChanges, Output, SimpleChanges, TemplateRef, - ViewEncapsulation + ViewEncapsulation, OnInit, OnDestroy } from '@angular/core'; import { MinimalNodeEntryEntity, RenditionEntry } from 'alfresco-js-api'; import { BaseEvent } from '../../events'; @@ -29,6 +29,7 @@ import { ViewerMoreActionsComponent } from './viewer-more-actions.component'; import { ViewerOpenWithComponent } from './viewer-open-with.component'; import { ViewerSidebarComponent } from './viewer-sidebar.component'; import { ViewerToolbarComponent } from './viewer-toolbar.component'; +import { Subscription } from 'rxjs/Subscription'; @Component({ selector: 'adf-viewer', @@ -37,7 +38,7 @@ import { ViewerToolbarComponent } from './viewer-toolbar.component'; host: { 'class': 'adf-viewer' }, encapsulation: ViewEncapsulation.None }) -export class ViewerComponent implements OnChanges { +export class ViewerComponent implements OnChanges, OnInit, OnDestroy { @ContentChild(ViewerToolbarComponent) toolbar: ViewerToolbarComponent; @@ -213,6 +214,8 @@ export class ViewerComponent implements OnChanges { extension: string; sidebarTemplateContext: { node: MinimalNodeEntryEntity } = { node: null }; + private subscriptions: Subscription[] = []; + // Extensions that are supported by the Viewer without conversion private extensions = { image: ['png', 'jpg', 'jpeg', 'gif', 'bpm', 'svg'], @@ -239,6 +242,23 @@ export class ViewerComponent implements OnChanges { return (this.urlFile || this.blobFile || this.fileNodeId || this.sharedLinkId) ? true : false; } + ngOnInit() { + this.subscriptions = this.subscriptions.concat([ + this.apiService.nodeUpdated.subscribe(node => this.onNodeUpdated(node)) + ]); + } + + ngOnDestroy() { + this.subscriptions.forEach(subscription => subscription.unsubscribe()); + this.subscriptions = []; + } + + private onNodeUpdated(node: MinimalNodeEntryEntity) { + if (node && node.id === this.fileNodeId) { + this.setUpNodeFile(node); + } + } + ngOnChanges(changes: SimpleChanges) { if (this.showViewer) { if (!this.isSourceDefined()) {