import {Cloud, CloudDownload, CloudUpload, Loader2} from "lucide-react"; import {useTranslations} from "@/lib/i18n"; import {useState, useEffect, useContext} from "react"; import OfflineContext, {OfflineContextType} from "@/context/OfflineContext"; import {SyncType} from "@/context/BooksSyncContext"; import useSyncBooks from "@/hooks/useSyncBooks"; import IconButton from "@/components/ui/IconButton"; interface SyncBookProps { bookId: string; status: SyncType; } export default function SyncBook({bookId, status}: SyncBookProps) { const t = useTranslations(); const {isCurrentlyOffline} = useContext(OfflineContext); const [isLoading, setIsLoading] = useState(false); const [currentStatus, setCurrentStatus] = useState(status); const {upload: hookUpload, download: hookDownload, syncFromServer: hookSyncFromServer, syncToServer: hookSyncToServer} = useSyncBooks(); useEffect((): void => { setCurrentStatus(status); }, [status]); const isOffline: boolean = isCurrentlyOffline(); async function upload(): Promise { if (isOffline) return; setIsLoading(true); const success: boolean = await hookUpload(bookId); if (success) setCurrentStatus('synced'); setIsLoading(false); } async function download(): Promise { if (isOffline) return; setIsLoading(true); const success = await hookDownload(bookId); if (success) setCurrentStatus('synced'); setIsLoading(false); } async function syncFromServer(): Promise { if (isOffline) return; setIsLoading(true); const success = await hookSyncFromServer(bookId); if (success) setCurrentStatus('synced'); setIsLoading(false); } async function syncToServer(): Promise { if (isOffline) return; setIsLoading(true); const success = await hookSyncToServer(bookId); if (success) setCurrentStatus('synced'); setIsLoading(false); } if (isLoading) { return (
); } return (
{currentStatus === 'synced' && ( )} {currentStatus === 'local-only' && ( )} {currentStatus === 'server-only' && ( )} {currentStatus === 'to-sync-from-server' && ( )} {currentStatus === 'to-sync-to-server' && ( )}
); }