UNPKG

labo-components

Version:
160 lines (147 loc) 5.64 kB
fimport React from 'react'; import PropTypes from 'prop-types'; import IDUtil from '../../util/IDUtil'; import ReactTooltip from 'react-tooltip'; import FlexRouter from '../../util/FlexRouter'; import LocalStorageHandler from '../../util/LocalStorageHandler'; import Query from '../../model/Query'; //NOTE: this component does not (yet) display named entities (like the MetadataColumn does) export default class MetadataTable extends React.Component { constructor(props) { super(props); this.CLASS_PREFIX = 'mdt'; } performSearchReference(searchRef) { let query = Query.construct({ term: searchRef.searchTerm, collectionId: searchRef.collectionId, searchLayers: {[this.props.data.index]:true}, includeMediaObjects : true //CHECK why is this always true? }, null, false); //never store a prio query after execution LocalStorageHandler.storeJSONInLocalStorage('stored-priority-query', query); FlexRouter.gotoSingleSearch('prio') } render() { let poster = null; let source = null; let specialProperties = null; //get the special properties that are important to show for this collection //TODO implement links within the special properties without using dangerouslysetinnerhtml if(this.props.data.specialProperties) { specialProperties = Object.keys(this.props.data.specialProperties).map((key, index)=> { return ( <tr className={IDUtil.cssClassName('special-props', this.CLASS_PREFIX)} key={'props__' + index}> <td><label>{key}:</label></td> <td>{this.props.data.specialProperties[key]}</td> </tr> ); }); } let searchReferences = null; if(this.props.data.searchReferences) { searchReferences = Object.keys(this.props.data.searchReferences).map((key, index) => { return ( <tr className={IDUtil.cssClassName('search-refs', this.CLASS_PREFIX)} key={'search-refs__' + index}> <td><label>{"Search related"}</label></td> <td>{ Object.keys(this.props.data.searchReferences[key]).map((searchRefIndex, index) => { const searchRef = this.props.data.searchReferences[key][searchRefIndex]; return ( <div key={'__sr__' + index}> <a href="#!" onClick={this.performSearchReference.bind(this, searchRef)}> {searchRef.linkText} </a><br></br> </div> ); }) }</td> </tr> ); }); } //get the poster if any if(this.props.data.posterURL) { poster = (<tr className={IDUtil.cssClassName('poster', this.CLASS_PREFIX)}> <td><label>Keyframe</label></td> <td> <div style={{width: '200px'}}> <img src={this.props.data.posterURL} alt="poster" style={{width:'100%'}}/> </div> </td> </tr>); } //get the external source information if any if(this.props.data.externalSourceInfo) { let externalSourceInfo = null; if(this.props.data.externalSourceInfo.url) { let message = this.props.data.externalSourceInfo.message; if (message == null) { message = "View in catalogue"; } externalSourceInfo = (<a href={this.props.data.externalSourceInfo.url} target="_source">{message}</a>) } else if(this.props.data.externalSourceInfo.message) { externalSourceInfo = (<span>{this.props.data.externalSourceInfo.message}</span>) } if(externalSourceInfo) { source = (<tr className={IDUtil.cssClassName('source', this.CLASS_PREFIX)}> <td><label>Source</label></td> <td>{externalSourceInfo}</td> </tr>) } } return ( <div className={IDUtil.cssClassName('metadata-table')}> <table className="table"> <tbody> {poster} <tr className={IDUtil.cssClassName('id', this.CLASS_PREFIX)}> <td><label>ID</label></td> <td>{this.props.data.resourceId}</td> </tr> <tr className={IDUtil.cssClassName('index', this.CLASS_PREFIX)}> <td><label>Index</label></td> <td>{this.props.data.index}&nbsp;(type: {this.props.data.docType})</td> </tr> <tr className={IDUtil.cssClassName('title', this.CLASS_PREFIX)}> <td><label>Title</label></td> <td>{this.props.data.title ? this.props.data.title : 'No title available'}</td> </tr> <tr className={IDUtil.cssClassName('date', this.CLASS_PREFIX)}> <td><label>Date <span data-for={'__ci_tooltip'} data-tip={this.props.data.dateField} data-html={false}> <i className="fas fa-info-circle" /> </span> </label></td> <td>{this.props.data.date}</td> </tr> <tr className={IDUtil.cssClassName('description', this.CLASS_PREFIX)}> <td><label>Description</label></td> <td>{this.props.data.description ? this.props.data.description : 'No description available'}</td> </tr> {source} {specialProperties} {searchReferences} </tbody> </table> <ReactTooltip id={'__ci_tooltip'}/> </div> ); } } MetadataTable.propTypes = { data: PropTypes.shape({ date: PropTypes.string, dateField: PropTypes.string, description: PropTypes.string, docType: PropTypes.string, externalSourceInfo: PropTypes.object, mediaTypes: PropTypes.array, playableContent: PropTypes.array, rawData: PropTypes.object, resourceId: PropTypes.string, specialProperties: PropTypes.object, searchReferences: PropTypes.object, title: PropTypes.string }).isRequired, };