SearchPageForm.jsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import React from 'react';
  2. import PropTypes from 'prop-types';
  3. import { createSubscribedElement } from '../UnstatedUtils';
  4. import AppContainer from '../../services/AppContainer';
  5. // Search.SearchForm
  6. class SearchPageForm extends React.Component {
  7. constructor(props) {
  8. super(props);
  9. this.state = {
  10. keyword: this.props.keyword,
  11. searchedKeyword: this.props.keyword,
  12. };
  13. this.search = this.search.bind(this);
  14. this.onInputChange = this.onInputChange.bind(this);
  15. }
  16. search() {
  17. const keyword = this.state.keyword;
  18. this.props.onSearchFormChanged({ keyword });
  19. this.setState({ searchedKeyword: keyword });
  20. }
  21. onInputChange(input) { // for only submitting with button
  22. this.setState({ keyword: input });
  23. }
  24. render() {
  25. return (
  26. <div className="input-group mb-3">
  27. <input
  28. type="text"
  29. className="form-control"
  30. placeholder="Search ..."
  31. t={this.props.t}
  32. onSubmit={this.search}
  33. keyword={this.state.searchedKeyword}
  34. onInputChange={this.onInputChange}
  35. />
  36. <div className="input-group-append">
  37. <button className="btn btn-outline-secondary" type="button" id="button-addon2" onClick={this.search}>
  38. <i className="icon-magnifier"></i>
  39. </button>
  40. </div>
  41. </div>
  42. );
  43. }
  44. }
  45. /**
  46. * Wrapper component for using unstated
  47. */
  48. const SearchPageFormWrapper = (props) => {
  49. return createSubscribedElement(SearchPageForm, props, [AppContainer]);
  50. };
  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;