From 1ed56d2a6242d5a39f052f082c6512a6160c58e5 Mon Sep 17 00:00:00 2001 From: punwai Date: Wed, 18 Dec 2019 15:19:34 +0700 Subject: [PATCH] feat: add view template component (#513) Fixes: #512 --- src/app/templates/template.resolver.ts | 31 ++++++++++ src/app/templates/templates-routing.module.ts | 18 +++++- src/app/templates/templates.component.html | 2 +- src/app/templates/templates.component.scss | 4 ++ src/app/templates/templates.module.ts | 4 +- src/app/templates/templates.service.ts | 16 +++++ .../view-template.component.html | 51 ++++++++++++++++ .../view-template.component.scss | 10 +++ .../view-template.component.spec.ts | 25 ++++++++ .../view-template/view-template.component.ts | 61 +++++++++++++++++++ 10 files changed, 219 insertions(+), 3 deletions(-) create mode 100644 src/app/templates/template.resolver.ts create mode 100644 src/app/templates/view-template/view-template.component.html create mode 100644 src/app/templates/view-template/view-template.component.scss create mode 100644 src/app/templates/view-template/view-template.component.spec.ts create mode 100644 src/app/templates/view-template/view-template.component.ts diff --git a/src/app/templates/template.resolver.ts b/src/app/templates/template.resolver.ts new file mode 100644 index 000000000..dcb78dd00 --- /dev/null +++ b/src/app/templates/template.resolver.ts @@ -0,0 +1,31 @@ +/** Angular Imports */ +import { Injectable } from '@angular/core'; +import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; + +/** rxjs Imports */ +import { Observable } from 'rxjs'; + +/** Custom Services */ +import { TemplatesService } from './templates.service'; + +/** + * Template data resolver. + */ +@Injectable() +export class TemplateResolver implements Resolve { + + /** + * @param {TemplatesService} templatesService Templates service. + */ + constructor(private templatesService: TemplatesService) {} + + /** + * Returns the Template data. + * @returns {Observable} + */ + resolve(route: ActivatedRouteSnapshot): Observable { + const templateId = route.paramMap.get('id'); + return this.templatesService.getTemplate(templateId); + } + +} diff --git a/src/app/templates/templates-routing.module.ts b/src/app/templates/templates-routing.module.ts index 3d45efe75..10aaf6f50 100644 --- a/src/app/templates/templates-routing.module.ts +++ b/src/app/templates/templates-routing.module.ts @@ -10,9 +10,11 @@ import { extract } from '../core/i18n/i18n.service'; /** Custom Components */ import { TemplatesComponent } from './templates.component'; +import { ViewTemplateComponent } from './view-template/view-template.component'; /** Custom Resolvers */ import { TemplatesResolver } from './templates.resolver'; +import { TemplateResolver } from './template.resolver'; /** Templates Routes */ const routes: Routes = [ @@ -27,6 +29,19 @@ const routes: Routes = [ resolve: { templates: TemplatesResolver } + }, + { + path: ':id', + data: { title: extract('View Template'), routeResolveBreadcrumb: ['template', 'name'] }, + resolve: { + template: TemplateResolver + }, + children: [ + { + path: '', + component: ViewTemplateComponent, + } + ] } ] } @@ -42,7 +57,8 @@ const routes: Routes = [ imports: [RouterModule.forChild(routes)], exports: [RouterModule], providers: [ - TemplatesResolver + TemplatesResolver, + TemplateResolver ] }) export class TemplatesRoutingModule { } diff --git a/src/app/templates/templates.component.html b/src/app/templates/templates.component.html index 921761dc5..2be3f8dc5 100644 --- a/src/app/templates/templates.component.html +++ b/src/app/templates/templates.component.html @@ -34,7 +34,7 @@ - + diff --git a/src/app/templates/templates.component.scss b/src/app/templates/templates.component.scss index 1922e7ffa..24edb63bb 100644 --- a/src/app/templates/templates.component.scss +++ b/src/app/templates/templates.component.scss @@ -1,3 +1,7 @@ table { width: 100%; + + .select-row:hover { + cursor: pointer; + } } diff --git a/src/app/templates/templates.module.ts b/src/app/templates/templates.module.ts index 58dd7725d..a682248ef 100644 --- a/src/app/templates/templates.module.ts +++ b/src/app/templates/templates.module.ts @@ -7,6 +7,7 @@ import { TemplatesRoutingModule } from './templates-routing.module'; /** Custom Components */ import { TemplatesComponent } from './templates.component'; +import { ViewTemplateComponent } from './view-template/view-template.component'; /** * Templates Module @@ -19,7 +20,8 @@ import { TemplatesComponent } from './templates.component'; TemplatesRoutingModule ], declarations: [ - TemplatesComponent + TemplatesComponent, + ViewTemplateComponent, ] }) export class TemplatesModule { } diff --git a/src/app/templates/templates.service.ts b/src/app/templates/templates.service.ts index c50583446..2b5795d1e 100644 --- a/src/app/templates/templates.service.ts +++ b/src/app/templates/templates.service.ts @@ -25,4 +25,20 @@ export class TemplatesService { return this.http.get('/templates'); } + /** + * @param templateId Template ID. + * @returns {Observable} Fetches Template. + */ + getTemplate(templateId: string): Observable { + return this.http.get(`/templates/${templateId}`); + } + + /** + * @param templateId Template ID. + * @returns {Observable} + */ + deleteTemplate(templateId: string): Observable { + return this.http.delete(`/templates/${templateId}`); + } + } diff --git a/src/app/templates/view-template/view-template.component.html b/src/app/templates/view-template/view-template.component.html new file mode 100644 index 000000000..e9b405f2c --- /dev/null +++ b/src/app/templates/view-template/view-template.component.html @@ -0,0 +1,51 @@ +
+ + + + + +
+ +
+ + + + + +
+ +
+ Entity +
+ +
+ {{ templateData.entity }} +
+ +
+ Type +
+ +
+ {{ templateData.type }} +
+ +
+ Text +
+ +
+ +
+ +
+ +
+ +
diff --git a/src/app/templates/view-template/view-template.component.scss b/src/app/templates/view-template/view-template.component.scss new file mode 100644 index 000000000..56668f14f --- /dev/null +++ b/src/app/templates/view-template/view-template.component.scss @@ -0,0 +1,10 @@ +.container { + max-width: 37rem; + + .content { + div { + margin: 1rem 0; + word-wrap: break-word; + } + } +} diff --git a/src/app/templates/view-template/view-template.component.spec.ts b/src/app/templates/view-template/view-template.component.spec.ts new file mode 100644 index 000000000..f4972ab23 --- /dev/null +++ b/src/app/templates/view-template/view-template.component.spec.ts @@ -0,0 +1,25 @@ +import { async, ComponentFixture, TestBed } from '@angular/core/testing'; + +import { ViewTemplateComponent } from './view-template.component'; + +describe('ViewTemplateComponent', () => { + let component: ViewTemplateComponent; + let fixture: ComponentFixture; + + beforeEach(async(() => { + TestBed.configureTestingModule({ + declarations: [ ViewTemplateComponent ] + }) + .compileComponents(); + })); + + beforeEach(() => { + fixture = TestBed.createComponent(ViewTemplateComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/templates/view-template/view-template.component.ts b/src/app/templates/view-template/view-template.component.ts new file mode 100644 index 000000000..2d5f13a9b --- /dev/null +++ b/src/app/templates/view-template/view-template.component.ts @@ -0,0 +1,61 @@ +/** Angular Imports */ +import { Component, OnInit } from '@angular/core'; +import { ActivatedRoute, Router } from '@angular/router'; +import { MatDialog } from '@angular/material'; + +/** Custom Services */ +import { TemplatesService } from '../templates.service'; + +/** Custom Components */ +import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component'; + +/** + * View Template Component. + */ +@Component({ + selector: 'mifosx-view-template', + templateUrl: './view-template.component.html', + styleUrls: ['./view-template.component.scss'] +}) +export class ViewTemplateComponent implements OnInit { + + /** Template Data */ + templateData: any; + + /** + * Retrieves the template data from `resolve`. + * @param {TemplateService} templateService Accounting Service. + * @param {ActivatedRoute} route Activated Route. + * @param {Router} router Router for navigation. + * @param {MatDialog} dialog Dialog reference. + */ + constructor(private route: ActivatedRoute, + private templatesService: TemplatesService, + private router: Router, + private dialog: MatDialog) { + this.route.data.subscribe((data: { template: any }) => { + this.templateData = data.template; + }); + } + + ngOnInit() { + } + + /** + * Deletes the template and redirects to templates. + */ + delete() { + const deleteTemplateDialogRef = this.dialog.open(DeleteDialogComponent, { + data: { deleteContext: `template ${this.templateData.id}` } + }); + deleteTemplateDialogRef.afterClosed().subscribe((response: any) => { + if (response.delete) { + this.templatesService.deleteTemplate(this.templateData.id) + .subscribe(() => { + this.router.navigate(['/templates']); + }); + } + }); + } + +}