import { useState, useEffect } from "react"; import { useQuery, useQueryClient } from "@tanstack/react-query"; import { useAuthUnified } from "@/hooks/useAuthUnified"; import { useStore } from "@/contexts/StoreContext"; import { useToast } from "@/hooks/use-toast"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Badge } from "@/components/ui/badge"; import { Card, CardContent } from "@/components/ui/card"; import MobileLayout from "./MobileLayout"; import { ListTodo, Plus, Search, CheckCircle, Edit, Trash2, Calendar, AlertTriangle, Clock, Circle, X } from "lucide-react"; import { format, isPast, differenceInDays, isToday } from "date-fns"; import { fr } from "date-fns/locale"; import type { Task } from "@shared/schema"; type TaskWithRelations = Task & { assignedUser?: { id: string; username: string; firstName?: string; lastName?: string; }; creator?: { id: string; username: string; firstName?: string; lastName?: string; }; group?: { id: number; name: string; color: string; }; isFutureTask?: boolean; }; // Mobile Task Form Component function MobileTaskForm({ task, onClose, selectedStoreId, user }: any) { const { toast } = useToast(); const [isSubmitting, setIsSubmitting] = useState(false); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); setIsSubmitting(true); const formData = new FormData(e.currentTarget); const title = formData.get('title') as string; const description = formData.get('description') as string; const priority = formData.get('priority') as string; const assignedTo = formData.get('assignedTo') as string; const dueDate = formData.get('dueDate') as string; if (!title?.trim()) { toast({ title: "Erreur", description: "Le titre est requis", variant: "destructive" }); setIsSubmitting(false); return; } try { const taskData = { title: title.trim(), description: description?.trim() || "", priority: priority || "medium", status: task?.status || "pending", assignedTo: assignedTo?.trim() || "Non assigné", dueDate: dueDate || null, }; const url = task ? `/api/tasks/${task.id}` : '/api/tasks'; const method = task ? 'PUT' : 'POST'; if (!task) { (taskData as any).groupId = selectedStoreId ? parseInt(selectedStoreId.toString()) : 1; (taskData as any).createdBy = user?.username || 'admin'; } const response = await fetch(url, { method, headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(taskData), }); if (!response.ok) throw new Error(`Erreur ${response.status}`); toast({ title: "Succès", description: task ? "Tâche modifiée" : "Tâche créée", }); window.location.reload(); } catch (error) { toast({ title: "Erreur", description: "Erreur lors de l'opération", variant: "destructive" }); setIsSubmitting(false); } }; return (
{/* Header */}

{task ? "Modifier" : "Nouvelle tâche"}

{/* Form */}