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.
This commit is contained in:
natreex
2026-03-23 11:56:35 -04:00
parent 64ed90d993
commit a114592ac9
23 changed files with 588 additions and 438 deletions

View File

@@ -1,23 +1,21 @@
'use client';
import { useContext } from 'react';
import {useContext} from 'react';
import OfflineContext from '@/context/OfflineContext';
import { Wifi, Circle } from 'lucide-react';
import {Wifi, Circle} from 'lucide-react';
import {useTranslations} from '@/lib/i18n';
export default function OfflineToggle() {
const { offlineMode, toggleOfflineMode } = useContext(OfflineContext);
const {offlineMode, toggleOfflineMode} = useContext(OfflineContext);
const t = useTranslations();
if (!offlineMode.isDatabaseInitialized) {
return null;
}
const handleToggle = () => {
toggleOfflineMode();
};
return (
<button
onClick={handleToggle}
onClick={toggleOfflineMode}
className={`
flex items-center gap-2 px-3 py-1.5 rounded-lg border transition-all
${offlineMode.isOffline
@@ -25,14 +23,14 @@ export default function OfflineToggle() {
: 'bg-green-500/20 border-green-500/40 hover:bg-green-500/30'
}
`}
title={offlineMode.isOffline ? 'Passer en mode en ligne' : 'Passer en mode hors ligne'}
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" />
? <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 ? 'Hors ligne' : 'En ligne'}
{offlineMode.isOffline ? t('offline.toggle.offline') : t('offline.toggle.online')}
</span>
</button>
);