@@ -99,7 +99,8 @@ export const RaceProvider = ({ children }) => {
9999 testDuration : 15 ,
100100 // Add other potential settings here
101101 } ,
102- countdown : null // Track countdown seconds
102+ countdown : null , // Track countdown seconds
103+ sessionWins : { } // Win tally per player across play-again sessions { netid: count }
103104 } ) ;
104105
105106 // Explicit state for TestConfigurator to avoid passing setRaceState
@@ -196,6 +197,14 @@ export const RaceProvider = ({ children }) => {
196197 redirectToHome : false
197198 } ) ;
198199
200+ const clearInactivityWarning = useCallback ( ( ) => {
201+ setInactivityState ( prev => (
202+ prev . warning
203+ ? { ...prev , warning : false , warningMessage : '' }
204+ : prev
205+ ) ) ;
206+ } , [ ] ) ;
207+
199208 // Update session storage when inactivity state changes
200209 useEffect ( ( ) => {
201210 saveInactivityState ( inactivityState ) ;
@@ -286,11 +295,20 @@ export const RaceProvider = ({ children }) => {
286295 hostNetId : data . hostNetId || null , // Explicitly store hostNetId
287296 snippet : data . snippet ? { ...data . snippet , text : sanitizeSnippetText ( data . snippet . text ) } : null ,
288297 settings : data . settings || prev . settings , // Store settings from server
289- players : data . players || [ ]
298+ players : data . players || [ ] ,
299+ sessionWins : data . sessionWins || { }
290300 } ) ) ;
291301 } ;
292302
293303 const handlePlayersUpdate = ( data ) => {
304+ const currentUserReady = Boolean (
305+ user ?. netid && data . players ?. some ( player => player . netid === user . netid && player . ready )
306+ ) ;
307+
308+ if ( currentUserReady ) {
309+ clearInactivityWarning ( ) ;
310+ }
311+
294312 setRaceState ( prev => {
295313 // For quick-match public races, if the race is already in progress, we want to keep
296314 // any players previously marked as disconnected even if they are no longer in the
@@ -358,6 +376,8 @@ export const RaceProvider = ({ children }) => {
358376 } ) ;
359377
360378 if ( shouldResetTyping ) {
379+ clearInactivityWarning ( ) ;
380+
361381 // Reset typing state
362382 setTypingState ( {
363383 input : '' ,
@@ -419,7 +439,8 @@ export const RaceProvider = ({ children }) => {
419439 return {
420440 ...prev ,
421441 inProgress : false ,
422- completed : true
442+ completed : true ,
443+ sessionWins : data . sessionWins || { }
423444 } ;
424445 } ) ;
425446 } ;
@@ -600,7 +621,8 @@ export const RaceProvider = ({ children }) => {
600621 } ,
601622 snippetFilters : data . settings ?. snippetFilters || { difficulty : 'all' , type : 'all' , department : 'all' } ,
602623 settings : data . settings || { testMode : 'snippet' , testDuration : 15 } ,
603- countdown : null
624+ countdown : null ,
625+ sessionWins : data . sessionWins || { }
604626 } ) ;
605627 } ;
606628
@@ -653,7 +675,7 @@ export const RaceProvider = ({ children }) => {
653675 socket . off ( 'snippetNotFound' , handleSnippetNotFound ) ; // Cleanup snippet not found listener
654676 } ;
655677 // Add raceState.snippet?.id to dependency array to reset typing state on snippet change
656- } , [ socket , connected , raceState . type , raceState . manuallyStarted , raceState . snippet ?. id , resetAnticheatState ] ) ;
678+ } , [ socket , connected , raceState . type , raceState . manuallyStarted , raceState . snippet ?. id , resetAnticheatState , clearInactivityWarning , user ?. netid ] ) ;
657679
658680 // Methods for race actions
659681 const joinPracticeMode = ( ) => {
@@ -696,6 +718,7 @@ export const RaceProvider = ({ children }) => {
696718
697719 const setPlayerReady = ( ) => {
698720 if ( ! socket || ! connected ) return ;
721+ clearInactivityWarning ( ) ;
699722 // console.log('Setting player ready...');
700723 socket . emit ( 'player:ready' ) ;
701724 } ;
@@ -1075,7 +1098,8 @@ export const RaceProvider = ({ children }) => {
10751098 testMode : 'snippet' ,
10761099 testDuration : 15 ,
10771100 } ,
1078- countdown : null
1101+ countdown : null ,
1102+ sessionWins : { }
10791103 } ) ;
10801104
10811105 setTypingState ( {
@@ -1088,7 +1112,7 @@ export const RaceProvider = ({ children }) => {
10881112 accuracy : 0 ,
10891113 lockedPosition : 0
10901114 } ) ;
1091-
1115+
10921116 // Clear race state from session storage
10931117 sessionStorage . removeItem ( 'raceState' ) ;
10941118 } ;
0 commit comments