89 lines
2.8 KiB
TypeScript
89 lines
2.8 KiB
TypeScript
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<BookDto>;
|
|
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());
|
|
}
|
|
});
|
|
}
|
|
}
|