From ff63cb0bec9812b873d027348738748776ef1afd Mon Sep 17 00:00:00 2001 From: Majd_dk Date: Tue, 30 Sep 2025 12:57:17 +0300 Subject: [PATCH] #81 feature on Reseller Dashboard --- src/Hooks/useStepsModalReseller.ts | 37 +++++++++++++ src/Pages/ReSeller/Sales/Model/AddModel.tsx | 1 + .../ReSeller/Sales/Model/LayoutModel.tsx | 3 +- src/Pages/ReSeller/Sales/Model/ModelBody.tsx | 21 ++------ .../ReSeller/Sales/Model/SalesModelForm.tsx | 25 ++++++--- .../ReSeller/Sales/Model/SubmitModelForm.tsx | 53 +++++++++++++++---- .../Sales/Model/ValidationModelForm.tsx | 18 ++++--- src/Styles/Antd/Input.scss | 3 ++ src/Styles/Antd/Model.scss | 7 ++- src/Styles/Antd/index.scss | 1 + src/Styles/App/classNames.scss | 23 ++++++++ src/translate/ar.json | 2 + src/utils/onKeyDown.ts | 6 +++ 13 files changed, 157 insertions(+), 43 deletions(-) create mode 100644 src/Hooks/useStepsModalReseller.ts create mode 100644 src/Styles/Antd/Input.scss create mode 100644 src/utils/onKeyDown.ts diff --git a/src/Hooks/useStepsModalReseller.ts b/src/Hooks/useStepsModalReseller.ts new file mode 100644 index 0000000..c70d922 --- /dev/null +++ b/src/Hooks/useStepsModalReseller.ts @@ -0,0 +1,37 @@ +import { useFormikContext } from "formik" +import { useEffect, useState } from "react" +import { useObjectToEdit } from "../zustand/ObjectToEditState"; +import { useModalState } from "../zustand/Modal"; +import { useQueryClient } from "react-query"; + +export const useStepsModalReseller = () =>{ + + const { setObjectToEdit } = useObjectToEdit(); + const formik = useFormikContext(); + const { setIsOpen } = useModalState((state) => state); + const queryClient = useQueryClient(); + const [biggestModalIndex,setBiggestModalIndex] = useState(0) + const currentModalIndex = formik?.values?.currentModalIndex + + + useEffect(()=>{ + const modalIndex = formik?.values?.currentModalIndex + modalIndex > biggestModalIndex && setBiggestModalIndex(modalIndex) + },[formik?.values?.currentModalIndex]) + + const handleCloseModel = () => { + formik?.resetForm(); + setIsOpen(""); + formik?.setFieldValue("currentModalIndex", 0); + setObjectToEdit({}); + queryClient.resetQueries(); + setBiggestModalIndex(0) + }; + + + const handleClickOnStep = (index:number) =>{ + if(index > biggestModalIndex)return + formik?.setFieldValue("currentModalIndex", index); + } + return {handleCloseModel , handleClickOnStep , currentModalIndex} +} \ No newline at end of file diff --git a/src/Pages/ReSeller/Sales/Model/AddModel.tsx b/src/Pages/ReSeller/Sales/Model/AddModel.tsx index bfd5723..5bd73a6 100644 --- a/src/Pages/ReSeller/Sales/Model/AddModel.tsx +++ b/src/Pages/ReSeller/Sales/Model/AddModel.tsx @@ -19,6 +19,7 @@ const AddModel: React.FC = () => { getInitialValues={getInitialValues(objectToEdit)} getValidationSchema={getValidationSchema} canClearObjectToEdit = {false} + width="70%" > diff --git a/src/Pages/ReSeller/Sales/Model/LayoutModel.tsx b/src/Pages/ReSeller/Sales/Model/LayoutModel.tsx index bddf5c7..09e6643 100644 --- a/src/Pages/ReSeller/Sales/Model/LayoutModel.tsx +++ b/src/Pages/ReSeller/Sales/Model/LayoutModel.tsx @@ -53,7 +53,6 @@ const LayoutModel = ({ }, [setIsOpen, status]); const handleCancel = () => { - console.log(true) setIsOpen(""); canClearObjectToEdit && setObjectToEdit({}); formik.resetForm(); @@ -68,7 +67,7 @@ const LayoutModel = ({ width={width} footer={null} open={isOpen === ModelEnum} - onCancel={handleCancel} + // onCancel={handleCancel} > { - const { setObjectToEdit } = useObjectToEdit(); - const formik = useFormikContext(); - const { setIsOpen } = useModalState((state) => state); - const queryClient = useQueryClient(); - - const handleCloseModel = () => { - formik?.resetForm(); - setIsOpen(""); - formik?.setFieldValue("currentModalIndex", 0); - setObjectToEdit({}); - queryClient.resetQueries(); - }; + const { handleCloseModel , handleClickOnStep , currentModalIndex} = useStepsModalReseller() const Forms = { [salesModelEnum.Number]: ( @@ -38,6 +24,9 @@ const ModelBody = () => { {Forms[salesModelEnum.Number]} {Forms[salesModelEnum.Package]} {Forms[salesModelEnum.Submit]} +
+ {[...Array(3)].map((_:null,index:number) =>
handleClickOnStep(index)} className={`circle ${currentModalIndex == index ? "active_circle" :""}`}>{index + 1}
)} +
); }; diff --git a/src/Pages/ReSeller/Sales/Model/SalesModelForm.tsx b/src/Pages/ReSeller/Sales/Model/SalesModelForm.tsx index 03a50fc..46b02b5 100644 --- a/src/Pages/ReSeller/Sales/Model/SalesModelForm.tsx +++ b/src/Pages/ReSeller/Sales/Model/SalesModelForm.tsx @@ -6,6 +6,7 @@ import { QueryStatusEnum } from "../../../../enums/QueryStatus"; import { Button, Divider, Spin } from "antd"; import { MdCancel } from "react-icons/md"; import { ModalBodyProps } from "../../../../types/Sales"; +import { onEnterDown } from "../../../../utils/onKeyDown"; const Form = ({ handleCloseModel = () => {} }: ModalBodyProps) => { const { objectToEdit } = useObjectToEdit(); @@ -29,7 +30,10 @@ const Form = ({ handleCloseModel = () => {} }: ModalBodyProps) => { ) })); - + const isDisabled = status === QueryStatusEnum.LOADING || !formik.dirty || !values?.phone_number + const handleKeyDown = (e:any) =>{ + onEnterDown(e,handleNext,isDisabled) + } return ( values?.currentModalIndex == 1 && (
@@ -41,7 +45,8 @@ const Form = ({ handleCloseModel = () => {} }: ModalBodyProps) => {
-
+ +
{/* */}
@@ -51,13 +56,23 @@ const Form = ({ handleCloseModel = () => {} }: ModalBodyProps) => { {t("models.course")}:

{student_info?.grade_name}

+ +
+ {t("models.mobile_number")}:

{student_info?.phone_number}

+
+
+
@@ -67,11 +82,7 @@ const Form = ({ handleCloseModel = () => {} }: ModalBodyProps) => { +
-
+
{/* */} - +
{student_info?.first_name + " " + student_info?.last_name}
{t("models.course")}:

{student_info?.grade_name}

+
+ +
+ {t("models.mobile_number")}:

{student_info?.phone_number}

+
{} }: ModalBodyProps) => { option={PackagesInfo} disabled allowClear={false} + onKeyDown={handleKeyDown} />
-
+ +
+
) ); diff --git a/src/Pages/ReSeller/Sales/Model/ValidationModelForm.tsx b/src/Pages/ReSeller/Sales/Model/ValidationModelForm.tsx index 7234250..6d8924d 100644 --- a/src/Pages/ReSeller/Sales/Model/ValidationModelForm.tsx +++ b/src/Pages/ReSeller/Sales/Model/ValidationModelForm.tsx @@ -9,6 +9,7 @@ import { MdCancel } from "react-icons/md"; import { useEffect, useState } from "react"; import { useGetStudentByPhone } from "../../../../api/sales"; import { ModalBodyProps } from "../../../../types/Sales"; +import { onEnterDown } from "../../../../utils/onKeyDown"; const Form = ({ handleCloseModel = () => {} }: ModalBodyProps) => { const [triggerApi, setTriggerApi] = useState(false); @@ -44,6 +45,13 @@ const Form = ({ handleCloseModel = () => {} }: ModalBodyProps) => { } }, [isSuccess,isError,status]); + const isDisabled = status === QueryStatusEnum.LOADING || + !formik.dirty || + !values?.phone_number + + const handleKeyDown = (e:any) =>{ + onEnterDown(e,handleNext,isDisabled) + } return ( values?.currentModalIndex == 0 && (
@@ -60,6 +68,7 @@ const Form = ({ handleCloseModel = () => {} }: ModalBodyProps) => { placeholder="phone_number" label="phone_number" name="phone_number" + onKeyDown={handleKeyDown} /> @@ -70,12 +79,9 @@ const Form = ({ handleCloseModel = () => {} }: ModalBodyProps) => {