20260627165246
This commit is contained in:
1 parent
5983d29128
commit
bfb2b6037b
25 files changed
+2665
-518
No files matched your search
@@ -1,21 +1,56 @@
|
||||
import { create } from "zustand";
|
||||
import { loadDataApi } from "@/request/api";
|
||||
import { FinanceCategory, FinanceCategoryStatus, FinanceType } from "@/types/finance";
|
||||
|
||||
interface FinanceState {
|
||||
categories: any[];
|
||||
setCategories: (categories: any[]) => void;
|
||||
categories: FinanceCategory[];
|
||||
setCategories: (categories: FinanceCategory[]) => void;
|
||||
clearCategories: () => void;
|
||||
|
||||
getCategories: () => any[];
|
||||
getExpenseCategories: () => any[];
|
||||
getIncomeCategories: () => any[];
|
||||
getCategories: () => FinanceCategory[];
|
||||
getExpenseCategories: () => FinanceCategory[];
|
||||
getIncomeCategories: () => FinanceCategory[];
|
||||
loadCategories: (familyId: number) => Promise<void>;
|
||||
upsertCategory: (category: FinanceCategory) => void;
|
||||
removeCategory: (id: number) => void;
|
||||
}
|
||||
|
||||
export const useFinanceStore = create<FinanceState>((set, get) => ({
|
||||
categories: [],
|
||||
setCategories: (categories: any[]) => set({ categories }),
|
||||
setCategories: (categories: FinanceCategory[]) => set({ categories }),
|
||||
clearCategories: () => set({ categories: [] }),
|
||||
|
||||
getCategories: () => get().categories,
|
||||
getExpenseCategories: () => get().categories.filter((category) => category.type === 0),
|
||||
getIncomeCategories: () => get().categories.filter((category) => category.type === 1),
|
||||
getExpenseCategories: () => get().categories.filter((category) => category.type === FinanceType.Expense),
|
||||
getIncomeCategories: () => get().categories.filter((category) => category.type === FinanceType.Income),
|
||||
loadCategories: async (familyId: number) => {
|
||||
if (!familyId) return;
|
||||
|
||||
const res = await loadDataApi({
|
||||
view_name: "b_finance_category",
|
||||
search_columns: [],
|
||||
search_condition: "family_id = ? and status = ?",
|
||||
order_by: "type asc, sort_number asc, id asc",
|
||||
args: [familyId, FinanceCategoryStatus.Enabled],
|
||||
});
|
||||
|
||||
if (res.isSuccess) {
|
||||
set({ categories: res.data as FinanceCategory[] });
|
||||
}
|
||||
},
|
||||
upsertCategory: (category: FinanceCategory) =>
|
||||
set((state) => {
|
||||
const index = state.categories.findIndex((item) => item.id === category.id);
|
||||
if (index < 0) {
|
||||
return { categories: [...state.categories, category] };
|
||||
}
|
||||
|
||||
const categories = [...state.categories];
|
||||
categories[index] = category;
|
||||
return { categories };
|
||||
}),
|
||||
removeCategory: (id: number) =>
|
||||
set((state) => ({
|
||||
categories: state.categories.filter((category) => category.id !== id),
|
||||
})),
|
||||
}));
|
||||
Reference in new issue
Block a user