UNPKG

zotero-web-library

Version:

Web library from zotero.org

106 lines (94 loc) 2.84 kB
'use strict'; var log = require('libzotero/lib/Log').Logger('zotero-web-library:GlobalSearch'); var Net = require('libzotero/lib/Net'); var React = require('react'); var CanonicalItem = require('./CanonicalSearchResult.js'); //const baseSearchUrl = 'https://52.91.6.162'; var baseSearchUrl = 'https://localhost:8080'; var globalSearchUrl = function globalSearchUrl(query) { return baseSearchUrl + '/global/items?q=' + query; }; var globalDOIUrl = function globalDOIUrl(query) { return baseSearchUrl + '/global/items?DOI=' + query; }; var GlobalSearch = React.createClass({ displayName: 'GlobalSearch', componentDidMount: function componentDidMount() { if (this.state.search != '') { this.search(); } }, getDefaultProps: function getDefaultProps() { return { item: null }; }, getInitialState: function getInitialState() { var query = Zotero.state.getUrlVar('q'); return { search: query, results: [] }; }, handleSearchChange: function handleSearchChange(evt) { this.setState({ search: evt.target.value }); }, search: function search() { var _this = this; var evt = arguments.length <= 0 || arguments[0] === undefined ? false : arguments[0]; if (evt) { evt.preventDefault(); } var searchTerm = this.state.search; //update querystring Zotero.state.setQueryVar('q', this.state.search); Zotero.state.pushState(); var searchUrl = ''; if (searchTerm.startsWith('doi:')) { searchUrl = globalDOIUrl(searchTerm.slice(4)); } else { searchUrl = globalSearchUrl(searchTerm); } Net.ajax({ url: searchUrl }).then(function (resp) { var resultsObj = JSON.parse(resp.responseText); var globalItems = resultsObj.map(function (g) { return g; }); _this.setState({ results: globalItems }); }); }, render: function render() { var reactInstance = this; var resultNodes = reactInstance.state.results.map(function (globalItem) { return React.createElement(CanonicalItem, { key: globalItem.ID, item: globalItem }); }); return React.createElement( 'div', { className: 'global-search' }, React.createElement( 'form', { id: 'global-search-form', onSubmit: this.search }, React.createElement( 'div', { className: 'input-group' }, React.createElement('input', { type: 'text', className: 'form-control', value: this.state.search, onChange: this.handleSearchChange }), React.createElement( 'span', { className: 'input-group-btn' }, React.createElement( 'button', { type: 'button', className: 'btn btn-default', onClick: this.search }, React.createElement('span', { className: 'glyphicons fonticon glyphicons-search' }) ) ) ) ), React.createElement( 'div', { className: 'results' }, resultNodes ) ); } }); module.exports = GlobalSearch;