deno.land / x / jotai@v1.8.4 / src / immer / withImmer.ts
1234567891011121314151617181920212223242526272829303132333435import { produce } from 'immer'import type { Draft } from 'immer'import { atom } from 'jotai'import type { PrimitiveAtom, WritableAtom } from 'jotai'import { createMemoizeAtom } from '../utils/weakCache'
const memoizeAtom = createMemoizeAtom()
export function withImmer<Value>( anAtom: PrimitiveAtom<Value>): WritableAtom<Value, Value | ((draft: Draft<Value>) => void)>
export function withImmer<Value>( anAtom: WritableAtom<Value, Value>): WritableAtom<Value, Value | ((draft: Draft<Value>) => void)>
export function withImmer<Value>(anAtom: WritableAtom<Value, Value>) { return memoizeAtom(() => { const derivedAtom = atom( (get) => get(anAtom), (get, set, fn: Value | ((draft: Draft<Value>) => void)) => set( anAtom, produce( get(anAtom), typeof fn === 'function' ? (fn as (draft: Draft<Value>) => void) : () => fn ) ) ) return derivedAtom }, [anAtom])}
Version Info