import omit from 'lodash/omit'; import pick from 'lodash/pick'; import {escapeDoubleQuotes} from 'sentry/utils'; import GenericDiscoverQuery, { DiscoverQueryProps, GenericChildrenProps, } from 'sentry/utils/discover/genericDiscoverQuery'; import {escapeFilterValue} from 'sentry/utils/tokenizeSearch'; type HasMeasurementsProps = { transaction: string; type: 'web' | 'mobile'; }; type RequestProps = DiscoverQueryProps & HasMeasurementsProps; type HasMeasurements = {measurements: boolean}; type ChildrenProps = Omit, 'tableData'> & { hasMeasurements: boolean | null; }; type Props = RequestProps & { children: (props: ChildrenProps) => React.ReactNode; }; function getHasMeasurementsRequestPayload(props: RequestProps) { const {eventView, location, transaction, type} = props; const escaped = escapeDoubleQuotes(escapeFilterValue(transaction)); const baseApiPayload = { transaction: `"${escaped}"`, type, }; const additionalApiPayload = pick(eventView.getEventsAPIPayload(location), [ 'project', 'environment', ]); return Object.assign(baseApiPayload, additionalApiPayload); } function HasMeasurementsQuery(props: Props) { return ( route="events-has-measurements" getRequestPayload={getHasMeasurementsRequestPayload} {...omit(props, 'children')} > {({tableData, ...rest}) => { return props.children({ hasMeasurements: tableData?.measurements ?? null, ...rest, }); }} ); } export default HasMeasurementsQuery;