import { useState, useEffect } from "react"; import { Moon, Sun, Plus, Trash2, Edit, Check, X, Filter } from "lucide-react"; export default function TaskApp() { const [darkMode, setDarkMode] = useState(false); const [tasks, setTasks] = useState([ { id: 1, text: "Complete project proposal", completed: true, createdAt: new Date() }, { id: 2, text: "Schedule team meeting", completed: false, createdAt: new Date() }, { id: 3, text: "Research new technologies", completed: false, createdAt: new Date() }, { id: 4, text: "Prepare presentation slides", completed: false, createdAt: new Date() } ]); const [newTask, setNewTask] = useState(""); const [editingId, setEditingId] = useState(null); const [editText, setEditText] = useState(""); const [filter, setFilter] = useState("all"); // all, active, completed // Toggle dark mode useEffect(() => { if (darkMode) { document.documentElement.classList.add("dark"); } else { document.documentElement.classList.remove("dark"); } }, [darkMode]); // Add a new task const addTask = () => { if (newTask.trim() !== "") { const newTaskItem = { id: Date.now(), text: newTask, completed: false, createdAt: new Date() }; setTasks([...tasks, newTaskItem]); setNewTask(""); } }; // Handle key press in the input field const handleKeyPress = (e) => { if (e.key === "Enter") { addTask(); } }; // Toggle task completion status const toggleComplete = (id) => { setTasks( tasks.map(task => task.id === id ? { ...task, completed: !task.completed } : task ) ); }; // Delete a task const deleteTask = (id) => { setTasks(tasks.filter(task => task.id !== id)); }; // Start editing a task const startEdit = (id, text) => { setEditingId(id); setEditText(text); }; // Save edited task const saveEdit = () => { if (editText.trim() !== "") { setTasks( tasks.map(task => task.id === editingId ? { ...task, text: editText } : task ) ); setEditingId(null); } }; // Cancel editing const cancelEdit = () => { setEditingId(null); }; // Filter tasks based on current filter const filteredTasks = tasks.filter(task => { if (filter === "active") return !task.completed; if (filter === "completed") return task.completed; return true; // "all" filter }); return (
{/* Header */}

TaskMaster

{/* Add Task Form */}
setNewTask(e.target.value)} onKeyPress={handleKeyPress} placeholder="Add a new task..." className={`flex-grow px-4 py-2 mr-2 rounded-md border focus:outline-none focus:ring-2 focus:ring-indigo-500 ${ darkMode ? 'bg-gray-700 border-gray-600 text-white' : 'bg-gray-50 border-gray-300 text-gray-900' }`} />
{/* Filter Controls */}
{tasks.length} {tasks.length === 1 ? 'task' : 'tasks'} • {tasks.filter(t => t.completed).length} completed
{/* Task List */}
{filteredTasks.length === 0 ? (
{filter === "all" ? "No tasks yet. Add one above!" : filter === "active" ? "No active tasks. Great job!" : "No completed tasks yet."}
) : (
    {filteredTasks.map((task, index) => (
  • {editingId === task.id ? ( // Edit mode
    setEditText(e.target.value)} className={`flex-grow px-3 py-1 mr-2 rounded-md border focus:outline-none focus:ring-2 focus:ring-indigo-500 ${ darkMode ? 'bg-gray-700 border-gray-600 text-white' : 'bg-gray-50 border-gray-300 text-gray-900' }`} autoFocus />
    ) : ( // View mode <> {task.text}
    )}
  • ))}
)}
{/* Footer */}
); }