20260507213409

This commit is contained in:
oneao committed 2026-05-07 21:34:09 +08:00
1 parent 3070eac71b
commit 4c7f516a03
204 files changed
+3623

No files matched your search

+13
View File
@@ -0,0 +1,13 @@
import { create } from "zustand";
export type ThemeScheme = "light" | "dark" | "system";
interface AppState {
themeScheme: ThemeScheme;
setThemeScheme: (theme: ThemeScheme) => void;
}
export const useAppStore = create<AppState>((set) => ({
themeScheme: "system",
setThemeScheme: (theme) => set({ themeScheme: theme }),
}));
+49
View File
@@ -0,0 +1,49 @@
import AsyncStorage from "@react-native-async-storage/async-storage";
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
interface Family {
family_id: number;
}
interface FamilyState {
currentFamily: Family;
setCurrentFamily: (family: Family) => void;
clear: () => void;
inFamily: () => boolean;
}
const defaultFamily: Family = {
family_id: 0,
};
export const useFamilyStore = create<FamilyState>()(
persist(
(set, get) => ({
currentFamily: defaultFamily,
setCurrentFamily: (family) =>
set({
currentFamily: family,
}),
clear: () =>
set({
currentFamily: defaultFamily,
}),
inFamily: () => {
const currentFamily = get().currentFamily;
return currentFamily.family_id !== 0;
},
}),
{
name: "family-storage",
storage: createJSONStorage(() => AsyncStorage),
},
),
);
+21
View File
@@ -0,0 +1,21 @@
import { create } from "zustand";
interface FinanceState {
categories: any[];
setCategories: (categories: any[]) => void;
clearCategories: () => void;
getCategories: () => any[];
getExpenseCategories: () => any[];
getIncomeCategories: () => any[];
}
export const useFinanceStore = create<FinanceState>((set, get) => ({
categories: [],
setCategories: (categories: any[]) => set({ categories }),
clearCategories: () => set({ categories: [] }),
getCategories: () => get().categories,
getExpenseCategories: () => get().categories.filter((category) => category.type === 0),
getIncomeCategories: () => get().categories.filter((category) => category.type === 1),
}));
+4
View File
@@ -0,0 +1,4 @@
export * from "./app";
export * from "./user";
export * from "./finance";
export * from "./family";
+69
View File
@@ -0,0 +1,69 @@
import AsyncStorage from "@react-native-async-storage/async-storage";
import { create } from "zustand";
import { createJSONStorage, persist } from "zustand/middleware";
interface UserState {
userInfo: UserInfo;
isLogged: () => boolean;
setUserInfo: (userInfo: UserInfo) => void;
clear: () => void;
authExpired: boolean;
setAuthExpired: (v: boolean) => void;
updateToken: (token: string) => void;
}
const defaultUserInfo: UserInfo = {
id: 0,
token: "",
nickname: "",
avatar: "",
};
export const useUserStore = create<UserState>()(
persist(
(set, get) => ({
userInfo: defaultUserInfo,
authExpired: false,
isLogged: () => !!get().userInfo?.token,
setUserInfo: (userInfo) =>
set({
userInfo,
}),
clear: () => {
set({
userInfo: defaultUserInfo,
});
},
setAuthExpired: (v: boolean) =>
set({
authExpired: v,
}),
updateToken: (token: string) =>
set((state) => ({
userInfo: {
...state.userInfo,
token,
},
})),
}),
{
name: "user-storage",
storage: createJSONStorage(() => AsyncStorage),
partialize: (state) => ({
userInfo: state.userInfo,
}),
},
),
);