Skip to content

Commit

Permalink
➕ feat: react router dom
Browse files Browse the repository at this point in the history
  • Loading branch information
Linder Hassinger committed Apr 18, 2024
1 parent 3e11474 commit b70fa17
Show file tree
Hide file tree
Showing 6 changed files with 203 additions and 141 deletions.
39 changes: 39 additions & 0 deletions semana-9/todolist/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions semana-9/todolist/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"dependencies": {
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-router-dom": "^6.22.3",
"uuid": "^9.0.1"
},
"devDependencies": {
Expand Down
143 changes: 2 additions & 141 deletions semana-9/todolist/src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,144 +1,5 @@
import { useState } from "react";
import {
DeleteForm,
InputTask,
Modal,
UpdateForm,
CheckForm,
} from "./components";
import { createTask, updateTask, deleteTask } from "./services/httpAPI";
import useGetTasks from "./hooks/useGetTasks";
import Router from "./router";

export default function App() {
const { listTasks, setListTask } = useGetTasks();

const [task, setTask] = useState("");
const [currentTask, setCurrentTask] = useState(null);

const [isOpen, setIsOpen] = useState({
edit: false,
delete: false,
check: false,
});

const handleOpen = (modalType) => {
setIsOpen({
...isOpen,
[modalType]: !isOpen[modalType],
});
};

// Funcion que se encarga de capturar el valor del input
const handleInputTask = (event) => {
setTask(event.target.value);
};

const handleListTask = async (task) => {
const newTask = await createTask(task);

const newTasks = [...listTasks, newTask];
setListTask(newTasks);
setTask("");
};

const handleCurrentTask = (task, modalType) => {
handleOpen(modalType);
setCurrentTask(task);
};

const handleUpdateTask = async (task, newText) => {
const searchTask = listTasks.find((element) => element.id === task.id);
searchTask.text = newText;

await updateTask(searchTask);

handleOpen("edit");
};

const handleCheckTask = async (task) => {
const searchTask = listTasks.find((element) => element.id === task.id);
searchTask.status = 2;

await updateTask(searchTask);

handleOpen("check");
};

const handleDeleteTask = async (task) => {
const filteredTasks = listTasks.filter((element) => element.id !== task.id);

await deleteTask(task);

setListTask(filteredTasks);
handleOpen("delete");
};

return (
<>
<main className="max-w-md mx-auto p-6">
<InputTask
task={task}
handleInputTask={handleInputTask}
handleListTask={handleListTask}
/>
<section id="container-tasks" className="mt-10">
{listTasks.map((task) => (
<div
key={task.id}
className="flex justify-between px-4 mb-3 py-3 bg-white rounded-md"
>
<p>{task.text}</p>
{task.status === 1 && (
<div className="flex gap-5">
<button onClick={() => handleCurrentTask(task, "check")}>
</button>
<button onClick={() => handleCurrentTask(task, "edit")}>✏️</button>
<button onClick={() => handleCurrentTask(task, "delete")}>🗑️</button>
</div>
)}
</div>
))}
</section>
{currentTask && (
<Modal
open={isOpen.edit}
handleClose={() => handleOpen("edit")}
title="Editar tarea"
>
<UpdateForm
currentTask={currentTask}
handleUpdateTask={handleUpdateTask}
/>
</Modal>
)}
{currentTask && (
<Modal
open={isOpen.delete}
handleClose={() => handleOpen("delete")}
title="Eliminar tarea"
>
<DeleteForm
currentTask={currentTask}
handleDeleteTask={handleDeleteTask}
handleDeleteCancel={() => handleOpen("delete")}
/>
</Modal>
)}
{currentTask && (
<Modal
open={isOpen.check}
handleClose={() => handleOpen("check")}
title="Ver tarea"
>
<CheckForm
currentTask={currentTask}
handleCheckTask={handleCheckTask}
handleCheckCancel={() => handleOpen("check")}
/>
</Modal>
)}
</main>
</>
);
return <Router />;
}
148 changes: 148 additions & 0 deletions semana-9/todolist/src/pages/Home/index.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
import { useState } from "react";
import {
DeleteForm,
InputTask,
Modal,
UpdateForm,
CheckForm,
} from "../../components";
import { createTask, updateTask, deleteTask } from "../../services/httpAPI";
import useGetTasks from "../../hooks/useGetTasks";

export default function Home() {
const { listTasks, setListTask } = useGetTasks();

const [task, setTask] = useState("");
const [currentTask, setCurrentTask] = useState(null);

const [isOpen, setIsOpen] = useState({
edit: false,
delete: false,
check: false,
});

const handleOpen = (modalType) => {
setIsOpen({
...isOpen,
[modalType]: !isOpen[modalType],
});
};

// Funcion que se encarga de capturar el valor del input
const handleInputTask = (event) => {
setTask(event.target.value);
};

const handleListTask = async (task) => {
const newTask = await createTask(task);

const newTasks = [...listTasks, newTask];
setListTask(newTasks);
setTask("");
};

const handleCurrentTask = (task, modalType) => {
handleOpen(modalType);
setCurrentTask(task);
};

const handleUpdateTask = async (task, newText) => {
const searchTask = listTasks.find((element) => element.id === task.id);
searchTask.text = newText;

await updateTask(searchTask);

handleOpen("edit");
};

const handleCheckTask = async (task) => {
const searchTask = listTasks.find((element) => element.id === task.id);
searchTask.status = 2;

await updateTask(searchTask);

handleOpen("check");
};

const handleDeleteTask = async (task) => {
const filteredTasks = listTasks.filter((element) => element.id !== task.id);

await deleteTask(task);

setListTask(filteredTasks);
handleOpen("delete");
};

return (
<>
<main className="max-w-md mx-auto p-6">
<InputTask
task={task}
handleInputTask={handleInputTask}
handleListTask={handleListTask}
/>
<section id="container-tasks" className="mt-10">
{listTasks.map((task) => (
<div
key={task.id}
className="flex justify-between px-4 mb-3 py-3 bg-white rounded-md"
>
<p>{task.text}</p>
{task.status === 1 && (
<div className="flex gap-5">
<button onClick={() => handleCurrentTask(task, "check")}>
</button>
<button onClick={() => handleCurrentTask(task, "edit")}>
✏️
</button>
<button onClick={() => handleCurrentTask(task, "delete")}>
🗑️
</button>
</div>
)}
</div>
))}
</section>
{currentTask && (
<Modal
open={isOpen.edit}
handleClose={() => handleOpen("edit")}
title="Editar tarea"
>
<UpdateForm
currentTask={currentTask}
handleUpdateTask={handleUpdateTask}
/>
</Modal>
)}
{currentTask && (
<Modal
open={isOpen.delete}
handleClose={() => handleOpen("delete")}
title="Eliminar tarea"
>
<DeleteForm
currentTask={currentTask}
handleDeleteTask={handleDeleteTask}
handleDeleteCancel={() => handleOpen("delete")}
/>
</Modal>
)}
{currentTask && (
<Modal
open={isOpen.check}
handleClose={() => handleOpen("check")}
title="Ver tarea"
>
<CheckForm
currentTask={currentTask}
handleCheckTask={handleCheckTask}
handleCheckCancel={() => handleOpen("check")}
/>
</Modal>
)}
</main>
</>
);
}
1 change: 1 addition & 0 deletions semana-9/todolist/src/pages/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default as HomePage } from "./Home";
12 changes: 12 additions & 0 deletions semana-9/todolist/src/router/index.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { BrowserRouter, Routes, Route } from "react-router-dom";
import { HomePage } from "../pages";

export default function Router() {
return (
<BrowserRouter>
<Routes>
<Route path="/" element={<HomePage />} />
</Routes>
</BrowserRouter>
);
}

0 comments on commit b70fa17

Please sign in to comment.