From bb6705215870e44d43c85c4556af505a75bf4905 Mon Sep 17 00:00:00 2001 From: jank Date: Mon, 23 Jun 2025 10:57:16 +0200 Subject: [PATCH] chore: Fix editing --- src/app/create-todo/create-todo.html | 7 ++++--- src/app/create-todo/create-todo.ts | 21 +++++++++++++++++---- src/app/home/home.html | 2 +- src/app/home/home.ts | 3 +-- src/app/todo-table/todo-table.html | 1 - src/app/todo-table/todo-table.ts | 13 +++++++------ 6 files changed, 30 insertions(+), 17 deletions(-) diff --git a/src/app/create-todo/create-todo.html b/src/app/create-todo/create-todo.html index 4d31da4..deabe0c 100644 --- a/src/app/create-todo/create-todo.html +++ b/src/app/create-todo/create-todo.html @@ -1,7 +1,8 @@ -

create-todo works!

- - + + @if (isEditing()) { + + }
diff --git a/src/app/create-todo/create-todo.ts b/src/app/create-todo/create-todo.ts index 6fa0267..d5f96b4 100644 --- a/src/app/create-todo/create-todo.ts +++ b/src/app/create-todo/create-todo.ts @@ -1,9 +1,8 @@ import { DatePipe } from '@angular/common'; -import { Component, Input, input, ResourceRef } from '@angular/core'; +import { Component, Input, ResourceRef, signal } from '@angular/core'; import { FormControl, FormGroup, - FormsModule, ReactiveFormsModule, Validators, } from '@angular/forms'; @@ -17,7 +16,9 @@ import { export class CreateTodo { public form!: FormGroup; private datePipe = new DatePipe('en-US'); + public isEditing = signal(false); @Input({ required: true }) tasks!: ResourceRef; + @Input() editTodo: number = -1; submit() { if (this.form.valid) { @@ -30,8 +31,9 @@ export class CreateTodo { } } - editTask(task: Task) { - this.form.patchValue({ id: task.id }); + stopEdit() { + this.isEditing.set(false); + this.form.controls['id'].setValue(-1); } updateTask(task: Task) { @@ -44,6 +46,7 @@ export class CreateTodo { }).then(() => { this.tasks.reload(); }); + this.isEditing.set(false); } createTask(task: Task) { @@ -58,6 +61,15 @@ export class CreateTodo { }); } + editTask(task: Task) { + this.form.controls['id'].setValue(task.id); + this.form.controls['title'].setValue(task.title); + this.form.controls['dueDate'].setValue( + this.datePipe.transform(task.dueDate, 'yyyy-MM-dd'), + ); + this.isEditing.set(true); + } + ngOnInit() { this.form = new FormGroup({ id: new FormControl(-1), @@ -65,6 +77,7 @@ export class CreateTodo { dueDate: new FormControl( this.datePipe.transform(new Date(), 'yyyy-MM-dd'), ), + done: new FormControl(false), }); } } diff --git a/src/app/home/home.html b/src/app/home/home.html index e40ffcc..8c21e55 100644 --- a/src/app/home/home.html +++ b/src/app/home/home.html @@ -1,2 +1,2 @@ - + diff --git a/src/app/home/home.ts b/src/app/home/home.ts index b50d00f..63bc5df 100644 --- a/src/app/home/home.ts +++ b/src/app/home/home.ts @@ -1,11 +1,10 @@ import { Component } from '@angular/core'; -import { RouterOutlet } from '@angular/router'; import { TodoTable } from '../todo-table/todo-table'; import { CreateTodo } from '../create-todo/create-todo'; @Component({ selector: 'app-home', - imports: [RouterOutlet, TodoTable, CreateTodo], + imports: [TodoTable, CreateTodo], templateUrl: './home.html', styleUrl: './home.css', }) diff --git a/src/app/todo-table/todo-table.html b/src/app/todo-table/todo-table.html index 053ed0c..fdfae25 100644 --- a/src/app/todo-table/todo-table.html +++ b/src/app/todo-table/todo-table.html @@ -1,4 +1,3 @@ -

todo-table works!

diff --git a/src/app/todo-table/todo-table.ts b/src/app/todo-table/todo-table.ts index eee57aa..de5d11d 100644 --- a/src/app/todo-table/todo-table.ts +++ b/src/app/todo-table/todo-table.ts @@ -1,10 +1,7 @@ -import { JsonPipe } from '@angular/common'; -import { Component, computed, effect, Input, resource } from '@angular/core'; -import { CreateTodo } from '../create-todo/create-todo'; +import { Component, EventEmitter, Output, resource } from '@angular/core'; @Component({ selector: 'app-todo-table', - imports: [JsonPipe, CreateTodo], templateUrl: './todo-table.html', styleUrl: './todo-table.css', }) @@ -12,10 +9,14 @@ export class TodoTable { public tasks = resource({ loader: async (): Promise => { const response = await fetch('http://localhost:2000/api/tasks'); - return await response.json(); + return (await response.json()) as Task[]; }, }); - @Input({ required: true }) editTask!: (task: Task) => void; + @Output() editTaskEvent = new EventEmitter(); + + editTask(task: Task) { + this.editTaskEvent.emit(task); + } toggleTaskDoneStatus(task: Task) { fetch('http://localhost:2000/api/tasks/' + task.id, {