UNPKG

mobx-autoform

Version:

Ridiculously simple form state management with mobx

37 lines (36 loc) 833 B
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 };