@collectionspace/cspace-public-browser
Version:
CollectionSpace public browser
71 lines (61 loc) • 1.93 kB
JSX
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;