Feature: break connections selected can be store

This commit is contained in:
Dreamacro 2021-06-26 01:12:57 +08:00
parent d330bf178e
commit 45fe1004a6
2 changed files with 10 additions and 5 deletions

View File

@ -1,7 +1,7 @@
import produce, { Draft } from 'immer' import produce, { Draft } from 'immer'
import { useMemo } from 'react' import { useMemo } from 'react'
type WritableDraft<T> = (draft: Draft<T>) => void export type WritableDraft<T> = (draft: Draft<T>) => void
export function useWarpImmerSetter<T> (setter: (f: WritableDraft<T>) => void) { export function useWarpImmerSetter<T> (setter: (f: WritableDraft<T>) => void) {
const set = useMemo(() => { const set = useMemo(() => {

View File

@ -6,9 +6,10 @@ import { atomWithImmer } from 'jotai/immer'
import { useCallback, useEffect, useMemo } from 'react' import { useCallback, useEffect, useMemo } from 'react'
import { get } from 'lodash-es' import { get } from 'lodash-es'
import useSWR from 'swr' import useSWR from 'swr'
import produce from 'immer'
import { Language, locales, Lang, getDefaultLanguage } from '@i18n' 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 API from '@lib/request'
import * as Models from '@models' import * as Models from '@models'
import { partition, setLocalStorageItem } from '@lib/helper' import { partition, setLocalStorageItem } from '@lib/helper'
@ -98,14 +99,18 @@ export function useRuleProviders () {
return { providers: data ?? [], update: mutate } return { providers: data ?? [], update: mutate }
} }
export const config = atomWithImmer({ export const configAtom = atomWithStorage('profile', {
breakConnections: false breakConnections: false
}) })
export function useConfig () { export function useConfig () {
const [data, set] = useAtom(config) const [data, set] = useAtom(configAtom)
return { data, set: useWarpImmerSetter(set) } const setter = useCallback((f: WritableDraft<typeof data>) => {
set(produce(data, f))
}, [data, set])
return { data, set: useWarpImmerSetter(setter) }
} }
export const proxyProvider = atom([] as API.Provider[]) export const proxyProvider = atom([] as API.Provider[])