UNPKG

@collectionspace/cspace-public-browser

Version:
71 lines (61 loc) 1.93 kB
import React from 'react'; import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import Immutable from 'immutable'; import SearchResultImage from './SearchResultImage'; import config from '../../../config'; import styles from '../../../../styles/cspace/SearchResultTile.css'; const propTypes = { gatewayUrl: PropTypes.string.isRequired, index: PropTypes.number.isRequired, loadImageImmediately: PropTypes.bool.isRequired, params: PropTypes.instanceOf(Immutable.Map).isRequired, result: PropTypes.instanceOf(Immutable.Map).isRequired, }; export default function SearchResultTile(props) { const { gatewayUrl, loadImageImmediately, index, params, result, } = props; const detailPath = config.get('detailPath'); const referenceField = config.get('referenceField'); const tileTitleField = config.get(['tileTitle', 'field']); const tileTitleFormat = config.get(['tileTitle', 'formatValue']); const doc = result.get('_source'); const csid = doc.get('ecm:name'); const url = csid && `/${detailPath}/${csid}`; const holdingInstitutions = doc.get('collectionspace_denorm:holdingInstitutions'); const mediaCsid = doc.getIn(['collectionspace_denorm:mediaCsid', 0]); const referenceValue = doc.get(referenceField); let title = doc.get(tileTitleField); if (tileTitleFormat) { title = tileTitleFormat(title); } return ( <Link className={styles.common} to={{ pathname: url, state: { index, searchParams: params.toJS(), }, }} > <SearchResultImage gatewayUrl={gatewayUrl} holdingInstitutions={holdingInstitutions} loadImageImmediately={loadImageImmediately} mediaCsid={mediaCsid} referenceValue={referenceValue} /> <article> <h2>{title}</h2> </article> </Link> ); } SearchResultTile.propTypes = propTypes;