Improve data reset flow

The settings page was reloading slowly after a data reset. This commit addresses the issue by preventing the unnecessary reload after the reset operation.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-18 02:07:27 +00:00
parent 00727c8ab6
commit 0be5154e02
4 changed files with 46 additions and 46 deletions

View File

@@ -18,16 +18,8 @@ const DataResetSection = () => {
await resetAllData();
setIsResetDialogOpen(false);
// 알림 표시
toast({
title: "데이터 초기화 완료",
description: "모든 데이터가 초기화되었습니다.",
});
// 초기화 후 페이지 새로고침
setTimeout(() => {
window.location.reload();
}, 1000);
// toast 알림은 useDataReset.ts에서 처리하므로 여기서는 제거
// 페이지 새로고침 코드 제거 (navigate 사용으로 대체)
};
return (

View File

@@ -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);
}

View File

@@ -124,8 +124,8 @@ export const useDataReset = () => {
console.log('모든 데이터 초기화 완료');
// 초기화 후 설정 페이지로 이동 (타임아웃으로 약간 지연)
setTimeout(() => navigate('/settings'), 500);
// 페이지 리프레시 대신 navigate 사용 (딜레이 제거)
navigate('/settings', { replace: true });
return { isCloudResetSuccess: cloudResetSuccess };
} catch (error) {

View File

@@ -103,34 +103,33 @@ 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`);
});
// 기본값으로 초기화
localStorage.setItem('transactions', JSON.stringify([]));
localStorage.setItem('budgetData', JSON.stringify({
// 기본값으로 초기화 - 한번에 처리
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}
}));
localStorage.setItem('categoryBudgets', JSON.stringify({
}),
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') || '');
// 모든 기본값 한번에 설정
Object.entries(defaultData).forEach(([key, value]) => {
localStorage.setItem(key, value);
localStorage.setItem(`${key}_backup`, value);
});
// 사용자 설정 값 복원
if (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) {