diff --git a/src/partials/Admin/AddAccess.tsx b/src/partials/Admin/AddAccess.tsx index 3b9c878..2c02695 100644 --- a/src/partials/Admin/AddAccess.tsx +++ b/src/partials/Admin/AddAccess.tsx @@ -3,15 +3,14 @@ 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 } from "../../data/getFormTypeErrors"; +import { zValidateNumber, zValidateString } 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 AutoComplete from "../../components/AutoComplete/AutoComplete"; -import { useEffect, useState } from "react"; -import { getFaPermissions } from "../../utils/getFaPermissions"; import Checkbox from "../../components/CheckBox/CheckBox"; +import { FormApiBasedAutoComplete } from "../../components/FormItems/FormApiBasedAutoComplete"; +import { getFaPermissions } from "../../utils/getFaPermissions"; type FormValues = z.infer; type AddAccessProps = { @@ -22,9 +21,8 @@ type AddAccessProps = { const schema = z.object({ access: zValidateString("نام صفحه"), description: zValidateString("توضیحات"), - selectedPageId: z - .array(z.union([z.string(), z.number()])) - .min(1, { message: "لطفاً یک صفحه انتخاب کنید." }), + selectedPageId: zValidateNumber("صفحه"), + domain: z.union([z.string(), z.number()]).optional(), modify_state: z.boolean(), }); @@ -32,80 +30,28 @@ export const AddAccess = ({ getData, item }: AddAccessProps) => { const showToast = useToast(); const { closeModal } = useModalStore(); - const [selectedKeys, setSelectedKeys] = useState<(string | number)[]>([]); - const [data, setData] = useState([]); - const [pagesData, setPagesData] = useState(null); - const { control, handleSubmit, setValue, + trigger, formState: { errors }, } = useForm({ resolver: zodResolver(schema), defaultValues: { access: item?.name || "", description: item?.description || "", - selectedPageId: [], + selectedPageId: item?.page_data?.id || "", + domain: item?.domain?.id || item?.page_data?.domain?.id || "", modify_state: item?.modify_state || false, }, }); - useEffect(() => { - if (selectedKeys.length > 0) { - setValue("selectedPageId", selectedKeys); - } - }, [selectedKeys, setValue]); - - useEffect(() => { - if (pagesData?.results && item?.page) { - const matchingPage = pagesData.results.find( - (page: any) => page.name === item.page, - ); - if (matchingPage) { - const keys = [matchingPage.id]; - setSelectedKeys(keys); - setValue("selectedPageId", keys); - } - } - }, [pagesData, item, setValue]); - - const handleChangeComplete = (newSelectedKeys: (number | string)[]) => { - setSelectedKeys(newSelectedKeys); - }; - - const mutationPages = useApiMutation({ - api: "/auth/api/v1/page/", - method: "get", - }); - const mutation = useApiMutation({ api: `/auth/api/v1/permission/${item ? item?.id + "/" : ""}`, method: item ? "put" : "post", }); - const getPages = async () => { - const data = await mutationPages.mutateAsync({ - page: 1, - page_size: 1000, - }); - setPagesData(data); - }; - - useEffect(() => { - getPages(); - }, []); - - useEffect(() => { - if (pagesData?.results) { - const d = pagesData.results.map((page: any) => ({ - key: page.id, - value: `${getFaPermissions(page.name)} (${page.name})`, - })); - setData(d); - } - }, [pagesData]); - const onSubmit = async (data: FormValues) => { try { await mutation.mutateAsync({ @@ -113,7 +59,8 @@ export const AddAccess = ({ getData, item }: AddAccessProps) => { description: data.description, category: "api", meta: {}, - page: selectedKeys[0], + page: data.selectedPageId, + domain: data.domain, modify_state: data?.modify_state, }); showToast("عملیات با موفقیت انجام شد", "success"); @@ -132,17 +79,21 @@ export const AddAccess = ({ getData, item }: AddAccessProps) => { ( - { - handleChangeComplete(newSelectedKeys); - field.onChange(newSelectedKeys); - }} + render={() => ( + getFaPermissions(item?.name)} + secondaryKey={["domain", "id"]} + onChange={(selectedPage) => { + setValue("selectedPageId", selectedPage?.key1 || ""); + setValue("domain", selectedPage?.key2 || ""); + trigger("selectedPageId"); + }} error={!!errors.selectedPageId} - helperText={errors.selectedPageId?.message} + errorMessage={errors.selectedPageId?.message} /> )} />