"use client"; import { useState, useCallback } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { CheckSquare, Square, Plus } from "lucide-react"; import { createTask, toggleTask } from "@/lib/api"; import AddTaskModal from "../AddTaskModal"; interface Task { id: number; title: string; done: boolean; priority?: number; } interface Props { tasks: Task[]; onUpdate: () => void; } export default function TasksCard({ tasks, onUpdate }: Props) { const [modalOpen, setModalOpen] = useState(false); const [localTasks, setLocalTasks] = useState(tasks); const handleToggle = useCallback( async (task: Task) => { setLocalTasks((prev) => prev.map((t) => (t.id === task.id ? { ...t, done: !t.done } : t)) ); await toggleTask(task.id, !task.done); onUpdate(); }, [onUpdate] ); const handleAdd = useCallback( async (title: string) => { const newTask = { id: Date.now(), title, done: false }; setLocalTasks((prev) => [newTask, ...prev]); await createTask(title); onUpdate(); }, [onUpdate] ); const pending = localTasks.filter((t) => !t.done); const done = localTasks.filter((t) => t.done); return ( <>
Задачи сегодня
{pending.length} осталось из {localTasks.length}
setModalOpen(true)} className="w-8 h-8 rounded-lg flex items-center justify-center" style={{ background: "linear-gradient(135deg, #6366f1, #8b5cf6)", boxShadow: "0 0 12px rgba(99,102,241,0.4)", }} whileTap={{ scale: 0.85 }} >
{localTasks.length === 0 && (
🎉
Всё сделано!
)} {localTasks.map((task) => ( handleToggle(task)} whileTap={{ scale: 0.97 }} > {task.done ? ( ) : ( )} {task.title} ))}
setModalOpen(false)} onAdd={handleAdd} /> ); }