import React, { Component } from 'react' import { Trans, translate } from 'react-i18next' import { connect } from 'react-redux' import { flatRulesSelector } from 'Selectors/analyseSelectors' import { LinkButton } from 'Ui/Button' import Overlay from './Overlay' import SearchBar from './SearchBar' @connect(state => ({ flatRules: flatRulesSelector(state) })) @translate() export default class SearchButton extends Component { componentDidMount() { // removeEventListener will need the exact same function instance this.boundHandleKeyDown = this.handleKeyDown.bind(this) window.addEventListener('keydown', this.boundHandleKeyDown) } handleKeyDown(e) { if (!(e.ctrlKey && e.key === 'k')) return this.setState({ visible: true }) e.preventDefault() e.stopPropagation() return false } componentWillUnmount() { window.removeEventListener('keydown', this.boundHandleKeyDown) } state = { visible: false } close = () => this.setState({ visible: false }) render() { let { flatRules } = this.props return this.state.visible ? ( <Overlay onClose={this.close}> <h2> <Trans>Chercher une règle</Trans> </h2> <SearchBar showDefaultList={false} finally={this.close} rules={flatRules} rulePagesBasePath={this.props.rulePagesBasePath} /> </Overlay> ) : ( <LinkButton onClick={() => this.setState({ visible: true })} className={this.props.className} style={this.props.style}> <i className="fa fa-search" aria-hidden="true" style={{ marginRight: '0.4em' }} /> <span> <Trans>Rechercher</Trans> </span> </LinkButton> ) } }