segmentExplorerQuery.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import {EventQuery} from 'sentry/actionCreators/events';
  2. import {LocationQuery} from 'sentry/utils/discover/eventView';
  3. import GenericDiscoverQuery, {
  4. DiscoverQueryProps,
  5. GenericChildrenProps,
  6. } from 'sentry/utils/discover/genericDiscoverQuery';
  7. /**
  8. * An individual row in a Segment explorer result
  9. */
  10. export type TableDataRow = {
  11. aggregate: number;
  12. comparison: number;
  13. count: number;
  14. frequency: number;
  15. sumdelta: number;
  16. tags_key: string;
  17. tags_value: string;
  18. };
  19. export type TableData = {
  20. data: TableDataRow[];
  21. meta: {};
  22. };
  23. /**
  24. * A Segment Explorer result including rows and metadata.
  25. */
  26. type ChildrenProps = Omit<GenericChildrenProps<TableData>, 'tableData'> & {
  27. tableData: TableData | null;
  28. };
  29. type QueryProps = DiscoverQueryProps & {
  30. aggregateColumn: string;
  31. children: (props: ChildrenProps) => React.ReactNode;
  32. allTagKeys?: boolean;
  33. sort?: string | string[];
  34. tagKey?: string;
  35. };
  36. type FacetQuery = LocationQuery &
  37. EventQuery & {
  38. aggregateColumn?: string;
  39. allTagKeys?: boolean;
  40. sort?: string | string[];
  41. tagKey?: string;
  42. };
  43. export function getRequestFunction(_props: QueryProps) {
  44. const {aggregateColumn} = _props;
  45. function getTagExplorerRequestPayload(props: DiscoverQueryProps) {
  46. const {eventView} = props;
  47. const apiPayload: FacetQuery = eventView.getEventsAPIPayload(props.location);
  48. apiPayload.aggregateColumn = aggregateColumn;
  49. apiPayload.sort = _props.sort ? _props.sort : apiPayload.sort;
  50. if (_props.allTagKeys) {
  51. apiPayload.allTagKeys = _props.allTagKeys;
  52. }
  53. if (_props.tagKey) {
  54. apiPayload.tagKey = _props.tagKey;
  55. }
  56. return apiPayload;
  57. }
  58. return getTagExplorerRequestPayload;
  59. }
  60. function shouldRefetchData(prevProps: QueryProps, nextProps: QueryProps) {
  61. return (
  62. prevProps.aggregateColumn !== nextProps.aggregateColumn ||
  63. prevProps.sort !== nextProps.sort ||
  64. prevProps.allTagKeys !== nextProps.allTagKeys ||
  65. prevProps.tagKey !== nextProps.tagKey
  66. );
  67. }
  68. function SegmentExplorerQuery(props: QueryProps) {
  69. return (
  70. <GenericDiscoverQuery<TableData, QueryProps>
  71. route="events-facets-performance"
  72. getRequestPayload={getRequestFunction(props)}
  73. shouldRefetchData={shouldRefetchData}
  74. {...props}
  75. />
  76. );
  77. }
  78. export default SegmentExplorerQuery;