From 07573d011ce65e8171177c8ca76d52a4ddd9d7bd Mon Sep 17 00:00:00 2001 From: Jonathan Zhang <41968151+jonathanzhang53@users.noreply.github.com> Date: Sat, 8 Dec 2018 11:29:42 -0600 Subject: [PATCH] feat: add recurring deposit products component (#341) --- src/app/products/products-routing.module.ts | 13 ++++ src/app/products/products.component.html | 2 +- src/app/products/products.module.ts | 2 + src/app/products/products.service.ts | 9 +++ .../recurring-deposit-products.component.html | 40 ++++++++++++ .../recurring-deposit-products.component.scss | 7 ++ ...curring-deposit-products.component.spec.ts | 25 +++++++ .../recurring-deposit-products.component.ts | 65 +++++++++++++++++++ .../recurring-deposit-products.resolver.ts | 30 +++++++++ 9 files changed, 192 insertions(+), 1 deletion(-) create mode 100644 src/app/products/recurring-deposit-products/recurring-deposit-products.component.html create mode 100644 src/app/products/recurring-deposit-products/recurring-deposit-products.component.scss create mode 100644 src/app/products/recurring-deposit-products/recurring-deposit-products.component.spec.ts create mode 100644 src/app/products/recurring-deposit-products/recurring-deposit-products.component.ts create mode 100644 src/app/products/recurring-deposit-products/recurring-deposit-products.resolver.ts diff --git a/src/app/products/products-routing.module.ts b/src/app/products/products-routing.module.ts index 82a035b45..43f43e42b 100644 --- a/src/app/products/products-routing.module.ts +++ b/src/app/products/products-routing.module.ts @@ -11,6 +11,10 @@ import { extract } from '../core/i18n/i18n.service'; /** Custom Components */ import { ProductsComponent } from './products.component'; import { ManageTaxConfigurationsComponent } from './manage-tax-configurations/manage-tax-configurations.component'; +import { RecurringDepositProductsComponent } from './recurring-deposit-products/recurring-deposit-products.component'; + +/** Custom Resolvers */ +import { RecurringDepositProductsResolver } from './recurring-deposit-products/recurring-deposit-products.resolver'; /** Products Routes */ const routes: Routes = [ @@ -28,6 +32,14 @@ const routes: Routes = [ component: ManageTaxConfigurationsComponent, data: { title: extract('Manage Tax Configurations'), breadcrumb: 'Manage Tax Configurations' }, }, + { + path: 'recurring-deposit-products', + component: RecurringDepositProductsComponent, + resolve: { + recurringDepositProducts: RecurringDepositProductsResolver + }, + data: { title: extract('Recurring Deposit Products'), breadcrumb: 'Recurring Deposit Products' }, + }, ] } ]) @@ -42,6 +54,7 @@ const routes: Routes = [ imports: [RouterModule.forChild(routes)], exports: [RouterModule], providers: [ + RecurringDepositProductsResolver, ] }) export class ProductsRoutingModule { } diff --git a/src/app/products/products.component.html b/src/app/products/products.component.html index f4830db60..6d283125e 100644 --- a/src/app/products/products.component.html +++ b/src/app/products/products.component.html @@ -64,7 +64,7 @@

Add, modify or inactivate a Fixed deposit product

- + diff --git a/src/app/products/products.module.ts b/src/app/products/products.module.ts index 5256d4884..4c62e0cfb 100644 --- a/src/app/products/products.module.ts +++ b/src/app/products/products.module.ts @@ -8,6 +8,7 @@ import { ProductsRoutingModule } from './products-routing.module'; /** Custom Components */ import { ProductsComponent } from './products.component'; import { ManageTaxConfigurationsComponent } from './manage-tax-configurations/manage-tax-configurations.component'; +import { RecurringDepositProductsComponent } from './recurring-deposit-products/recurring-deposit-products.component'; /** * Products Module @@ -22,6 +23,7 @@ import { ManageTaxConfigurationsComponent } from './manage-tax-configurations/ma declarations: [ ProductsComponent, ManageTaxConfigurationsComponent, + RecurringDepositProductsComponent ], entryComponents: [ ] diff --git a/src/app/products/products.service.ts b/src/app/products/products.service.ts index e3da05124..9281c26d4 100644 --- a/src/app/products/products.service.ts +++ b/src/app/products/products.service.ts @@ -17,4 +17,13 @@ export class ProductsService { * @param {HttpClient} http Http Client to send requests. */ constructor(private http: HttpClient) { } + + /** + * @param {any} Fetches recurring deposit products. + * @returns {Observable} + */ + getRecurringDepositProducts(): Observable { + return this.http.get('/recurringdepositproducts'); + } + } diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-products.component.html b/src/app/products/recurring-deposit-products/recurring-deposit-products.component.html new file mode 100644 index 000000000..73ccea622 --- /dev/null +++ b/src/app/products/recurring-deposit-products/recurring-deposit-products.component.html @@ -0,0 +1,40 @@ +
+ +
+ +
+ +
+ + Filter + + +
+ +
+ + + + + + + + + + + + + + + + +
Name {{ recurringDepositProduct.name }} Short Name {{ recurringDepositProduct.shortName }}
+ + + +
+ +
diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-products.component.scss b/src/app/products/recurring-deposit-products/recurring-deposit-products.component.scss new file mode 100644 index 000000000..24edb63bb --- /dev/null +++ b/src/app/products/recurring-deposit-products/recurring-deposit-products.component.scss @@ -0,0 +1,7 @@ +table { + width: 100%; + + .select-row:hover { + cursor: pointer; + } +} diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-products.component.spec.ts b/src/app/products/recurring-deposit-products/recurring-deposit-products.component.spec.ts new file mode 100644 index 000000000..6cb3ceae4 --- /dev/null +++ b/src/app/products/recurring-deposit-products/recurring-deposit-products.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { RecurringDepositProductsComponent } from './recurring-deposit-products.component'; + +describe('RecurringDepositProductsComponent', () => { + let component: RecurringDepositProductsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ RecurringDepositProductsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(RecurringDepositProductsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-products.component.ts b/src/app/products/recurring-deposit-products/recurring-deposit-products.component.ts new file mode 100644 index 000000000..c14826113 --- /dev/null +++ b/src/app/products/recurring-deposit-products/recurring-deposit-products.component.ts @@ -0,0 +1,65 @@ +/** Angular Imports */ +import { Component, OnInit, ViewChild } from '@angular/core'; +import { MatTableDataSource, MatPaginator, MatSort } from '@angular/material'; +import { ActivatedRoute } from '@angular/router'; + +/** rxjs Imports */ +import { of } from 'rxjs'; + +/** + * Recurring Deposit Products component. + */ +@Component({ + selector: 'mifosx-recurring-deposit-products', + templateUrl: './recurring-deposit-products.component.html', + styleUrls: ['./recurring-deposit-products.component.scss'] +}) +export class RecurringDepositProductsComponent implements OnInit { + + /** Data table data. */ + recurringDepositProductData: any; + /** Columns to be displayed in recurring deposit products table. */ + displayedColumns: string[] = ['name', 'shortName']; + /** Data source for recurring deposit products table. */ + dataSource: MatTableDataSource; + + /** Paginator for recurring deposit products table. */ + @ViewChild(MatPaginator) paginator: MatPaginator; + /** Sorter for recurring deposit products table. */ + @ViewChild(MatSort) sort: MatSort; + + /** + * Retrieves the recurring deposit products data from `resolve`. + * @param {ActivatedRoute} route Activated Route. + */ + constructor(private route: ActivatedRoute) { + this.route.data.subscribe(( data: { recurringDepositProducts: any }) => { + this.recurringDepositProductData = data.recurringDepositProducts; + }); + } + + /** + * Filters data in recurring deposit products table based on passed value. + * @param {string} filterValue Value to filter data. + */ + applyFilter(filterValue: string) { + this.dataSource.filter = filterValue.trim().toLowerCase(); + } + + /** + * Sets the recurring deposit products table. + */ + ngOnInit() { + this.setRecurringDepositProducts(); + } + + /** + * Initializes the data source, paginator and sorter for recurring deposit products table. + */ + setRecurringDepositProducts() { + this.dataSource = new MatTableDataSource(this.recurringDepositProductData); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + +} diff --git a/src/app/products/recurring-deposit-products/recurring-deposit-products.resolver.ts b/src/app/products/recurring-deposit-products/recurring-deposit-products.resolver.ts new file mode 100644 index 000000000..8284adf83 --- /dev/null +++ b/src/app/products/recurring-deposit-products/recurring-deposit-products.resolver.ts @@ -0,0 +1,30 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { ProductsService } from '../products.service'; + +/** + * Recurring Deposit Products data resolver. + */ +@Injectable() +export class RecurringDepositProductsResolver implements Resolve { + + /** + * @param {ProductsService} productsService Products service. + */ + constructor(private productsService: ProductsService) {} + + /** + * Returns the recurring deposit products data. + * @returns {Observable} + */ + resolve(): Observable { + return this.productsService.getRecurringDepositProducts(); + } + +}