uc-base-libraries
Version:
Typescript libraries for UC projects
163 lines • 7.08 kB
JavaScript
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