11"use client" ;
22
3- import { useState } from "react" ;
3+ import { useState , useEffect , useCallback } from "react" ;
4+ import { useRouter , useSearchParams } from "next/navigation" ;
45import { gql , useQuery } from "@apollo/client" ;
56import type { NextPage } from "next" ;
67import QuizForm from "@azure-fundamentals/components/QuizForm" ;
@@ -29,11 +30,15 @@ const questionsQuery = gql`
2930 }
3031` ;
3132
32- const Practice : NextPage < { searchParams : { url : string ; name : string } } > = ( {
33- searchParams,
34- } ) => {
35- const { url } = searchParams ;
36- const [ currentQuestionIndex , setCurrentQuestionIndex ] = useState < number > ( 1 ) ;
33+ const Practice : NextPage = ( ) => {
34+ const router = useRouter ( ) ;
35+ const searchParams = useSearchParams ( ) ;
36+
37+ const url = searchParams . get ( "url" ) || "" ;
38+ const seqParam = searchParams . get ( "seq" ) ;
39+ const seq = seqParam ? parseInt ( seqParam ) : 1 ;
40+
41+ const [ currentQuestionIndex , setCurrentQuestionIndex ] = useState < number > ( seq ) ;
3742 const editedUrl = url . substring ( 0 , url . lastIndexOf ( "/" ) + 1 ) ;
3843
3944 const { loading, error, data } = useQuery ( questionQuery , {
@@ -48,9 +53,26 @@ const Practice: NextPage<{ searchParams: { url: string; name: string } }> = ({
4853 variables : { link : url } ,
4954 } ) ;
5055
56+ const setThisSeqIntoURL = useCallback (
57+ ( seq : number ) => {
58+ const newSearchParams = new URLSearchParams ( searchParams . toString ( ) ) ;
59+ newSearchParams . set ( "seq" , seq . toString ( ) ) ;
60+ const newUrl = `${
61+ window . location . pathname
62+ } ?${ newSearchParams . toString ( ) } `;
63+ router . push ( newUrl , { shallow : true } ) ;
64+ } ,
65+ [ router , searchParams ] ,
66+ ) ;
67+
68+ useEffect ( ( ) => {
69+ setCurrentQuestionIndex ( seq ) ;
70+ } , [ seq ] ) ;
71+
5172 const handleNextQuestion = ( questionNo : number ) => {
5273 if ( questionNo > 0 && questionNo - 1 < questionsData ?. questions ?. count ) {
5374 setCurrentQuestionIndex ( questionNo ) ;
75+ setThisSeqIntoURL ( questionNo ) ;
5476 }
5577 } ;
5678
0 commit comments