useProfileFunctions.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import {normalizeDateTimeParams} from 'sentry/components/organizations/pageFilters/parse';
  2. import {PageFilters} from 'sentry/types';
  3. import {useApiQuery} from 'sentry/utils/queryClient';
  4. import useOrganization from 'sentry/utils/useOrganization';
  5. import usePageFilters from 'sentry/utils/usePageFilters';
  6. import type {EventsResults, Sort} from './types';
  7. export interface UseProfileFunctionsOptions<F extends string> {
  8. fields: readonly F[];
  9. referrer: string;
  10. sort: Sort<F>;
  11. cursor?: string;
  12. datetime?: PageFilters['datetime'];
  13. enabled?: boolean;
  14. limit?: number;
  15. projects?: (number | string)[];
  16. query?: string;
  17. refetchOnMount?: boolean;
  18. }
  19. export function useProfileFunctions<F extends string>({
  20. fields,
  21. referrer,
  22. sort,
  23. cursor,
  24. datetime,
  25. enabled,
  26. limit,
  27. projects,
  28. query,
  29. refetchOnMount,
  30. }: UseProfileFunctionsOptions<F>) {
  31. const organization = useOrganization();
  32. const {selection} = usePageFilters();
  33. const path = `/organizations/${organization.slug}/events/`;
  34. const endpointOptions = {
  35. query: {
  36. dataset: 'profileFunctions',
  37. referrer,
  38. project: projects || selection.projects,
  39. environment: selection.environments,
  40. ...normalizeDateTimeParams(datetime ?? selection.datetime),
  41. field: fields,
  42. per_page: limit,
  43. query,
  44. sort: sort.order === 'asc' ? sort.key : `-${sort.key}`,
  45. cursor,
  46. },
  47. };
  48. return useApiQuery<EventsResults<F>>([path, endpointOptions], {
  49. staleTime: 0,
  50. refetchOnWindowFocus: false,
  51. refetchOnMount,
  52. retry: false,
  53. enabled,
  54. });
  55. }