fix question
This commit is contained in:
parent
513ba6cb6a
commit
9ecb7ae551
|
|
@ -38,9 +38,18 @@ const SelectTag: React.FC = () => {
|
|||
|
||||
const options = data?.data ?? [];
|
||||
const additionalData =
|
||||
options?.length < 1 && searchValue.length > 1 && !isLoading
|
||||
? [{ id: `${searchValue}`, name: searchValue }]
|
||||
: [];
|
||||
options.length < 1 && searchValue.length > 1 && !isLoading
|
||||
? [{ id: searchValue, name: searchValue }]
|
||||
: [];
|
||||
|
||||
|
||||
console.log(options);
|
||||
console.log(formik?.values?.tags);
|
||||
const value = formik?.values?.tags?.map((item: any) => item?.id ?? item) ?? [];
|
||||
|
||||
|
||||
const AllOptions = [...options, ...additionalData]
|
||||
console.log(AllOptions);
|
||||
|
||||
return (
|
||||
<div className="SelectTag">
|
||||
|
|
@ -52,7 +61,7 @@ const SelectTag: React.FC = () => {
|
|||
placeholder=""
|
||||
fieldNames={{ label: "name", value: "id" }}
|
||||
onChange={handleChange}
|
||||
options={[...options, ...additionalData]}
|
||||
options={AllOptions}
|
||||
filterOption={false}
|
||||
loading={isLoading}
|
||||
notFoundContent={isLoading ? <Spin /> : t("practical.not_found")}
|
||||
|
|
@ -66,7 +75,7 @@ const SelectTag: React.FC = () => {
|
|||
handleBlur();
|
||||
}
|
||||
}}
|
||||
value={formik?.values?.tags ?? []}
|
||||
value={value}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -21,21 +21,6 @@ import ModelForm from "./Model/ModelForm";
|
|||
const AcceptModal = lazy(() => import("./Model/AcceptModal"));
|
||||
|
||||
import { useModalState } from "../../../zustand/Modal";
|
||||
import { ModalEnum } from "../../../enums/Model";
|
||||
import { cleanObject } from "../../../utils/cleanObject";
|
||||
import { hasItems } from "../../../utils/hasItems";
|
||||
import { QUESTION_OBJECT_KEY } from "../../../config/AppKey";
|
||||
import useSaveOnDisconnect from "../../../Hooks/useSaveOnDisconnect";
|
||||
import { getLocalStorageQuestions } from "../../../utils/setLocalStorageQuestions";
|
||||
import { toast } from "react-toastify";
|
||||
import useSetPageTitle from "../../../Hooks/useSetPageTitle";
|
||||
import { useGetAllUnit } from "../../../api/unit";
|
||||
import { useGetAllLesson } from "../../../api/lesson";
|
||||
import { useGetAllSubject } from "../../../api/subject";
|
||||
import { useGetAllGrade } from "../../../api/grade";
|
||||
import { useGetAllCurriculum } from "../../../api/curriculum";
|
||||
import useKeyCombination from "../../../Hooks/useKeyCombination";
|
||||
|
||||
const AddPage: React.FC = () => {
|
||||
const { isSuccess: isSuccessAsync, mutateAsync } = useAddQuestionAsync();
|
||||
const { mutate, isSuccess, isLoading } = useAddQuestion();
|
||||
|
|
@ -44,8 +29,6 @@ const AddPage: React.FC = () => {
|
|||
setTagsSearch,
|
||||
setObjectToEdit,
|
||||
objectToEdit,
|
||||
setSuccess,
|
||||
SavedQuestionData,
|
||||
} = useObjectToEdit();
|
||||
|
||||
const { setIsOpen } = useModalState((state) => state);
|
||||
|
|
@ -53,52 +36,8 @@ const AddPage: React.FC = () => {
|
|||
const [t] = useTranslation();
|
||||
const { unit_id, curriculum_id, grade_id, subject_id, lesson_id } =
|
||||
useParams<ParamsEnum>();
|
||||
const { data: unit } = useGetAllUnit({ show: unit_id });
|
||||
|
||||
const { data: Subject } = useGetAllSubject({
|
||||
show: subject_id,
|
||||
});
|
||||
const { data: grade } = useGetAllGrade({
|
||||
show: grade_id,
|
||||
});
|
||||
const { data: Curriculum } = useGetAllCurriculum({
|
||||
show: curriculum_id,
|
||||
});
|
||||
const { data: Lesson } = useGetAllLesson({
|
||||
show: lesson_id,
|
||||
});
|
||||
|
||||
const gradeName = grade?.data?.name ?? "";
|
||||
const SubjectName = Subject?.data?.name ?? "";
|
||||
const CurriculumName = Curriculum?.data?.name ?? "";
|
||||
const unitName = unit?.data?.name ?? "";
|
||||
const LessonName = Lesson?.data?.name ?? "";
|
||||
|
||||
useSetPageTitle(
|
||||
t(`page_header.grade`) +
|
||||
"/" +
|
||||
gradeName +
|
||||
"/" +
|
||||
t(`PageTitle.subject`) +
|
||||
"/" +
|
||||
SubjectName +
|
||||
"/" +
|
||||
t("PageTitle.curriculum") +
|
||||
"/" +
|
||||
CurriculumName +
|
||||
"/" +
|
||||
t("PageTitle.unit") +
|
||||
"/" +
|
||||
unitName +
|
||||
"/" +
|
||||
t("PageTitle.lesson") +
|
||||
"/" +
|
||||
LessonName +
|
||||
"/" +
|
||||
t("PageTitle.question") +
|
||||
"/" +
|
||||
t("practical.add"),
|
||||
);
|
||||
|
||||
const handleSubmit = (
|
||||
values: any,
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@ import {
|
|||
useGetAllQuestion,
|
||||
useUpdateQuestion,
|
||||
} from "../../../api/Question";
|
||||
import { useQueryClient } from "react-query";
|
||||
import { useTranslation } from "react-i18next";
|
||||
import { useNavigate, useParams } from "react-router-dom";
|
||||
import { ParamsEnum } from "../../../enums/params";
|
||||
|
|
@ -25,18 +24,10 @@ import ModelForm from "./Model/ModelForm";
|
|||
import BaseForm from "./Model/Malty/Form";
|
||||
import { Question } from "../../../types/Item";
|
||||
import { toast } from "react-toastify";
|
||||
import useSetPageTitle from "../../../Hooks/useSetPageTitle";
|
||||
import { useGetAllUnit } from "../../../api/unit";
|
||||
import { useGetAllLesson } from "../../../api/lesson";
|
||||
import { useGetAllSubject } from "../../../api/subject";
|
||||
import { useGetAllGrade } from "../../../api/grade";
|
||||
import { useGetAllCurriculum } from "../../../api/curriculum";
|
||||
|
||||
|
||||
const EditPage: React.FC = () => {
|
||||
const {
|
||||
unit_id,
|
||||
curriculum_id,
|
||||
grade_id,
|
||||
subject_id,
|
||||
lesson_id,
|
||||
question_id,
|
||||
|
|
@ -54,8 +45,7 @@ const EditPage: React.FC = () => {
|
|||
|
||||
const { data: Questions, isLoading: QuestionsDataLoading } =
|
||||
useGetAllQuestion({
|
||||
questionParentId: question_id,
|
||||
onlyWithNoParents: false,
|
||||
parent_id: question_id,
|
||||
});
|
||||
|
||||
const objectToEdit = { ...data?.data, Questions: Questions?.data };
|
||||
|
|
@ -67,52 +57,8 @@ const EditPage: React.FC = () => {
|
|||
}, [objectToEdit?.isBase]);
|
||||
|
||||
const [t] = useTranslation();
|
||||
const { data: unit } = useGetAllUnit({ show: unit_id });
|
||||
|
||||
const { data: Subject } = useGetAllSubject({
|
||||
show: subject_id,
|
||||
});
|
||||
const { data: grade } = useGetAllGrade({
|
||||
show: grade_id,
|
||||
});
|
||||
const { data: Curriculum } = useGetAllCurriculum({
|
||||
show: curriculum_id,
|
||||
});
|
||||
const { data: Lesson } = useGetAllLesson({
|
||||
show: lesson_id,
|
||||
});
|
||||
|
||||
const gradeName = grade?.data?.name ?? "";
|
||||
const SubjectName = Subject?.data?.name ?? "";
|
||||
const CurriculumName = Curriculum?.data?.name ?? "";
|
||||
const unitName = unit?.data?.name ?? "";
|
||||
const LessonName = Lesson?.data?.name ?? "";
|
||||
|
||||
useSetPageTitle(
|
||||
t(`page_header.grade`) +
|
||||
"/" +
|
||||
gradeName +
|
||||
"/" +
|
||||
t(`PageTitle.subject`) +
|
||||
"/" +
|
||||
SubjectName +
|
||||
"/" +
|
||||
t("PageTitle.curriculum") +
|
||||
"/" +
|
||||
CurriculumName +
|
||||
"/" +
|
||||
t("PageTitle.unit") +
|
||||
"/" +
|
||||
unitName +
|
||||
"/" +
|
||||
t("PageTitle.lesson") +
|
||||
"/" +
|
||||
LessonName +
|
||||
"/" +
|
||||
t("PageTitle.question") +
|
||||
"/" +
|
||||
t("practical.edit"),
|
||||
);
|
||||
|
||||
const handleSubmit = (values: any) => {
|
||||
const DataToSend = structuredClone(values);
|
||||
|
|
@ -123,13 +69,13 @@ const EditPage: React.FC = () => {
|
|||
const UpdateBseQuestion = {
|
||||
id: DataToSend?.id,
|
||||
content: DataToSend?.content,
|
||||
image: DataToSend?.image ?? "",
|
||||
content_image: DataToSend?.content_image ?? "",
|
||||
};
|
||||
if (
|
||||
typeof UpdateBseQuestion?.image === "string" &&
|
||||
UpdateBseQuestion?.image !== ""
|
||||
typeof UpdateBseQuestion?.content_image === "string" &&
|
||||
UpdateBseQuestion?.content_image !== ""
|
||||
) {
|
||||
delete UpdateBseQuestion["image"];
|
||||
delete UpdateBseQuestion["content_image"];
|
||||
}
|
||||
console.log(DeletedQuestions, "DeletedQuestions");
|
||||
console.log(UpdateBseQuestion);
|
||||
|
|
@ -147,24 +93,24 @@ const EditPage: React.FC = () => {
|
|||
console.log(item);
|
||||
if (item?.id) {
|
||||
const itemToSend = structuredClone(item);
|
||||
const keysToRemove = ["image", "answer_image"];
|
||||
const keysToRemove = ["content_image"];
|
||||
const updatedObject = removeStringKeys(itemToSend, keysToRemove);
|
||||
console.log(updatedObject, "updatedObject");
|
||||
|
||||
const tags = processTags(updatedObject);
|
||||
const oldanswers = [] as any;
|
||||
const newanswers = [] as any;
|
||||
const oldAnswers = [] as any;
|
||||
const newAnswers = [] as any;
|
||||
|
||||
updatedObject?.answers?.forEach((item: any) => {
|
||||
if (item?.id) {
|
||||
oldanswers.push(item);
|
||||
oldAnswers.push({...item,isCorrect:item?.isCorrect ? 1 : 0});
|
||||
} else {
|
||||
newanswers.push(item);
|
||||
newAnswers.push({...item,isCorrect:item?.isCorrect ? 1 : 0});
|
||||
}
|
||||
});
|
||||
const answers = {
|
||||
old: oldanswers,
|
||||
new: newanswers,
|
||||
old: oldAnswers,
|
||||
new: newAnswers,
|
||||
};
|
||||
console.log(answers);
|
||||
|
||||
|
|
@ -187,34 +133,31 @@ const EditPage: React.FC = () => {
|
|||
}
|
||||
});
|
||||
} else {
|
||||
const keysToRemove = ["image", "answer_image"];
|
||||
|
||||
const keysToRemove = ["content_image"];
|
||||
console.log(DataToSend);
|
||||
const updatedObject = removeStringKeys(DataToSend, keysToRemove);
|
||||
delete updatedObject["parent_id"];
|
||||
const tags = processTags(updatedObject);
|
||||
console.log(updatedObject, "updatedObject");
|
||||
if (!updatedObject?.image) {
|
||||
updatedObject["image"] = "";
|
||||
if (!updatedObject?.content_image) {
|
||||
updatedObject["content_image"] = "";
|
||||
}
|
||||
console.log(updatedObject);
|
||||
|
||||
const oldanswers = [] as any;
|
||||
const newanswers = [] as any;
|
||||
const oldAnswers = [] as any;
|
||||
const newAnswers = [] as any;
|
||||
|
||||
updatedObject?.answers?.forEach((item: any) => {
|
||||
if (item?.id) {
|
||||
console.log(item);
|
||||
|
||||
oldanswers.push(item);
|
||||
oldAnswers.push({...item,isCorrect:item?.isCorrect ? 1 : 0});
|
||||
} else {
|
||||
newanswers.push(item);
|
||||
newAnswers.push({...item,isCorrect:item?.isCorrect ? 1 : 0});
|
||||
}
|
||||
});
|
||||
|
||||
const answers = {
|
||||
old: oldanswers,
|
||||
new: newanswers,
|
||||
old: oldAnswers,
|
||||
new: newAnswers,
|
||||
};
|
||||
console.log(answers, "answers");
|
||||
|
||||
mutate({ ...updatedObject, answers, tags });
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ const ChoiceFields = ({
|
|||
/>
|
||||
|
||||
<ImageBoxField
|
||||
name={`Questions.${parent_index}.answers.${index}.answer_image`}
|
||||
name={`Questions.${parent_index}.answers.${index}.content_image`}
|
||||
/>
|
||||
|
||||
<div className="answer_status">
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@ const Form = () => {
|
|||
label="main_question"
|
||||
type="TextArea"
|
||||
/>
|
||||
<ImageBoxField name="image" />
|
||||
<ImageBoxField name="content_image" />
|
||||
|
||||
<div></div>
|
||||
</div>
|
||||
|
|
@ -128,7 +128,7 @@ const Form = () => {
|
|||
<ValidationField
|
||||
className=" "
|
||||
placeholder="_"
|
||||
name={`answers.${parent_index}.hint`}
|
||||
name={`Questions.${parent_index}.hint`}
|
||||
label="hint_question"
|
||||
type="text"
|
||||
style={{ width: "100%" }}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ const QuestionFIeld = ({ index, data }: { index: number; data: Choice }) => {
|
|||
type="TextArea"
|
||||
/>
|
||||
|
||||
<ImageBoxField name={`Questions.${index}.image`} />
|
||||
<ImageBoxField name={`Questions.${index}.content_image`} />
|
||||
|
||||
<div className="answer_status">
|
||||
<p className="delete_question_options">
|
||||
|
|
|
|||
|
|
@ -37,9 +37,18 @@ const MaltySelectTag = ({ parent_index }: { parent_index: number }) => {
|
|||
|
||||
const options = data?.data ?? [];
|
||||
const additionalData =
|
||||
options?.length < 1 && searchValue.length > 1 && !isLoading
|
||||
? [{ id: `new_${searchValue}`, name: searchValue }]
|
||||
: [];
|
||||
options.length < 1 && searchValue.length > 1 && !isLoading
|
||||
? [{ id: searchValue, name: searchValue }]
|
||||
: [];
|
||||
|
||||
|
||||
console.log(options);
|
||||
const value = formik?.values?.Questions[parent_index]?.tags?.map((item: any) => item?.id ?? item) ?? [];
|
||||
console.log(formik?.values?.Questions[parent_index]);
|
||||
|
||||
console.log(value);
|
||||
|
||||
const AllOptions = [...options, ...additionalData]
|
||||
|
||||
return (
|
||||
<div className="SelectTag">
|
||||
|
|
@ -50,8 +59,9 @@ const MaltySelectTag = ({ parent_index }: { parent_index: number }) => {
|
|||
style={{ width: "100%", height: "40px" }}
|
||||
placeholder=""
|
||||
fieldNames={{ label: "name", value: "id" }}
|
||||
|
||||
onChange={handleChange}
|
||||
options={[...options, ...additionalData]}
|
||||
options={AllOptions}
|
||||
filterOption={false}
|
||||
loading={isLoading}
|
||||
notFoundContent={isLoading ? <Spin /> : t("practical.not_found")}
|
||||
|
|
@ -65,7 +75,7 @@ const MaltySelectTag = ({ parent_index }: { parent_index: number }) => {
|
|||
handleBlur();
|
||||
}
|
||||
}}
|
||||
value={values ?? []}
|
||||
value={value}
|
||||
/>
|
||||
</div>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ import { QUESTION_OBJECT_KEY } from "../../../../config/AppKey";
|
|||
|
||||
export const getInitialValues = (objectToEdit: Question): any => {
|
||||
const tags = objectToEdit?.tags?.map((item: any, index: number) => {
|
||||
return { ...item, key: index };
|
||||
return { ...item };
|
||||
});
|
||||
console.log(objectToEdit);
|
||||
console.log(tags);
|
||||
|
||||
return {
|
||||
id: objectToEdit?.id ?? null,
|
||||
|
|
@ -45,13 +45,14 @@ export const getInitialValuesBase = (objectToEdit: Question): any => {
|
|||
const tags = item?.tags?.map((tag: any) => ({
|
||||
id: tag?.id,
|
||||
name: tag?.name,
|
||||
key: `${tag?.id}_key_${tag?.name}`,
|
||||
}));
|
||||
console.log(tags);
|
||||
|
||||
return {
|
||||
...item,
|
||||
canAnswersBeShuffled: objectToEdit?.canAnswersBeShuffled ? 1 : 0,
|
||||
hint: item?.hint ?? "",
|
||||
hint: objectToEdit?.hint ?? "",
|
||||
isBase:0,
|
||||
tags,
|
||||
};
|
||||
});
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ const TableHeader = () => {
|
|||
|
||||
const deleteMutation = useDeleteQuestion();
|
||||
|
||||
const { unit_id, curriculum_id, grade_id, subject_id, lesson_id } =
|
||||
const { unit_id, grade_id, subject_id, lesson_id } =
|
||||
useParams<ParamsEnum>();
|
||||
const { data: unit } = useGetAllUnit({ show: unit_id });
|
||||
|
||||
|
|
@ -34,16 +34,13 @@ const TableHeader = () => {
|
|||
const { data: grade } = useGetAllGrade({
|
||||
show: grade_id,
|
||||
});
|
||||
const { data: Curriculum } = useGetAllCurriculum({
|
||||
show: curriculum_id,
|
||||
});
|
||||
|
||||
const { data: Lesson } = useGetAllLesson({
|
||||
show: lesson_id,
|
||||
});
|
||||
|
||||
const gradeName = grade?.data?.name ?? "";
|
||||
const SubjectName = Subject?.data?.name ?? "";
|
||||
const CurriculumName = Curriculum?.data?.name ?? "";
|
||||
const unitName = unit?.data?.name ?? "";
|
||||
const LessonName = Lesson?.data?.name ?? "";
|
||||
|
||||
|
|
@ -56,10 +53,6 @@ const TableHeader = () => {
|
|||
"/" +
|
||||
SubjectName +
|
||||
"/" +
|
||||
t("PageTitle.curriculum") +
|
||||
"/" +
|
||||
CurriculumName +
|
||||
"/" +
|
||||
t("PageTitle.unit") +
|
||||
"/" +
|
||||
unitName +
|
||||
|
|
|
|||
|
|
@ -1,11 +1,23 @@
|
|||
export function removeStringKeys(obj: any, keysToRemove: string[]): any {
|
||||
if (typeof obj === "object" && obj !== null) {
|
||||
for (const key in obj) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
if (keysToRemove.includes(key) && typeof obj[key] === "string") {
|
||||
delete obj[key];
|
||||
} else {
|
||||
removeStringKeys(obj[key], keysToRemove);
|
||||
// Check if the input is an object or array
|
||||
if (obj && typeof obj === 'object') {
|
||||
// Handle arrays
|
||||
if (Array.isArray(obj)) {
|
||||
obj.forEach((item, index) => {
|
||||
obj[index] = removeStringKeys(item, keysToRemove);
|
||||
});
|
||||
} else {
|
||||
// Handle objects
|
||||
for (const key in obj) {
|
||||
if (obj.hasOwnProperty(key)) {
|
||||
const value = obj[key];
|
||||
// Check if the value is a string or "null" and the key is in keysToRemove
|
||||
if (keysToRemove.includes(key) && (typeof value === 'string' || value === 'null')) {
|
||||
delete obj[key];
|
||||
} else {
|
||||
// Recursively process nested objects or arrays
|
||||
obj[key] = removeStringKeys(value, keysToRemove);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user