import React from 'react'; import PropTypes from 'prop-types'; import { withTranslation } from 'react-i18next'; import { withUnstatedContainers } from '../UnstatedUtils'; import AppContainer from '~/client/services/AppContainer'; import SearchForm from '../SearchForm'; class GlobalSearch extends React.Component { constructor(props) { super(props); const isSearchScopeChildrenAsDefault = this.props.appContainer.getConfig().isSearchScopeChildrenAsDefault; this.state = { text: '', isScopeChildren: isSearchScopeChildrenAsDefault, }; this.onInputChange = this.onInputChange.bind(this); this.onClickAllPages = this.onClickAllPages.bind(this); this.onClickChildren = this.onClickChildren.bind(this); this.search = this.search.bind(this); } onInputChange(text) { this.setState({ text }); } onClickAllPages() { this.setState({ isScopeChildren: false }); } onClickChildren() { this.setState({ isScopeChildren: true }); } search() { const url = new URL(window.location.href); url.pathname = '/_search'; // construct search query let q = this.state.text; if (this.state.isScopeChildren) { q += ` prefix:${window.location.pathname}`; } url.searchParams.append('q', q); window.location.href = url.href; } render() { const { t, appContainer, dropup } = this.props; const scopeLabel = this.state.isScopeChildren ? t('header_search_box.label.This tree') : t('header_search_box.label.All pages'); const config = appContainer.getConfig(); const isReachable = config.isSearchServiceReachable; return (