department-of-veterans-affairs/vets-website

View on GitHub
src/applications/disability-benefits/686c-674/config/chapters/674/student-term-dates/studentTermDates.js

Summary

Maintainability
A
2 hrs
Test Coverage
import merge from 'lodash/merge';
import omit from 'lodash/omit';
import currentOrPastDateUI from 'platform/forms-system/src/js/definitions/currentOrPastDate';
import { validateDate } from 'platform/forms-system/src/js/validation';
import { isChapterFieldRequired } from '../../../helpers';
import { report674 } from '../../../utilities';
import { generateHelpText } from '../helpers';

const agencyOrProgram = merge(
  omit(report674.properties.studentAddressMarriageTuition, [
    'properties.address',
    'properties.marriageDate',
    'properties.tuitionIsPaidByGovAgency',
    'properties.wasMarried',
  ]),
  {
    type: 'object',
    properties: {
      typeOfProgramOrBenefit: {
        type: 'string',
      },
    },
  },
);

merge(report674.properties.studentTermDates.properties.currentTermDates, {
  type: 'object',
  properties: {
    isSchoolAccredited: {
      type: 'boolean',
    },
  },
});

const studentTermDates = omit(report674.properties.studentTermDates, [
  'properties.programInformation.properties.classesPerWeek',
  'properties.programInformation.properties.hoursPerWeek',
  'properties.programInformation.properties.courseOfStudy',
]);

export const schema = {
  type: 'object',
  properties: {
    agencyOrProgram,
    currentTermDates: studentTermDates?.properties?.currentTermDates,
    programInformation: studentTermDates?.properties?.programInformation,
  },
};

export const uiSchema = {
  agencyOrProgram: {
    'ui:title': 'Agency or program paying tuition or education allowance',
    'ui:order': ['agencyName', 'typeOfProgramOrBenefit', 'datePaymentsBegan'],
    'ui:options': {
      hideIf: form =>
        !form?.studentAddressMarriageTuition?.tuitionIsPaidByGovAgency,
    },
    agencyName: {
      'ui:title':
        'What’s the name of the school or program the student attends?',
      'ui:required': formData =>
        formData?.studentAddressMarriageTuition?.tuitionIsPaidByGovAgency,
      'ui:errorMessages': {
        required: 'Enter the name of the Federally funded school or program',
      },
      'ui:options': {
        hideIf: form =>
          !form?.studentAddressMarriageTuition?.tuitionIsPaidByGovAgency,
      },
    },
    datePaymentsBegan: {
      'ui:title': 'Date payments began',
      ...currentOrPastDateUI('Date payments began'),
      ...{
        'ui:required': formData =>
          formData?.studentAddressMarriageTuition?.tuitionIsPaidByGovAgency,
      },
      'ui:options': {
        hideIf: form =>
          !form?.studentAddressMarriageTuition?.tuitionIsPaidByGovAgency,
      },
    },
    typeOfProgramOrBenefit: {
      'ui:title': 'Type of program or benefit',
      'ui:description': generateHelpText(
        '(i.e. Chapter 35, Fry Scholarship, FECA, Service Academy or Preparatory School, Federally funded Native American School, Job Corps program)',
      ),
      'ui:required': formData =>
        formData?.studentAddressMarriageTuition?.tuitionIsPaidByGovAgency,
      'ui:errorMessages': {
        required: 'Enter the type of program or benefit the student receives',
      },
      'ui:options': {
        hideIf: form =>
          !form?.studentAddressMarriageTuition?.tuitionIsPaidByGovAgency,
      },
    },
  },
  currentTermDates: {
    'ui:title': 'Term or course dates',
    'ui:order': [
      'isSchoolAccredited',
      'officialSchoolStartDate',
      'expectedStudentStartDate',
      'expectedGraduationDate',
    ],
    isSchoolAccredited: {
      'ui:required': formData => isChapterFieldRequired(formData, 'report674'),
      'ui:widget': 'yesNo',
      'ui:title': 'Is the school accredited?',
      'ui:errorMessages': { required: 'Select an option' },
    },
    officialSchoolStartDate: {
      'ui:title': 'Official start date',
      'ui:widget': 'date',
      'ui:validations': [validateDate],
      'ui:required': formData => isChapterFieldRequired(formData, 'report674'),
      'ui:errorMessages': {
        pattern: 'Enter a valid date',
        required: 'Enter a date',
      },
    },
    expectedStudentStartDate: {
      'ui:title': 'Date student expects to start',
      'ui:widget': 'date',
      'ui:validations': [validateDate],
      'ui:required': formData => isChapterFieldRequired(formData, 'report674'),
      'ui:errorMessages': {
        pattern: 'Enter a valid date',
        required: 'Enter a date',
      },
    },
    expectedGraduationDate: {
      'ui:title': 'Date student expects to graduate',
      'ui:widget': 'date',
      'ui:validations': [validateDate],
      'ui:required': formData => isChapterFieldRequired(formData, 'report674'),
      'ui:errorMessages': {
        pattern: 'Enter a valid date',
        required: 'Enter a date',
      },
    },
  },
  programInformation: {
    studentIsEnrolledFullTime: {
      'ui:required': formData => isChapterFieldRequired(formData, 'report674'),
      'ui:widget': 'yesNo',
      'ui:title':
        'Is the student enrolled full-time in high school or college?',
      'ui:errorMessages': { required: 'Select an option' },
    },
  },
};