department-of-veterans-affairs/vets-website

View on GitHub
src/applications/hca/config/chapters/insuranceInformation/general.js

Summary

Maintainability
A
0 mins
Test Coverage
import merge from 'lodash/merge';
import fullSchemaHca from 'vets-json-schema/dist/10-10EZ-schema.json';
import CustomYesNoReviewField from '../../../components/FormReview/CustomYesNoReviewField';
import CustomReviewField from '../../../components/FormReview/CustomReviewField';
import InsuranceProviderViewField from '../../../components/FormFields/InsuranceProviderViewField';
import {
  GroupCodeDescription,
  PolicyNumberDescription,
  PolicyOrDescription,
  PolicyOrGroupDescription,
  TricarePolicyDescription,
} from '../../../components/FormDescriptions';
import { validatePolicyNumber } from '../../../utils/validation';
import { getInsuranceAriaLabel } from '../../../utils/helpers';
import { emptyObjectSchema } from '../../../definitions';

const { providers, isCoveredByHealthInsurance } = fullSchemaHca.properties;
const { items: provider } = providers;

export default {
  uiSchema: {
    isCoveredByHealthInsurance: {
      'ui:title': 'Do you have health insurance coverage?',
      'ui:reviewField': CustomYesNoReviewField,
      'ui:widget': 'yesNo',
    },
    providers: {
      'ui:options': {
        expandUnder: 'isCoveredByHealthInsurance',
        itemName: 'insurance policy',
        hideTitle: true,
        viewField: InsuranceProviderViewField,
        itemAriaLabel: getInsuranceAriaLabel,
      },
      'ui:errorMessages': {
        minItems: 'You need to at least one provider.',
      },
      items: {
        'ui:options': {
          itemAriaLabel: getInsuranceAriaLabel,
        },
        insuranceName: {
          'ui:title': 'Name of insurance provider',
          'ui:errorMessages': {
            pattern: 'Enter the insurance provider name',
          },
        },
        insurancePolicyHolderName: {
          'ui:title':
            'Name of policyholder (the person whose name the policy is in)',
          'ui:errorMessages': {
            pattern: 'Enter the policyholder\u2019s name',
          },
        },
        'view:policyOrGroupDesc': {
          'ui:description': PolicyOrGroupDescription,
        },
        'view:hasTricare': {
          'ui:description': TricarePolicyDescription,
        },
        insurancePolicyNumber: {
          'ui:title': 'Policy Number',
          'ui:description': PolicyNumberDescription,
          'ui:reviewField': CustomReviewField,
          'ui:errorMessages': {
            pattern: 'Enter a valid policy number',
          },
        },
        'view:or': {
          'ui:description': PolicyOrDescription,
        },
        insuranceGroupCode: {
          'ui:title': 'Group Code',
          'ui:description': GroupCodeDescription,
          'ui:reviewField': CustomReviewField,
          'ui:errorMessages': {
            pattern: 'Enter a valid group code',
          },
        },
        'ui:validations': [validatePolicyNumber],
        'ui:order': [
          'insuranceName',
          'insurancePolicyHolderName',
          'view:policyOrGroupDesc',
          'view:hasTricare',
          'insurancePolicyNumber',
          'view:or',
          'insuranceGroupCode',
        ],
      },
    },
  },
  schema: {
    type: 'object',
    required: ['isCoveredByHealthInsurance'],
    properties: {
      isCoveredByHealthInsurance,
      providers: {
        type: 'array',
        minItems: 1,
        items: merge({}, provider, {
          required: ['insuranceName', 'insurancePolicyHolderName'],
          properties: {
            'view:policyOrGroupDesc': emptyObjectSchema,
            'view:hasTricare': emptyObjectSchema,
            'view:or': emptyObjectSchema,
          },
        }),
      },
    },
  },
};