datacite/bracco

View on GitHub
app/helpers/provider-form-errors.js

Summary

Maintainability
C
7 hrs
Test Coverage
import { helper } from '@ember/component/helper';
import { isPresent } from '@ember/utils';

const providerLabelList = {
  symbol: 'member ID',
  confirmSymbol: 'confirm member ID',
  globusUuid: 'globus UUID',
  rorId: 'ROR ID',
  name: 'provider name',
  displayName: 'provider display name',
  systemEmail: 'system email',
  votingContact: 'voting representative',
  serviceContact: 'service contact',
  billingContact: 'billing contact',
  'billingInformation.state': 'billing state/province information',
  doiEstimate: 'doi estimate'
};
const organizationLabelList = {
  symbol: 'member ID',
  confirmSymbol: 'confirm member ID',
  globusUuid: 'globus UUID',
  rorId: 'ROR ID',
  name: 'organization name',
  displayName: 'organization display name',
  systemEmail: 'system email',
  serviceContact: 'service contact',
  doiEstimate: 'doi estimate'
};

export function providerFormErrors([model]) {
  let errorAttributes = model.validations.errors.mapBy('attribute');

  // check validation errors for embedded data model fragments
  // but only if contacts exist
  if (model.get('contacts').length > 0) {
    if (
      model.serviceContact &&
      isPresent(model.serviceContact.validations.errors)
    ) {
      errorAttributes = errorAttributes.concat(
        'service contact ' +
          model.serviceContact.validations.errors.mapBy('attribute')
      );
    }

    // the following fields are disabled for consortium organizations
    if (
      model.memberType !== 'consortium_organization' &&
      model.memberType !== 'developer'
    ) {
      if (
        model.billingContact &&
        isPresent(model.billingContact.validations.errors)
      ) {
        errorAttributes = errorAttributes.concat(
          'billing contact ' +
            model.billingContact.validations.errors.mapBy('attribute')
        );
      }
      if (
        model.votingContact &&
        isPresent(model.votingContact.validations.errors)
      ) {
        errorAttributes = errorAttributes.concat(
          'voting contact ' +
            model.votingContact.validations.errors.mapBy('attribute')
        );
      }
    }
  }

  return errorAttributes
    .map(function (attribute) {
      if (model.memberType === 'consortium_organization') {
        return organizationLabelList[attribute] || attribute;
      } else {
        return providerLabelList[attribute] || attribute;
      }
    })
    .join(', ');
}

export default helper(providerFormErrors);