MetaPhase-Consulting/State-TalentMAP

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

Summary

Maintainability
A
0 mins
Test Coverage
B
81%
import PropTypes from 'prop-types';
import { get } from 'lodash';
import { SPECIAL_NEEDS } from 'Constants/EndpointParams';
import { BID_RESULTS, HOME_PAGE_FEATURED_POSITIONS, HOME_PAGE_RECOMMENDED_POSITIONS, USER_PROFILE } from 'Constants/PropTypes';
import HomePagePositionsSection from '../HomePagePositionsSection';

const HomePagePositions = ({ homePageFeaturedPositions,
  homePageFeaturedPositionsIsLoading,
  homePageRecommendedPositions,
  homePageRecommendedPositionsIsLoading,
  userProfile, bidList }) => {
  const featuredPositions = homePageFeaturedPositions.positions;
  const recommendedPositions = homePageRecommendedPositions.positions;
  let featuredTitle;
  let featuredLink;
  let featuredIcon;
  let recommendedTitle;
  let recommendedLink;
  let recommendedIcon;

  const specialNeedsParams = SPECIAL_NEEDS.join(',');

  const ids = get(userProfile, 'employee_info.skills', []).map(s => s.code);
  const coneIds = get(userProfile, 'employee_info.skills_additional', []);

  // Make sure these line up with the actual queries in /actions/homePagePositions.js
  switch (homePageFeaturedPositions.name) {
    case 'featuredGradeAndSkillPositions':
      featuredTitle = 'Featured Positions That Match Your Grade And Skill(s)';
      featuredLink = `/results?cps_codes=OP&position__post_indicator__in=${specialNeedsParams}&position__skill__code__in=${ids.join(',')}&position__grade__code__in=${userProfile.employee_info.grade}`;
      featuredIcon = 'bolt';
      break;
    case 'featuredGradeAndSkillConePositions':
      featuredTitle = 'Featured Positions That Match Your Grade And Skill Cone(s)';
      featuredLink = `/results?cps_codes=OP&position__post_indicator__in=${specialNeedsParams}&position__skill__code__in=${coneIds.join(',')}&position__grade__code__in=${userProfile.employee_info.grade}`;
      featuredIcon = 'bolt';
      break;
    case 'featuredGradePositions':
      featuredTitle = 'Featured Positions That Match Your Grade';
      featuredLink = `/results?cps_codes=OP&position__post_indicator__in=${specialNeedsParams}&position__grade__code__in=${userProfile.employee_info.grade}`;
      featuredIcon = 'bolt';
      break;
    default:
      featuredTitle = 'Featured Positions';
      featuredLink = `/results?cps_codes=OP&position__post_indicator__in=${specialNeedsParams}`;
      featuredIcon = 'bolt';
      break;
  }

  switch (homePageRecommendedPositions.name) {
    case 'recommendedGradeAndSkillPositions':
      recommendedTitle = 'Positions That Match Your Grade And Skill(s)';
      recommendedLink = `/results?cps_codes=OP&position__skill__code__in=${ids.join(',')}&position__grade__code__in=${userProfile.employee_info.grade}`;
      recommendedIcon = 'briefcase';
      break;
    case 'recommendedGradeAndSkillConePositions':
      recommendedTitle = 'Positions That Match Your Grade And Skill Cone(s)';
      recommendedLink = `/results?cps_codes=OP&position__skill__code__in=${coneIds.join(',')}&position__grade__code__in=${userProfile.employee_info.grade}`;
      recommendedIcon = 'briefcase';
      break;
    case 'recommendedGradePositions':
      recommendedTitle = 'Positions That Match Your Grade';
      recommendedLink = `/results?cps_codes=OP&position__grade__code__in=${userProfile.employee_info.grade}`;
      recommendedIcon = 'briefcase';
      break;
    default:
      recommendedTitle = 'Favorited Positions';
      recommendedLink = '/profile/favorites/';
      recommendedIcon = 'star';
      break;
  }

  return (
    <div className="homepage-positions-section-container">
      <div
        className="usa-grid-full homepage-positions-section-container-inner padded-main-content"
      >
        {
          featuredPositions &&
          <HomePagePositionsSection
            title={featuredTitle}
            maxLength="3"
            viewMoreLink={featuredLink}
            icon={featuredIcon}
            favorites={userProfile.favorite_positions}
            positions={featuredPositions}
            isLoading={homePageFeaturedPositionsIsLoading}
            bidList={bidList}
            type="default"
            featuredPos
          />
        }
        <HomePagePositionsSection
          title={recommendedTitle}
          maxLength="3"
          viewMoreLink={recommendedLink}
          icon={recommendedIcon}
          favorites={userProfile.favorite_positions}
          positions={recommendedPositions}
          isLoading={homePageRecommendedPositionsIsLoading}
          bidList={bidList}
          type="default"
        />
      </div>
    </div>
  );
};

HomePagePositions.propTypes = {
  homePageFeaturedPositions: HOME_PAGE_FEATURED_POSITIONS.isRequired,
  homePageFeaturedPositionsIsLoading: PropTypes.bool,
  homePageRecommendedPositions: HOME_PAGE_RECOMMENDED_POSITIONS.isRequired,
  homePageRecommendedPositionsIsLoading: PropTypes.bool,
  userProfile: USER_PROFILE,
  bidList: BID_RESULTS.isRequired,
};

HomePagePositions.defaultProps = {
  userProfile: {},
  filtersIsLoading: false,
  homePageFeaturedPositionsIsLoading: false,
  homePageRecommendedPositionsIsLoading: false,
};

export default HomePagePositions;