import React, { useState, useEffect, useCallback } from "react"; import { useNavigate, useParams } from "react-router-dom"; import { FaSave, FaTimes, FaCog, FaCalendar, FaExclamationTriangle, FaMapMarkerAlt, FaWrench, } from "react-icons/fa"; import LoadingSpinner from "../../../components/common/LoadingSpinner"; import { CriticalityLevelEnum, PmWorkCenter, PmWorkCenterSpecification, WorkCenterStatusEnum, } from "../../../types/pm"; import { mockWorkCenters } from "../../../mocks/mockWorkCenters"; import { mockDepartments } from "../../../mocks/mockDepartments"; import { HrDepartment } from "../../../types/hr"; interface ValidationErrors { [key: string]: string; } const WorkCenterForm: 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 [departments, setDepartments] = useState([]); const [formData, setFormData] = useState({ id: "", code: "", name: "", description: "", workCenterId: "", workCenterType: { id: "", code: "", name: "", category: "", isActive: true, }, manufacturer: "", model: "", serialNumber: "", installationDate: new Date("2022-03-15"), warrantyExpiry: new Date("2022-03-15"), location: "", departmentId: "", status: WorkCenterStatusEnum.Operational, criticality: CriticalityLevelEnum.Medium, specifications: [], maintenancePlans: [], workOrders: [], downTimeHistory: [], capacity: 0, costPerHour: 0, setupTime: 0, machineType: "", isActive: true, creationTime: new Date("2022-03-15"), lastModificationTime: new Date("2024-01-15"), }); const loadDepartments = useCallback(async () => { try { setDepartments(mockDepartments); } catch (error) { console.error("Error loading departments:", error); } }, []); const loadFormData = useCallback(async () => { setLoading(true); try { if (isEdit && id) { // Simulate API call await new Promise((resolve) => setTimeout(resolve, 1000)); const mockWorkCenter: PmWorkCenter = mockWorkCenters.find( (eq) => eq.id === id )!; setFormData(mockWorkCenter); } } catch (error) { console.error("Error loading form data:", error); } finally { setLoading(false); } }, [isEdit, id]); useEffect(() => { loadDepartments(); loadFormData(); }, [loadDepartments, loadFormData]); const validateForm = (): boolean => { const newErrors: ValidationErrors = {}; if (!formData.code.trim()) { newErrors.workCenterCode = "İş Merkezi kodu zorunludur"; } if (!formData.name.trim()) { newErrors.name = "İş Merkezi adı zorunludur"; } if (!formData.workCenterType) { newErrors.workCenterType = "İş Merkezi tipi seçilmelidir"; } if (!formData.location.trim()) { newErrors.location = "Lokasyon zorunludur"; } if (!formData.departmentId) { newErrors.departmentId = "Departman seçilmelidir"; } if (!formData.installationDate) { newErrors.installationDate = "Kurulum tarihi zorunludur"; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleInputChange = ( field: keyof PmWorkCenter, value: string | boolean | PmWorkCenterSpecification[] ) => { setFormData((prev) => ({ ...prev, [field]: value, })); // Clear error when user starts typing if (errors[field]) { setErrors((prev) => ({ ...prev, [field]: "", })); } }; const addSpecification = () => { const newSpec: PmWorkCenterSpecification = { id: "", workCenterId: "", specificationName: "", specificationValue: "", unit: "", isRequired: false, }; setFormData((prev) => ({ ...prev, specifications: [...prev.specifications, newSpec], })); }; const updateSpecification = ( index: number, field: keyof PmWorkCenterSpecification, value: string | boolean ) => { const updatedSpecs = [...formData.specifications]; updatedSpecs[index] = { ...updatedSpecs[index], [field]: value }; setFormData((prev) => ({ ...prev, specifications: updatedSpecs, })); }; const removeSpecification = (index: number) => { setFormData((prev) => ({ ...prev, specifications: prev.specifications.filter((_, i) => i !== index), })); }; 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("WorkCenter data:", { ...formData, id: isEdit ? id : undefined, }); // Show success message alert( isEdit ? "İş Merkezi başarıyla güncellendi!" : "İş Merkezi başarıyla oluşturuldu!" ); // Navigate back to list navigate("/admin/maintenance"); } catch (error) { console.error("Error saving Workcenter:", error); alert("Bir hata oluştu. Lütfen tekrar deneyin."); } finally { setSaving(false); } }; const handleCancel = () => { navigate("/admin/maintenance"); }; if (loading) { return ; } return (
{/* Header */}

{isEdit ? "İş Merkezi Düzenle" : "Yeni İş Merkezi"}

{isEdit ? "Mevcut iş merkezi bilgilerini güncelleyin" : "Yeni iş merkezi bilgilerini girin"}

{/* Form */}
{/* Basic Information */}

Genel Bilgiler

{errors.workCenterId && (

{errors.workCenterId}

)}
{errors.workCenterType && (

{errors.workCenterType}

)}
handleInputChange("name", e.target.value)} className={`block w-full px-2.5 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="İş Merkezi adı" /> {errors.name && (

{errors.name}

)}