SearchBox.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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. }
  14. this.search = this.search.bind(this);
  15. }
  16. search(data) {
  17. const keyword = data.keyword;
  18. if (keyword === '') {
  19. this.setState({
  20. searchingKeyword: '',
  21. searchedPages: [],
  22. });
  23. return true;
  24. }
  25. this.setState({
  26. searchingKeyword: keyword,
  27. });
  28. axios.get('/_api/search', {params: {q: keyword}})
  29. .then((res) => {
  30. if (res.data.ok) {
  31. this.setState({
  32. searchingKeyword: keyword,
  33. searchedPages: res.data.data,
  34. });
  35. }
  36. // TODO error
  37. })
  38. .catch((res) => {
  39. // TODO error
  40. });
  41. }
  42. render() {
  43. return (
  44. <div className="search-box">
  45. <SearchForm onSearchFormChanged={this.search} />
  46. <SearchSuggest
  47. searchingKeyword={this.state.searchingKeyword}
  48. searchedPages={this.state.searchedPages}
  49. />
  50. </div>
  51. );
  52. }
  53. }
  54. SearchBox.propTypes = {
  55. //pollInterval: React.PropTypes.number,
  56. };
  57. SearchBox.defaultProps = {
  58. //pollInterval: 1000,
  59. };