mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-05-12 17:04:46 +00:00
[ACA-2873] Move acaContextActions to aca-shared library (#1301)
* move to aca-shared library * export directive * context menu action * import directive from shared library * context menu effect * test * update docs * fix production code * fix imports * fix licence header * fix licence headers
This commit is contained in:
parent
b09c93b103
commit
8b7c7b5ed4
@ -125,4 +125,5 @@ Below is the list of public actions types you can use in the plugin definitions
|
|||||||
| 1.8.0 | CLOSE_PREVIEW | n/a | Closes the viewer ( preview of the item ) |
|
| 1.8.0 | CLOSE_PREVIEW | n/a | Closes the viewer ( preview of the item ) |
|
||||||
| 1.9.0 | RESET_SELECTION | n/a | Resets active document list selection |
|
| 1.9.0 | RESET_SELECTION | n/a | Resets active document list selection |
|
||||||
| 1.10.0 | FILE_FROM_TEMPLATE | n/a | Invoke dialogs flow for creating a file from selected template|
|
| 1.10.0 | FILE_FROM_TEMPLATE | n/a | Invoke dialogs flow for creating a file from selected template|
|
||||||
| 1.10.0 | CREATE_FILE_FROM_TEMPLATE | Node | Copy selected tetmplate into current folder |
|
| 1.10.0 | CREATE_FILE_FROM_TEMPLATE | Node | Copy selected template into current folder |
|
||||||
|
| 1.10.0 | CONTEXT_MENU | MouseEvent | Invoke context menu for [DocumentListComponent](https://www.alfresco.com/abn/adf/docs/content-services/components/document-list.component) |
|
||||||
|
@ -23,24 +23,25 @@
|
|||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { ContextActionsDirective } from './context-menu.directive';
|
import { ContextActionsDirective } from './contextmenu.directive';
|
||||||
|
import { ContextMenu } from '@alfresco/aca-shared/store';
|
||||||
import { fakeAsync, tick } from '@angular/core/testing';
|
import { fakeAsync, tick } from '@angular/core/testing';
|
||||||
|
|
||||||
describe('ContextActionsDirective', () => {
|
describe('ContextActionsDirective', () => {
|
||||||
let directive;
|
let directive;
|
||||||
const contextMenuServiceMock = <any>{
|
const storeMock = <any>{
|
||||||
open: jasmine.createSpy('open')
|
dispatch: jasmine.createSpy('dispatch')
|
||||||
};
|
};
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
directive = new ContextActionsDirective(contextMenuServiceMock);
|
directive = new ContextActionsDirective(storeMock);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should not render context menu when `enabled` property is false', () => {
|
it('should not render context menu when `enabled` property is false', () => {
|
||||||
directive.enabled = false;
|
directive.enabled = false;
|
||||||
directive.onContextMenuEvent(new MouseEvent('contextmenu'));
|
directive.onContextMenuEvent(new MouseEvent('contextmenu'));
|
||||||
|
|
||||||
expect(contextMenuServiceMock.open).not.toHaveBeenCalled();
|
expect(storeMock.dispatch).not.toHaveBeenCalled();
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should call service to render context menu', fakeAsync(() => {
|
it('should call service to render context menu', fakeAsync(() => {
|
||||||
@ -51,13 +52,16 @@ describe('ContextActionsDirective', () => {
|
|||||||
const fragment = document.createDocumentFragment();
|
const fragment = document.createDocumentFragment();
|
||||||
fragment.appendChild(el);
|
fragment.appendChild(el);
|
||||||
const target = fragment.querySelector('div');
|
const target = fragment.querySelector('div');
|
||||||
|
const mouseEventMock = <any>{ preventDefault: () => {}, target };
|
||||||
|
|
||||||
directive.ngOnInit();
|
directive.ngOnInit();
|
||||||
|
|
||||||
directive.onContextMenuEvent(<any>{ preventDefault: () => {}, target });
|
directive.onContextMenuEvent(mouseEventMock);
|
||||||
|
|
||||||
tick(500);
|
tick(500);
|
||||||
|
|
||||||
expect(contextMenuServiceMock.open).toHaveBeenCalled();
|
expect(storeMock.dispatch).toHaveBeenCalledWith(
|
||||||
|
new ContextMenu(mouseEventMock)
|
||||||
|
);
|
||||||
}));
|
}));
|
||||||
});
|
});
|
@ -30,18 +30,18 @@ import {
|
|||||||
OnInit,
|
OnInit,
|
||||||
OnDestroy
|
OnDestroy
|
||||||
} from '@angular/core';
|
} from '@angular/core';
|
||||||
import { ContextMenuOverlayRef } from './context-menu-overlay';
|
import { debounceTime, takeUntil } from 'rxjs/operators';
|
||||||
import { ContextMenuService } from './context-menu.service';
|
import { Subject } from 'rxjs';
|
||||||
import { debounceTime } from 'rxjs/operators';
|
import { Store } from '@ngrx/store';
|
||||||
import { Subject, fromEvent, Subscription } from 'rxjs';
|
import { AppStore, ContextMenu } from '@alfresco/aca-shared/store';
|
||||||
|
|
||||||
@Directive({
|
@Directive({
|
||||||
selector: '[acaContextActions]'
|
selector: '[acaContextActions]',
|
||||||
|
exportAs: 'acaContextActions'
|
||||||
})
|
})
|
||||||
export class ContextActionsDirective implements OnInit, OnDestroy {
|
export class ContextActionsDirective implements OnInit, OnDestroy {
|
||||||
private execute$: Subject<any> = new Subject();
|
private execute$: Subject<any> = new Subject();
|
||||||
private subscriptions: Subscription[] = [];
|
onDestroy$: Subject<boolean> = new Subject<boolean>();
|
||||||
private overlayRef: ContextMenuOverlayRef = null;
|
|
||||||
|
|
||||||
// tslint:disable-next-line:no-input-rename
|
// tslint:disable-next-line:no-input-rename
|
||||||
@Input('acaContextEnable')
|
@Input('acaContextEnable')
|
||||||
@ -61,42 +61,30 @@ export class ContextActionsDirective implements OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor(private contextMenuService: ContextMenuService) {}
|
constructor(private store: Store<AppStore>) {}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.subscriptions.push(
|
this.execute$
|
||||||
fromEvent(document.body, 'contextmenu').subscribe(() => {
|
.pipe(
|
||||||
if (this.overlayRef) {
|
debounceTime(300),
|
||||||
this.overlayRef.close();
|
takeUntil(this.onDestroy$)
|
||||||
}
|
)
|
||||||
}),
|
.subscribe((event: MouseEvent) => {
|
||||||
|
this.store.dispatch(new ContextMenu(event));
|
||||||
this.execute$.pipe(debounceTime(300)).subscribe((event: MouseEvent) => {
|
});
|
||||||
this.render(event);
|
|
||||||
})
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
this.subscriptions.forEach(subscription => subscription.unsubscribe());
|
this.onDestroy$.next(true);
|
||||||
this.subscriptions = [];
|
this.onDestroy$.complete();
|
||||||
this.execute$ = null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
execute(event: MouseEvent, target: Element) {
|
execute(event: MouseEvent, target: Element) {
|
||||||
if (!this.isSelected(target)) {
|
if (!this.isSelected(target)) {
|
||||||
target.dispatchEvent(new MouseEvent('click'));
|
target.dispatchEvent(new MouseEvent('click'));
|
||||||
}
|
}
|
||||||
this.execute$.next(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
private render(event: MouseEvent) {
|
this.execute$.next(event);
|
||||||
this.overlayRef = this.contextMenuService.open({
|
|
||||||
source: event,
|
|
||||||
hasBackdrop: false,
|
|
||||||
backdropClass: 'cdk-overlay-transparent-backdrop',
|
|
||||||
panelClass: 'cdk-overlay-pane'
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private getTarget(event: MouseEvent): Element {
|
private getTarget(event: MouseEvent): Element {
|
@ -0,0 +1,33 @@
|
|||||||
|
/*!
|
||||||
|
* @license
|
||||||
|
* Alfresco Example Content Application
|
||||||
|
*
|
||||||
|
* Copyright (C) 2005 - 2020 Alfresco Software Limited
|
||||||
|
*
|
||||||
|
* This file is part of the Alfresco Example Content Application.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { NgModule } from '@angular/core';
|
||||||
|
import { ContextActionsDirective } from './contextmenu.directive';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [ContextActionsDirective],
|
||||||
|
exports: [ContextActionsDirective]
|
||||||
|
})
|
||||||
|
export class ContextActionsModule {}
|
@ -27,8 +27,11 @@ import { NgModule, ModuleWithProviders } from '@angular/core';
|
|||||||
import { ContentApiService } from './services/content-api.service';
|
import { ContentApiService } from './services/content-api.service';
|
||||||
import { NodePermissionService } from './services/node-permission.service';
|
import { NodePermissionService } from './services/node-permission.service';
|
||||||
import { AppService } from './services/app.service';
|
import { AppService } from './services/app.service';
|
||||||
|
import { ContextActionsModule } from './directives/contextmenu/contextmenu.module';
|
||||||
@NgModule({})
|
@NgModule({
|
||||||
|
imports: [ContextActionsModule],
|
||||||
|
exports: [ContextActionsModule]
|
||||||
|
})
|
||||||
export class SharedModule {
|
export class SharedModule {
|
||||||
static forRoot(): ModuleWithProviders {
|
static forRoot(): ModuleWithProviders {
|
||||||
return {
|
return {
|
||||||
|
@ -39,4 +39,7 @@ export * from './lib/services/node-permission.service';
|
|||||||
export * from './lib/components/generic-error/generic-error.component';
|
export * from './lib/components/generic-error/generic-error.component';
|
||||||
export * from './lib/components/generic-error/generic-error.module';
|
export * from './lib/components/generic-error/generic-error.module';
|
||||||
|
|
||||||
|
export * from './lib/directives/contextmenu/contextmenu.directive';
|
||||||
|
export * from './lib/directives/contextmenu/contextmenu.module';
|
||||||
|
|
||||||
export * from './lib/shared.module';
|
export * from './lib/shared.module';
|
||||||
|
36
projects/aca-shared/store/src/actions/contextmenu.actions.ts
Normal file
36
projects/aca-shared/store/src/actions/contextmenu.actions.ts
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*!
|
||||||
|
* @license
|
||||||
|
* Alfresco Example Content Application
|
||||||
|
*
|
||||||
|
* Copyright (C) 2005 - 2020 Alfresco Software Limited
|
||||||
|
*
|
||||||
|
* This file is part of the Alfresco Example Content Application.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Action } from '@ngrx/store';
|
||||||
|
|
||||||
|
export enum ContextMenuActionTypes {
|
||||||
|
ContextMenu = 'CONTEXT_MENU'
|
||||||
|
}
|
||||||
|
|
||||||
|
export class ContextMenu implements Action {
|
||||||
|
readonly type = ContextMenuActionTypes.ContextMenu;
|
||||||
|
|
||||||
|
constructor(public event: MouseEvent) {}
|
||||||
|
}
|
@ -33,6 +33,7 @@ export * from './actions/upload.actions';
|
|||||||
export * from './actions/viewer.actions';
|
export * from './actions/viewer.actions';
|
||||||
export * from './actions/metadata-aspect.actions';
|
export * from './actions/metadata-aspect.actions';
|
||||||
export * from './actions/template.actions';
|
export * from './actions/template.actions';
|
||||||
|
export * from './actions/contextmenu.actions';
|
||||||
|
|
||||||
export * from './effects/dialog.effects';
|
export * from './effects/dialog.effects';
|
||||||
export * from './effects/router.effects';
|
export * from './effects/router.effects';
|
||||||
|
@ -35,7 +35,7 @@ import { AppCommonModule } from '../common/common.module';
|
|||||||
import { ContextMenuItemComponent } from './context-menu-item.component';
|
import { ContextMenuItemComponent } from './context-menu-item.component';
|
||||||
import { OutsideEventDirective } from './context-menu-outside-event.directive';
|
import { OutsideEventDirective } from './context-menu-outside-event.directive';
|
||||||
import { ContextMenuComponent } from './context-menu.component';
|
import { ContextMenuComponent } from './context-menu.component';
|
||||||
import { ContextActionsDirective } from './context-menu.directive';
|
import { ContextActionsModule } from '@alfresco/aca-shared';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
@ -46,19 +46,19 @@ import { ContextActionsDirective } from './context-menu.directive';
|
|||||||
CoreExtensionsModule.forChild(),
|
CoreExtensionsModule.forChild(),
|
||||||
CoreModule.forChild(),
|
CoreModule.forChild(),
|
||||||
AppCommonModule,
|
AppCommonModule,
|
||||||
ExtensionsModule
|
ExtensionsModule,
|
||||||
|
ContextActionsModule
|
||||||
],
|
],
|
||||||
declarations: [
|
declarations: [
|
||||||
ContextActionsDirective,
|
|
||||||
ContextMenuComponent,
|
ContextMenuComponent,
|
||||||
ContextMenuItemComponent,
|
ContextMenuItemComponent,
|
||||||
OutsideEventDirective
|
OutsideEventDirective
|
||||||
],
|
],
|
||||||
exports: [
|
exports: [
|
||||||
OutsideEventDirective,
|
OutsideEventDirective,
|
||||||
ContextActionsDirective,
|
|
||||||
ContextMenuComponent,
|
ContextMenuComponent,
|
||||||
ContextMenuItemComponent
|
ContextMenuItemComponent,
|
||||||
|
ContextActionsModule
|
||||||
],
|
],
|
||||||
entryComponents: [ContextMenuComponent]
|
entryComponents: [ContextMenuComponent]
|
||||||
})
|
})
|
||||||
|
@ -40,7 +40,8 @@ import {
|
|||||||
LibraryEffects,
|
LibraryEffects,
|
||||||
UploadEffects,
|
UploadEffects,
|
||||||
FavoriteEffects,
|
FavoriteEffects,
|
||||||
TemplateEffects
|
TemplateEffects,
|
||||||
|
ContextMenuEffects
|
||||||
} from './effects';
|
} from './effects';
|
||||||
import { INITIAL_STATE } from './initial-state';
|
import { INITIAL_STATE } from './initial-state';
|
||||||
|
|
||||||
@ -58,7 +59,8 @@ import { INITIAL_STATE } from './initial-state';
|
|||||||
LibraryEffects,
|
LibraryEffects,
|
||||||
UploadEffects,
|
UploadEffects,
|
||||||
FavoriteEffects,
|
FavoriteEffects,
|
||||||
TemplateEffects
|
TemplateEffects,
|
||||||
|
ContextMenuEffects
|
||||||
]),
|
]),
|
||||||
!environment.production
|
!environment.production
|
||||||
? StoreDevtoolsModule.instrument({ maxAge: 25 })
|
? StoreDevtoolsModule.instrument({ maxAge: 25 })
|
||||||
|
@ -33,3 +33,4 @@ export * from './effects/library.effects';
|
|||||||
export * from './effects/upload.effects';
|
export * from './effects/upload.effects';
|
||||||
export * from './effects/upload.effects';
|
export * from './effects/upload.effects';
|
||||||
export * from './effects/template.effects';
|
export * from './effects/template.effects';
|
||||||
|
export * from './effects/contextmenu.effects';
|
||||||
|
65
src/app/store/effects/contextmenu.effects.spec.ts
Normal file
65
src/app/store/effects/contextmenu.effects.spec.ts
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
/*!
|
||||||
|
* @license
|
||||||
|
* Alfresco Example Content Application
|
||||||
|
*
|
||||||
|
* Copyright (C) 2005 - 2020 Alfresco Software Limited
|
||||||
|
*
|
||||||
|
* This file is part of the Alfresco Example Content Application.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { TestBed } from '@angular/core/testing';
|
||||||
|
import { AppTestingModule } from '../../testing/app-testing.module';
|
||||||
|
import { ContextMenuEffects } from './contextmenu.effects';
|
||||||
|
import { EffectsModule } from '@ngrx/effects';
|
||||||
|
import { Store } from '@ngrx/store';
|
||||||
|
import { ContextMenu } from '@alfresco/aca-shared/store';
|
||||||
|
import { ContextMenuService } from '../../components/context-menu/context-menu.service';
|
||||||
|
|
||||||
|
describe('ContextMenuEffects', () => {
|
||||||
|
let store: Store<any>;
|
||||||
|
let contextMenuService: ContextMenuService;
|
||||||
|
const overlayRefMock = {
|
||||||
|
close: jasmine.createSpy('close')
|
||||||
|
};
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
TestBed.configureTestingModule({
|
||||||
|
imports: [AppTestingModule, EffectsModule.forRoot([ContextMenuEffects])],
|
||||||
|
providers: [ContextMenuService]
|
||||||
|
});
|
||||||
|
|
||||||
|
store = TestBed.get(Store);
|
||||||
|
contextMenuService = TestBed.get(ContextMenuService);
|
||||||
|
|
||||||
|
spyOn(contextMenuService, 'open').and.returnValue(overlayRefMock);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should open dialog', () => {
|
||||||
|
store.dispatch(new ContextMenu(new MouseEvent('click')));
|
||||||
|
expect(contextMenuService.open).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should close dialog reference if previously was opened', () => {
|
||||||
|
store.dispatch(new ContextMenu(new MouseEvent('click')));
|
||||||
|
expect(contextMenuService.open).toHaveBeenCalled();
|
||||||
|
|
||||||
|
store.dispatch(new ContextMenu(new MouseEvent('click')));
|
||||||
|
expect(overlayRefMock.close).toHaveBeenCalled();
|
||||||
|
});
|
||||||
|
});
|
61
src/app/store/effects/contextmenu.effects.ts
Normal file
61
src/app/store/effects/contextmenu.effects.ts
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/*!
|
||||||
|
* @license
|
||||||
|
* Alfresco Example Content Application
|
||||||
|
*
|
||||||
|
* Copyright (C) 2005 - 2020 Alfresco Software Limited
|
||||||
|
*
|
||||||
|
* This file is part of the Alfresco Example Content Application.
|
||||||
|
* If the software was purchased under a paid Alfresco license, the terms of
|
||||||
|
* the paid license agreement will prevail. Otherwise, the software is
|
||||||
|
* provided under the following open source license terms:
|
||||||
|
*
|
||||||
|
* The Alfresco Example Content Application is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* The Alfresco Example Content Application is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import {
|
||||||
|
ContextMenuActionTypes,
|
||||||
|
ContextMenu
|
||||||
|
} from '@alfresco/aca-shared/store';
|
||||||
|
import { Injectable } from '@angular/core';
|
||||||
|
import { Actions, Effect, ofType } from '@ngrx/effects';
|
||||||
|
import { map } from 'rxjs/operators';
|
||||||
|
import { ContextMenuOverlayRef } from '../../components/context-menu/context-menu-overlay';
|
||||||
|
import { ContextMenuService } from '../../components/context-menu/context-menu.service';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class ContextMenuEffects {
|
||||||
|
private overlayRef: ContextMenuOverlayRef = null;
|
||||||
|
|
||||||
|
constructor(
|
||||||
|
private contextMenuService: ContextMenuService,
|
||||||
|
private actions$: Actions
|
||||||
|
) {}
|
||||||
|
|
||||||
|
@Effect({ dispatch: false })
|
||||||
|
contextMenu$ = this.actions$.pipe(
|
||||||
|
ofType<ContextMenu>(ContextMenuActionTypes.ContextMenu),
|
||||||
|
map(action => {
|
||||||
|
if (this.overlayRef) {
|
||||||
|
this.overlayRef.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
this.overlayRef = this.contextMenuService.open({
|
||||||
|
source: action.event,
|
||||||
|
hasBackdrop: false,
|
||||||
|
backdropClass: 'cdk-overlay-transparent-backdrop',
|
||||||
|
panelClass: 'cdk-overlay-pane'
|
||||||
|
});
|
||||||
|
})
|
||||||
|
);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user