/** Angular Imports */ import { Component , Input } from '@angular/core' ; import { MatDialog } from '@angular/material/dialog' ; /** Custom Models */ import { FormfieldBase } from 'app/shared/form-dialog/formfield/model/formfield-base' ; import { InputBase } from 'app/shared/form-dialog/formfield/model/input-base' ; import { SelectBase } from 'app/shared/form-dialog/formfield/model/select-base' ; /** Custom Dialogs */ import { FormDialogComponent } from 'app/shared/form-dialog/form-dialog.component' ; import { DeleteDialogComponent } from 'app/shared/delete-dialog/delete-dialog.component' ; /**
 * Client Address Step Component
 */ @ Component ( { selector : 'mifosx-client-address-step' , templateUrl : './client-address-step.component.html' , styleUrls : [ './client-address-step.component.scss' ] } ) export class ClientAddressStepComponent { /** Client Address Field Config */ @ Input ( ) clientAddressFieldConfig : any ; /** Client Template */ @ Input ( ) clientTemplate : any ; /** Client Address Data */ clientAddressData : any [ ] = [ ] ; param { MatDialog } dialog constructor ( private dialog ) { } /**
     * Adds a client address
     */ addAddress ( ) { const data = { title : 'Add Client Address' , formfields : this . getAddressFormFields ( ) } ; const addAddressDialogRef = this . dialog . open ( FormDialogComponent , { data } ) ; addAddressDialogRef . afterClosed ( ) . subscribe ( ( response ) => { if ( response . data ) { const addressData = response . data . value ; addressData . isActive = false ; for ( const key in addressData ) { if ( addressData [ key ] === '' || addressData [ key ] === undefined ) { delete addressData [ key ] ; } } this . clientAddressData . push ( addressData ) ; } } ) ; } param { any } address param { number } index editAddress ( address , index ) { const data = { title : 'Edit Client Address' , formfields : this . getAddressFormFields ( address ) , layout : { addButtonText : 'Edit' } } ; const editAddressDialogRef = this . dialog . open ( FormDialogComponent , { data } ) ; editAddressDialogRef . afterClosed ( ) . subscribe ( ( response ) => { if ( response . data ) { const addressData = response . data . value ; addressData . isActive = address . isActive ; for ( const key in addressData ) { if ( addressData [ key ] === '' || addressData [ key ] === undefined ) { delete addressData [ key ] ; } } this . clientAddressData [ index ] = addressData ; } } ) ; } param { any } address param { number } index deleteAddress ( address , index ) { const deleteAddressDialogRef = this . dialog . open ( DeleteDialogComponent , { data : { deleteContext : `address type : ${ address . addressType } ${ index }` } } ) ; deleteAddressDialogRef . afterClosed ( ) . subscribe ( ( response ) => { if ( response . delete ) { this . clientAddressData . splice ( index , 1 ) ; } } ) ; } param { any } address toggleAddress ( address ) { address . isActive = address . isActive ? false : true ; } param { any } address isFieldEnabled ( fieldName ) { return ( this . clientAddressFieldConfig . find ( ( fieldObj ) => fieldObj . field === fieldName ) ) ?. isEnabled ; } param { any } address getSelectedValue ( fieldName , fieldId ) { return ( this . clientTemplate . address [ 0 ] [ fieldName ] . find ( ( fieldObj ) => fieldObj . id === fieldId ) ) ; } param { any } address getAddressFormFields ( address ? ) { let formfields = [ ] ; formfields . push ( this . isFieldEnabled ( 'addressType' ) ? new SelectBase ( { controlName : 'addressTypeId' , label : 'Address Type' , value : address ? address . addressTypeId : '' , options : { label : 'name' , value : 'id' , data : this . clientTemplate . address [ 0 ] . addressTypeIdOptions } , order : 1 , required : true } ) : null ) ; formfields . push ( this . isFieldEnabled ( 'street' ) ? new InputBase ( { controlName : 'street' , label : 'Street' , value : address ? address . street : '' , type : 'text' , required : true , order : 2 } ) : null ) ; formfields . push ( this . isFieldEnabled ( 'addressLine1' ) ? new InputBase ( { controlName : 'addressLine1' , label : 'Address Line 1' , value : address ? address . addressLine1 : '' , type : 'text' , order : 3 } ) : null ) ; formfields . push ( this . isFieldEnabled ( 'addressLine2' ) ? new InputBase ( { controlName : 'addressLine2' , label : 'Address Line 2' , value : address ? address . addressLine2 : '' , type : 'text' , order : 4 } ) : null ) ; formfields . push ( this . isFieldEnabled ( 'addressLine3' ) ? new InputBase ( { controlName : 'addressLine3' , label : 'Address Line 3' , value : address ? address . addressLine3 : '' , type : 'text' , order : 5 } ) : null ) ; formfields . push ( this . isFieldEnabled ( 'townVillage' ) ? new InputBase ( { controlName : 'townVillage' , label : 'Town / Village' , value : address ? address . townVillage : '' , type : 'text' , order : 6 } ) : null ) ; formfields . push ( this . isFieldEnabled ( 'city' ) ? new InputBase ( { controlName : 'city' , label : 'City' , value : address ? address . city : '' , type : 'text' , order : 7 } ) : null ) ; formfields . push ( this . isFieldEnabled ( 'stateProvinceId' ) ? new SelectBase ( { controlName : 'stateProvinceId' , label : 'State / Province' , value : address ? address . stateProvinceId : '' , options : { label : 'name' , value : 'id' , data : this . clientTemplate . address [ 0 ] . stateProvinceIdOptions } , order : 8 } ) : null ) ; formfields . push ( this . isFieldEnabled ( 'countyDistrict' ) ? new InputBase ( { controlName : 'countryDistrict' , label : 'Country District' , value : address ? address . countyDistrict : '' , type : 'text' , order : 11 } ) : null ) ; formfields . push ( this . isFieldEnabled ( 'countryId' ) ? new SelectBase ( { controlName : 'countryId' , label : 'Country' , value : address ? address . countryId : '' , options : { label : 'name' , value : 'id' , data : this . clientTemplate . address [ 0 ] . countryIdOptions } , order : 10 } ) : null ) ; formfields . push ( this . isFieldEnabled ( 'postalCode' ) ? new InputBase ( { controlName : 'postalCode' , label : 'Postal Code' , value : address ? address . postalCode : '' , type : 'text' , order : 11 } ) : null ) ; formfields = formfields . filter ( field => field !== null ) ; return formfields ; } /**
     * Returns the array of client addresses
     */ get address ( ) { return { address : this . clientAddressData } ; } }