deno.land / x / jotai@v1.8.4 / src / immer / withImmer.ts

نووسراو ببینە
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import { 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])}
jotai

Version Info

Tagged at
2 years ago