UNPKG

labo-components

Version:
95 lines (83 loc) 3.19 kB
import React from 'react'; import PropTypes from 'prop-types'; import IDUtil from '../../util/IDUtil'; import ComponentUtil from '../../util/ComponentUtil'; export default class CollectionBar extends React.PureComponent { constructor(props) { super(props); this.CLASS_PREFIX = "scb"; } getCollectionHits = config => { if (config && config.getCollectionMetadata()) { const md = config.getCollectionMetadata(); const docType = config.getDocumentType(); if (md && md.collection_statistics) { if (md.collection_statistics.length > 0) { const match = md.collection_statistics.find(dt => dt.doc_type === docType); return match ? match.doc_count : 0; } } } return 0; }; resetSearch = () => { this.props.resetSearch(this.constructor.name, null); }; render() { const collectionConfig = this.props.collectionConfig; const collectionMetadata = collectionConfig ? collectionConfig.getCollectionMetadata() : null; const infoButton = collectionMetadata && collectionMetadata.registryUrl ? ( <a className="btn btn-link text-dark" title="View collection info" href={collectionMetadata.registryUrl} target="_blank" rel="noreferrer"> <i className="fas fa-external-link-alt" /> </a> ) : null; const hits = collectionConfig ? ( <span className={IDUtil.cssClassName("count", this.CLASS_PREFIX)} title="Records in this collection"> {ComponentUtil.formatNumber(this.getCollectionHits(collectionConfig))} </span> ) : null; const saveButton = collectionConfig && this.props.user.id !== 'ANONYMOUS' ? ( <button className="btn btn-secondary btn-sm text-uppercase fw-bold" onClick={this.props.saveQuery} title="Save current query to the active project"> Save Query </button> ) : null; return ( <div className={IDUtil.cssClassName("single-search-collection-bar")}> {collectionConfig && collectionConfig.getCollectionMetadata() ? ( <div className={IDUtil.cssClassName("active", this.CLASS_PREFIX)}> <div className={IDUtil.cssClassName("collection-info", this.CLASS_PREFIX)}> <h2 onClick={this.props.selectCollection}>{collectionConfig.getCollectionTitle()}</h2> {hits} {infoButton} </div> <div className={IDUtil.cssClassName("buttons", this.CLASS_PREFIX)}> {saveButton} <button className="btn btn-light btn-sm text-uppercase fw-bold" onClick={this.resetSearch}>Clear search</button> </div> </div> ) : ( <div> <button className="btn btn-primary btn-sm text-uppercase fw-bold" onClick={this.props.selectCollection}>Select collection</button> </div> )} </div> ); } } CollectionBar.propTypes = { user: PropTypes.shape({ id: PropTypes.string.isRequired, name: PropTypes.string }), collectionConfig: PropTypes.shape({ // optional: collection config of active project getCollectionTitle: PropTypes.func.isRequired, getCollectionMetadata: PropTypes.func }), selectCollection: PropTypes.func.isRequired, // show modal to select collection resetSearch: PropTypes.func.isRequired, // reset search saveQuery: PropTypes.func, // save query, optional (only when project is selected) };