mobx-autoform
Version:
Ridiculously simple form state management with mobx
37 lines (36 loc) • 833 B
JavaScript
import _ from "lodash/fp.js";
import F from "futil";
import * as m from "mobx";
let observable = (x) => {
try {
return m.observable(x, {}, { proxy: false });
} catch (e) {
return m.observable(x);
}
};
let toJS = (x) => _.cloneDeepWith((value) => {
if (m.isObservable(value))
return m.toJS(value);
}, x);
let get = (path, obj) => _.reduce((v, k) => m.isObservable(v) ? m.get(v, k) : _.get(k, v), obj, path);
let set = (path, v, obj) => {
let n = F.reduceIndexed(
(v2, k, i) => {
if (!m.isObservable(_.get(k, v2))) {
let isNextKeyNumber = !_.isNaN(parseInt(_.get(i + 1, path)));
m.set(v2, k, isNextKeyNumber ? [] : {});
}
return v2[k];
},
obj,
_.dropRight(1, path)
);
m.set(n, _.last(path), v);
return obj;
};
export {
get,
observable,
set,
toJS
};