From 1bb03b9ff1438b64f562a7c0dc1e1d5bee1a267c Mon Sep 17 00:00:00 2001 From: Xiao Gui <xgui3783@gmail.com> Date: Wed, 29 Apr 2020 22:08:08 +0200 Subject: [PATCH] bugfix: regression of ctx menu --- e2e/src/layout/viewerCtxMenu.prod.e2e-spec.js | 10 ++++++++ e2e/src/util.js | 6 +++++ src/atlasViewer/atlasViewer.component.ts | 24 ++++++++++++------- ...eContextualContainerDirective.directive.ts | 2 +- 4 files changed, 33 insertions(+), 9 deletions(-) diff --git a/e2e/src/layout/viewerCtxMenu.prod.e2e-spec.js b/e2e/src/layout/viewerCtxMenu.prod.e2e-spec.js index f5f208a3f..71aceb252 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 457dfcdd6..d14599598 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 b349816e4..817f342be 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 058a27918..d7fbf0905 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, ) { } -- GitLab