From 24db7caed54c3c5ffcb501fbe20eaa9acbb871e7 Mon Sep 17 00:00:00 2001 From: Jonathan Zhang <41968151+jonathanzhang53@users.noreply.github.com> Date: Sun, 9 Dec 2018 12:53:49 -0600 Subject: [PATCH] feat: add fixed deposit products component (#345) --- .../fixed-deposit-products.component.html | 40 ++++++++++++ .../fixed-deposit-products.component.scss | 7 ++ .../fixed-deposit-products.component.spec.ts | 25 +++++++ .../fixed-deposit-products.component.ts | 65 +++++++++++++++++++ .../fixed-deposit-products.resolver.ts | 30 +++++++++ src/app/products/products-routing.module.ts | 11 ++++ src/app/products/products.component.html | 2 +- src/app/products/products.module.ts | 4 +- src/app/products/products.service.ts | 8 +++ 9 files changed, 190 insertions(+), 2 deletions(-) create mode 100644 src/app/products/fixed-deposit-products/fixed-deposit-products.component.html create mode 100644 src/app/products/fixed-deposit-products/fixed-deposit-products.component.scss create mode 100644 src/app/products/fixed-deposit-products/fixed-deposit-products.component.spec.ts create mode 100644 src/app/products/fixed-deposit-products/fixed-deposit-products.component.ts create mode 100644 src/app/products/fixed-deposit-products/fixed-deposit-products.resolver.ts diff --git a/src/app/products/fixed-deposit-products/fixed-deposit-products.component.html b/src/app/products/fixed-deposit-products/fixed-deposit-products.component.html new file mode 100644 index 000000000..863c4fb5a --- /dev/null +++ b/src/app/products/fixed-deposit-products/fixed-deposit-products.component.html @@ -0,0 +1,40 @@ +
+ +
+ +
+ +
+ + Filter + + +
+ +
+ + + + + + + + + + + + + + + + +
Name {{ fixedDepositProduct.name }} Short Name {{ fixedDepositProduct.shortName }}
+ + + +
+ +
diff --git a/src/app/products/fixed-deposit-products/fixed-deposit-products.component.scss b/src/app/products/fixed-deposit-products/fixed-deposit-products.component.scss new file mode 100644 index 000000000..24edb63bb --- /dev/null +++ b/src/app/products/fixed-deposit-products/fixed-deposit-products.component.scss @@ -0,0 +1,7 @@ +table { + width: 100%; + + .select-row:hover { + cursor: pointer; + } +} diff --git a/src/app/products/fixed-deposit-products/fixed-deposit-products.component.spec.ts b/src/app/products/fixed-deposit-products/fixed-deposit-products.component.spec.ts new file mode 100644 index 000000000..bfc58dd40 --- /dev/null +++ b/src/app/products/fixed-deposit-products/fixed-deposit-products.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { FixedDepositProductsComponent } from './fixed-deposit-products.component'; + +describe('FixedDepositProductsComponent', () => { + let component: FixedDepositProductsComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ FixedDepositProductsComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(FixedDepositProductsComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/products/fixed-deposit-products/fixed-deposit-products.component.ts b/src/app/products/fixed-deposit-products/fixed-deposit-products.component.ts new file mode 100644 index 000000000..eba6c1a3c --- /dev/null +++ b/src/app/products/fixed-deposit-products/fixed-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'; + +/** + * Fixed Deposit Products component. + */ +@Component({ + selector: 'mifosx-fixed-deposit-products', + templateUrl: './fixed-deposit-products.component.html', + styleUrls: ['./fixed-deposit-products.component.scss'] +}) +export class FixedDepositProductsComponent implements OnInit { + + /** Fixed deposit products data. */ + fixedDepositProductData: any; + /** Columns to be displayed in fixed deposit products table. */ + displayedColumns: string[] = ['name', 'shortName']; + /** Data source for fixed deposit products table. */ + dataSource: MatTableDataSource; + + /** Paginator for fixed deposit products table. */ + @ViewChild(MatPaginator) paginator: MatPaginator; + /** Sorter for fixed deposit products table. */ + @ViewChild(MatSort) sort: MatSort; + + /** + * Retrieves the fixed deposit products data from `resolve`. + * @param {ActivatedRoute} route Activated Route. + */ + constructor(private route: ActivatedRoute) { + this.route.data.subscribe(( data: { fixedDepositProducts: any }) => { + this.fixedDepositProductData = data.fixedDepositProducts; + }); + } + + /** + * Filters data in fixed 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 fixed deposit products table. + */ + ngOnInit() { + this.setFixedDepositProducts(); + } + + /** + * Initializes the data source, paginator and sorter for fixed deposit products table. + */ + setFixedDepositProducts() { + this.dataSource = new MatTableDataSource(this.fixedDepositProductData); + this.dataSource.paginator = this.paginator; + this.dataSource.sort = this.sort; + } + +} diff --git a/src/app/products/fixed-deposit-products/fixed-deposit-products.resolver.ts b/src/app/products/fixed-deposit-products/fixed-deposit-products.resolver.ts new file mode 100644 index 000000000..3832baeb2 --- /dev/null +++ b/src/app/products/fixed-deposit-products/fixed-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'; + +/** + * Fixed Deposit Products data resolver. + */ +@Injectable() +export class FixedDepositProductsResolver implements Resolve { + + /** + * @param {ProductsService} productsService Products service. + */ + constructor(private productsService: ProductsService) {} + + /** + * Returns the fixed deposit products data. + * @returns {Observable} + */ + resolve(): Observable { + return this.productsService.getFixedDepositProducts(); + } + +} diff --git a/src/app/products/products-routing.module.ts b/src/app/products/products-routing.module.ts index 17ffcd5a3..6e2300553 100644 --- a/src/app/products/products-routing.module.ts +++ b/src/app/products/products-routing.module.ts @@ -13,10 +13,12 @@ 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'; import { ChargesComponent } from './charges/charges.component'; +import { FixedDepositProductsComponent } from './fixed-deposit-products/fixed-deposit-products.component'; /** Custom Resolvers */ import { RecurringDepositProductsResolver } from './recurring-deposit-products/recurring-deposit-products.resolver'; import { ChargesResolver } from './charges/charges.resolver'; +import { FixedDepositProductsResolver } from './fixed-deposit-products/fixed-deposit-products.resolver'; /** Products Routes */ const routes: Routes = [ @@ -50,6 +52,14 @@ const routes: Routes = [ }, data: { title: extract('Charges'), breadcrumb: 'Charges' }, }, + { + path: 'fixed-deposit-products', + component: FixedDepositProductsComponent, + resolve: { + fixedDepositProducts: FixedDepositProductsResolver + }, + data: { title: extract('Fixed Deposit Products'), breadcrumb: 'Fixed Deposit Products' }, + }, ] } ]) @@ -66,6 +76,7 @@ const routes: Routes = [ providers: [ RecurringDepositProductsResolver, ChargesResolver, + FixedDepositProductsResolver ] }) export class ProductsRoutingModule { } diff --git a/src/app/products/products.component.html b/src/app/products/products.component.html index b351c8f7e..8fbfd0566 100644 --- a/src/app/products/products.component.html +++ b/src/app/products/products.component.html @@ -56,7 +56,7 @@

Defines rules for taking multiple rules

- + diff --git a/src/app/products/products.module.ts b/src/app/products/products.module.ts index e34e65e90..d2328781f 100644 --- a/src/app/products/products.module.ts +++ b/src/app/products/products.module.ts @@ -10,6 +10,7 @@ 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'; import { ChargesComponent } from './charges/charges.component'; +import { FixedDepositProductsComponent } from './fixed-deposit-products/fixed-deposit-products.component'; /** * Products Module @@ -25,7 +26,8 @@ import { ChargesComponent } from './charges/charges.component'; ProductsComponent, ManageTaxConfigurationsComponent, RecurringDepositProductsComponent, - ChargesComponent + ChargesComponent, + FixedDepositProductsComponent ], entryComponents: [ ] diff --git a/src/app/products/products.service.ts b/src/app/products/products.service.ts index 996736a8e..844a8469f 100644 --- a/src/app/products/products.service.ts +++ b/src/app/products/products.service.ts @@ -34,4 +34,12 @@ export class ProductsService { return this.http.get('/charges'); } + /** + * @param {any} Fetches fixed deposit products. + * @returns {Observable} + */ + getFixedDepositProducts(): Observable { + return this.http.get('/fixeddepositproducts'); + } + }