trendsDiscoverQuery.tsx 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import * as React from 'react';
  2. import GenericDiscoverQuery, {
  3. DiscoverQueryProps,
  4. GenericChildrenProps,
  5. } from 'app/utils/discover/genericDiscoverQuery';
  6. import withApi from 'app/utils/withApi';
  7. import {
  8. TrendChangeType,
  9. TrendsData,
  10. TrendsDataEvents,
  11. TrendsQuery,
  12. TrendView,
  13. } from 'app/views/performance/trends/types';
  14. import {
  15. generateTrendFunctionAsString,
  16. getCurrentTrendFunction,
  17. getCurrentTrendParameter,
  18. } from 'app/views/performance/trends/utils';
  19. export type TrendsRequest = {
  20. trendChangeType?: TrendChangeType;
  21. eventView: Partial<TrendView>;
  22. };
  23. type RequestProps = DiscoverQueryProps & TrendsRequest;
  24. type ChildrenProps = Omit<GenericChildrenProps<TrendsData>, 'tableData'> & {
  25. trendsData: TrendsData | null;
  26. };
  27. type Props = RequestProps & {
  28. children: (props: ChildrenProps) => React.ReactNode;
  29. };
  30. type EventChildrenProps = Omit<GenericChildrenProps<TrendsDataEvents>, 'tableData'> & {
  31. trendsData: TrendsDataEvents | null;
  32. };
  33. type EventProps = RequestProps & {
  34. children: (props: EventChildrenProps) => React.ReactNode;
  35. };
  36. export function getTrendsRequestPayload(props: RequestProps) {
  37. const {eventView} = props;
  38. const apiPayload: TrendsQuery = eventView?.getEventsAPIPayload(props.location);
  39. const trendFunction = getCurrentTrendFunction(props.location);
  40. const trendParameter = getCurrentTrendParameter(props.location);
  41. apiPayload.trendFunction = generateTrendFunctionAsString(
  42. trendFunction.field,
  43. trendParameter.column
  44. );
  45. apiPayload.trendType = eventView?.trendType;
  46. apiPayload.interval = eventView?.interval;
  47. apiPayload.middle = eventView?.middle;
  48. return apiPayload;
  49. }
  50. function TrendsDiscoverQuery(props: Props) {
  51. return (
  52. <GenericDiscoverQuery<TrendsData, TrendsRequest>
  53. route="events-trends-stats"
  54. getRequestPayload={getTrendsRequestPayload}
  55. {...props}
  56. >
  57. {({tableData, ...rest}) => {
  58. return props.children({trendsData: tableData, ...rest});
  59. }}
  60. </GenericDiscoverQuery>
  61. );
  62. }
  63. function EventsDiscoverQuery(props: EventProps) {
  64. return (
  65. <GenericDiscoverQuery<TrendsDataEvents, TrendsRequest>
  66. route="events-trends"
  67. getRequestPayload={getTrendsRequestPayload}
  68. {...props}
  69. >
  70. {({tableData, ...rest}) => {
  71. return props.children({trendsData: tableData, ...rest});
  72. }}
  73. </GenericDiscoverQuery>
  74. );
  75. }
  76. export const TrendsEventsDiscoverQuery = withApi(EventsDiscoverQuery);
  77. export default withApi(TrendsDiscoverQuery);