import { useCallback } from 'react'; import { produce } from 'immer'; import type { Draft } from 'immer'; import { useSetAtom } from 'jotai/react'; import type { WritableAtom } from 'jotai/vanilla'; type Options = Parameters[1]; export function useSetImmerAtom( anAtom: WritableAtom) => void], Result>, options?: Options, ): (fn: (draft: Draft) => void) => Result; export function useSetImmerAtom( anAtom: WritableAtom Value], Result>, options?: Options, ): (fn: (draft: Draft) => void) => Result; export function useSetImmerAtom( anAtom: WritableAtom Value], Result>, options?: Options, ) { const setState = useSetAtom(anAtom, options); return useCallback( (fn: (draft: Draft) => void) => setState(produce(fn)), [setState], ); }