QueryRows.tsx 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import React, { PureComponent } from 'react';
  2. import QueryField from './PromQueryField';
  3. class QueryRow extends PureComponent<any, any> {
  4. constructor(props) {
  5. super(props);
  6. this.state = {
  7. edited: false,
  8. query: props.query || '',
  9. };
  10. }
  11. handleChangeQuery = value => {
  12. const { index, onChangeQuery } = this.props;
  13. const { query } = this.state;
  14. const edited = query !== value;
  15. this.setState({ edited, query: value });
  16. if (onChangeQuery) {
  17. onChangeQuery(value, index);
  18. }
  19. };
  20. handleClickAddButton = () => {
  21. const { index, onAddQueryRow } = this.props;
  22. if (onAddQueryRow) {
  23. onAddQueryRow(index);
  24. }
  25. };
  26. handleClickRemoveButton = () => {
  27. const { index, onRemoveQueryRow } = this.props;
  28. if (onRemoveQueryRow) {
  29. onRemoveQueryRow(index);
  30. }
  31. };
  32. handlePressEnter = () => {
  33. const { onExecuteQuery } = this.props;
  34. if (onExecuteQuery) {
  35. onExecuteQuery();
  36. }
  37. };
  38. render() {
  39. const { request } = this.props;
  40. const { edited, query } = this.state;
  41. return (
  42. <div className="query-row">
  43. <div className="query-row-tools">
  44. <button className="btn navbar-button navbar-button--tight" onClick={this.handleClickAddButton}>
  45. <i className="fa fa-plus" />
  46. </button>
  47. <button className="btn navbar-button navbar-button--tight" onClick={this.handleClickRemoveButton}>
  48. <i className="fa fa-minus" />
  49. </button>
  50. </div>
  51. <div className="slate-query-field-wrapper">
  52. <QueryField
  53. initialQuery={edited ? null : query}
  54. portalPrefix="explore"
  55. onPressEnter={this.handlePressEnter}
  56. onQueryChange={this.handleChangeQuery}
  57. request={request}
  58. />
  59. </div>
  60. </div>
  61. );
  62. }
  63. }
  64. export default class QueryRows extends PureComponent<any, any> {
  65. render() {
  66. const { className = '', queries, ...handlers } = this.props;
  67. return (
  68. <div className={className}>
  69. {queries.map((q, index) => <QueryRow key={q.key} index={index} query={q.query} {...handlers} />)}
  70. </div>
  71. );
  72. }
  73. }