verstak
Version:
Verstak - Front-End Library
27 lines (26 loc) • 900 B
JavaScript
import { ObservableObject, Ref, runAtomically, Isolation } from "reactronic";
export function triggeringModel(modelProps) {
return runAtomically({ isolation: Isolation.disjoinFromOuterTransaction }, () => new TriggeringComposition(modelProps));
}
class TriggeringComposition extends ObservableObject {
constructor(composition) {
super();
convertValuesToFieldsAndRefsToGetSet(this, composition);
}
}
function convertValuesToFieldsAndRefsToGetSet(target, composition) {
for (const key in composition) {
const x = composition[key];
if (x instanceof Ref) {
Object.defineProperty(target, key, {
get() { return x.variable; },
set(v) { x.variable = v; return true; },
enumerable: true,
});
}
else {
const t = target;
t[key] = x;
}
}
}