useCommitters.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import type {Group} from 'sentry/types/group';
  2. import type {Committer} from 'sentry/types/integrations';
  3. import type {ApiQueryKey, UseApiQueryOptions} from 'sentry/utils/queryClient';
  4. import {useApiQuery} from 'sentry/utils/queryClient';
  5. import usePrevious from 'sentry/utils/usePrevious';
  6. import useOrganization from './useOrganization';
  7. interface UseCommittersProps {
  8. eventId: string;
  9. projectSlug: string;
  10. group?: Group;
  11. }
  12. interface CommittersResponse {
  13. committers: Committer[];
  14. }
  15. const makeCommittersQueryKey = (
  16. orgSlug: string,
  17. projectSlug: string,
  18. eventId: string
  19. ): ApiQueryKey => [`/projects/${orgSlug}/${projectSlug}/events/${eventId}/committers/`];
  20. function useCommitters(
  21. {eventId, projectSlug, group}: UseCommittersProps,
  22. options: Partial<UseApiQueryOptions<CommittersResponse>> = {}
  23. ) {
  24. const org = useOrganization();
  25. const previousGroupId = usePrevious(group?.id);
  26. return useApiQuery<CommittersResponse>(
  27. makeCommittersQueryKey(org.slug, projectSlug, eventId),
  28. {
  29. staleTime: Infinity,
  30. retry: false,
  31. enabled: !!eventId,
  32. placeholderData: previousData => {
  33. return group?.id === previousGroupId ? previousData : undefined;
  34. },
  35. ...options,
  36. }
  37. );
  38. }
  39. export default useCommitters;