UNPKG

verstak

Version:
27 lines (26 loc) 866 B
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; } } }