Files
cbsnexora/src/app/clients/client-stepper/client-address-step/client-address-step.component.ts
T

223 lines
6.9 KiB
TypeScript

/** 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 Mat Dialog
*/
constructor(private dialog: MatDialog) { }
/**
* 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: any) => {
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);
}
});
}
/**
* Edit Address
* @param {any} address Address
* @param {number} index Address index
*/
editAddress(address: any, index: number) {
const data = {
title: 'Edit Client Address',
formfields: this.getAddressFormFields(address),
layout: { addButtonText: 'Edit' }
};
const editAddressDialogRef = this.dialog.open(FormDialogComponent, { data });
editAddressDialogRef.afterClosed().subscribe((response: any) => {
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 Client Address
* @param {number} index Address index
*/
deleteAddress(address: any, index: number) {
const deleteAddressDialogRef = this.dialog.open(DeleteDialogComponent, {
data: { deleteContext: `address type : ${address.addressType} ${index}` }
});
deleteAddressDialogRef.afterClosed().subscribe((response: any) => {
if (response.delete) {
this.clientAddressData.splice(index, 1);
}
});
}
/**
* Toggles address activity
* @param {any} address Address
*/
toggleAddress(address: any) {
address.isActive = address.isActive ? false : true;
}
/**
* Checks if field is enabled in address configuration
* @param {any} address Address
*/
isFieldEnabled(fieldName: any) {
return (this.clientAddressFieldConfig.find((fieldObj: any) => fieldObj.field === fieldName))?.isEnabled;
}
/**
* Retrieves field Id from name.
* Find pipe doesn't work with accordian.
* @param {any} address Address
*/
getSelectedValue(fieldName: any, fieldId: any) {
return (this.clientTemplate.address[0][fieldName].find((fieldObj: any) => fieldObj.id === fieldId));
}
/**
* Gets formfields for form dialog.
* @param {any} address Address
*/
getAddressFormFields(address?: any) {
let formfields: FormfieldBase[] = [];
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 };
}
}