'use client'; import { useState } from 'react'; import type { CreateServerData } from '../../types/server'; import { Button } from './ui/button'; interface ServerFormProps { onSubmit: (data: CreateServerData) => void; initialData?: CreateServerData; isEditing?: boolean; onCancel?: () => void; } export function ServerForm({ onSubmit, initialData, isEditing = false, onCancel }: ServerFormProps) { const [formData, setFormData] = useState( initialData ?? { name: '', ip: '', user: '', password: '', } ); const [errors, setErrors] = useState>({}); const validateForm = (): boolean => { const newErrors: Partial = {}; if (!formData.name.trim()) { newErrors.name = 'Server name is required'; } if (!formData.ip.trim()) { newErrors.ip = 'IP address is required'; } else { // Basic IP validation const ipRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/; if (!ipRegex.test(formData.ip)) { newErrors.ip = 'Please enter a valid IP address'; } } if (!formData.user.trim()) { newErrors.user = 'Username is required'; } if (!formData.password.trim()) { newErrors.password = 'Password is required'; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (validateForm()) { onSubmit(formData); if (!isEditing) { setFormData({ name: '', ip: '', user: '', password: '' }); } } }; const handleChange = (field: keyof CreateServerData) => ( e: React.ChangeEvent ) => { setFormData(prev => ({ ...prev, [field]: e.target.value })); // Clear error when user starts typing if (errors[field]) { setErrors(prev => ({ ...prev, [field]: undefined })); } }; return (
{errors.name &&

{errors.name}

}
{errors.ip &&

{errors.ip}

}
{errors.user &&

{errors.user}

}
{errors.password &&

{errors.password}

}
{isEditing && onCancel && ( )}
); }