Skip to content
Snippets Groups Projects
Commit 0425dfcd authored by OUKASSOU Anas's avatar OUKASSOU Anas
Browse files

Merge branch 'feature/manage-tasks' into 'main'

added edit task

See merge request !18
parents 533c7b1d 7c67b4e5
No related branches found
No related tags found
1 merge request!18added edit task
import { useTasks } from "@context/TasksContext" import { useTasks } from "@context/TasksContext"
import { TrashIcon } from '@heroicons/react/24/outline' import { TrashIcon, PencilIcon } from '@heroicons/react/24/outline'
export default function TaskItem({ task }) { export default function TaskItem({ task, onClick }) {
const { tasks, setTasks } = useTasks() const { tasks, setTasks } = useTasks()
...@@ -46,7 +46,9 @@ export default function TaskItem({ task }) { ...@@ -46,7 +46,9 @@ export default function TaskItem({ task }) {
return ( return (
<li> <li>
<div className="flex items-start p-4 border rounded-lg shadow-sm bg-white dark:bg-gray-700 dark:border-gray-600 my-2 hover:shadow-md transition-shadow"> <div
// onClick={() => onClick(task)}
className="flex items-start p-4 border rounded-lg shadow-sm bg-white dark:bg-gray-700 dark:border-gray-600 my-2 hover:shadow-md transition-shadow">
<div className="flex-shrink-0 pt-1"> <div className="flex-shrink-0 pt-1">
<input <input
id={task.id} id={task.id}
...@@ -71,12 +73,19 @@ export default function TaskItem({ task }) { ...@@ -71,12 +73,19 @@ export default function TaskItem({ task }) {
{formattedDate} {formattedDate}
</p> </p>
</div> </div>
<button
onClick={() => onClick(task)}
className="ml-auto p-1 rounded-full hover:bg-gray-200 dark:hover:bg-gray-600 focus:outline-none"
>
<PencilIcon className="w-5 h-5 text-red-500 hover:text-red-700"/>
</button>
<button <button
onClick={() => onDelete(task.id)} onClick={() => onDelete(task.id)}
className="ml-auto p-1 rounded-full hover:bg-gray-200 dark:hover:bg-gray-600 focus:outline-none" className="ml-auto p-1 rounded-full hover:bg-gray-200 dark:hover:bg-gray-600 focus:outline-none"
> >
<TrashIcon className="w-5 h-5 text-red-500 hover:text-red-700" /> <TrashIcon className="w-5 h-5 text-red-500 hover:text-red-700" />
</button> </button>
</div> </div>
</li> </li>
) )
......
import TaskItem from "./TaskItem" import TaskItem from "./TaskItem"
export default function TaskList({ tasks }) { export default function TaskList({ tasks, onClickItem }) {
const taskItems = tasks.map((task) => <TaskItem key={task.id} task={task}/>) const taskItems = tasks.map((task) => <TaskItem key={task.id} task={task} onClick={onClickItem}/>)
return ( return (
<ul className="space-y-4"> <ul className="space-y-4">
......
...@@ -9,7 +9,6 @@ export default function Todolist() { ...@@ -9,7 +9,6 @@ export default function Todolist() {
const newTask = () => { const newTask = () => {
return { return {
id: crypto.randomUUID(),
name: "", name: "",
isCompleted: false, isCompleted: false,
dueDate: "" dueDate: ""
...@@ -21,12 +20,40 @@ export default function Todolist() { ...@@ -21,12 +20,40 @@ export default function Todolist() {
...task, ...task,
dueDate: task.dueDate || new Date().toISOString().split("T")[0], dueDate: task.dueDate || new Date().toISOString().split("T")[0],
}; };
if (newTask?.id) {
replaceTask(task)
} else {
newTask.id = crypto.randomUUID()
setTasks([...tasks, newTask]); setTasks([...tasks, newTask]);
}
}; };
const replaceTask = (task) => {
const nextTasks = tasks.map((t) => {
if (t.id === task.id) {
return task
} else {
return t
}
})
setTasks(nextTasks)
}
const [editedTask, setEditedTask ] = useState(newTask())
const [isModalOpen, setIsModalOpen] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false);
const openModal = () => setIsModalOpen(true); const openModal = () => setIsModalOpen(true);
const closeModal = () => setIsModalOpen(false); const closeModal = () => setIsModalOpen(false);
const editTask = (task) => {
setEditedTask(task)
openModal()
}
const createNewTask = () => {
setEditedTask(newTask())
openModal()
}
return ( return (
<div className="w-full h-screen bg-gray-200 dark:bg-gray-900 flex justify-center items-start transition-colors"> <div className="w-full h-screen bg-gray-200 dark:bg-gray-900 flex justify-center items-start transition-colors">
...@@ -37,18 +64,18 @@ export default function Todolist() { ...@@ -37,18 +64,18 @@ export default function Todolist() {
</h1> </h1>
</div> </div>
<div> <div>
<AddTaskButton onClick={openModal} /> <AddTaskButton onClick={createNewTask} />
</div> </div>
<div className="text-gray-700 dark:text-gray-300"> <div className="text-gray-700 dark:text-gray-300">
{tasks.length > 0 ? ( {tasks.length > 0 ? (
<TaskList tasks={tasks} /> <TaskList tasks={tasks} onClickItem={editTask} />
) : ( ) : (
"You are done for the day!" "You are done for the day!"
)} )}
</div> </div>
</div> </div>
<Modal task={newTask()} isOpen={isModalOpen} closeModal={closeModal} saveTask={saveTask}/> <Modal task={editedTask} isOpen={isModalOpen} closeModal={closeModal} saveTask={saveTask}/>
</div> </div>
) )
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment