UNPKG

uc-base-libraries

Version:
163 lines 7.08 kB
System.register(["./Tasks"], function (exports_1, context_1) { "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var Tasks, EventHandler, DebouncedEventHandler, AfterStableEventHandler, OneTimeEventHandler; var __moduleName = context_1 && context_1.id; return { setters: [ function (Tasks_1) { Tasks = Tasks_1; } ], execute: function () { EventHandler = class EventHandler { constructor() { this.onTrigger = []; } trigger(data) { this.onTrigger.asQueryable().forEach((fn) => { fn(data); }); } triggerAsync(data) { return __awaiter(this, void 0, void 0, function* () { yield Tasks.delay(1); for (const fn of this.onTrigger) { yield fn(data); } }); } addListener(callback) { const f = (data) => { const p = new Promise((resolve, reject) => { callback(data); resolve(); }); return p; }; this.onTrigger.push(f); } addAsyncListener(callback) { this.onTrigger.push(callback); } onTriggeredAsync() { return __awaiter(this, void 0, void 0, function* () { return this.onOccur(); }); } onOccur() { return __awaiter(this, void 0, void 0, function* () { const p = new Promise((resolve, reject) => { this.addListener((data) => { resolve(data); }); }); return p; }); } }; exports_1("EventHandler", EventHandler); DebouncedEventHandler = class DebouncedEventHandler extends EventHandler { constructor(resetTimeMilliSeconds = 500) { super(); this.resetTimeMilliSeconds = resetTimeMilliSeconds; this.lastTime = null; } triggerAsync(data) { const _super = Object.create(null, { triggerAsync: { get: () => super.triggerAsync } }); return __awaiter(this, void 0, void 0, function* () { if (this.lastTime == null) { this.lastTime = new Date().addDays(-10); } const timeDiff = new Date().getTime() - this.lastTime.getTime(); if (timeDiff > this.resetTimeMilliSeconds) { this.lastTime = new Date(); yield _super.triggerAsync.call(this, data); } }); } trigger(data) { if (this.lastTime == null) { this.lastTime = new Date().addDays(-10); } const timeDiff = new Date().getTime() - this.lastTime.getTime(); if (timeDiff > this.resetTimeMilliSeconds) { this.lastTime = new Date(); super.trigger(data); } } }; exports_1("DebouncedEventHandler", DebouncedEventHandler); AfterStableEventHandler = class AfterStableEventHandler extends EventHandler { constructor(waitTimeMilliSeconds = 500) { super(); this.waitTimeMilliSeconds = waitTimeMilliSeconds; this.timer = null; } throttle() { clearTimeout(this.timer); this.timer = window.setTimeout(() => { super.triggerAsync(this.lastData); }, this.waitTimeMilliSeconds || 500); } triggerAsync(data) { return __awaiter(this, void 0, void 0, function* () { this.lastData = data; this.throttle(); }); } trigger(data) { this.lastData = data; this.throttle(); } }; exports_1("AfterStableEventHandler", AfterStableEventHandler); OneTimeEventHandler = class OneTimeEventHandler extends EventHandler { constructor() { super(); this.hasTriggered = false; this.triggerData = null; } triggerAsync(data) { const _super = Object.create(null, { triggerAsync: { get: () => super.triggerAsync } }); return __awaiter(this, void 0, void 0, function* () { yield _super.triggerAsync.call(this, data); this.triggerData = data; this.hasTriggered = true; }); } trigger(data) { super.trigger(data); this.triggerData = data; this.hasTriggered = true; } addAsyncListener(callback) { super.addAsyncListener(callback); if (this.hasTriggered) { callback(this.triggerData); } } addListener(callback) { super.addListener(callback); if (this.hasTriggered) { callback(this.triggerData); } } }; exports_1("OneTimeEventHandler", OneTimeEventHandler); } }; }); //# sourceMappingURL=EventHandler.js.map