import pick from 'lodash/pick'; import {MetaType} from 'sentry/utils/discover/eventView'; import GenericDiscoverQuery, { DiscoverQueryPropsWithContext, GenericChildrenProps, } from 'sentry/utils/discover/genericDiscoverQuery'; import {WebVital} from 'sentry/utils/fields'; import {PERFORMANCE_URL_PARAM} from 'sentry/utils/performance/constants'; export type TableDataRow = { [key: string]: React.ReactText; id: string; }; export type TableData = { data: Array; meta?: MetaType; }; export type VitalData = { good: number; meh: number; p75: number | null; poor: number; total: number; }; export type VitalsData = Record; type VitalsProps = { vitals: WebVital[]; }; type RequestProps = DiscoverQueryPropsWithContext & VitalsProps; type ChildrenProps = Omit, 'tableData'> & { vitalsData: VitalsData | null; }; type Props = RequestProps & { children: (props: ChildrenProps) => React.ReactNode; }; function getRequestPayload(props: RequestProps) { const {eventView, vitals} = props; const apiPayload = eventView?.getEventsAPIPayload(props.location); return { vital: vitals, ...pick(apiPayload, ['query', ...Object.values(PERFORMANCE_URL_PARAM)]), }; } function VitalsCardsDiscoverQuery(props: Props) { return ( getRequestPayload={getRequestPayload} route="events-vitals" {...props} > {({tableData, ...rest}) => { return props.children({vitalsData: tableData, ...rest}); }} ); } export default VitalsCardsDiscoverQuery;