sagar
sagar

Reputation: 19

Refactor this function

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}),
  }
}

Upvotes: 0

Views: 51

Answers (1)

Molda
Molda

Reputation: 5704

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.

Upvotes: 1

Related Questions