verstak
Version:
Verstak - Front-End Library
27 lines (26 loc) • 866 B
JavaScript
import { RxObject, Ref, runTransactional, Isolation } from "reactronic";
export function rxModel(modelProps) {
return runTransactional({ isolation: Isolation.disjoinFromOuterTransaction }, () => new RxComposition(modelProps));
}
class RxComposition extends RxObject {
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;
}
}
}