diff --git a/src/components/security/DataResetSection.tsx b/src/components/security/DataResetSection.tsx index efb7d4e..cc3df86 100644 --- a/src/components/security/DataResetSection.tsx +++ b/src/components/security/DataResetSection.tsx @@ -18,16 +18,8 @@ const DataResetSection = () => { await resetAllData(); setIsResetDialogOpen(false); - // 알림 표시 - toast({ - title: "데이터 초기화 완료", - description: "모든 데이터가 초기화되었습니다.", - }); - - // 초기화 후 페이지 새로고침 - setTimeout(() => { - window.location.reload(); - }, 1000); + // toast 알림은 useDataReset.ts에서 처리하므로 여기서는 제거 + // 페이지 새로고침 코드 제거 (navigate 사용으로 대체) }; return ( diff --git a/src/contexts/budget/storage/resetStorage.ts b/src/contexts/budget/storage/resetStorage.ts index dcc9fc2..45251e9 100644 --- a/src/contexts/budget/storage/resetStorage.ts +++ b/src/contexts/budget/storage/resetStorage.ts @@ -4,7 +4,7 @@ import { clearAllCategoryBudgets } from './categoryStorage'; import { clearAllBudgetData } from './budgetStorage'; import { DEFAULT_CATEGORY_BUDGETS } from '../budgetUtils'; import { getInitialBudgetData } from '../budgetUtils'; -import { toast } from '@/components/ui/use-toast'; +import { toast } from '@/hooks/useToast.wrapper'; /** * 모든 데이터 초기화 (첫 로그인 상태) @@ -60,12 +60,17 @@ export const resetAllData = (): void => { localStorage.setItem('categoryBudgets_backup', JSON.stringify(DEFAULT_CATEGORY_BUDGETS)); localStorage.setItem('transactions_backup', JSON.stringify([])); - // 이벤트 발생시켜 데이터 로드 트리거 + // 이벤트 발생시켜 데이터 로드 트리거 - 이벤트 순서 최적화 try { - window.dispatchEvent(new Event('transactionUpdated')); - window.dispatchEvent(new Event('budgetDataUpdated')); - window.dispatchEvent(new Event('categoryBudgetsUpdated')); - window.dispatchEvent(new StorageEvent('storage')); + // 한 번에 모든 이벤트 발생 + const events = [ + new Event('transactionUpdated'), + new Event('budgetDataUpdated'), + new Event('categoryBudgetsUpdated'), + new StorageEvent('storage') + ]; + + events.forEach(event => window.dispatchEvent(event)); } catch (e) { console.error('이벤트 발생 오류:', e); } diff --git a/src/hooks/useDataReset.ts b/src/hooks/useDataReset.ts index 5276612..2fc60df 100644 --- a/src/hooks/useDataReset.ts +++ b/src/hooks/useDataReset.ts @@ -124,8 +124,8 @@ export const useDataReset = () => { console.log('모든 데이터 초기화 완료'); - // 초기화 후 설정 페이지로 이동 (타임아웃으로 약간 지연) - setTimeout(() => navigate('/settings'), 500); + // 페이지 리프레시 대신 navigate 사용 (딜레이 제거) + navigate('/settings', { replace: true }); return { isCloudResetSuccess: cloudResetSuccess }; } catch (error) { diff --git a/src/utils/storageUtils.ts b/src/utils/storageUtils.ts index de26796..b670065 100644 --- a/src/utils/storageUtils.ts +++ b/src/utils/storageUtils.ts @@ -103,35 +103,34 @@ export const resetAllStorageData = (): void => { 'syncEnabled', // 동기화 설정도 초기화 ]; - // 키 삭제 + // 키 동시에 삭제 (성능 최적화) keysToRemove.forEach(key => { console.log(`삭제 중: ${key}`); localStorage.removeItem(key); + localStorage.removeItem(`${key}_backup`); // 백업 키도 함께 삭제 }); - // 백업 키도 삭제 - keysToRemove.forEach(key => { - localStorage.removeItem(`${key}_backup`); + // 기본값으로 초기화 - 한번에 처리 + const defaultData = { + transactions: JSON.stringify([]), + budgetData: JSON.stringify({ + daily: {targetAmount: 0, spentAmount: 0, remainingAmount: 0}, + weekly: {targetAmount: 0, spentAmount: 0, remainingAmount: 0}, + monthly: {targetAmount: 0, spentAmount: 0, remainingAmount: 0} + }), + categoryBudgets: JSON.stringify({ + 식비: 0, + 교통비: 0, + 생활비: 0 + }) + }; + + // 모든 기본값 한번에 설정 + Object.entries(defaultData).forEach(([key, value]) => { + localStorage.setItem(key, value); + localStorage.setItem(`${key}_backup`, value); }); - // 기본값으로 초기화 - localStorage.setItem('transactions', JSON.stringify([])); - localStorage.setItem('budgetData', JSON.stringify({ - daily: {targetAmount: 0, spentAmount: 0, remainingAmount: 0}, - weekly: {targetAmount: 0, spentAmount: 0, remainingAmount: 0}, - monthly: {targetAmount: 0, spentAmount: 0, remainingAmount: 0} - })); - localStorage.setItem('categoryBudgets', JSON.stringify({ - 식비: 0, - 교통비: 0, - 생활비: 0 - })); - - // 백업 생성 - localStorage.setItem('transactions_backup', JSON.stringify([])); - localStorage.setItem('budgetData_backup', localStorage.getItem('budgetData') || ''); - localStorage.setItem('categoryBudgets_backup', localStorage.getItem('categoryBudgets') || ''); - // 사용자 설정 값 복원 if (dontShowWelcomeValue) { localStorage.setItem('dontShowWelcome', dontShowWelcomeValue); @@ -158,12 +157,16 @@ export const resetAllStorageData = (): void => { localStorage.setItem('syncEnabled', 'false'); console.log('동기화 설정이 OFF로 변경되었습니다'); - // 이벤트 발생 - window.dispatchEvent(new Event('transactionUpdated')); - window.dispatchEvent(new Event('budgetDataUpdated')); - window.dispatchEvent(new Event('categoryBudgetsUpdated')); - window.dispatchEvent(new StorageEvent('storage')); - window.dispatchEvent(new Event('auth-state-changed')); // 동기화 상태 변경 이벤트 추가 + // 모든 이벤트 한 번에 발생 (성능 최적화) + const events = [ + new Event('transactionUpdated'), + new Event('budgetDataUpdated'), + new Event('categoryBudgetsUpdated'), + new StorageEvent('storage'), + new Event('auth-state-changed') + ]; + + events.forEach(event => window.dispatchEvent(event)); console.log('모든 저장소 데이터가 완전히 초기화되었습니다. (동기화 설정이 OFF로 변경됨)'); } catch (error) {