Skip to content

Commit ee24bda

Browse files
committed
chore: replace zustand use reactjs-signal
1 parent df1e53c commit ee24bda

File tree

5 files changed

+66
-74
lines changed

5 files changed

+66
-74
lines changed

src/locales/index.ts

Lines changed: 36 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useCallback } from 'react';
22

3-
import { create } from 'zustand';
3+
import { createSignal, getSignal, useSetSignal, useSignalValue } from 'reactjs-signal';
44

55
import { DEFAULT_LANG_VALUE } from '@/constants';
66

@@ -31,35 +31,33 @@ type LanguageType = keyof typeof LANG.message | (string & {});
3131
interface LangState {
3232
currentLang: LanguageType;
3333
message: typeof LANG.message;
34-
setLang: (newLang: LanguageType) => void;
35-
setMessage: (lang: LanguageType, messages: Partial<Record<keyof typeof en, string>>) => void;
3634
}
3735

38-
const useLang = create<LangState>()((set) => ({
36+
const langSignal = createSignal<LangState>({
3937
currentLang: LANG.currentLang,
4038
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+
});
5840

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+
// }
5957
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);
6361

6462
const t = useCallback((path: MessageKeysType, params?: Record<string, string | number>) => {
6563
try {
@@ -89,10 +87,22 @@ function useLocale() {
8987

9088
const localeActions = {
9189
setLang: (lang: LanguageType | (string & {})) => {
92-
useLang.getState().setLang(lang);
90+
getSignal(langSignal).setValue((prev => ({
91+
...prev,
92+
currentLang: lang,
93+
})));
9394
},
9495
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+
}));
96106
},
97107
};
98108

src/store/EditorEditableReactive.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useEffect } from 'react';
44
import { useStoreEditableEditor, } from '@/store/store';
55

66
export function EditorEditableReactive ({ editor }: any) {
7-
const setEditable = useStoreEditableEditor(store => store.setEditable);
7+
const setEditable = useStoreEditableEditor();
88

99
useEffect(() => {
1010
setEditable({

src/store/commandList.ts

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
1-
import { create } from 'zustand';
1+
import { createSignal, useSetSignal, useSignalValue } from 'reactjs-signal';
22

33
import { type CommandList } from '@/extensions/SlashCommand/types';
44

55
interface SignalCommandListState {
66
commandList: CommandList[];
7-
setCommandList: (newCommandList: CommandList[]) => void;
87
}
98

10-
const useSignalCommandListStore = create<SignalCommandListState>((set => ({
9+
const useSignalCommandListStore = createSignal<SignalCommandListState>({
1110
commandList: [],
12-
setCommandList: (newCommandList: CommandList[]) => {
13-
set(() => ({
14-
commandList: newCommandList,
15-
}));
16-
},
17-
})));
11+
});
1812

1913
export function useSignalCommandList () {
20-
const commandList = useSignalCommandListStore(state => state.commandList);
21-
const setCommandList = useSignalCommandListStore(state => state.setCommandList);
14+
const commandList = useSignalValue(useSignalCommandListStore).commandList;
15+
const setCommandList = useSetSignal(useSignalCommandListStore);
2216

2317
return [commandList, setCommandList] as const;
2418
}

src/store/store.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { create } from 'zustand';
1+
import { createSignal, useSetSignal, useSignalValue } from 'reactjs-signal';
22

33
import createFastContext from '@/store/fast-context';
44

@@ -10,21 +10,20 @@ const { Provider: ProviderUploadVideo, useStore: useStoreUploadVideo } = createF
1010
value: false
1111
});
1212

13-
const useStoreEditableEditor = create<{ value: boolean, setEditable: (newValue: { value: boolean }) => void }>((set) => ({
13+
const editableEditorSignal = createSignal<{ value: boolean }>({
1414
value: false,
15-
setEditable: (newValue: { value: boolean }) => {
16-
set(() => ({
17-
value: newValue.value,
18-
}));
19-
},
20-
}));
15+
});
2116

2217
function useEditableEditor () {
23-
const isEditableEditor = useStoreEditableEditor(store => store.value);
18+
const isEditableEditor = useSignalValue(editableEditorSignal).value;
2419

2520
return isEditableEditor;
2621
}
2722

23+
function useStoreEditableEditor () {
24+
return useSetSignal(editableEditorSignal);
25+
}
26+
2827
export {
2928
ProviderUploadImage,
3029
useStoreUploadImage,

src/theme/theme.ts

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// Get here: https://ui.shadcn.com/themes
2-
import { create } from 'zustand';
2+
import { createSignal, getSignal, useSignalValue } from 'reactjs-signal';
33

44
export const THEME = {
55
light: {
@@ -367,36 +367,16 @@ interface ThemeStore {
367367
theme: ThemeType;
368368
color: ThemeColorType;
369369
borderRadius: string;
370-
setTheme: (theme: ThemeType) => void;
371-
setColor: (color: ThemeColorType) => void;
372-
setBorderRadius: (borderRadius: string) => void;
373370
}
374371

375-
const useThemeStore = create<ThemeStore>((set) => ({
372+
const themeSignal = createSignal<ThemeStore>({
376373
theme: 'light',
377374
color: 'default',
378375
borderRadius: '0.65rem',
379-
setTheme: (theme: ThemeType) => {
380-
set(() => ({
381-
theme,
382-
}));
383-
},
384-
setColor: (color: ThemeColorType) => {
385-
set(() => ({
386-
color,
387-
}));
388-
},
389-
setBorderRadius: (borderRadius: string) => {
390-
set(() => ({
391-
borderRadius,
392-
}));
393-
},
394-
}));
376+
});
395377

396378
export function useTheme () {
397-
const theme = useThemeStore((state) => state.theme);
398-
const color = useThemeStore((state) => state.color);
399-
const borderRadius = useThemeStore((state) => state.borderRadius);
379+
const { theme, color, borderRadius } = useSignalValue(themeSignal);
400380

401381
return {
402382
theme,
@@ -407,12 +387,21 @@ export function useTheme () {
407387

408388
export const themeActions = {
409389
setTheme: (theme: ThemeType) => {
410-
useThemeStore.getState().setTheme(theme);
390+
getSignal(themeSignal).setValue((prev) => ({
391+
...prev,
392+
theme,
393+
}));
411394
},
412395
setColor: (color: ThemeColorType) => {
413-
useThemeStore.getState().setColor(color);
396+
getSignal(themeSignal).setValue((prev) => ({
397+
...prev,
398+
color,
399+
}));
414400
},
415401
setBorderRadius: (borderRadius: string) => {
416-
useThemeStore.getState().setBorderRadius(borderRadius);
402+
getSignal(themeSignal).setValue((prev) => ({
403+
...prev,
404+
borderRadius,
405+
}));
417406
}
418407
};

0 commit comments

Comments
 (0)