SearchBox.js 1.6 KB

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