import { FormBuilder, FormGroup, Validators } from '@angular/forms';
@Component({
selector: 'app-register',
//... other properties
})
export class RegisterComponent implements OnInit {
//... other properties
product!: Product;
formRegisterProduct!: FormGroup; // <-- form Group de todos os inputs
constructor(
private productService: ProductService,
private activatedRoute: ActivatedRoute,
private router: Router,
// dependency injection do FormBuilder
private formBuilder: FormBuilder
) {}
ngOnInit(): void {
this.route = this.activatedRoute.snapshot.url[0].path;
// utilizar de um método pra criar o formulário
this.createForm();
if (this.route === 'edit') {
this.id = this.activatedRoute.snapshot.url[1].path;
this.productService
.getProductById(this.id)
.subscribe((product: Product) => {
this.product = product;
// setar todos os controles do forms com o product extraído
// ..do banco de dados
this.formRegisterProduct.controls['name'].setValue(this.product.name);
this.formRegisterProduct.controls['description'].setValue(
this.product.description
);
this.formRegisterProduct.controls['price'].setValue(
this.product.price
);
// ..outros controles do Product
});
} else {
// ..comportamento do create new product (formulário vazio)
}
}
createForm() {
// construindo um formulárioGorup com o formBuilder.group e utilizando validações
this.formRegisterProduct = this.formBuilder.group({
name: ['', [Validators.required]],
description: ['', [Validators.required]],
price: [0, [Validators.required, Validators.min(1)]],
});
}
// método que vai ser executado através do evento click do botão de cadastrar product/atualizar product
saveProduct() {
// verificação se o formulário foi alterado para evitar atualizações desnecessárias no banco de dados (no caso de atualizar produto)
if (!(this.formRegisterProduct.dirty && this.formRegisterProduct.touched)) {
return;
}
// verificar se o formulário está validado
if (this.formRegisterProduct.valid) {
// armazenar os valores do formulário
const productData = this.formRegisterProduct.value;
if (this.isNewProduct) {
this.createProduct(productData);
} else {
// atualizar o id do produto
this.updateProduct({ ...productData, id: this.id });
}
}
}
updateProduct(productData: Product) {
this.productService.updateProduct(productData).subscribe((res) => {
this.router.navigate(['product', 'list']);
});
}
createProduct(productData: Product) {
this.productService.createProduct(productData).subscribe((res) => {
this.router.navigate(['product', 'list']);
});
}
}