issueDetailsTour.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import {createContext, useContext} from 'react';
  2. import type {TourContextType} from 'sentry/components/tours/tourContext';
  3. export const enum IssueDetailsTour {
  4. /** Trends and aggregates, the graph, and tag distributions */
  5. AGGREGATES = 'issue-details-aggregates',
  6. /** Date/time/environment filters */
  7. FILTERS = 'issue-details-filters',
  8. /** Event details, event navigation, main page content */
  9. EVENT_DETAILS = 'issue-details-event-details',
  10. /** Event navigation; next/previous, first/last/recommended events */
  11. NAVIGATION = 'issue-details-navigation',
  12. /** Workflow actions; resolution, archival, assignment, priority, etc. */
  13. WORKFLOWS = 'issue-details-workflows',
  14. /** Activity log, issue tracking, solutions hub area */
  15. SIDEBAR = 'issue-details-sidebar',
  16. }
  17. export const ORDERED_ISSUE_DETAILS_TOUR = [
  18. IssueDetailsTour.AGGREGATES,
  19. IssueDetailsTour.FILTERS,
  20. IssueDetailsTour.EVENT_DETAILS,
  21. IssueDetailsTour.NAVIGATION,
  22. IssueDetailsTour.WORKFLOWS,
  23. IssueDetailsTour.SIDEBAR,
  24. ];
  25. export const ISSUE_DETAILS_TOUR_GUIDE_KEY = 'tour.issue_details';
  26. export const IssueDetailsTourContext =
  27. createContext<TourContextType<IssueDetailsTour> | null>(null);
  28. export function useIssueDetailsTour(): TourContextType<IssueDetailsTour> {
  29. const tourContext = useContext(IssueDetailsTourContext);
  30. if (!tourContext) {
  31. throw new Error('Must be used within a TourContextProvider<IssueDetailsTour>');
  32. }
  33. return tourContext;
  34. }