diff --git a/src/stores/schemes.ts b/src/stores/schemes.ts index 1967371..4a47861 100644 --- a/src/stores/schemes.ts +++ b/src/stores/schemes.ts @@ -1,7 +1,7 @@ import dayjs from 'dayjs'; import { useAtomValue, useSetAtom } from 'jotai'; import { atomWithStorage } from 'jotai/utils'; -import { isEqual } from 'lodash-es'; +import { isEqual, reduce } from 'lodash-es'; import { useCallback, useMemo } from 'react'; import { v4 } from 'uuid'; @@ -89,3 +89,27 @@ export function useCreateScheme(): (name: string, description?: string) => strin return createSchemeAction; } + +export function useUpdateScheme(id: string): (updater: (prev: SchemeSet) => SchemeSet) => void { + const updateSchemes = useSetAtom(schemesAtom); + const updateAction = useCallback( + (updater: (prev: SchemeSet) => SchemeSet) => { + updateSchemes((prev) => + reduce( + prev, + (acc, scheme) => { + if (isEqual(id, scheme.id)) { + acc.push(updater(scheme)); + } else { + acc.push(scheme); + } + return acc; + }, + [] as SchemeSet[], + ), + ); + }, + [id], + ); + return updateAction; +}