department-of-veterans-affairs/vets-website

View on GitHub
src/applications/coronavirus-research/update/pages/covidResearchUISchema.js

Summary

Maintainability
F
2 wks
Test Coverage
import React from 'react';

import { validateBooleanGroup } from 'platform/forms-system/src/js/validation';
import currentOrPastMonthYearUI from 'platform/forms-system/src/js/definitions/currentOrPastMonthYear';
import MonthYearUI from 'platform/forms-system/src/js/definitions/monthYear';
import get from 'platform/utilities/data/get';
import CustomReviewField from '../containers/CustomReviewField';
import CustomReviewRadio from '../containers/customReviewRadio';
import CustomReviewYesNo from '../containers/customReviewYesNo';
// import { facilityUiSchema } from '../config/va-location/va-location';
import DynamicRadioWidget from '../config/va-location/DynamicRadioWidget.jsx';

const conditionalValidateBooleanGroup = (errors, pageData) => {
  const { diagnosed, DIAGNOSED_DETAILS } = pageData;
  if (diagnosed) {
    validateBooleanGroup(errors.DIAGNOSED_DETAILS, DIAGNOSED_DETAILS);
  }
};

function vaLocationReviewWidget({ value }) {
  return <span>{value ? value?.split('|')[0] : `None`}</span>;
}

export const uiSchema = {
  descriptionText: {
    'view:descriptionText': {
      'ui:description': (
        <span>
          Thank you for your volunteering to receive information on coronavirus
          disease (COVID-19) research at VA. Please answer the questions below,
          and we’ll update your information. If we think you may be eligible for
          one of our COVID-19 studies, we’ll contact you to tell you more about
          it so you can decide if you want to join.
        </span>
      ),
    },
  },
  formCompleteTimeText: {
    'view:formCompleteTimeText': {
      'ui:description': (
        <span>This form will take you 3 to 5 minutes to complete.</span>
      ),
    },
    'ui:options': {
      classNames: 'schemaform-block-title schemaform-block-subtitle',
    },
  },
  vaccinated: {
    'ui:title': (
      <span>
        <strong>Have you received a COVID-19 vaccine?</strong>
      </span>
    ),
    'ui:reviewField': CustomReviewYesNo,
    'ui:widget': 'yesNo',
    'ui:options': {
      classNames: '',
    },
  },
  VACCINATED_PLAN: {
    'ui:title': (
      <span>
        <strong>Do you plan to be vaccinated?</strong>
      </span>
    ),
    'ui:reviewField': CustomReviewRadio,
    'ui:widget': 'radio',
    'ui:options': {
      showFieldLabel: true,
      expandUnder: 'vaccinated',
      expandUnderCondition: false,
      labels: {
        DEFINITELY: 'Will definitely get vaccinated',
        PROBABLY_YES: 'Will probably get vaccinated',
        PROBABLY_NO: 'Will probably NOT get vaccinated',
        DEFINITELY_NO: 'Will definitely NOT get vaccinated',
        UNSURE: 'Not yet decided',
      },
      classNames: '',
    },
    'ui:required': formData => !formData.vaccinated,
  },
  VACCINATED_DETAILS: {
    'ui:title': (
      <span>
        <strong>Which vaccine did you receive?</strong>
      </span>
    ),
    'ui:widget': 'radio',
    'ui:reviewField': CustomReviewRadio,
    'ui:options': {
      showFieldLabel: true,
      expandUnder: 'vaccinated',
      expandUnderCondition: true,
      labels: {
        MODERNA: 'Moderna',
        PFIZER: 'Pfizer',
        JOHNSON: 'Johnson & Johnson',
        NOVAVAX: 'Novavax',
        ASTRA: 'Astra Zeneca',
        UNKNOWN: "Don't know/Don't remember",
      },
      classNames: '',
    },
    'ui:required': formData => formData.vaccinated,
  },
  VACCINATED_DATE1: {
    ...currentOrPastMonthYearUI('Month/Year of 1st dose'),
    'ui:options': {
      expandUnder: 'vaccinated',
      monthYear: true,
      hideIf: formData => get('VACCINATED_DETAILS', formData) === undefined,
      classNames: '',
    },
    'ui:required': formData => formData.vaccinated,
  },
  VACCINATED_DATE2: {
    ...MonthYearUI('Month/Year of 2nd dose (or future date if scheduled)'),
    'ui:options': {
      expandUnder: 'vaccinated',
      monthYear: true,
      hideIf: formData =>
        get('VACCINATED_DETAILS', formData) === undefined ||
        get('VACCINATED_DETAILS', formData) === 'JOHNSON' ||
        formData.VACCINATED_SECOND === true,
      classNames: '',
    },
    'ui:required': formData =>
      (formData.VACCINATED_SECOND === undefined ||
        formData.VACCINATED_SECOND === false) &&
      formData.vaccinated &&
      get('VACCINATED_DETAILS', formData) !== 'JOHNSON',
  },
  VACCINATED_SECOND: {
    'ui:title': <span>Did not get second dose</span>,
    'ui:reviewField': CustomReviewField,
    'ui:widget': 'checkbox',
    'ui:options': {
      hideLabelText: true,
      hideOnReview: true,
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_DETAILS', formData) === undefined ||
        get('VACCINATED_DETAILS', formData) === 'JOHNSON' ||
        formData.VACCINATED_DATE2 !== undefined,
    },
    'ui:required': formData =>
      formData.VACCINATED_DATE2 === undefined &&
      formData.vaccinated &&
      get('VACCINATED_DETAILS', formData) !== 'JOHNSON',
  },
  VACCINATED_ADDITIONAL1: {
    'ui:title': (
      <span>
        <strong>
          Have you received any additional vaccine doses (including boosters)?
        </strong>
      </span>
    ),
    'ui:reviewField': CustomReviewYesNo,
    'ui:widget': 'yesNo',
    'ui:options': {
      expandUnder: 'vaccinated',
      expandUnderCondition: true,
      classNames: '',
    },
    'ui:required': formData => formData.vaccinated,
  },
  VACCINATED_ADDITIONAL_DETAILS1: {
    'ui:title': (
      <span>
        <strong>If Yes, which vaccine did you receive?</strong>
      </span>
    ),
    'ui:widget': 'radio',
    'ui:reviewField': CustomReviewRadio,
    'ui:options': {
      showFieldLabel: true,
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL1', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL1,
      labels: {
        MODERNA: 'Moderna',
        PFIZER: 'Pfizer',
        OTHER: 'Other',
        UNKNOWN: "Don't know/Don't remember",
      },
      classNames: '',
    },
    'ui:required': formData => formData.VACCINATED_ADDITIONAL1,
  },
  VACCINATED_ADDITIONAL_OTHER1: {
    'ui:title': 'Which vaccine?',
    'ui:options': {
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS1', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL1 ||
        get('VACCINATED_ADDITIONAL_DETAILS1', formData) !== 'OTHER',
      classNames: '',
    },
    'ui:required': formData =>
      get('VACCINATED_ADDITIONAL_DETAILS1', formData) === 'OTHER',
  },
  VACCINATED_ADDITIONAL_DATE1: {
    ...currentOrPastMonthYearUI('Month/Year of dose'),
    'ui:options': {
      expandUnder: 'vaccinated',
      monthYear: true,
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS1', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL1,
      classNames: '',
    },
    'ui:required': formData => formData.VACCINATED_ADDITIONAL1,
  },
  VACCINATED_ADDITIONAL2: {
    'ui:title': <span>Enter another dose</span>,
    'ui:reviewField': CustomReviewField,
    'ui:widget': 'checkbox',
    'ui:options': {
      hideLabelText: true,
      hideOnReview: true,
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS1', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL1,
    },
  },
  VACCINATED_ADDITIONAL_DETAILS2: {
    'ui:title': (
      <span>
        <strong>Which vaccine did you receive?</strong>
      </span>
    ),
    'ui:widget': 'radio',
    'ui:reviewField': CustomReviewRadio,
    'ui:options': {
      showFieldLabel: true,
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL2', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL2,
      labels: {
        MODERNA: 'Moderna',
        PFIZER: 'Pfizer',
        OTHER: 'Other',
        UNKNOWN: "Don't know/Don't remember",
      },
      classNames: '',
    },
    'ui:required': formData => formData.VACCINATED_ADDITIONAL2,
  },
  VACCINATED_ADDITIONAL_OTHER2: {
    'ui:title': 'Which vaccine?',
    'ui:options': {
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS2', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL2 ||
        get('VACCINATED_ADDITIONAL_DETAILS2', formData) !== 'OTHER',
      classNames: '',
    },
    'ui:required': formData =>
      get('VACCINATED_ADDITIONAL_DETAILS2', formData) === 'OTHER',
  },
  VACCINATED_ADDITIONAL_DATE2: {
    ...currentOrPastMonthYearUI('Month/Year of dose'),
    'ui:options': {
      expandUnder: 'vaccinated',
      monthYear: true,
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS2', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL2,
      classNames: '',
    },
    'ui:required': formData => formData.VACCINATED_ADDITIONAL2,
  },
  VACCINATED_ADDITIONAL3: {
    'ui:title': <span>Enter another dose</span>,
    'ui:reviewField': CustomReviewField,
    'ui:widget': 'checkbox',
    'ui:options': {
      hideLabelText: true,
      hideOnReview: true,
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS2', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL2,
    },
  },
  VACCINATED_ADDITIONAL_DETAILS3: {
    'ui:title': (
      <span>
        <strong>Which vaccine did you receive?</strong>
      </span>
    ),
    'ui:widget': 'radio',
    'ui:reviewField': CustomReviewRadio,
    'ui:options': {
      showFieldLabel: true,
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL3', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL3,
      labels: {
        MODERNA: 'Moderna',
        PFIZER: 'Pfizer',
        OTHER: 'Other',
        UNKNOWN: "Don't know/Don't remember",
      },
      classNames: '',
    },
    'ui:required': formData => formData.VACCINATED_ADDITIONAL3,
  },
  VACCINATED_ADDITIONAL_OTHER3: {
    'ui:title': 'Which vaccine?',
    'ui:options': {
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS3', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL3 ||
        get('VACCINATED_ADDITIONAL_DETAILS3', formData) !== 'OTHER',
      classNames: '',
    },
    'ui:required': formData =>
      get('VACCINATED_ADDITIONAL_DETAILS3', formData) === 'OTHER',
  },
  VACCINATED_ADDITIONAL_DATE3: {
    ...currentOrPastMonthYearUI('Month/Year of dose'),
    'ui:options': {
      expandUnder: 'vaccinated',
      monthYear: true,
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS3', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL3,
      classNames: '',
    },
    'ui:required': formData => formData.VACCINATED_ADDITIONAL3,
  },
  VACCINATED_ADDITIONAL4: {
    'ui:title': <span>Enter another dose</span>,
    'ui:reviewField': CustomReviewField,
    'ui:widget': 'checkbox',
    'ui:options': {
      hideLabelText: true,
      hideOnReview: true,
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS3', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL3,
    },
  },
  VACCINATED_ADDITIONAL_DETAILS4: {
    'ui:title': (
      <span>
        <strong>Which vaccine did you receive?</strong>
      </span>
    ),
    'ui:widget': 'radio',
    'ui:reviewField': CustomReviewRadio,
    'ui:options': {
      showFieldLabel: true,
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL4', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL4,
      labels: {
        MODERNA: 'Moderna',
        PFIZER: 'Pfizer',
        OTHER: 'Other',
        UNKNOWN: "Don't know/Don't remember",
      },
      classNames: '',
    },
    'ui:required': formData => formData.VACCINATED_ADDITIONAL4,
  },
  VACCINATED_ADDITIONAL_OTHER4: {
    'ui:title': 'Which vaccine?',
    'ui:options': {
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS4', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL4 ||
        get('VACCINATED_ADDITIONAL_DETAILS4', formData) !== 'OTHER',
      classNames: '',
    },
    'ui:required': formData =>
      get('VACCINATED_ADDITIONAL_DETAILS4', formData) === 'OTHER',
  },
  VACCINATED_ADDITIONAL_DATE4: {
    ...currentOrPastMonthYearUI('Month/Year of dose'),
    'ui:options': {
      expandUnder: 'vaccinated',
      monthYear: true,
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS4', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL4,
      classNames: '',
    },
    'ui:required': formData => formData.VACCINATED_ADDITIONAL4,
  },
  VACCINATED_ADDITIONAL5: {
    'ui:title': <span>Enter another dose</span>,
    'ui:reviewField': CustomReviewField,
    'ui:widget': 'checkbox',
    'ui:options': {
      hideLabelText: true,
      hideOnReview: true,
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS4', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL4,
    },
  },
  VACCINATED_ADDITIONAL_DETAILS5: {
    'ui:title': (
      <span>
        <strong>Which vaccine did you receive?</strong>
      </span>
    ),
    'ui:widget': 'radio',
    'ui:reviewField': CustomReviewRadio,
    'ui:options': {
      showFieldLabel: true,
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL5', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL5,
      labels: {
        MODERNA: 'Moderna',
        PFIZER: 'Pfizer',
        OTHER: 'Other',
        UNKNOWN: "Don't know/Don't remember",
      },
      classNames: '',
    },
    'ui:required': formData => formData.VACCINATED_ADDITIONAL5,
  },
  VACCINATED_ADDITIONAL_OTHER5: {
    'ui:title': 'Which vaccine?',
    'ui:options': {
      expandUnder: 'vaccinated',
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS5', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL5 ||
        get('VACCINATED_ADDITIONAL_DETAILS5', formData) !== 'OTHER',
      classNames: '',
    },
    'ui:required': formData =>
      get('VACCINATED_ADDITIONAL_DETAILS5', formData) === 'OTHER',
  },
  VACCINATED_ADDITIONAL_DATE5: {
    ...currentOrPastMonthYearUI('Month/Year of dose'),
    'ui:options': {
      expandUnder: 'vaccinated',
      monthYear: true,
      hideIf: formData =>
        get('VACCINATED_ADDITIONAL_DETAILS5', formData) === undefined ||
        !formData.VACCINATED_ADDITIONAL5,
      classNames: '',
    },
    'ui:required': formData => formData.VACCINATED_ADDITIONAL5,
  },
  diagnosed: {
    'ui:title': (
      <span>
        <strong>Have you ever been diagnosed with COVID-19?</strong>
      </span>
    ),
    'ui:reviewField': CustomReviewYesNo,
    'ui:widget': 'yesNo',
    'ui:options': {
      classNames: '',
    },
  },
  DIAGNOSED_DETAILS: {
    'ui:options': {
      showFieldLabel: true,
      expandUnder: 'diagnosed',
    },
    'ui:required': formData => formData.diagnosed,
    'ui:title': (
      <span>
        <strong>How were you diagnosed?</strong>
        <br />
        (Please check all that apply.)
        <br />
      </span>
    ),
    'DIAGNOSED_DETAILS::SYMPTOMS_ONLY': {
      'ui:title': 'Based on my symptoms',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_DETAILS::ANTIBODY_BLOOD_TEST': {
      'ui:title': 'With a positive antibody blood test',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_DETAILS::NASAL_SWAB_TEST_POSITIVE': {
      'ui:title': 'With a positive nasal swab test',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_DETAILS::DIFFERENT_METHOD': {
      'ui:title': 'With a different method',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_DETAILS::NONE_OF_ABOVE': {
      'ui:title': 'None of the above',
      'ui:reviewField': CustomReviewField,
    },
  },
  DIAGNOSED_SYMPTOMS: {
    'ui:options': {
      showFieldLabel: true,
      expandUnder: 'diagnosed',
    },
    'ui:required': formData => formData.diagnosed,
    'ui:title': (
      <span>
        <strong>
          Have you experienced/are you still experiencing any of the following
          symptoms at least 4 weeks after the onset of your COVID-19 illness?
        </strong>
        <br />
        (Please check all that apply.)
        <br />
      </span>
    ),
    'DIAGNOSED_SYMPTOMS::FATIGUE': {
      'ui:title': 'Ongoing or debilitating fatigue',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::TACHYCARDIA': {
      'ui:title': 'Tachycardia (fast heartbeat/hear flutters)',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::BREATHING': {
      'ui:title': 'Shortness of breath/difficulty breathing/chest pain',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::NUMBNESS': {
      'ui:title': 'Numbness/tingling',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::FOCUS': {
      'ui:title': 'Difficulty concentrating or focusing (Brain fog)',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::HEADACHE': {
      'ui:title': 'Headache',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::SLEEP': {
      'ui:title': 'Difficulty Sleeping',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::CLOTS': {
      'ui:title': 'Blood clots/clotting issues',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::DIZZINESS': {
      'ui:title': 'Dizziness (vertigo)',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::VISION': {
      'ui:title': 'Blurred vision',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::ANXIETY': {
      'ui:title': 'Anxiety/depression',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::TASTE_SMELL': {
      'ui:title': 'Loss of Taste/loss of smell',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::GI': {
      'ui:title': 'GI symptoms (heart burn, loss of appetite, abdominal pain)',
      'ui:reviewField': CustomReviewField,
    },
    'DIAGNOSED_SYMPTOMS::NONE_OF_ABOVE': {
      'ui:title': 'None of the above',
      'ui:reviewField': CustomReviewField,
    },
  },
  ELIGIBLE: {
    'ui:title': (
      <span>
        <strong>Are you eligible to receive care at a VA facility?</strong>
      </span>
    ),
    'ui:reviewField': CustomReviewYesNo,
    'ui:widget': 'yesNo',
    'ui:options': {
      classNames: '',
    },
  },
  FACILITY: {
    'ui:title': (
      <span>
        <strong>Do you receive care at a VA facility?</strong>
      </span>
    ),
    'ui:reviewField': CustomReviewYesNo,
    'ui:widget': 'yesNo',
    'ui:options': {
      classNames: '',
    },
  },
  zipCode: {
    'ui:title': 'Zip code where you primarily receive VA care',
    'ui:errorMessages': {
      pattern:
        'Please enter a valid 5- or 9-digit zip code if known (dashes allowed)',
    },
    'ui:options': {
      classNames: 'input-width',
      expandUnder: 'FACILITY',
    },
  },
  vaLocation: {
    preferredFacility: {
      'ui:title': 'Selected VA medical center',
      'ui:widget': DynamicRadioWidget,
      'ui:options': {
        hideLabelText: true,
        // expandUnder: 'FACILITY',
        // expandUnderCondition: true,
        hideIf: formData =>
          get('zipCode', formData) === undefined ||
          get('zipCode', formData).length < 5,
      },
      'ui:reviewWidget': vaLocationReviewWidget,
    },
  },
  'ui:validations': [conditionalValidateBooleanGroup],
};
export const schema = {};