diff --git a/projects/aca-shared/src/lib/directives/contextmenu/contextmenu.directive.spec.ts b/projects/aca-shared/src/lib/directives/contextmenu/contextmenu.directive.spec.ts index 96ef4be3d..0fef205fc 100644 --- a/projects/aca-shared/src/lib/directives/contextmenu/contextmenu.directive.spec.ts +++ b/projects/aca-shared/src/lib/directives/contextmenu/contextmenu.directive.spec.ts @@ -63,4 +63,23 @@ describe('ContextActionsDirective', () => { expect(storeMock.dispatch).toHaveBeenCalledWith(new ContextMenu(mouseEventMock)); })); + + it('should not call service to render context menu if the datatable is empty', fakeAsync(() => { + const el = document.createElement('div'); + el.className = 'adf-no-content-container'; + + const fragment = document.createDocumentFragment(); + fragment.appendChild(el); + + const target = fragment.querySelector('div'); + const mouseEventMock: any = { preventDefault: () => {}, target }; + + directive.ngOnInit(); + + directive.onContextMenuEvent(mouseEventMock); + + tick(500); + + expect(storeMock.dispatch).not.toHaveBeenCalled(); + })); }); diff --git a/projects/aca-shared/src/lib/directives/contextmenu/contextmenu.directive.ts b/projects/aca-shared/src/lib/directives/contextmenu/contextmenu.directive.ts index 57b414616..7cabfeb0c 100644 --- a/projects/aca-shared/src/lib/directives/contextmenu/contextmenu.directive.ts +++ b/projects/aca-shared/src/lib/directives/contextmenu/contextmenu.directive.ts @@ -73,6 +73,10 @@ export class ContextActionsDirective implements OnInit, OnDestroy { target.dispatchEvent(new MouseEvent('click')); } + if (this.isEmptyTable(target)) { + return null; + } + this.execute$.next(event); } @@ -89,6 +93,10 @@ export class ContextActionsDirective implements OnInit, OnDestroy { return this.findAncestor(target, 'adf-datatable-row').classList.contains('adf-is-selected'); } + private isEmptyTable(target: Element): boolean { + return this.findAncestor(target, 'adf-datatable-cell').classList.contains('adf-no-content-container'); + } + private findAncestor(el: Element, className: string): Element { if (el.classList.contains(className)) { return el;