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' import { getCriticalityLevelText, getFaultTypeText, getPriorityText } from '@/utils/erp' interface NewFaultNotificationModalProps { isOpen: boolean onClose: () => void onSave: (notification: Partial) => void } const NewFaultNotificationModal: React.FC = ({ isOpen, onClose, onSave, }) => { const [notificationData, setNotificationData] = useState>({ 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}

}