From 043db238362fed76624af091954ac6ceea1374dc Mon Sep 17 00:00:00 2001
From: "gpt-engineer-app[bot]"
<159125892+gpt-engineer-app[bot]@users.noreply.github.com>
Date: Tue, 18 Mar 2025 01:48:38 +0000
Subject: [PATCH] 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.
---
src/components/SyncSettings.tsx | 27 +++++++++++++++++++-
src/components/security/DataResetSection.tsx | 9 ++++---
src/hooks/sync/useSyncToggle.ts | 14 ++++++++++
src/hooks/useDataReset.ts | 27 ++++++--------------
src/utils/storageUtils.ts | 7 +++--
5 files changed, 59 insertions(+), 25 deletions(-)
diff --git a/src/components/SyncSettings.tsx b/src/components/SyncSettings.tsx
index 53efaec..0922eae 100644
--- a/src/components/SyncSettings.tsx
+++ b/src/components/SyncSettings.tsx
@@ -1,11 +1,12 @@
-import React from 'react';
+import React, { useEffect } from 'react';
import { Switch } from "@/components/ui/switch";
import { Label } from "@/components/ui/label";
import { CloudUpload } from "lucide-react";
import { useSyncSettings } from '@/hooks/useSyncSettings';
import SyncStatus from '@/components/sync/SyncStatus';
import SyncExplanation from '@/components/sync/SyncExplanation';
+import { isSyncEnabled } from '@/utils/sync/syncSettings';
const SyncSettings = () => {
const {
@@ -17,6 +18,30 @@ const SyncSettings = () => {
handleManualSync
} = 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 (
{/* 동기화 토글 컨트롤 */}
diff --git a/src/components/security/DataResetSection.tsx b/src/components/security/DataResetSection.tsx
index adad37d..dfa72f2 100644
--- a/src/components/security/DataResetSection.tsx
+++ b/src/components/security/DataResetSection.tsx
@@ -16,6 +16,11 @@ const DataResetSection = () => {
const handleResetAllData = async () => {
await resetAllData();
setIsResetDialogOpen(false);
+
+ // 초기화 후 페이지 새로고침
+ setTimeout(() => {
+ window.location.reload();
+ }, 1000);
};
return (
@@ -29,9 +34,7 @@ const DataResetSection = () => {
데이터 초기화
{user
- ? syncEnabled
- ? "로컬 및 클라우드의 모든 예산, 지출 내역이 초기화됩니다. 동기화 설정은 유지됩니다."
- : "로컬 및 클라우드의 모든 예산, 지출 내역이 초기화됩니다."
+ ? "로컬 및 클라우드의 모든 예산, 지출 내역이 초기화됩니다. 동기화 설정은 비활성화됩니다."
: "모든 예산, 지출 내역, 설정이 초기화됩니다."}
diff --git a/src/hooks/sync/useSyncToggle.ts b/src/hooks/sync/useSyncToggle.ts
index d75a81b..287c489 100644
--- a/src/hooks/sync/useSyncToggle.ts
+++ b/src/hooks/sync/useSyncToggle.ts
@@ -36,8 +36,19 @@ export const useSyncToggle = () => {
// 인증 상태 변경 이벤트 리스너
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 () => {
window.removeEventListener('auth-state-changed', updateSyncState);
+ window.removeEventListener('storage', handleStorageChange);
};
}, [user]);
@@ -66,6 +77,9 @@ export const useSyncToggle = () => {
setEnabled(checked);
setSyncEnabled(checked);
+ // 이벤트 트리거
+ window.dispatchEvent(new Event('auth-state-changed'));
+
if (checked && user) {
try {
// 동기화 활성화 시 즉시 동기화 실행
diff --git a/src/hooks/useDataReset.ts b/src/hooks/useDataReset.ts
index 7d98fc3..5276612 100644
--- a/src/hooks/useDataReset.ts
+++ b/src/hooks/useDataReset.ts
@@ -3,9 +3,9 @@ import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import { useToast } from '@/hooks/useToast.wrapper';
import { resetAllStorageData } from '@/utils/storageUtils';
-import { clearCloudData } from '@/utils/syncUtils';
+import { clearCloudData } from '@/utils/sync/clearCloudData';
import { useAuth } from '@/contexts/auth/AuthProvider';
-import { isSyncEnabled } from '@/utils/sync/syncSettings';
+import { isSyncEnabled, setSyncEnabled } from '@/utils/sync/syncSettings';
export interface DataResetResult {
isCloudResetSuccess: boolean | null;
@@ -36,8 +36,6 @@ export const useDataReset = () => {
if (cloudResetSuccess) {
console.log('클라우드 데이터 초기화 성공');
- // 주석 처리 - 동기화 설정 유지
- // setSyncEnabled(false);
} else {
console.warn('클라우드 데이터 초기화 실패 또는 부분 성공');
}
@@ -69,12 +67,6 @@ export const useDataReset = () => {
}
}
- // 동기화 설정 백업
- if (syncWasEnabled) {
- authBackupItems['syncEnabled'] = 'true';
- console.log('동기화 설정 백업: 활성화 상태');
- }
-
// 데이터 초기화
resetAllStorageData();
@@ -95,11 +87,9 @@ export const useDataReset = () => {
}
});
- // 동기화 설정 복원
- if (syncWasEnabled) {
- localStorage.setItem('syncEnabled', 'true');
- console.log('동기화 설정 복원: 활성화 상태');
- }
+ // 중요: 동기화 설정은 초기화 후 항상 비활성화
+ setSyncEnabled(false);
+ console.log('동기화 설정이 비활성화되었습니다.');
// 마지막 동기화 시간은 초기화
localStorage.removeItem('lastSync');
@@ -109,20 +99,19 @@ export const useDataReset = () => {
window.dispatchEvent(new Event('budgetDataUpdated'));
window.dispatchEvent(new Event('categoryBudgetsUpdated'));
window.dispatchEvent(new StorageEvent('storage'));
+ window.dispatchEvent(new Event('auth-state-changed')); // 동기화 상태 변경 이벤트 추가
// 클라우드 초기화 상태에 따라 다른 메시지 표시
if (user) {
if (cloudResetSuccess) {
toast({
title: "모든 데이터가 초기화되었습니다.",
- description: syncWasEnabled
- ? "로컬 및 클라우드의 모든 데이터가 초기화되었습니다. 동기화 설정은 유지됩니다."
- : "로컬 및 클라우드의 모든 데이터가 초기화되었습니다.",
+ description: "로컬 및 클라우드의 모든 데이터가 초기화되었으며, 동기화 설정이 비활성화되었습니다.",
});
} else {
toast({
title: "로컬 데이터만 초기화됨",
- description: "로컬 데이터는 초기화되었지만, 클라우드 데이터 초기화 중 문제가 발생했습니다.",
+ description: "로컬 데이터는 초기화되었지만, 클라우드 데이터 초기화 중 문제가 발생했습니다. 동기화 설정이 비활성화되었습니다.",
variant: "destructive"
});
}
diff --git a/src/utils/storageUtils.ts b/src/utils/storageUtils.ts
index 0ec7fc8..de26796 100644
--- a/src/utils/storageUtils.ts
+++ b/src/utils/storageUtils.ts
@@ -1,3 +1,4 @@
+
import { Transaction } from '@/components/TransactionCard';
// 트랜잭션 데이터 불러오기
@@ -99,7 +100,7 @@ export const resetAllStorageData = (): void => {
'budgetHistory',
'transactionHistory',
'lastSync',
- 'syncEnabled', // 동기화 설정도 초기화 (변경된 부분)
+ 'syncEnabled', // 동기화 설정도 초기화
];
// 키 삭제
@@ -153,14 +154,16 @@ export const resetAllStorageData = (): void => {
localStorage.setItem('supabase.auth.token', supabase);
}
- // 동기화 설정은 OFF로 설정 (변경된 부분)
+ // 동기화 설정은 무조건 OFF로 설정
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')); // 동기화 상태 변경 이벤트 추가
console.log('모든 저장소 데이터가 완전히 초기화되었습니다. (동기화 설정이 OFF로 변경됨)');
} catch (error) {