import { useEffect, useState } from 'react'; import { useNavigate, useParams } from 'react-router'; import { useCreateUser, useUpdateUser, useUser, UserFormData } from '../../features/users/api/users'; import { extractApiErrors } from '../../lib/api-client'; import axios from 'axios'; const UserFormPage = () => { const { id } = useParams(); const navigate = useNavigate(); const isEditing = !!id; // Query dan mutations const { data: user, isLoading: isLoadingUser } = useUser(id || ''); const createUser = useCreateUser(); const updateUser = useUpdateUser(); // Form state const [formData, setFormData] = useState({ name: '', email: '', password: '', role: 'user', // Default role }); const [errors, setErrors] = useState>({}); // Isi form dengan data user jika mode edit useEffect(() => { if (isEditing && user) { setFormData({ name: user.name, email: user.email, role: user.role, // Password kosong saat edit }); } }, [isEditing, user]); const handleChange = ( e: React.ChangeEvent ) => { const { name, value } = e.target; setFormData((prev) => ({ ...prev, [name]: value, })); // Hapus error untuk field yang sedang diubah if (errors[name]) { setErrors((prev) => { const newErrors = { ...prev }; delete newErrors[name]; return newErrors; }); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); try { if (isEditing && id) { // Jika password kosong, hapus dari data yang dikirim const dataToSubmit = { ...formData }; if (!dataToSubmit.password) { delete dataToSubmit.password; } await updateUser.mutateAsync({ id, data: dataToSubmit }); } else { await createUser.mutateAsync(formData); } navigate('/users'); } catch (error) { if (axios.isAxiosError(error) && error.response?.status === 400) { const apiErrors = error.response.data.status.errors; setErrors(apiErrors || {}); } else { const extractedErrors = extractApiErrors(error); setErrors(extractedErrors); } } }; if (isEditing && isLoadingUser) { return (
); } return (

{isEditing ? 'Edit Pengguna' : 'Tambah Pengguna'}

{errors.name && ( )}
{errors.email && ( )}
{errors.password && ( )}
{errors.role && ( )}
); }; export default UserFormPage;