import React, { useState, useEffect } from "react"; import { FaTimes, FaSave, FaCalendar, FaClock } from "react-icons/fa"; import { PmCalendarEvent, WorkOrderStatusEnum } from "../../../types/pm"; import { mockWorkCenters } from "../../../mocks/mockWorkCenters"; import { mockEmployees } from "../../../mocks/mockEmployees"; import { PriorityEnum } from "../../../types/common"; interface NewCalendarEventModalProps { isOpen: boolean; onClose: () => void; onSave: (event: Partial) => void; selectedDate?: Date; } const NewCalendarEventModal: React.FC = ({ isOpen, onClose, onSave, selectedDate, }) => { const getInitialStartTime = () => { if (selectedDate) { const hour = selectedDate.getHours(); const minute = selectedDate.getMinutes(); return `${hour.toString().padStart(2, "0")}:${minute .toString() .padStart(2, "0")}`; } return "09:00"; }; const getInitialEndTime = () => { if (selectedDate) { const endTime = new Date(selectedDate); endTime.setHours(endTime.getHours() + 1); const hour = endTime.getHours(); const minute = endTime.getMinutes(); return `${hour.toString().padStart(2, "0")}:${minute .toString() .padStart(2, "0")}`; } return "10:00"; }; const [eventData, setEventData] = useState>({ title: "", type: "plan", date: selectedDate || new Date(), startTime: getInitialStartTime(), endTime: getInitialEndTime(), status: WorkOrderStatusEnum.Planned, priority: PriorityEnum.Normal, assignedTo: "", workCenterCode: "", duration: 60, }); const [errors, setErrors] = useState>({}); // Update form data when selectedDate changes useEffect(() => { if (selectedDate) { const getInitialStartTime = () => { const hour = selectedDate.getHours(); const minute = selectedDate.getMinutes(); return `${hour.toString().padStart(2, "0")}:${minute .toString() .padStart(2, "0")}`; }; const getInitialEndTime = () => { const endTime = new Date(selectedDate); endTime.setHours(endTime.getHours() + 1); const hour = endTime.getHours(); const minute = endTime.getMinutes(); return `${hour.toString().padStart(2, "0")}:${minute .toString() .padStart(2, "0")}`; }; setEventData((prev) => ({ ...prev, date: selectedDate, startTime: getInitialStartTime(), endTime: getInitialEndTime(), })); } }, [selectedDate]); if (!isOpen) return null; const validateForm = () => { const newErrors: Record = {}; if (!eventData.title?.trim()) { newErrors.title = "Başlık gerekli"; } if (!eventData.workCenterCode?.trim()) { newErrors.workCenterCode = "İş Merkezi seçimi gerekli"; } if (!eventData.startTime) { newErrors.startTime = "Başlangıç saati gerekli"; } if (!eventData.endTime) { newErrors.endTime = "Bitiş saati gerekli"; } if (eventData.startTime && eventData.endTime) { const start = new Date(`2000-01-01 ${eventData.startTime}`); const end = new Date(`2000-01-01 ${eventData.endTime}`); if (start >= end) { newErrors.endTime = "Bitiş saati başlangıç saatinden sonra olmalı"; } } setErrors(newErrors); return Object.keys(newErrors).length === 0; }; const handleSave = () => { if (validateForm()) { // Calculate duration if (eventData.startTime && eventData.endTime) { const start = new Date(`2000-01-01 ${eventData.startTime}`); const end = new Date(`2000-01-01 ${eventData.endTime}`); const durationMinutes = (end.getTime() - start.getTime()) / (1000 * 60); eventData.duration = durationMinutes; } onSave({ ...eventData, id: `E${Date.now()}`, // Generate a simple ID }); onClose(); // Reset form setEventData({ title: "", type: "plan", date: selectedDate || new Date(), startTime: getInitialStartTime(), endTime: getInitialEndTime(), status: WorkOrderStatusEnum.Planned, priority: PriorityEnum.Normal, assignedTo: "", workCenterCode: "", duration: 60, }); setErrors({}); } }; const handleInputChange = ( field: keyof PmCalendarEvent, value: | string | Date | PriorityEnum | WorkOrderStatusEnum | "plan" | "workorder" | "scheduled" ) => { setEventData((prev) => ({ ...prev, [field]: value, })); // Clear error when user starts typing if (errors[field]) { setErrors((prev) => ({ ...prev, [field]: "", })); } }; const generateTimeOptions = () => { const options = []; for (let hour = 0; hour < 24; hour++) { for (let minute = 0; minute < 60; minute += 30) { const timeString = `${hour.toString().padStart(2, "0")}:${minute .toString() .padStart(2, "0")}`; options.push(timeString); } } return options; }; const timeOptions = generateTimeOptions(); return (
{/* Header */}

Yeni Bakım Planlaması

{/* Content */}
{/* Basic Info */}
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="Bakım planı başlığı" /> {errors.title && (

{errors.title}

)}
{errors.workCenterCode && (

{errors.workCenterCode}

)}
{/* Date and Time */}
handleInputChange("date", new Date(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" />
{errors.startTime && (

{errors.startTime}

)}
{errors.endTime && (

{errors.endTime}

)}
{/* Status */} {eventData.type === "workorder" && (
)}
{/* Footer */}
); }; export default NewCalendarEventModal;