Files
ERitors-Scribe-Desktop/components/offline/OfflineToggle.tsx
natreex a114592ac9 Add terms of use translations, sync detection, and refactor book components
- Introduced new translations for terms of use in French and English locales.
- Added sync status detection logic for books in `BookList` and `BookCard` components.
- Refactored `BookCard` to handle additional props and improve layout flexibility.
- Enhanced `TermsOfUse` component with complete localization support and refuse functionality.
- Updated data decryption logic in Rust services to handle optional fields and additional metadata consistently.
- Improved offline/online synchronization workflows with extended context properties.
2026-03-23 11:56:35 -04:00

38 lines
1.4 KiB
TypeScript

'use client';
import {useContext} from 'react';
import OfflineContext from '@/context/OfflineContext';
import {Wifi, Circle} from 'lucide-react';
import {useTranslations} from '@/lib/i18n';
export default function OfflineToggle() {
const {offlineMode, toggleOfflineMode} = useContext(OfflineContext);
const t = useTranslations();
if (!offlineMode.isDatabaseInitialized) {
return null;
}
return (
<button
onClick={toggleOfflineMode}
className={`
flex items-center gap-2 px-3 py-1.5 rounded-lg border transition-all
${offlineMode.isOffline
? 'bg-orange-500/20 border-orange-500/40 hover:bg-orange-500/30'
: 'bg-green-500/20 border-green-500/40 hover:bg-green-500/30'
}
`}
title={offlineMode.isOffline ? t('offline.toggle.switchToOnline') : t('offline.toggle.switchToOffline')}
>
{offlineMode.isOffline
? <Circle className="w-3 h-3 text-orange-300"/>
: <Wifi className="w-3 h-3 text-green-300"/>
}
<span className={`text-xs font-medium ${offlineMode.isOffline ? 'text-orange-200' : 'text-green-200'}`}>
{offlineMode.isOffline ? t('offline.toggle.offline') : t('offline.toggle.online')}
</span>
</button>
);
}