psu-libraries/psulib_blacklight

View on GitHub
app/javascript/availability/components/location_info.jsx

Summary

Maintainability
A
0 mins
Test Coverage
import PropTypes from 'prop-types';
import availability from '../index';
import SpecialRequestLink from './special_request_link';

const LocationInfo = ({ holding }) => {
  const mapLocation = (locationID) =>
    locationID in availability.allLocations
      ? availability.allLocations[locationID]
      : '';

  // Location information presented to the user is different based on a few scenarios
  // First, if it's related to ILL
  if (availability.isIllLink(holding)) {
    return <SpecialRequestLink holding={holding} />;
  }

  // AEON
  if (availability.isArchivalThesis(holding)) {
    const illiadURL =
      'https://psu.illiad.oclc.org/upm2/lending/lendinglogon.html';
    const aeonLocationText = mapLocation(holding.locationID);

    return (
      <>
        <SpecialRequestLink holding={holding} />

        <br />

        <a href={illiadURL}>Request Scan - Guest</a>

        <br />

        <SpecialRequestLink holding={holding} locationText={aeonLocationText} />
      </>
    );
  }

  // Special Collections
  if (availability.isArchivalMaterial(holding)) {
    const specialCollectionsText = mapLocation(holding.locationID);

    return (
      <>
        {specialCollectionsText}

        <br />

        <SpecialRequestLink
          holding={holding}
          locationText={specialCollectionsText}
        />
      </>
    );
  }

  // Otherwise use the default translation map for location display, no link
  return mapLocation(holding.locationID);
};

// eslint-react: defines valid prop types passed to this component
LocationInfo.propTypes = {
  holding: PropTypes.object,
};

export default LocationInfo;