import React, { useState } from 'react' import { FaPlus, FaSearch, FaFilter, FaUsers, FaUser, FaEdit, FaTrash, FaEye, FaPhone, FaEnvelope, FaAward, FaClock, } from 'react-icons/fa' import { TeamRoleEnum } from '../../../types/common' import { mockMaintenanceTeams } from '../../../mocks/mockMaintenanceTeams' import NewTeamModal from './NewTeamModal' import ViewTeamModal from './ViewTeamModal' import EditTeamModal from './EditTeamModal' import AssignWorkOrderModal from './AssignWorkOrderModal' import TeamStatusChangeModal from './TeamStatusChangeModal' import Widget from '../../../components/common/Widget' import { Team } from '../../../types/common' import { getTeamRoleColor, getTeamRoleIcon, getTeamRoleText } from '../../../utils/erp' import { Container } from '@/components/shared' const MaintenanceTeams: React.FC = () => { const [searchTerm, setSearchTerm] = useState('') const [roleFilter, setRoleFilter] = useState('all') const [statusFilter, setStatusFilter] = useState<'active' | 'inactive' | 'all'>('all') // Modal states const [showNewTeamModal, setShowNewTeamModal] = useState(false) const [showViewTeamModal, setShowViewTeamModal] = useState(false) const [showEditTeamModal, setShowEditTeamModal] = useState(false) const [showAssignWorkOrderModal, setShowAssignWorkOrderModal] = useState(false) const [showStatusChangeModal, setShowStatusChangeModal] = useState(false) // Selected data const [viewingTeam, setViewingTeam] = useState(null) const [editingTeam, setEditingTeam] = useState(null) const [selectedTeams, setSelectedTeams] = useState([]) // Mock data - replace with actual API calls const [teams, setTeams] = useState(mockMaintenanceTeams) const filteredTeams = teams.filter((team) => { const matchesSearch = team.code.toLowerCase().includes(searchTerm.toLowerCase()) || team.name.toLowerCase().includes(searchTerm.toLowerCase()) || team.members.some( (member) => member.employee?.firstName.toLowerCase().includes(searchTerm.toLowerCase()) || member.employee?.lastName.toLowerCase().includes(searchTerm.toLowerCase()), ) const matchesRole = roleFilter === 'all' || team.members.some((member) => member.role === roleFilter) const matchesStatus = statusFilter === 'all' || (statusFilter === 'active' && team.isActive) || (statusFilter === 'inactive' && !team.isActive) return matchesSearch && matchesRole && matchesStatus }) const getTeamLeader = (team: Team) => { return team.members.find((member) => member.role === TeamRoleEnum.Lead) } const getActiveMembers = (team: Team) => { return team.members.filter((member) => member.isActive) } const handleAddTeam = () => { setEditingTeam(null) setShowNewTeamModal(true) } const handleViewTeam = (team: Team) => { setViewingTeam(team) setShowViewTeamModal(true) } const handleEditTeam = (team: Team) => { setEditingTeam(team) setShowEditTeamModal(true) } const handleSelectTeam = (teamId: string) => { setSelectedTeams((prev) => prev.includes(teamId) ? prev.filter((id) => id !== teamId) : [...prev, teamId], ) } const handleNewTeamSave = (newTeam: Partial) => { if (newTeam.id) { setTeams((prev) => [...prev, newTeam as Team]) } } const handleEditTeamSave = (updatedTeam: Team) => { setTeams((prev) => prev.map((team) => (team.id === updatedTeam.id ? updatedTeam : team))) } const handleAssignWorkOrders = (assignments: { teamId: string; planIds: string[] }[]) => { // Here you would typically make API calls to assign work orders console.log('Assigning work orders:', assignments) // Show success message or handle the actual assignment logic } const handleStatusChange = (teamIds: string[], newStatus: boolean, reason?: string) => { setTeams((prev) => prev.map((team) => teamIds.includes(team.id) ? { ...team, isActive: newStatus, lastModificationTime: new Date() } : team, ), ) setSelectedTeams([]) // Here you would typically log the status change with reason console.log('Status change:', { teamIds, newStatus, reason }) } const selectedTeamObjects = teams.filter((team) => selectedTeams.includes(team.id)) return (
{/* Header */}

Bakım Ekipleri

Bakım ekiplerini ve üyelerini yönetin

{/* Summary Cards */}
t.isActive).length} color="green" icon="FaCheckCircle" /> total + getActiveMembers(team).length, 0)} color="orange" icon="FaUser" /> total + (team.specializations?.length || 0), 0)} color="purple" icon="FaWrench" />
{/* Filters */}
setSearchTerm(e.target.value)} className="w-full pl-9 pr-4 py-1.5 text-sm border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500" />
{/* Teams Grid */}
{filteredTeams.map((team) => { const leader = getTeamLeader(team) const activeMembers = getActiveMembers(team) return (
handleSelectTeam(team.id)} className="rounded border-gray-300 text-blue-600 focus:ring-blue-500 mt-0.5" />

{team.code}

{team.isActive ? 'Aktif' : 'Pasif'}

{team.name}

{team.description}

{/* Team Leader */} {leader && (
{leader.employee?.firstName} {leader.employee?.lastName}
{getTeamRoleIcon(leader.role)} {getTeamRoleText(leader.role)}

{leader.employee?.jobPosition?.code}

{leader.employee?.email && (
{leader.employee.email}
)} {leader.employee?.phone && (
{leader.employee.phone}
)}
)} {/* Team Members */}
Ekip Üyeleri ({activeMembers.length})
{activeMembers .filter((member) => member.role !== TeamRoleEnum.Lead) .slice(0, 3) .map((member) => (
{member.employee?.firstName} {member.employee?.lastName} {getTeamRoleIcon(member.role)} {getTeamRoleText(member.role)}

{member.employee?.jobPosition?.code}

))} {activeMembers.filter((member) => member.role !== TeamRoleEnum.Lead).length > 3 && (
+ {activeMembers.filter((member) => member.role !== TeamRoleEnum.Lead) .length - 3}{' '} kişi daha...
)}
{/* Specializations */}
Uzmanlık Alanları
{team.specializations ?? [].slice(0, 6).map((specialization, index) => ( {specialization} ))} {(team.specializations?.length ?? 0) > 6 && ( +{(team.specializations?.length ?? 0) - 6} )}
Oluşturuldu: {team.creationTime.toLocaleDateString('tr-TR')}
Son Güncelleme: {team.lastModificationTime.toLocaleDateString('tr-TR')}
) })}
{filteredTeams.length === 0 && (

Ekip bulunamadı

Arama kriterlerinizi değiştirin veya yeni bir ekip oluşturun.

)} {/* Bulk Actions */} {selectedTeams.length > 0 && (
{selectedTeams.length} ekip seçildi
)}
{/* Modals */} setShowNewTeamModal(false)} onSave={handleNewTeamSave} /> setShowViewTeamModal(false)} onEdit={handleEditTeam} team={viewingTeam} /> setShowEditTeamModal(false)} onSave={handleEditTeamSave} team={editingTeam} /> setShowAssignWorkOrderModal(false)} onSave={handleAssignWorkOrders} selectedTeams={selectedTeamObjects} /> setShowStatusChangeModal(false)} onSave={handleStatusChange} selectedTeams={selectedTeamObjects} />
) } export default MaintenanceTeams