2024-05-31 17:56:17 +00:00
import useSWR from "swr" ;
2025-06-18 13:05:14 +00:00
import { getAndParceData } from "./quizRelase" ;
2025-06-15 09:58:15 +00:00
import { useEffect , useState } from "react" ;
import { initDataManager , statusOfQuiz } from "@/utils/hooks/useQuestionFlowControl" ;
2025-07-07 00:28:51 +00:00
import { addQuestions , changeNextLoading , setQuizData , useQuizStore } from "@/stores/useQuizStore" ;
2025-06-15 09:58:15 +00:00
/ *
У х у к а е с т ь т р и р е ж м и а р а б о т ы : "line" | "branch" | "ai"
Д л я branch и line е д и н о в р е м е н н о з а п р а ш и в а ю т с я В С Е д а н н ы е ( п о к а ч т о э т о к о л и ч е с т в о н а 100 ш т у к . П о з ж е н у ж н о в п и л и т ь д о п з а п р о с ы ч т о б ы п о л у ч и т ь в с е в о п р о с ы . )
Д л я ai и д ё т п о с л е д о в а т е л ь н ы й з а п р о с д а н н ы х . П р и п е р в о м п о п а д а н и и н а result - б л о к и р у е т с я в о з м о ж н о с т ь з а п р а ш и в а т ь н о в ы е д а н н ы е
* /
2024-05-31 17:56:17 +00:00
2024-07-17 00:08:20 +00:00
export function useQuizData ( quizId : string , preview : boolean = false ) {
2025-06-18 13:05:14 +00:00
const { quizStep , questions } = useQuizStore ( ) ;
2025-06-15 09:58:15 +00:00
const [ page , setPage ] = useState ( 0 ) ;
const [ needFullLoad , setNeedFullLoad ] = useState ( false ) ;
useEffect ( ( ) = > {
if ( quizStep > page ) setPage ( quizStep ) ;
} , [ quizStep ] ) ;
return useSWR (
preview ? null : [ "quizData" , quizId , page , needFullLoad ] ,
async ( [ , id , currentPage , fullLoad ] ) = > {
// Первый запрос - получаем статус
if ( currentPage === 0 && ! fullLoad ) {
2025-06-18 13:05:14 +00:00
const firstData = await getAndParceData ( {
2025-06-15 09:58:15 +00:00
quizId : id ,
limit : 1 ,
page : currentPage ,
needConfig : true ,
} ) ;
2025-06-30 02:07:32 +00:00
//firstData.settings.status = "ai";
2025-07-01 13:49:30 +00:00
console . log ( "useQuizData: firstData received:" , firstData ) ;
console . log ( "useQuizData: firstData.settings:" , firstData . settings ) ;
2025-06-15 09:58:15 +00:00
initDataManager ( {
status : firstData.settings.status ,
haveRoot : firstData.settings.cfg.haveRoot ,
} ) ;
2025-07-01 13:49:30 +00:00
console . log ( "useQuizData: calling setQuizData with firstData" ) ;
2025-06-15 09:58:15 +00:00
setQuizData ( firstData ) ;
// Определяем нужно ли загружать все данные
2025-06-30 02:07:32 +00:00
console . log ( "Определяем нужно ли загружать все данные" ) ;
console . log ( firstData . settings . status ) ;
if ( ! [ "ai" ] . includes ( firstData . settings . status ) ) {
2025-06-15 09:58:15 +00:00
setNeedFullLoad ( true ) ; // Триггерит новый запрос через изменение ключа
return firstData ;
}
return firstData ;
}
// Полная загрузка для line/branch
if ( fullLoad ) {
2025-06-18 13:05:14 +00:00
const data = await getAndParceData ( {
2025-06-15 09:58:15 +00:00
quizId : id ,
limit : 100 ,
page : 0 ,
needConfig : false ,
} ) ;
2025-06-18 13:05:14 +00:00
addQuestions ( data . questions . slice ( 1 ) ) ;
return data ;
2025-06-15 09:58:15 +00:00
}
2025-06-30 02:07:32 +00:00
if ( currentPage >= questions . length ) {
2025-06-18 13:05:14 +00:00
try {
// Для AI режима - последовательная загрузка
const data = await getAndParceData ( {
quizId : id ,
page : currentPage ,
limit : 1 ,
needConfig : false ,
} ) ;
2025-07-07 00:28:51 +00:00
console . log (
"AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE AI RESPONSE "
) ;
console . log ( data ) ;
2025-06-18 13:05:14 +00:00
addQuestions ( data . questions ) ;
2025-07-07 00:28:51 +00:00
changeNextLoading ( false ) ;
2025-06-18 13:05:14 +00:00
return data ;
2025-07-07 00:28:51 +00:00
} catch ( p ) {
console . log ( p ) ;
2025-06-18 13:05:14 +00:00
setPage ( questions . length ) ;
2025-07-07 00:28:51 +00:00
changeNextLoading ( false ) ;
2025-06-18 13:05:14 +00:00
}
}
2025-06-15 09:58:15 +00:00
} ,
{
revalidateOnFocus : false ,
revalidateOnReconnect : false ,
shouldRetryOnError : false ,
refreshInterval : 0 ,
}
) ;
2024-05-31 17:56:17 +00:00
}