feat: CEO 대시보드 Phase 1 API 연동 (5개 섹션)
- DailyReport, Receivable, DebtCollection, MonthlyExpense, CardManagement API 연동 - useCEODashboard Hook 추가 (병렬 API 호출) - API → Frontend 타입 변환 함수 및 CheckPoint 생성 로직 구현 - API 실패 시 mockData fallback 패턴 적용
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
'use client';
|
||||
|
||||
import { useState, useCallback, useEffect } from 'react';
|
||||
import { useState, useCallback, useEffect, useMemo } from 'react';
|
||||
import { useRouter } from 'next/navigation';
|
||||
import { LayoutDashboard, Settings } from 'lucide-react';
|
||||
import { ContentLoadingSpinner } from '@/components/ui/loading-spinner';
|
||||
@@ -25,6 +25,7 @@ import { DEFAULT_DASHBOARD_SETTINGS } from './types';
|
||||
import { ScheduleDetailModal, DetailModal } from './modals';
|
||||
import { DashboardSettingsDialog } from './dialogs/DashboardSettingsDialog';
|
||||
import { mockData } from './mockData';
|
||||
import { useCEODashboard } from '@/hooks/useCEODashboard';
|
||||
import {
|
||||
getMonthlyExpenseModalConfig,
|
||||
getCardManagementModalConfig,
|
||||
@@ -35,8 +36,35 @@ import {
|
||||
|
||||
export function CEODashboard() {
|
||||
const router = useRouter();
|
||||
const [isLoading] = useState(false);
|
||||
const [data] = useState<CEODashboardData>(mockData);
|
||||
|
||||
// API 데이터 Hook (Phase 1 섹션들)
|
||||
const apiData = useCEODashboard({
|
||||
cardManagementFallback: mockData.cardManagement,
|
||||
});
|
||||
|
||||
// 전체 로딩 상태 (모든 API 호출 중일 때)
|
||||
const isLoading = useMemo(() => {
|
||||
return (
|
||||
apiData.dailyReport.loading &&
|
||||
apiData.receivable.loading &&
|
||||
apiData.debtCollection.loading &&
|
||||
apiData.monthlyExpense.loading &&
|
||||
apiData.cardManagement.loading
|
||||
);
|
||||
}, [apiData]);
|
||||
|
||||
// API 데이터와 mockData를 병합 (API 우선, 실패 시 fallback)
|
||||
const data = useMemo<CEODashboardData>(() => ({
|
||||
...mockData,
|
||||
// Phase 1 섹션들: API 데이터 우선, 실패 시 mockData fallback
|
||||
dailyReport: apiData.dailyReport.data ?? mockData.dailyReport,
|
||||
receivable: apiData.receivable.data ?? mockData.receivable,
|
||||
debtCollection: apiData.debtCollection.data ?? mockData.debtCollection,
|
||||
monthlyExpense: apiData.monthlyExpense.data ?? mockData.monthlyExpense,
|
||||
cardManagement: apiData.cardManagement.data ?? mockData.cardManagement,
|
||||
// Phase 2 섹션들: 아직 mockData 사용
|
||||
// todayIssue, todayIssueList, entertainment, welfare, vat, calendarSchedules
|
||||
}), [apiData, mockData]);
|
||||
|
||||
// 일정 상세 모달 상태
|
||||
const [isScheduleModalOpen, setIsScheduleModalOpen] = useState(false);
|
||||
|
||||
Reference in New Issue
Block a user