department-of-veterans-affairs/vets-website

View on GitHub
src/applications/simple-forms/40-0247/helpers.js

Summary

Maintainability
C
7 hrs
Test Coverage
import React from 'react';

import moment from 'moment';

import recordEvent from 'platform/monitoring/record-event';
import { $$ } from 'platform/forms-system/src/js/utilities/ui';
import {
  getScrollOptions,
  focusElement,
  waitForRenderThenFocus,
} from 'platform/utilities/ui';
import scrollTo from 'platform/utilities/ui/scrollTo';

export function trackNoAuthStartLinkClick() {
  recordEvent({ event: 'no-login-start-form' });
}

export function getInitialData({ mockData, environment: env }) {
  return !!mockData && env.isLocalhost() && !window.Cypress
    ? mockData
    : undefined;
}

export const pageFocusScroll = () => {
  const focusSelector =
    'va-segmented-progress-bar[uswds][heading-text][header-level="2"]';
  const scrollToName = 'v3SegmentedProgressBar';
  return () => {
    waitForRenderThenFocus(focusSelector);
    setTimeout(() => {
      scrollTo(scrollToName, getScrollOptions({ offset: 0 }));
    }, 100);
  };
};

export const supportingDocsDescription = (
  <div className="supp-docs-description">
    <p>We prefer that you upload the Veteran’s or Reservist’s DD214.</p>
    <p>Guidelines for uploading a file:</p>
    <ul>
      <>
        <li>You can upload a .pdf, .jpeg, .jpg, or .png file.</li>
        <li>Your file should be no larger than 20MB.</li>
      </>
    </ul>
  </div>
);

export const createPayload = (file, formId, password) => {
  const payload = new FormData();
  payload.set('form_id', formId);
  payload.append('file', file);
  if (password) {
    payload.append('password', password);
  }
  return payload;
};

export function parseResponse({ data }) {
  const { name } = data.attributes;
  const focusFileCard = () => {
    const target = $$('.schemaform-file-list li').find(entry =>
      entry.textContent?.trim().includes(name),
    );

    if (target) {
      focusElement(target);
    }
  };

  setTimeout(() => {
    focusFileCard();
  }, 100);

  return {
    name,
    confirmationCode: data.attributes.confirmationCode,
  };
}

export function dateOfDeathValidation(errors, fields) {
  const { veteranDateOfBirth, veteranDateOfDeath } = fields;
  // dob = date of birth | dod = date of death
  const dob = moment(veteranDateOfBirth);
  const dod = moment(veteranDateOfDeath);

  // Check if the dates entered are after the date of birth
  if (dod.isBefore(dob)) {
    errors.veteranDateOfDeath.addError(
      'Provide a date that is after the date of birth',
    );
  }

  // Check if dates have 16 or more years between them
  if (dod.diff(dob, 'years') < 16) {
    errors.veteranDateOfDeath.addError(
      'From date of birth to date of death must be at least 16 years.',
    );
  }
}