// frontend/components/dashboard/DashboardClient.tsx "use client"; import { useEffect, useRef } from "react"; import { Icon } from "@/components/Icon"; import type { IconName } from "@/components/icons/paths"; import { useDashboard } from "@/lib/dashboard/useDashboard"; import { ApprovalSummaryCard } from "./ApprovalSummaryCard"; import { DashboardSkeleton } from "./DashboardSkeleton"; import { GoalsCard } from "./GoalsCard"; import { HeroBriefing } from "./HeroBriefing"; import { InboxSummaryCard } from "./InboxSummaryCard"; import { ScheduleCard } from "./ScheduleCard"; import { TaskSummaryCard } from "./TaskSummaryCard"; export function DashboardClient() { const { data, isLoading, error, mutate } = useDashboard(); const shellRef = useRef(null); useEffect(() => { const el = shellRef.current; if (!el) return; const id = requestAnimationFrame(() => el.classList.add("entered")); return () => cancelAnimationFrame(id); }, [data]); if (isLoading) return ; if (error || !data) { return (

대시보드를 불러오지 못했어요.

); } const { user, briefing, saved_today, today_routed, schedule, task_summary, goals, approvals_summary, inbox_recent, badges, } = data; return (
{briefing.today} {briefing.weather.cond}

좋은 아침이에요, {user.name}님

); }