From 7c79d1d03d0c106edfb8d52f852c71642bf2aa2b Mon Sep 17 00:00:00 2001 From: Sergey Andrievskiy Date: Thu, 26 Dec 2019 12:24:06 +0300 Subject: [PATCH] fix(trigger): prevent stream destroy on mouse leave (#2141) --- .../components/cdk/overlay/overlay-trigger.ts | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/framework/theme/components/cdk/overlay/overlay-trigger.ts b/src/framework/theme/components/cdk/overlay/overlay-trigger.ts index 27450030f7..4dac80b9fa 100644 --- a/src/framework/theme/components/cdk/overlay/overlay-trigger.ts +++ b/src/framework/theme/components/cdk/overlay/overlay-trigger.ts @@ -102,14 +102,13 @@ export class NbHoverTriggerStrategy extends NbTriggerStrategyBase { show$: Observable = observableFromEvent(this.host, 'mouseenter') .pipe( filter(() => !this.container()), + // this `delay & takeUntil & repeat` operators combination is a synonym for `conditional debounce` + // meaning that if one event occurs in some time after the initial one we won't react to it delay(100), + // tslint:disable-next-line:rxjs-no-unsafe-takeuntil + takeUntil(observableFromEvent(this.host, 'mouseleave')), repeat(), - takeUntil( - observableMerge( - observableFromEvent(this.host, 'mouseleave'), - this.destroyed$, - ), - ), + takeUntil(this.destroyed$), ); hide$: Observable = observableFromEvent(this.host, 'mouseleave') @@ -133,16 +132,13 @@ export class NbHoverTriggerStrategy extends NbTriggerStrategyBase { export class NbHintTriggerStrategy extends NbTriggerStrategyBase { show$: Observable = observableFromEvent(this.host, 'mouseenter') .pipe( - delay(100), // this `delay & takeUntil & repeat` operators combination is a synonym for `conditional debounce` // meaning that if one event occurs in some time after the initial one we won't react to it + delay(100), + // tslint:disable-next-line:rxjs-no-unsafe-takeuntil + takeUntil(observableFromEvent(this.host, 'mouseleave')), repeat(), - takeUntil( - observableMerge( - observableFromEvent(this.host, 'mouseleave'), - this.destroyed$, - ), - ), + takeUntil(this.destroyed$), ); hide$: Observable = observableFromEvent(this.host, 'mouseleave')