hasMeasurementsQuery.tsx 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import omit from 'lodash/omit';
  2. import pick from 'lodash/pick';
  3. import {escapeDoubleQuotes} from 'app/utils';
  4. import GenericDiscoverQuery, {
  5. DiscoverQueryProps,
  6. GenericChildrenProps,
  7. } from 'app/utils/discover/genericDiscoverQuery';
  8. import {escapeFilterValue} from 'app/utils/tokenizeSearch';
  9. import withApi from 'app/utils/withApi';
  10. type HasMeasurementsProps = {
  11. transaction: string;
  12. type: 'web' | 'mobile';
  13. };
  14. type RequestProps = DiscoverQueryProps & HasMeasurementsProps;
  15. type HasMeasurements = {measurements: boolean};
  16. type ChildrenProps = Omit<GenericChildrenProps<HasMeasurementsProps>, 'tableData'> & {
  17. hasMeasurements: boolean | null;
  18. };
  19. type Props = RequestProps & {
  20. children: (props: ChildrenProps) => React.ReactNode;
  21. };
  22. function getHasMeasurementsRequestPayload(props: RequestProps) {
  23. const {eventView, location, transaction, type} = props;
  24. const escaped = escapeDoubleQuotes(escapeFilterValue(transaction));
  25. const baseApiPayload = {
  26. transaction: `"${escaped}"`,
  27. type,
  28. };
  29. const additionalApiPayload = pick(eventView.getEventsAPIPayload(location), [
  30. 'project',
  31. 'environment',
  32. ]);
  33. return Object.assign(baseApiPayload, additionalApiPayload);
  34. }
  35. function HasMeasurementsQuery(props: Props) {
  36. return (
  37. <GenericDiscoverQuery<HasMeasurements, HasMeasurementsProps>
  38. route="events-has-measurements"
  39. getRequestPayload={getHasMeasurementsRequestPayload}
  40. {...omit(props, 'children')}
  41. >
  42. {({tableData, ...rest}) => {
  43. return props.children({
  44. hasMeasurements: tableData?.measurements ?? null,
  45. ...rest,
  46. });
  47. }}
  48. </GenericDiscoverQuery>
  49. );
  50. }
  51. export default withApi(HasMeasurementsQuery);