UNPKG

cruk-searchkit

Version:

Set of overriden and new searchkit components designed specifically for Cancer Research UK

74 lines (61 loc) 1.8 kB
import React from 'react'; import ReactDOM from 'react-dom'; import bem from 'bem-cn'; import { SearchkitComponent } from 'searchkit'; import CRUKCustomElasticGetter from '../getter/CRUKCustomElasticGetter' import { CRUKSearchkitDidYouMeanAccessor } from './CRUKSearchkitDidYouMeanAccessor'; const mainClass = bem('cr-did-you-mean'); /** * CRUKSearchkitAutocomplete component. */ export default class CRUKSearchkitDidYouMean extends SearchkitComponent { accessor:CRUKSearchkitDidYouMeanAccessor static propTypes = { field: React.PropTypes.string, minResults: React.PropTypes.number } static defaultProps = { field: 'body', minResults: 10 } constructor(props) { super(props); this.clickHandle = this.clickHandle.bind(this); this.getQueryAccessorIndex = this.getQueryAccessorIndex.bind(this); } clickHandle(e) { e.preventDefault(); const sbAccessorIndex = this.getQueryAccessorIndex(); if (sbAccessorIndex) { this.searchkit.accessors.accessors[sbAccessorIndex].state.value = e.target.innerHTML; this.searchkit.performSearch(); } } getQueryAccessorIndex() { return this.searchkit.accessors.accessors .map((v, i) => { return v.key === 'xss-q' ? i : null; }) .filter(v => typeof v === 'number') .join(); } defineAccessor() { return new CRUKSearchkitDidYouMeanAccessor(this.props.field); } render() { const suggestion = this.accessor.getSuggestion(); if (!suggestion || this.searchkit.results.hits.total > this.props.minResults) return null; return ( <p className={mainClass()} > Did you mean&nbsp; <a href="#t" className={mainClass('link')} onClick={this.clickHandle}> {suggestion} </a>? </p> ); } }