From 2c957e8fa7592065407df05c315800f20620f663 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Mon, 8 Jul 2019 08:33:32 +0300 Subject: [PATCH 01/12] remove reload action --- src/app/services/content-management.service.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/app/services/content-management.service.ts b/src/app/services/content-management.service.ts index b2bbb4313..0867dddfe 100644 --- a/src/app/services/content-management.service.ts +++ b/src/app/services/content-management.service.ts @@ -111,7 +111,6 @@ export class ContentManagementService { node.entry.isFavorite = true; }); this.store.dispatch(new SetSelectedNodesAction(nodes)); - this.store.dispatch(new ReloadDocumentListAction()); }); } } @@ -123,7 +122,6 @@ export class ContentManagementService { node.entry.isFavorite = false; }); this.store.dispatch(new SetSelectedNodesAction(nodes)); - this.store.dispatch(new ReloadDocumentListAction()); }); } } From 1681a47f498fd252099228a8749cc87a24226d22 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Mon, 8 Jul 2019 08:34:09 +0300 Subject: [PATCH 02/12] data for routes to be reloaded --- src/assets/app.extensions.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/assets/app.extensions.json b/src/assets/app.extensions.json index 9f08bdab0..afb536b35 100644 --- a/src/assets/app.extensions.json +++ b/src/assets/app.extensions.json @@ -356,6 +356,7 @@ "comment": "workaround for Recent Files and Search API issue", "type": "custom", "order": 400, + "data": "['/favorites', '/favorite/libraries']", "component": "app.toolbar.toggleFavorite", "rules": { "visible": "canToggleFavorite" From 7e52c54754d9fbba9a5a7cd27d29454004fd5a46 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Mon, 8 Jul 2019 08:34:37 +0300 Subject: [PATCH 03/12] pass data for dynamic components --- .../toolbar/toolbar-menu/toolbar-menu.component.html | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/app/components/toolbar/toolbar-menu/toolbar-menu.component.html b/src/app/components/toolbar/toolbar-menu/toolbar-menu.component.html index 3e7a298fa..6a26c205a 100644 --- a/src/app/components/toolbar/toolbar-menu/toolbar-menu.component.html +++ b/src/app/components/toolbar/toolbar-menu/toolbar-menu.component.html @@ -12,7 +12,10 @@ - + From e98af1ff268dcff96f7e429a65f14ec5e9b39d6d Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Mon, 8 Jul 2019 08:35:07 +0300 Subject: [PATCH 04/12] reload on specified routes --- .../toggle-favorite.component.ts | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.ts b/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.ts index 32498c979..50c5fdcd1 100644 --- a/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.ts +++ b/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.ts @@ -23,15 +23,16 @@ * along with Alfresco. If not, see . */ -import { Component, ViewEncapsulation } from '@angular/core'; +import { Component, ViewEncapsulation, OnInit, Input } from '@angular/core'; import { Store } from '@ngrx/store'; import { Observable } from 'rxjs'; -import { SelectionState } from '@alfresco/adf-extensions'; +import { SelectionState, ExtensionService } from '@alfresco/adf-extensions'; import { AppStore, ReloadDocumentListAction, getAppSelection } from '@alfresco/aca-shared/store'; +import { Router } from '@angular/router'; @Component({ selector: 'app-toggle-favorite', @@ -54,14 +55,28 @@ import { encapsulation: ViewEncapsulation.None, host: { class: 'app-toggle-favorite' } }) -export class ToggleFavoriteComponent { +export class ToggleFavoriteComponent implements OnInit { + @Input() data: any; selection$: Observable; + private reloadOnRoutes: string[]; - constructor(private store: Store) { + constructor( + private store: Store, + private extensionService: ExtensionService, + private router: Router + ) { this.selection$ = this.store.select(getAppSelection); } + ngOnInit() { + this.reloadOnRoutes = this.extensionService.runExpression( + `$( ${this.data} )` + ); + } + onToggleEvent() { - this.store.dispatch(new ReloadDocumentListAction()); + if (this.reloadOnRoutes.includes(this.router.url)) { + this.store.dispatch(new ReloadDocumentListAction()); + } } } From 026157b892e87de22f90a331ea5b86691183ef69 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Mon, 8 Jul 2019 08:35:19 +0300 Subject: [PATCH 05/12] tests --- .../toggle-favorite.component.spec.ts | 64 ++++++++++++++++++- 1 file changed, 62 insertions(+), 2 deletions(-) diff --git a/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.spec.ts b/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.spec.ts index 7e7ceea0b..b4c6c3d78 100644 --- a/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.spec.ts +++ b/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.spec.ts @@ -23,10 +23,70 @@ * along with Alfresco. If not, see . */ +import { TestBed } from '@angular/core/testing'; import { ToggleFavoriteComponent } from './toggle-favorite.component'; +import { Store } from '@ngrx/store'; +import { ExtensionService } from '@alfresco/adf-extensions'; +import { CoreModule } from '@alfresco/adf-core'; +import { Router } from '@angular/router'; +import { of } from 'rxjs'; describe('ToggleFavoriteComponent', () => { - it('should be defined', () => { - expect(ToggleFavoriteComponent).toBeDefined(); + let component: ToggleFavoriteComponent; + let fixture; + let router; + const mockRouter = { + url: 'some-url' + }; + const mockStore = { + dispatch: jasmine.createSpy('dispatch'), + select: jasmine.createSpy('select').and.returnValue( + of({ + nodes: [] + }) + ) + }; + + beforeEach(() => { + TestBed.configureTestingModule({ + imports: [CoreModule.forRoot()], + declarations: [ToggleFavoriteComponent], + providers: [ + ExtensionService, + { provide: Store, useValue: mockStore }, + { provide: Router, useValue: mockRouter } + ] + }); + + fixture = TestBed.createComponent(ToggleFavoriteComponent); + component = fixture.componentInstance; + router = TestBed.get(Router); + }); + + afterEach(() => { + mockStore.dispatch.calls.reset(); + }); + + it('should get selection data on initialization', () => { + expect(mockStore.select).toHaveBeenCalled(); + }); + + it('should not dispatch reload if route is not specified', () => { + component.data = "['/reload_on_this_route']"; + + fixture.detectChanges(); + component.onToggleEvent(); + + expect(mockStore.dispatch).not.toHaveBeenCalled(); + }); + + it('should dispatch reload if route is specified', () => { + component.data = "['/reload_on_this_route']"; + router.url = '/reload_on_this_route'; + + fixture.detectChanges(); + component.onToggleEvent(); + + expect(mockStore.dispatch).toHaveBeenCalled(); }); }); From 120c030b2b189aeb3fb741666b923778fa35b407 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Mon, 8 Jul 2019 12:31:20 +0300 Subject: [PATCH 06/12] check if data exists --- .../toggle-favorite/toggle-favorite.component.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.ts b/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.ts index 50c5fdcd1..5c5bc1c4c 100644 --- a/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.ts +++ b/src/app/components/toolbar/toggle-favorite/toggle-favorite.component.ts @@ -58,7 +58,7 @@ import { Router } from '@angular/router'; export class ToggleFavoriteComponent implements OnInit { @Input() data: any; selection$: Observable; - private reloadOnRoutes: string[]; + private reloadOnRoutes: string[] = []; constructor( private store: Store, @@ -69,9 +69,11 @@ export class ToggleFavoriteComponent implements OnInit { } ngOnInit() { - this.reloadOnRoutes = this.extensionService.runExpression( - `$( ${this.data} )` - ); + if (this.data) { + this.reloadOnRoutes = this.extensionService.runExpression( + `$( ${this.data} )` + ); + } } onToggleEvent() { From 79f3ad884085d54e3b70b437818802362405f195 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Mon, 8 Jul 2019 12:31:45 +0300 Subject: [PATCH 07/12] prevent link name to select row --- .../search-results-row/search-results-row.component.html | 4 ++-- .../search-results-row/search-results-row.component.ts | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/app/components/search/search-results-row/search-results-row.component.html b/src/app/components/search/search-results-row/search-results-row.component.html index a68e32897..55e94e565 100644 --- a/src/app/components/search/search-results-row/search-results-row.component.html +++ b/src/app/components/search/search-results-row/search-results-row.component.html @@ -1,8 +1,8 @@
- + {{ name$ | async }} - + {{ name$ | async }} {{ title$ | async }} diff --git a/src/app/components/search/search-results-row/search-results-row.component.ts b/src/app/components/search/search-results-row/search-results-row.component.ts index 7cdb41f69..f9c221af0 100644 --- a/src/app/components/search/search-results-row/search-results-row.component.ts +++ b/src/app/components/search/search-results-row/search-results-row.component.ts @@ -121,11 +121,13 @@ export class SearchResultsRowComponent implements OnInit, OnDestroy { return this.node.entry.isFile; } - showPreview() { + showPreview(event) { + event.stopPropagation(); this.store.dispatch(new ViewFileAction(this.node)); } - navigate() { + navigate(event) { + event.stopPropagation(); this.store.dispatch(new NavigateToFolder(this.node)); } } From 77fa5fa487fe12edec8270b9acda7f715402ac80 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Mon, 8 Jul 2019 16:22:52 +0300 Subject: [PATCH 08/12] ReloadDocumentListAction over SetSelectedNodesAction --- .../layout/app-layout/app-layout.component.spec.ts | 13 ------------- .../layout/app-layout/app-layout.component.ts | 12 ++++-------- 2 files changed, 4 insertions(+), 21 deletions(-) diff --git a/src/app/components/layout/app-layout/app-layout.component.spec.ts b/src/app/components/layout/app-layout/app-layout.component.spec.ts index 95398bf0a..16cc576e0 100644 --- a/src/app/components/layout/app-layout/app-layout.component.spec.ts +++ b/src/app/components/layout/app-layout/app-layout.component.spec.ts @@ -152,19 +152,6 @@ describe('AppLayoutComponent', () => { }); }); - it('should not reset selection if route is `/search`', done => { - fixture.detectChanges(); - const selection = [{ entry: { id: 'nodeId', name: 'name' } }]; - store.dispatch(new SetSelectedNodesAction(selection)); - - router.navigateByUrl('/search;q='); - fixture.detectChanges(); - store.select(getAppSelection).subscribe(state => { - expect(state.isEmpty).toBe(false); - done(); - }); - }); - it('should close menu on mobile screen size', () => { component.minimizeSidenav = false; component.layout.container = { diff --git a/src/app/components/layout/app-layout/app-layout.component.ts b/src/app/components/layout/app-layout/app-layout.component.ts index 103defa4a..7d44e2dce 100644 --- a/src/app/components/layout/app-layout/app-layout.component.ts +++ b/src/app/components/layout/app-layout/app-layout.component.ts @@ -43,8 +43,8 @@ import { NodePermissionService } from '@alfresco/aca-shared'; import { BreakpointObserver } from '@angular/cdk/layout'; import { AppStore, - SetSelectedNodesAction, - getCurrentFolder + getCurrentFolder, + ReloadDocumentListAction } from '@alfresco/aca-shared/store'; import { Directionality } from '@angular/cdk/bidi'; @@ -140,15 +140,11 @@ export class AppLayoutComponent implements OnInit, OnDestroy { this.router.events .pipe( filter(event => { - return ( - event instanceof NavigationStart && - // search employs reuse route strategy - !event.url.startsWith('/search;') - ); + return event instanceof NavigationStart; }), takeUntil(this.onDestroy$) ) - .subscribe(() => this.store.dispatch(new SetSelectedNodesAction([]))); + .subscribe(() => this.store.dispatch(new ReloadDocumentListAction())); } ngOnDestroy() { From b122f3a6e067c15f0009aeb8a65001a812d11095 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Mon, 8 Jul 2019 17:25:56 +0300 Subject: [PATCH 09/12] reset store selection and document list --- .../components/layout/app-layout/app-layout.component.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/app/components/layout/app-layout/app-layout.component.ts b/src/app/components/layout/app-layout/app-layout.component.ts index 7d44e2dce..acce5a4f1 100644 --- a/src/app/components/layout/app-layout/app-layout.component.ts +++ b/src/app/components/layout/app-layout/app-layout.component.ts @@ -44,7 +44,8 @@ import { BreakpointObserver } from '@angular/cdk/layout'; import { AppStore, getCurrentFolder, - ReloadDocumentListAction + ReloadDocumentListAction, + SetSelectedNodesAction } from '@alfresco/aca-shared/store'; import { Directionality } from '@angular/cdk/bidi'; @@ -144,7 +145,10 @@ export class AppLayoutComponent implements OnInit, OnDestroy { }), takeUntil(this.onDestroy$) ) - .subscribe(() => this.store.dispatch(new ReloadDocumentListAction())); + .subscribe(() => { + this.store.dispatch(new SetSelectedNodesAction()); + this.store.dispatch(new ReloadDocumentListAction()); + }); } ngOnDestroy() { From a2b022f50739b38a4afd090d3459f1c5cfe7c518 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Wed, 10 Jul 2019 12:24:29 +0300 Subject: [PATCH 10/12] revert changes --- .../layout/app-layout/app-layout.component.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/app/components/layout/app-layout/app-layout.component.ts b/src/app/components/layout/app-layout/app-layout.component.ts index acce5a4f1..553e3c790 100644 --- a/src/app/components/layout/app-layout/app-layout.component.ts +++ b/src/app/components/layout/app-layout/app-layout.component.ts @@ -44,7 +44,6 @@ import { BreakpointObserver } from '@angular/cdk/layout'; import { AppStore, getCurrentFolder, - ReloadDocumentListAction, SetSelectedNodesAction } from '@alfresco/aca-shared/store'; import { Directionality } from '@angular/cdk/bidi'; @@ -141,14 +140,15 @@ export class AppLayoutComponent implements OnInit, OnDestroy { this.router.events .pipe( filter(event => { - return event instanceof NavigationStart; + return ( + event instanceof NavigationStart && + // search employs reuse route strategy + !event.url.startsWith('/search;') + ); }), takeUntil(this.onDestroy$) ) - .subscribe(() => { - this.store.dispatch(new SetSelectedNodesAction()); - this.store.dispatch(new ReloadDocumentListAction()); - }); + .subscribe(() => this.store.dispatch(new SetSelectedNodesAction([]))); } ngOnDestroy() { From d5d548c9de05b4b5275c6e3adc577bf8e5aa7be0 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Wed, 10 Jul 2019 12:24:43 +0300 Subject: [PATCH 11/12] parameters types --- .../search/search-results-row/search-results-row.component.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/components/search/search-results-row/search-results-row.component.ts b/src/app/components/search/search-results-row/search-results-row.component.ts index f9c221af0..185467a72 100644 --- a/src/app/components/search/search-results-row/search-results-row.component.ts +++ b/src/app/components/search/search-results-row/search-results-row.component.ts @@ -121,12 +121,12 @@ export class SearchResultsRowComponent implements OnInit, OnDestroy { return this.node.entry.isFile; } - showPreview(event) { + showPreview(event: MouseEvent) { event.stopPropagation(); this.store.dispatch(new ViewFileAction(this.node)); } - navigate(event) { + navigate(event: MouseEvent) { event.stopPropagation(); this.store.dispatch(new NavigateToFolder(this.node)); } From 755618dd300abf33f81eb807d74b525b5c78fb29 Mon Sep 17 00:00:00 2001 From: Cilibiu Bogdan Date: Wed, 10 Jul 2019 12:45:48 +0300 Subject: [PATCH 12/12] revert test changes --- .../layout/app-layout/app-layout.component.spec.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/app/components/layout/app-layout/app-layout.component.spec.ts b/src/app/components/layout/app-layout/app-layout.component.spec.ts index 16cc576e0..95398bf0a 100644 --- a/src/app/components/layout/app-layout/app-layout.component.spec.ts +++ b/src/app/components/layout/app-layout/app-layout.component.spec.ts @@ -152,6 +152,19 @@ describe('AppLayoutComponent', () => { }); }); + it('should not reset selection if route is `/search`', done => { + fixture.detectChanges(); + const selection = [{ entry: { id: 'nodeId', name: 'name' } }]; + store.dispatch(new SetSelectedNodesAction(selection)); + + router.navigateByUrl('/search;q='); + fixture.detectChanges(); + store.select(getAppSelection).subscribe(state => { + expect(state.isEmpty).toBe(false); + done(); + }); + }); + it('should close menu on mobile screen size', () => { component.minimizeSidenav = false; component.layout.container = {