import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { useSyncContext } from '@/contexts/sync-context'; import { formatDistanceToNow } from 'date-fns'; import { CloudAlert, CloudCheck, CloudOff, List, RefreshCw, } from 'lucide-react'; import { useState } from 'react'; import { PendingOperationsDialog } from './pending-operations-dialog'; export function SyncStatusButton() { const { syncStatus, lastSyncTime, isOnline, sync, error, pendingOperationsCount, pendingOperations, } = useSyncContext(); const [showPendingDialog, setShowPendingDialog] = useState(false); const [isMenuOpen, setIsMenuOpen] = useState(false); const getIcon = () => { if (syncStatus === 'syncing') { return ; } if (syncStatus === 'error') { return ; } if (!isOnline) { return ; } return ; }; const getLastSyncText = () => { if (lastSyncTime) { return `Synced ${formatDistanceToNow(lastSyncTime, { addSuffix: true })}`; } return 'Not synced yet'; }; const getStatusText = () => { if (syncStatus === 'syncing') { return 'Syncing...'; } if (!isOnline) { return 'Offline'; } if (syncStatus === 'error') { return error || 'Sync failed'; } return getLastSyncText(); }; const handleSyncNow = () => { sync(); }; return ( <>

{getStatusText()}

{pendingOperationsCount} pending{' '} {pendingOperationsCount === 1 ? 'operation' : 'operations'}

{ e.preventDefault(); handleSyncNow(); }} disabled={syncStatus === 'syncing' || !isOnline} > Sync now setShowPendingDialog(true)} > View pending operations
); }