Merge category charts

Consolidated category spending list into the category pie chart card.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-22 13:00:32 +00:00
parent 3a0c7d1c61
commit a5eb629f0c
2 changed files with 52 additions and 17 deletions

View File

@@ -15,18 +15,21 @@ interface CategorySpendingListProps {
categories: CategorySpending[];
totalExpense: number;
className?: string;
showCard?: boolean; // 카드 표시 여부를 제어하는 프롭 추가
}
const CategorySpendingList: React.FC<CategorySpendingListProps> = ({
categories,
totalExpense,
className = ""
className = "",
showCard = true // 기본값은 true로 설정
}) => {
const isMobile = useIsMobile();
return (
<div className={`neuro-card mb-6 w-full ${className}`}>
{categories.some(cat => cat.current > 0) ? (
// 카테고리 목록을 렌더링하는 함수
const renderCategoryList = () => {
if (categories.some(cat => cat.current > 0)) {
return (
<div className="space-y-4 px-1 py-4">
{categories.map((category) => {
// 카테고리 이름을 직접 표시
@@ -59,13 +62,27 @@ const CategorySpendingList: React.FC<CategorySpendingListProps> = ({
);
})}
</div>
) : (
);
} else {
return (
<div className="py-8 text-center text-gray-400">
<p> </p>
</div>
)}
</div>
);
);
}
};
// showCard가 true이면 카드로 감싸서 반환, 아니면 목록만 반환
if (showCard) {
return (
<div className={`neuro-card mb-6 w-full ${className}`}>
{renderCategoryList()}
</div>
);
}
// 카드 없이 목록만 반환
return renderCategoryList();
};
export default CategorySpendingList;

View File

@@ -1,3 +1,4 @@
import React, { useState, useEffect } from 'react';
import NavBar from '@/components/NavBar';
import ExpenseChart from '@/components/ExpenseChart';
@@ -14,6 +15,7 @@ import SummaryCards from '@/components/analytics/SummaryCards';
import MonthlyComparisonChart from '@/components/analytics/MonthlyComparisonChart';
import CategorySpendingList from '@/components/analytics/CategorySpendingList';
import PaymentMethodChart from '@/components/analytics/PaymentMethodChart';
const Analytics = () => {
const [selectedPeriod, setSelectedPeriod] = useState('이번 달');
const {
@@ -123,6 +125,7 @@ const Analytics = () => {
const handleNextPeriod = () => {
console.log('다음 기간으로 이동');
};
return <div className="min-h-screen bg-neuro-background pb-24">
<div className="max-w-md mx-auto px-6">
{/* Header */}
@@ -142,25 +145,40 @@ const Analytics = () => {
<MonthlyComparisonChart monthlyData={monthlyData} isEmpty={totalBudget === 0 && totalExpense === 0} />
</div>
{/* Category Pie Chart - 왼쪽 여백 조정 */}
{/* 카테고리 비율과 지출을 하나의 카드로 합침 */}
<h2 className="text-lg font-semibold mb-3"> </h2>
<div className="w-full mb-8">
{expenseData.some(item => item.value > 0) ? <ExpenseChart data={expenseData} /> : <div className="neuro-card h-52 w-full flex items-center justify-center text-gray-400">
<p> </p>
</div>}
<div className="neuro-card w-full mb-8">
<div className="w-full">
{expenseData.some(item => item.value > 0) ? (
<>
<div className="h-72">
<ExpenseChart data={expenseData} />
</div>
{/* 원그래프 아래에 카테고리 지출 목록 추가 */}
<CategorySpendingList
categories={categorySpending}
totalExpense={totalExpense}
showCard={false} // 카드 감싸지 않도록 설정
/>
</>
) : (
<div className="h-52 w-full flex items-center justify-center text-gray-400">
<p> </p>
</div>
)}
</div>
</div>
{/* 결제 방법 차트 추가 */}
<h2 className="text-lg font-semibold mb-3"> </h2>
<PaymentMethodChart data={paymentMethodData} isEmpty={!hasPaymentData} />
{/* Top Spending Categories */}
<h2 className="text-lg font-semibold mb-3 mt-6"> </h2>
<CategorySpendingList categories={categorySpending} totalExpense={totalExpense} className="mb-[50px]" />
{/* 카테고리 지출 섹션은 제거됨 - 위 카테고리 비율 카드로 병합됨 */}
</div>
<AddTransactionButton />
<NavBar />
</div>;
};
export default Analytics;
export default Analytics;