QueryRows.tsx 1.9 KB

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