useStacktraceLink.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import type {Event, Frame, StacktraceLinkResult} from 'sentry/types';
  2. import {ApiQueryKey, useApiQuery, UseApiQueryOptions} from 'sentry/utils/queryClient';
  3. interface UseStacktraceLinkProps {
  4. event: Event;
  5. frame: Frame;
  6. orgSlug: string;
  7. projectSlug: string | undefined;
  8. }
  9. const stacktraceLinkQueryKey = (
  10. orgSlug: string,
  11. projectSlug: string | undefined,
  12. query: any
  13. ): ApiQueryKey => [`/projects/${orgSlug}/${projectSlug}/stacktrace-link/`, {query}];
  14. function useStacktraceLink(
  15. {event, frame, orgSlug, projectSlug}: UseStacktraceLinkProps,
  16. options: Partial<UseApiQueryOptions<StacktraceLinkResult>> = {}
  17. ) {
  18. const query = {
  19. file: frame.filename,
  20. platform: event.platform,
  21. commitId: event.release?.lastCommit?.id,
  22. ...(event.sdk?.name && {sdkName: event.sdk.name}),
  23. ...(frame.absPath && {absPath: frame.absPath}),
  24. ...(frame.module && {module: frame.module}),
  25. ...(frame.package && {package: frame.package}),
  26. lineNo: frame.lineNo,
  27. };
  28. return useApiQuery<StacktraceLinkResult>(
  29. stacktraceLinkQueryKey(orgSlug, projectSlug, query),
  30. {
  31. staleTime: Infinity,
  32. retry: false,
  33. refetchOnWindowFocus: false,
  34. ...options,
  35. }
  36. );
  37. }
  38. export default useStacktraceLink;