import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; import { FormBuilder, FormGroup, Validators } from '@angular/forms'; import { BookService, BookDto, bookTypeOptions } from '@proxy/books'; import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; @Component({ selector: 'app-book', templateUrl: './book.component.html', styleUrls: ['./book.component.scss'], providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter } // add this line ], }) export class BookComponent implements OnInit { book = { items: [], totalCount: 0 } as PagedResultDto; selectedBook = {} as BookDto; // declare selectedBook isModalOpen = false; // add this line form: FormGroup; // add this line bookTypes = bookTypeOptions; constructor(public readonly list: ListService, private bookService: BookService, private fb: FormBuilder, private confirmation: ConfirmationService ) {} ngOnInit() { debugger; const bookStreamCreator = (query) => this.bookService.getList(query); this.list.hookToQuery(bookStreamCreator).subscribe((response) => { this.book = response; }); } // add new method createBook() { this.buildForm(); // add this line this.selectedBook = {} as BookDto; // reset the selected book this.isModalOpen = true; } buildForm() { this.form = this.fb.group({ name: ['', Validators.required], type: [null, Validators.required], publishDate: [null, Validators.required], price: [null, Validators.required], }); } save() { if (this.form.invalid) { return; } const request = this.selectedBook.id ? this.bookService.update(this.selectedBook.id, this.form.value) : this.bookService.create(this.form.value); request.subscribe(() => { this.isModalOpen = false; this.form.reset(); this.list.get(); }); } // Add editBook method editBook(id: string) { this.bookService.get(id).subscribe((book) => { this.selectedBook = book; this.buildForm(); this.form.controls["name"].setValue(this.selectedBook.name); this.form.controls["type"].setValue(this.selectedBook.type); this.form.controls["publishDate"].setValue(this.selectedBook.publishDate); this.form.controls["price"].setValue(this.selectedBook.price); this.isModalOpen = true; }); } delete(id: string) { this.confirmation.warn('::AreYouSureToDelete', '::AreYouSure').subscribe((status) => { if (status === Confirmation.Status.confirm) { this.bookService.delete(id).subscribe(() => this.list.get()); } }); } }