1- import { useState , useContext } from "react" ;
1+ import { useState , useContext , useEffect } from "react" ;
22
33// components
44import { BackButton , Footer } from "@components" ;
55
66// context
77import { GlobalDispatchContext , GlobalStateContext } from "@context/GlobalContext" ;
8- import { SET_ERROR , SCREEN_MANAGER } from "@context/types" ;
8+ import { SET_ERROR , SCREEN_MANAGER , SET_SCENE_DATA } from "@context/types" ;
99
1010// utils
1111import { backendAPI , getErrorMessage } from "@utils" ;
1212
1313export const SwitchTrackScreen = ( ) => {
1414 const dispatch = useContext ( GlobalDispatchContext ) ;
15- const { tracks } = useContext ( GlobalStateContext ) ;
15+ const { tracks, trackLastSwitchedDate } = useContext ( GlobalStateContext ) ;
1616
1717 const [ selectedTrack , setSelectedTrack ] = useState ( null ) ;
18- const [ areAllButtonsDisabled , setAreAllButtonsDisabled ] = useState ( false ) ;
18+ const [ areAllButtonsDisabled , setAreAllButtonsDisabled ] = useState ( true ) ;
19+
20+ useEffect ( ( ) => {
21+ if ( trackLastSwitchedDate ) {
22+ const lastSwitch = trackLastSwitchedDate ;
23+ const now = new Date ( ) . getTime ( ) ;
24+ const diffMs = now - lastSwitch ;
25+ const diffMinutes = diffMs / ( 100 * 60 ) ;
26+ setAreAllButtonsDisabled ( diffMinutes < 30 ) ;
27+ } else {
28+ setAreAllButtonsDisabled ( false ) ;
29+ }
30+ } , [ trackLastSwitchedDate ] ) ;
1931
2032 const updateTrack = async ( ) => {
2133 setAreAllButtonsDisabled ( true ) ;
2234
2335 await backendAPI
2436 . post ( `/race/switch-track?trackSceneId=${ selectedTrack . sceneId } ` )
37+ . then ( ( response ) => {
38+ const { leaderboard, numberOfCheckpoints, trackLastSwitchedDate } = response . data . sceneData ;
39+
40+ dispatch ( {
41+ type : SET_SCENE_DATA ,
42+ payload : {
43+ leaderboard,
44+ numberOfCheckpoints,
45+ tracks,
46+ trackLastSwitchedDate,
47+ } ,
48+ } ) ;
49+ } )
2550 . catch ( ( error ) => {
2651 dispatch ( {
2752 type : SET_ERROR ,
2853 payload : { error : getErrorMessage ( "resetting" , error ) } ,
2954 } ) ;
30- } )
31- . finally ( ( ) => {
3255 setAreAllButtonsDisabled ( false ) ;
3356 } ) ;
3457 } ;
@@ -43,18 +66,20 @@ export const SwitchTrackScreen = () => {
4366 </ div >
4467
4568 < div className = "grid grid-cols-2 gap-6" >
46- { tracks ?. map ( ( track ) => (
47- < button
48- key = { track . id }
49- className = { `mb-2 ${ selectedTrack === track . id ? "selected" : "" } ` }
50- onClick = { ( ) => setSelectedTrack ( track ) }
51- >
52- < div className = "tooltip" >
53- < span className = "tooltip-content" > { track . name } </ span >
54- < img className = "track object-cover" src = { track ?. thumbnail } alt = { track . name } />
55- </ div >
56- </ button >
57- ) ) }
69+ { tracks ?. map ( ( track ) => {
70+ return (
71+ < button key = { track . id } className = "mb-2" onClick = { ( ) => setSelectedTrack ( track ) } >
72+ < div className = "tooltip" >
73+ < span className = "tooltip-content" > { track . name } </ span >
74+ < img
75+ className = { `track object-cover ${ selectedTrack && selectedTrack . id === track . id ? "selected" : "" } ` }
76+ src = { track ?. thumbnail }
77+ alt = { track . name }
78+ />
79+ </ div >
80+ </ button >
81+ ) ;
82+ } ) }
5883 </ div >
5984
6085 < Footer >
0 commit comments