diff --git a/src/Pages/Domains.tsx b/src/Pages/Domains.tsx
new file mode 100644
index 0000000..05de24a
--- /dev/null
+++ b/src/Pages/Domains.tsx
@@ -0,0 +1,84 @@
+import { useEffect, useState } from "react";
+import { useApiRequest } from "../utils/useApiRequest";
+import { useModalStore } from "../context/zustand-store/appStore";
+import Table from "../components/Table/Table";
+import { Grid } from "../components/Grid/Grid";
+import Button from "../components/Button/Button";
+import { AddDomain } from "../partials/Admin/AddDomain";
+import { Popover } from "../components/PopOver/PopOver";
+import { Tooltip } from "../components/Tooltip/Tooltip";
+import { DeleteButtonForPopOver } from "../components/PopOverButtons/PopOverButtons";
+
+export default function Domains() {
+ const { openModal } = useModalStore();
+ const [domainsInfo, setDomainsInfo] = useState({ page: 1, page_size: 10 });
+ const [domainsTableData, setDomainsTableData] = useState([]);
+
+ const { data: domainsData, refetch } = useApiRequest({
+ api: "/core/domain/",
+ method: "get",
+ params: domainsInfo,
+ queryKey: ["domains", domainsInfo],
+ });
+
+ useEffect(() => {
+ if (domainsData?.results) {
+ const formattedData = domainsData.results.map((item: any, i: number) => {
+ return [
+ domainsInfo.page === 1
+ ? i + 1
+ : i + domainsInfo.page_size * (domainsInfo.page - 1) + 1,
+ item?.fa_name,
+ item?.code,
+ item?.name,
+
+
+
+
+ ,
+ ];
+ });
+ setDomainsTableData(formattedData);
+ }
+ }, [domainsData, domainsInfo]);
+
+ return (
+
+
+
+
+
+
+ );
+}
diff --git a/src/Pages/LiveStock/Users.tsx b/src/Pages/LiveStock/Users.tsx
index 6e01982..6451e99 100644
--- a/src/Pages/LiveStock/Users.tsx
+++ b/src/Pages/LiveStock/Users.tsx
@@ -11,7 +11,7 @@ import {
useDrawerStore,
useModalStore,
} from "../../context/zustand-store/appStore";
-import { EditAccess } from "../../partials/Access/EditAccess";
+import { EditAccess } from "../../partials/Admin/EditAccess";
import { AddUser } from "../../partials/LiveStock/management/AddUser";
import ShowStringList from "../../components/ShowStringList/ShowStringList";
import ShowMoreInfo from "../../components/ShowMoreInfo/ShowMoreInfo";
diff --git a/src/Pages/Management.tsx b/src/Pages/Management.tsx
index c03fe25..6b00488 100644
--- a/src/Pages/Management.tsx
+++ b/src/Pages/Management.tsx
@@ -1,9 +1,9 @@
import { useState } from "react";
import { Grid } from "../components/Grid/Grid";
import Tabs from "../components/Tab/Tab";
-import Pages from "../partials/Access/Pages";
-import Access from "../partials/Access/Access";
-import UnusedAccess from "../partials/Access/UnusedAccess";
+import Pages from "../partials/Admin/Pages";
+import Access from "../partials/Admin/Access";
+import UnusedAccess from "../partials/Admin/UnusedAccess";
const tabItems = [
{ label: "صفحات" },
diff --git a/src/partials/Access/Access.tsx b/src/partials/Admin/Access.tsx
similarity index 100%
rename from src/partials/Access/Access.tsx
rename to src/partials/Admin/Access.tsx
diff --git a/src/partials/Access/AddAccess.tsx b/src/partials/Admin/AddAccess.tsx
similarity index 100%
rename from src/partials/Access/AddAccess.tsx
rename to src/partials/Admin/AddAccess.tsx
diff --git a/src/partials/Admin/AddDomain.tsx b/src/partials/Admin/AddDomain.tsx
new file mode 100644
index 0000000..34141f6
--- /dev/null
+++ b/src/partials/Admin/AddDomain.tsx
@@ -0,0 +1,125 @@
+import { zodResolver } from "@hookform/resolvers/zod";
+import Button from "../../components/Button/Button";
+import { Grid } from "../../components/Grid/Grid";
+import Textfield from "../../components/Textfeild/Textfeild";
+import { useForm, Controller } from "react-hook-form";
+import {
+ zValidateString,
+ zValidateEnglishString,
+} from "../../data/getFormTypeErrors";
+import { z } from "zod";
+import { useApiMutation } from "../../utils/useApiRequest";
+import { useToast } from "../../hooks/useToast";
+import { useModalStore } from "../../context/zustand-store/appStore";
+import { getToastResponse } from "../../data/getToastResponse";
+
+const schema = z.object({
+ code: zValidateString("کد حوزه"),
+ name: zValidateEnglishString("نام انگلیسی حوزه"),
+ fa_name: zValidateString("نام حوزه"),
+});
+
+type AddDomainProps = {
+ getData: () => void;
+ item?: any;
+};
+
+type FormValues = z.infer;
+
+export const AddDomain = ({ getData, item }: AddDomainProps) => {
+ const showToast = useToast();
+ const { closeModal } = useModalStore();
+
+ const {
+ control,
+ handleSubmit,
+ formState: { errors },
+ } = useForm({
+ resolver: zodResolver(schema),
+ defaultValues: {
+ code: item?.code || "",
+ name: item?.name || "",
+ fa_name: item?.fa_name || "",
+ },
+ });
+
+ const mutation = useApiMutation({
+ api: `/core/domain/${item ? item?.id + "/" : ""}`,
+ method: item ? "put" : "post",
+ });
+
+ const onSubmit = async (data: FormValues) => {
+ try {
+ await mutation.mutateAsync({
+ code: data.code,
+ name: data.name,
+ fa_name: data.fa_name,
+ });
+ showToast(getToastResponse(item, "حوزه"), "success");
+ closeModal();
+ getData();
+ } catch (error: any) {
+ if (error?.status === 403) {
+ showToast(
+ error?.response?.data?.message || "این مورد تکراری است!",
+ "error",
+ );
+ } else {
+ showToast(
+ error?.response?.data?.message || "خطا در ثبت اطلاعات!",
+ "error",
+ );
+ }
+ }
+ };
+
+ return (
+
+ );
+};
diff --git a/src/partials/Access/AddPage.tsx b/src/partials/Admin/AddPage.tsx
similarity index 100%
rename from src/partials/Access/AddPage.tsx
rename to src/partials/Admin/AddPage.tsx
diff --git a/src/partials/Access/EditAccess.tsx b/src/partials/Admin/EditAccess.tsx
similarity index 100%
rename from src/partials/Access/EditAccess.tsx
rename to src/partials/Admin/EditAccess.tsx
diff --git a/src/partials/Access/Pages.tsx b/src/partials/Admin/Pages.tsx
similarity index 100%
rename from src/partials/Access/Pages.tsx
rename to src/partials/Admin/Pages.tsx
diff --git a/src/partials/Access/UnusedAccess.tsx b/src/partials/Admin/UnusedAccess.tsx
similarity index 100%
rename from src/partials/Access/UnusedAccess.tsx
rename to src/partials/Admin/UnusedAccess.tsx
diff --git a/src/routes/paths.ts b/src/routes/paths.ts
index 2310570..ad040c1 100644
--- a/src/routes/paths.ts
+++ b/src/routes/paths.ts
@@ -6,6 +6,7 @@ export const MENU = "/menu";
export const TRAINING = "/training";
//Admin Routes
+export const DOMAINS = "/domains";
export const PERMISSION_ACCESS = "/permission-access";
//Management
diff --git a/src/utils/getCategoryParameters.ts b/src/utils/getCategoryParameters.ts
index 7d30b4b..11960dd 100644
--- a/src/utils/getCategoryParameters.ts
+++ b/src/utils/getCategoryParameters.ts
@@ -26,8 +26,14 @@ import Tagging from "../Pages/LiveStock/Tagging";
import TagDistribtution from "../Pages/LiveStock/TagDistribution";
import TagDistribtutionDetails from "../Pages/LiveStock/TagDistributionDetails";
import Tags from "../partials/LiveStock/tagging/Tags";
+import Domains from "../Pages/Domains";
export const adminCategoryItems = [
+ {
+ name: "domains",
+ path: R.DOMAINS,
+ component: Domains,
+ },
{
name: "permission_control",
path: R.PERMISSION_ACCESS,
diff --git a/src/utils/getFaPermissions.ts b/src/utils/getFaPermissions.ts
index 802ee85..7a9ffef 100644
--- a/src/utils/getFaPermissions.ts
+++ b/src/utils/getFaPermissions.ts
@@ -4,6 +4,9 @@ export function getFaPermissions(permission: string) {
case "permission_control":
faPermission = "مدیریت دسترسی";
break;
+ case "domains":
+ faPermission = "مدیریت حوزه ها";
+ break;
case "users":
faPermission = "کاربران";
break;