hasMeasurementsQuery.tsx 1.6 KB

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