SearchPageForm.jsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { withUnstatedContainers } from '../UnstatedUtils';
  4. import AppContainer from '~/client/services/AppContainer';
  5. import SearchForm from '../SearchForm';
  6. // Search.SearchForm
  7. class SearchPageForm extends React.Component {
  8. constructor(props) {
  9. super(props);
  10. this.state = {
  11. keyword: this.props.keyword,
  12. searchedKeyword: this.props.keyword,
  13. };
  14. this.search = this.search.bind(this);
  15. this.onInputChange = this.onInputChange.bind(this);
  16. }
  17. search() {
  18. const keyword = this.state.keyword;
  19. this.props.onSearchFormChanged({ keyword });
  20. this.setState({ searchedKeyword: keyword });
  21. }
  22. onInputChange(input) { // for only submitting with button
  23. this.setState({ keyword: input });
  24. }
  25. render() {
  26. const { appContainer } = this.props;
  27. const isSearchServiceReachable = appContainer.getConfig().isSearchServiceReachable;
  28. return (
  29. <div className="input-group mb-3 d-flex">
  30. <div className="flex-fill">
  31. <SearchForm
  32. isSearchServiceReachable={isSearchServiceReachable}
  33. onSubmit={this.search}
  34. keyword={this.state.searchedKeyword}
  35. onInputChange={this.onInputChange}
  36. />
  37. </div>
  38. <div className="input-group-append">
  39. <button className="btn btn-secondary" type="button" id="button-addon2" onClick={this.search}>
  40. <i className="icon-magnifier"></i>
  41. </button>
  42. </div>
  43. </div>
  44. );
  45. }
  46. }
  47. /**
  48. * Wrapper component for using unstated
  49. */
  50. const SearchPageFormWrapper = withUnstatedContainers(SearchPageForm, [AppContainer]);
  51. SearchPageForm.propTypes = {
  52. t: PropTypes.func.isRequired, // i18next
  53. appContainer: PropTypes.instanceOf(AppContainer).isRequired,
  54. keyword: PropTypes.string,
  55. onSearchFormChanged: PropTypes.func.isRequired,
  56. };
  57. SearchPageForm.defaultProps = {
  58. };
  59. export default SearchPageFormWrapper;