UNPKG

ih-portal

Version:

A project for connecting interaction hub services with catalyst-ui components

134 lines (114 loc) 4.99 kB
import jsonQuery from 'json-query'; /** * This needs to be moved somewhere else...maybe into black lion? * Seems like we should be modeling the data somewhere other than the view. */ export default class ProfileViewModel { constructor() { this.fullName = ''; this.email = 'N/A'; this.mNumber = ''; this.sixPlusTwo = 'N/A'; this.picture = require('./nophoto.png'); this.cellPhone = 'N/A'; this.homePhone = 'N/A'; this.currentAddress = null; this.permanentAddress = null; } /** * Convert data models from web services into a view model. * @param {object} profileData profile data. * @param {object} pictureData picture/avatar data. * @return {object} a view model tailored for the view. */ static toViewModel(profileData, pictureData) { const viewModel = new ProfileViewModel(); const validValue = (value) => { return value ? value : 'N/A'; }; if (!profileData || !profileData.sccGetconstResp || !profileData.sccGetconstResp.constituent) { return viewModel; } const dataModel = this.profileModelMapping(profileData); viewModel.currentAddress = jsonQuery('addresses[addressType=MAIL]', { data: dataModel }).value; viewModel.permanentAddress = jsonQuery('addresses[addressType=PERM]', { data: dataModel }).value; viewModel.cellPhone = validValue(jsonQuery('phones.perphone[phoneType=CELL].phone', { data: dataModel }).value); viewModel.homePhone = validValue(jsonQuery('phones.perphone[phoneType=HOME].phone', { data: dataModel }).value); if (pictureData && pictureData.src) { viewModel.picture = 'data:image/png;base64, ' + pictureData.src; } viewModel.fullName = validValue(jsonQuery( 'perNames.perName[0].name', {data: dataModel}).value); viewModel.email = validValue(jsonQuery( 'emailAddresses.emailAddress[eAddrType=CAMP].emailAddr', {data: dataModel}).value); viewModel.mNumber = validValue(jsonQuery( 'externalSystemKeys.externalSystemKey[externalSystem=UID].externalSystems.externalSys.externalSystemId', {data: dataModel}).value); viewModel.sixPlusTwo = validValue(jsonQuery( 'usernameId', {data: dataModel}).value); return viewModel; } /** * Converting some properties to lists. * @param {object} profileData profile data from service operation/web service. * @return {object} new data model. */ static profileModelMapping(profileData) { const model = profileData.sccGetconstResp.constituent; //Sort the addresses by effective date and filter out addresses with effective dates in the future if (model.addresses.address) { if(Array.isArray(model.addresses.address)){ model.addresses = model.addresses.address .sort((a, b) => { return new Date(b.effdt) - new Date(a.effdt); }) .filter((item)=> Date.parse(item.effdt) <= new Date() ); } else { model.addresses = [model.addresses.address]; } } if (model.phones.perphone && !Array.isArray(model.phones.perphone)) { model.phones.perphone = [model.phones.perphone]; } if (model.perNames.perName && !Array.isArray(model.perNames.perName)) { model.perNames.perName = [model.perNames.perName]; } else if (model.perNames.perName && Array.isArray(model.perNames.perName)){ model.perNames.perName = model.perNames.perName .sort((a, b) => { return new Date(b.effdt) - new Date(a.effdt); }) .filter((item)=> Date.parse(item.effdt) <= new Date() && item.nameType === 'PRF' ); } if (model.emailAddresses.emailAddress && !Array.isArray(model.emailAddresses.emailAddress)) { model.emailAddresses.emailAddress = [model.emailAddresses.emailAddress]; } if (model.externalSystemKeys.externalSystemKey && !Array.isArray(model.externalSystemKeys.externalSystemKey)) { model.usernameId = [model.externalSystemKeys.externalSystemKey.externalSystemId]; } else if (model.externalSystemKeys.externalSystemKey && Array.isArray(model.externalSystemKeys.externalSystemKey)){ let username = model.externalSystemKeys.externalSystemKey .filter((item)=> item.externalSystem === 'U62' ); if (Array.isArray(username) && username.length === 1){ username = username[0]; if(username.externalSystems.externalSys){ if(Array.isArray(username.externalSystems.externalSys)){ username = username.externalSystems.externalSys .sort((a, b) => { return new Date(b.effdt) - new Date(a.effdt) ; }) .filter((item)=> Date.parse(item.effdt) <= new Date() ); if (username.length > 1) { username = username[0]; } } else { username = username.externalSystems.externalSys; } } } model.usernameId = username.externalSystemId; } return model; } }