import { AlertCircle, Wallet2 } from "lucide-react"; import { ScrollArea } from "@/components/ui/scroll-area"; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card"; import type { DashboardHoldingItem } from "@/features/dashboard/types/dashboard.types"; import { formatCurrency, formatPercent, getChangeToneClass, } from "@/features/dashboard/utils/dashboard-format"; import { cn } from "@/lib/utils"; interface HoldingsListProps { holdings: DashboardHoldingItem[]; selectedSymbol: string | null; isLoading: boolean; error: string | null; onSelect: (symbol: string) => void; } /** * @description 보유 종목 리스트 카드입니다. * @see features/dashboard/components/DashboardContainer.tsx 좌측 메인 영역에서 호출합니다. */ export function HoldingsList({ holdings, selectedSymbol, isLoading, error, onSelect, }: HoldingsListProps) { return ( {/* ========== TITLE ========== */} 보유 종목 현재 보유 중인 종목을 선택하면 우측 상세가 갱신됩니다. {isLoading && holdings.length === 0 && (

보유 종목을 불러오는 중입니다.

)} {error && (

{error}

)} {!isLoading && holdings.length === 0 && !error && (

보유 종목이 없습니다.

)} {holdings.length > 0 && (
{holdings.map((holding) => { const isSelected = selectedSymbol === holding.symbol; const toneClass = getChangeToneClass(holding.profitLoss); return ( ); })}
)}
); }