mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-05-26 17:24:45 +00:00
Merge pull request #1153 from Alfresco/dev-pionnegu-ACA-2651
[ACA-2651] Viewer - toolbar disappears after marking / removing a specific file as favourite
This commit is contained in:
commit
1640a16c78
@ -43,8 +43,8 @@ import { NodePermissionService } from '@alfresco/aca-shared';
|
|||||||
import { BreakpointObserver } from '@angular/cdk/layout';
|
import { BreakpointObserver } from '@angular/cdk/layout';
|
||||||
import {
|
import {
|
||||||
AppStore,
|
AppStore,
|
||||||
SetSelectedNodesAction,
|
getCurrentFolder,
|
||||||
getCurrentFolder
|
SetSelectedNodesAction
|
||||||
} from '@alfresco/aca-shared/store';
|
} from '@alfresco/aca-shared/store';
|
||||||
import { Directionality } from '@angular/cdk/bidi';
|
import { Directionality } from '@angular/cdk/bidi';
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<div class="line">
|
<div class="line">
|
||||||
<span *ngIf="isFile" (click)="showPreview()" class="link">
|
<span *ngIf="isFile" (click)="showPreview($event)" class="link">
|
||||||
{{ name$ | async }}
|
{{ name$ | async }}
|
||||||
</span>
|
</span>
|
||||||
<span *ngIf="!isFile" (click)="navigate()" class="bold link">
|
<span *ngIf="!isFile" (click)="navigate($event)" class="bold link">
|
||||||
{{ name$ | async }}
|
{{ name$ | async }}
|
||||||
</span>
|
</span>
|
||||||
<span>{{ title$ | async }}</span>
|
<span>{{ title$ | async }}</span>
|
||||||
|
@ -121,11 +121,13 @@ export class SearchResultsRowComponent implements OnInit, OnDestroy {
|
|||||||
return this.node.entry.isFile;
|
return this.node.entry.isFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
showPreview() {
|
showPreview(event: MouseEvent) {
|
||||||
|
event.stopPropagation();
|
||||||
this.store.dispatch(new ViewFileAction(this.node));
|
this.store.dispatch(new ViewFileAction(this.node));
|
||||||
}
|
}
|
||||||
|
|
||||||
navigate() {
|
navigate(event: MouseEvent) {
|
||||||
|
event.stopPropagation();
|
||||||
this.store.dispatch(new NavigateToFolder(this.node));
|
this.store.dispatch(new NavigateToFolder(this.node));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,10 +23,70 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import { TestBed } from '@angular/core/testing';
|
||||||
import { ToggleFavoriteComponent } from './toggle-favorite.component';
|
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', () => {
|
describe('ToggleFavoriteComponent', () => {
|
||||||
it('should be defined', () => {
|
let component: ToggleFavoriteComponent;
|
||||||
expect(ToggleFavoriteComponent).toBeDefined();
|
let fixture;
|
||||||
|
let router;
|
||||||
|
const mockRouter = {
|
||||||
|
url: 'some-url'
|
||||||
|
};
|
||||||
|
const mockStore = <any>{
|
||||||
|
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();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -23,15 +23,16 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { Component, ViewEncapsulation } from '@angular/core';
|
import { Component, ViewEncapsulation, OnInit, Input } from '@angular/core';
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import { Observable } from 'rxjs';
|
import { Observable } from 'rxjs';
|
||||||
import { SelectionState } from '@alfresco/adf-extensions';
|
import { SelectionState, ExtensionService } from '@alfresco/adf-extensions';
|
||||||
import {
|
import {
|
||||||
AppStore,
|
AppStore,
|
||||||
ReloadDocumentListAction,
|
ReloadDocumentListAction,
|
||||||
getAppSelection
|
getAppSelection
|
||||||
} from '@alfresco/aca-shared/store';
|
} from '@alfresco/aca-shared/store';
|
||||||
|
import { Router } from '@angular/router';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-toggle-favorite',
|
selector: 'app-toggle-favorite',
|
||||||
@ -54,14 +55,30 @@ import {
|
|||||||
encapsulation: ViewEncapsulation.None,
|
encapsulation: ViewEncapsulation.None,
|
||||||
host: { class: 'app-toggle-favorite' }
|
host: { class: 'app-toggle-favorite' }
|
||||||
})
|
})
|
||||||
export class ToggleFavoriteComponent {
|
export class ToggleFavoriteComponent implements OnInit {
|
||||||
|
@Input() data: any;
|
||||||
selection$: Observable<SelectionState>;
|
selection$: Observable<SelectionState>;
|
||||||
|
private reloadOnRoutes: string[] = [];
|
||||||
|
|
||||||
constructor(private store: Store<AppStore>) {
|
constructor(
|
||||||
|
private store: Store<AppStore>,
|
||||||
|
private extensionService: ExtensionService,
|
||||||
|
private router: Router
|
||||||
|
) {
|
||||||
this.selection$ = this.store.select(getAppSelection);
|
this.selection$ = this.store.select(getAppSelection);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ngOnInit() {
|
||||||
|
if (this.data) {
|
||||||
|
this.reloadOnRoutes = this.extensionService.runExpression(
|
||||||
|
`$( ${this.data} )`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
onToggleEvent() {
|
onToggleEvent() {
|
||||||
this.store.dispatch(new ReloadDocumentListAction());
|
if (this.reloadOnRoutes.includes(this.router.url)) {
|
||||||
|
this.store.dispatch(new ReloadDocumentListAction());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,10 @@
|
|||||||
<ng-container *ngFor="let child of actionRef.children; trackBy: trackById">
|
<ng-container *ngFor="let child of actionRef.children; trackBy: trackById">
|
||||||
<ng-container [ngSwitch]="child.type">
|
<ng-container [ngSwitch]="child.type">
|
||||||
<ng-container *ngSwitchCase="'custom'">
|
<ng-container *ngSwitchCase="'custom'">
|
||||||
<adf-dynamic-component [id]="child.component"></adf-dynamic-component>
|
<adf-dynamic-component
|
||||||
|
[id]="child.component"
|
||||||
|
[data]="child.data"
|
||||||
|
></adf-dynamic-component>
|
||||||
</ng-container>
|
</ng-container>
|
||||||
<ng-container *ngSwitchDefault>
|
<ng-container *ngSwitchDefault>
|
||||||
<app-toolbar-menu-item [actionRef]="child"></app-toolbar-menu-item>
|
<app-toolbar-menu-item [actionRef]="child"></app-toolbar-menu-item>
|
||||||
|
@ -111,7 +111,6 @@ export class ContentManagementService {
|
|||||||
node.entry.isFavorite = true;
|
node.entry.isFavorite = true;
|
||||||
});
|
});
|
||||||
this.store.dispatch(new SetSelectedNodesAction(nodes));
|
this.store.dispatch(new SetSelectedNodesAction(nodes));
|
||||||
this.store.dispatch(new ReloadDocumentListAction());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -123,7 +122,6 @@ export class ContentManagementService {
|
|||||||
node.entry.isFavorite = false;
|
node.entry.isFavorite = false;
|
||||||
});
|
});
|
||||||
this.store.dispatch(new SetSelectedNodesAction(nodes));
|
this.store.dispatch(new SetSelectedNodesAction(nodes));
|
||||||
this.store.dispatch(new ReloadDocumentListAction());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -356,6 +356,7 @@
|
|||||||
"comment": "workaround for Recent Files and Search API issue",
|
"comment": "workaround for Recent Files and Search API issue",
|
||||||
"type": "custom",
|
"type": "custom",
|
||||||
"order": 400,
|
"order": 400,
|
||||||
|
"data": "['/favorites', '/favorite/libraries']",
|
||||||
"component": "app.toolbar.toggleFavorite",
|
"component": "app.toolbar.toggleFavorite",
|
||||||
"rules": {
|
"rules": {
|
||||||
"visible": "canToggleFavorite"
|
"visible": "canToggleFavorite"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user