add button for ux

This commit is contained in:
karimaldeen 2024-09-14 14:52:14 +03:00
parent dbdaa04fde
commit cd89ad405b
7 changed files with 109 additions and 13 deletions

View File

@ -4,14 +4,16 @@ import { useTranslation } from "react-i18next";
import { GoArrowSwitch } from "react-icons/go"; import { GoArrowSwitch } from "react-icons/go";
import { useObjectToEdit } from "../../zustand/ObjectToEditState"; import { useObjectToEdit } from "../../zustand/ObjectToEditState";
import { QUESTION_OBJECT_KEY } from "../../config/AppKey"; import { QUESTION_OBJECT_KEY } from "../../config/AppKey";
import { Popover } from "antd"; import { Popconfirm, Popover } from "antd";
import { CombinationKeyEnum } from "../../enums/CombinationKeyEnum"; import { CombinationKeyEnum } from "../../enums/CombinationKeyEnum";
import { PopconfirmProps } from "antd/lib";
const Header = () => { const Header = () => {
const [t] = useTranslation(); const [t] = useTranslation();
const { values, setFieldValue, setValues } = useFormikContext<any>(); const { values, setFieldValue, setValues } = useFormikContext<any>();
const { isBseQuestion, setIsBseQuestion } = useObjectToEdit(); const { isBseQuestion, setIsBseQuestion } = useObjectToEdit();
const { setSavedQuestionData } = useObjectToEdit(); const { setSavedQuestionData } = useObjectToEdit();
const handleChange = () => { const handleChange = () => {
setSavedQuestionData(null); setSavedQuestionData(null);
localStorage.removeItem(QUESTION_OBJECT_KEY); localStorage.removeItem(QUESTION_OBJECT_KEY);
@ -26,6 +28,14 @@ const Header = () => {
} }
}; };
const confirm: PopconfirmProps['onConfirm'] = (e) => {
console.log(e);
setTimeout(() => {
handleChange()
}, 500);
};
const content = ( const content = (
<div> <div>
<p> <p>
@ -52,7 +62,18 @@ const Header = () => {
</div> </div>
</article> </article>
<div> <div>
<GoArrowSwitch onClick={handleChange} className="m-2" /> <Popconfirm
title={t("header.this_will_un_do_all_your_changes")}
okText={t("practical.yes")}
cancelText={t("practical.no")}
onConfirm={()=>{confirm()}}
defaultOpen={false}
>
<GoArrowSwitch className="m-2" />
</Popconfirm>
{isBseQuestion || values?.isBase === 1 {isBseQuestion || values?.isBase === 1
? t("header.malty_exercise") ? t("header.malty_exercise")
: t("header.exercise")} : t("header.exercise")}

View File

@ -10,7 +10,7 @@ import {
} from "./Model/formUtil"; } from "./Model/formUtil";
import { useAddQuestion, useAddQuestionAsync } from "../../../api/Question"; import { useAddQuestion, useAddQuestionAsync } from "../../../api/Question";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { useNavigate, useParams } from "react-router-dom"; import { useLocation, useNavigate, useParams } from "react-router-dom";
import { ParamsEnum } from "../../../enums/params"; import { ParamsEnum } from "../../../enums/params";
import { useObjectToEdit } from "../../../zustand/ObjectToEditState"; import { useObjectToEdit } from "../../../zustand/ObjectToEditState";
@ -20,9 +20,12 @@ import BaseForm from "./Model/Malty/Form";
import ModelForm from "./Model/ModelForm"; import ModelForm from "./Model/ModelForm";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
import { Form, Formik } from "formik"; import { Form, Formik } from "formik";
import { MdOutlineArrowForwardIos } from "react-icons/md";
const AcceptModal = lazy(() => import("./Model/AcceptModal")); const AcceptModal = lazy(() => import("./Model/AcceptModal"));
const AddPage: React.FC = () => { const AddPage: React.FC = () => {
const location = useLocation();
const { mutateAsync,isLoading:LoadingAsync } = useAddQuestionAsync(); const { mutateAsync,isLoading:LoadingAsync } = useAddQuestionAsync();
const { mutate, isLoading, isSuccess } = useAddQuestion(); const { mutate, isLoading, isSuccess } = useAddQuestion();
const { isBseQuestion, setTagsSearch, objectToEdit, setSuccess } = const { isBseQuestion, setTagsSearch, objectToEdit, setSuccess } =
@ -157,6 +160,10 @@ const AddPage: React.FC = () => {
const navigate = useNavigate(); const navigate = useNavigate();
const handleNavigateToPage = () => {
const cleanedUrl = location.pathname?.replace("/Question/add", "");
navigate(cleanedUrl);
};
const handleCancel = () => { const handleCancel = () => {
navigate(-1); navigate(-1);
}; };
@ -170,6 +177,10 @@ const AddPage: React.FC = () => {
if (isBseQuestion) { if (isBseQuestion) {
return ( return (
<div className="QuestionPractical">
<header>
<MdOutlineArrowForwardIos onClick={handleNavigateToPage} /> {t("header.add_new_question")}
</header>
<div className="exercise_add"> <div className="exercise_add">
<Formik <Formik
@ -208,9 +219,17 @@ const AddPage: React.FC = () => {
<AcceptModal /> <AcceptModal />
</Suspense> </Suspense>
</div> </div>
</div>
); );
} }
return ( return (
<div className="QuestionPractical">
<header>
<MdOutlineArrowForwardIos onClick={handleNavigateToPage} /> {t("header.add_new_question")}
</header>
<div className="exercise_add"> <div className="exercise_add">
<Formik <Formik
enableReinitialize={true} enableReinitialize={true}
@ -253,6 +272,7 @@ const AddPage: React.FC = () => {
<AcceptModal /> <AcceptModal />
</Suspense> </Suspense>
</div> </div>
</div>
); );
}; };

View File

@ -26,6 +26,7 @@ import { Question } from "../../../types/Item";
import { toast } from "react-toastify"; import { toast } from "react-toastify";
import { deletePathSegments } from "../../../utils/deletePathSegments"; import { deletePathSegments } from "../../../utils/deletePathSegments";
import { Form, Formik } from "formik"; import { Form, Formik } from "formik";
import { MdOutlineArrowForwardIos } from "react-icons/md";
const EditPage: React.FC = () => { const EditPage: React.FC = () => {
const { subject_id, lesson_id, question_id } = useParams<ParamsEnum>(); const { subject_id, lesson_id, question_id } = useParams<ParamsEnum>();
@ -236,6 +237,11 @@ const handleValidateBaseQuestion = (values: any) => {
}; };
const handleNavigateToPage = () => {
const cleanedUrl = location.pathname.replace(/\/Question\/\d+$/, "");
navigate(cleanedUrl);
};
useEffect(() => { useEffect(() => {
if (isSuccess) { if (isSuccess) {
toast.success(t("validation.the_possess_done_successful")); toast.success(t("validation.the_possess_done_successful"));
@ -250,6 +256,13 @@ const handleValidateBaseQuestion = (values: any) => {
} }
if (objectToEdit?.isBase) { if (objectToEdit?.isBase) {
return ( return (
<div className="QuestionPractical">
<header>
<MdOutlineArrowForwardIos onClick={handleNavigateToPage} /> {t("header.edit_question")}
</header>
<div className="exercise_add"> <div className="exercise_add">
<Formik <Formik
onSubmit={handleSubmit} onSubmit={handleSubmit}
@ -289,10 +302,17 @@ const handleValidateBaseQuestion = (values: any) => {
</Formik> </Formik>
</div> </div>
</div>
); );
} }
return ( return (
<div className="QuestionPractical">
<header>
<MdOutlineArrowForwardIos onClick={handleNavigateToPage} /> {t("header.edit_question")}
</header>
<div className="exercise_add"> <div className="exercise_add">
<Formik <Formik
@ -338,6 +358,8 @@ const handleValidateBaseQuestion = (values: any) => {
</Formik> </Formik>
</div> </div>
</div>
); );
}; };

View File

@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next";
import { ABILITIES_ENUM } from "../../enums/abilities"; import { ABILITIES_ENUM } from "../../enums/abilities";
import useSetPageTitle from "../../Hooks/useSetPageTitle"; import useSetPageTitle from "../../Hooks/useSetPageTitle";
import useFilter from "../../Components/FilterField/components/useFilter"; import useFilter from "../../Components/FilterField/components/useFilter";
import { Button, Popconfirm } from "antd";
const Dummy = () => { const Dummy = () => {
const [t] = useTranslation(); const [t] = useTranslation();
@ -12,6 +13,7 @@ const Dummy = () => {
<div className="DummyHomePage"> <div className="DummyHomePage">
{/* <FilterButton /> {/* <FilterButton />
<FilterBody>karim</FilterBody> */} <FilterBody>karim</FilterBody> */}
</div> </div>
); );
}; };

View File

@ -10,12 +10,7 @@
} }
} }
} }
x
.Popover {
.ant-popover-inner {
padding: 0 !important;
}
}
.Color_type_checkbox.false { .Color_type_checkbox.false {
.ant-checkbox-checked .ant-checkbox-inner { .ant-checkbox-checked .ant-checkbox-inner {

View File

@ -41,7 +41,7 @@
// padding: 2vw; // padding: 2vw;
.exercise_add_main { .exercise_add_main {
background: var(--bg); background: var(--bg);
padding: 2vw; padding: 10px 2vw;
} }
.exercise_add_buttons { .exercise_add_buttons {
display: flex; display: flex;
@ -212,3 +212,37 @@
transform: translateY(55px); transform: translateY(55px);
z-index: -1; z-index: -1;
} }
.ant-popconfirm .ant-popconfirm-buttons{
display: flex;
align-items: center;
justify-content: center;
>{
flex: 1;
min-height: auto;
min-width: 30px;
}
.ant-btn{
min-height: 30px !important;
max-height: 30px !important;
min-width: 50px;
padding: 5px !important;
display: flex;
align-items: center;
justify-content: center ;
}
}
.QuestionPractical{
display: flex;
flex-direction: column;
background: var(--bg);
>header{
padding: 30px 2vw 10px 2vw;
}
}

View File

@ -125,7 +125,9 @@
"personal_information": "المعلومات الشخصية", "personal_information": "المعلومات الشخصية",
"address": "العنوان", "address": "العنوان",
"attachment": "المرفق", "attachment": "المرفق",
"subject_of_class": "مواد الصف" "subject_of_class": "مواد الصف",
"this_will_un_do_all_your_changes":"سوف يؤدي هذا إلى إلغاء جميع تغييراتك",
"edit_question":"تعديل سؤال"
}, },
"columns": { "columns": {
"id": "الرقم التعريفي", "id": "الرقم التعريفي",