Refactor Index page component
The Index page component was refactored into smaller, more manageable components to improve code readability and maintainability.
This commit is contained in:
94
src/hooks/useDataInitialization.ts
Normal file
94
src/hooks/useDataInitialization.ts
Normal file
@@ -0,0 +1,94 @@
|
||||
|
||||
import { useState, useEffect, useCallback } from 'react';
|
||||
import { resetAllData } from '@/contexts/budget/storageUtils';
|
||||
import { resetAllStorageData } from '@/utils/storageUtils';
|
||||
|
||||
export const useDataInitialization = (resetBudgetData?: () => void) => {
|
||||
const [isInitialized, setIsInitialized] = useState(false);
|
||||
|
||||
// 모든 데이터 초기화 함수
|
||||
const initializeAllData = useCallback(() => {
|
||||
console.log('모든 데이터 초기화 시작');
|
||||
|
||||
// 현재 dontShowWelcome 값 백업
|
||||
const dontShowWelcomeValue = localStorage.getItem('dontShowWelcome');
|
||||
console.log('useDataInitialization - 초기화 전 dontShowWelcome 값:', dontShowWelcomeValue);
|
||||
|
||||
// 여러번 초기화 실행
|
||||
for (let i = 0; i < 3; i++) {
|
||||
// 모든 데이터 완전히 삭제 및 초기화
|
||||
resetAllData();
|
||||
resetAllStorageData();
|
||||
|
||||
// localStorage 직접 초기화 (추가 보호)
|
||||
clearAllAnalyticsData();
|
||||
}
|
||||
|
||||
// 컨텍스트 데이터 리셋 (마지막에 한번 더)
|
||||
if (resetBudgetData) {
|
||||
resetBudgetData();
|
||||
}
|
||||
|
||||
// 초기화 후 dontShowWelcome 값 확인
|
||||
const afterResetValue = localStorage.getItem('dontShowWelcome');
|
||||
console.log('useDataInitialization - 초기화 후 dontShowWelcome 값:', afterResetValue);
|
||||
|
||||
// 값이 유지되지 않았다면 복원
|
||||
if (dontShowWelcomeValue && afterResetValue !== dontShowWelcomeValue) {
|
||||
console.log('useDataInitialization - dontShowWelcome 값 복원:', dontShowWelcomeValue);
|
||||
localStorage.setItem('dontShowWelcome', dontShowWelcomeValue);
|
||||
}
|
||||
|
||||
console.log('모든 데이터 초기화 완료');
|
||||
return true;
|
||||
}, [resetBudgetData]);
|
||||
|
||||
// 분석 페이지 데이터 초기화 함수
|
||||
const clearAllAnalyticsData = useCallback(() => {
|
||||
// 분석 관련 데이터 강제 삭제
|
||||
const analyticsKeys = [
|
||||
'analytics', 'monthlyTotals', 'chartData',
|
||||
'expenseHistory', 'budgetHistory', 'categorySpending',
|
||||
'monthlyData', 'expenseData', 'analyticData'
|
||||
];
|
||||
|
||||
analyticsKeys.forEach(key => {
|
||||
localStorage.removeItem(key);
|
||||
});
|
||||
|
||||
// 모든 localStorage 순회하며 월간, 차트, 분석 관련 키워드 삭제
|
||||
for (let i = localStorage.length - 1; i >= 0; i--) {
|
||||
const key = localStorage.key(i);
|
||||
if (key && (
|
||||
key.includes('month') ||
|
||||
key.includes('chart') ||
|
||||
key.includes('analytics') ||
|
||||
key.includes('expense') ||
|
||||
key.includes('budget') ||
|
||||
key.includes('total')
|
||||
)) {
|
||||
console.log(`분석 데이터 삭제: ${key}`);
|
||||
localStorage.removeItem(key);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}, []);
|
||||
|
||||
// 데이터 초기화 실행
|
||||
useEffect(() => {
|
||||
if (!isInitialized) {
|
||||
const result = initializeAllData();
|
||||
setIsInitialized(result);
|
||||
}
|
||||
|
||||
// 방문 기록 저장 (초기화 후에 저장)
|
||||
localStorage.setItem('hasVisitedBefore', 'true');
|
||||
}, [isInitialized, initializeAllData]);
|
||||
|
||||
return {
|
||||
isInitialized,
|
||||
initializeAllData,
|
||||
clearAllAnalyticsData
|
||||
};
|
||||
};
|
||||
60
src/hooks/useWelcomeDialog.ts
Normal file
60
src/hooks/useWelcomeDialog.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
|
||||
import { useState, useEffect, useCallback } from 'react';
|
||||
|
||||
export const useWelcomeDialog = () => {
|
||||
const [showWelcome, setShowWelcome] = useState(false);
|
||||
|
||||
// 환영 다이얼로그 표시 여부 확인
|
||||
const checkWelcomeDialogState = useCallback(() => {
|
||||
// 현재 세션에서 이미 환영 메시지를 닫았는지 확인
|
||||
const sessionClosed = sessionStorage.getItem('welcomeClosedThisSession') === 'true';
|
||||
|
||||
if (sessionClosed) {
|
||||
console.log('useWelcomeDialog - 이번 세션에서 이미 환영 메시지를 닫았습니다');
|
||||
setShowWelcome(false);
|
||||
return;
|
||||
}
|
||||
|
||||
const dontShowWelcome = localStorage.getItem('dontShowWelcome');
|
||||
console.log('useWelcomeDialog - dontShowWelcome 값:', dontShowWelcome);
|
||||
|
||||
// 명시적으로 'true' 문자열인 경우에만 숨김 처리
|
||||
if (dontShowWelcome === 'true') {
|
||||
console.log('useWelcomeDialog - 환영 메시지 표시하지 않음 (저장된 설정)');
|
||||
setShowWelcome(false);
|
||||
} else {
|
||||
console.log('useWelcomeDialog - 환영 메시지 표시함');
|
||||
setShowWelcome(true);
|
||||
}
|
||||
}, []);
|
||||
|
||||
// 환영 다이얼로그 닫기 핸들러
|
||||
const handleCloseWelcome = useCallback((dontShowAgain: boolean) => {
|
||||
setShowWelcome(false);
|
||||
|
||||
// 이번 세션에서 닫았음을 기록
|
||||
sessionStorage.setItem('welcomeClosedThisSession', 'true');
|
||||
|
||||
// 사용자가 더 이상 보지 않기를 선택한 경우
|
||||
if (dontShowAgain) {
|
||||
localStorage.setItem('dontShowWelcome', 'true');
|
||||
sessionStorage.setItem('dontShowWelcome', 'true');
|
||||
console.log('useWelcomeDialog - 환영 팝업 더 이상 표시하지 않기 설정됨:', dontShowAgain);
|
||||
|
||||
// 설정 확인
|
||||
const savedValue = localStorage.getItem('dontShowWelcome');
|
||||
console.log('useWelcomeDialog - 설정 후 dontShowWelcome 저장값:', savedValue);
|
||||
} else {
|
||||
// 체크하지 않은 경우 명시적으로 false 저장
|
||||
localStorage.setItem('dontShowWelcome', 'false');
|
||||
sessionStorage.setItem('dontShowWelcome', 'false');
|
||||
}
|
||||
}, []);
|
||||
|
||||
return {
|
||||
showWelcome,
|
||||
setShowWelcome,
|
||||
checkWelcomeDialogState,
|
||||
handleCloseWelcome
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user