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 { usePermission, useCreatePermission, useUpdatePermission } from '../core/_hooks'; import { PermissionFormData } from '../core/_models'; import { Button } from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import { LoadingSpinner } from "@/components/ui/LoadingSpinner"; import { ArrowRight } from "lucide-react"; import { FormHeader, PageContainer, Label } from '../../../components/ui/Typography'; const permissionSchema = yup.object({ title: yup.string().required('عنوان الزامی است').min(3, 'عنوان باید حداقل 3 کاراکتر باشد'), description: yup.string().required('توضیحات الزامی است').min(10, 'توضیحات باید حداقل 10 کاراکتر باشد'), }); const PermissionFormPage = () => { const navigate = useNavigate(); const { id } = useParams<{ id: string }>(); const isEdit = !!id; const { data: permission, isLoading: isLoadingPermission } = usePermission(id || '', isEdit); const { mutate: createPermission, isPending: isCreating } = useCreatePermission(); const { mutate: updatePermission, isPending: isUpdating } = useUpdatePermission(); const isLoading = isCreating || isUpdating; const { register, handleSubmit, formState: { errors, isValid }, setValue } = useForm({ resolver: yupResolver(permissionSchema), mode: 'onChange', defaultValues: { title: '', description: '' } }); // Populate form when editing useEffect(() => { if (isEdit && permission) { setValue('title', permission.title); setValue('description', permission.description); } }, [isEdit, permission, setValue]); const onSubmit = (data: PermissionFormData) => { if (isEdit && id) { updatePermission({ id, permissionData: { id: parseInt(id), title: data.title, description: data.description } }, { onSuccess: () => { navigate('/permissions'); } }); } else { createPermission({ title: data.title, description: data.description }, { onSuccess: () => { navigate('/permissions'); } }); } }; const handleBack = () => { navigate('/permissions'); }; if (isEdit && isLoadingPermission) { return (
); } return ( {/* Header */} بازگشت } /> {/* Form */}