diff --git a/src/Components/CustomFields/SelectTag.tsx b/src/Components/CustomFields/SelectTag.tsx index 474074f..abdc83f 100644 --- a/src/Components/CustomFields/SelectTag.tsx +++ b/src/Components/CustomFields/SelectTag.tsx @@ -37,11 +37,20 @@ const SelectTag: React.FC = () => { const [t] = useTranslation(); const options = data?.data ?? []; - const additionalData = - options?.length < 1 && searchValue.length > 1 && !isLoading - ? [{ id: `${searchValue}`, name: searchValue }] - : []; + const additionalData = + 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 (
@@ -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 ? : t("practical.not_found")} @@ -66,7 +75,7 @@ const SelectTag: React.FC = () => { handleBlur(); } }} - value={formik?.values?.tags ?? []} + value={value} />
); diff --git a/src/Pages/Admin/question/AddPage.tsx b/src/Pages/Admin/question/AddPage.tsx index 1d38668..9da576a 100644 --- a/src/Pages/Admin/question/AddPage.tsx +++ b/src/Pages/Admin/question/AddPage.tsx @@ -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(); - 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, diff --git a/src/Pages/Admin/question/EditPage.tsx b/src/Pages/Admin/question/EditPage.tsx index 78f5e63..cb7bd1b 100644 --- a/src/Pages/Admin/question/EditPage.tsx +++ b/src/Pages/Admin/question/EditPage.tsx @@ -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 }); } diff --git a/src/Pages/Admin/question/Model/Malty/ChoiceField/ChoiceFields.tsx b/src/Pages/Admin/question/Model/Malty/ChoiceField/ChoiceFields.tsx index 7b8990e..d35a97e 100644 --- a/src/Pages/Admin/question/Model/Malty/ChoiceField/ChoiceFields.tsx +++ b/src/Pages/Admin/question/Model/Malty/ChoiceField/ChoiceFields.tsx @@ -62,7 +62,7 @@ const ChoiceFields = ({ />
diff --git a/src/Pages/Admin/question/Model/Malty/Form.tsx b/src/Pages/Admin/question/Model/Malty/Form.tsx index 1701636..1e0e093 100644 --- a/src/Pages/Admin/question/Model/Malty/Form.tsx +++ b/src/Pages/Admin/question/Model/Malty/Form.tsx @@ -93,7 +93,7 @@ const Form = () => { label="main_question" type="TextArea" /> - +
@@ -128,7 +128,7 @@ const Form = () => { { type="TextArea" /> - +

diff --git a/src/Pages/Admin/question/Model/Malty/Tags/MaltySelectTag.tsx b/src/Pages/Admin/question/Model/Malty/Tags/MaltySelectTag.tsx index 584a085..1a4dfc0 100644 --- a/src/Pages/Admin/question/Model/Malty/Tags/MaltySelectTag.tsx +++ b/src/Pages/Admin/question/Model/Malty/Tags/MaltySelectTag.tsx @@ -36,11 +36,20 @@ const MaltySelectTag = ({ parent_index }: { parent_index: number }) => { const [t] = useTranslation(); const options = data?.data ?? []; - const additionalData = - options?.length < 1 && searchValue.length > 1 && !isLoading - ? [{ id: `new_${searchValue}`, name: searchValue }] - : []; + const additionalData = + 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 (

@@ -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 ? : t("practical.not_found")} @@ -65,7 +75,7 @@ const MaltySelectTag = ({ parent_index }: { parent_index: number }) => { handleBlur(); } }} - value={values ?? []} + value={value} />
); diff --git a/src/Pages/Admin/question/Model/formUtil.ts b/src/Pages/Admin/question/Model/formUtil.ts index 39b85fa..2a2fdaa 100644 --- a/src/Pages/Admin/question/Model/formUtil.ts +++ b/src/Pages/Admin/question/Model/formUtil.ts @@ -5,10 +5,10 @@ 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, content: objectToEdit?.content ?? "", @@ -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, }; }); diff --git a/src/Pages/Admin/question/Page.tsx b/src/Pages/Admin/question/Page.tsx index d4fe210..79245e3 100644 --- a/src/Pages/Admin/question/Page.tsx +++ b/src/Pages/Admin/question/Page.tsx @@ -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(); 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 + diff --git a/src/utils/removeStringKeys.ts b/src/utils/removeStringKeys.ts index 85f55ab..c433b15 100644 --- a/src/utils/removeStringKeys.ts +++ b/src/utils/removeStringKeys.ts @@ -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); + } } } }