qcobjects
Version:
QCObjects is an Open-source framework that empowers full-stack developers to make micro-services and micro-frontends into an N-Tier architecture.
66 lines (57 loc) • 1.82 kB
text/typescript
import { InheritClass } from "./InheritClass";
import { logger } from "./Logger";
import { Package } from "./Package";
export class Toggle extends InheritClass {
_toggle = false;
_inverse = true;
_positive:Function|null = null;
_negative:Function|null = null;
_dispatched:Function|null = null;
_args = {};
constructor(positive: Function, negative: Function, args: Array<any>) {
super({positive, negative, args});
this._new_({positive, negative, args});
}
changeToggle():void {
this._toggle = !(this._toggle);
}
_new_({
positive,
negative,
args
}:{positive: Function, negative: Function, args: Array<any>}):void {
this._positive = positive;
this._negative = negative;
this._args = args;
}
fire():Promise<Toggle> {
const toggle = this;
var _promise = new Promise<Toggle>(function (resolve, reject) {
if (typeof toggle._positive === "function" && typeof toggle._negative === "function") {
if (toggle._inverse) {
toggle._dispatched = (toggle._toggle) ? (toggle._negative.bind(toggle)) : (toggle._positive.bind(toggle));
} else {
toggle._dispatched = (toggle._toggle) ? (toggle._positive.bind(toggle)) : (toggle._negative.bind(toggle));
}
toggle._dispatched?.call(toggle, toggle._args);
resolve.call(_promise, toggle);
} else {
logger.debug("Toggle functions are not declared");
reject.call(_promise, toggle as Toggle);
}
return toggle;
}).then(function (toggle:Toggle) {
toggle.changeToggle();
return toggle;
}).catch(function (e) {
logger.debug(e.toString());
return toggle;
}).finally(()=> {
return toggle;
});
return _promise;
}
}
Package("com.qcobjects.tools.essentials", [
Toggle
]);