useIssueDetailsHeader.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import {useMemo} from 'react';
  2. import type {Group, Project} from 'sentry/types';
  3. import {getMessage} from 'sentry/utils/events';
  4. import {useLocation} from 'sentry/utils/useLocation';
  5. import useOrganization from 'sentry/utils/useOrganization';
  6. import {Tab} from 'sentry/views/issueDetails/types';
  7. import {ReprocessingStatus} from 'sentry/views/issueDetails/utils';
  8. import {ShortIdBreadcrumb} from './shortIdBreadcrumb';
  9. interface IssueDetailsHeaderProps {
  10. baseUrl: string;
  11. group: Group;
  12. groupReprocessingStatus: ReprocessingStatus;
  13. project: Project;
  14. }
  15. export function useIssueDetailsHeader({
  16. group,
  17. groupReprocessingStatus,
  18. baseUrl,
  19. project,
  20. }: IssueDetailsHeaderProps) {
  21. const location = useLocation();
  22. const organization = useOrganization();
  23. const {sort: _sort, ...query} = location.query;
  24. const disabledTabs = useMemo(() => {
  25. if (groupReprocessingStatus === ReprocessingStatus.REPROCESSING) {
  26. return [
  27. Tab.ACTIVITY,
  28. Tab.USER_FEEDBACK,
  29. Tab.ATTACHMENTS,
  30. Tab.EVENTS,
  31. Tab.MERGED,
  32. Tab.SIMILAR_ISSUES,
  33. Tab.TAGS,
  34. ];
  35. }
  36. if (groupReprocessingStatus === ReprocessingStatus.REPROCESSED_AND_HASNT_EVENT) {
  37. return [
  38. Tab.DETAILS,
  39. Tab.ATTACHMENTS,
  40. Tab.EVENTS,
  41. Tab.MERGED,
  42. Tab.SIMILAR_ISSUES,
  43. Tab.TAGS,
  44. Tab.USER_FEEDBACK,
  45. ];
  46. }
  47. return [];
  48. }, [groupReprocessingStatus]);
  49. const disableActions = !!disabledTabs.length;
  50. const message = getMessage(group);
  51. const eventRoute = useMemo(() => {
  52. return {
  53. pathname: `${baseUrl}events/`,
  54. query,
  55. };
  56. }, [query, baseUrl]);
  57. const shortIdBreadcrumb = (
  58. <ShortIdBreadcrumb organization={organization} project={project} group={group} />
  59. );
  60. let className = 'group-detail';
  61. if (group.hasSeen) {
  62. className += ' hasSeen';
  63. }
  64. if (group.status === 'resolved') {
  65. className += ' isResolved';
  66. }
  67. return {
  68. disabledTabs,
  69. message,
  70. eventRoute,
  71. disableActions,
  72. shortIdBreadcrumb,
  73. className,
  74. };
  75. }