Retain sync setting on reset
After data reset, the sync setting should remain in its previous state (On or Off) instead of always defaulting to Off.
This commit is contained in:
@@ -18,6 +18,7 @@ interface DataResetDialogProps {
|
|||||||
onConfirm: () => Promise<void>;
|
onConfirm: () => Promise<void>;
|
||||||
isResetting: boolean;
|
isResetting: boolean;
|
||||||
isLoggedIn: boolean;
|
isLoggedIn: boolean;
|
||||||
|
syncEnabled: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
const DataResetDialog: React.FC<DataResetDialogProps> = ({
|
const DataResetDialog: React.FC<DataResetDialogProps> = ({
|
||||||
@@ -25,7 +26,8 @@ const DataResetDialog: React.FC<DataResetDialogProps> = ({
|
|||||||
onOpenChange,
|
onOpenChange,
|
||||||
onConfirm,
|
onConfirm,
|
||||||
isResetting,
|
isResetting,
|
||||||
isLoggedIn
|
isLoggedIn,
|
||||||
|
syncEnabled
|
||||||
}) => {
|
}) => {
|
||||||
return (
|
return (
|
||||||
<Dialog open={isOpen} onOpenChange={onOpenChange}>
|
<Dialog open={isOpen} onOpenChange={onOpenChange}>
|
||||||
@@ -40,6 +42,11 @@ const DataResetDialog: React.FC<DataResetDialogProps> = ({
|
|||||||
<CloudOff size={16} className="mr-2" />
|
<CloudOff size={16} className="mr-2" />
|
||||||
클라우드 데이터도 함께 삭제됩니다.
|
클라우드 데이터도 함께 삭제됩니다.
|
||||||
</div>
|
</div>
|
||||||
|
{syncEnabled && (
|
||||||
|
<div className="mt-2 text-neuro-income">
|
||||||
|
동기화 설정은 계속 활성화 상태로 유지됩니다.
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</>
|
</>
|
||||||
) : (
|
) : (
|
||||||
"이 작업은 되돌릴 수 없으며, 모든 예산, 지출 내역, 설정이 영구적으로 삭제됩니다."
|
"이 작업은 되돌릴 수 없으며, 모든 예산, 지출 내역, 설정이 영구적으로 삭제됩니다."
|
||||||
|
|||||||
@@ -5,11 +5,13 @@ import { Button } from '@/components/ui/button';
|
|||||||
import { useAuth } from '@/contexts/auth/AuthProvider';
|
import { useAuth } from '@/contexts/auth/AuthProvider';
|
||||||
import { useDataReset } from '@/hooks/useDataReset';
|
import { useDataReset } from '@/hooks/useDataReset';
|
||||||
import DataResetDialog from './DataResetDialog';
|
import DataResetDialog from './DataResetDialog';
|
||||||
|
import { isSyncEnabled } from '@/utils/sync/syncSettings';
|
||||||
|
|
||||||
const DataResetSection = () => {
|
const DataResetSection = () => {
|
||||||
const [isResetDialogOpen, setIsResetDialogOpen] = useState(false);
|
const [isResetDialogOpen, setIsResetDialogOpen] = useState(false);
|
||||||
const { user } = useAuth();
|
const { user } = useAuth();
|
||||||
const { isResetting, resetAllData } = useDataReset();
|
const { isResetting, resetAllData } = useDataReset();
|
||||||
|
const syncEnabled = isSyncEnabled();
|
||||||
|
|
||||||
const handleResetAllData = async () => {
|
const handleResetAllData = async () => {
|
||||||
await resetAllData();
|
await resetAllData();
|
||||||
@@ -26,7 +28,11 @@ const DataResetSection = () => {
|
|||||||
<div className="text-left">
|
<div className="text-left">
|
||||||
<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>
|
||||||
</div>
|
</div>
|
||||||
@@ -46,6 +52,7 @@ const DataResetSection = () => {
|
|||||||
onConfirm={handleResetAllData}
|
onConfirm={handleResetAllData}
|
||||||
isResetting={isResetting}
|
isResetting={isResetting}
|
||||||
isLoggedIn={!!user}
|
isLoggedIn={!!user}
|
||||||
|
syncEnabled={syncEnabled}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ 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/syncUtils';
|
||||||
import { useAuth } from '@/contexts/auth/AuthProvider';
|
import { useAuth } from '@/contexts/auth/AuthProvider';
|
||||||
import { setSyncEnabled } from '@/utils/sync/syncSettings';
|
import { isSyncEnabled } from '@/utils/sync/syncSettings';
|
||||||
|
|
||||||
export interface DataResetResult {
|
export interface DataResetResult {
|
||||||
isCloudResetSuccess: boolean | null;
|
isCloudResetSuccess: boolean | null;
|
||||||
@@ -23,6 +23,10 @@ export const useDataReset = () => {
|
|||||||
setIsResetting(true);
|
setIsResetting(true);
|
||||||
console.log('모든 데이터 초기화 시작');
|
console.log('모든 데이터 초기화 시작');
|
||||||
|
|
||||||
|
// 현재 동기화 설정 저장
|
||||||
|
const syncWasEnabled = isSyncEnabled();
|
||||||
|
console.log('데이터 초기화 전 동기화 상태:', syncWasEnabled ? '활성화' : '비활성화');
|
||||||
|
|
||||||
// 클라우드 데이터 초기화 먼저 시도 (로그인 상태인 경우)
|
// 클라우드 데이터 초기화 먼저 시도 (로그인 상태인 경우)
|
||||||
let cloudResetSuccess = false;
|
let cloudResetSuccess = false;
|
||||||
if (user) {
|
if (user) {
|
||||||
@@ -32,8 +36,8 @@ export const useDataReset = () => {
|
|||||||
|
|
||||||
if (cloudResetSuccess) {
|
if (cloudResetSuccess) {
|
||||||
console.log('클라우드 데이터 초기화 성공');
|
console.log('클라우드 데이터 초기화 성공');
|
||||||
// 동기화 비활성화 (중요: 초기화 후 자동 동기화 방지)
|
// 주석 처리 - 동기화 설정 유지
|
||||||
setSyncEnabled(false);
|
// setSyncEnabled(false);
|
||||||
} else {
|
} else {
|
||||||
console.warn('클라우드 데이터 초기화 실패 또는 부분 성공');
|
console.warn('클라우드 데이터 초기화 실패 또는 부분 성공');
|
||||||
}
|
}
|
||||||
@@ -65,6 +69,12 @@ export const useDataReset = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 동기화 설정 백업
|
||||||
|
if (syncWasEnabled) {
|
||||||
|
authBackupItems['syncEnabled'] = 'true';
|
||||||
|
console.log('동기화 설정 백업: 활성화 상태');
|
||||||
|
}
|
||||||
|
|
||||||
// 데이터 초기화
|
// 데이터 초기화
|
||||||
resetAllStorageData();
|
resetAllStorageData();
|
||||||
|
|
||||||
@@ -85,12 +95,15 @@ export const useDataReset = () => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// 동기화 설정 초기화
|
// 동기화 설정 복원
|
||||||
if (user) {
|
if (syncWasEnabled) {
|
||||||
localStorage.removeItem('lastSync');
|
localStorage.setItem('syncEnabled', 'true');
|
||||||
localStorage.setItem('syncEnabled', 'false');
|
console.log('동기화 설정 복원: 활성화 상태');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 마지막 동기화 시간은 초기화
|
||||||
|
localStorage.removeItem('lastSync');
|
||||||
|
|
||||||
// 스토리지 이벤트 트리거하여 다른 컴포넌트에 변경 알림
|
// 스토리지 이벤트 트리거하여 다른 컴포넌트에 변경 알림
|
||||||
window.dispatchEvent(new Event('transactionUpdated'));
|
window.dispatchEvent(new Event('transactionUpdated'));
|
||||||
window.dispatchEvent(new Event('budgetDataUpdated'));
|
window.dispatchEvent(new Event('budgetDataUpdated'));
|
||||||
@@ -102,7 +115,9 @@ export const useDataReset = () => {
|
|||||||
if (cloudResetSuccess) {
|
if (cloudResetSuccess) {
|
||||||
toast({
|
toast({
|
||||||
title: "모든 데이터가 초기화되었습니다.",
|
title: "모든 데이터가 초기화되었습니다.",
|
||||||
description: "로컬 및 클라우드의 모든 데이터가 초기화되었습니다. 동기화 기능이 꺼졌습니다.",
|
description: syncWasEnabled
|
||||||
|
? "로컬 및 클라우드의 모든 데이터가 초기화되었습니다. 동기화 설정은 유지됩니다."
|
||||||
|
: "로컬 및 클라우드의 모든 데이터가 초기화되었습니다.",
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
toast({
|
toast({
|
||||||
|
|||||||
@@ -77,6 +77,8 @@ export const resetAllStorageData = (): void => {
|
|||||||
const authSession = localStorage.getItem('authSession');
|
const authSession = localStorage.getItem('authSession');
|
||||||
const sbAuth = localStorage.getItem('sb-auth-token');
|
const sbAuth = localStorage.getItem('sb-auth-token');
|
||||||
const supabase = localStorage.getItem('supabase.auth.token');
|
const supabase = localStorage.getItem('supabase.auth.token');
|
||||||
|
// 동기화 설정 백업 (변경된 부분)
|
||||||
|
const syncEnabled = localStorage.getItem('syncEnabled');
|
||||||
|
|
||||||
// 모든 Storage 키 목록 (로그인 관련 항목 제외)
|
// 모든 Storage 키 목록 (로그인 관련 항목 제외)
|
||||||
const keysToRemove = [
|
const keysToRemove = [
|
||||||
@@ -100,7 +102,7 @@ export const resetAllStorageData = (): void => {
|
|||||||
'budgetHistory',
|
'budgetHistory',
|
||||||
'transactionHistory',
|
'transactionHistory',
|
||||||
'lastSync',
|
'lastSync',
|
||||||
'syncEnabled'
|
// 'syncEnabled' 제거됨 - 동기화 설정은 보존
|
||||||
];
|
];
|
||||||
|
|
||||||
// 키 삭제
|
// 키 삭제
|
||||||
@@ -154,13 +156,19 @@ export const resetAllStorageData = (): void => {
|
|||||||
localStorage.setItem('supabase.auth.token', supabase);
|
localStorage.setItem('supabase.auth.token', supabase);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 동기화 설정 복원 (변경된 부분)
|
||||||
|
if (syncEnabled) {
|
||||||
|
localStorage.setItem('syncEnabled', syncEnabled);
|
||||||
|
console.log('동기화 설정 복원:', syncEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
// 이벤트 발생
|
// 이벤트 발생
|
||||||
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'));
|
||||||
|
|
||||||
console.log('모든 저장소 데이터가 완전히 초기화되었습니다. (로그인 상태는 유지)');
|
console.log('모든 저장소 데이터가 완전히 초기화되었습니다. (로그인 상태와 동기화 설정 유지)');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('데이터 초기화 중 오류:', error);
|
console.error('데이터 초기화 중 오류:', error);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -54,8 +54,9 @@ export const clearCloudData = async (userId: string): Promise<boolean> => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 동기화 설정 초기화 및 마지막 동기화 시간 초기화
|
// 동기화 설정 초기화 및 마지막 동기화 시간 초기화
|
||||||
|
// 변경: 동기화 설정을 비활성화하지 않고 마지막 동기화 시간만 초기화
|
||||||
localStorage.removeItem('lastSync');
|
localStorage.removeItem('lastSync');
|
||||||
localStorage.setItem('syncEnabled', 'false');
|
// localStorage.setItem('syncEnabled', 'false'); 이 줄 제거
|
||||||
|
|
||||||
console.log('클라우드 데이터 초기화 완료');
|
console.log('클라우드 데이터 초기화 완료');
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
Reference in New Issue
Block a user