From 38a86fb528db0f611072e276425d74ccd9bcebe0 Mon Sep 17 00:00:00 2001 From: Maya Herrscher Date: Wed, 28 Sep 2022 13:12:36 +0200 Subject: [PATCH] Refactor Subtodos so they work correctly --- src/components/Todos.tsx | 59 ++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/src/components/Todos.tsx b/src/components/Todos.tsx index fcc95d3..b0ef5d9 100644 --- a/src/components/Todos.tsx +++ b/src/components/Todos.tsx @@ -130,13 +130,19 @@ function ChangeTodo({todo, setTodo, handleCancel}: {todo: Todo, setTodo: (todo: export function Todos({style}: {style?: any}) { const [todos, setTodos] = useLocalStorage("todos",[]); - const setDone=(i: number,todo: Todo, done: boolean) => - setTodos([...todos.slice(0,i), + const setDone=(todo: Todo, done: boolean) => { + const i = todos.indexOf(todo); + setTodos([...todos.slice(0,i), {name: todo.name, id: todo.id, done: done, description: todo.description, to: todo.to, from: todo.from, subs: todo.subs}, ...todos.slice(i+1)]); + } - const setDoneSub=(i: number, j: number, stodo: Subtodo, done: boolean) => { - const todo = todos[i]; + const setDoneSub=(todo: Todo, stodo: Subtodo, done: boolean) => { + const i = todos.indexOf(todo); + let j = -1; + if (todo.subs!.length > 0){ + j = todo.subs!.indexOf(stodo); + } setTodos([...todos.slice(0,i), {name: todo.name, id: todo.id, done: todo.done, description: todo.description, to: todo.to, from: todo.from, subs: [...todo.subs!.slice(0,j), @@ -144,16 +150,22 @@ export function Todos({style}: {style?: any}) { , ...todo.subs!.slice(j+1)]}, ...todos.slice(i+1)]);} - const deleteSubtodo=(i: number, j: number) => { - const todo = todos[i]; + const deleteSubtodo=(todo: Todo, stodo: Subtodo) => { + const i = todos.indexOf(todo); + let j = -1; + if (todo.subs!.length > 0){ + j = todo.subs!.indexOf(stodo); + } setTodos([...todos.slice(0,i), {name: todo.name, id: todo.id, done: todo.done, description: todo.description, to: todo.to, from: todo.from, subs: [...todo.subs!.slice(0,j), ...todo.subs!.slice(j+1)]}, ...todos.slice(i+1)]);} - const deleteTodo=(i: number) => + const deleteTodo=(todo: Todo) => { + const i = todos.indexOf(todo); setTodos([...todos.slice(0,i), ...todos.slice(i+1)]); + } const setTodo= (todo: Todo) => { handleClose(); @@ -171,8 +183,9 @@ const handleClose = () => { const [open2, setOpen2] = useState(false); const [edit, setEdit] = useState({name: "", description: "", done: false, id: "", subs: []}); const [editI, setEditI] = useState(0); -const handleClickOpen2 = (todo: Todo, i: number) => { +const handleClickOpen2 = (todo: Todo) => { setOpen2(true); + const i = todos.indexOf(todo); setEdit(todo); setEditI(i); }; @@ -183,22 +196,28 @@ const handleClose2 = () => { const [open3, setOpen3] = useState(false); const [editSub, setEditSub] = useState({name: "", description: "", done: false, id: ""}); const [editJ, setEditJ] = useState(0); -const handleClickOpenSubtodo = (todo: Subtodo, i: number, j: number) => { +const handleClickOpenSubtodo = (todo: Todo) => { setOpen3(true); + const i = todos.indexOf(todo); setEditSub(todo); setEditI(i); - setEditJ(j > -1 ? j : todos[i].subs!.length); + setEditJ(todo.subs!.length); }; const handleCloseSubtodo = () => { setOpen3(false); }; const [open4, setOpen4] = useState(false); -const handleClickOpenSubtodo2 = (todo: Subtodo, i: number, j: number) => { +const handleClickOpenSubtodo2 = (todo: Todo, stodo: Subtodo) => { setOpen4(true); - setEditSub(todo); + const i = todos.indexOf(todo); + let j = -1; + if (todo.subs!.length > 0){ + j = todo.subs!.indexOf(stodo); + } + setEditSub(stodo); setEditI(i); - setEditJ(j > -1 ? j : todos[i].subs!.length); + setEditJ(j); }; const handleCloseSubtodo2 = () => { setOpen4(false); @@ -245,15 +264,15 @@ const editSubtodo= (todo: Subtodo) => {
- setDone(i, todo,e.target.checked)}> + setDone(todo,e.target.checked)}> - + - + - + {(todo.subs && todo.subs.filter((td) => !td.done || showChecked).length > 0) && @@ -263,12 +282,12 @@ const editSubtodo= (todo: Subtodo) => {
- setDoneSub(i, j, stodo,e.target.checked)}> + setDoneSub(todo, stodo,e.target.checked)}> - + - + {(j + 1) < todo.subs!.filter((td) => !td.done || showChecked).length && }