33 lines
No EOL
1.2 KiB
TypeScript
33 lines
No EOL
1.2 KiB
TypeScript
import { useState, useEffect } from 'react';
|
|
import useFetch from './useFetch';
|
|
import { CategoryType } from '../services/database';
|
|
|
|
export const useCategoryData = (CategoryType: string) => {
|
|
const [data, setData] = useState({ total: 0, expenseTotal: 0 });
|
|
const [isLoading, setLoading] = useState(true);
|
|
|
|
const categoryQuery = {
|
|
sql: `SELECT SUM(allocated_amount) as total FROM category WHERE type = '${CategoryType.toString()}'`,
|
|
args: []
|
|
};
|
|
|
|
const expenseQuery = {
|
|
sql: `SELECT SUM(e.amount) as total FROM expense e JOIN category c ON e.category_guid = c.guid WHERE c.type = '${CategoryType.toString()}'`,
|
|
args: []
|
|
};
|
|
|
|
const { data: categoryData, isLoading: categoryLoading } = useFetch(categoryQuery);
|
|
const { data: expenseData, isLoading: expenseLoading } = useFetch(expenseQuery);
|
|
|
|
useEffect(() => {
|
|
if (categoryData && expenseData) {
|
|
setData({
|
|
total: categoryData[0]?.total || 0,
|
|
expenseTotal: expenseData[0]?.total || 0
|
|
});
|
|
}
|
|
setLoading(categoryLoading || expenseLoading);
|
|
}, [categoryData, categoryLoading, expenseData, expenseLoading]);
|
|
|
|
return { categoryData, expenseData, isLoading, data };
|
|
}; |