MetaPhase-Consulting/State-TalentMAP

View on GitHub
src/Components/BidTracker/BidTrackerCardTitle/BidTrackerCardTitle.jsx

Summary

Maintainability
A
1 hr
Test Coverage
A
100%
import PropTypes from 'prop-types';
import { Link } from 'react-router-dom';
import { BID_CYCLE_NAME_TYPE, BID_STATISTICS_OBJECT, POST_DETAILS } from 'Constants/PropTypes';
import { getBidCycleName, getPostNameText } from 'utilities';
import { getStatusProperty } from 'Constants/BidStatuses';
import { APPROVED_PROP } from 'Constants/BidData';
import BidCount from '../../BidCount';

const BidTrackerCardTitle = ({
  title,
  positionNumber,
  id,
  bidStatistics,
  post,
  organization,
  showBidCount,
  status,
  bidCycle,
}, { condensedView, priorityExists, isPriority }) => {
  const viewPosition = (
    <div className="bid-tracker-card-title-link">
      {
        id ? <Link to={`/details/${id}`}>View position</Link> : null
      }
    </div>
  );
  let title$ = `${title}${positionNumber ? ` (${positionNumber})` : ''}`;
  if (condensedView && priorityExists && isPriority) {
    if (status === APPROVED_PROP) {
      title$ = `Assignment: ${title}`;
    } else {
      title$ = `Pending Assignment: ${title}`;
    }
  }
  if (condensedView && priorityExists && !isPriority) {
    const status$ = getStatusProperty(status, 'text');
    title$ = `${status$} (on-hold)`;
  }
  return (
    <div className="usa-grid-full">
      <div className="usa-grid-full bid-tracker-card-title-container">
        <div className="bid-tracker-card-title-text">{title$}</div>
        {!condensedView && viewPosition}
      </div>
      <div className="usa-grid-full bid-tracker-bottom-link-container">
        <div className={`bid-tracker-card-title-bottom ${!condensedView ? 'bid-tracker-card-title-bottom--full-width' : ''}`}>
          <strong>Location (Org):</strong> {getPostNameText({ post, organization })}
        </div>
        {
          !condensedView &&
          <div className="bid-tracker-card-title-bottom">
            <strong>Bid Cycle:</strong> {getBidCycleName(bidCycle)}
          </div>
        }
        {condensedView && viewPosition}
        {
          showBidCount && !condensedView &&
          <span className="bid-stats">
            <BidCount bidStatistics={bidStatistics} altStyle />
          </span>
        }
      </div>
    </div>
  );
};

BidTrackerCardTitle.propTypes = {
  title: PropTypes.string.isRequired,
  positionNumber: PropTypes.string,
  id: PropTypes.number.isRequired,
  bidStatistics: BID_STATISTICS_OBJECT.isRequired,
  post: POST_DETAILS.isRequired,
  organization: PropTypes.string,
  showBidCount: PropTypes.bool,
  status: PropTypes.string.isRequired,
  bidCycle: BID_CYCLE_NAME_TYPE,
};

BidTrackerCardTitle.defaultProps = {
  positionNumber: '',
  organization: null,
  showBidCount: true,
  bidCycle: '',
};

BidTrackerCardTitle.contextTypes = {
  condensedView: PropTypes.bool,
  priorityExists: PropTypes.bool,
  isPriority: PropTypes.bool,
};

export default BidTrackerCardTitle;