"use client" import type React from "react" import { useState } from "react" import { useNavigate } from "react-router-dom" import { UserPlus, ArrowLeft } from "lucide-react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card" import { toast } from "react-hot-toast" import apiService from "@/services/apiService" import Header from "@/components/layout/Header" import Sidebar from "@/components/layout/Sidebar" import { UserSchema } from "@/schemas/userSchema" import { z } from "zod" export default function UserCreate() { const navigate = useNavigate() const [isSubmitting, setIsSubmitting] = useState(false) const [formData, setFormData] = useState({ name: "", email: "", password: "", password_confirmation: "", }) const [validationErrors, setValidationErrors] = useState>({}) const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target setFormData((prev) => ({ ...prev, [name]: value, })) // Clear error for this field when user types if (validationErrors[name]) { setValidationErrors(prev => { const updated = { ...prev } delete updated[name] return updated }) } } const validateForm = () => { try { UserSchema.parse(formData) setValidationErrors({}) return true } catch (error) { if (error instanceof z.ZodError) { const errors: Record = {} error.errors.forEach((err) => { const path = err.path.join('.') errors[path] = err.message }) setValidationErrors(errors) return false } return false } } const getFieldError = (fieldName: string) => { return validationErrors[fieldName] || null } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() // Zod validation if (!validateForm()) { // Show the first validation error as a toast const firstError = Object.values(validationErrors)[0] if (firstError) { toast.error(firstError) } return } try { setIsSubmitting(true) // This would need to be implemented in your apiService await apiService.createUser(formData) toast.success("User created successfully!") navigate("/admin/settings") // Redirect to an appropriate page } catch (error) { console.error("Error creating user:", error) toast.error("Failed to create user. Please try again.") } finally { setIsSubmitting(false) } } return (

Create New User

Add a new administrator to the system

User Information Please fill in all required fields
{getFieldError('name') && (

{getFieldError('name')}

)}
{getFieldError('email') && (

{getFieldError('email')}

)}

Security Information

{getFieldError('password') && (

{getFieldError('password')}

)}
{getFieldError('password_confirmation') && (

{getFieldError('password_confirmation')}

)}
{/* Display validation errors summary if needed */} {Object.keys(validationErrors).length > 0 && (

Please fix the following errors:

    {Object.entries(validationErrors).map(([field, error]) => (
  • • {error}
  • ))}
)}
) }