└── Task Management App.html
/Task Management App.html:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react"; import { useDrag, useDrop } from "react-dnd"; import "tailwindcss/tailwind.css";
2 |
3 | const TaskItem = ({ task, index, moveTask, toggleComplete }) => { const [, ref] = useDrag({ type: "TASK", item: { index }, }); const [, drop] = useDrop({ accept: "TASK", hover: (draggedItem) => { if (draggedItem.index !== index) { moveTask(draggedItem.index, index); draggedItem.index = index; } }, });
4 |
5 | return (
ref(drop(node))} className="p-2 border flex justify-between bg-white shadow-md rounded-md"> toggleComplete(task.id)} /> {task.title}
); };
6 |
7 | const TaskManager = () => { const [tasks, setTasks] = useState([]); const [newTask, setNewTask] = useState("");
8 |
9 | useEffect(() => { const savedTasks = JSON.parse(localStorage.getItem("tasks")) || []; setTasks(savedTasks); }, []);
10 |
11 | useEffect(() => { localStorage.setItem("tasks", JSON.stringify(tasks)); }, [tasks]);
12 |
13 | const addTask = () => { if (newTask.trim()) { setTasks([...tasks, { id: Date.now(), title: newTask, completed: false }]); setNewTask(""); } };
14 |
15 | const toggleComplete = (id) => { setTasks(tasks.map((task) => (task.id === id ? { ...task, completed: !task.completed } : task))); };
16 |
17 | const moveTask = (fromIndex, toIndex) => { const updatedTasks = [...tasks]; const [movedTask] = updatedTasks.splice(fromIndex, 1); updatedTasks.splice(toIndex, 0, movedTask); setTasks(updatedTasks); };
18 |
19 | return ( ); };
20 |
21 | export default TaskManager;
--------------------------------------------------------------------------------