MetaPhase-Consulting/State-TalentMAP

View on GitHub
src/Components/AdministratorPage/Logs/LogRow/LogRow.jsx

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import PropTypes from 'prop-types';
import FA from 'react-fontawesome';
import { get } from 'lodash';
import { stopProp } from 'utilities';
import { Column, Row } from '../../../Layout';
import { EMPTY_FUNCTION } from '../../../../Constants/PropTypes';
import InteractiveElement from '../../../InteractiveElement';

const LogsPage = (props) => {
  const {
    name, onClick, isSelected,
  } = props;

  const onDownloadClick$ = (e) => {
    stopProp(e);
    props.onDownloadClick(props.name);
  };

  const onClick$ = (e) => {
    if (get(e, 'target.name') !== 'download') {
      onClick(props.name);
    }
  };

  return (
    <InteractiveElement
      onClick={onClick$}
      title={`View contents of ${name}`}
      type={Row}
      role="radio"
      aria-checked={isSelected}
      className={`usa-grid-full log-list-row ${isSelected ? 'log-list-row--selected' : ''}`}
    >
      <Column columns={1}>
        <FA name={isSelected ? 'dot-circle-o' : 'circle-o'} />
      </Column>
      <Column columns={9}>
        <span>{name}</span>
      </Column>
      <Column columns={2} className="log-list-row--download">
        <button name="download" className="usa-button" onClick={onDownloadClick$}>Download</button>
      </Column>
    </InteractiveElement>
  );
};

LogsPage.propTypes = {
  name: PropTypes.string.isRequired,
  onClick: PropTypes.func,
  onDownloadClick: PropTypes.func,
  isSelected: PropTypes.bool,
};

LogsPage.defaultProps = {
  onClick: EMPTY_FUNCTION,
  onDownloadClick: EMPTY_FUNCTION,
  isSelected: false,
};

export default LogsPage;