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:
@@ -18,16 +18,8 @@ const DataResetSection = () => {
|
||||
await resetAllData();
|
||||
setIsResetDialogOpen(false);
|
||||
|
||||
// 알림 표시
|
||||
toast({
|
||||
title: "데이터 초기화 완료",
|
||||
description: "모든 데이터가 초기화되었습니다.",
|
||||
});
|
||||
|
||||
// 초기화 후 페이지 새로고침
|
||||
setTimeout(() => {
|
||||
window.location.reload();
|
||||
}, 1000);
|
||||
// toast 알림은 useDataReset.ts에서 처리하므로 여기서는 제거
|
||||
// 페이지 새로고침 코드 제거 (navigate 사용으로 대체)
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -124,8 +124,8 @@ export const useDataReset = () => {
|
||||
|
||||
console.log('모든 데이터 초기화 완료');
|
||||
|
||||
// 초기화 후 설정 페이지로 이동 (타임아웃으로 약간 지연)
|
||||
setTimeout(() => navigate('/settings'), 500);
|
||||
// 페이지 리프레시 대신 navigate 사용 (딜레이 제거)
|
||||
navigate('/settings', { replace: true });
|
||||
|
||||
return { isCloudResetSuccess: cloudResetSuccess };
|
||||
} catch (error) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user