@@ -13,6 +13,7 @@ import {useAssistant, useMutateAssistant} from 'sentry/components/tours/useAssis
13
13
import { t } from 'sentry/locale' ;
14
14
import { trackAnalytics } from 'sentry/utils/analytics' ;
15
15
import normalizeUrl from 'sentry/utils/url/normalizeUrl' ;
16
+ import { useLocalStorageState } from 'sentry/utils/useLocalStorageState' ;
16
17
import { useLocation } from 'sentry/utils/useLocation' ;
17
18
import { useNavigate } from 'sentry/utils/useNavigate' ;
18
19
import useOrganization from 'sentry/utils/useOrganization' ;
@@ -256,6 +257,10 @@ export function useTourModal() {
256
257
} ) ;
257
258
const { mutate : mutateAssistant } = useMutateAssistant ( ) ;
258
259
const user = useUser ( ) ;
260
+ const [ localTourState , setLocalTourState ] = useLocalStorageState (
261
+ STACKED_NAVIGATION_TOUR_GUIDE_KEY ,
262
+ { hasSeen : false }
263
+ ) ;
259
264
260
265
const enforceStackedNav = organization . features . includes ( 'enforce-stacked-navigation' ) ;
261
266
// We don't want to show the tour modal for new users that were forced into the new stacked navigation.
@@ -264,7 +269,19 @@ export function useTourModal() {
264
269
265
270
const shouldShowTourModal =
266
271
assistantData ?. find ( item => item . guide === STACKED_NAVIGATION_TOUR_GUIDE_KEY )
267
- ?. seen === false && ! shouldSkipForNewUserEnforcedStackedNav ;
272
+ ?. seen === false &&
273
+ ! shouldSkipForNewUserEnforcedStackedNav &&
274
+ ! localTourState . hasSeen ;
275
+
276
+ const dismissTour = useCallback ( ( ) => {
277
+ trackAnalytics ( 'navigation.tour_modal_dismissed' , { organization} ) ;
278
+ mutateAssistant ( {
279
+ guide : STACKED_NAVIGATION_TOUR_GUIDE_KEY ,
280
+ status : 'dismissed' ,
281
+ } ) ;
282
+ setLocalTourState ( { hasSeen : true } ) ;
283
+ endTour ( ) ;
284
+ } , [ mutateAssistant , organization , endTour , setLocalTourState ] ) ;
268
285
269
286
useEffect ( ( ) => {
270
287
if ( shouldShowTourModal && ! hasOpenedTourModal . current ) {
@@ -275,12 +292,7 @@ export function useTourModal() {
275
292
< NavTourModal
276
293
closeModal = { props . closeModal }
277
294
handleDismissTour = { ( ) => {
278
- trackAnalytics ( 'navigation.tour_modal_dismissed' , { organization} ) ;
279
- mutateAssistant ( {
280
- guide : STACKED_NAVIGATION_TOUR_GUIDE_KEY ,
281
- status : 'dismissed' ,
282
- } ) ;
283
- endTour ( ) ;
295
+ dismissTour ( ) ;
284
296
props . closeModal ( ) ;
285
297
} }
286
298
handleStartTour = { startTour }
@@ -292,18 +304,20 @@ export function useTourModal() {
292
304
// If user closes modal through other means, also prevent the modal from being shown again.
293
305
onClose : reason => {
294
306
if ( reason ) {
295
- trackAnalytics ( 'navigation.tour_modal_dismissed' , { organization} ) ;
296
- mutateAssistant ( {
297
- guide : STACKED_NAVIGATION_TOUR_GUIDE_KEY ,
298
- status : 'dismissed' ,
299
- } ) ;
300
- endTour ( ) ;
307
+ dismissTour ( ) ;
301
308
}
302
309
} ,
303
310
}
304
311
) ;
305
312
}
306
- } , [ shouldShowTourModal , startTour , mutateAssistant , endTour , organization ] ) ;
313
+ } , [
314
+ shouldShowTourModal ,
315
+ startTour ,
316
+ mutateAssistant ,
317
+ endTour ,
318
+ organization ,
319
+ dismissTour ,
320
+ ] ) ;
307
321
}
308
322
309
323
const NAV_REFERRER = 'nav-tour' ;
0 commit comments