Fix toast and data reset issues

- Resolved issue where budget creation toast appeared before expense creation toast.
- Fixed data reset causing a redirect to the login screen.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-16 09:13:08 +00:00
parent 468bb79c9e
commit 7ab79d125e
6 changed files with 213 additions and 240 deletions

View File

@@ -1,7 +1,8 @@
import React, { useState } from 'react';
import { Trash2 } from 'lucide-react';
import { Button } from '@/components/ui/button';
import { useToast } from '@/hooks/use-toast';
import { useToast } from '@/hooks/useToast.wrapper';
import { useNavigate } from 'react-router-dom';
import { resetAllStorageData } from '@/utils/storageUtils';
import {
@@ -16,20 +17,38 @@ import {
const DataResetSection = () => {
const [isResetDialogOpen, setIsResetDialogOpen] = useState(false);
const [isResetting, setIsResetting] = useState(false);
const { toast } = useToast();
const navigate = useNavigate();
const handleResetAllData = () => {
// 데이터 초기화 수행
try {
setIsResetting(true);
console.log('모든 데이터 초기화 시작');
// 초기화 실행 전에 사용자 설정 백업
const dontShowWelcomeValue = localStorage.getItem('dontShowWelcome');
const hasVisitedBefore = localStorage.getItem('hasVisitedBefore');
// 로그인 관련 설정도 백업
const authSession = localStorage.getItem('authSession');
const sb_auth = localStorage.getItem('sb-auth-token');
// 로그인 관련 설정 백업 (supabase 관련 모든 설정)
const authBackupItems: Record<string, string | null> = {};
// 로그인 관련 항목 수집
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
if (key && (
key.includes('supabase') ||
key.includes('auth') ||
key.includes('sb-') ||
key.includes('token') ||
key.includes('user') ||
key.includes('session')
)) {
authBackupItems[key] = localStorage.getItem(key);
console.log(`백업 항목: ${key}`);
}
}
// 데이터 초기화
resetAllStorageData();
@@ -44,13 +63,12 @@ const DataResetSection = () => {
}
// 로그인 관련 설정 복원 (로그인 화면이 나타나지 않도록)
if (authSession) {
localStorage.setItem('authSession', authSession);
}
if (sb_auth) {
localStorage.setItem('sb-auth-token', sb_auth);
}
Object.entries(authBackupItems).forEach(([key, value]) => {
if (value) {
localStorage.setItem(key, value);
console.log(`복원 항목: ${key}`);
}
});
// 스토리지 이벤트 트리거하여 다른 컴포넌트에 변경 알림
window.dispatchEvent(new Event('transactionUpdated'));
@@ -58,22 +76,28 @@ const DataResetSection = () => {
window.dispatchEvent(new Event('categoryBudgetsUpdated'));
window.dispatchEvent(new StorageEvent('storage'));
toast({
title: "모든 데이터가 초기화되었습니다.",
description: "모든 예산, 지출 내역, 설정이 초기화되었습니다.",
});
setIsResetDialogOpen(false);
console.log('모든 데이터 초기화 완료');
// 초기화 후 설정 페이지로 이동
setTimeout(() => navigate('/settings'), 1000);
setTimeout(() => {
toast({
title: "모든 데이터가 초기화되었습니다.",
description: "모든 예산, 지출 내역, 설정이 초기화되었습니다.",
duration: 3000
});
setIsResetDialogOpen(false);
console.log('모든 데이터 초기화 완료');
// 초기화 후 설정 페이지로 이동
setTimeout(() => navigate('/settings'), 500);
}, 500);
} catch (error) {
console.error('데이터 초기화 실패:', error);
toast({
title: "데이터 초기화 실패",
description: "데이터를 초기화하는 중 문제가 발생했습니다.",
variant: "destructive",
duration: 4000
});
} finally {
setIsResetting(false);
}
};
@@ -93,6 +117,7 @@ const DataResetSection = () => {
variant="destructive"
className="w-full mt-4"
onClick={() => setIsResetDialogOpen(true)}
disabled={isResetting}
>
</Button>
@@ -110,13 +135,19 @@ const DataResetSection = () => {
</DialogHeader>
<DialogFooter className="flex flex-col sm:flex-row gap-2 sm:gap-0">
<DialogClose asChild>
<Button variant="outline" className="sm:mr-2"></Button>
<Button variant="outline" className="sm:mr-2" disabled={isResetting}></Button>
</DialogClose>
<Button
variant="destructive"
onClick={handleResetAllData}
disabled={isResetting}
>
,
{isResetting ? (
<>
<Loader2 className="mr-2 h-4 w-4 animate-spin" />
...
</>
) : '확인, 모든 데이터 초기화'}
</Button>
</DialogFooter>
</DialogContent>