feat(edit): implement editing functionality for todos
This commit is contained in:
@ -1,7 +1,8 @@
|
|||||||
import {Component, inject, OnInit} from '@angular/core';
|
import {Component, inject, input, InputSignal, OnInit} from '@angular/core';
|
||||||
import {ActivatedRoute, Router} from "@angular/router";
|
|
||||||
import {TodoService} from "../service/todo.service";
|
|
||||||
import {FormBuilder, FormGroup, ReactiveFormsModule, Validators} from "@angular/forms";
|
import {FormBuilder, FormGroup, ReactiveFormsModule, Validators} from "@angular/forms";
|
||||||
|
import {GetTask} from "../dto/models";
|
||||||
|
import {TodoService} from "../service/todo.service";
|
||||||
|
import {assert} from "@angular/compiler-cli/linker";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-edit',
|
selector: 'app-edit',
|
||||||
@ -12,33 +13,19 @@ import {FormBuilder, FormGroup, ReactiveFormsModule, Validators} from "@angular/
|
|||||||
styleUrl: './edit.component.css'
|
styleUrl: './edit.component.css'
|
||||||
})
|
})
|
||||||
export default class EditComponent implements OnInit{
|
export default class EditComponent implements OnInit{
|
||||||
private id!: number;
|
|
||||||
private todoService: TodoService = inject(TodoService);
|
|
||||||
private route: ActivatedRoute = inject(ActivatedRoute);
|
|
||||||
private fb: FormBuilder = inject(FormBuilder);
|
private fb: FormBuilder = inject(FormBuilder);
|
||||||
|
private todoService: TodoService = inject(TodoService);
|
||||||
public form!: FormGroup;
|
public form!: FormGroup;
|
||||||
|
public todo: InputSignal<GetTask|null> = input<GetTask|null>(null);
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.id = parseInt(this.route.snapshot.paramMap.get('id') ?? '', 10);
|
|
||||||
|
|
||||||
const old = this.todoService.getOne(this.id);
|
|
||||||
this.form = this.fb.group({
|
this.form = this.fb.group({
|
||||||
title: ['', Validators.required],
|
title: [this.todo()?.title, Validators.required],
|
||||||
dueDate: ['', Validators.required],
|
dueDate: [this.todo()?.dueDate, Validators.required],
|
||||||
});
|
});
|
||||||
|
|
||||||
old.subscribe((old => {
|
|
||||||
this.form.patchValue({
|
|
||||||
title: old.title,
|
|
||||||
dueDate: old.dueDate,
|
|
||||||
})
|
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
edit() {
|
edit() {
|
||||||
const edited = this.form.value as { title: string, dueDate: Date };
|
this.todoService.edit(this.form.value, this.todo()?.id ?? 0)
|
||||||
|
|
||||||
this.todoService.edit(edited, this.id).subscribe(() => this.todoService.todos.reload());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,12 @@
|
|||||||
@for (todo of todos.value(); track todo.id) {
|
@for (todo of todos.value(); track todo.id) {
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{{todo.title}}
|
{{ todo.title }}
|
||||||
@if (todo.done) {
|
@if (todo.done) {
|
||||||
✓
|
✓
|
||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
<td>{{todo.dueDate | date}}</td>
|
<td>{{ todo.dueDate | date }}</td>
|
||||||
<td>
|
<td>
|
||||||
<button (click)="markAsDone(todo)">Done</button>
|
<button (click)="markAsDone(todo)">Done</button>
|
||||||
<button (click)="edit(todo)">Edit</button>
|
<button (click)="edit(todo)">Edit</button>
|
||||||
@ -25,3 +25,7 @@
|
|||||||
}
|
}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
@if (editingTodo() !== null) {
|
||||||
|
<app-edit [todo]="editingTodo()" />
|
||||||
|
}
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
import {Component, inject} from '@angular/core';
|
import {Component, inject, signal, WritableSignal} from '@angular/core';
|
||||||
import {TodoService} from "../service/todo.service";
|
import {TodoService} from "../service/todo.service";
|
||||||
import {DatePipe} from "@angular/common";
|
import {DatePipe} from "@angular/common";
|
||||||
import {GetTask} from "../dto/models";
|
import {GetTask} from "../dto/models";
|
||||||
|
import EditComponent from "../edit/edit.component";
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-table',
|
selector: 'app-table',
|
||||||
standalone: true,
|
standalone: true,
|
||||||
imports: [
|
imports: [
|
||||||
DatePipe,
|
DatePipe,
|
||||||
|
EditComponent,
|
||||||
],
|
],
|
||||||
templateUrl: './table.component.html',
|
templateUrl: './table.component.html',
|
||||||
styleUrl: './table.component.css'
|
styleUrl: './table.component.css'
|
||||||
@ -15,7 +17,7 @@ import {GetTask} from "../dto/models";
|
|||||||
export class TableComponent {
|
export class TableComponent {
|
||||||
todoService: TodoService = inject(TodoService);
|
todoService: TodoService = inject(TodoService);
|
||||||
todos = this.todoService.todos;
|
todos = this.todoService.todos;
|
||||||
|
editingTodo: WritableSignal<GetTask|null> = signal(null);
|
||||||
|
|
||||||
markAsDone(todo: GetTask) {
|
markAsDone(todo: GetTask) {
|
||||||
this.todoService.markAsDone(todo).subscribe(() => this.todos.reload());
|
this.todoService.markAsDone(todo).subscribe(() => this.todos.reload());
|
||||||
@ -26,6 +28,6 @@ export class TableComponent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
edit(todo: GetTask) {
|
edit(todo: GetTask) {
|
||||||
|
this.editingTodo.set(todo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user