From f73173bf4c5b7a79b5766083f98ec5bff23eecab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 1 Sep 2020 16:45:45 +0300 Subject: [PATCH 1/5] Update angular book UI for the proxy generation changes. --- docs/en/Tutorials/Part-2.md | 13 ++-- docs/en/Tutorials/Part-3.md | 56 +++++++----------- .../Tutorials/images/generated-proxies-3.png | Bin 0 -> 11889 bytes 3 files changed, 26 insertions(+), 43 deletions(-) create mode 100644 docs/en/Tutorials/images/generated-proxies-3.png diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index c947f4495d..bcec504886 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -347,9 +347,9 @@ This is a fully working, server side paged, sorted and localized table of books. ## Install NPM packages -> Notice: This tutorial is based on the ABP Framework v3.0.3+ If your project version is older, then please upgrade your solution. See the [migration guide](../UI/Angular/Migration-Guide-v3.md) if you are upgrading an existing project with v2.x. +> Notice: This tutorial is based on the ABP Framework v3.1.0+ If your project version is older, then please upgrade your solution. See the [migration guide](../UI/Angular/Migration-Guide-v3.md) if you are upgrading an existing project with v2.x. -If you haven't done it before, open a new command line interface (terminal window) and go to your `angular` folder and then run `yarn` command to install NPM packages: +If you haven't done it before, open a new command line interface (terminal window) and go to your `angular` folder and then run `yarn` command to install the NPM packages: ```bash yarn @@ -473,9 +473,9 @@ Run the following command in the `angular` folder: abp generate-proxy ``` -The generated files looks like below: +This command will create the following files under the `/src/app/proxy/books` folder: -![Generated files](./images/generated-proxies-2.png) +![Generated files](./images/generated-proxies-3.png) ### BookComponent @@ -484,8 +484,7 @@ Open the `/src/app/book/book.component.ts` file and replace the content as below ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; -import { BookDto } from './models'; -import { BookService } from './services'; +import { BookService, BookDto } from '@proxy/books'; @Component({ selector: 'app-book', @@ -499,7 +498,7 @@ export class BookComponent implements OnInit { constructor(public readonly list: ListService, private bookService: BookService) {} ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); + const bookStreamCreator = (query) => this.bookService.getList(query); this.list.hookToQuery(bookStreamCreator).subscribe((response) => { this.book = response; diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 13aa5df8c3..2eef56e79a 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -656,8 +656,7 @@ Open `/src/app/book/book.component.ts` and replace the content as below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; -import { BookDto } from './models'; -import { BookService } from './services'; +import { BookService, BookDto } from '@proxy/books'; @Component({ selector: 'app-book', @@ -673,7 +672,7 @@ export class BookComponent implements OnInit { constructor(public readonly list: ListService, private bookService: BookService) {} ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); + const bookStreamCreator = (query) => this.bookService.getList(query); this.list.hookToQuery(bookStreamCreator).subscribe((response) => { this.book = response; @@ -749,8 +748,8 @@ Open `/src/app/book/book.component.ts` and replace the content as below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from './models'; // add BookType -import { BookService } from './services'; +// import bookTypeOptions from @proxy/books +import { BookService, BookDto, bookTypeOptions } from '@proxy/books'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; // add this @Component({ @@ -764,12 +763,8 @@ export class BookComponent implements OnInit { form: FormGroup; // add this line - bookType = BookType; // add this line - // add bookTypes as a list of BookType enum members - bookTypes = Object.keys(this.bookType).filter( - (key) => typeof this.bookType[key] === 'number' - ); + bookTypes = bookTypeOptions; isModalOpen = false; @@ -780,7 +775,7 @@ export class BookComponent implements OnInit { ) {} ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); + const bookStreamCreator = (query) => this.bookService.getList(query); this.list.hookToQuery(bookStreamCreator).subscribe((response) => { this.book = response; @@ -808,7 +803,7 @@ export class BookComponent implements OnInit { return; } - this.bookService.createByInput(this.form.value).subscribe(() => { + this.bookService.create(this.form.value).subscribe(() => { this.isModalOpen = false; this.form.reset(); this.list.get(); @@ -819,7 +814,6 @@ export class BookComponent implements OnInit { * Imported `FormGroup`, `FormBuilder` and `Validators` from `@angular/forms`. * Added `form: FormGroup` property. -* Added `bookType` property so that you can reach `BookType` enum members from template. * Added `bookTypes` property as a list of `BookType` enum members. That will be used in form options. * Injected `FormBuilder` into the constructor. [FormBuilder](https://angular.io/api/forms/FormBuilder) provides convenient methods for generating form controls. It reduces the amount of boilerplate needed to build complex forms. * Added `buildForm` method to the end of the file and executed the `buildForm()` in the `createBook` method. @@ -910,8 +904,7 @@ Open `/src/app/book/book.component.ts` and replace the content as below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType } from './models'; -import { BookService } from './services'; +import { BookService, BookDto, bookTypeOptions } from '@proxy/books'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; // added this line @@ -931,11 +924,7 @@ export class BookComponent implements OnInit { form: FormGroup; - bookType = BookType; - - bookTypes = Object.keys(this.bookType).filter( - (key) => typeof this.bookType[key] === 'number' - ); + bookTypes = bookTypeOptions; isModalOpen = false; @@ -946,7 +935,7 @@ export class BookComponent implements OnInit { ) {} ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); + const bookStreamCreator = (query) => this.bookService.getList(query); this.list.hookToQuery(bookStreamCreator).subscribe((response) => { this.book = response; @@ -972,7 +961,7 @@ export class BookComponent implements OnInit { return; } - this.bookService.createByInput(this.form.value).subscribe(() => { + this.bookService.create(this.form.value).subscribe(() => { this.isModalOpen = false; this.form.reset(); this.list.get(); @@ -995,8 +984,7 @@ Open `/src/app/book/book.component.ts` and replace the content as shown below: ```js import { ListService, PagedResultDto } from '@abp/ng.core'; import { Component, OnInit } from '@angular/core'; -import { BookDto, BookType, CreateUpdateBookDto } from './models'; -import { BookService } from './services'; +import { BookService, BookDto, bookTypeOptions } from '@proxy/books'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; @@ -1009,15 +997,11 @@ import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap export class BookComponent implements OnInit { book = { items: [], totalCount: 0 } as PagedResultDto; - selectedBook = new BookDto(); // declare selectedBook + selectedBook = {} as BookDto; // declare selectedBook form: FormGroup; - bookType = BookType; - - bookTypes = Object.keys(this.bookType).filter( - (key) => typeof this.bookType[key] === 'number' - ); + bookTypes = bookTypeOptions; isModalOpen = false; @@ -1028,7 +1012,7 @@ export class BookComponent implements OnInit { ) {} ngOnInit() { - const bookStreamCreator = (query) => this.bookService.getListByInput(query); + const bookStreamCreator = (query) => this.bookService.getList(query); this.list.hookToQuery(bookStreamCreator).subscribe((response) => { this.book = response; @@ -1036,14 +1020,14 @@ export class BookComponent implements OnInit { } createBook() { - this.selectedBook = new BookDto(); // reset the selected book + this.selectedBook = {} as BookDto; // reset the selected book this.buildForm(); this.isModalOpen = true; } // Add editBook method editBook(id: string) { - this.bookService.getById(id).subscribe((book) => { + this.bookService.get(id).subscribe((book) => { this.selectedBook = book; this.buildForm(); this.isModalOpen = true; @@ -1069,8 +1053,8 @@ export class BookComponent implements OnInit { } const request = this.selectedBook.id - ? this.bookService.updateByIdAndInput(this.form.value, this.selectedBook.id) - : this.bookService.createByInput(this.form.value); + ? this.bookService.update(this.form.value, this.selectedBook.id) + : this.bookService.create(this.form.value); request.subscribe(() => { this.isModalOpen = false; @@ -1155,7 +1139,7 @@ constructor( delete(id: string) { this.confirmation.warn('::AreYouSureToDelete', '::AreYouSure').subscribe((status) => { if (status === Confirmation.Status.confirm) { - this.bookService.deleteById(id).subscribe(() => this.list.get()); + this.bookService.delete(id).subscribe(() => this.list.get()); } }); } diff --git a/docs/en/Tutorials/images/generated-proxies-3.png b/docs/en/Tutorials/images/generated-proxies-3.png new file mode 100644 index 0000000000000000000000000000000000000000..2a94f4e389bc46e006e43ad8e940d2a5d2c8d8f6 GIT binary patch literal 11889 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 P$$<~z@?zy81_A#AY)0!* literal 0 HcmV?d00001 From b00ccef6b680399b6589b15bdfdfa29acaaca49c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 1 Sep 2020 16:49:53 +0300 Subject: [PATCH 2/5] Fix book type --- docs/en/Tutorials/Part-3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 2eef56e79a..70deaa1503 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -838,7 +838,7 @@ Open `/src/app/book/book.component.html` and replace ` Type * From 423744c4280d3d1bef188611fbd7cf74455ba2ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 1 Sep 2020 17:08:45 +0300 Subject: [PATCH 3/5] Fixed author part angular UI --- docs/en/Tutorials/Part-3.md | 2 +- docs/en/Tutorials/Part-9.md | 19 +++++++++--------- ...okstore-angular-service-proxy-author-2.png | Bin 0 -> 9507 bytes 3 files changed, 10 insertions(+), 11 deletions(-) create mode 100644 docs/en/Tutorials/images/bookstore-angular-service-proxy-author-2.png diff --git a/docs/en/Tutorials/Part-3.md b/docs/en/Tutorials/Part-3.md index 70deaa1503..be3dd75d64 100644 --- a/docs/en/Tutorials/Part-3.md +++ b/docs/en/Tutorials/Part-3.md @@ -1053,7 +1053,7 @@ export class BookComponent implements OnInit { } const request = this.selectedBook.id - ? this.bookService.update(this.form.value, this.selectedBook.id) + ? this.bookService.update(this.selectedBook.id, this.form.value) : this.bookService.create(this.form.value); request.subscribe(() => { diff --git a/docs/en/Tutorials/Part-9.md b/docs/en/Tutorials/Part-9.md index 1b9451700d..0d78d584b8 100644 --- a/docs/en/Tutorials/Part-9.md +++ b/docs/en/Tutorials/Part-9.md @@ -621,7 +621,7 @@ abp generate-proxy This command generates the service proxy for the author service and the related model (DTO) classes: -![bookstore-angular-service-proxy-author](images/bookstore-angular-service-proxy-author.png) +![bookstore-angular-service-proxy-author](images/bookstore-angular-service-proxy-author-2.png) ### AuthorComponent @@ -630,8 +630,7 @@ Open the `/src/app/author/author.component.ts` file and replace the content as b ```js import { Component, OnInit } from '@angular/core'; import { ListService, PagedResultDto } from '@abp/ng.core'; -import { AuthorDto } from './models'; -import { AuthorService } from './services'; +import { AuthorService, AuthorDto } from '@proxy/authors'; import { FormGroup, FormBuilder, Validators } from '@angular/forms'; import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; @@ -649,7 +648,7 @@ export class AuthorComponent implements OnInit { form: FormGroup; - selectedAuthor = new AuthorDto(); + selectedAuthor = {} as AuthorDto; constructor( public readonly list: ListService, @@ -659,7 +658,7 @@ export class AuthorComponent implements OnInit { ) {} ngOnInit(): void { - const authorStreamCreator = (query) => this.authorService.getListByInput(query); + const authorStreamCreator = (query) => this.authorService.getList(query); this.list.hookToQuery(authorStreamCreator).subscribe((response) => { this.author = response; @@ -667,13 +666,13 @@ export class AuthorComponent implements OnInit { } createAuthor() { - this.selectedAuthor = new AuthorDto(); + this.selectedAuthor = {} as AuthorDto; this.buildForm(); this.isModalOpen = true; } editAuthor(id: string) { - this.authorService.getById(id).subscribe((author) => { + this.authorService.get(id).subscribe((author) => { this.selectedAuthor = author; this.buildForm(); this.isModalOpen = true; @@ -697,14 +696,14 @@ export class AuthorComponent implements OnInit { if (this.selectedAuthor.id) { this.authorService - .updateByIdAndInput(this.form.value, this.selectedAuthor.id) + .update(this.selectedAuthor.id, this.form.value) .subscribe(() => { this.isModalOpen = false; this.form.reset(); this.list.get(); }); } else { - this.authorService.createByInput(this.form.value).subscribe(() => { + this.authorService.create(this.form.value).subscribe(() => { this.isModalOpen = false; this.form.reset(); this.list.get(); @@ -716,7 +715,7 @@ export class AuthorComponent implements OnInit { this.confirmation.warn('::AreYouSureToDelete', '::AreYouSure') .subscribe((status) => { if (status === Confirmation.Status.confirm) { - this.authorService.deleteById(id).subscribe(() => this.list.get()); + this.authorService.delete(id).subscribe(() => this.list.get()); } }); } diff --git a/docs/en/Tutorials/images/bookstore-angular-service-proxy-author-2.png b/docs/en/Tutorials/images/bookstore-angular-service-proxy-author-2.png new file mode 100644 index 0000000000000000000000000000000000000000..d76179bb78e47ffb40dc41c3996ea4a73649a90c GIT binary patch literal 9507 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 Date: Tue, 1 Sep 2020 17:33:57 +0300 Subject: [PATCH 4/5] Added author to the book list. --- docs/en/Tutorials/Part-10.md | 15 ++++++++++++++- .../bookstore-books-with-authorname-angular.png | Bin 0 -> 38482 bytes 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 docs/en/Tutorials/images/bookstore-books-with-authorname-angular.png diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md index 0fa4892298..0604b8e584 100644 --- a/docs/en/Tutorials/Part-10.md +++ b/docs/en/Tutorials/Part-10.md @@ -915,6 +915,19 @@ You can run the application and try to create a new book or update an existing b {{else if UI=="NG"}} -***Angular UI is being prepared...*** +### The Book List + +Book list page change is trivial. Open the `/src/app/book/book.component.html` and add the following column definition between the `Name` and `Type` columns: + +````js + +```` + +When you run the application, you can see the *Author* column on the table: + +![bookstore-books-with-authorname-angular](images/bookstore-books-with-authorname-angular.png) {{end}} \ No newline at end of file diff --git a/docs/en/Tutorials/images/bookstore-books-with-authorname-angular.png b/docs/en/Tutorials/images/bookstore-books-with-authorname-angular.png new file mode 100644 index 0000000000000000000000000000000000000000..6f081c16f9f117dd2488cee4de3997bf7a9e4094 GIT binary patch literal 38482 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 a7ae{#p0-?CedN~5p2f@ Date: Tue, 1 Sep 2020 18:11:33 +0300 Subject: [PATCH 5/5] Added author combobox to book create/edit form. --- docs/en/Tutorials/Part-10.md | 130 ++++++++++++++++++ .../bookstore-angular-author-selection.png | Bin 0 -> 36377 bytes 2 files changed, 130 insertions(+) create mode 100644 docs/en/Tutorials/images/bookstore-angular-author-selection.png diff --git a/docs/en/Tutorials/Part-10.md b/docs/en/Tutorials/Part-10.md index 0604b8e584..1542a00559 100644 --- a/docs/en/Tutorials/Part-10.md +++ b/docs/en/Tutorials/Part-10.md @@ -930,4 +930,134 @@ When you run the application, you can see the *Author* column on the table: ![bookstore-books-with-authorname-angular](images/bookstore-books-with-authorname-angular.png) +### Create/Edit Forms + +The next step is to add an Author selection (dropdown) to the create/edit forms. The final UI will look like the one shown below: + +![bookstore-angular-author-selection](images/bookstore-angular-author-selection.png) + +Added the Author dropdown as the first element in the form. + +Open the `/src/app/book/book.component.ts` and and change the content as shown below: + +````typescript +import { ListService, PagedResultDto } from '@abp/ng.core'; +import { Component, OnInit } from '@angular/core'; +import { BookService, BookDto, bookTypeOptions, AuthorLookupDto } from '@proxy/books'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; +import { NgbDateNativeAdapter, NgbDateAdapter } from '@ng-bootstrap/ng-bootstrap'; +import { ConfirmationService, Confirmation } from '@abp/ng.theme.shared'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +@Component({ + selector: 'app-book', + templateUrl: './book.component.html', + styleUrls: ['./book.component.scss'], + providers: [ListService, { provide: NgbDateAdapter, useClass: NgbDateNativeAdapter }], +}) +export class BookComponent implements OnInit { + book = { items: [], totalCount: 0 } as PagedResultDto; + + form: FormGroup; + + selectedBook = {} as BookDto; + + authors$: Observable; + + bookTypes = bookTypeOptions; + + isModalOpen = false; + + constructor( + public readonly list: ListService, + private bookService: BookService, + private fb: FormBuilder, + private confirmation: ConfirmationService + ) { + this.authors$ = bookService.getAuthorLookup().pipe(map((r) => r.items)); + } + + ngOnInit() { + const bookStreamCreator = (query) => this.bookService.getList(query); + + this.list.hookToQuery(bookStreamCreator).subscribe((response) => { + this.book = response; + }); + } + + createBook() { + this.selectedBook = {} as BookDto; + this.buildForm(); + this.isModalOpen = true; + } + + editBook(id: string) { + this.bookService.get(id).subscribe((book) => { + this.selectedBook = book; + this.buildForm(); + this.isModalOpen = true; + }); + } + + buildForm() { + this.form = this.fb.group({ + authorId: [this.selectedBook.authorId || null, Validators.required], + name: [this.selectedBook.name || null, Validators.required], + type: [this.selectedBook.type || null, Validators.required], + publishDate: [ + this.selectedBook.publishDate ? new Date(this.selectedBook.publishDate) : null, + Validators.required, + ], + price: [this.selectedBook.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(); + }); + } + + delete(id: string) { + this.confirmation.warn('::AreYouSureToDelete', 'AbpAccount::AreYouSure').subscribe((status) => { + if (status === Confirmation.Status.confirm) { + this.bookService.delete(id).subscribe(() => this.list.get()); + } + }); + } +} +```` + +* Added imports for the `AuthorLookupDto`, `Observable` and `map`. +* Added `authors$: Observable;` field after the `selectedBook`. +* Added `this.authors$ = bookService.getAuthorLookup().pipe(map((r) => r.items));` into the constructor. +* Added ` authorId: [this.selectedBook.authorId || null, Validators.required],` into the `buildForm()` function. + +Open the `/src/app/book/book.component.html` and add the following form group just before the book name form group: + +````html +
+ * + +
+```` + +That's all. Just run the application and try to create or edit an author. + {{end}} \ No newline at end of file diff --git a/docs/en/Tutorials/images/bookstore-angular-author-selection.png b/docs/en/Tutorials/images/bookstore-angular-author-selection.png new file mode 100644 index 0000000000000000000000000000000000000000..bb604233ab772d1fc793f305d5ee1f133e8441d2 GIT binary patch literal 36377 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

Hbe7m_MWO`tVXAB3Iq>K=T~6M7kh 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 literal 0 HcmV?d00001