department-of-veterans-affairs/vets-website

View on GitHub
src/applications/health-care-supply-reordering/pages/addressPage.js

Summary

Maintainability
A
0 mins
Test Coverage
import {
  addressSchema,
  addressUI,
  emailSchema,
  emailUI,
} from 'platform/forms-system/src/js/web-component-patterns';
import AddressViewField from '@department-of-veterans-affairs/platform-forms-system/AddressViewField';

import ReviewCardField from '../components/ReviewCardField';
import { schemaFields } from '../constants';

const {
  permanentAddressField,
  temporaryAddressField,
  viewCurrentAddressField,
  vetEmailField,
} = schemaFields;

// Wrap address fields with DL tags to resolve accessibility error.
const addressUiWithDlWrappedFields = () => {
  const customAddressUI = addressUI({ omit: ['street3'] });
  Object.keys(customAddressUI).forEach(element => {
    if (customAddressUI[element]['ui:options']) {
      customAddressUI[element]['ui:options'].useDlWrap = true;
    }
  });
  return customAddressUI;
};

/** @type {PageSchema} */
export default {
  uiSchema: {
    [permanentAddressField]: {
      ...addressUiWithDlWrappedFields(),
      'ui:title': 'Permanent address',
      'ui:field': ReviewCardField,
      'ui:options': {
        hideOnReview: formData =>
          formData['view:currentAddress'] !== 'permanentAddress',
        startInEdit: formData => {
          return Object.values(formData).every(prop => Boolean(prop));
        },
        viewComponent: AddressViewField,
      },
    },
    [temporaryAddressField]: {
      ...addressUiWithDlWrappedFields(),
      'ui:title': 'Temporary address',
      'ui:field': ReviewCardField,
      'ui:options': {
        startInEdit: formData => {
          return Object.values(formData).every(prop => Boolean(prop));
        },
        hideOnReview: formData =>
          formData['view:currentAddress'] !== 'temporaryAddress',
        viewComponent: AddressViewField,
      },
    },
    [vetEmailField]: {
      ...emailUI(),
      'ui:options': {
        inputType: 'email',
        useDlWrap: true,
        uswds: true,
      },
    },
    [viewCurrentAddressField]: {
      'ui:options': {
        classNames: 'vads-u-display--none',
        hideOnReview: true,
        customTitle: ' ',
      },
    },
  },
  schema: {
    type: 'object',
    properties: {
      [permanentAddressField]: addressSchema({ omit: ['street3'] }),
      [temporaryAddressField]: addressSchema({ omit: ['street3'] }),
      [vetEmailField]: emailSchema,
      [viewCurrentAddressField]: {
        type: 'string',
        enum: ['permanentAddress', 'temporaryAddress'],
        default: 'permanentAddress',
      },
    },
    required: ['vetEmail'],
  },
};