20260507213409
This commit is contained in:
1 parent
3070eac71b
commit
4c7f516a03
204 files changed
+3623
No files matched your search
@@ -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 }),
|
||||
}));
|
||||
@@ -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),
|
||||
},
|
||||
),
|
||||
);
|
||||
@@ -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),
|
||||
}));
|
||||
@@ -0,0 +1,4 @@
|
||||
export * from "./app";
|
||||
export * from "./user";
|
||||
export * from "./finance";
|
||||
export * from "./family";
|
||||
@@ -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,
|
||||
}),
|
||||
},
|
||||
),
|
||||
);
|
||||
Reference in new issue
Block a user