useStacktraceLink.tsx 1.4 KB

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