|
1 | 1 | import { useCallback } from 'react'; |
2 | 2 |
|
3 | | -import { create } from 'zustand'; |
| 3 | +import { createSignal, getSignal, useSetSignal, useSignalValue } from 'reactjs-signal'; |
4 | 4 |
|
5 | 5 | import { DEFAULT_LANG_VALUE } from '@/constants'; |
6 | 6 |
|
@@ -31,35 +31,33 @@ type LanguageType = keyof typeof LANG.message | (string & {}); |
31 | 31 | interface LangState { |
32 | 32 | currentLang: LanguageType; |
33 | 33 | message: typeof LANG.message; |
34 | | - setLang: (newLang: LanguageType) => void; |
35 | | - setMessage: (lang: LanguageType, messages: Partial<Record<keyof typeof en, string>>) => void; |
36 | 34 | } |
37 | 35 |
|
38 | | -const useLang = create<LangState>()((set) => ({ |
| 36 | +const langSignal = createSignal<LangState>({ |
39 | 37 | currentLang: LANG.currentLang, |
40 | 38 | message: LANG.message, |
41 | | - setLang: (newLang: LanguageType) => { |
42 | | - set(() => ({ |
43 | | - currentLang: newLang, |
44 | | - })); |
45 | | - }, |
46 | | - setMessage: (lang: LanguageType, messages: Partial<Record<keyof typeof en, string>>) => { |
47 | | - set((state) => ({ |
48 | | - message: { |
49 | | - ...state.message, |
50 | | - [lang]: { |
51 | | - ...state.message[lang as keyof typeof LANG.message], |
52 | | - ...messages, |
53 | | - }, |
54 | | - }, |
55 | | - })); |
56 | | - } |
57 | | -})); |
| 39 | +}); |
58 | 40 |
|
| 41 | + // setLang: (newLang: LanguageType) => { |
| 42 | + // set(() => ({ |
| 43 | + // currentLang: newLang, |
| 44 | + // })); |
| 45 | + // }, |
| 46 | + // setMessage: (lang: LanguageType, messages: Partial<Record<keyof typeof en, string>>) => { |
| 47 | + // set((state) => ({ |
| 48 | + // message: { |
| 49 | + // ...state.message, |
| 50 | + // [lang]: { |
| 51 | + // ...state.message[lang as keyof typeof LANG.message], |
| 52 | + // ...messages, |
| 53 | + // }, |
| 54 | + // }, |
| 55 | + // })); |
| 56 | + // } |
59 | 57 | function useLocale() { |
60 | | - const currentLang = useLang((state) => state.currentLang); |
61 | | - const message = useLang((state) => state.message); |
62 | | - const setLang = useLang((state) => state.setLang); |
| 58 | + const currentLang = useSignalValue(langSignal).currentLang; |
| 59 | + const message = useSignalValue(langSignal).message; |
| 60 | + const setLang = useSetSignal(langSignal); |
63 | 61 |
|
64 | 62 | const t = useCallback((path: MessageKeysType, params?: Record<string, string | number>) => { |
65 | 63 | try { |
@@ -89,10 +87,22 @@ function useLocale() { |
89 | 87 |
|
90 | 88 | const localeActions = { |
91 | 89 | setLang: (lang: LanguageType | (string & {})) => { |
92 | | - useLang.getState().setLang(lang); |
| 90 | + getSignal(langSignal).setValue((prev => ({ |
| 91 | + ...prev, |
| 92 | + currentLang: lang, |
| 93 | + }))); |
93 | 94 | }, |
94 | 95 | setMessage: (lang: LanguageType | (string & {}), messages: Partial<Record<keyof typeof LANG.message.en, string>>) => { |
95 | | - useLang.getState().setMessage(lang, messages); |
| 96 | + getSignal(langSignal).setValue((prev) => ({ |
| 97 | + ...prev, |
| 98 | + message: { |
| 99 | + ...prev.message, |
| 100 | + [lang]: { |
| 101 | + ...prev.message[lang as keyof typeof LANG.message], |
| 102 | + ...messages, |
| 103 | + }, |
| 104 | + }, |
| 105 | + })); |
96 | 106 | }, |
97 | 107 | }; |
98 | 108 |
|
|
0 commit comments