// product/register/register.component.ts
import { Component, OnInit } from '@angular/core';
import { ProductService } from './../services/product.service';
import { ActivatedRoute, Router } from '@angular/router';
import { Product } from '../models/product.model';
@Component({
selector: 'app-register',
templateUrl: './register.component.html',
styleUrls: ['./register.component.scss'],
})
export class RegisterComponent implements OnInit {
title: string = ''; // <-- title do formulário da pagina
route: string = '';
// flag para a captura da ação que é para fazer (se é pra cadastrar - POST - ou alterar - PUT - um prouto)
isNewProduct: boolean = false;
id!: string;
product!: Product;
name: string = '';
description: string = '';
price: number = 0;
//..outras propriedades
constructor(
private productService: ProductService,
private activatedRoute: ActivatedRoute,
private router: Router
) {}
ngOnInit(): void {
this.route = this.activatedRoute.snapshot.url[0].path; // -> pegar o path da url (create ou edidt):
// na url: http://localhost:4200/product/create
if (this.route === 'edit') {
this.id = this.activatedRoute.snapshot.url[1].path; // pegar o id do produto na url http://localhost:4200/product/edit/2
this.productService
.getProductById(this.id)
.subscribe((product: Product) => {
this.product = product;
this.name = this.product.name;
this.description = this.product.description;
//..outras propriedades
this.title = `Editar produto ${this.name}`;
});
} else {
// create new product
this.isNewProduct = true;
this.title = 'Adicionar novo produto';
}
}
saveProduct() {
const productData: Product = {
id: this.id,
name: this.name,
description: this.description,
//..outras propriedades
};
if (this.isNewProduct) {
this.createProduct(productData);
} else {
this.updateProduct(productData);
}
}
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']);
});
}
}