jotai
Version:
👻 Next gen state management that will spook you
49 lines (41 loc) • 1.24 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var immer = require('immer');
var jotai = require('jotai');
var react = require('react');
/* eslint-disable import/named */
function atomWithImmer(initialValue) {
var anAtom = jotai.atom(initialValue, function (get, set, fn) {
return set(anAtom, immer.produce(get(anAtom), function (draft) {
return fn(draft);
}));
});
return anAtom;
}
/* eslint-disable import/named */
function useImmerAtom(anAtom) {
var _useAtom = jotai.useAtom(anAtom),
state = _useAtom[0],
setState = _useAtom[1];
var setStateWithImmer = react.useCallback(function (fn) {
setState(immer.produce(function (draft) {
return fn(draft);
}));
}, [setState]);
return [state, setStateWithImmer];
}
/* eslint-disable import/named */
function withImmer(anAtom) {
var derivedAtom = jotai.atom(function (get) {
return get(anAtom);
}, function (get, set, fn) {
return set(anAtom, immer.produce(get(anAtom), function (draft) {
return fn(draft);
}));
});
derivedAtom.scope = anAtom.scope;
return derivedAtom;
}
exports.atomWithImmer = atomWithImmer;
exports.useImmerAtom = useImmerAtom;
exports.withImmer = withImmer;