mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-01-28 22:28:14 +00:00
56 lines
1.2 KiB
TypeScript
56 lines
1.2 KiB
TypeScript
import { ParentalNode, DropLocation, isLocationChildrenDetail, LocateEvent } from '@alilc/lowcode-designer';
|
|
|
|
/**
|
|
* 停留检查计时器
|
|
*/
|
|
export default class DwellTimer {
|
|
private timer: number | undefined;
|
|
|
|
private previous?: ParentalNode;
|
|
|
|
private event?: LocateEvent;
|
|
|
|
private decide: (node: ParentalNode, event: LocateEvent) => void;
|
|
|
|
private timeout = 500;
|
|
|
|
constructor(decide: (node: ParentalNode, event: LocateEvent) => void, timeout = 500) {
|
|
this.decide = decide;
|
|
this.timeout = timeout;
|
|
}
|
|
|
|
focus(node: ParentalNode, event: LocateEvent) {
|
|
this.event = event;
|
|
if (this.previous === node) {
|
|
return;
|
|
}
|
|
this.reset();
|
|
this.previous = node;
|
|
this.timer = setTimeout(() => {
|
|
this.previous && this.decide(this.previous, this.event!);
|
|
this.reset();
|
|
}, this.timeout) as any;
|
|
}
|
|
|
|
tryFocus(loc?: DropLocation | null) {
|
|
if (!loc || !isLocationChildrenDetail(loc.detail)) {
|
|
this.reset();
|
|
return;
|
|
}
|
|
if (loc.detail.focus?.type === 'node') {
|
|
this.focus(loc.detail.focus.node, loc.event);
|
|
} else {
|
|
this.reset();
|
|
}
|
|
}
|
|
|
|
reset() {
|
|
if (this.timer) {
|
|
clearTimeout(this.timer);
|
|
this.timer = undefined;
|
|
}
|
|
|
|
this.previous = undefined;
|
|
}
|
|
}
|