UNPKG

jotai

Version:

👻 Next gen state management that will spook you

49 lines (41 loc) • 1.24 kB
'use strict'; 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;