department-of-veterans-affairs/vets-website

View on GitHub
src/applications/static-pages/facilities/FacilityDetailWidget.jsx

Summary

Maintainability
A
50 mins
Test Coverage
import React from 'react';
import { connect } from 'react-redux';
import { buildHours } from '../../facility-locator/utils/facilityHours';
import FacilityAddress from './FacilityAddress';
import FacilityPhone from './FacilityPhone';
import FacilityApiAlert from './FacilityApiAlert';

export function FacilityDetailWidget({ loading, error, facility }) {
  if (loading || !Object.keys(facility).length) {
    return <va-loading-indicator message="Loading facility..." />;
  }

  if (error) {
    return <FacilityApiAlert />;
  }

  const CLINICAL_HOURS_COLUMN_MODIFIER = 5;

  // Sort and compile facility hours into a list
  const { hours } = facility.attributes;
  const builtHours = buildHours(hours, true);
  const clinicalHours = builtHours.map((day, index) => {
    const [abbrvDay, times] = day.split(': ');

    return (
      <li key={index}>
        <b className="abbrv-day">{abbrvDay}:</b> {times}
      </li>
    );
  });

  return (
    <div key={facility.id} className="vads-c-facility-detail">
      <section className="vads-facility-detail">
        <h3 className="vads-u-font-size--lg vads-u-margin-top--0 vads-u-line-height--1 vads-u-margin-bottom--1">
          Address
        </h3>
        <div className="vads-u-margin-bottom--3">
          <FacilityAddress facility={facility} />
        </div>
        <h3 className="vads-u-font-size--lg vads-u-margin-top--0 vads-u-line-height--1 vads-u-margin-bottom--1">
          Phone numbers
        </h3>
        <FacilityPhone facility={facility} />
        <div className="vads-u-margin-bottom--0">
          <div className="clinicalhours">
            <h3 className="vads-u-margin-top--2p5 vads-u-margin-bottom--1">
              Clinical hours
            </h3>
            <div className="vads-u-display--flex vads-u-flex-direction--column small-screen:vads-u-flex-direction--row vads-u-margin-bottom--0">
              <ul className="vads-u-flex--1 va-c-facility-hours-list vads-u-margin-top--0 vads-u-margin-bottom--1 small-screen:vads-u-margin-bottom--0 vads-u-margin-right--3">
                {clinicalHours.slice(0, CLINICAL_HOURS_COLUMN_MODIFIER)}
              </ul>
              <ul className="vads-u-flex--1 va-c-facility-hours-list vads-u-margin-top--0 'vads-u-margin-bottom--0">
                {clinicalHours.slice(CLINICAL_HOURS_COLUMN_MODIFIER)}
              </ul>
            </div>
          </div>
        </div>
      </section>
    </div>
  );
}

const mapStateToProps = store => ({
  facility: store.facility.data,
  loading: store.facility.loading,
  error: store.facility.error,
});

export default connect(mapStateToProps)(FacilityDetailWidget);