vitalsCardsDiscoverQuery.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import pick from 'lodash/pick';
  2. import {MetaType} from 'sentry/utils/discover/eventView';
  3. import GenericDiscoverQuery, {
  4. DiscoverQueryPropsWithContext,
  5. GenericChildrenProps,
  6. } from 'sentry/utils/discover/genericDiscoverQuery';
  7. import {WebVital} from 'sentry/utils/fields';
  8. import {PERFORMANCE_URL_PARAM} from 'sentry/utils/performance/constants';
  9. export type TableDataRow = {
  10. [key: string]: React.ReactText;
  11. id: string;
  12. };
  13. export type TableData = {
  14. data: Array<TableDataRow>;
  15. meta?: MetaType;
  16. };
  17. export type VitalData = {
  18. good: number;
  19. meh: number;
  20. p75: number | null;
  21. poor: number;
  22. total: number;
  23. };
  24. export type VitalsData = Record<string, VitalData>;
  25. type VitalsProps = {
  26. vitals: WebVital[];
  27. };
  28. type RequestProps = DiscoverQueryPropsWithContext & VitalsProps;
  29. type ChildrenProps = Omit<GenericChildrenProps<VitalsProps>, 'tableData'> & {
  30. vitalsData: VitalsData | null;
  31. };
  32. type Props = RequestProps & {
  33. children: (props: ChildrenProps) => React.ReactNode;
  34. };
  35. function getRequestPayload(props: RequestProps) {
  36. const {eventView, vitals} = props;
  37. const apiPayload = eventView?.getEventsAPIPayload(props.location);
  38. return {
  39. vital: vitals,
  40. ...pick(apiPayload, ['query', ...Object.values(PERFORMANCE_URL_PARAM)]),
  41. };
  42. }
  43. function VitalsCardsDiscoverQuery(props: Props) {
  44. return (
  45. <GenericDiscoverQuery<VitalsData, VitalsProps>
  46. getRequestPayload={getRequestPayload}
  47. route="events-vitals"
  48. {...props}
  49. >
  50. {({tableData, ...rest}) => {
  51. return props.children({vitalsData: tableData, ...rest});
  52. }}
  53. </GenericDiscoverQuery>
  54. );
  55. }
  56. export default VitalsCardsDiscoverQuery;