import React, { useState } from "react"; import { FaTimes, FaSave, FaUpload, FaMinus } from "react-icons/fa"; import { PmFaultNotification, FaultTypeEnum, CriticalityLevelEnum, NotificationStatusEnum, } from "../../../types/pm"; import { mockWorkCenters } from "../../../mocks/mockWorkCenters"; import { mockEmployees } from "../../../mocks/mockEmployees"; import { PriorityEnum } from "../../../types/common"; interface NewFaultNotificationModalProps { isOpen: boolean; onClose: () => void; onSave: (notification: Partial) => void; } const NewFaultNotificationModal: React.FC = ({ isOpen, onClose, onSave, }) => { const [notificationData, setNotificationData] = useState< Partial >({ notificationCode: `ARZ-${new Date().getFullYear()}-${String( Date.now() ).slice(-3)}`, faultType: FaultTypeEnum.Mechanical, priority: PriorityEnum.Normal, severity: CriticalityLevelEnum.Medium, status: NotificationStatusEnum.Open, followUpRequired: false, isActive: true, images: [], }); const [errors, setErrors] = useState>({}); const [uploadedImages, setUploadedImages] = useState([]); if (!isOpen) return null; const validateForm = () => { const newErrors: Record = {}; if (!notificationData.workCenterId) { newErrors.workCenterId = "İş merkezi seçimi gerekli"; } if (!notificationData.title?.trim()) { newErrors.title = "Başlık gerekli"; } if (!notificationData.description?.trim()) { newErrors.description = "Açıklama gerekli"; } if (!notificationData.location?.trim()) { newErrors.location = "Konum gerekli"; } if (!notificationData.reportedBy?.trim()) { newErrors.reportedBy = "Bildiren kişi gerekli"; } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleInputChange = ( field: keyof PmFaultNotification, value: string | number | boolean | undefined ) => { setNotificationData((prev) => ({ ...prev, [field]: value, })); // Clear error when user starts typing if (errors[field]) { setErrors((prev) => ({ ...prev, [field]: "", })); } }; const handleWorkCenterChange = (workCenterId: string) => { const selectedWorkCenter = mockWorkCenters.find( (eq) => eq.id === workCenterId ); if (selectedWorkCenter) { setNotificationData((prev) => ({ ...prev, workCenterId: selectedWorkCenter.id, workCenterCode: selectedWorkCenter.code, workCenterName: selectedWorkCenter.name, location: selectedWorkCenter.location, })); } }; const handleImageUpload = (event: React.ChangeEvent) => { const files = event.target.files; if (files) { const imageNames = Array.from(files).map((file) => file.name); setUploadedImages((prev) => [...prev, ...imageNames]); setNotificationData((prev) => ({ ...prev, images: [...(prev.images || []), ...imageNames], })); } }; const removeImage = (index: number) => { setUploadedImages((prev) => prev.filter((_, i) => i !== index)); setNotificationData((prev) => ({ ...prev, images: prev.images?.filter((_, i) => i !== index) || [], })); }; const handleSave = () => { if (validateForm()) { const notificationToSave: Partial = { ...notificationData, id: `FN${Date.now()}`, reportedAt: new Date(), creationTime: new Date(), lastModificationTime: new Date(), }; onSave(notificationToSave); onClose(); // Reset form setNotificationData({ notificationCode: `ARZ-${new Date().getFullYear()}-${String( Date.now() ).slice(-3)}`, faultType: FaultTypeEnum.Mechanical, priority: PriorityEnum.Normal, severity: CriticalityLevelEnum.Medium, status: NotificationStatusEnum.Open, followUpRequired: false, isActive: true, images: [], }); setUploadedImages([]); setErrors({}); } }; return (
{/* Header */}

Yeni Arıza Bildirimi

{/* Content */}
{/* Basic Info */}
handleInputChange("notificationCode", e.target.value) } className="w-full px-2.5 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500" placeholder="ARZ-2024-001" />
{errors.workCenterId && (

{errors.workCenterId}

)}
{/* Title and Description */}
handleInputChange("title", e.target.value)} className={`w-full px-2.5 py-1.5 text-sm border rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500 ${ errors.title ? "border-red-500" : "border-gray-300" }`} placeholder="Arıza başlığı" /> {errors.title && (

{errors.title}

)}