11'use client' ;
22
3- import { use } from 'react' ;
3+ import { use , useEffect , useState } from 'react' ;
44import useAssessment from '@/lib/hooks/useAssessment' ;
55import AssessmentIntro from '@/lib/components/assessment-flow/AssessmentIntro' ;
66import AssessmentOutro from '@/lib/components/assessment-flow/AssessmentOutro' ;
@@ -10,11 +10,27 @@ import AssessmentContent from '@/lib/components/assessment-flow/AssessmentConten
1010import { useHeartbeat } from '@/lib/hooks/useHeartbeat' ;
1111import { LostConnectionModal } from '@/lib/components/modal/LostConnectionModal' ;
1212import AssessmentSkeleton from '@/lib/components/assessment-flow/AssessmentSkeleton' ;
13+ import { useWindowUnfocused } from '@/lib/hooks/useWindowUnfocused' ;
14+ import { WindowUnfocusedModal } from '@/lib/components/modal/WindowUnfocusedModal' ;
1315
1416export default function AssessmentPage ( { params } : { params : Promise < { assessmentId : string } > } ) {
1517 const { assessmentId } = use ( params ) ;
1618 const assessment = useAssessment ( assessmentId ) ;
1719 const { isConnected } = useHeartbeat ( assessment . token ?? null ) ;
20+ const isWindowUnfocused = useWindowUnfocused ( ) ;
21+ const [ isUnfocusedModalOpen , setIsUnfocusedModalOpen ] = useState ( false ) ;
22+ const isExamActive =
23+ ! assessment . isLoading &&
24+ ! assessment . error &&
25+ isConnected &&
26+ assessment . phase !== 'intro' &&
27+ assessment . phase !== 'outro' ;
28+
29+ useEffect ( ( ) => {
30+ if ( isExamActive && isWindowUnfocused ) {
31+ setIsUnfocusedModalOpen ( true ) ;
32+ }
33+ } , [ isExamActive , isWindowUnfocused ] ) ;
1834
1935 if ( assessment . isLoading )
2036 return (
@@ -52,6 +68,10 @@ export default function AssessmentPage({ params }: { params: Promise<{ assessmen
5268 < div className = "flex h-screen w-full flex-col overflow-hidden" >
5369 { /* onOpenChange is returning nothing as we don't have recovery implemented just yet */ }
5470 < LostConnectionModal open = { ! isConnected } onOpenChange = { ( ) => { } } />
71+ < WindowUnfocusedModal
72+ open = { isUnfocusedModalOpen }
73+ onAcknowledge = { ( ) => setIsUnfocusedModalOpen ( false ) }
74+ />
5575 < AssessmentNavbar candidateName = { assessment . candidateName } />
5676 < div className = "flex flex-1 overflow-hidden" >
5777 < AssessmentSidebar
0 commit comments