useInteractionsQuery.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import {useDiscoverQuery} from 'sentry/utils/discover/discoverQuery';
  2. import EventView from 'sentry/utils/discover/eventView';
  3. import {useLocation} from 'sentry/utils/useLocation';
  4. import useOrganization from 'sentry/utils/useOrganization';
  5. import usePageFilters from 'sentry/utils/usePageFilters';
  6. import {useBrowserModuleFilters} from 'sentry/views/performance/browser/useBrowserFilters';
  7. export const useInteractionsQuery = () => {
  8. const pageFilters = usePageFilters();
  9. const browserFilters = useBrowserModuleFilters();
  10. const location = useLocation();
  11. const {slug: orgSlug} = useOrganization();
  12. const queryConditions = [
  13. 'has:interactionElement',
  14. browserFilters.page ? `transaction:${browserFilters.page}` : '',
  15. ];
  16. // TODO - we should be using metrics data here
  17. const eventView = EventView.fromNewQueryWithPageFilters(
  18. {
  19. fields: [
  20. 'interactionElement',
  21. 'transaction',
  22. 'transaction.op',
  23. 'p75(transaction.duration)',
  24. 'count()',
  25. ],
  26. name: 'Interaction module - interactions table',
  27. query: queryConditions.join(' '),
  28. orderby: '-count',
  29. version: 2,
  30. },
  31. pageFilters.selection
  32. );
  33. const result = useDiscoverQuery({eventView, limit: 50, location, orgSlug});
  34. const data = result?.data?.data.map(row => ({
  35. transaction: row.transaction.toString(),
  36. interactionElement: row.interactionElement.toString(),
  37. 'transaction.op': row['transaction.op'].toString(),
  38. 'p75(transaction.duration)': row['p75(transaction.duration)'] as number,
  39. 'count()': row['count()'] as number,
  40. }));
  41. return {...result, data: data || []};
  42. };