Received sonar issue for refactoring below function. Any way to refactor below function.
function getBodyFields(request:UpdateCustomerRequest, tmsGuid:string) {
return {
tmsGuid: tmsGuid,
...((request.organizationName && request.organizationName !== "") && {'organizationName': request.organizationName}),
...((request.firstName && request.firstName !== "") && {'firstName': request.firstName}),
...((request.middleInitial && request.middleInitial !== "") && {'middleInitial': request.middleInitial}),
...((request.lastName && request.lastName !== "") && {'lastName': request.lastName}),
...((request.email && request.email !== "") && {'email': request.email}),
...((request.communicationEmail && request.communicationEmail !== "") && {'communicationEmail': request.communicationEmail}),
...((request.areaCode && request.areaCode !== "") && {'areaCode': request.areaCode}),
...((request.phoneNumber && request.phoneNumber !== "") && {'phoneNumber': request.phoneNumber}),
...((request.phoneType && request.phoneType !== "") && {'phoneType': request.phoneType}),
...((request.alternatePhoneAreaCode && request.alternatePhoneAreaCode !== "") && {'alternatePhoneAreaCode': request.alternatePhoneAreaCode}),
...((request.alternatePhoneNumber && request.alternatePhoneNumber !== "") && {'alternatePhoneNumber': request.alternatePhoneNumber}),
...((request.alternatePhoneType && request.alternatePhoneType !== "") && {'alternatePhoneType': request.alternatePhoneType}),
...((request.address1 && request.address1 !== "") && {'address1': request.address1}),
...((request.address2 && request.address2 !== "") && {'address2': request.address2}),
...((request.city && request.city !== "") && {'city': request.city}),
...((request.state && request.state !== "") && {'state': request.state}),
...((request.zip && request.zip !== "") && {'zip': request.zip}),
}
}
You could use a loop since you test all the props the same way.
const props = [
'organizationName',
'firstName',
'middleInitial',
'lastName',
'email',
'communicationEmail',
'areaCode',
'phoneNumber',
'phoneType',
'alternatePhoneAreaCode',
'alternatePhoneNumber',
'alternatePhoneType',
'address1',
'address2',
'city',
'state',
'zip'
];
function getBodyFields(request:UpdateCustomerRequest, tmsGuid:string) {
var obj = {
tmsGuid: tmsGuid
};
props.forEach(p => {
if (typeof request[p] === 'string' && request[p] !== '')
obj[p] = request[p];
});
return obj;
}
It's better to check if the value is string since your check request.zip && request.zip !== ""
will return true even if the zip
is true
or 1
or [1]
or any truthy value.