Made use of ng2-bootstrap-modal. 13/56713/4
authorArundathi Patil <arundpil@in.ibm.com>
Wed, 18 Jul 2018 10:11:05 +0000 (15:41 +0530)
committerTakamune Cho <tc012c@att.com>
Tue, 24 Jul 2018 14:43:16 +0000 (14:43 +0000)
This will remove all the duplicate code of ng-bootstrap popup.

Made following changes to the below files,

1. app.module.ts:
a. added the confirm modal component to declarations and entryComponents section because component will be created dynamically.
b. imported BootstrapModalModule from ng2-bootstrap-modal
2. vnfs.module.ts:
a. removed the confirm modal component from declarations and
   entryComponents section as it is already declared as part of
   app.module.ts.
3. confirm.component.ts:
a. added two more varibles 'cancelButtonText' and
   'confirmButtonText' to ConfirmModel interface. these values will
    be sent by the caller code and the button lables will be set
    dynamically.
b. implemented cancel method that sets the modal result value to
   false, this is called on click of close
   button.
4. about.component.ts:
a. Made use of confirm.component.ts.
b. on click of 'view change log' buton we are calling open()
   method which inturn opens the confirm modal component.
5. about.component.html:
a. Removed call to versionLogFile() method as this method is
   called from open() method.
b. Removed the ng-template code of ng-bootstrap which is no more
   required.

Issue-ID: APPC-1088
Change-Id: I9de545debed145ef35e31807acd1e9bd9cc2bad4
Signed-off-by: Arundathi Patil <arundpil@in.ibm.com>
src/app/about-us/aboutus.component.html
src/app/about-us/aboutus.component.ts
src/app/app.module.ts
src/app/shared/confirmModal/confirm.component.ts
src/app/vnfs/vnfs.module.ts

index 3c2fb52..554fd4a 100644 (file)
@@ -2,6 +2,8 @@
 ============LICENSE_START==========================================
 ===================================================================
 Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+
+Copyright (C) 2018 IBM Intellectual Property. All rights reserved.
 ===================================================================
 
 Unless otherwise specified, all software contained herein is licensed
@@ -19,7 +21,7 @@ limitations under the License.
 
 ============LICENSE_END============================================
 -->
-
+<simple-notifications [options]="options"></simple-notifications>
 <div class="text-center">
     <div class="card">
         <div class="mdl-dialog__content">
@@ -27,7 +29,8 @@ limitations under the License.
                 <div class="card-header" style="font-size: 20px">CONTACT DETAILS</div>
                 <div class="mdl-card__title">
                     <div class="text-center">
-                        Contact us @:<a href="mailto:{{contactUsMail.CONTACT_US_EMAIL}}?Subject={{contactUsMail.CONTACT_US_SUBJECT}}">APPC DEVELOPMENT TEAM</a>
+                        Contact us @:
+                        <a href="mailto:{{contactUsMail.CONTACT_US_EMAIL}}?Subject={{contactUsMail.CONTACT_US_SUBJECT}}">APPC DEVELOPMENT TEAM</a>
                     </div>
                 </div>
             </div>&emsp;&emsp;&emsp;&emsp;
@@ -58,7 +61,7 @@ limitations under the License.
                 </div>
                 <div class="text-right">
                     <div class="mdl-dialog__content">
-                        <a class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary" (click)="open(content)" (click)="versionLogFile()">VIEW CHANGE LOG</a>
+                        <a class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary" (click)="open(content)">VIEW CHANGE LOG</a>
                     </div>
                 </div>
 
@@ -66,35 +69,4 @@ limitations under the License.
 
         </div>
     </div>
-</div>
-
-<ng-template #content let-c="close" let-d="dismiss">
-    <div class="modal-content" style="width:800px;vertical-align:auto;">
-        <div class="modal-header">
-            <h4 class="modal-title" style="text-align:center">VERSION CHANGE LOG</h4>
-            <button type="button" class="close" aria-label="Close" (click)="d('Cross click')">
-                <span aria-hidden="true">&times;</span>
-            </button>
-        </div>
-        <div class="modal-body">
-            <div class="form-group row">
-                <html>
-
-                <body>
-                    <textarea class="textarea">{{this.data}}</textarea>
-                </body>
-
-                </html>
-            </div>
-        </div>
-        <div class="modal-footer">
-            <button type="button" (click)="downloadLogFile()" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent
-    " (click)="c('yes')">Download
-            </button>
-            <button type="button" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary
-    
-    " (click)="c('yes')">Cancel
-            </button>
-        </div>
-    </div>
-</ng-template>
\ No newline at end of file
+</div>
\ No newline at end of file
index c983c7b..fe75e41 100644 (file)
@@ -25,8 +25,13 @@ limitations under the License.
 import { Component, OnInit, OnDestroy } from '@angular/core';
 import { Http } from '@angular/http';
 import { Subscription } from 'rxjs/Subscription';
+import { Observable } from 'rxjs/Observable';
+import { NotificationsService } from 'angular2-notifications';
 import { saveAs } from 'file-saver';
 import { ModalDismissReasons, NgbModal } from '@ng-bootstrap/ng-bootstrap';
+import { DialogService } from 'ng2-bootstrap-modal';
+import { ConfirmComponent } from '../shared/confirmModal/confirm.component';
+import { appConstants } from '../../constants/app-constants';
 
 @Component({
     selector: 'app-help',
@@ -41,8 +46,15 @@ export class AboutUsComponent implements OnInit, OnDestroy {
     public data: any;
     closeResult: string;
     versionLogSubscription: Subscription;
-
-    constructor(private http: Http, private modalService: NgbModal) {
+    options = {
+        timeOut: 1000,
+        showProgressBar: true,
+        pauseOnHover: true,
+        clickToClose: true,
+        maxLength: 200
+    };
+
+    constructor(private http: Http, private modalService: NgbModal, private dialogService: DialogService, private notificationsService: NotificationsService) {
     }
 
     ngOnInit() {
@@ -57,16 +69,30 @@ export class AboutUsComponent implements OnInit, OnDestroy {
         }
     }
 
-    versionLogFile() {
-        this.versionLogSubscription = this.http.get('app/about-us/versionLog.txt')
-            .subscribe(res => this.data = res.text());
+    versionLogFile(): Observable<any> {
+        return this.http.get('app/about-us/versionLog.txt');
     }
 
     open(content) {
-        this.modalService.open(content).result.then((result) => {
-            this.closeResult = `Closed with: ${result}`;
-        }, (reason) => {
-            this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
+        this.versionLogSubscription = this.versionLogFile()
+            .subscribe((res) => {
+                this.data = res.text();
+                this.dialogService.addDialog(ConfirmComponent, {
+                    title: 'VERSION CHANGE LOG',
+                    message: this.data,
+                    cancelButtonText: 'CLOSE',
+                    confirmButtonText: 'DOWNLOAD'
+                }).subscribe(isConfirmed => {
+                    if (isConfirmed) {
+                        this.downloadLogFile()
+                    } else {
+                        // do nothing
+                    }
+                });
+
+            },
+        (error)=>{
+            this.notificationsService.error(appConstants.errors.error, 'unable to fetch change log details');
         });
     }
 
index df9bf07..2be6544 100644 (file)
@@ -2,6 +2,8 @@
 ============LICENSE_START==========================================
 ===================================================================
 Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+
+Copyright (C) 2018 IBM Intellectual Property. All rights reserved.
 ===================================================================
 
 Unless otherwise specified, all software contained herein is licensed
@@ -19,29 +21,32 @@ limitations under the License.
 ============LICENSE_END============================================
 */
 
-import {BrowserModule} from '@angular/platform-browser';
-import {NgModule} from '@angular/core';
-import {FormsModule} from '@angular/forms';
-import {SimpleNotificationsModule} from 'angular2-notifications';
-import {HomeModule} from './home/home.module';
-import {AppComponent} from './app.component';
-import {AppRoutingModule} from './app.routing';
-import {SharedModule} from './shared/shared.module';
-import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
-import {HashLocationStrategy, LocationStrategy} from '@angular/common';
-import {NoopAnimationsModule} from '@angular/platform-browser/animations';
-import {RouterModule} from '@angular/router';
-import {TestComponent} from './test/test.component';
-import {AboutUsComponent} from './about-us/aboutus.component';
-import {NgProgressModule} from 'ngx-progressbar';
-import {LoginGuardService} from './vnfs/LoginGuardService/Login-guard-service';
+import { BrowserModule } from '@angular/platform-browser';
+import { NgModule } from '@angular/core';
+import { FormsModule } from '@angular/forms';
+import { SimpleNotificationsModule } from 'angular2-notifications';
+import { BootstrapModalModule } from 'ng2-bootstrap-modal';
+import { HomeModule } from './home/home.module';
+import { AppComponent } from './app.component';
+import { AppRoutingModule } from './app.routing';
+import { SharedModule } from './shared/shared.module';
+import { NgbModule } from '@ng-bootstrap/ng-bootstrap';
+import { HashLocationStrategy, LocationStrategy } from '@angular/common';
+import { NoopAnimationsModule } from '@angular/platform-browser/animations';
+import { RouterModule } from '@angular/router';
+import { TestComponent } from './test/test.component';
+import { AboutUsComponent } from './about-us/aboutus.component';
+import { NgProgressModule } from 'ngx-progressbar';
+import { LoginGuardService } from './vnfs/LoginGuardService/Login-guard-service';
+import { ConfirmComponent } from './shared/confirmModal/confirm.component';
 
 @NgModule({
-    declarations: [AppComponent, TestComponent, AboutUsComponent],
+    declarations: [AppComponent, TestComponent, AboutUsComponent, ConfirmComponent],
     imports: [BrowserModule, FormsModule, HomeModule, SharedModule.forRoot(),
-        NgbModule.forRoot(), NoopAnimationsModule, AppRoutingModule, SimpleNotificationsModule, NgProgressModule],
+        NgbModule.forRoot(), NoopAnimationsModule, AppRoutingModule, SimpleNotificationsModule, NgProgressModule, BootstrapModalModule],
     exports: [RouterModule],
-    providers: [{provide: LocationStrategy, useClass: HashLocationStrategy}, LoginGuardService],
+    providers: [{ provide: LocationStrategy, useClass: HashLocationStrategy }, LoginGuardService],
+    entryComponents: [ConfirmComponent],
 
     bootstrap: [AppComponent]
 })
index 79678b3..5fbf4b3 100644 (file)
@@ -2,6 +2,8 @@
 ============LICENSE_START==========================================
 ===================================================================
 Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+
+Copyright (C) 2018 IBM Intellectual Property. All rights reserved.
 ===================================================================
 
 Unless otherwise specified, all software contained herein is licensed
@@ -20,12 +22,14 @@ limitations under the License.
 ECOMP is a trademark and service mark of AT&T Intellectual Property.
 ============LICENSE_END============================================ */
 
-import {Component} from '@angular/core';
-import {DialogComponent, DialogService} from 'ng2-bootstrap-modal';
+import { Component } from '@angular/core';
+import { DialogComponent, DialogService } from 'ng2-bootstrap-modal';
 
 export interface ConfirmModel {
     title: string;
     message: string;
+    cancelButtonText: string;
+    confirmButtonText: string;
 }
 
 @Component({
@@ -34,15 +38,15 @@ export interface ConfirmModel {
         <div class="modal-dialog">
             <div class="modal-content">
                 <div class="modal-header">
-                    <button type="button" class="close" (click)="close()">&times;</button>
-                    <h4 class="modal-title">Confirm</h4>
+                    <h4 class="modal-title">{{title}}</h4>
+                    <button type="button" class="close" (click)="cancel()">&times;</button>
                 </div>
                 <div class="modal-body">
-                    <p>Change Actions Without Saving?</p>
+                    <p>{{message}}</p>
                 </div>
                 <div class="modal-footer">
-                    <button type="button" class="btn btn-primary" (click)="confirm()">Yes</button>
-                    <button type="button" class="btn btn-default" (click)="close()">Cancel</button>
+                    <button type="button" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent" (click)="confirm()">{{confirmButtonText}}</button>
+                    <button type="button" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--primary" (click)="cancel()">{{cancelButtonText}}</button>
                 </div>
             </div>
         </div>`
@@ -50,6 +54,8 @@ export interface ConfirmModel {
 export class ConfirmComponent extends DialogComponent<ConfirmModel, boolean> implements ConfirmModel {
     title: string;
     message: string;
+    cancelButtonText: string;
+    confirmButtonText: string;
 
     constructor(dialogService: DialogService) {
         super(dialogService);
@@ -61,4 +67,11 @@ export class ConfirmComponent extends DialogComponent<ConfirmModel, boolean> imp
         this.result = true;
         this.close();
     }
+
+    cancel() {
+        // we set dialog result as false on click on cancel/close button,
+        // then we can get dialog result from caller code
+        this.result = false;
+        this.close();
+    }
 }
\ No newline at end of file
index c0f8158..5268033 100644 (file)
@@ -2,6 +2,8 @@
 ============LICENSE_START==========================================
 ===================================================================
 Copyright (C) 2018 AT&T Intellectual Property. All rights reserved.
+
+Copyright (C) 2018 IBM Intellectual Property. All rights reserved.
 ===================================================================
 Copyright (C) 2018 IBM.
 ===================================================================
@@ -23,36 +25,35 @@ ECOMP is a trademark and service mark of AT&T Intellectual Property.
 ============LICENSE_END============================================
 */
 
-import {NgModule} from '@angular/core';
-import {FormsModule} from '@angular/forms';
-import {CommonModule} from '@angular/common';
+import { NgModule } from '@angular/core';
+import { FormsModule } from '@angular/forms';
+import { CommonModule } from '@angular/common';
 // modules
-import {VnfRoutingModule} from './vnf.routing';
-import {SharedModule} from '../shared/shared.module';
+import { VnfRoutingModule } from './vnf.routing';
+import { SharedModule } from '../shared/shared.module';
 import { NgxSpinnerModule } from 'ngx-spinner';
-import {AceEditorComponent} from 'ng2-ace-editor';
+import { AceEditorComponent } from 'ng2-ace-editor';
 // components
-import {MyvnfsComponent} from './myvnfs/myvnfs.component';
-import {ReferenceDataformComponent} from './build-artifacts/reference-dataform/reference-dataform.component';
-import {GoldenConfigurationComponent} from './build-artifacts/template-holder/template-configuration/template-configuration.component';
-import {ParameterComponent} from './build-artifacts/parameter-definitions/parameter.component';
-import {ParameterHolderComponent} from './build-artifacts/parameter-holder/parameter-holder.component';
-import {BootstrapModalModule} from 'ng2-bootstrap-modal';
-import {BuildDesignComponent} from './build-artifacts/build-artifacts.component';
-import {userloginFormComponent} from './userlogin-form/userlogin-form.component';
-import {ReferenceDataHolderComponent} from './build-artifacts/reference-data-holder/reference-data-holder.component';
-import {ModalComponent} from '../shared/modal/modal.component';
-import {VnfsComponent} from './vnfs/vnfs.component';
-import {ConfirmComponent} from '../shared/confirmModal/confirm.component';
-import {GoldenConfigurationHolderComponent} from './build-artifacts/template-holder/template-holder.component';
-import {GoldenConfigurationMappingComponent} from './build-artifacts/template-holder/param-name-value/param-name-value.component';
-import {Tab} from './build-artifacts/template-holder/param-name-value/tab';
-import {Tabs} from './build-artifacts/template-holder/param-name-value/tabs';
-import {Ng2Bs3ModalModule} from 'ng2-bs3-modal/ng2-bs3-modal';
-import {AuthGuardModalComponent} from './auth-guard-modal/auth-guard-modal';
-import {GCAuthGuardService} from './GCAuthGuard/gcauth-guard.service';
-import {LoginGuardService} from './LoginGuardService/Login-guard-service';
-import {SimpleNotificationsModule} from 'angular2-notifications';
+import { MyvnfsComponent } from './myvnfs/myvnfs.component';
+import { ReferenceDataformComponent } from './build-artifacts/reference-dataform/reference-dataform.component';
+import { GoldenConfigurationComponent } from './build-artifacts/template-holder/template-configuration/template-configuration.component';
+import { ParameterComponent } from './build-artifacts/parameter-definitions/parameter.component';
+import { ParameterHolderComponent } from './build-artifacts/parameter-holder/parameter-holder.component';
+import { BootstrapModalModule } from 'ng2-bootstrap-modal';
+import { BuildDesignComponent } from './build-artifacts/build-artifacts.component';
+import { userloginFormComponent } from './userlogin-form/userlogin-form.component';
+import { ReferenceDataHolderComponent } from './build-artifacts/reference-data-holder/reference-data-holder.component';
+import { ModalComponent } from '../shared/modal/modal.component';
+import { VnfsComponent } from './vnfs/vnfs.component';
+import { GoldenConfigurationHolderComponent } from './build-artifacts/template-holder/template-holder.component';
+import { GoldenConfigurationMappingComponent } from './build-artifacts/template-holder/param-name-value/param-name-value.component';
+import { Tab } from './build-artifacts/template-holder/param-name-value/tab';
+import { Tabs } from './build-artifacts/template-holder/param-name-value/tabs';
+import { Ng2Bs3ModalModule } from 'ng2-bs3-modal/ng2-bs3-modal';
+import { AuthGuardModalComponent } from './auth-guard-modal/auth-guard-modal';
+import { GCAuthGuardService } from './GCAuthGuard/gcauth-guard.service';
+import { LoginGuardService } from './LoginGuardService/Login-guard-service';
+import { SimpleNotificationsModule } from 'angular2-notifications';
 
 
 export const components = [
@@ -71,7 +72,6 @@ export const components = [
     AceEditorComponent,
     Tab,
     Tabs,
-    ConfirmComponent,
     AuthGuardModalComponent,
 
 
@@ -89,7 +89,7 @@ export const modules = [
     providers: [GCAuthGuardService, LoginGuardService],
 
 
-    entryComponents: [ConfirmComponent, AuthGuardModalComponent]
+    entryComponents: [AuthGuardModalComponent]
 })
 export class VnfsModule {
-}
\ No newline at end of file
+}