Merge branch 'master' of http://114.203.209.83:3000/SamProject/sam-react-prod
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, useTodayIssue, useCalendar, useVat, useEntertainment, useWelfare } from '@/hooks/useCEODashboard';
|
||||
import {
|
||||
getMonthlyExpenseModalConfig,
|
||||
getCardManagementModalConfig,
|
||||
@@ -35,8 +36,61 @@ 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,
|
||||
});
|
||||
|
||||
// TodayIssue API Hook (Phase 2)
|
||||
const todayIssueData = useTodayIssue(30);
|
||||
|
||||
// Calendar API Hook (Phase 2)
|
||||
const calendarData = useCalendar();
|
||||
|
||||
// Vat API Hook (Phase 2)
|
||||
const vatData = useVat();
|
||||
|
||||
// Entertainment API Hook (Phase 2)
|
||||
const entertainmentData = useEntertainment();
|
||||
|
||||
// Welfare API Hook (Phase 2)
|
||||
const welfareData = useWelfare();
|
||||
|
||||
// 전체 로딩 상태 (모든 API 호출 중일 때)
|
||||
const isLoading = useMemo(() => {
|
||||
return (
|
||||
apiData.dailyReport.loading &&
|
||||
apiData.receivable.loading &&
|
||||
apiData.debtCollection.loading &&
|
||||
apiData.monthlyExpense.loading &&
|
||||
apiData.cardManagement.loading &&
|
||||
apiData.statusBoard.loading &&
|
||||
todayIssueData.loading &&
|
||||
calendarData.loading &&
|
||||
vatData.loading &&
|
||||
entertainmentData.loading &&
|
||||
welfareData.loading
|
||||
);
|
||||
}, [apiData, todayIssueData.loading, calendarData.loading, vatData.loading, entertainmentData.loading, welfareData.loading]);
|
||||
|
||||
// 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 섹션들
|
||||
todayIssue: apiData.statusBoard.data ?? mockData.todayIssue,
|
||||
todayIssueList: todayIssueData.data?.items ?? mockData.todayIssueList,
|
||||
calendarSchedules: calendarData.data?.items ?? mockData.calendarSchedules,
|
||||
vat: vatData.data ?? mockData.vat,
|
||||
entertainment: entertainmentData.data ?? mockData.entertainment,
|
||||
welfare: welfareData.data ?? mockData.welfare,
|
||||
}), [apiData, todayIssueData.data, calendarData.data, vatData.data, entertainmentData.data, welfareData.data, mockData]);
|
||||
|
||||
// 일정 상세 모달 상태
|
||||
const [isScheduleModalOpen, setIsScheduleModalOpen] = useState(false);
|
||||
|
||||
@@ -3,9 +3,9 @@ import type { DetailModalConfig } from '../types';
|
||||
/**
|
||||
* 복리후생비 현황 모달 설정
|
||||
* 모든 카드가 동일한 상세 모달
|
||||
* @param calculationType - 계산 방식 ('fixed': 직원당 정액 금액/월, 'percentage': 연봉 총액 비율)
|
||||
* @param calculationType - 계산 방식 ('fixed': 직원당 정액 금액/월, 'ratio': 연봉 총액 비율)
|
||||
*/
|
||||
export function getWelfareModalConfig(calculationType: 'fixed' | 'percentage'): DetailModalConfig {
|
||||
export function getWelfareModalConfig(calculationType: 'fixed' | 'ratio'): DetailModalConfig {
|
||||
// 계산 방식에 따른 조건부 calculationCards 생성
|
||||
const calculationCards = calculationType === 'fixed'
|
||||
? {
|
||||
|
||||
Reference in New Issue
Block a user