'use client'; import { useState, useEffect } from 'react'; import React from 'react'; import { useDaily } from '@/hooks/useDaily'; import { DailyView, DailyCheckboxType } from '@/lib/types'; import { Button } from '@/components/ui/Button'; import { Card } from '@/components/ui/Card'; import { DailyCalendar } from '@/components/daily/DailyCalendar'; import { DailySection } from '@/components/daily/DailySection'; import { dailyClient } from '@/clients/daily-client'; import { SimpleHeader } from '@/components/ui/SimpleHeader'; interface DailyPageClientProps { initialDailyView?: DailyView; initialDailyDates?: string[]; initialDate?: Date; } export function DailyPageClient({ initialDailyView, initialDailyDates = [], initialDate }: DailyPageClientProps = {}) { const { dailyView, loading, refreshing, error, saving, currentDate, addTodayCheckbox, addYesterdayCheckbox, toggleCheckbox, toggleAllToday, toggleAllYesterday, updateCheckbox, deleteCheckbox, goToPreviousDay, goToNextDay, goToToday, setDate } = useDaily(initialDate, initialDailyView); const [dailyDates, setDailyDates] = useState(initialDailyDates); // Fonction pour rafraîchir la liste des dates avec des dailies const refreshDailyDates = async () => { try { const dates = await dailyClient.getDailyDates(); setDailyDates(dates); } catch (error) { console.error('Erreur lors du refresh des dates:', error); } }; // Charger les dates avec des dailies pour le calendrier (seulement si pas de données SSR) useEffect(() => { if (initialDailyDates.length === 0) { import('@/clients/daily-client').then(({ dailyClient }) => { return dailyClient.getDailyDates(); }).then(setDailyDates).catch(console.error); } }, [initialDailyDates.length]); const handleAddTodayCheckbox = async (text: string, type: DailyCheckboxType) => { await addTodayCheckbox(text, type); // Recharger aussi les dates pour le calendrier await refreshDailyDates(); }; const handleAddYesterdayCheckbox = async (text: string, type: DailyCheckboxType) => { await addYesterdayCheckbox(text, type); // Recharger aussi les dates pour le calendrier await refreshDailyDates(); }; const handleToggleCheckbox = async (checkboxId: string) => { await toggleCheckbox(checkboxId); }; const handleDeleteCheckbox = async (checkboxId: string) => { await deleteCheckbox(checkboxId); // Refresh dates après suppression pour mettre à jour le calendrier await refreshDailyDates(); }; const handleUpdateCheckbox = async (checkboxId: string, text: string, type: DailyCheckboxType, taskId?: string) => { await updateCheckbox(checkboxId, { text, type, taskId: type === 'task' ? taskId : undefined // Supprimer la liaison tâche si on passe en réunion }); }; const getYesterdayDate = () => { const yesterday = new Date(currentDate); yesterday.setDate(yesterday.getDate() - 1); return yesterday; }; const getTodayDate = () => { return currentDate; }; const handleDateSelect = (date: Date) => { setDate(date); }; const formatCurrentDate = () => { return currentDate.toLocaleDateString('fr-FR', { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' }); }; const isToday = () => { const today = new Date(); return currentDate.toDateString() === today.toDateString(); }; if (loading) { return (
Chargement du daily...
); } if (error) { return (

Erreur: {error}

); } return (
{/* Header uniforme */} {/* Navigation Daily spécifique */}
{formatCurrentDate()}
{!isToday() && ( )}
{/* Contenu principal */}
{/* Calendrier - toujours visible */}
{/* Sections daily */} {dailyView && (
{/* Section Hier */} {/* Section Aujourd'hui */}
)}
{/* Footer avec stats - dans le flux normal */} {dailyView && (
Daily pour {formatCurrentDate()} {' • '} {dailyView.yesterday.length + dailyView.today.length} tâche{dailyView.yesterday.length + dailyView.today.length > 1 ? 's' : ''} au total {' • '} {dailyView.yesterday.filter(cb => cb.isChecked).length + dailyView.today.filter(cb => cb.isChecked).length} complétée{(dailyView.yesterday.filter(cb => cb.isChecked).length + dailyView.today.filter(cb => cb.isChecked).length) > 1 ? 's' : ''}
)}
); }