import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faCloud, faCloudArrowDown, faCloudArrowUp, faSpinner } from "@fortawesome/free-solid-svg-icons"; import { useTranslations } from "next-intl"; import { useState, useContext, useEffect } from "react"; import OfflineContext, { OfflineContextType } from "@/context/OfflineContext"; import { SeriesSyncType } from "@/context/SeriesSyncContext"; import useSyncSeries from "@/hooks/useSyncSeries"; interface SyncSeriesProps { seriesId: string; status: SeriesSyncType; } export default function SyncSeries({ seriesId, status }: SyncSeriesProps) { 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 } = useSyncSeries(); // Synchroniser le state local avec le prop quand il change (ex: après sync auto) useEffect(() => { setCurrentStatus(status); }, [status]); const isOffline: boolean = isCurrentlyOffline(); async function upload(event: React.MouseEvent): Promise { event.stopPropagation(); if (isOffline) return; setIsLoading(true); const success: boolean = await hookUpload(seriesId); if (success) setCurrentStatus('synced'); setIsLoading(false); } async function download(event: React.MouseEvent): Promise { event.stopPropagation(); if (isOffline) return; setIsLoading(true); const success = await hookDownload(seriesId); if (success) setCurrentStatus('synced'); setIsLoading(false); } async function syncFromServer(event: React.MouseEvent): Promise { event.stopPropagation(); if (isOffline) return; setIsLoading(true); const success = await hookSyncFromServer(seriesId); if (success) setCurrentStatus('synced'); setIsLoading(false); } async function syncToServer(event: React.MouseEvent): Promise { event.stopPropagation(); if (isOffline || isLoading) return; setIsLoading(true); const success = await hookSyncToServer(seriesId); 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' && ( )}
); }