import React, { useState } from 'react' import { FaTimes, FaSave, FaPlus, FaMinus } from 'react-icons/fa' import { TeamRoleEnum } from '../../../types/common' import MultiSelectEmployee from '../../../components/common/MultiSelectEmployee' import { mockEmployees } from '../../../mocks/mockEmployees' import { Team, TeamMember } from '../../../types/common' import { getTeamRoleText } from '@/utils/erp' interface NewTeamModalProps { isOpen: boolean onClose: () => void onSave: (team: Partial) => void } const NewTeamModal: React.FC = ({ isOpen, onClose, onSave }) => { const [teamData, setTeamData] = useState>({ code: '', name: '', description: '', isActive: true, specializations: [], members: [], }) const [selectedEmployees, setSelectedEmployees] = useState([]) const [newSpecialization, setNewSpecialization] = useState('') const [errors, setErrors] = useState>({}) const validateForm = () => { const newErrors: Record = {} if (!teamData.code?.trim()) { newErrors.teamCode = 'Ekip kodu gerekli' } if (!teamData.name?.trim()) { newErrors.teamName = 'Ekip adı gerekli' } if (!teamData.description?.trim()) { newErrors.description = 'Açıklama gerekli' } if (!teamData.managerId) { newErrors.managerId = 'Ekip yöneticisi seçilmeli' } if (selectedEmployees.length === 0) { newErrors.members = 'En az bir ekip üyesi seçilmeli' } setErrors(newErrors) return Object.keys(newErrors).length === 0 } const handleInputChange = (field: keyof Team, value: string | boolean | string[]) => { setTeamData((prev) => ({ ...prev, [field]: value, })) // Clear error when user starts typing if (errors[field]) { setErrors((prev) => ({ ...prev, [field]: '', })) } } const addSpecialization = () => { if (newSpecialization.trim() && !teamData.specializations?.includes(newSpecialization.trim())) { setTeamData((prev) => ({ ...prev, specializations: [...(prev.specializations || []), newSpecialization.trim()], })) setNewSpecialization('') } } const removeSpecialization = (index: number) => { setTeamData((prev) => ({ ...prev, specializations: prev.specializations?.filter((_, i) => i !== index) || [], })) } const handleEmployeeSelection = (employees: string[]) => { setSelectedEmployees(employees) if (errors.members) { setErrors((prev) => ({ ...prev, members: '', })) } } const handleMemberRoleChange = (employeeName: string, role: TeamRoleEnum) => { const employee = mockEmployees.find((emp) => emp.fullName === employeeName) if (role === TeamRoleEnum.Lead && employee) { handleInputChange('managerId', employee.id) } } const handleSave = () => { if (validateForm()) { const members: TeamMember[] = selectedEmployees.map((employeeName, index) => { const employee = mockEmployees.find((emp) => emp.fullName === employeeName) const isLeader = index === 0 // First selected employee becomes leader return { id: `TM${Date.now()}-${index}`, teamId: '', employeeId: employee?.id || '', employee: employee, role: isLeader ? TeamRoleEnum.Lead : TeamRoleEnum.Member, joinDate: new Date(), isActive: true, } }) const teamId = `MT${Date.now()}` // Update members with the teamId members.forEach((member) => { member.teamId = teamId }) const teamToSave: Partial = { ...teamData, id: teamId, managerId: members.find((m) => m.role === TeamRoleEnum.Lead)?.employeeId, members, creationTime: new Date(), lastModificationTime: new Date(), } onSave(teamToSave) onClose() // Reset form setTeamData({ code: '', name: '', description: '', isActive: true, specializations: [], members: [], }) setSelectedEmployees([]) setNewSpecialization('') setErrors({}) } } return ( isOpen && (
{/* Header */}

Yeni Ekip Oluştur

{/* Content */}
{/* Basic Info */}
handleInputChange('code', 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.code ? 'border-red-500' : 'border-gray-300' }`} placeholder="MEC-001" /> {errors.code &&

{errors.code}

}
handleInputChange('name', 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.name ? 'border-red-500' : 'border-gray-300' }`} placeholder="Mekanik Bakım Ekibi" /> {errors.name &&

{errors.name}

}
{/* Description */}