From 9738536cf81dbb392d5c9de4a25dc690dba94f4e Mon Sep 17 00:00:00 2001 From: jank Date: Tue, 24 Jun 2025 08:59:27 +0200 Subject: [PATCH] fix: No dual requests --- src/app/create-todo/create-todo.html | 11 +++++++---- src/app/create-todo/create-todo.ts | 25 ++++++++++++++++++------- src/app/service/task-service.ts | 2 +- src/app/todo-table/todo-table.ts | 9 +++++++-- 4 files changed, 33 insertions(+), 14 deletions(-) diff --git a/src/app/create-todo/create-todo.html b/src/app/create-todo/create-todo.html index ce2f52e..0ec6cad 100644 --- a/src/app/create-todo/create-todo.html +++ b/src/app/create-todo/create-todo.html @@ -2,13 +2,16 @@ - - @if (isEditing()) { - - } diff --git a/src/app/create-todo/create-todo.ts b/src/app/create-todo/create-todo.ts index 18bf8e2..3350865 100644 --- a/src/app/create-todo/create-todo.ts +++ b/src/app/create-todo/create-todo.ts @@ -20,7 +20,7 @@ export class CreateTodo { private datePipe = new DatePipe('en-US'); private taskService: TaskService = inject(TaskService); - @Input({ required: true }) tasks!: ResourceRef; + @Input({ required: true }) tasks!: ResourceRef; @Input() editTodo: number = -1; ngOnInit() { @@ -37,13 +37,24 @@ export class CreateTodo { submit() { if (this.form.valid) { if (this.form.value.id == -1) { - this.taskService - .createTask(this.form.value) - .then(() => this.tasks.reload()); + this.taskService.createTask(this.form.value).then((task) => + this.tasks.update((tasks: Task[]) => { + tasks.push(task); + return tasks; + }), + ); } else { - this.taskService - .updateTask(this.form.value) - .then(() => this.tasks.reload()); + this.taskService.updateTask(this.form.value).then((task: Task) => { + this.tasks.update((tasks: Task[]) => { + return tasks.map((existingTask) => { + if (existingTask.id == task.id) { + return task; + } else { + return existingTask; + } + }); + }); + }); this.isEditing.set(false); } this.form.controls['id'].setValue(-1); diff --git a/src/app/service/task-service.ts b/src/app/service/task-service.ts index e17cfda..c6dab1b 100644 --- a/src/app/service/task-service.ts +++ b/src/app/service/task-service.ts @@ -71,7 +71,7 @@ export class TaskService { if (response.status != 200) { reject('Request did not fetch tasks succesfully'); } else { - response.json().then((json) => resolve(json)); + response.json().then((json) => resolve(task)); } }); }); diff --git a/src/app/todo-table/todo-table.ts b/src/app/todo-table/todo-table.ts index 51531f3..29cd716 100644 --- a/src/app/todo-table/todo-table.ts +++ b/src/app/todo-table/todo-table.ts @@ -20,6 +20,7 @@ export class TodoTable { const response = await fetch('http://localhost:2000/api/tasks'); return (await response.json()) as Task[]; }, + defaultValue: [], }); private taskService: TaskService = inject(TaskService); @@ -30,10 +31,14 @@ export class TodoTable { } deleteTask(task: Task) { - this.taskService.deleteTask(task).then(() => this.tasks.reload()); + this.taskService.deleteTask(task).then(() => + this.tasks.update((tasks: Task[]) => { + return tasks.filter((existingTask) => existingTask.id != task.id); + }), + ); } toggleTaskDoneStatus(task: Task) { - this.taskService.toggleTaskDoneStatus(task).then(() => this.tasks.reload()); + this.taskService.toggleTaskDoneStatus(task); } }