From 1560b37b60f9ce78b56a4c278823da69621d8cfd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Fri, 27 Dec 2024 06:44:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9B=B4=E6=96=B0Scheme?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E7=9A=84=E5=8A=9F=E8=83=BD=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/stores/schemes.ts | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) 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; +}