diff --git a/static/app/components/onboardingWizard/content.spec.tsx b/static/app/components/onboardingWizard/content.spec.tsx index 222a5b33a2aae6..1ec0cf2db28617 100644 --- a/static/app/components/onboardingWizard/content.spec.tsx +++ b/static/app/components/onboardingWizard/content.spec.tsx @@ -10,7 +10,6 @@ import { import {OnboardingSidebarContent} from 'sentry/components/onboardingWizard/content'; import {OnboardingTaskKey} from 'sentry/types/onboarding'; -import {NavigationTourProvider} from 'sentry/views/navigation/navigationTour'; import {PrimaryNavigationContextProvider} from 'sentry/views/navigation/primaryNavigationContext'; const DEFAULT_GETTING_STARTED_TASKS = [ @@ -57,9 +56,7 @@ describe('OnboardingSidebarContent', () => { it('should render the sidebar with the correct groups and tasks', async () => { render( - - - + , {organization} ); @@ -112,9 +109,7 @@ describe('OnboardingSidebarContent', () => { render( - - - + , {organization} ); @@ -126,9 +121,7 @@ describe('OnboardingSidebarContent', () => { it('if first group completed, second group should be expanded by default', async () => { render( - - - + , { organization: OrganizationFixture({ @@ -154,9 +147,7 @@ describe('OnboardingSidebarContent', () => { render( - - - + , {organization} ); diff --git a/static/app/components/onboardingWizard/content.tsx b/static/app/components/onboardingWizard/content.tsx index 5020ec3d35c9d3..f29e0db1269bca 100644 --- a/static/app/components/onboardingWizard/content.tsx +++ b/static/app/components/onboardingWizard/content.tsx @@ -27,7 +27,6 @@ import {useLocalStorageState} from 'sentry/utils/useLocalStorageState'; import {useLocation} from 'sentry/utils/useLocation'; import {useNavigate} from 'sentry/utils/useNavigate'; import {useOrganization} from 'sentry/utils/useOrganization'; -import {useNavigationTour} from 'sentry/views/navigation/navigationTour'; /** * How long (in ms) to delay before beginning to mark tasks complete @@ -183,7 +182,6 @@ function Task({task, hidePanel}: TaskProps) { const [showSkipConfirmation, setShowSkipConfirmation] = useState(false); const tours = useDemoTours(); - const sidebarTour = useNavigationTour(); const handleClick = useCallback( (e: React.MouseEvent) => { @@ -199,9 +197,6 @@ function Task({task, hidePanel}: TaskProps) { if (isDemoModeActive()) { if (task.task === OnboardingTaskKey.PERFORMANCE_GUIDE) { tours?.[DemoTour.PERFORMANCE]?.startTour(); - } else if (task.task === OnboardingTaskKey.SIDEBAR_GUIDE) { - // Demo mode uses existing sidebar tour - sidebarTour.startTour(); } else if (task.task === OnboardingTaskKey.RELEASE_GUIDE) { tours?.[DemoTour.RELEASES]?.startTour(); } else if (task.task === OnboardingTaskKey.ISSUE_GUIDE) { @@ -230,7 +225,7 @@ function Task({task, hidePanel}: TaskProps) { } hidePanel(); }, - [task, organization, navigate, location, hidePanel, tours, sidebarTour] + [task, organization, navigate, location, hidePanel, tours] ); const handleMarkSkipped = () => { diff --git a/static/app/utils/analytics/navigationAnalyticsEvents.tsx b/static/app/utils/analytics/navigationAnalyticsEvents.tsx index e419ff425dab4f..4b38904be720c0 100644 --- a/static/app/utils/analytics/navigationAnalyticsEvents.tsx +++ b/static/app/utils/analytics/navigationAnalyticsEvents.tsx @@ -7,8 +7,6 @@ type NavigationEventParameters = { 'navigation.help_menu_opt_out_stacked_navigation_clicked': Record; 'navigation.primary_item_clicked': NavigationItemClicked; 'navigation.secondary_item_clicked': NavigationItemClicked; - 'navigation.tour_modal_dismissed': Record; - 'navigation.tour_modal_shown': Record; }; type NavigationEventKey = keyof NavigationEventParameters; @@ -20,6 +18,4 @@ export const navigationAnalyticsEventMap: Record item.guide === EXPLORE_SPANS_TOUR_GUIDE_KEY)?.seen === false; - const isNavTourActive = useIsNavigationTourActive(); - useEffect(() => { - if ( - isRegistered && - shouldShowTourModal && - !hasOpenedTourModal.current && - !isNavTourActive - ) { + if (isRegistered && shouldShowTourModal && !hasOpenedTourModal.current) { hasOpenedTourModal.current = true; openModal( props => ( @@ -104,15 +96,7 @@ export function useExploreSpansTourModal() { } ); } - }, [ - isRegistered, - shouldShowTourModal, - startTour, - mutateAssistant, - endTour, - isNavTourActive, - openModal, - ]); + }, [isRegistered, shouldShowTourModal, startTour, mutateAssistant, endTour, openModal]); } const Title = styled('div')` diff --git a/static/app/views/navigation/index.tsx b/static/app/views/navigation/index.tsx index 578b1336f52fe0..16804d037a7042 100644 --- a/static/app/views/navigation/index.tsx +++ b/static/app/views/navigation/index.tsx @@ -14,10 +14,6 @@ import {HoverOverlayGroupProvider} from 'sentry/utils/useHoverOverlay'; import {useOrganization} from 'sentry/utils/useOrganization'; import {MobileNavigation} from 'sentry/views/navigation/mobileNavigation'; import {Navigation as DesktopNavigation} from 'sentry/views/navigation/navigation'; -import { - NavigationTourProvider, - useNavigationTour, -} from 'sentry/views/navigation/navigationTour'; import {PrimaryNavigation} from 'sentry/views/navigation/primary/components'; import {UserDropdown} from 'sentry/views/navigation/primary/userDropdown'; import {usePrimaryNavigation} from 'sentry/views/navigation/primaryNavigationContext'; @@ -94,7 +90,6 @@ function UserOnlyNavigation() { function NavigationLayout({children}: {children: React.ReactNode}) { const theme = useTheme(); const {layout} = usePrimaryNavigation(); - const {currentStepId} = useNavigationTour(); const hoverProps = useResetActiveNavigationGroup(); const {barTop} = useTopOffset(); @@ -102,11 +97,11 @@ function NavigationLayout({children}: {children: React.ReactNode}) { - - - - + + ); } diff --git a/static/app/views/navigation/navigation.tsx b/static/app/views/navigation/navigation.tsx index 153a44d074df78..4cb936f5859e48 100644 --- a/static/app/views/navigation/navigation.tsx +++ b/static/app/views/navigation/navigation.tsx @@ -1,5 +1,4 @@ import {Fragment, type RefObject, useMemo, useRef} from 'react'; -import {mergeProps} from '@react-aria/utils'; import {motion, type MotionProps} from 'framer-motion'; import {Stack} from '@sentry/scraps/layout'; @@ -26,14 +25,6 @@ import { PRIMARY_SIDEBAR_WIDTH, SECONDARY_SIDEBAR_WIDTH, } from 'sentry/views/navigation/constants'; -import { - NavigationTour, - NavigationTourElement, -} from 'sentry/views/navigation/navigationTour'; -import { - useNavigationTour, - useNavigationTourModal, -} from 'sentry/views/navigation/navigationTour'; import {PrimaryNavigation} from 'sentry/views/navigation/primary/components'; import {PrimaryNavigationHelpMenu} from 'sentry/views/navigation/primary/helpMenu'; import {PrimaryNavigationOnboarding} from 'sentry/views/navigation/primary/onboarding'; @@ -56,10 +47,7 @@ export function Navigation() { const {layout} = usePrimaryNavigation(); - useNavigationTourModal(); - - const {currentStepId} = useNavigationTour(); - const isCollapsed = currentStepId === null ? view !== 'expanded' : false; + const isCollapsed = view !== 'expanded'; const [secondarySidebarWidth] = useSyncedLocalStorageState( NAVIGATION_SIDEBAR_SECONDARY_WIDTH_LOCAL_STORAGE_KEY, @@ -141,105 +129,69 @@ export function PrimaryNavigationItems({listRef}: PrimaryNavigationItemsProps) { return ( - - {tourProps => ( - - - - - - )} - + + + + + - - {tourProps => ( - - - - - - )} - + + + + + - - {tourProps => ( - - - - - - )} - + + + + + {!organization.features.includes('insights-to-dashboards-ui-rollout') && ( - - {tourProps => ( - - - - - - )} - + + + + + )} @@ -256,27 +208,20 @@ export function PrimaryNavigationItems({listRef}: PrimaryNavigationItemsProps) { - - {tourProps => ( - - - - - - )} - + + + + + ); } diff --git a/static/app/views/navigation/navigationTour.tsx b/static/app/views/navigation/navigationTour.tsx deleted file mode 100644 index 5736cc71bcdc28..00000000000000 --- a/static/app/views/navigation/navigationTour.tsx +++ /dev/null @@ -1,384 +0,0 @@ -import { - createContext, - useCallback, - useContext, - useEffect, - useMemo, - useRef, - useState, -} from 'react'; - -import NavigationTourSvg from 'sentry-images/spot/stacked-nav-tour.svg'; - -import {useModal} from '@sentry/scraps/modal'; - -import { - TourAction, - TourContextProvider, - TourElement, - TourGuide, - type TourElementProps, -} from 'sentry/components/tours/components'; -import {StartTourModal, startTourModalCss} from 'sentry/components/tours/startTour'; -import type {TourContextType} from 'sentry/components/tours/tourContext'; -import {useAssistant, useMutateAssistant} from 'sentry/components/tours/useAssistant'; -import {t} from 'sentry/locale'; -import {trackAnalytics} from 'sentry/utils/analytics'; -import {normalizeUrl} from 'sentry/utils/url/normalizeUrl'; -import {useLocalStorageState} from 'sentry/utils/useLocalStorageState'; -import {useLocation} from 'sentry/utils/useLocation'; -import {useNavigate} from 'sentry/utils/useNavigate'; -import {useOrganization} from 'sentry/utils/useOrganization'; -import {useUser} from 'sentry/utils/useUser'; -import {getDefaultExploreRoute} from 'sentry/views/explore/utils'; -import {usePrimaryNavigation} from 'sentry/views/navigation/primaryNavigationContext'; - -export const enum NavigationTour { - ISSUES = 'issues', - EXPLORE = 'explore', - DASHBOARDS = 'dashboards', - INSIGHTS = 'insights', - SETTINGS = 'settings', -} - -// Started rolling out to GA users on June 18, 2025 -const TOUR_MODAL_DATE_THRESHOLD = new Date(2025, 5, 18); -const NAVIGATION_TOUR_REFERRER = 'nav-tour'; - -const ORDERED_NAVIGATION_TOUR = [ - NavigationTour.ISSUES, - NavigationTour.EXPLORE, - NavigationTour.DASHBOARDS, - NavigationTour.INSIGHTS, - NavigationTour.SETTINGS, -]; - -export const NAVIGATION_TOUR_CONTENT = { - [NavigationTour.ISSUES]: { - description: t( - 'Issues are problems detected by Sentry. Code breaks — we tell you where, when, and why.' - ), - title: t('See what broke'), - }, - [NavigationTour.EXPLORE]: { - description: t( - 'Create queries, investigate data exemplars, and save charts for dashboards. Explore is where you turn raw data into answers.' - ), - title: t('Dig into data'), - }, - [NavigationTour.DASHBOARDS]: { - description: t( - 'Dashboards enable you to display key insights all on one page. Create new or find existing custom dashboards here.' - ), - title: t('Track what matters'), - }, - [NavigationTour.INSIGHTS]: { - description: t( - 'Project and domain insights live here, giving you prebuilt looks into your app’s health. ' - ), - title: t('Know what’s happening'), - }, - [NavigationTour.SETTINGS]: { - description: t( - 'Stats & Usage is now under Organization Settings. We’ve consolidated this page so you can see all your configurations in one place.' - ), - title: t('Find more in Settings'), - }, -}; - -// Note: this key is used as an analytics/assistant guide identifier and must -// remain stable — do not rename it even if the surrounding code is refactored. -const NAVIGATION_TOUR_GUIDE_KEY = 'tour.stacked_navigation'; - -const NavigationTourContext = createContext | null>(null); - -export function useNavigationTour(): TourContextType { - const tourContext = useContext(NavigationTourContext); - if (!tourContext) { - throw new Error('Must be used within a TourContextProvider'); - } - return tourContext; -} - -export interface NavigationTourElementProps extends Omit< - TourElementProps, - 'tourContext' -> {} - -export function NavigationTourElement({children, ...props}: NavigationTourElementProps) { - return ( - - tourContext={NavigationTourContext} - position="right-start" - {...props} - > - {children} - - ); -} - -function useNavigationTourCompleted() { - const {data: assistantData} = useAssistant(); - - return useMemo(() => { - const navigationTourData = assistantData?.find( - item => item.guide === NAVIGATION_TOUR_GUIDE_KEY - ); - - return navigationTourData?.seen ?? true; - }, [assistantData]); -} - -export function NavigationTourProvider({children}: {children: React.ReactNode}) { - const {setShowTourReminder} = useNavigationTourReminderContext(); - const organization = useOrganization(); - const isNavigationTourCompleted = useNavigationTourCompleted(); - const initialUrlRef = useRef(null); - const navigate = useNavigate(); - const location = useLocation(); - const {activeGroup} = usePrimaryNavigation(); - - const onStartTour = useCallback(() => { - // Save the initial URL when the tour starts because we need to restore it when the tour ends. - initialUrlRef.current = location.pathname + location.search + location.hash; - - // Scroll to top and lock scrolling when the tour starts. - document.documentElement.style.overflow = 'hidden'; - window.scrollTo(0, 0); - }, [location.hash, location.pathname, location.search]); - - const onEndTour = useCallback(() => { - setShowTourReminder(true); - - // Restore the initial URL when the tour ends. - if (initialUrlRef.current) { - navigate(initialUrlRef.current, {replace: true}); - } - initialUrlRef.current = null; - - // Unlock scrolling when the tour ends. - document.documentElement.style.overflow = ''; - }, [navigate, setShowTourReminder]); - - const onStepChange = useCallback( - (stepId: NavigationTour) => { - const prefix = `organizations/${organization.slug}`; - switch (stepId) { - case NavigationTour.ISSUES: - if (activeGroup !== 'issues') { - const target = normalizeUrl({ - pathname: `/${prefix}/issues/`, - query: {referrer: NAVIGATION_TOUR_REFERRER}, - }); - navigate(target, {replace: true}); - } - break; - case NavigationTour.EXPLORE: - if (activeGroup !== 'explore') { - const target = normalizeUrl({ - pathname: `/${prefix}/explore/${getDefaultExploreRoute(organization)}/`, - query: {referrer: NAVIGATION_TOUR_REFERRER}, - }); - navigate(target, {replace: true}); - } - break; - case NavigationTour.DASHBOARDS: - if (activeGroup !== 'dashboards') { - const target = normalizeUrl({ - pathname: `/${prefix}/dashboards/`, - query: {referrer: NAVIGATION_TOUR_REFERRER}, - }); - navigate(target, {replace: true}); - } - break; - case NavigationTour.INSIGHTS: - if (activeGroup !== 'insights') { - const target = normalizeUrl({ - pathname: `/${prefix}/insights/frontend/`, - query: {referrer: NAVIGATION_TOUR_REFERRER}, - }); - navigate(target, {replace: true}); - } - break; - case NavigationTour.SETTINGS: - if (activeGroup !== 'settings') { - const target = normalizeUrl({ - pathname: `/settings/${organization.slug}/`, - query: {referrer: NAVIGATION_TOUR_REFERRER}, - }); - navigate(target, {replace: true}); - } - break; - } - }, - [activeGroup, navigate, organization] - ); - - return ( - - tourKey={NAVIGATION_TOUR_GUIDE_KEY} - isCompleted={isNavigationTourCompleted} - orderedStepIds={ORDERED_NAVIGATION_TOUR} - TourContext={NavigationTourContext} - onStartTour={onStartTour} - onEndTour={onEndTour} - onStepChange={onStepChange} - // Because we use a single tour element on the sidebar for multiple steps, - // we can't have all steps present in the DOM at once. - requireAllStepsRegistered={false} - > - {children} - - ); -} - -interface NavigationTourReminderContext { - setShowTourReminder: (value: boolean) => void; - showTourReminder: boolean; -} - -const NavigationTourReminderContext = createContext({ - showTourReminder: false, - setShowTourReminder: () => {}, -}); - -function useNavigationTourReminderContext(): NavigationTourReminderContext { - const context = useContext(NavigationTourReminderContext); - if (!context) { - throw new Error('Must be used within a NavigationTourReminderContextProvider'); - } - return context; -} - -interface NavigationTourReminderContextProviderProps { - children: React.ReactNode; -} - -export function NavigationTourReminderContextProvider( - props: NavigationTourReminderContextProviderProps -) { - const [showTourReminder, setShowTourReminder] = useState(false); - - const contextValue = useMemo( - () => ({showTourReminder, setShowTourReminder}), - [showTourReminder, setShowTourReminder] - ); - - return ( - - {props.children} - - ); -} - -interface NavigationTourReminderProps { - children: React.ReactNode; -} - -export function NavigationTourReminder(props: NavigationTourReminderProps) { - const {showTourReminder, setShowTourReminder} = useNavigationTourReminderContext(); - - if (!showTourReminder) { - return props.children; - } - - return ( - setShowTourReminder(false)}> - {t('Got it')} - - } - isOpen={showTourReminder} - > - {tourProps =>
{props.children}
} -
- ); -} - -// Displays the introductory tour modal when a user is entering the experience for the first time. -export function useNavigationTourModal() { - const {openModal} = useModal(); - - const user = useUser(); - const organization = useOrganization(); - const hasOpenedTourModal = useRef(false); - const {startTour, endTour} = useNavigationTour(); - const {data: assistantData} = useAssistant({ - notifyOnChangeProps: ['data'], - }); - const {mutate: mutateAssistant} = useMutateAssistant(); - const [localTourState, setLocalTourState] = useLocalStorageState( - NAVIGATION_TOUR_GUIDE_KEY, - {hasSeen: false} - ); - - // We don't want to show the tour modal for new users that were forced into the new navigation. - const shouldSkipTourForNewUsers = - new Date(user?.dateJoined) > TOUR_MODAL_DATE_THRESHOLD; - - const shouldShowTourModal = - assistantData?.find(item => item.guide === NAVIGATION_TOUR_GUIDE_KEY)?.seen === - false && - !shouldSkipTourForNewUsers && - !localTourState.hasSeen && - !process.env.IS_ACCEPTANCE_TEST; - - const dismissTour = useCallback(() => { - trackAnalytics('navigation.tour_modal_dismissed', {organization}); - mutateAssistant({ - guide: NAVIGATION_TOUR_GUIDE_KEY, - status: 'dismissed', - }); - setLocalTourState({hasSeen: true}); - endTour(); - }, [mutateAssistant, organization, endTour, setLocalTourState]); - - useEffect(() => { - if (shouldShowTourModal && !hasOpenedTourModal.current) { - hasOpenedTourModal.current = true; - trackAnalytics('navigation.tour_modal_shown', {organization}); - openModal( - props => ( - - ), - { - modalCss: startTourModalCss, - - // If user closes modal through other means, also prevent the modal from being shown again. - onClose: reason => { - if (reason) { - dismissTour(); - } - }, - } - ); - } - }, [ - shouldShowTourModal, - startTour, - mutateAssistant, - endTour, - organization, - dismissTour, - openModal, - ]); -} - -export function useIsNavigationTourActive() { - const location = useLocation(); - return location.query.referrer === NAVIGATION_TOUR_REFERRER; -} diff --git a/static/app/views/navigation/primary/helpMenu.spec.tsx b/static/app/views/navigation/primary/helpMenu.spec.tsx index 579dc5754bf336..2825044f5d30d6 100644 --- a/static/app/views/navigation/primary/helpMenu.spec.tsx +++ b/static/app/views/navigation/primary/helpMenu.spec.tsx @@ -6,15 +6,6 @@ import {ConfigStore} from 'sentry/stores/configStore'; import * as intercom from 'sentry/utils/intercom'; import {PrimaryNavigationHelpMenu} from 'sentry/views/navigation/primary/helpMenu'; -jest.mock('sentry/views/navigation/navigationTour', () => ({ - useNavigationTour: jest.fn(() => ({ - startTour: jest.fn(), - })), - NavigationTourReminder: ({children}: {children: React.ReactNode}) => ( -
{children}
- ), -})); - jest.mock('sentry/utils/intercom', () => ({ showIntercom: jest.fn(), })); diff --git a/static/app/views/navigation/primary/helpMenu.tsx b/static/app/views/navigation/primary/helpMenu.tsx index c9815069b1de7b..9536b66fc42d0a 100644 --- a/static/app/views/navigation/primary/helpMenu.tsx +++ b/static/app/views/navigation/primary/helpMenu.tsx @@ -9,7 +9,6 @@ import { IconDocs, IconEllipsis, IconGithub, - IconGlobe, IconGroup, IconMegaphone, IconOpen, @@ -26,10 +25,6 @@ import {trackAnalytics} from 'sentry/utils/analytics'; import {showIntercom} from 'sentry/utils/intercom'; import {useFeedbackForm} from 'sentry/utils/useFeedbackForm'; import {useOrganization} from 'sentry/utils/useOrganization'; -import { - NavigationTourReminder, - useNavigationTour, -} from 'sentry/views/navigation/navigationTour'; import {PrimaryNavigation} from 'sentry/views/navigation/primary/components'; export function PrimaryNavigationHelpMenu() { @@ -37,8 +32,6 @@ export function PrimaryNavigationHelpMenu() { const contactSupportItem = getContactSupportItem(organization); const openForm = useFeedbackForm(); const {privacyUrl, termsUrl} = useLegacyStore(ConfigStore); - const {startTour} = useNavigationTour(); - useEffect(() => { trackAnalytics('intercom_link.viewed', {organization, source: 'sidebar'}); }, [organization]); @@ -195,25 +188,12 @@ export function PrimaryNavigationHelpMenu() { }, hidden: !openForm, }, - { - key: 'tour', - label: t('Tour the new navigation'), - leadingItems: ( - - - - ), - onAction() { - startTour(); - }, - }, ], }, ]; return ( { render( - - - + , { organization, diff --git a/static/app/views/navigation/primaryNavigationContext.tsx b/static/app/views/navigation/primaryNavigationContext.tsx index 5b5b2baf688f61..a687cfad5ee7ba 100644 --- a/static/app/views/navigation/primaryNavigationContext.tsx +++ b/static/app/views/navigation/primaryNavigationContext.tsx @@ -5,7 +5,6 @@ import * as Sentry from '@sentry/react'; import {USING_CUSTOMER_DOMAIN} from 'sentry/constants'; import {useLocation} from 'sentry/utils/useLocation'; import {useMedia} from 'sentry/utils/useMedia'; -import {NavigationTourReminderContextProvider} from 'sentry/views/navigation/navigationTour'; import {SecondaryNavigationContextProvider} from 'sentry/views/navigation/secondaryNavigationContext'; const PRIMARY_NAVIGATION_GROUP_CONFIG = { @@ -70,13 +69,11 @@ export function PrimaryNavigationContextProvider( ); return ( - - - - {props.children} - - - + + + {props.children} + + ); } diff --git a/static/app/views/navigation/secondary/components.tsx b/static/app/views/navigation/secondary/components.tsx index 93296aa2b7bad9..d033e33705e220 100644 --- a/static/app/views/navigation/secondary/components.tsx +++ b/static/app/views/navigation/secondary/components.tsx @@ -26,9 +26,8 @@ import { verticalListSortingStrategy, } from '@dnd-kit/sortable'; import {CSS} from '@dnd-kit/utilities'; -import {css, useTheme} from '@emotion/react'; +import {css} from '@emotion/react'; import styled from '@emotion/styled'; -import {mergeProps, mergeRefs} from '@react-aria/utils'; import {AnimatePresence, motion} from 'framer-motion'; import PlatformIcon from 'platformicons/build/platformIcon'; @@ -64,13 +63,6 @@ import { SECONDARY_SIDEBAR_WIDTH, SIDEBAR_NAVIGATION_SOURCE, } from 'sentry/views/navigation/constants'; -import { - NAVIGATION_TOUR_CONTENT, - NavigationTour, - NavigationTourElement, - useNavigationTour, - type NavigationTourElementProps, -} from 'sentry/views/navigation/navigationTour'; import {isPrimaryNavigationLinkActive} from 'sentry/views/navigation/primary/components'; import {usePrimaryNavigation} from 'sentry/views/navigation/primaryNavigationContext'; import {useSecondaryNavigation} from 'sentry/views/navigation/secondaryNavigationContext'; @@ -82,8 +74,6 @@ interface SecondarySidebarProps { } function SecondarySidebar({children}: SecondarySidebarProps) { - const {currentStepId} = useNavigationTour(); - const stepId = currentStepId ?? NavigationTour.ISSUES; const resizableContainerRef = useRef(null); const resizeHandleRef = useRef(null); const {layout} = usePrimaryNavigation(); @@ -106,79 +96,6 @@ function SecondarySidebar({children}: SecondarySidebarProps) { const {activeGroup} = usePrimaryNavigation(); const isMobilePageFrame = layout === 'mobile'; - return ( - - {({ref, 'aria-expanded': _ariaExpanded, ...props}) => ( - // aria-expanded is omitted here because TourGuide passes it via useOverlay's - // triggerProps (designed for button/disclosure triggers), but this element is - // a plain container div with no role that supports aria-expanded. Spreading it - // would cause a Lighthouse a11y violation: aria-expanded is invalid on a div - // without a matching ARIA role. - - - - - {children} - - - {p => ( - { - setSecondarySidebarWidth(SECONDARY_SIDEBAR_WIDTH); - }} - atMinWidth={size === SECONDARY_SIDEBAR_MIN_WIDTH} - atMaxWidth={size === SECONDARY_SIDEBAR_MAX_WIDTH} - /> - )} - - - - - )} - - ); -} - -function SecondarySidebarWrapper(props: NavigationTourElementProps) { - const theme = useTheme(); - return ( - {p => ( - - )} + + + + + {children} + + + {p => ( + { + setSecondarySidebarWidth(SECONDARY_SIDEBAR_WIDTH); + }} + atMinWidth={size === SECONDARY_SIDEBAR_MIN_WIDTH} + atMaxWidth={size === SECONDARY_SIDEBAR_MAX_WIDTH} + /> + )} + + + + ); } diff --git a/static/images/spot/stacked-nav-tour.svg b/static/images/spot/stacked-nav-tour.svg deleted file mode 100644 index 685e9fc45c4cbb..00000000000000 --- a/static/images/spot/stacked-nav-tour.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file