удаление резултов при удалении и добавлении узов (ошибка при удалении корневого вопроса)

This commit is contained in:
Nastya 2023-12-11 18:40:42 +03:00
parent 9fa9e426d7
commit efbc3384c5
4 changed files with 44 additions and 17 deletions

@ -187,19 +187,31 @@ function CsComponent({
}
const clearDataAfterAddNode = ({ parentNodeContentId, targetQuestion, parentNodeChildren }: { parentNodeContentId: string, targetQuestion: AnyTypedQuizQuestion, parentNodeChildren: number }) => {
const parentQuestion = { ...getQuestionByContentId(parentNodeContentId) } as AnyTypedQuizQuestion
//смотрим не добавлен ли родителю result. Если да - убираем его. Веточкам result не нужен
trashQuestions.forEach((targetQuestion) => {
if (targetQuestion.type === "result" && targetQuestion.content.rule.parentId === parentQuestion.content.id) {
deleteQuestion(targetQuestion.id);
}
})
//предупреждаем добавленный вопрос о том, кто его родитель
updateQuestion(targetQuestion.content.id, question => {
question.content.rule.parentId = parentNodeContentId
question.content.rule.main = []
})
//предупреждаем родителя о новом потомке
updateQuestion(parentNodeContentId, question => {
//предупреждаем родителя о новом потомке (если он ещё не знает о нём)
if (!parentQuestion.content.rule.children.includes(targetQuestion.content.id)) updateQuestion(parentNodeContentId, question => {
question.content.rule.children = [...question.content.rule.children, targetQuestion.content.id]
})
//Если детей больше 1 - предупреждаем стор вопросов об открытии модалки ветвления
if (parentNodeChildren >= 1) {
if (parentQuestion.content.rule.children >= 1) {
updateOpenedModalSettingsId(targetQuestion.content.id)
}
}
@ -237,7 +249,7 @@ function CsComponent({
question.content.rule.children = []
question.content.rule.default = ""
})
questions.forEach(q => {
trashQuestions.forEach(q => {
if (q.type === "result") {
deleteQuestion(q.id);
}
@ -266,6 +278,8 @@ function CsComponent({
question.content.rule.default = ""
question.content.rule.children = []
})
})
deleteEdges.forEach((edge: any) => {//Грани
@ -277,10 +291,10 @@ function CsComponent({
cy?.layout(lyopts).run()
//удаляем result всех потомков
questions.forEach((targetQuestion) => {
if (deleteNodes.includes(targetQuestion.content.rule.parentId)) {
if (targetQuestion.type === "result") {
deleteQuestion(targetQuestion.id);
trashQuestions.forEach((qr) => {
if (qr.type === "result") {
if (deleteNodes.includes(qr.content.rule.parentId) || qr.content.rule.parentId === targetQuestion.content.id) {
deleteQuestion(qr.id);
}
}
})
@ -299,13 +313,17 @@ function CsComponent({
question.content.rule.default = ""
})
//чистим rule родителя
const parentQuestion = getQuestionByContentId(targetQuestionContentId)
const parentQuestion = getQuestionByContentId(parentQuestionContentId)
console.log(parentQuestion.content.rule.parentId)
const newRule = {}
const newChildren = [...parentQuestion.content.rule.children]
newChildren.splice(parentQuestion.content.rule.children.indexOf(targetQuestionContentId), 1);
newRule.main = parentQuestion.content.rule.main.filter((data) => data.next !== targetQuestionContentId) //удаляем условия перехода от родителя к этому вопросу
newRule.parentId = parentQuestion.content.rule.parentId
newRule.default = parentQuestion.content.rule.parentId === targetQuestionContentId ? "" : parentQuestion.content.rule.parentId
newRule.children = [...parentQuestion.content.rule.children].splice(parentQuestion.content.rule.children.indexOf(question.content.id), 1);
newRule.default = parentQuestion.content.rule.default === targetQuestionContentId ? "" : parentQuestion.content.rule.default
newRule.children = newChildren
updateQuestion(parentQuestionContentId, (PQ) => {
PQ.content.rule = newRule

@ -262,12 +262,12 @@ console.log(question.type)
if (question.content.rule.parentId === "root") { //удалить из стора root и очистить rule всем вопросам
updateRootContentId(quiz.id, "")
clearRuleForAll()
deleteQuestion(question.id);
questions.forEach(q => {
if (q.type === "result") {
deleteQuestion(q.id);
}
});
deleteQuestion(question.id);
} else if (question.content.rule.parentId.length > 0) { //удалить из стора вопрос из дерева и очистить его потомков
const clearQuestions = [] as string[]

@ -16,12 +16,17 @@ export const FirstEntry = () => {
const create = () => {
if (quiz?.config.haveRoot) {
console.log("createFrontResult")
questions
.filter((question:AnyTypedQuizQuestion) => question.type !== null && question.content.rule.parentId.length !== 0 && question.content.rule.children.length === 0)
.filter((question:AnyTypedQuizQuestion) => {
console.log(question)
return question.type !== null && question.content.rule.parentId.length !== 0 && question.content.rule.children.length === 0
})
.forEach(question => {
createFrontResult(quiz.id, question.content.id)
})
} else {
console.log("createFrontResult")
createFrontResult(quiz.id, "line")
}
}

@ -21,14 +21,11 @@ export const ResultSettings = () => {
const { questions } = useQuestionsStore()
const quiz = useCurrentQuiz()
const results = questions.filter((question: AnyTypedQuizQuestion) => question.type === "result")
console.log("опросник ", quiz)
const [quizExpand, setQuizExpand] = useState(true)
const [resultContract, setResultContract] = useState(true)
const [readyLeave, setReadyLeave] = useState(true)
const setAlertLeave = () => {
if (readyLeave) setReadyLeave(false)
console.log(readyLeave)
@ -36,7 +33,6 @@ export const ResultSettings = () => {
useEffect(() => {
return () => {
console.log(readyLeave)
if (!readyLeave) alert("Пожалуйста, проверьте, что вы заполнили все результаты")
}
}, [readyLeave])
@ -47,6 +43,7 @@ export const ResultSettings = () => {
if (quiz?.config.haveRoot) {
//проверяем, что в довесок к бековским результатам нам хватает фронтовых
if (questions.length !== results.length) {
console.log("results", results)
questions
.forEach((q) => {
if (
@ -66,6 +63,13 @@ export const ResultSettings = () => {
console.log("q.content.id", q.content.id)
console.log("questions", questions)
createFrontResult(quiz.id, q.content.id)
} else {
console.log("НОВОГО РЕЗУЛЬТАТА НЕ БУДЕТ")
console.log(results)
console.log(results.includes(q.content.id))
console.log("q.content.id", q.content.id)
console.log("questions", questions)
}
})
}