diff --git a/src/Pages/Student/Model/AddModel.tsx b/src/Pages/Student/Model/AddModel.tsx
new file mode 100644
index 0000000..e67891e
--- /dev/null
+++ b/src/Pages/Student/Model/AddModel.tsx
@@ -0,0 +1,33 @@
+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 { useAddStudent } from "../../../api/student";
+
+const AddModel: React.FC = () => {
+ const { mutate, status } = useAddStudent();
+
+ const handleSubmit = (values: any) => {
+ mutate({
+ ...values,
+ });
+ };
+ return (
+ <>
+
+
+
+ >
+ );
+};
+
+export default AddModel;
diff --git a/src/Pages/Student/Model/EditModel.tsx b/src/Pages/Student/Model/EditModel.tsx
new file mode 100644
index 0000000..0f1b0ec
--- /dev/null
+++ b/src/Pages/Student/Model/EditModel.tsx
@@ -0,0 +1,37 @@
+import React from "react";
+import { getInitialValues, getValidationSchema } from "./formUtil";
+import { ModalEnum } from "../../../enums/Model";
+import LayoutModel from "../../../Layout/Dashboard/LayoutModel";
+import ModelForm from "./ModelForm";
+import { QueryStatusEnum } from "../../../enums/QueryStatus";
+import { useObjectToEdit } from "../../../zustand/ObjectToEditState";
+import { useUpdateStudent } from "../../../api/student";
+import { handelImageState } from "../../../utils/DataToSendImageState";
+
+const EditModel: React.FC = () => {
+ const { mutate, status } = useUpdateStudent();
+ const { objectToEdit } = useObjectToEdit((state) => state);
+
+ const handleSubmit = (values: any) => {
+ const Data_to_send = { ...values };
+ mutate(Data_to_send);
+ };
+
+ return (
+ <>
+
+
+
+ >
+ );
+};
+
+export default EditModel;
diff --git a/src/Pages/Student/Model/ModelForm.tsx b/src/Pages/Student/Model/ModelForm.tsx
new file mode 100644
index 0000000..a7cefd5
--- /dev/null
+++ b/src/Pages/Student/Model/ModelForm.tsx
@@ -0,0 +1,54 @@
+import { Col, Row } from "reactstrap";
+import ValidationField from "../../../Components/ValidationField/ValidationField";
+import { useGetAllGrade } from "../../../api/grade";
+import { useValidationValidationParamState } from "../../../Components/ValidationField/state/ValidationValidationParamState";
+
+const Form = ({ isEdit = false }: { isEdit?: boolean }) => {
+ const { ValidationParamState } = useValidationValidationParamState();
+ const {
+ GradeName, GradeCurrentPage,
+ } = ValidationParamState;
+
+
+ const { data: Grade, isLoading: isLoadingGrade } = useGetAllGrade({
+ name: GradeName,
+ page: GradeCurrentPage
+ });
+ const GradeOption = Grade?.data ?? []
+ const canChangeGradePage = !!Grade?.links?.next;
+ const GradePage = Grade?.meta?.currentPage;
+
+
+ return (
+
+
+
+
+
+ {!isEdit &&
+
+ }
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default Form;
diff --git a/src/Pages/Student/Model/formUtil.ts b/src/Pages/Student/Model/formUtil.ts
new file mode 100644
index 0000000..f1f1bfc
--- /dev/null
+++ b/src/Pages/Student/Model/formUtil.ts
@@ -0,0 +1,21 @@
+import * as Yup from "yup";
+import { Student, StudentInitialValues } from "../../../types/Student";
+
+export const getInitialValues = (
+ objectToEdit: Partial
,
+): StudentInitialValues => {
+ return {
+ id: objectToEdit?.id,
+ first_name: objectToEdit?.first_name ?? "",
+ last_name: objectToEdit?.last_name ?? "",
+ username: objectToEdit?.user?.username ?? null ,
+ password: null ,
+ };
+};
+
+export const getValidationSchema = () => {
+ // validate input
+ return Yup.object().shape({
+ name: Yup.string().required("validation.required"),
+ });
+};
diff --git a/src/Pages/Student/Page.tsx b/src/Pages/Student/Page.tsx
new file mode 100644
index 0000000..afcd7e9
--- /dev/null
+++ b/src/Pages/Student/Page.tsx
@@ -0,0 +1,39 @@
+import { useTranslation } from "react-i18next";
+import { lazy, Suspense } from "react";
+import { Spin } from "antd";
+import useSetPageTitle from "../../Hooks/useSetPageTitle";
+import { ModalEnum } from "../../enums/Model";
+import { useDeleteStudent } from "../../api/student";
+
+const Table = lazy(() => import("./Table"));
+const AddModalForm = lazy(() => import("./Model/AddModel"));
+const EditModalForm = lazy(() => import("./Model/EditModel"));
+const DeleteModalForm = lazy(
+ () => import("../../Layout/Dashboard/DeleteModels"),
+);
+
+const TableHeader = () => {
+ const [t] = useTranslation();
+ const deleteMutation = useDeleteStudent();
+
+ useSetPageTitle(t(`page_header.student`));
+
+ return (
+
+
}>
+
+ {t("models.student")}
+
+
+
+
+
+
+
+ );
+};
+
+export default TableHeader;
diff --git a/src/Pages/Student/Table.tsx b/src/Pages/Student/Table.tsx
new file mode 100644
index 0000000..b4c343e
--- /dev/null
+++ b/src/Pages/Student/Table.tsx
@@ -0,0 +1,13 @@
+import { useColumns } from "./useTableColumns";
+import React from "react";
+import DataTable from "../../Layout/Dashboard/Table/DataTable";
+import { useGetAllStudent } from "../../api/student";
+
+const App: React.FC = () => {
+ const response = useGetAllStudent({ pagination: true });
+
+ return ;
+};
+
+export default App;
+
diff --git a/src/Pages/Student/useTableColumns.tsx b/src/Pages/Student/useTableColumns.tsx
new file mode 100644
index 0000000..816b9b3
--- /dev/null
+++ b/src/Pages/Student/useTableColumns.tsx
@@ -0,0 +1,86 @@
+import { TableColumnsType } from "antd";
+import { Student } from "../../types/Student";
+import { FaPlus } from "react-icons/fa";
+import useModalHandler from "../../utils/useModalHandler";
+import { ModalEnum } from "../../enums/Model";
+import { useObjectToEdit } from "../../zustand/ObjectToEditState";
+import { useTranslation } from "react-i18next";
+import { useNavigate } from "react-router-dom";
+import {
+ canAddStudent,
+ canDeleteStudent,
+ canEditStudent,
+ canShowStudent,
+} from "../../utils/hasAbilityFn";
+import ActionButtons from "../../Components/Table/ActionButtons";
+import ColumnsImage from "../../Components/Columns/ColumnsImage";
+
+export const useColumns = () => {
+ const { handel_open_model } = useModalHandler();
+
+ const { setObjectToEdit } = useObjectToEdit((state) => state);
+ const navigate = useNavigate();
+
+ const handelShow = (record: Student) => {
+ navigate(`${record?.id}`);
+ };
+
+ const handelDelete = (data: Student) => {
+ setObjectToEdit(data);
+ handel_open_model(ModalEnum?.STUDENT_DELETE);
+ };
+
+ const handleEdit = (record: Student) => {
+ setObjectToEdit(record);
+ handel_open_model(ModalEnum?.STUDENT_EDIT);
+ };
+ const [t] = useTranslation();
+
+ const columns: TableColumnsType = [
+ {
+ title: t("columns.id"),
+ dataIndex: "id",
+ key: "id",
+ align: "center",
+ render: (_text, record) => record?.id,
+ },
+ {
+ title: `${t("columns.name")}`,
+ dataIndex: "name",
+ key: "name",
+ align: "center",
+ render: (_text, record) => record?.first_name,
+ },
+ {
+ title: canAddStudent ? (
+
+ ) : (
+ ""
+ ),
+
+ key: "actions",
+ align: "end",
+ width: "25vw",
+ render: (_text, record, index) => {
+ return (
+ handelDelete(record)}
+ onEdit={() => handleEdit(record)}
+ onShow={() => handelShow(record)}
+ />
+ );
+ },
+ },
+ ];
+
+ return columns;
+};
diff --git a/src/Pages/Unit/DrapableTable.tsx b/src/Pages/Unit/DrapableTable.tsx
index b6514dd..26952b3 100644
--- a/src/Pages/Unit/DrapableTable.tsx
+++ b/src/Pages/Unit/DrapableTable.tsx
@@ -12,10 +12,13 @@ import {
} from "@dnd-kit/sortable";
import { CSS } from "@dnd-kit/utilities";
import { Button, Table } from "antd";
-import type { TableColumnsType } from "antd";
import { useParams } from "react-router-dom";
import { ParamsEnum } from "../../enums/params";
-import { useGetAllUnit } from "../../api/unit";
+import { useGetAllUnit, useUpdateUnitOrder } from "../../api/unit";
+import Loading from "../../Components/DataState/Loading";
+import EmptyData from "../../Components/DataState/EmptyData";
+import { useTranslation } from "react-i18next";
+import { useColumns } from "./useTableColumns";
interface DataType {
id: string; // Unique identifier for each row
@@ -32,7 +35,7 @@ interface RowContextProps {
const RowContext = React.createContext({});
-const DragHandle: React.FC = () => {
+export const DragHandleUnit: React.FC = () => {
const { setActivatorNodeRef, listeners } = useContext(RowContext);
return (