MetaPhase-Consulting/State-TalentMAP

View on GitHub
src/Components/HomePagePositionsList/HomePagePositionsList.jsx

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
import PropTypes from 'prop-types';
import ResultsCondensedCard from '../ResultsCondensedCard';
import { BID_RESULTS, FAVORITE_POSITIONS_ARRAY, HOME_PAGE_CARD_TYPE, POSITION_DETAILS_ARRAY } from '../../Constants/PropTypes';

const propTypes = {
  positions: POSITION_DETAILS_ARRAY,
  favorites: FAVORITE_POSITIONS_ARRAY,
  favoritesPV: FAVORITE_POSITIONS_ARRAY,
  favoritesTandem: FAVORITE_POSITIONS_ARRAY,
  favoritesPVTandem: FAVORITE_POSITIONS_ARRAY,
  isLoading: PropTypes.bool,
  bidList: BID_RESULTS.isRequired,
  type: HOME_PAGE_CARD_TYPE,
  refreshFavorites: PropTypes.bool,
  title: PropTypes.string.isRequired, // should be unique per page, since its used a react key
  showBidListButton: PropTypes.bool,
  useShortFavButton: PropTypes.bool,
  showCompareButton: PropTypes.bool,
  sortType: PropTypes.string,
  limit: PropTypes.number,
  page: PropTypes.number,
  isTandem: PropTypes.bool,
};

const defaultProps = {
  positions: [],
  favorites: [],
  favoritesPV: [],
  favoritesTandem: [],
  favoritesPVTandem: [],
  isLoading: false,
  type: 'default',
  refreshFavorites: false,
  showBidListButton: false,
  useShortFavButton: false,
  showCompareButton: false,
  sortType: null,
  limit: 15,
  page: 1,
  isTandem: false,
};

const HomePagePositionsList = ({ positions, favorites, favoritesTandem, favoritesPV,
  favoritesPVTandem, isLoading, bidList, type, refreshFavorites, title, showBidListButton,
  useShortFavButton, showCompareButton, sortType, limit, page, isTandem }) => (
  <div className={`condensed-card-highlighted ${isLoading ? 'results-loading' : ''}`}>
    <div className="usa-grid-full condensed-card-grid">
      {positions.map((p) => {
        const position = p.position || p;
        return (
          <div key={`${title}-row-${p.id}-${position.isPV}`} className="usa-width-one-third condensed-card">
            <ResultsCondensedCard
              favorites={favorites}
              favoritesPV={favoritesPV}
              favoritesTandem={favoritesTandem}
              favoritesPVTandem={favoritesPVTandem}
              position={{ ...p, cpId: p.id }}
              bidList={bidList}
              type={type}
              refreshFavorites={refreshFavorites}
              showBidListButton={showBidListButton}
              useShortFavButton={useShortFavButton}
              showCompareButton={showCompareButton}
              isProjectedVacancy={position.isPV || p.isPV}
              isTandem={isTandem}
              sortType={sortType}
              limit={limit}
              page={page}
            />
          </div>
        );
      })}
    </div>
  </div>
);

HomePagePositionsList.propTypes = propTypes;

HomePagePositionsList.defaultProps = defaultProps;

export default HomePagePositionsList;