Files
2024-02-15 17:01:50 +00:00

61 lines
1.7 KiB
TypeScript

import omit from 'lodash/omit';
import pick from 'lodash/pick';
import {escapeDoubleQuotes} from 'sentry/utils';
import type {
DiscoverQueryProps,
GenericChildrenProps,
} from 'sentry/utils/discover/genericDiscoverQuery';
import GenericDiscoverQuery 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<GenericChildrenProps<HasMeasurementsProps>, '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 (
<GenericDiscoverQuery<HasMeasurements, HasMeasurementsProps>
route="events-has-measurements"
getRequestPayload={getHasMeasurementsRequestPayload}
{...omit(props, 'children')}
>
{({tableData, ...rest}) => {
return props.children({
hasMeasurements: tableData?.measurements ?? null,
...rest,
});
}}
</GenericDiscoverQuery>
);
}
export default HasMeasurementsQuery;