department-of-veterans-affairs/vets-website

View on GitHub
src/applications/mhv-landing-page/components/CardLayout.jsx

Summary

Maintainability
A
0 mins
Test Coverage
import React from 'react';
import { useSelector } from 'react-redux';
import classnames from 'classnames';

import { mhvUrl } from '~/platform/site-wide/mhv/utilities';
import { isAuthenticatedWithSSOe, mrPhase1Enabled } from '../selectors';

import NavCard from './NavCard';
import MedicalRecordsCard from './MedicalRecordsCard';
import { HEALTH_TOOL_HEADINGS } from '../constants';

const layoutData = data => {
  const offset = 2;
  const rows = [];
  for (let i = 0; i < data.length; i += offset) {
    rows.push(data.slice(i, i + offset));
  }
  return rows;
};

const CardLayout = ({ data }) => {
  const isMrPhase1Enabled = useSelector(mrPhase1Enabled);
  const ssoe = useSelector(isAuthenticatedWithSSOe);
  const blueButtonUrl = mhvUrl(ssoe, 'download-my-data');

  const rowCols = layoutData(data);
  return rowCols.map((row, x) => {
    return (
      <div
        className={classnames(
          'vads-l-row',
          'vads-u-justify-content--space-between',
          'vads-u-margin-bottom--0',
          'medium-screen:vads-u-margin-bottom--2',
        )}
        key={`row-${x}`}
      >
        {row.map((col, y) => (
          <div
            className={classnames(
              'vads-l-col--12',
              'medium-screen:vads-l-col',
              'mhv-u-grid-gap',
              'vads-u-margin-bottom--2',
              'medium-screen:vads-u-margin-bottom--0',
            )}
            data-testid={`mhv-link-group-card-${x * rowCols.length + y}`}
            key={`col-${y}`}
          >
            {col.title === HEALTH_TOOL_HEADINGS.MEDICAL_RECORDS &&
            !isMrPhase1Enabled ? (
              <MedicalRecordsCard href={blueButtonUrl} />
            ) : (
              <NavCard {...col} />
            )}
          </div>
        ))}
      </div>
    );
  });
};

export default CardLayout;