import { useEffect } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { useForm } from 'react-hook-form'; import { yupResolver } from '@hookform/resolvers/yup'; import * as yup from 'yup'; import { useRole, useCreateRole, useUpdateRole } from '../core/_hooks'; import { RoleFormData } from '../core/_models'; import { Button } from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import { ArrowRight, Shield } from "lucide-react"; import { FormHeader, PageContainer, Label } from '../../../components/ui/Typography'; const roleSchema = yup.object({ title: yup .string() .required("نام نقش الزامی است") .min(2, "نام نقش باید حداقل ۲ کاراکتر باشد"), description: yup .string() .required("توضیحات الزامی است") .min(5, "توضیحات باید حداقل ۵ کاراکتر باشد"), }); const RoleFormPage = () => { const navigate = useNavigate(); const { id } = useParams(); const isEdit = !!id; const { data: role, isLoading: roleLoading } = useRole(id || ""); const { mutate: createRole, isPending: creating } = useCreateRole(); const { mutate: updateRole, isPending: updating } = useUpdateRole(); const { register, handleSubmit, formState: { errors, isValid }, reset, } = useForm({ resolver: yupResolver(roleSchema), mode: 'onChange', }); useEffect(() => { if (isEdit && role) { reset({ title: role.title, description: role.description, }); } }, [isEdit, role, reset]); const onSubmit = (data: RoleFormData) => { if (isEdit && id) { updateRole({ id: parseInt(id), ...data, }, { onSuccess: () => { navigate('/roles'); } }); } else { createRole(data, { onSuccess: () => { navigate('/roles'); } }); } }; if (isEdit && roleLoading) { return (
{[...Array(3)].map((_, i) => (
))}
); } const isLoading = creating || updating; return ( navigate('/roles')} className="flex items-center gap-2" > بازگشت } />