chore: Fix editing
This commit is contained in:
parent
28c0420354
commit
bb67052158
6 changed files with 30 additions and 17 deletions
|
@ -1,7 +1,8 @@
|
||||||
<p>create-todo works!</p>
|
|
||||||
<form [formGroup]="form" (submit)="submit()">
|
<form [formGroup]="form" (submit)="submit()">
|
||||||
<input type="number" formControlName="id" style="display: hidden" />
|
|
||||||
<input type="text" formControlName="title" />
|
<input type="text" formControlName="title" />
|
||||||
<input type="date" formControlName="dueDate" />
|
<input type="date" formControlName="dueDate" />
|
||||||
<button type="submit">Create</button>
|
<button type="submit">{{ isEditing() ? "Update" : "Create" }}</button>
|
||||||
|
@if (isEditing()) {
|
||||||
|
<button type="button" (click)="stopEdit()">Stop Editing</button>
|
||||||
|
}
|
||||||
</form>
|
</form>
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
import { DatePipe } from '@angular/common';
|
import { DatePipe } from '@angular/common';
|
||||||
import { Component, Input, input, ResourceRef } from '@angular/core';
|
import { Component, Input, ResourceRef, signal } from '@angular/core';
|
||||||
import {
|
import {
|
||||||
FormControl,
|
FormControl,
|
||||||
FormGroup,
|
FormGroup,
|
||||||
FormsModule,
|
|
||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
Validators,
|
Validators,
|
||||||
} from '@angular/forms';
|
} from '@angular/forms';
|
||||||
|
@ -17,7 +16,9 @@ import {
|
||||||
export class CreateTodo {
|
export class CreateTodo {
|
||||||
public form!: FormGroup;
|
public form!: FormGroup;
|
||||||
private datePipe = new DatePipe('en-US');
|
private datePipe = new DatePipe('en-US');
|
||||||
|
public isEditing = signal(false);
|
||||||
@Input({ required: true }) tasks!: ResourceRef<any>;
|
@Input({ required: true }) tasks!: ResourceRef<any>;
|
||||||
|
@Input() editTodo: number = -1;
|
||||||
|
|
||||||
submit() {
|
submit() {
|
||||||
if (this.form.valid) {
|
if (this.form.valid) {
|
||||||
|
@ -30,8 +31,9 @@ export class CreateTodo {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
editTask(task: Task) {
|
stopEdit() {
|
||||||
this.form.patchValue({ id: task.id });
|
this.isEditing.set(false);
|
||||||
|
this.form.controls['id'].setValue(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateTask(task: Task) {
|
updateTask(task: Task) {
|
||||||
|
@ -44,6 +46,7 @@ export class CreateTodo {
|
||||||
}).then(() => {
|
}).then(() => {
|
||||||
this.tasks.reload();
|
this.tasks.reload();
|
||||||
});
|
});
|
||||||
|
this.isEditing.set(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
createTask(task: Task) {
|
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() {
|
ngOnInit() {
|
||||||
this.form = new FormGroup({
|
this.form = new FormGroup({
|
||||||
id: new FormControl(-1),
|
id: new FormControl(-1),
|
||||||
|
@ -65,6 +77,7 @@ export class CreateTodo {
|
||||||
dueDate: new FormControl(
|
dueDate: new FormControl(
|
||||||
this.datePipe.transform(new Date(), 'yyyy-MM-dd'),
|
this.datePipe.transform(new Date(), 'yyyy-MM-dd'),
|
||||||
),
|
),
|
||||||
|
done: new FormControl(false),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
<app-create-todo #form [tasks]="table.tasks"></app-create-todo>
|
<app-create-todo #form [tasks]="table.tasks"></app-create-todo>
|
||||||
<app-todo-table #table [editTask]="form.editTask"></app-todo-table>
|
<app-todo-table #table (editTaskEvent)="form.editTask($event)"></app-todo-table>
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
import { Component } from '@angular/core';
|
import { Component } from '@angular/core';
|
||||||
import { RouterOutlet } from '@angular/router';
|
|
||||||
import { TodoTable } from '../todo-table/todo-table';
|
import { TodoTable } from '../todo-table/todo-table';
|
||||||
import { CreateTodo } from '../create-todo/create-todo';
|
import { CreateTodo } from '../create-todo/create-todo';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-home',
|
selector: 'app-home',
|
||||||
imports: [RouterOutlet, TodoTable, CreateTodo],
|
imports: [TodoTable, CreateTodo],
|
||||||
templateUrl: './home.html',
|
templateUrl: './home.html',
|
||||||
styleUrl: './home.css',
|
styleUrl: './home.css',
|
||||||
})
|
})
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
<p>todo-table works!</p>
|
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
import { JsonPipe } from '@angular/common';
|
import { Component, EventEmitter, Output, resource } from '@angular/core';
|
||||||
import { Component, computed, effect, Input, resource } from '@angular/core';
|
|
||||||
import { CreateTodo } from '../create-todo/create-todo';
|
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'app-todo-table',
|
selector: 'app-todo-table',
|
||||||
imports: [JsonPipe, CreateTodo],
|
|
||||||
templateUrl: './todo-table.html',
|
templateUrl: './todo-table.html',
|
||||||
styleUrl: './todo-table.css',
|
styleUrl: './todo-table.css',
|
||||||
})
|
})
|
||||||
|
@ -12,10 +9,14 @@ export class TodoTable {
|
||||||
public tasks = resource({
|
public tasks = resource({
|
||||||
loader: async (): Promise<Task[]> => {
|
loader: async (): Promise<Task[]> => {
|
||||||
const response = await fetch('http://localhost:2000/api/tasks');
|
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<Task>();
|
||||||
|
|
||||||
|
editTask(task: Task) {
|
||||||
|
this.editTaskEvent.emit(task);
|
||||||
|
}
|
||||||
|
|
||||||
toggleTaskDoneStatus(task: Task) {
|
toggleTaskDoneStatus(task: Task) {
|
||||||
fetch('http://localhost:2000/api/tasks/' + task.id, {
|
fetch('http://localhost:2000/api/tasks/' + task.id, {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue