From 32f87910ea471354c3b70217208ea2f344b1277c Mon Sep 17 00:00:00 2001 From: karimaldeen Date: Mon, 16 Sep 2024 15:29:53 +0300 Subject: [PATCH] fix tag --- .../ImageBoxField/ImageBoxField.tsx | 5 +- src/Components/CustomFields/SelectTag.tsx | 15 +++-- src/Components/exercise/Header.tsx | 15 +++++ src/Pages/Admin/question/AddPage.tsx | 9 +-- src/Pages/Admin/question/EditPage.tsx | 45 +++++++-------- .../question/Model/Field/ChoiceFields.tsx | 56 +++++++++++++------ .../Model/Malty/ChoiceField/ChoiceFields.tsx | 31 +++++++++- src/Pages/Admin/question/Model/Malty/Form.tsx | 5 ++ .../Malty/QuestionFIeld/QuestionFIeld.tsx | 36 +++++++++++- src/Pages/Home/Dummy.tsx | 8 ++- src/Styles/Layout/FilterLayout.scss | 12 ---- src/Styles/Layout/index.scss | 1 + src/translate/ar.json | 3 +- src/utils/removeStringKeys.ts | 2 +- 14 files changed, 177 insertions(+), 66 deletions(-) diff --git a/src/Components/CustomFields/ImageBoxField/ImageBoxField.tsx b/src/Components/CustomFields/ImageBoxField/ImageBoxField.tsx index 65ef83e..574815d 100644 --- a/src/Components/CustomFields/ImageBoxField/ImageBoxField.tsx +++ b/src/Components/CustomFields/ImageBoxField/ImageBoxField.tsx @@ -27,6 +27,7 @@ const ImageBoxField = ({ name }: any) => { const handleFileChange = (event: any) => { const file = event.target.files[0]; + if (file) { const maxSize = 2 * 1024 * 1024; @@ -42,6 +43,8 @@ const ImageBoxField = ({ name }: any) => { if (file) { generateImagePreview(file, setImagePreview); + console.log(file,"file"); + formik.setFieldValue(name, file); } }; @@ -55,7 +58,7 @@ const ImageBoxField = ({ name }: any) => { const handleCancel = () => { setImagePreview(""); - formik.setFieldValue(name, ""); + formik.setFieldValue(name, null); if (fileInputRef.current) { fileInputRef.current.value = ""; diff --git a/src/Components/CustomFields/SelectTag.tsx b/src/Components/CustomFields/SelectTag.tsx index eb4685b..aa91902 100644 --- a/src/Components/CustomFields/SelectTag.tsx +++ b/src/Components/CustomFields/SelectTag.tsx @@ -9,20 +9,27 @@ const SelectTag: React.FC = () => { const [searchValue, setSearchValue] = useState(""); const [fieldValue, setFieldValue] = useState(""); + const [NewAdditionalData, setNewAdditionalData] = useState({}) const formik = useFormikContext(); - const handleChange = (value: string[]) => { - console.log(value); - + const handleChange = (value: any,option:any) => { + const newSelectedOption = option?.pop() + const newObject = { + id:newSelectedOption?.id, + name:newSelectedOption?.name + } + setNewAdditionalData(newObject) formik.setFieldValue("tags", value); setSearchValue(""); setFieldValue(""); }; const handleSearch = useDebounce((value: string) => { + setSearchValue(value); }); const handleFieldChange = (value: string) => { + setFieldValue(value); }; @@ -46,7 +53,7 @@ const SelectTag: React.FC = () => { const value = formik?.values?.tags?.map((item: any) => item?.id ?? item) ?? []; - const AllOptions = [...options, ...additionalData]; + const AllOptions = [...options, ...additionalData,NewAdditionalData]; return (
diff --git a/src/Components/exercise/Header.tsx b/src/Components/exercise/Header.tsx index a524b5f..a896af2 100644 --- a/src/Components/exercise/Header.tsx +++ b/src/Components/exercise/Header.tsx @@ -13,7 +13,22 @@ const Header = () => { const { values, setFieldValue, setValues } = useFormikContext(); const { isBseQuestion, setIsBseQuestion } = useObjectToEdit(); const { setSavedQuestionData } = useObjectToEdit(); + console.log(values,"values"); + + const isEdited = ()=>{ + + if(isBseQuestion || values?.isBase === 1){ + + }else{ + const content = !!values?.content ; + const content_image = !!values?.content_image ; + const hint = !values?.hint ; + const answers = !values?.answers ; + } + + } + const handleChange = () => { setSavedQuestionData(null); localStorage.removeItem(QUESTION_OBJECT_KEY); diff --git a/src/Pages/Admin/question/AddPage.tsx b/src/Pages/Admin/question/AddPage.tsx index 0aa7986..ea94e47 100644 --- a/src/Pages/Admin/question/AddPage.tsx +++ b/src/Pages/Admin/question/AddPage.tsx @@ -115,7 +115,7 @@ const AddPage: React.FC = () => { return false ; } if(haveImageOrContent){ - toast.error("validation.one_of_image_and_content_should_be_enter") + toast.error(t("validation.one_of_image_and_content_should_be_enter")) return false } @@ -127,8 +127,9 @@ const AddPage: React.FC = () => { const haveAnswers = answers?.length > 0; const haveMoreThanOneAnswer = haveAnswers && answers?.length > 1; const haveOneAnswerRight = haveMoreThanOneAnswer && answers?.some((item: any) => item?.isCorrect === 1 || item.isCorrect === true); - const haveImageOrContent = haveOneAnswerRight && values?.answers?.some((item:any)=> !(item?.content) && !(item.content_image) ) - + const haveImageOrContent = haveOneAnswerRight && answers?.some((item:any)=> !(item?.content) && !(item.content_image) ) + console.log(haveImageOrContent,"haveImageOrContent"); + if (!haveAnswers) { toast.error(t("validation.it_should_have_more_than_one_answers")); return false; @@ -145,7 +146,7 @@ const AddPage: React.FC = () => { } if(haveImageOrContent){ - toast.error("validation.one_of_image_and_content_should_be_enter") + toast.error(t("validation.one_of_image_and_content_should_be_enter")) return false } diff --git a/src/Pages/Admin/question/EditPage.tsx b/src/Pages/Admin/question/EditPage.tsx index 7c6427c..a6e8fff 100644 --- a/src/Pages/Admin/question/EditPage.tsx +++ b/src/Pages/Admin/question/EditPage.tsx @@ -89,6 +89,8 @@ const EditPage: React.FC = () => { if (item?.id) { const itemToSend = structuredClone(item); const keysToRemove = ["content_image"]; + console.log(itemToSend,"itemToSend"); + const updatedObject = removeStringKeys(itemToSend, keysToRemove); console.log(updatedObject, "updatedObject"); @@ -96,16 +98,6 @@ const EditPage: React.FC = () => { const oldAnswers = [] as any; const newAnswers = [] as any; - if (updatedObject?.answers?.length > 0) { - const isValidAnswers = updatedObject?.answers?.some( - (answer: any) => answer?.isCorrect === 1, - ); - - // if(!isValidAnswers){ - // toast.error(t("validation.at_least_one_answer_should_be_correct")); - // return; - // } - } updatedObject?.answers?.forEach((item: any) => { if (item?.id) { oldAnswers.push({ ...item, isCorrect: item?.isCorrect ? 1 : 0 }); @@ -149,19 +141,17 @@ const EditPage: React.FC = () => { const oldAnswers = [] as any; const newAnswers = [] as any; - if (updatedObject?.answers?.length > 0) { - // const isValidAnswers = updatedObject?.answers?.some((answer:any) => answer?.isCorrect === 1 || answer?.isCorrect === true) - // const isValidAnswers2 = updatedObject?.answers?.filter((answer: any) => answer?.isCorrect === 1 || answer?.isCorrect === true ).length > 1; - // console.log(isValidAnswers2); - // console.log(isValidAnswers,"isValidAnswers"); - // if(!isValidAnswers || isValidAnswers2){ - // toast.error(t("validation.at_least_one_answer_should_be_correct")); - // return; - // } - } updatedObject?.answers?.forEach((item: any) => { if (item?.id) { - oldAnswers.push({ ...item, isCorrect: item?.isCorrect ? 1 : 0 }); + console.log(item,"item"); + const deletedImage = item?.content_image === null + if(deletedImage){ + oldAnswers.push({ ...item, isCorrect: item?.isCorrect ? 1 : 0, content_image:"" }); + + }else{ + oldAnswers.push({ ...item, isCorrect: item?.isCorrect ? 1 : 0 }); + + } } else { newAnswers.push({ ...item, isCorrect: item?.isCorrect ? 1 : 0 }); } @@ -181,7 +171,6 @@ const EditPage: React.FC = () => { }; const location = useLocation(); - const navigate = useNavigate(); const handleCancel = () => { navigate(-1); @@ -191,6 +180,7 @@ const EditPage: React.FC = () => { const handleValidateSingleQuestion = (values:any)=>{ const haveMoreThanOneAnswer = values?.answers?.length > 1; const haveOneAnswerRight = haveMoreThanOneAnswer && values?.answers?.some((item:any)=> item?.isCorrect === 1 || item.isCorrect === true ) + const haveImageOrContent = haveOneAnswerRight && values?.answers?.some((item:any)=> !(item?.content) && !(item.content_image) ) if(!haveMoreThanOneAnswer){ toast.error(t("validation.it_should_have_more_than_one_answers")) ; @@ -200,6 +190,10 @@ const EditPage: React.FC = () => { toast.error(t("validation.it_should_have_more_than_one_correct_answers")) ; return false ; } + if(haveImageOrContent){ + toast.error(t("validation.one_of_image_and_content_should_be_enter")) + return false + } } @@ -210,6 +204,7 @@ const handleValidateBaseQuestion = (values: any) => { const haveMoreThanOneAnswer = haveAnswers && answers?.length > 1; const haveOneAnswerRight = haveMoreThanOneAnswer && answers?.some((item: any) => item?.isCorrect === 1 || item.isCorrect === true); + const haveImageOrContent = haveOneAnswerRight && answers?.some((item:any)=> !(item?.content) && !(item.content_image) ) if (!haveAnswers) { toast.error(t("validation.it_should_have_more_than_one_answers")); @@ -226,6 +221,12 @@ const handleValidateBaseQuestion = (values: any) => { return false; } + if(haveImageOrContent){ + toast.error(t("validation.one_of_image_and_content_should_be_enter")) + return false + } + + return true; }); diff --git a/src/Pages/Admin/question/Model/Field/ChoiceFields.tsx b/src/Pages/Admin/question/Model/Field/ChoiceFields.tsx index cc35eab..89ea85a 100644 --- a/src/Pages/Admin/question/Model/Field/ChoiceFields.tsx +++ b/src/Pages/Admin/question/Model/Field/ChoiceFields.tsx @@ -26,6 +26,16 @@ const ChoiceFields = ({ index, data }: { index: number; data: Choice }) => { formik.setFieldValue("answers", updatedAnswers); }; + const values = formik?.values?.answers?.[index] ; + const handelCanDeleteAnswers = ()=>{ + const content = values?.content ; + const content_image = values?.content_image ; + if(!content && !content_image ){ + return true + } + return false + } + return ( <>
@@ -52,26 +62,38 @@ const ChoiceFields = ({ index, data }: { index: number; data: Choice }) => { name={index} type="Checkbox" /> + {handelCanDeleteAnswers() ? +

{handleDeleteChoice()}}> + {t("header.delete_choice")} + +

+ : {handleDeleteChoice()}} - defaultOpen={false} - - > -

- {t("header.delete_choice")} - -

+ title={t("header.this_will_un_do_all_your_changes")} + okText={t("practical.yes")} + cancelText={t("practical.no")} + onConfirm={()=>{handleDeleteChoice()}} + defaultOpen={false} - -
+ > +

+ {t("header.delete_choice")} + +

+ + + + } +
diff --git a/src/Pages/Admin/question/Model/Malty/ChoiceField/ChoiceFields.tsx b/src/Pages/Admin/question/Model/Malty/ChoiceField/ChoiceFields.tsx index 35940e2..a3f12a1 100644 --- a/src/Pages/Admin/question/Model/Malty/ChoiceField/ChoiceFields.tsx +++ b/src/Pages/Admin/question/Model/Malty/ChoiceField/ChoiceFields.tsx @@ -42,6 +42,19 @@ const ChoiceFields = ({ formik.setFieldValue(`Questions[${parent_index}].answers`, updatedAnswers); }; + const values = formik.values.Questions?.[parent_index]?.answers?.[index] ; + console.log(values,"values"); + + const handelCanDeleteAnswers = ()=>{ + const content = values?.content ; + const content_image = values?.content_image ; + if(!content && !content_image ){ + return true + } + return false + } + + return ( <>
@@ -71,7 +84,19 @@ const ChoiceFields = ({ parent_index={parent_index} /> -{handleDeleteChoice()}} > + {t("header.delete_choice")} + +

+ : + + + + } + +
diff --git a/src/Pages/Admin/question/Model/Malty/Form.tsx b/src/Pages/Admin/question/Model/Malty/Form.tsx index 8effc15..34088d7 100644 --- a/src/Pages/Admin/question/Model/Malty/Form.tsx +++ b/src/Pages/Admin/question/Model/Malty/Form.tsx @@ -94,6 +94,11 @@ const Form = () => { } }, [Success]); + + + + + return (
diff --git a/src/Pages/Admin/question/Model/Malty/QuestionFIeld/QuestionFIeld.tsx b/src/Pages/Admin/question/Model/Malty/QuestionFIeld/QuestionFIeld.tsx index 13b7aed..813d106 100644 --- a/src/Pages/Admin/question/Model/Malty/QuestionFIeld/QuestionFIeld.tsx +++ b/src/Pages/Admin/question/Model/Malty/QuestionFIeld/QuestionFIeld.tsx @@ -29,6 +29,22 @@ const QuestionFIeld = ({ index, data }: { index: number; data: Choice }) => { formik.setFieldValue(`Questions`, updatedAnswers); }; + + + const values = formik.values.Questions?.[index] ; + console.log(values,"values"); + + const handelCanDeleteAnswers = ()=>{ + const content = values?.content ; + const content_image = values?.content_image ; + if(!content && !content_image ){ + return true + } + return false + } + + + return ( <>
@@ -48,7 +64,22 @@ const QuestionFIeld = ({ index, data }: { index: number; data: Choice }) => { -
+ {handelCanDeleteAnswers() ? +
+

{handleDeleteQuestion()}}> + {t("header.delete_question")} + +

+
+ + : + +
+ {
+ } + +
diff --git a/src/Pages/Home/Dummy.tsx b/src/Pages/Home/Dummy.tsx index 6b178d0..34b0596 100644 --- a/src/Pages/Home/Dummy.tsx +++ b/src/Pages/Home/Dummy.tsx @@ -1,6 +1,7 @@ import React from "react"; import { useTranslation } from "react-i18next"; import useFilter from "../../Components/FilterField/components/useFilter"; +import { Select } from "antd"; const Dummy = () => { const [t] = useTranslation(); @@ -12,8 +13,11 @@ const Dummy = () => { karim - - karim2 +