diff --git a/e2e/src/layout/viewerCtxMenu.prod.e2e-spec.js b/e2e/src/layout/viewerCtxMenu.prod.e2e-spec.js index f5f208a3fd4db4d1da08c280f9c02f4fff12f90f..71aceb252fb67f1eaa618ba860ab43dd159a018b 100644 --- a/e2e/src/layout/viewerCtxMenu.prod.e2e-spec.js +++ b/e2e/src/layout/viewerCtxMenu.prod.e2e-spec.js @@ -41,6 +41,16 @@ describe('> viewerCtxMenu', () => { expect(visible).toBeTrue() }) + it('> pos does not change when click inside', async () => { + const { x: xBefore, y: yBefore, height: hBefore } = await iavPage.isAt(`[aria-label="${ARIA_LABELS.CONTEXT_MENU}"]`) + await iavPage.click(`[aria-label="${ARIA_LABELS.SHOW_IN_OTHER_REF_SPACE}"]`) + await iavPage.wait(500) + const { x: xAfter, y: yAfter, height: hAfter } = await iavPage.isAt(`[aria-label="${ARIA_LABELS.CONTEXT_MENU}"]`) + expect(xBefore).toEqual(xAfter) + expect(yBefore).toEqual(yAfter) + expect(hAfter).toBeGreaterThan(hBefore) + }) + it('> disappear again on click of anywhere else', async () => { await iavPage.cursorMoveToAndClick({ position: [10, 10] }) await iavPage.wait(500) diff --git a/e2e/src/util.js b/e2e/src/util.js index 457dfcdd6ab950ed001d732461ed34c6e4682827..d14599598360b9630fe9cf18f12a23c21f44dcc8 100644 --- a/e2e/src/util.js +++ b/e2e/src/util.js @@ -122,6 +122,12 @@ class WdBase{ return isDisplayed } + async isAt(cssSelector){ + if (!cssSelector) throw new Error(`getText needs to define css selector`) + const { x, y, width, height } = await this._browser.findElement( By.css(cssSelector) ).getRect() + return { x, y, width, height } + } + historyBack() { return this._browser.navigate().back() } diff --git a/src/atlasViewer/atlasViewer.component.ts b/src/atlasViewer/atlasViewer.component.ts index b349816e43b06113300323378a3985697ac76207..817f342be4d0fd3d1a418a94d474a853a12dfd2e 100644 --- a/src/atlasViewer/atlasViewer.component.ts +++ b/src/atlasViewer/atlasViewer.component.ts @@ -382,20 +382,28 @@ export class AtlasViewer implements OnDestroy, OnInit, AfterViewInit { ) } - public mouseClickDocument(event) { + public mouseClickDocument(event: MouseEvent) { const dismissRClCtxtMenu = this.rClContextualMenu.isShown const next = () => { if (!this.rClContextualMenu) { return } - this.rClContextualMenu.mousePos = [ - event.clientX, - event.clientY, - ] - - if (dismissRClCtxtMenu) this.rClContextualMenu.hide() - else this.rClContextualMenu.show() + + if (dismissRClCtxtMenu) { + if (this.rClContextualMenu.el.nativeElement.contains(event.target)) { + + } else { + this.rClContextualMenu.hide() + } + } else { + + this.rClContextualMenu.mousePos = [ + event.clientX, + event.clientY, + ] + this.rClContextualMenu.show() + } } this.nehubaClickOverride(next) diff --git a/src/util/directives/FixedMouseContextualContainerDirective.directive.ts b/src/util/directives/FixedMouseContextualContainerDirective.directive.ts index 058a27918cdfd262ad2edfe6fa55325629043c1f..d7fbf0905efa08166e8f864f45cf375a97950102 100644 --- a/src/util/directives/FixedMouseContextualContainerDirective.directive.ts +++ b/src/util/directives/FixedMouseContextualContainerDirective.directive.ts @@ -20,7 +20,7 @@ export class FixedMouseContextualContainerDirective implements AfterContentCheck public onHide: EventEmitter<null> = new EventEmitter() constructor( - private el: ElementRef, + public el: ElementRef, private cdr: ChangeDetectorRef, ) { }