diff --git a/docs/extending/application-actions.md b/docs/extending/application-actions.md index 122f28ec1..f1bbb5da9 100644 --- a/docs/extending/application-actions.md +++ b/docs/extending/application-actions.md @@ -122,3 +122,4 @@ Below is the list of public actions types you can use in the plugin definitions | 1.7.0 | SHOW_SEARCH_FILTER | n/a | Show Filter component in Search Results. | | 1.7.0 | HIDE_SEARCH_FILTER | n/a | Hide Filter component in Search Results | | 1.8.0 | VIEW_NODE | string | Lightweight preview of a node by id. Can be invoked from extensions. | +| 1.8.0 | CLOSE_PREVIEW | n/a | Closes the viewer ( preview of the item ) | diff --git a/projects/aca-shared/store/src/actions/viewer.actions.ts b/projects/aca-shared/store/src/actions/viewer.actions.ts index 1e878b13a..0dae7f87e 100644 --- a/projects/aca-shared/store/src/actions/viewer.actions.ts +++ b/projects/aca-shared/store/src/actions/viewer.actions.ts @@ -29,7 +29,8 @@ import { MinimalNodeEntity } from '@alfresco/js-api'; export enum ViewerActionTypes { ViewFile = 'VIEW_FILE', ViewNode = 'VIEW_NODE', - FullScreen = 'FULLSCREEN_VIEWER' + FullScreen = 'FULLSCREEN_VIEWER', + ClosePreview = 'CLOSE_PREVIEW' } export class ViewFileAction implements Action { @@ -49,3 +50,8 @@ export class FullscreenViewerAction implements Action { constructor(public payload: MinimalNodeEntity) {} } + +export class ClosePreviewAction implements Action { + readonly type = ViewerActionTypes.ClosePreview; + constructor(public payload?: MinimalNodeEntity) {} +} diff --git a/proxy.conf.js b/proxy.conf.js index 5bea784f0..26a361bd3 100644 --- a/proxy.conf.js +++ b/proxy.conf.js @@ -1,14 +1,14 @@ module.exports = { - "/alfresco": { - "target": "http://0.0.0.0:8080", - "secure": false, - "changeOrigin": true, - // workaround for REPO-2260 - onProxyRes: function (proxyRes, req, res) { - const header = proxyRes.headers['www-authenticate']; - if (header && header.startsWith('Basic')) { - proxyRes.headers['www-authenticate'] = 'x' + header; - } - } + '/alfresco': { + target: 'http://0.0.0.0:8080', + secure: false, + changeOrigin: true, + // workaround for REPO-2260 + onProxyRes: function(proxyRes, req, res) { + const header = proxyRes.headers['www-authenticate']; + if (header && header.startsWith('Basic')) { + proxyRes.headers['www-authenticate'] = 'x' + header; + } } + } }; diff --git a/src/app/components/preview/preview.component.spec.ts b/src/app/components/preview/preview.component.spec.ts index fcac4d2f4..544eda545 100644 --- a/src/app/components/preview/preview.component.spec.ts +++ b/src/app/components/preview/preview.component.spec.ts @@ -39,6 +39,7 @@ import { UploadService, AlfrescoApiService } from '@alfresco/adf-core'; +import { ClosePreviewAction } from '@alfresco/aca-shared/store'; import { PreviewComponent } from './preview.component'; import { of, throwError } from 'rxjs'; import { EffectsModule } from '@ngrx/effects'; @@ -46,6 +47,7 @@ import { NodeEffects } from '../../store/effects/node.effects'; import { AppTestingModule } from '../../testing/app-testing.module'; import { ContentApiService } from '@alfresco/aca-shared'; import { ContentManagementService } from '../../services/content-management.service'; +import { Store } from '@ngrx/store'; describe('PreviewComponent', () => { let fixture: ComponentFixture; @@ -57,6 +59,7 @@ describe('PreviewComponent', () => { let uploadService: UploadService; let alfrescoApiService: AlfrescoApiService; let contentManagementService: ContentManagementService; + let store: Store; beforeEach(() => { TestBed.configureTestingModule({ @@ -76,6 +79,7 @@ describe('PreviewComponent', () => { uploadService = TestBed.get(UploadService); alfrescoApiService = TestBed.get(AlfrescoApiService); contentManagementService = TestBed.get(ContentManagementService); + store = TestBed.get(Store); }); it('should extract the property path root', () => { @@ -732,4 +736,11 @@ describe('PreviewComponent', () => { expect(alfrescoApiService.nodeUpdated.next).toHaveBeenCalled(); })); + + it('should return to parent folder when event emitted from extension', async(() => { + spyOn(component, 'navigateToFileLocation'); + fixture.detectChanges(); + store.dispatch(new ClosePreviewAction()); + expect(component.navigateToFileLocation).toHaveBeenCalled(); + })); }); diff --git a/src/app/components/preview/preview.component.ts b/src/app/components/preview/preview.component.ts index 97fdf7f93..3a451aa3f 100644 --- a/src/app/components/preview/preview.component.ts +++ b/src/app/components/preview/preview.component.ts @@ -38,7 +38,7 @@ import { UrlSegment, PRIMARY_OUTLET } from '@angular/router'; -import { debounceTime, takeUntil } from 'rxjs/operators'; +import { debounceTime, map, takeUntil } from 'rxjs/operators'; import { UserPreferencesService, ObjectUtils, @@ -46,7 +46,11 @@ import { AlfrescoApiService } from '@alfresco/adf-core'; import { Store } from '@ngrx/store'; -import { AppStore } from '@alfresco/aca-shared/store'; +import { + AppStore, + ClosePreviewAction, + ViewerActionTypes +} from '@alfresco/aca-shared/store'; import { SetSelectedNodesAction } from '@alfresco/aca-shared/store'; import { PageComponent } from '../page.component'; import { ContentApiService } from '@alfresco/aca-shared'; @@ -55,6 +59,7 @@ import { ContentManagementService } from '../../services/content-management.serv import { ContentActionRef, ViewerExtensionRef } from '@alfresco/adf-extensions'; import { SearchRequest } from '@alfresco/js-api'; import { from } from 'rxjs'; +import { Actions, ofType } from '@ngrx/effects'; @Component({ selector: 'app-preview', @@ -115,6 +120,7 @@ export class PreviewComponent extends PageComponent private router: Router, private apiService: AlfrescoApiService, private uploadService: UploadService, + private actions$: Actions, store: Store, extensions: AppExtensionService, content: ContentManagementService @@ -167,7 +173,14 @@ export class PreviewComponent extends PageComponent this.uploadService.fileUploadComplete .pipe(debounceTime(300)) - .subscribe(file => this.apiService.nodeUpdated.next(file.data.entry)) + .subscribe(file => this.apiService.nodeUpdated.next(file.data.entry)), + + this.actions$ + .pipe( + ofType(ViewerActionTypes.ClosePreview), + map(() => this.navigateToFileLocation(true)) + ) + .subscribe(() => {}) ]); this.openWith = this.extensions.openWithActions;