department-of-veterans-affairs/vets-website

View on GitHub
src/applications/vaos/new-appointment/components/ReviewPage/ReviewRequestInfo/ReasonForAppointmentSection.jsx

Summary

Maintainability
B
5 hrs
Test Coverage
import React from 'react';
import { useHistory } from 'react-router-dom';
import PropTypes from 'prop-types';
import { useSelector } from 'react-redux';
import { FLOW_TYPES, PURPOSE_TEXT_V2 } from '../../../../utils/constants';
import getNewAppointmentFlow from '../../../newAppointmentFlow';
import { getFlowType } from '../../../redux/selectors';

function handleClick(history, home, reasonForAppointment) {
  return e => {
    // Stop default behavior for anchor tag since we are using React routing.
    e.preventDefault();

    if (
      history.location.pathname.endsWith('/') ||
      (reasonForAppointment.url.endsWith('/') &&
        reasonForAppointment.url !== home.url)
    )
      history.push(`../${reasonForAppointment.url}`);
    else history.push(reasonForAppointment.url);
  };
}

export default function ReasonForAppointmentSection({ data }) {
  const { reasonForAppointment, reasonAdditionalInfo } = data;
  const history = useHistory();
  const { home, reasonForAppointment: reason } = useSelector(
    getNewAppointmentFlow,
  );
  const flowType = useSelector(getFlowType);

  return (
    <>
      <div className="vads-l-grid-container vads-u-padding--0">
        <div className="vads-l-row vads-u-justify-content--space-between">
          <div className="vads-u-flex--1 vads-u-padding-right--1">
            {FLOW_TYPES.DIRECT === flowType && (
              <h2
                className="vads-u-font-size--base vaos-appts__block-label"
                data-dd-privacy="mask"
              >
                {PURPOSE_TEXT_V2.find(
                  purpose => purpose.id === reasonForAppointment,
                )?.short || 'Additional details'}
              </h2>
            )}
            {FLOW_TYPES.REQUEST === flowType && (
              <>
                <h2 className="vads-u-font-size--h3 vads-u-margin-top--0">
                  Details you’d like to share with your provider
                </h2>
                {reasonForAppointment && (
                  <>
                    <span data-dd-privacy="mask">
                      {
                        PURPOSE_TEXT_V2.find(
                          purpose => purpose.id === reasonForAppointment,
                        )?.short
                      }
                    </span>
                    <br />
                  </>
                )}
                {!reasonForAppointment &&
                  !reasonAdditionalInfo && <span>No details shared</span>}
              </>
            )}
            <span
              className="vaos-u-word-break--break-word"
              data-dd-privacy="mask"
            >
              {reasonAdditionalInfo}
            </span>
          </div>
          <div>
            <va-link
              href={reason.url}
              aria-label="Edit purpose of appointment"
              text="Edit"
              data-testid="edit-new-appointment"
              onClick={handleClick(history, home, reason)}
            />
          </div>
        </div>
      </div>
    </>
  );
}

ReasonForAppointmentSection.propTypes = {
  data: PropTypes.object.isRequired,
};