UNPKG

use-immer

Version:
1 lines 2.56 kB
{"version":3,"file":"use-immer.modern.mjs","sources":["../src/index.ts"],"sourcesContent":["import { produce, Draft, nothing, freeze } from \"immer\";\nimport { useState, useReducer, useCallback, useMemo, Dispatch } from \"react\";\n\nexport type DraftFunction<S> = (draft: Draft<S>) => void;\nexport type Updater<S> = (arg: S | DraftFunction<S>) => void;\nexport type ImmerHook<S> = [S, Updater<S>];\n\nexport function useImmer<S = any>(initialValue: S | (() => S)): ImmerHook<S>;\n\nexport function useImmer(initialValue: any) {\n const [val, updateValue] = useState(() =>\n freeze(\n typeof initialValue === \"function\" ? initialValue() : initialValue,\n true\n )\n );\n return [\n val,\n useCallback((updater) => {\n if (typeof updater === \"function\") updateValue(produce(updater));\n else updateValue(freeze(updater));\n }, []),\n ];\n}\n\n// Provides different overloads of `useImmerReducer` similar to `useReducer` from `@types/react`.\n\nexport type ImmerReducer<S, A> = (\n draftState: Draft<S>,\n action: A\n) => void | (S extends undefined ? typeof nothing : S);\n\n/**\n * @deprecated Use `ImmerReducer` instead since there is already a `Reducer` type in `@types/react`.\n */\nexport type Reducer<S = any, A = any> = ImmerReducer<S, A>;\n\nexport function useImmerReducer<S, A, I>(\n reducer: ImmerReducer<S, A>,\n initializerArg: S & I,\n initializer: (arg: S & I) => S\n): [S, Dispatch<A>];\n\nexport function useImmerReducer<S, A, I>(\n reducer: ImmerReducer<S, A>,\n initializerArg: I,\n initializer: (arg: I) => S\n): [S, Dispatch<A>];\n\nexport function useImmerReducer<S, A>(\n reducer: ImmerReducer<S, A>,\n initialState: S,\n initializer?: undefined\n): [S, Dispatch<A>];\n\nexport function useImmerReducer<S, A, I>(\n reducer: ImmerReducer<S, A>,\n initializerArg: S & I,\n initializer?: (arg: S & I) => S\n) {\n const cachedReducer = useMemo(() => produce(reducer), [reducer]);\n return useReducer(cachedReducer, initializerArg as any, initializer as any);\n}\n"],"names":["useImmer","initialValue","val","updateValue","useState","freeze","useCallback","updater","produce","useImmerReducer","reducer","initializerArg","initializer","cachedReducer","useMemo","useReducer"],"mappings":"2HASgB,SAAAA,EAASC,GACvB,MAAOC,EAAKC,GAAeC,EAAS,IAClCC,EAC0B,mBAAjBJ,EAA8BA,IAAiBA,GACtD,IAGJ,MAAO,CACLC,EACAI,EAAaC,IACwBJ,EAAZ,mBAAZI,EAAoCC,EAAQD,GACtCF,EAAOE,GAAQ,EAC/B,IAEP,CAgCgB,SAAAE,EACdC,EACAC,EACAC,GAEA,MAAMC,EAAgBC,EAAQ,IAAMN,EAAQE,GAAU,CAACA,IACvD,OAAOK,EAAWF,EAAeF,EAAuBC,EAC1D"}