From 45fe1004a6c9751e7ab5c60935cd229b82ae9bd3 Mon Sep 17 00:00:00 2001 From: Dreamacro <8615343+Dreamacro@users.noreply.github.com> Date: Sat, 26 Jun 2021 01:12:57 +0800 Subject: [PATCH] Feature: break connections selected can be store --- src/lib/jotai.ts | 2 +- src/stores/jotai.ts | 13 +++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/lib/jotai.ts b/src/lib/jotai.ts index 2ece070..081faed 100644 --- a/src/lib/jotai.ts +++ b/src/lib/jotai.ts @@ -1,7 +1,7 @@ import produce, { Draft } from 'immer' import { useMemo } from 'react' -type WritableDraft = (draft: Draft) => void +export type WritableDraft = (draft: Draft) => void export function useWarpImmerSetter (setter: (f: WritableDraft) => void) { const set = useMemo(() => { diff --git a/src/stores/jotai.ts b/src/stores/jotai.ts index 2c209e5..f87b5db 100644 --- a/src/stores/jotai.ts +++ b/src/stores/jotai.ts @@ -6,9 +6,10 @@ import { atomWithImmer } from 'jotai/immer' import { useCallback, useEffect, useMemo } from 'react' import { get } from 'lodash-es' import useSWR from 'swr' +import produce from 'immer' import { Language, locales, Lang, getDefaultLanguage } from '@i18n' -import { useWarpImmerSetter } from '@lib/jotai' +import { useWarpImmerSetter, WritableDraft } from '@lib/jotai' import * as API from '@lib/request' import * as Models from '@models' import { partition, setLocalStorageItem } from '@lib/helper' @@ -98,14 +99,18 @@ export function useRuleProviders () { return { providers: data ?? [], update: mutate } } -export const config = atomWithImmer({ +export const configAtom = atomWithStorage('profile', { breakConnections: false }) export function useConfig () { - const [data, set] = useAtom(config) + const [data, set] = useAtom(configAtom) - return { data, set: useWarpImmerSetter(set) } + const setter = useCallback((f: WritableDraft) => { + set(produce(data, f)) + }, [data, set]) + + return { data, set: useWarpImmerSetter(setter) } } export const proxyProvider = atom([] as API.Provider[])