HeaderSearchBox.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // This is the root component for #search-top
  2. import React from 'react';
  3. import SearchForm from './HeaderSearchBox/SearchForm';
  4. import SearchSuggest from './HeaderSearchBox/SearchSuggest';
  5. import axios from 'axios'
  6. export default class SearchBox extends React.Component {
  7. constructor(props) {
  8. super(props);
  9. this.crowi = window.crowi; // FIXME
  10. this.state = {
  11. searchingKeyword: '',
  12. searchedPages: [],
  13. searchError: null,
  14. searching: false,
  15. focused: false,
  16. }
  17. this.search = this.search.bind(this);
  18. }
  19. search(data) {
  20. const keyword = data.keyword;
  21. if (keyword === '') {
  22. this.setState({
  23. searchingKeyword: '',
  24. searchedPages: [],
  25. });
  26. return true;
  27. }
  28. this.setState({
  29. searchingKeyword: keyword,
  30. searching: true,
  31. });
  32. this.crowi.apiGet('/search', {q: keyword})
  33. .then(res => {
  34. this.setState({
  35. searchingKeyword: keyword,
  36. searchedPages: res.data,
  37. searching: false,
  38. searchError: null,
  39. });
  40. }).catch(err => {
  41. this.setState({
  42. searchError: err,
  43. searching: false,
  44. });
  45. });
  46. }
  47. render() {
  48. return (
  49. <div className="search-box">
  50. <SearchForm
  51. onSearchFormChanged={this.search}
  52. />
  53. {/* omit since using react-bootstrap-typeahead in SearchForm
  54. <SearchSuggest
  55. searchingKeyword={this.state.searchingKeyword}
  56. searchedPages={this.state.searchedPages}
  57. searchError={this.state.searchError}
  58. searching={this.state.searching}
  59. focused={this.state.focused}
  60. />
  61. */}
  62. </div>
  63. );
  64. }
  65. }
  66. SearchBox.propTypes = {
  67. //pollInterval: React.PropTypes.number,
  68. };
  69. SearchBox.defaultProps = {
  70. //pollInterval: 1000,
  71. };