diff --git a/src/Components/Utils/Filter/FilterState.ts b/src/Components/Utils/Filter/FilterState.ts index 53d0bcd..ba9ad89 100644 --- a/src/Components/Utils/Filter/FilterState.ts +++ b/src/Components/Utils/Filter/FilterState.ts @@ -1,24 +1,18 @@ import { create } from "zustand"; interface FilterState { - filterState: any[]; + filterState: any; setFilterState: (data: any) => void; clearFilterState: () => void; setWithOldValue: (data: any) => void; - setInitialValue: (data: any) => void; } export const useFilterState = create((set, get) => ({ - filterState: [], + filterState: {}, setFilterState: (data) => set(() => ({ filterState: data })), clearFilterState: () => set(() => ({ filterState: [] })), setWithOldValue: (data) => set((state) => ({ filterState: [...state.filterState, data] })), - setInitialValue: (data) => { - if (get().filterState.length < 1) { - set(() => ({ filterState: data })); - } - }, })); // import { create } from "zustand"; diff --git a/src/Components/ValidationField/View/SearchField.tsx b/src/Components/ValidationField/View/SearchField.tsx index 5920dc1..3f8729c 100644 --- a/src/Components/ValidationField/View/SearchField.tsx +++ b/src/Components/ValidationField/View/SearchField.tsx @@ -48,8 +48,14 @@ const SearchField = ({ } }, [page]); - const SelectableChange = (value: any) => { - formik?.setFieldValue(name, value); + const SelectableChange = (value: any,option:any) => { + if(isMulti){ + formik?.setFieldValue(name, option ?? []); + }else{ + + formik?.setFieldValue(name, option ?? {}); + } + const isCleared = value?.length === 0 || !value; if (isCleared) { @@ -90,8 +96,8 @@ const SearchField = ({ const handleScroll = (event: any) => { const target = event.target; const isAtBottom = - target.scrollHeight === target.scrollTop + target.clientHeight; - + target.scrollHeight - 10 <= Math.floor(target.scrollTop + target.clientHeight); + if (isAtBottom && canChangePage && PageName && page) { console.log("Scrolled to the last option!"); let newPage = page + 1; @@ -103,7 +109,11 @@ const SearchField = ({ console.log(AllPagesOption); console.log(option, "option"); - + const value = isMulti ? formik.values[name]?.map((item:any)=>{ + return item?.name ?? item + }) : formik.values[name]?.["name"] ?? "" + console.log(value); + return (
diff --git a/src/Pages/Admin/Coupon/Model/AddModel.tsx b/src/Pages/Admin/Coupon/Model/AddModel.tsx index 755c221..ec1012b 100644 --- a/src/Pages/Admin/Coupon/Model/AddModel.tsx +++ b/src/Pages/Admin/Coupon/Model/AddModel.tsx @@ -6,6 +6,7 @@ import { QueryStatusEnum } from "../../../../enums/QueryStatus"; import ModelForm from "./ModelForm"; import { useAddCoupon } from "../../../../api/Coupon"; import dayjs from "dayjs"; +import { ConvertArrayToArrayOfIds } from "../../../../utils/ConvertArrayToArrayOfIds"; const AddModel: React.FC = () => { const { mutate, status } = useAddCoupon(); @@ -16,7 +17,10 @@ const AddModel: React.FC = () => { console.log(due_to); mutate({ ...values, - due_to + due_to, + grade_id:values?.grade_id?.id + + }); }; return ( diff --git a/src/Pages/Admin/Coupon/Model/EditModel.tsx b/src/Pages/Admin/Coupon/Model/EditModel.tsx index 547f1c6..73671ae 100644 --- a/src/Pages/Admin/Coupon/Model/EditModel.tsx +++ b/src/Pages/Admin/Coupon/Model/EditModel.tsx @@ -6,7 +6,6 @@ import ModelForm from "./ModelForm"; import { QueryStatusEnum } from "../../../../enums/QueryStatus"; import { useObjectToEdit } from "../../../../zustand/ObjectToEditState"; import { useUpdateCoupon } from "../../../../api/Coupon"; -import { handelImageState } from "../../../../utils/DataToSendImageState"; const EditModel: React.FC = () => { const { mutate, status } = useUpdateCoupon(); @@ -14,7 +13,7 @@ const EditModel: React.FC = () => { const handleSubmit = (values: any) => { const due_to = typeof values?.due_to === "string" ? values?.due_to : values?.due_to.format("YYYY-MM-DD HH:mm:ss") - const Data_to_send = { ...values , due_to }; + const Data_to_send = { ...values , due_to, grade_id:values?.grade_id?.id ?? "" }; mutate(Data_to_send); }; diff --git a/src/Pages/Admin/Coupon/Model/ModelForm.tsx b/src/Pages/Admin/Coupon/Model/ModelForm.tsx index ad316f7..9cb89f5 100644 --- a/src/Pages/Admin/Coupon/Model/ModelForm.tsx +++ b/src/Pages/Admin/Coupon/Model/ModelForm.tsx @@ -18,7 +18,7 @@ const Form = ({Hide = false}:{Hide?:boolean }) => { }); const GradeOption = Grade?.data ?? [] const canChangeGradePage = !!Grade?.links?.next; - const GradePage = Grade?.meta?.currentPage; + const GradePage = Grade?.meta?.current_page; return ( diff --git a/src/Pages/Admin/Coupon/Model/formUtil.ts b/src/Pages/Admin/Coupon/Model/formUtil.ts index 232a828..4a09c27 100644 --- a/src/Pages/Admin/Coupon/Model/formUtil.ts +++ b/src/Pages/Admin/Coupon/Model/formUtil.ts @@ -11,7 +11,7 @@ export const getInitialValues = ( amount: objectToEdit?.amount ?? "", code: objectToEdit?.code ?? "", due_to: objectToEdit?.due_to ? dayjs(objectToEdit?.due_to,"YYYY-MM-DD HH:mm:ss") : "", - grade_id: objectToEdit?.grade_id ?? "", + grade_id: objectToEdit?.grade ?? "", }; }; diff --git a/src/Pages/Admin/Manager/Model/AddModel.tsx b/src/Pages/Admin/Manager/Model/AddModel.tsx index b9bf3fd..6826a0d 100644 --- a/src/Pages/Admin/Manager/Model/AddModel.tsx +++ b/src/Pages/Admin/Manager/Model/AddModel.tsx @@ -12,6 +12,7 @@ const AddModel: React.FC = () => { const handleSubmit = (values: any) => { mutate({ ...values, + grade_id:values?.grade_id?.id }); }; return ( diff --git a/src/Pages/Admin/Manager/Model/EditModel.tsx b/src/Pages/Admin/Manager/Model/EditModel.tsx index 2710154..2e77321 100644 --- a/src/Pages/Admin/Manager/Model/EditModel.tsx +++ b/src/Pages/Admin/Manager/Model/EditModel.tsx @@ -12,7 +12,7 @@ const EditModel: React.FC = () => { const { objectToEdit } = useObjectToEdit((state) => state); const handleSubmit = (values: any) => { - const Data_to_send = { ...values }; + const Data_to_send = { ...values, grade_id:values?.grade_id?.id }; mutate(Data_to_send); }; diff --git a/src/Pages/Admin/Manager/Model/ModelForm.tsx b/src/Pages/Admin/Manager/Model/ModelForm.tsx index cbc4fcf..b216887 100644 --- a/src/Pages/Admin/Manager/Model/ModelForm.tsx +++ b/src/Pages/Admin/Manager/Model/ModelForm.tsx @@ -13,7 +13,7 @@ const Form = ({ isEdit = false }: { isEdit?: boolean }) => { }); const GradeOption = Grade?.data ?? []; const canChangeGradePage = !!Grade?.links?.next; - const GradePage = Grade?.meta?.currentPage; + const GradePage = Grade?.meta?.current_page; const sex = [ { name: "male", id: "male" }, diff --git a/src/Pages/Admin/QuestionBank/Model/FilterForm.tsx b/src/Pages/Admin/QuestionBank/Model/FilterForm.tsx index cf8aca5..5a805af 100644 --- a/src/Pages/Admin/QuestionBank/Model/FilterForm.tsx +++ b/src/Pages/Admin/QuestionBank/Model/FilterForm.tsx @@ -30,8 +30,9 @@ const FilterForm = () => { }); const GradeOption = Grade?.data ?? [] const canChangeGradePage = !!Grade?.links?.next; - const GradePage = Grade?.meta?.currentPage; - + const GradePage = Grade?.meta?.current_page; + console.log(Grade?.meta?.current_page); + /// subject_id const { data: Subject, isLoading: isLoadingSubject } = useGetAllSubject({ @@ -40,7 +41,7 @@ const FilterForm = () => { }); const SubjectOption = Subject?.data ?? [] const canChangeSubjectPage = !!Subject?.links?.next; - const SubjectPage = Subject?.meta?.currentPage; + const SubjectPage = Subject?.meta?.current_page; /// unit_id const { data: Unit, isLoading: isLoadingUnit } = useGetAllUnit({ @@ -49,7 +50,7 @@ const FilterForm = () => { }); const UnitOption = Unit?.data ?? [] const canChangeUnitPage = !!Unit?.links?.next; - const UnitPage = Unit?.meta?.currentPage; + const UnitPage = Unit?.meta?.current_page; /// lessonsIds const { data: Lesson, isLoading: isLoadingLesson } = useGetAllLesson({ @@ -58,7 +59,7 @@ const FilterForm = () => { }); const LessonOption = Lesson?.data ?? [] const canChangeLessonPage = !!Lesson?.links?.next; - const LessonPage = Lesson?.meta?.currentPage; + const LessonPage = Lesson?.meta?.current_page; /// TagsIds @@ -68,7 +69,7 @@ const FilterForm = () => { }); const TagOption = Tag?.data ?? [] const canChangeTagPage = !!Tag?.links?.next; - const TagPage = Tag?.meta?.currentPage; + const TagPage = Tag?.meta?.current_page; return ( @@ -88,6 +89,7 @@ const FilterForm = () => { canChangePage={canChangeGradePage} PageName={"GradeCurrentPage"} page={GradePage} + /> diff --git a/src/Pages/Admin/QuestionBank/Page.tsx b/src/Pages/Admin/QuestionBank/Page.tsx index becb3b5..4bc0890 100644 --- a/src/Pages/Admin/QuestionBank/Page.tsx +++ b/src/Pages/Admin/QuestionBank/Page.tsx @@ -7,7 +7,6 @@ import { useDeleteQuestion } from "../../../api/Question"; import PageHeader from "../../../Layout/Dashboard/PageHeader"; import FilterLayout from "../../../Layout/Dashboard/FilterLayout"; import FilterForm from "./Model/FilterForm"; -import { canAddQuestionBank } from "../../../utils/hasAbilityFn"; const Table = lazy(() => import("./Table")); const DeleteModalForm = lazy( diff --git a/src/Pages/Admin/QuestionBank/Table.tsx b/src/Pages/Admin/QuestionBank/Table.tsx index 44637a3..12fc29f 100644 --- a/src/Pages/Admin/QuestionBank/Table.tsx +++ b/src/Pages/Admin/QuestionBank/Table.tsx @@ -5,6 +5,7 @@ import { useGetAllQuestion } from "../../../api/Question"; import { useFilterState } from "../../../Components/Utils/Filter/FilterState"; import { useObjectToEdit } from "../../../zustand/ObjectToEditState"; import { useFilterStateState } from "../../../zustand/Filter"; +import { ConvertArrayToArrayOfIds } from "../../../utils/ConvertArrayToArrayOfIds"; const App: React.FC = () => { const { filterState } = useFilterState(); @@ -17,6 +18,11 @@ const App: React.FC = () => { nullable_parent:"null", pagination: true, ...filterState, + tagsIds:ConvertArrayToArrayOfIds(filterState?.tagsIds) , + grade_id:filterState?.grade_id?.id, + subject_id:filterState?.subject_id?.id, + unit_id:filterState?.unit_id?.id, + lessonsIds:ConvertArrayToArrayOfIds(filterState?.lessonsIds), content:Filter?.content, sort_by, diff --git a/src/Pages/Admin/QuestionBank/useTableColumns.tsx b/src/Pages/Admin/QuestionBank/useTableColumns.tsx index e6912b4..fdadc72 100644 --- a/src/Pages/Admin/QuestionBank/useTableColumns.tsx +++ b/src/Pages/Admin/QuestionBank/useTableColumns.tsx @@ -69,19 +69,66 @@ export const useColumns = () => { }, ellipsis: true, }, - { - title: `${t("columns.hint")}`, - dataIndex: "hint", - key: "hint", + title: `${t("columns.subject")}`, + dataIndex: "lessons", + key: "lessons", align: "center", render: (text, record) => { + const lesson = record?.lessons?.[0] ; + const unit = lesson?.unit; + const subject = unit?.subject; + return ( - <>{record?.hint ?? "_"} - ); + <> {subject?.name} + ) }, ellipsis: true, }, + { + title: `${t("columns.unit")}`, + dataIndex: "lessons", + key: "lessons", + align: "center", + render: (text, record) => { + const lesson = record?.lessons?.[0] ; + const unit = lesson?.unit; + return ( + <> {unit?.name} + ) + }, + ellipsis: true, + }, + + { + title: `${t("columns.lesson")}`, + dataIndex: "lessons", + key: "lessons", + align: "center", + render: (text, record) => { + const lesson = record?.lessons?.[0] ; + console.log(lesson,"lesson"); + + return ( + <> {lesson?.name} + ) + }, + ellipsis: true, + }, + + + // { + // title: `${t("columns.hint")}`, + // dataIndex: "hint", + // key: "hint", + // align: "center", + // render: (text, record) => { + // return ( + // <>{record?.hint ?? "_"} + // ); + // }, + // ellipsis: true, + // }, { title: `${t("columns.tags")}`, dataIndex: "tags", diff --git a/src/Pages/Admin/Student/Model/ModelForm.tsx b/src/Pages/Admin/Student/Model/ModelForm.tsx index cbc4fcf..b216887 100644 --- a/src/Pages/Admin/Student/Model/ModelForm.tsx +++ b/src/Pages/Admin/Student/Model/ModelForm.tsx @@ -13,7 +13,7 @@ const Form = ({ isEdit = false }: { isEdit?: boolean }) => { }); const GradeOption = Grade?.data ?? []; const canChangeGradePage = !!Grade?.links?.next; - const GradePage = Grade?.meta?.currentPage; + const GradePage = Grade?.meta?.current_page; const sex = [ { name: "male", id: "male" }, diff --git a/src/Pages/Admin/Student/Table.tsx b/src/Pages/Admin/Student/Table.tsx index ebf9fe5..845eda8 100644 --- a/src/Pages/Admin/Student/Table.tsx +++ b/src/Pages/Admin/Student/Table.tsx @@ -19,6 +19,7 @@ const App: React.FC = () => { sort_by, pagination: true, ...filterState, + grade_id:filterState?.grade_id?.id, }); return ; diff --git a/src/Pages/Admin/question/AddPage.tsx b/src/Pages/Admin/question/AddPage.tsx index 96c6a7a..8aaacb0 100644 --- a/src/Pages/Admin/question/AddPage.tsx +++ b/src/Pages/Admin/question/AddPage.tsx @@ -9,10 +9,7 @@ import { useObjectToEdit } from "../../../zustand/ObjectToEditState"; import { Question } from "../../../types/Item"; import BaseFormContainer from "./Model/AddForm/BaseForm"; import FormContainer from "./Model/AddForm/Form"; -import { handleValidateBaseQuestion, handleValidateSingleQuestion } from "./Model/AddForm/ValidationFn"; -import useUnsavedChangesWarning from "../../../Hooks/useUnsavedChangesWarning"; -import { useFormikContext } from "formik"; - +import { handleValidateBaseQuestion, handleValidateSingleQuestion } from "./Model/ValidationFn"; const AddPage: React.FC = () => { const { mutateAsync, isLoading: LoadingAsync } = useAddQuestionAsync(); diff --git a/src/Pages/Admin/question/EditPage.tsx b/src/Pages/Admin/question/EditPage.tsx index e2f0517..57e5cb6 100644 --- a/src/Pages/Admin/question/EditPage.tsx +++ b/src/Pages/Admin/question/EditPage.tsx @@ -19,28 +19,30 @@ import { toast } from "react-toastify"; import { deletePathSegments } from "../../../utils/deletePathSegments"; import BaseFormContainer from "./Model/EditForm/BaseFormContainer"; import FormContainer from "./Model/EditForm/FormContainer"; +import { handleValidateBaseQuestion, handleValidateSingleQuestion } from "./Model/ValidationFn"; const EditPage: React.FC = () => { const { subject_id, lesson_id, question_id } = useParams(); - const { isBseQuestion, setIsBseQuestion, setTagsSearch, DeletedQuestions, ShowHint, setShowHint, ShowLatexOption, setShowLatexOption } = + const { isBseQuestion, setIsBseQuestion, setTagsSearch, DeletedQuestions,setObjectToEdit } = useObjectToEdit(); - const { mutate, isSuccess, isLoading } = useUpdateQuestion(); + const { mutate, isSuccess ,isLoading:isLoadingUpdate } = useUpdateQuestion(); const { mutate: DeleteQuestion } = useDeleteQuestion(); - const { mutate: mutateAdd, isLoading: LoadingAsync } = useAddQuestion(); + const { mutate: mutateAdd } = useAddQuestion(); - const { data, isLoading: dataLoading } = useGetAllQuestion({ + const { data, isLoading: dataLoading ,isRefetching } = useGetAllQuestion({ show: question_id, }); - const { data: Questions, isLoading: QuestionsDataLoading } = + const { data: Questions, isLoading: QuestionsDataLoading,isRefetching:isRefetchingParent } = useGetAllQuestion({ parent_id: question_id, isPaginated: false }); const objectToEdit = { ...data?.data, Questions: Questions?.data }; - + console.log(objectToEdit); + useEffect(() => { if (objectToEdit?.isBase && isBseQuestion !== true) { setIsBseQuestion(true); @@ -175,136 +177,39 @@ const EditPage: React.FC = () => { } }; - const location = useLocation(); const navigate = useNavigate(); - const handleValidateSingleQuestion = (values: any, isValid: boolean, handleSubmit: 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)) - const content = values.content; - const content_image = values.content_image; - const haveContentOrContentImage = !!content || !!content_image; - console.log(haveImageOrContent, "haveImageOrContent"); - if (!haveContentOrContentImage) { - toast.error(`${t("validation.one_of_image_and_content_should_be_enter_in_question")}`); - return false; - } - - if (!haveMoreThanOneAnswer) { - toast.error(t("validation.it_should_have_more_than_one_answers")); - return false; - } - if (!haveOneAnswerRight) { - 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_in_answer")) - return false - } - - console.log(1); - - if (isValid) { - handleSubmit(values) - } - - } - const handleValidateBaseQuestion = (values: any, isValid: boolean, handleSubmit: any) => { - const content = values.content; - const content_image = values.content_image; - const haveContentOrContentImage = !!content || !!content_image; - console.log(2); - - if (!haveContentOrContentImage) { - toast.error(`${t("validation.one_of_image_and_content_should_be_enter_in_question")}`); - return false; - } - console.log(1); - - const isValidate = values?.Questions?.every((Question: any, QuestionsIndex: number) => { - - - const content = Question.content; - const content_image = Question.content_image; - const haveContentOrContentImage = !!content || !!content_image; - if (!haveContentOrContentImage) { - toast.error(`${t("validation.one_of_image_and_content_should_be_enter_in_question")}`); - return false; - } - - - //// answers - const answers = Question?.answers; - 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 && answers?.some((item: any) => !(item?.content) && !(item.content_image)) - - - - - if (!haveAnswers) { - toast.error(t("validation.it_should_have_more_than_one_answers")); - return false; - } - - if (!haveMoreThanOneAnswer) { - toast.error(t("validation.it_should_have_more_than_one_answers")); - return false; - } - - if (!haveOneAnswerRight) { - 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_in_answer")) - return false - } - - return true - }); - - console.log(1); - - if (isValid && isValidate) { - console.log(2); - handleSubmit(values) - } - - }; useEffect(() => { - console.log(location.pathname); - console.log(deletePathSegments(location.pathname, 2)); if (isSuccess) { - toast.success(t("validation.the_possess_done_successful")); + // toast.success(t("validation.the_possess_done_successful")); + setObjectToEdit(null) navigate(-1); - } }, [isSuccess]); - const Loading = LoadingAsync || isLoading - - if (dataLoading || QuestionsDataLoading) { + console.log(objectToEdit); + + + const Loading = QuestionsDataLoading || dataLoading || isRefetchingParent || isRefetching + console.log(Loading); + const LoadingButton = isLoadingUpdate + if (Loading) { return ; } if (objectToEdit?.isBase) { return ( - + ); } return ( - + ); }; diff --git a/src/Pages/Admin/question/FilterForm.tsx b/src/Pages/Admin/question/FilterForm.tsx index 48f546e..90ddc46 100644 --- a/src/Pages/Admin/question/FilterForm.tsx +++ b/src/Pages/Admin/question/FilterForm.tsx @@ -28,7 +28,7 @@ const FilterForm = () => { }); const GradeOption = Grade?.data ?? [] const canChangeGradePage = !!Grade?.links?.next; - const GradePage = Grade?.meta?.currentPage; + const GradePage = Grade?.meta?.current_page; /// subject_id @@ -38,7 +38,7 @@ const FilterForm = () => { }); const SubjectOption = Subject?.data ?? [] const canChangeSubjectPage = !!Subject?.links?.next; - const SubjectPage = Subject?.meta?.currentPage; + const SubjectPage = Subject?.meta?.current_page; /// unit_id const { data: Unit, isLoading: isLoadingUnit } = useGetAllUnit({ @@ -47,7 +47,7 @@ const FilterForm = () => { }); const UnitOption = Unit?.data ?? [] const canChangeUnitPage = !!Unit?.links?.next; - const UnitPage = Unit?.meta?.currentPage; + const UnitPage = Unit?.meta?.current_page; /// lessonsIds const { data: Lesson, isLoading: isLoadingLesson } = useGetAllLesson({ @@ -56,7 +56,7 @@ const FilterForm = () => { }); const LessonOption = Lesson?.data ?? [] const canChangeLessonPage = !!Lesson?.links?.next; - const LessonPage = Lesson?.meta?.currentPage; + const LessonPage = Lesson?.meta?.current_page; return (
diff --git a/src/Pages/Admin/question/Model/EditForm/BaseFormContainer.tsx b/src/Pages/Admin/question/Model/EditForm/BaseFormContainer.tsx index c0b70b6..d438ad5 100644 --- a/src/Pages/Admin/question/Model/EditForm/BaseFormContainer.tsx +++ b/src/Pages/Admin/question/Model/EditForm/BaseFormContainer.tsx @@ -13,9 +13,10 @@ import ModelForm from "../../Model/Malty/Form"; const BaseFormContainer = ({objectToEdit,handleSubmit,Loading,handleValidateBaseQuestion,t}:{objectToEdit:any,handleSubmit:any,Loading:any,handleValidateBaseQuestion:any,t:any}) => { const location = useLocation(); const navigate = useNavigate(); - const { ShowHint,setShowHint , ShowLatexOption,setShowLatexOption } = + const { ShowHint,setShowHint , ShowLatexOption,setShowLatexOption ,setObjectToEdit} = useObjectToEdit(); const handleCancel = () => { + setObjectToEdit({}) navigate(-1); }; const handleNavigateToPage = () => { @@ -84,8 +85,8 @@ const BaseFormContainer = ({objectToEdit,handleSubmit,Loading,handleValidateBase
{t("practical.back")}