UNPKG

jotai

Version:

👻 Next gen state management that will spook you

38 lines (29 loc) • 957 B
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var jotai = require('jotai'); var O = require('optics-ts'); function focusAtom(baseAtom, callback) { var focus = callback(O.optic()); var derivedAtom = jotai.atom(function (get) { var newValue = getValueUsingOptic(focus, get(baseAtom)); return newValue; }, function (_, set, update) { var newValueProducer = update instanceof Function ? O.modify(focus)(update) : O.set(focus)(update); set(baseAtom, newValueProducer); }); derivedAtom.scope = baseAtom.scope; return derivedAtom; } var getValueUsingOptic = function getValueUsingOptic(focus, bigValue) { if (focus._tag === 'Traversal') { var values = O.collect(focus)(bigValue); return values; } if (focus._tag === 'Prism') { var _value = O.preview(focus)(bigValue); return _value; } var value = O.get(focus)(bigValue); return value; }; exports.focusAtom = focusAtom;