jotai
Version:
👻 Next gen state management that will spook you
38 lines (29 loc) • 957 B
JavaScript
;
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;