UNPKG

zotero-web-library

Version:

Web library from zotero.org

260 lines (250 loc) 5.19 kB
'use strict'; var log = require('libzotero/lib/Log').Logger('zotero-web-library:CanonicalSearchResult'); var React = require('react'); var ItemMaps = require('libzotero/lib/ItemMaps'); var CanonicalItem = React.createClass({ displayName: 'CanonicalItem', getDefaultProps: function getDefaultProps() { return { item: null }; }, getInitialState: function getInitialState() { return { showDetails: false }; }, toggleDetails: function toggleDetails() { this.setState({ showDetails: !this.state.showDetails }); }, render: function render() { if (this.props.item == null) { return null; } var item = this.props.item; var title = item.data.title; if (title == '') { title = '<untitled>'; } var keys = Object.keys(item.data); var canonicalDataFields = []; canonicalDataFields = keys.map(function (key) { var val = item.data[key]; if (val === '') { return null; } if (key == 'creators') { if (!val) { return null; } var creatorRows = val.map(function (k, i) { if (k.name) { return React.createElement( 'tr', { key: 'creator_' + i }, React.createElement( 'th', null, ItemMaps.creatorMap[k.creatorType] ), React.createElement( 'td', null, k.name ) ); } else { return React.createElement( 'tr', { key: 'creator_' + i }, React.createElement( 'th', null, ItemMaps.creatorMap[k.creatorType] ), React.createElement( 'td', null, k.lastName, ', ', k.firstName ) ); } }); return creatorRows; } else if (typeof val == 'string') { return React.createElement( 'tr', { key: key }, React.createElement( 'th', null, ItemMaps.fieldMap[key] ), React.createElement( 'td', null, val ) ); } return null; }); var datesAdded = item.meta.datesAdded.map(function (da) { return React.createElement( 'li', { key: da.month }, da.month, ' : ', da.numAdded ); }); var instances = null; if (item.libraryItems) { //log.debug(`${item.libraryItems.length} public library item instances`); instances = item.libraryItems.map(function (instance) { instance = instance.replace('api.zotero.org', 'apidev.zotero.org'); return React.createElement( 'div', { key: instance }, React.createElement( 'a', { href: instance }, instance ) ); }); } var detailsClass = 'search-result-body panel-body hidden'; if (this.state.showDetails) { detailsClass = 'search-result-body panel-body'; } return React.createElement( 'div', { className: 'canonicalItem' }, React.createElement( 'div', { className: 'panel panel-default' }, React.createElement( 'div', { className: 'panel-heading', onClick: this.toggleDetails }, React.createElement( 'h4', { className: 'panel-title' }, React.createElement( 'a', { role: 'button' }, title ) ) ), React.createElement( 'div', { className: detailsClass }, React.createElement( 'div', { className: 'canonicalMeta' }, React.createElement( 'h3', null, 'Canonical Meta' ), React.createElement( 'table', null, React.createElement( 'tbody', null, React.createElement( 'tr', null, React.createElement( 'th', null, 'Canonical ID' ), React.createElement( 'td', null, item.ID ) ), React.createElement( 'tr', null, React.createElement( 'th', null, 'Instances' ), React.createElement( 'td', null, item.meta.instanceCount ) ), React.createElement( 'tr', null, React.createElement( 'th', null, 'Libraries Count' ), React.createElement( 'td', null, item.meta.librariesCount ) ), React.createElement( 'tr', null, React.createElement( 'th', null, 'Dates Added' ), React.createElement( 'td', null, React.createElement( 'ul', null, datesAdded ) ) ) ) ) ), React.createElement( 'div', { className: 'instances' }, instances ), React.createElement( 'div', { className: 'canonicalData' }, React.createElement( 'h3', null, 'Canonical Data' ), React.createElement( 'table', null, React.createElement( 'tbody', null, canonicalDataFields ) ) ) ) ) ); } }); module.exports = CanonicalItem;