Skip to content

Commit 6eac0b0

Browse files
authored
enhance(module:dropdown): reduce debounce time of dropdown (#783)
close #760
1 parent 60cf7a9 commit 6eac0b0

2 files changed

Lines changed: 13 additions & 25 deletions

File tree

rollup.config.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ let globals = {
105105
'rxjs/operators/finally': 'Rx.Observable.prototype',
106106
'rxjs/operators/first': 'Rx.Observable.prototype',
107107
'rxjs/operators/map': 'Rx.Observable.prototype',
108+
'rxjs/operators/mapTo': 'Rx.Observable.prototype',
109+
'rxjs/operators/merge': 'Rx.Observable.prototype',
108110
'rxjs/operators/pluck': 'Rx.Observable.prototype',
109111
'rxjs/operators/share': 'Rx.Observable.prototype',
110112
'rxjs/operators/startWith': 'Rx.Observable.prototype',

src/components/dropdown/nz-dropdown.component.ts

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,12 @@ import {
1515
ViewEncapsulation
1616
} from '@angular/core';
1717
import { Observable } from 'rxjs/Observable';
18-
import { Observer } from 'rxjs/Observer';
1918
import { Subject } from 'rxjs/Subject';
2019
import { Subscription } from 'rxjs/Subscription';
21-
import { merge } from 'rxjs/observable/merge';
20+
import { fromEvent } from 'rxjs/observable/fromEvent';
2221
import { debounceTime } from 'rxjs/operators/debounceTime';
22+
import { mapTo } from 'rxjs/operators/mapTo';
23+
import { merge } from 'rxjs/operators/merge';
2324
import { dropDownAnimation } from '../core/animation/dropdown-animations';
2425
import { DEFAULT_DROPDOWN_POSITIONS, POSITION_MAP } from '../core/overlay/overlay-position-map';
2526
import { NzMenuComponent } from '../menu/nz-menu.component';
@@ -173,7 +174,7 @@ export class NzDropDownComponent implements OnInit, OnDestroy, AfterViewInit {
173174
}
174175

175176
_startSubscribe(observable$: Observable<boolean>): void {
176-
this._subscription = observable$.pipe(debounceTime(300))
177+
this._subscription = observable$.pipe(debounceTime(50))
177178
.subscribe(this._onVisibleChange);
178179
}
179180

@@ -192,32 +193,17 @@ export class NzDropDownComponent implements OnInit, OnDestroy, AfterViewInit {
192193
ngAfterViewInit(): void {
193194
let mouse$: Observable<boolean>;
194195
if (this.nzTrigger === 'hover') {
195-
mouse$ = Observable.create((observer: Observer<boolean>) => {
196-
const disposeMouseEnter = this._renderer.listen(this._nzOrigin.elementRef.nativeElement, 'mouseenter', () => {
197-
observer.next(true);
198-
});
199-
const disposeMouseLeave = this._renderer.listen(this._nzOrigin.elementRef.nativeElement, 'mouseleave', () => {
200-
observer.next(false);
201-
});
202-
return () => {
203-
disposeMouseEnter();
204-
disposeMouseLeave();
205-
};
206-
});
196+
const mouseEnterOrigin$ = fromEvent(this._nzOrigin.elementRef.nativeElement, 'mouseenter').pipe(mapTo(true));
197+
const mouseLeaveOrigin$ = fromEvent(this._nzOrigin.elementRef.nativeElement, 'mouseleave').pipe(mapTo(false));
198+
mouse$ = mouseEnterOrigin$.pipe(merge(mouseLeaveOrigin$));
207199
}
208200
if (this.nzTrigger === 'click') {
209-
mouse$ = Observable.create((observer: Observer<boolean>) => {
210-
const dispose = this._renderer.listen(this._nzOrigin.elementRef.nativeElement, 'click', (e) => {
211-
e.preventDefault();
212-
observer.next(true);
213-
});
214-
return () => dispose();
201+
mouse$ = fromEvent(this._nzOrigin.elementRef.nativeElement, 'click').pipe(mapTo(true));
202+
this._renderer.listen(this._nzOrigin.elementRef.nativeElement, 'click', (e) => {
203+
e.preventDefault();
215204
});
216205
}
217-
const observable$ = merge(
218-
mouse$,
219-
this._visibleChange
220-
);
206+
const observable$ = mouse$.pipe(merge(this._visibleChange));
221207
this._startSubscribe(observable$);
222208
}
223209

0 commit comments

Comments
 (0)