Refactor SyncSettings component

Refactor SyncSettings component into smaller components and extract logic into a separate hook.
This commit is contained in:
gpt-engineer-app[bot]
2025-03-16 10:40:07 +00:00
parent 14c3fac824
commit 1d911153a7
4 changed files with 282 additions and 208 deletions

View File

@@ -0,0 +1,25 @@
import React from 'react';
import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
import { AlertCircle } from "lucide-react";
interface SyncExplanationProps {
enabled: boolean;
}
const SyncExplanation: React.FC<SyncExplanationProps> = ({ enabled }) => {
if (!enabled) return null;
return (
<Alert className="bg-amber-50 text-amber-800 border-amber-200">
<AlertCircle className="h-4 w-4" />
<AlertTitle> </AlertTitle>
<AlertDescription className="text-sm">
. .
.
</AlertDescription>
</Alert>
);
};
export default SyncExplanation;

View File

@@ -0,0 +1,56 @@
import React from 'react';
import { RefreshCw } from "lucide-react";
import { Button } from "@/components/ui/button";
import { useNavigate } from "react-router-dom";
interface SyncStatusProps {
enabled: boolean;
syncing: boolean;
lastSync: string;
user: any; // User 타입 또는 null
onManualSync: () => Promise<void>;
}
const SyncStatus: React.FC<SyncStatusProps> = ({
enabled,
syncing,
lastSync,
user,
onManualSync
}) => {
const navigate = useNavigate();
if (!enabled) return null;
return (
<div className="space-y-3">
{user ? (
<div className="flex justify-between items-center text-sm">
<span className="text-muted-foreground"> : {lastSync}</span>
<button
onClick={onManualSync}
disabled={syncing}
className="neuro-button py-1 px-3 flex items-center gap-1 bg-neuro-income text-white hover:bg-neuro-income/90"
>
<RefreshCw className={`h-4 w-4 ${syncing ? 'animate-spin' : ''}`} />
<span>{syncing ? '동기화 중...' : '지금 동기화'}</span>
</button>
</div>
) : (
<div className="flex justify-between items-center">
<span className="text-sm text-muted-foreground"> </span>
<Button
onClick={() => navigate('/login')}
size="sm"
className="py-1 px-3 bg-neuro-income text-white hover:bg-neuro-income/90"
>
</Button>
</div>
)}
</div>
);
};
export default SyncStatus;