Skip to content

Commit

Permalink
fix(overlay): Fixing overflow bug in overlay
Browse files Browse the repository at this point in the history
  - Now pinning overlay and unpinning (inside target) will properly reopen overlay
  • Loading branch information
kennyamr authored and tomheller committed Dec 20, 2021
1 parent 58dff47 commit 0da13cd
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 24 deletions.
37 changes: 20 additions & 17 deletions libs/barista-components/overlay/src/overlay-trigger.spec.ts
Expand Up @@ -24,8 +24,8 @@ import {
ComponentFixture,
TestBed,
fakeAsync,
flush,
inject,
tick,
} from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { NoopAnimationsModule } from '@angular/platform-browser/animations';
Expand Down Expand Up @@ -81,7 +81,7 @@ describe('DtOverlayTrigger', () => {

dispatchMouseEvent(trigger, 'mouseleave');
fixture.detectChanges();
flush();
tick();

overlay = getContainerElement(overlayContainerElement);
expect(overlay).toBeNull();
Expand All @@ -99,7 +99,7 @@ describe('DtOverlayTrigger', () => {
trigger.getBoundingClientRect().top + offset,
);
fixture.detectChanges();
flush();
tick();

const overlayPane = overlayContainerElement.querySelector(
'.cdk-overlay-pane',
Expand Down Expand Up @@ -135,10 +135,10 @@ describe('DtOverlayTrigger', () => {

dispatchMouseEvent(trigger, 'click');
fixture.detectChanges();
flush();
tick();

dispatchMouseEvent(trigger, 'mouseleave');
flush();
tick();

const overlay = getContainerElement(overlayContainerElement);
expect(overlay).not.toBeNull();
Expand All @@ -151,7 +151,7 @@ describe('DtOverlayTrigger', () => {

dispatchMouseEvent(trigger, 'click');
fixture.detectChanges();
flush();
tick();

expect(fixture.componentInstance.pinned).toBeTruthy();
}));
Expand All @@ -163,14 +163,15 @@ describe('DtOverlayTrigger', () => {

dispatchMouseEvent(trigger, 'click');
fixture.detectChanges();
flush();
tick();

expect(fixture.componentInstance.pinned).toBeTruthy();

dispatchMouseEvent(trigger, 'mouseleave');
dispatchMouseEvent(trigger, 'mouseenter');
dispatchMouseEvent(trigger, 'mousemove');
fixture.detectChanges();
tick();

expect(fixture.componentInstance.pinned).toBeTruthy();
}));
Expand All @@ -182,13 +183,13 @@ describe('DtOverlayTrigger', () => {

dispatchMouseEvent(trigger, 'click');
fixture.detectChanges();
flush();
tick();

expect(fixture.componentInstance.pinned).toBeTruthy();

fixture.componentInstance.showTrigger = false;
fixture.detectChanges();
flush();
tick();

expect(fixture.componentInstance.pinned).toBeFalsy();
}));
Expand All @@ -200,17 +201,19 @@ describe('DtOverlayTrigger', () => {

dispatchMouseEvent(trigger, 'click');
fixture.detectChanges();
flush();
tick();

dispatchMouseEvent(trigger, 'mouseleave');
fixture.detectChanges();
tick();

let overlay = getOverlayPane(overlayContainerElement);
expect(overlay).not.toBeNull();

dispatchMouseEvent(trigger, 'mouseenter');
dispatchMouseEvent(trigger, 'mousemove');
fixture.detectChanges();
flush();
tick();

overlay = getOverlayPane(overlayContainerElement);

Expand All @@ -230,7 +233,7 @@ describe('DtOverlayTrigger', () => {
trigger.getBoundingClientRect().top + offset,
);
fixture.detectChanges();
flush();
tick();

const overlayPane = overlayContainerElement.querySelector(
'.cdk-overlay-pane',
Expand All @@ -256,7 +259,7 @@ describe('DtOverlayTrigger', () => {
trigger.getBoundingClientRect().top + offset,
);
fixture.detectChanges();
flush();
tick();

const overlayPane = overlayContainerElement.querySelector(
'.cdk-overlay-pane',
Expand Down Expand Up @@ -294,7 +297,7 @@ describe('DtOverlayTrigger', () => {

dispatchMouseEvent(trigger, 'click');
fixture.detectChanges();
flush();
tick();

expect(document.activeElement).not.toBe(previouslyFocused);
}));
Expand Down Expand Up @@ -322,7 +325,7 @@ describe('DtOverlayTrigger', () => {
expect(overlay).not.toBeNull();
dispatchKeyboardEvent(trigger, 'keydown', ESCAPE);
fixture.detectChanges();
flush();
tick();
overlay = getContainerElement(overlayContainerElement);

expect(overlay).toBeNull();
Expand All @@ -346,7 +349,7 @@ describe('DtOverlayTrigger', () => {

fixture.componentInstance.showTrigger = false;
fixture.detectChanges();
flush();
tick();

overlay = getContainerElement(overlayContainerElement);
expect(overlay).toBeNull();
Expand All @@ -360,7 +363,7 @@ function initOverlay(
dispatchMouseEvent(trigger, 'mouseenter');
dispatchMouseEvent(trigger, 'mousemove');
fixture.detectChanges();
flush();
tick();
}

function getContainerElement(
Expand Down
15 changes: 8 additions & 7 deletions libs/barista-components/overlay/src/overlay-trigger.ts
Expand Up @@ -28,7 +28,8 @@ import {
Output,
TemplateRef,
} from '@angular/core';
import { Subscription, fromEvent, EMPTY } from 'rxjs';
import { Subscription, fromEvent, EMPTY, merge, of } from 'rxjs';
import { delay } from 'rxjs/operators';

import {
CanDisable,
Expand All @@ -53,7 +54,6 @@ export const _DtOverlayTriggerMixin = mixinTabIndex(
host: {
'(mouseenter)': '_handleMouseEnter($event)',
'(mouseleave)': '_handleMouseLeave($event)',
'(mouseover)': '!disabled && _handleMouseMove($event, $event)',
'(keydown)': '_handleKeydown($event)',
'(click)': '_handleClick()',
class: 'dt-overlay-trigger',
Expand Down Expand Up @@ -134,11 +134,12 @@ export class DtOverlayTrigger<T>
enterEvent.stopPropagation();
this._moveSub.unsubscribe();
this._moveSub = this._ngZone.runOutsideAngular(() =>
fromEvent(this.elementRef.nativeElement, 'mousemove').subscribe(
(ev: MouseEvent) => {
this._handleMouseMove(ev, enterEvent);
},
),
merge(
of(enterEvent).pipe(delay(0)),
fromEvent(this.elementRef.nativeElement, 'mousemove'),
).subscribe((ev: MouseEvent) => {
this._handleMouseMove(ev, enterEvent);
}),
);
}
}
Expand Down

0 comments on commit 0da13cd

Please sign in to comment.