From 7e8fa6431c095cc77b10ef7189fe7050bcad1abc Mon Sep 17 00:00:00 2001 From: karimaldeen Date: Sun, 18 Aug 2024 16:07:34 +0300 Subject: [PATCH] add package item --- .../ValidationField/View/SelectField.tsx | 1 + .../PackageItem/Field/ConfigurationField.tsx | 9 + .../Package/PackageItem/Field/FieldGroup.tsx | 96 +++++++ .../Package/PackageItem/Model/AddModel.tsx | 66 +++++ .../Package/PackageItem/Model/EditModel.tsx | 73 ++++++ .../Package/PackageItem/Model/ModelForm.tsx | 238 ++++++++++++++++++ .../Package/PackageItem/Model/formUtil.ts | 32 +++ src/Pages/Package/PackageItem/Page.tsx | 59 +++++ src/Pages/Package/PackageItem/Table.tsx | 21 ++ src/Pages/Package/PackageItem/index.tsx | 15 ++ .../Package/PackageItem/useTableColumns.tsx | 66 +++++ src/Pages/Package/useTableColumns.tsx | 11 +- src/Routes.tsx | 33 +++ src/api/config.ts | 2 +- src/api/packageItem.ts | 20 ++ src/enums/abilities.ts | 1 + src/enums/params.ts | 1 + 17 files changed, 741 insertions(+), 3 deletions(-) create mode 100644 src/Pages/Package/PackageItem/Field/ConfigurationField.tsx create mode 100644 src/Pages/Package/PackageItem/Field/FieldGroup.tsx create mode 100644 src/Pages/Package/PackageItem/Model/AddModel.tsx create mode 100644 src/Pages/Package/PackageItem/Model/EditModel.tsx create mode 100644 src/Pages/Package/PackageItem/Model/ModelForm.tsx create mode 100644 src/Pages/Package/PackageItem/Model/formUtil.ts create mode 100644 src/Pages/Package/PackageItem/Page.tsx create mode 100644 src/Pages/Package/PackageItem/Table.tsx create mode 100644 src/Pages/Package/PackageItem/index.tsx create mode 100644 src/Pages/Package/PackageItem/useTableColumns.tsx create mode 100644 src/api/packageItem.ts diff --git a/src/Components/ValidationField/View/SelectField.tsx b/src/Components/ValidationField/View/SelectField.tsx index 6ece99f..4236a47 100644 --- a/src/Components/ValidationField/View/SelectField.tsx +++ b/src/Components/ValidationField/View/SelectField.tsx @@ -53,6 +53,7 @@ const SelectField = ({ onChange={onChange || SelectableChange} showSearch={false} id={name} + fieldNames={{label:"name",value:"id"}} {...props} /> diff --git a/src/Pages/Package/PackageItem/Field/ConfigurationField.tsx b/src/Pages/Package/PackageItem/Field/ConfigurationField.tsx new file mode 100644 index 0000000..95745e1 --- /dev/null +++ b/src/Pages/Package/PackageItem/Field/ConfigurationField.tsx @@ -0,0 +1,9 @@ +import React from 'react' + +const ConfigurationField = () => { + return ( +
ConfigurationField
+ ) +} + +export default ConfigurationField \ No newline at end of file diff --git a/src/Pages/Package/PackageItem/Field/FieldGroup.tsx b/src/Pages/Package/PackageItem/Field/FieldGroup.tsx new file mode 100644 index 0000000..0c27f50 --- /dev/null +++ b/src/Pages/Package/PackageItem/Field/FieldGroup.tsx @@ -0,0 +1,96 @@ +import React from "react"; +import { Input, Button } from "antd"; +import { useFormikContext } from "formik"; +import { useTranslation } from "react-i18next"; + +interface FieldGroupProps { + array_name: string; + title:string; + static?: boolean; + only_value?: boolean; +} + +const FieldGroup: React.FC = ({ array_name ,title,static:isStatic,only_value}) => { + const { values, setFieldValue } = useFormikContext(); + const addFieldGroup = () => { + setFieldValue(array_name, [ + ...(values?.[array_name] || []), + { key: null, value: null }, + ]); + }; + const deleteFieldGroup = () => { + const updatedArray = values?.[array_name]?.slice(0, -1) || []; + setFieldValue(array_name, updatedArray); + }; + + + const handleChangeKey = ( + e: React.ChangeEvent, + index: number + ) => { + const Selects = values?.[array_name] ?? []; + Selects[index].key = e.target.value; + setFieldValue(array_name, Selects); + }; + + const handleChangeValue = ( + e: React.ChangeEvent, + index: number + ) => { + const Selects = values?.[array_name] ?? []; + Selects[index].value = e.target.value; + setFieldValue(array_name, Selects); + }; + + const selectsArray = values?.[array_name] ?? []; + const { t } = useTranslation(); + + return ( + <> + + {selectsArray.map((group: { key: string; value: string }, index: number) => ( +
+ handleChangeKey(e, index)} + value={group.key} + size="large" + style={{ width: "100%" }} + allowClear + disabled={only_value} + /> + handleChangeValue(e, index)} + value={group.value} + size="large" + style={{ width: "100%" }} + allowClear + + /> +
+ ))} + {!isStatic && +
+ + +
+ } + + + ); +}; + +export default FieldGroup; diff --git a/src/Pages/Package/PackageItem/Model/AddModel.tsx b/src/Pages/Package/PackageItem/Model/AddModel.tsx new file mode 100644 index 0000000..1be8d83 --- /dev/null +++ b/src/Pages/Package/PackageItem/Model/AddModel.tsx @@ -0,0 +1,66 @@ +import React from "react"; +import { getInitialValues, getValidationSchema } from "./formUtil"; +import { ModalEnum } from "../../../../enums/Model"; +import LayoutModel from "../../../../Layout/Dashboard/LayoutModel"; +import { QueryStatusEnum } from "../../../../enums/QueryStatus"; +import ModelForm from "./ModelForm"; +import { useAddPackage } from "../../../../api/package"; +import FormikForm from "../../../../Layout/Dashboard/FormikForm"; +import { Spin } from "antd"; +import { useTranslation } from "react-i18next"; +import { useNavigate } from "react-router-dom"; +import useSetPageTitle from "../../../../Hooks/useSetPageTitle"; +import { PackageInitialValues } from "../../../../types/Package"; +import { arrayToObject } from "../../../../utils/arrayToObject"; + +const AddModel: React.FC = () => { + const { mutate, status ,isLoading} = useAddPackage(); + const [t] = useTranslation(); + const navigate = useNavigate() + const handleSubmit = (values: PackageInitialValues) => { + const DataToSend = JSON.parse(JSON.stringify(values) ); + console.log(DataToSend,"DataToSend"); + console.log(values?.configuration); + + const configuration = JSON.stringify(arrayToObject(values?.configuration )) ; + console.log(configuration); + + mutate({ + ...values, + }); + }; + + useSetPageTitle(t(`page_header.package`)); + + return ( +
+ + +
+ {t("header.add_new_package")} +
+ +
+ +
+ +
+
+
+
+ ); +}; + +export default AddModel; diff --git a/src/Pages/Package/PackageItem/Model/EditModel.tsx b/src/Pages/Package/PackageItem/Model/EditModel.tsx new file mode 100644 index 0000000..1e6acfb --- /dev/null +++ b/src/Pages/Package/PackageItem/Model/EditModel.tsx @@ -0,0 +1,73 @@ +import React from "react"; +import { getInitialValues, getValidationSchema } from "./formUtil"; +import ModelForm from "./ModelForm"; +import FormikForm from "../../../../Layout/Dashboard/FormikForm"; +import { Spin } from "antd"; +import { useTranslation } from "react-i18next"; +import { useNavigate, useParams } from "react-router-dom"; +import useSetPageTitle from "../../../../Hooks/useSetPageTitle"; +import { PackageInitialValues } from "../../../../types/Package"; +import { arrayToObject } from "../../../../utils/arrayToObject"; +import { useGetAllPackage, useUpdatePackage } from "../../../../api/package"; +import { ParamsEnum } from "../../../../enums/params"; +import { useObjectToEdit } from "../../../../zustand/ObjectToEditState"; +import SpinContainer from "../../../../Components/Layout/SpinContainer"; + +const EditModel: React.FC = () => { + const { mutate, status ,isLoading} = useUpdatePackage(); + const [t] = useTranslation(); + const {package_id} = useParams(); + const {objectToEdit} = useObjectToEdit(); + + const {data,isLoading:isLoadingData} = useGetAllPackage({show:package_id}) + console.log(data?.data,"data"); + + const handleSubmit = (values: PackageInitialValues) => { + const DataToSend = JSON.parse(JSON.stringify(values) ); + console.log(DataToSend,"DataToSend"); + console.log(values?.configuration); + + const configuration = JSON.stringify(arrayToObject(values?.configuration )) ; + console.log(configuration); + + mutate({ + ...values, + }); + }; + + useSetPageTitle(t(`page_header.package`)); + if(isLoadingData){ + return + } + return ( +
+ + +
+ {t("header.edit_package")} +
+ +
+ +
+ +
+
+
+
+ ); +}; + +export default EditModel; diff --git a/src/Pages/Package/PackageItem/Model/ModelForm.tsx b/src/Pages/Package/PackageItem/Model/ModelForm.tsx new file mode 100644 index 0000000..d5a1541 --- /dev/null +++ b/src/Pages/Package/PackageItem/Model/ModelForm.tsx @@ -0,0 +1,238 @@ +import { Col, Row } from "reactstrap"; +import ValidationField from "../../../../Components/ValidationField/ValidationField"; +import { useGetAllGrade } from "../../../../api/grade"; +import { useGetAllSubject } from "../../../../api/subject"; +import { useGetAllUnit } from "../../../../api/unit"; +import { useGetAllCurriculum } from "../../../../api/curriculum"; +import { useGetAllLesson } from "../../../../api/lesson"; +import { useFormikContext } from "formik"; +import { PackageInitialValues } from "../../../../types/Package"; +import { useValidationValidationParamState } from "../../../../Components/ValidationField/state/ValidationValidationParamState"; +import { useEffect } from "react"; +import ConfigurationField from "../../Field/ConfigurationField"; +import FieldGroup from "../../Field/FieldGroup"; + +const Form = () => { + const { values, setFieldValue } = useFormikContext(); + + const { ValidationParamState } = useValidationValidationParamState(); + const { + GradeName, GradeCurrentPage, + SubjectName, SubjectCurrentPage, + UnitName, UnitCurrentPage, + CurriculumName, CurriculumCurrentPage, + LessonName, LessonCurrentPage + + + } = ValidationParamState; + + const { curriculums_ids, grade_id, subjects_ids, units_ids, lessons_ids } = values; + + + + + /// grade_id + const GradeDisabled = !!grade_id; + const { data: Grade, isLoading: isLoadingGrade } = useGetAllGrade({ + name: GradeName, + page: GradeCurrentPage + }); + const GradeOption = Grade?.data ?? [] + const canChangeGradePage = !!Grade?.links?.next; + const GradePage = Grade?.meta?.currentPage; + + + /// subjects_ids + const SubjectDisabled = !!subjects_ids && subjects_ids?.length > 0; + const { data: Subject, isLoading: isLoadingSubject } = useGetAllSubject({ + grade_id: grade_id, + name: SubjectName, + page: SubjectCurrentPage + }, { enabled: GradeDisabled }); + const SubjectOption = Subject?.data ?? [] + const canChangeSubjectPage = !!Subject?.links?.next; + const SubjectPage = Subject?.meta?.currentPage; + + /// units_ids + const UnitDisabled = !!units_ids && units_ids?.length > 0; + const { data: Unit, isLoading: isLoadingUnit } = useGetAllUnit({ + subjects_ids: subjects_ids, + name: UnitName, + page: UnitCurrentPage + }, { enabled: SubjectDisabled }); + const UnitOption = Unit?.data ?? [] + const canChangeUnitPage = !!Unit?.links?.next; + const UnitPage = Unit?.meta?.currentPage; + + /// curriculums_ids + const CurriculumDisabled = !!curriculums_ids && curriculums_ids?.length > 0; + const { data: Curriculum, isLoading: isLoadingCurriculum } = useGetAllCurriculum({ + units_ids: units_ids, + name: CurriculumName, + page: CurriculumCurrentPage + }, { enabled: UnitDisabled }); + const CurriculumOption = Curriculum?.data ?? [] + const canChangeCurriculumPage = !!Curriculum?.links?.next; + const CurriculumPage = Curriculum?.meta?.currentPage; + + /// lessons_ids + const { data: Lesson, isLoading: isLoadingLesson } = useGetAllLesson({ + curriculums_ids: curriculums_ids, + name: LessonName, + page: LessonCurrentPage + }, { enabled: CurriculumDisabled }); + const LessonOption = Lesson?.data ?? [] + const canChangeLessonPage = !!Lesson?.links?.next; + const LessonPage = Lesson?.meta?.currentPage; + + + + useEffect(() => { + const GradeChildren = (subjects_ids && subjects_ids?.length > 0 || units_ids && units_ids?.length > 0 || curriculums_ids && curriculums_ids?.length > 0 || lessons_ids && lessons_ids?.length > 0); + + if (!grade_id && GradeChildren) { + setFieldValue("subjects_ids", []); + setFieldValue("units_ids", []); + setFieldValue("curriculums_ids", []); + setFieldValue("lessons_ids", []); + return; + } + console.log(1); + + const SubjectChildren = (units_ids && units_ids?.length > 0 || curriculums_ids && curriculums_ids?.length > 0 || lessons_ids && lessons_ids?.length > 0) + console.log( subjects_ids && subjects_ids?.length < 1 && SubjectChildren); + + if (subjects_ids && subjects_ids?.length < 1 && SubjectChildren) { + console.log(1); + + setFieldValue("units_ids", []); + setFieldValue("curriculums_ids", []); + setFieldValue("lessons_ids", []); + return; + } + const UnitChildren = (curriculums_ids && curriculums_ids?.length > 0 || lessons_ids && lessons_ids?.length > 0) + if (units_ids && units_ids?.length < 1 && UnitChildren) { + setFieldValue("curriculums_ids", []); + setFieldValue("lessons_ids", []); + return; + } + const CurriculumChildren = (lessons_ids && lessons_ids?.length > 0) + if (curriculums_ids && curriculums_ids?.length < 1 && CurriculumChildren) { + setFieldValue("lessons_ids", []); + return; + } + }, [grade_id, subjects_ids, units_ids, curriculums_ids]) + + + return ( + + + + + + + + + {/* + grade_id + */} + + + {/* + subjects_ids + */} + + + + + {/* + units_ids + */} + + + + + {/* + curriculums_ids + */} + + + + + + {/* + lessons_ids + */} + + + + + + + ); +}; + +export default Form; diff --git a/src/Pages/Package/PackageItem/Model/formUtil.ts b/src/Pages/Package/PackageItem/Model/formUtil.ts new file mode 100644 index 0000000..407ade4 --- /dev/null +++ b/src/Pages/Package/PackageItem/Model/formUtil.ts @@ -0,0 +1,32 @@ +import * as Yup from "yup"; +import { Package, PackageInitialValues } from "../../../../types/Package"; +import { arrayToObject } from "../../../../utils/arrayToObject"; +import { objectToArray } from "../../../../utils/objectToArray"; +export const getInitialValues = (objectToEdit: Partial): PackageInitialValues => { + console.log(objectToEdit,"objectToEdit"); + + const configuration = Array.isArray(objectToEdit?.configuration) ? objectToEdit?.configuration : objectToArray(objectToEdit?.configuration) + return { + id: objectToEdit?.id ?? null, + name: objectToEdit?.name ?? null, + price: objectToEdit?.price ?? null, + grade_id: objectToEdit?.grade_id ?? null, + curriculums_ids: objectToEdit?.curriculums_ids ?? [], + lessons_ids: objectToEdit?.lessons_ids ?? [], + subjects_ids: objectToEdit?.subjects_ids ?? [], + units_ids: objectToEdit?.units_ids ?? [], + configuration: configuration ?? [{key:"",value:""}], + }; +}; + +export const getValidationSchema = () => { + return Yup.object().shape({ + name: Yup.string().required("validation.required"), + price: Yup.number().required("validation.required").typeError("validation.Must_be_a_number"), + grade_id: Yup.string().required("validation.required"), + curriculums_ids: Yup.array().of(Yup.number().required()).min(1,"validation.must_have_on_item").required("validation.required"), + lessons_ids: Yup.array().of(Yup.number().required()).min(1,"validation.must_have_on_item").required("validation.required"), + subjects_ids: Yup.array().of(Yup.number().required()).min(1,"validation.must_have_on_item").required("validation.required"), + units_ids: Yup.array().of(Yup.number().required()).min(1,"validation.must_have_on_item").required("validation.required"), + }); +}; diff --git a/src/Pages/Package/PackageItem/Page.tsx b/src/Pages/Package/PackageItem/Page.tsx new file mode 100644 index 0000000..50e0e7f --- /dev/null +++ b/src/Pages/Package/PackageItem/Page.tsx @@ -0,0 +1,59 @@ +import { FaPlus } from "react-icons/fa"; +import useModalHandler from "../../../utils/useModalHandler"; +import { ModalEnum } from "../../../enums/Model"; +import { useTranslation } from "react-i18next"; +import { lazy, Suspense } from "react"; +import { Spin } from "antd"; +import { canAddPackage } from "../../../utils/hasAbilityFn"; +import useSetPageTitle from "../../../Hooks/useSetPageTitle"; +import { useDeletePackage } from "../../../api/package"; +import { useNavigate } from "react-router-dom"; +import { ABILITIES_ENUM } from "../../../enums/abilities"; +const Table = lazy(() => import("./Table")); + +const DeleteModalForm = lazy( + () => import("../../../Layout/Dashboard/DeleteModels"), +); +const SearchField = lazy( + () => import("../../../Components/DataTable/SearchField"), +); + +const TableHeader = () => { + const { handel_open_model } = useModalHandler(); + const [t] = useTranslation(); + const navigate = useNavigate(); + useSetPageTitle(t(`page_header.package`)); + const deleteMutation = useDeletePackage(); + + return ( +
+ }> +
+ + + {canAddPackage && ( +
+ +
+ )} +
+ + + + + + ); +}; + +export default TableHeader; diff --git a/src/Pages/Package/PackageItem/Table.tsx b/src/Pages/Package/PackageItem/Table.tsx new file mode 100644 index 0000000..300e13f --- /dev/null +++ b/src/Pages/Package/PackageItem/Table.tsx @@ -0,0 +1,21 @@ +import React from "react"; +import DataTable from "../../../Layout/Dashboard/Table/DataTable"; +import { useColumns } from "./useTableColumns"; +import useSearchQuery from "../../../api/utils/useSearchQuery"; +import { useGetAllPackage } from "../../../api/package"; +import { useGetAllPackageItem } from "../../../api/packageItem"; +import { useParams } from "react-router-dom"; +import { ParamsEnum } from "../../../enums/params"; +const App: React.FC = () => { + const [searchQuery] = useSearchQuery("name"); + const {package_id} = useParams() + const response = useGetAllPackageItem({ + name: searchQuery, + package_id:package_id, + pagination: true, + }); + + return ; +}; + +export default App; diff --git a/src/Pages/Package/PackageItem/index.tsx b/src/Pages/Package/PackageItem/index.tsx new file mode 100644 index 0000000..c57765a --- /dev/null +++ b/src/Pages/Package/PackageItem/index.tsx @@ -0,0 +1,15 @@ +import { useColumns } from "./useTableColumns"; +import Table from "./Table"; + +import { FaPlus } from "react-icons/fa"; + +import AddModalForm from "./Model/AddModel"; +import EditModalForm from "./Model/EditModel"; + +export { + Table, + useColumns, + AddModalForm, + EditModalForm, + FaPlus, +}; diff --git a/src/Pages/Package/PackageItem/useTableColumns.tsx b/src/Pages/Package/PackageItem/useTableColumns.tsx new file mode 100644 index 0000000..1965097 --- /dev/null +++ b/src/Pages/Package/PackageItem/useTableColumns.tsx @@ -0,0 +1,66 @@ +import { TableColumnsType } from "antd"; +import { ModalEnum } from "../../../enums/Model"; +import { useObjectToEdit } from "../../../zustand/ObjectToEditState"; +import { useModalState } from "../../../zustand/Modal"; +import { useTranslation } from "react-i18next"; +import { canDeletePackage,canEditPackage } from "../../../utils/hasAbilityFn"; +import ActionButtons from "../../../Components/Table/ActionButtons"; +import { useNavigate } from "react-router-dom"; + +export const useColumns = () => { + const [t] = useTranslation(); + + const { setIsOpen } = useModalState((state) => state); + const navigate = useNavigate() + const { setObjectToEdit } = useObjectToEdit((state) => state); + const handelDelete = (record: any) => { + setObjectToEdit(record); + setIsOpen(ModalEnum?.Package_DELETE); + }; + const handleEdit = (record: any) => { + setObjectToEdit(record); + setIsOpen(ModalEnum?.Package_EDIT); + navigate(`${record?.id}`) + + }; + + const columns: TableColumnsType = [ + { + title: t("columns.id"), + dataIndex: "id", + key: "id", + align: "center", + }, + { + title: t("columns.name"), + dataIndex: "name", + key: "name", + align: "center", + }, + { + title: t("columns.price"), + dataIndex: "price", + key: "price", + align: "center", + }, + { + title: "", + key: "actions", + align: "end", + width: "25vw", + render: (_text, record, index) => { + return ( + handelDelete(record)} + onEdit={() => handleEdit(record)} + /> + ); + }, + }, + ]; + + return columns; +}; diff --git a/src/Pages/Package/useTableColumns.tsx b/src/Pages/Package/useTableColumns.tsx index bfda9f2..3545673 100644 --- a/src/Pages/Package/useTableColumns.tsx +++ b/src/Pages/Package/useTableColumns.tsx @@ -3,9 +3,10 @@ import { ModalEnum } from "../../enums/Model"; import { useObjectToEdit } from "../../zustand/ObjectToEditState"; import { useModalState } from "../../zustand/Modal"; import { useTranslation } from "react-i18next"; -import { canDeletePackage,canEditPackage } from "../../utils/hasAbilityFn"; +import { canDeletePackage,canEditPackage, canShowPackage } from "../../utils/hasAbilityFn"; import ActionButtons from "../../Components/Table/ActionButtons"; import { useNavigate } from "react-router-dom"; +import { ABILITIES_ENUM } from "../../enums/abilities"; export const useColumns = () => { const [t] = useTranslation(); @@ -19,9 +20,13 @@ export const useColumns = () => { }; const handleEdit = (record: any) => { setObjectToEdit(record); - setIsOpen(ModalEnum?.Package_EDIT); navigate(`${record?.id}`) + }; + const handleShow = (record: any) => { + setObjectToEdit(record); + navigate(`${record?.id}/${ABILITIES_ENUM?.PACKAGE_ITEM}`) + }; const columns: TableColumnsType = [ @@ -53,9 +58,11 @@ export const useColumns = () => { handelDelete(record)} onEdit={() => handleEdit(record)} + onShow={() => handleShow(record)} /> ); }, diff --git a/src/Routes.tsx b/src/Routes.tsx index 89c40bc..1adc73e 100644 --- a/src/Routes.tsx +++ b/src/Routes.tsx @@ -10,6 +10,7 @@ const Tags = React.lazy(() => import("./Pages/Tags/Page")); const Grade = React.lazy(() => import("./Pages/Grade/Page")); const Package = React.lazy(() => import("./Pages/Package/Page")); const Curriculum = React.lazy(() => import("./Pages/Curriculum/Page")); +const PackageItemPage = React.lazy(() => import("./Pages/Package/PackageItem/Page")); const Unit = React.lazy(() => import("./Pages/Unit/Page")); const Lesson = React.lazy(() => import("./Pages/lesson/Page")); @@ -19,6 +20,10 @@ const EditQuestionPage = React.lazy(() => import("./Pages/question/EditPage")); const AddPackagePage = React.lazy(() => import("./Pages/Package/Model/AddModel")); const EditPackagePage = React.lazy(() => import("./Pages/Package/Model/EditModel")); + +const AddPackageItemPage = React.lazy(() => import("./Pages/Package/PackageItem/Model/AddModel")); +const EditPackageItemPage = React.lazy(() => import("./Pages/Package/PackageItem/Model/EditModel")); + import { hasAbility } from "./utils/hasAbility"; import { ABILITIES_ENUM, ABILITIES_VALUES_ENUM } from "./enums/abilities"; import { ParamsEnum } from "./enums/params"; @@ -153,6 +158,34 @@ export const CrudRoute: TCrudRoute[] = [ abilities_value: ABILITIES_VALUES_ENUM.INDEX, prevPath: 1, }, + + + { + header: "page_header.package_item", + element: , + path: `/${ABILITIES_ENUM?.Package}/:${ParamsEnum?.PACKAGE_ID}/${ABILITIES_ENUM?.PACKAGE_ITEM}`, + abilities: ABILITIES_ENUM?.PACKAGE_ITEM, + abilities_value: ABILITIES_VALUES_ENUM.INDEX, + prevPath: 1, + }, + + { + header: "page_header.add_package_item", + element: , + path: `/${ABILITIES_ENUM?.Package}/:${ParamsEnum?.PACKAGE_ID}/${ABILITIES_ENUM?.PACKAGE_ITEM}/add`, + abilities: ABILITIES_ENUM?.PACKAGE_ITEM, + abilities_value: ABILITIES_VALUES_ENUM.INDEX, + prevPath: 1, + }, + { + header: "page_header.edit_package_item", + element: , + path: `/${ABILITIES_ENUM?.Package}/:${ParamsEnum?.PACKAGE_ID}/${ABILITIES_ENUM?.PACKAGE_ITEM}/:${ParamsEnum?.PACKAGE_ITEM_ID}`, + abilities: ABILITIES_ENUM?.PACKAGE_ITEM, + abilities_value: ABILITIES_VALUES_ENUM.INDEX, + prevPath: 1, + }, + ]; export const AppRoutes: Record = Object.fromEntries( diff --git a/src/api/config.ts b/src/api/config.ts index e305add..72f1b12 100644 --- a/src/api/config.ts +++ b/src/api/config.ts @@ -1,4 +1,4 @@ -export const BaseURL = "http://127.0.0.1:8000/api/"; +export const BaseURL = "https://nerd-back.point-dev.net/api/"; // export const BaseURL = "http://127.0.0.1:8000/api/"; // export const BaseURL = "http://192.168.1.120:8000/api/"; diff --git a/src/api/packageItem.ts b/src/api/packageItem.ts new file mode 100644 index 0000000..0a931e4 --- /dev/null +++ b/src/api/packageItem.ts @@ -0,0 +1,20 @@ +import useAddMutation from "./helper/useAddMutation"; +import useDeleteMutation from "./helper/useDeleteMutation"; +import useGetQuery from "./helper/useGetQuery"; +import useUpdateMutation from "./helper/useUpdateMutation"; + +const API = { + GET: "/packageItem", + ADD: "/packageItem", + DELETE: "/packageItem", + UPDATE: "/packageItem", +}; + +const KEY = "PackageItem"; + +export const useGetAllPackageItem = (params?: any, options?: any) => + useGetQuery(KEY, API.GET, params, options); +export const useAddPackageItem = () => useAddMutation(KEY, API.ADD); +export const useUpdatePackageItem = (params?: any) => useUpdateMutation(KEY, API.GET); +export const useDeletePackageItem = (params?: any) => + useDeleteMutation(KEY, API.DELETE); diff --git a/src/enums/abilities.ts b/src/enums/abilities.ts index 76023ba..3956f13 100644 --- a/src/enums/abilities.ts +++ b/src/enums/abilities.ts @@ -43,6 +43,7 @@ export enum ABILITIES_ENUM { QUESTION = "Question", ADMIN = "admin", CURRICULUM = "curriculum", + PACKAGE_ITEM = "package_item", //// } diff --git a/src/enums/params.ts b/src/enums/params.ts index 3ec3006..058b170 100644 --- a/src/enums/params.ts +++ b/src/enums/params.ts @@ -12,4 +12,5 @@ export enum ParamsEnum { QUESTION_ID = "question_id", PACKAGE_ID = "package_id", CHILDREN_QUESTION_ID = "children_question_id", + PACKAGE_ITEM_ID= "package_item_id" }