2023-12-27 07:25:30 +00:00
import { AnyTypedQuizQuestion } from "@model/questionTypes/shared" ;
import { clearRuleForAll , deleteQuestion , getQuestionByContentId , updateQuestion } from "@root/questions/actions" ;
import { updateRootContentId } from "@root/quizes/actions" ;
//Всё здесь нужно сделать последовательно. И пусть весь мир ждёт.
export const DeleteFunction = async ( questions : any , question : any , quiz : any ) = > {
if ( question . type !== null ) {
if ( question . content . rule . parentId === "root" ) { //удалить из стора root и очистить rule всем вопросам
updateRootContentId ( quiz . id , "" ) ;
await clearRuleForAll ( ) ;
console . log ( "очистка рулов закончилась" )
await deleteQuestion ( question . id ) ;
} else if ( question . content . rule . parentId . length > 0 ) { //удалить из стора вопрос из дерева и очистить е г о потомков
const clearQuestions = [ ] as string [ ] ;
//записываем потомков , а их результаты удаляем
const getChildren = ( parentQuestion : AnyTypedQuizQuestion ) = > {
questions . forEach ( ( targetQuestion ) = > {
if ( targetQuestion . type !== null && targetQuestion . content . rule . parentId === parentQuestion . content . id ) { //если у вопроса совпал родитель с родителем => он потомок, в кучу е г о
if ( targetQuestion . type !== "result" && targetQuestion . type !== null ) {
if ( ! clearQuestions . includes ( targetQuestion . content . id ) ) clearQuestions . push ( targetQuestion . content . id ) ;
getChildren ( targetQuestion ) ; //и ищем е г о потомков
}
}
} ) ;
} ;
getChildren ( question ) ;
//чистим потомков от инфы ветвления
await Promise . allSettled (
clearQuestions . map ( ( id ) = > {
updateQuestion ( id , question = > {
question . content . rule . parentId = "" ;
2023-12-27 21:16:48 +00:00
question . content . rule . children = [ ] ;
2023-12-27 07:25:30 +00:00
question . content . rule . main = [ ] ;
question . content . rule . default = "" ;
} ) ;
} )
)
//чистим rule родителя
const parentQuestion = getQuestionByContentId ( question . content . rule . parentId ) ;
const newRule = { } ;
newRule . main = parentQuestion . content . rule . main . filter ( ( data ) = > data . next !== question . content . id ) ; //удаляем условия перехода от родителя к этому вопросу
newRule . parentId = parentQuestion . content . rule . parentId ;
newRule . default = parentQuestion . content . rule . parentId === question . content . id ? "" : parentQuestion . content . rule . parentId ;
newRule . children = [ . . . parentQuestion . content . rule . children ] . splice ( parentQuestion . content . rule . children . indexOf ( question . content . id ) , 1 ) ;
await updateQuestion ( question . content . rule . parentId , ( PQ ) = > {
PQ . content . rule = newRule ;
} ) ;
await deleteQuestion ( question . id ) ;
}
await deleteQuestion ( question . id ) ;
const result = questions . find ( q = > q . type === "result" && q . content . rule . parentId === question . content . id )
if ( result ) await deleteQuestion ( result . id ) ;
} else {
await deleteQuestion ( question . id ) ;
}
}