SearchBox.js 1.7 KB

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