import React, { useState, useEffect, useCallback } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { FaSave, FaTimes, FaBuilding, FaUser, FaMapMarkerAlt, FaCreditCard, FaEnvelope, } from "react-icons/fa"; import LoadingSpinner from "../../../components/common/LoadingSpinner"; import { BusinessParty } from "../../../types/common"; import { mockBusinessPartyNew } from "../../../mocks/mockBusinessParties"; interface ValidationErrors { [key: string]: string; } const CustomerForm: React.FC = () => { const navigate = useNavigate(); const { id } = useParams<{ id: string }>(); const isEdit = Boolean(id); const [loading, setLoading] = useState(false); const [saving, setSaving] = useState(false); const [errors, setErrors] = useState({}); const [formData, setFormData] = useState(mockBusinessPartyNew); const loadFormData = useCallback(async () => { setLoading(true); try { if (isEdit && id) { // Simulate API call await new Promise((resolve) => setTimeout(resolve, 1000)); setFormData(mockBusinessPartyNew); } } catch (error) { console.error("Error loading form data:", error); } finally { setLoading(false); } }, [isEdit, id]); useEffect(() => { loadFormData(); }, [loadFormData]); const validateForm = (): boolean => { const newErrors: ValidationErrors = {}; if (!formData.code.trim()) { newErrors.code = "Müşteri kodu zorunludur"; } if (!formData.name.trim()) { newErrors.name = "Şirket adı zorunludur"; } if (formData.creditLimit < 0) { newErrors.creditLimit = "Kredi limiti 0'dan küçük olamaz"; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleInputChange = ( field: keyof BusinessParty, value: string | number | boolean ) => { setFormData((prev) => ({ ...prev, [field]: value, })); // Clear error when user starts typing if (errors[field]) { setErrors((prev) => ({ ...prev, [field]: "", })); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!validateForm()) { return; } setSaving(true); try { // Simulate API call await new Promise((resolve) => setTimeout(resolve, 2000)); console.log("Customer data:", { ...formData, id: isEdit ? id : undefined, }); // Show success message alert( isEdit ? "Müşteri başarıyla güncellendi!" : "Müşteri başarıyla oluşturuldu!" ); // Navigate back to list navigate("/admin/crm"); } catch (error) { console.error("Error saving customer:", error); alert("Bir hata oluştu. Lütfen tekrar deneyin."); } finally { setSaving(false); } }; const handleCancel = () => { navigate("/admin/crm"); }; if (loading) { return ; } return (
{/* Header */}

{isEdit ? "Müşteri Düzenle" : "Yeni Müşteri"}

{isEdit ? "Mevcut müşteri bilgilerini güncelleyin" : "Yeni müşteri bilgilerini girin"}

{/* Form */}
{/* General Information */}

Genel Bilgiler

handleInputChange("code", e.target.value)} className={`block w-full px-3 py-1.5 text-sm border rounded-md shadow-sm focus:outline-none focus:ring-1 ${ errors.code ? "border-red-300 focus:border-red-500 focus:ring-red-500" : "border-gray-300 focus:border-blue-500 focus:ring-blue-500" }`} placeholder="Örn: MST001" /> {errors.customerCode && (

{errors.customerCode}

)}
handleInputChange("name", e.target.value)} className={`block w-full px-3 py-1.5 text-sm border rounded-md shadow-sm focus:outline-none focus:ring-1 ${ errors.name ? "border-red-300 focus:border-red-500 focus:ring-red-500" : "border-gray-300 focus:border-blue-500 focus:ring-blue-500" }`} placeholder="Şirket adını girin" /> {errors.companyName && (

{errors.companyName}

)}
handleInputChange("website", e.target.value)} className="block w-full px-3 py-1.5 text-sm border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-1 focus:border-blue-500 focus:ring-blue-500" placeholder="https://www.ornek.com" />
{/* Contact Information */}

İletişim Bilgileri

handleInputChange("email", e.target.value)} className={`block w-full px-3 py-1.5 text-sm border rounded-md shadow-sm focus:outline-none focus:ring-1 ${ errors.email ? "border-red-300 focus:border-red-500 focus:ring-red-500" : "border-gray-300 focus:border-blue-500 focus:ring-blue-500" }`} placeholder="email@ornek.com" /> {errors.email && (

{errors.email}

)}
handleInputChange("phone", e.target.value)} className={`block w-full px-3 py-1.5 text-sm border rounded-md shadow-sm focus:outline-none focus:ring-1 ${ errors.phone ? "border-red-300 focus:border-red-500 focus:ring-red-500" : "border-gray-300 focus:border-blue-500 focus:ring-blue-500" }`} placeholder="+90 212 555 0123" /> {errors.phone && (

{errors.phone}

)}
{/* Address Information */}

Adres Bilgileri

{/* Business Information */}

İş Bilgileri

handleInputChange("taxNumber", e.target.value) } className="block w-full px-3 py-1.5 text-sm border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-1 focus:border-blue-500 focus:ring-blue-500" placeholder="1234567890" />
handleInputChange("registrationNumber", e.target.value) } className="block w-full px-3 py-1.5 text-sm border border-gray-300 rounded-md shadow-sm focus:outline-none focus:ring-1 focus:border-blue-500 focus:ring-blue-500" placeholder="98765" />
handleInputChange( "creditLimit", parseFloat(e.target.value) || 0 ) } className={`block w-full px-3 py-1.5 text-sm border rounded-md shadow-sm focus:outline-none focus:ring-1 ${ errors.creditLimit ? "border-red-300 focus:border-red-500 focus:ring-red-500" : "border-gray-300 focus:border-blue-500 focus:ring-blue-500" }`} placeholder="0.00" /> {errors.creditLimit && (

{errors.creditLimit}

)}
{/* Relationship Information */}

İlişki Yönetimi

handleInputChange("isActive", e.target.checked) } className="h-4 w-4 text-blue-600 focus:ring-blue-500 border-gray-300 rounded" />
{/* Form Actions */}
); }; export default CustomerForm;