Ensure sync is disabled

The sync setting was not consistently being disabled in certain scenarios. This change ensures that the sync setting is properly disabled when expected.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-18 01:48:38 +00:00
parent dfb9d8ca69
commit 043db23836
5 changed files with 59 additions and 25 deletions

View File

@@ -1,11 +1,12 @@
import React from 'react'; import React, { useEffect } from 'react';
import { Switch } from "@/components/ui/switch"; import { Switch } from "@/components/ui/switch";
import { Label } from "@/components/ui/label"; import { Label } from "@/components/ui/label";
import { CloudUpload } from "lucide-react"; import { CloudUpload } from "lucide-react";
import { useSyncSettings } from '@/hooks/useSyncSettings'; import { useSyncSettings } from '@/hooks/useSyncSettings';
import SyncStatus from '@/components/sync/SyncStatus'; import SyncStatus from '@/components/sync/SyncStatus';
import SyncExplanation from '@/components/sync/SyncExplanation'; import SyncExplanation from '@/components/sync/SyncExplanation';
import { isSyncEnabled } from '@/utils/sync/syncSettings';
const SyncSettings = () => { const SyncSettings = () => {
const { const {
@@ -17,6 +18,30 @@ const SyncSettings = () => {
handleManualSync handleManualSync
} = useSyncSettings(); } = useSyncSettings();
// 동기화 설정 변경 모니터링
useEffect(() => {
const checkSyncStatus = () => {
const currentStatus = isSyncEnabled();
console.log('현재 동기화 상태:', currentStatus ? '활성화됨' : '비활성화됨');
};
// 초기 상태 확인
checkSyncStatus();
// 스토리지 변경 이벤트에도 동기화 상태 확인 추가
const handleStorageChange = () => {
checkSyncStatus();
};
window.addEventListener('storage', handleStorageChange);
window.addEventListener('auth-state-changed', handleStorageChange);
return () => {
window.removeEventListener('storage', handleStorageChange);
window.removeEventListener('auth-state-changed', handleStorageChange);
};
}, []);
return ( return (
<div className="space-y-6"> <div className="space-y-6">
{/* 동기화 토글 컨트롤 */} {/* 동기화 토글 컨트롤 */}

View File

@@ -16,6 +16,11 @@ const DataResetSection = () => {
const handleResetAllData = async () => { const handleResetAllData = async () => {
await resetAllData(); await resetAllData();
setIsResetDialogOpen(false); setIsResetDialogOpen(false);
// 초기화 후 페이지 새로고침
setTimeout(() => {
window.location.reload();
}, 1000);
}; };
return ( return (
@@ -29,9 +34,7 @@ const DataResetSection = () => {
<h3 className="font-medium"> </h3> <h3 className="font-medium"> </h3>
<p className="text-xs text-gray-500 mt-1"> <p className="text-xs text-gray-500 mt-1">
{user {user
? syncEnabled ? "로컬 및 클라우드의 모든 예산, 지출 내역이 초기화됩니다. 동기화 설정은 비활성화됩니다."
? "로컬 및 클라우드의 모든 예산, 지출 내역이 초기화됩니다. 동기화 설정은 유지됩니다."
: "로컬 및 클라우드의 모든 예산, 지출 내역이 초기화됩니다."
: "모든 예산, 지출 내역, 설정이 초기화됩니다."} : "모든 예산, 지출 내역, 설정이 초기화됩니다."}
</p> </p>
</div> </div>

View File

@@ -36,8 +36,19 @@ export const useSyncToggle = () => {
// 인증 상태 변경 이벤트 리스너 // 인증 상태 변경 이벤트 리스너
window.addEventListener('auth-state-changed', updateSyncState); window.addEventListener('auth-state-changed', updateSyncState);
// 스토리지 변경 이벤트에도 동기화 상태 확인 추가
const handleStorageChange = (event: StorageEvent) => {
if (event.key === 'syncEnabled' || event.key === null) {
setEnabled(isSyncEnabled());
console.log('스토리지 변경으로 동기화 상태 업데이트:', isSyncEnabled() ? '활성화' : '비활성화');
}
};
window.addEventListener('storage', handleStorageChange);
return () => { return () => {
window.removeEventListener('auth-state-changed', updateSyncState); window.removeEventListener('auth-state-changed', updateSyncState);
window.removeEventListener('storage', handleStorageChange);
}; };
}, [user]); }, [user]);
@@ -66,6 +77,9 @@ export const useSyncToggle = () => {
setEnabled(checked); setEnabled(checked);
setSyncEnabled(checked); setSyncEnabled(checked);
// 이벤트 트리거
window.dispatchEvent(new Event('auth-state-changed'));
if (checked && user) { if (checked && user) {
try { try {
// 동기화 활성화 시 즉시 동기화 실행 // 동기화 활성화 시 즉시 동기화 실행

View File

@@ -3,9 +3,9 @@ import { useState } from 'react';
import { useNavigate } from 'react-router-dom'; import { useNavigate } from 'react-router-dom';
import { useToast } from '@/hooks/useToast.wrapper'; import { useToast } from '@/hooks/useToast.wrapper';
import { resetAllStorageData } from '@/utils/storageUtils'; import { resetAllStorageData } from '@/utils/storageUtils';
import { clearCloudData } from '@/utils/syncUtils'; import { clearCloudData } from '@/utils/sync/clearCloudData';
import { useAuth } from '@/contexts/auth/AuthProvider'; import { useAuth } from '@/contexts/auth/AuthProvider';
import { isSyncEnabled } from '@/utils/sync/syncSettings'; import { isSyncEnabled, setSyncEnabled } from '@/utils/sync/syncSettings';
export interface DataResetResult { export interface DataResetResult {
isCloudResetSuccess: boolean | null; isCloudResetSuccess: boolean | null;
@@ -36,8 +36,6 @@ export const useDataReset = () => {
if (cloudResetSuccess) { if (cloudResetSuccess) {
console.log('클라우드 데이터 초기화 성공'); console.log('클라우드 데이터 초기화 성공');
// 주석 처리 - 동기화 설정 유지
// setSyncEnabled(false);
} else { } else {
console.warn('클라우드 데이터 초기화 실패 또는 부분 성공'); console.warn('클라우드 데이터 초기화 실패 또는 부분 성공');
} }
@@ -69,12 +67,6 @@ export const useDataReset = () => {
} }
} }
// 동기화 설정 백업
if (syncWasEnabled) {
authBackupItems['syncEnabled'] = 'true';
console.log('동기화 설정 백업: 활성화 상태');
}
// 데이터 초기화 // 데이터 초기화
resetAllStorageData(); resetAllStorageData();
@@ -95,11 +87,9 @@ export const useDataReset = () => {
} }
}); });
// 동기화 설정 복원 // 중요: 동기화 설정은 초기화 후 항상 비활성화
if (syncWasEnabled) { setSyncEnabled(false);
localStorage.setItem('syncEnabled', 'true'); console.log('동기화 설정이 비활성화되었습니다.');
console.log('동기화 설정 복원: 활성화 상태');
}
// 마지막 동기화 시간은 초기화 // 마지막 동기화 시간은 초기화
localStorage.removeItem('lastSync'); localStorage.removeItem('lastSync');
@@ -109,20 +99,19 @@ export const useDataReset = () => {
window.dispatchEvent(new Event('budgetDataUpdated')); window.dispatchEvent(new Event('budgetDataUpdated'));
window.dispatchEvent(new Event('categoryBudgetsUpdated')); window.dispatchEvent(new Event('categoryBudgetsUpdated'));
window.dispatchEvent(new StorageEvent('storage')); window.dispatchEvent(new StorageEvent('storage'));
window.dispatchEvent(new Event('auth-state-changed')); // 동기화 상태 변경 이벤트 추가
// 클라우드 초기화 상태에 따라 다른 메시지 표시 // 클라우드 초기화 상태에 따라 다른 메시지 표시
if (user) { if (user) {
if (cloudResetSuccess) { if (cloudResetSuccess) {
toast({ toast({
title: "모든 데이터가 초기화되었습니다.", title: "모든 데이터가 초기화되었습니다.",
description: syncWasEnabled description: "로컬 및 클라우드의 모든 데이터가 초기화되었으며, 동기화 설정이 비활성화되었습니다.",
? "로컬 및 클라우드의 모든 데이터가 초기화되었습니다. 동기화 설정은 유지됩니다."
: "로컬 및 클라우드의 모든 데이터가 초기화되었습니다.",
}); });
} else { } else {
toast({ toast({
title: "로컬 데이터만 초기화됨", title: "로컬 데이터만 초기화됨",
description: "로컬 데이터는 초기화되었지만, 클라우드 데이터 초기화 중 문제가 발생했습니다.", description: "로컬 데이터는 초기화되었지만, 클라우드 데이터 초기화 중 문제가 발생했습니다. 동기화 설정이 비활성화되었습니다.",
variant: "destructive" variant: "destructive"
}); });
} }

View File

@@ -1,3 +1,4 @@
import { Transaction } from '@/components/TransactionCard'; import { Transaction } from '@/components/TransactionCard';
// 트랜잭션 데이터 불러오기 // 트랜잭션 데이터 불러오기
@@ -99,7 +100,7 @@ export const resetAllStorageData = (): void => {
'budgetHistory', 'budgetHistory',
'transactionHistory', 'transactionHistory',
'lastSync', 'lastSync',
'syncEnabled', // 동기화 설정도 초기화 (변경된 부분) 'syncEnabled', // 동기화 설정도 초기화
]; ];
// 키 삭제 // 키 삭제
@@ -153,14 +154,16 @@ export const resetAllStorageData = (): void => {
localStorage.setItem('supabase.auth.token', supabase); localStorage.setItem('supabase.auth.token', supabase);
} }
// 동기화 설정은 OFF로 설정 (변경된 부분) // 동기화 설정은 무조건 OFF로 설정
localStorage.setItem('syncEnabled', 'false'); localStorage.setItem('syncEnabled', 'false');
console.log('동기화 설정이 OFF로 변경되었습니다');
// 이벤트 발생 // 이벤트 발생
window.dispatchEvent(new Event('transactionUpdated')); window.dispatchEvent(new Event('transactionUpdated'));
window.dispatchEvent(new Event('budgetDataUpdated')); window.dispatchEvent(new Event('budgetDataUpdated'));
window.dispatchEvent(new Event('categoryBudgetsUpdated')); window.dispatchEvent(new Event('categoryBudgetsUpdated'));
window.dispatchEvent(new StorageEvent('storage')); window.dispatchEvent(new StorageEvent('storage'));
window.dispatchEvent(new Event('auth-state-changed')); // 동기화 상태 변경 이벤트 추가
console.log('모든 저장소 데이터가 완전히 초기화되었습니다. (동기화 설정이 OFF로 변경됨)'); console.log('모든 저장소 데이터가 완전히 초기화되었습니다. (동기화 설정이 OFF로 변경됨)');
} catch (error) { } catch (error) {