import React, { useState } from 'react' import { Link } from 'react-router-dom' import { useQuery } from '@tanstack/react-query' import { FaFolder, FaPlus, FaSearch, FaFilter, FaDownload, FaEdit, FaEye, FaCalendar, FaUser, FaDollarSign, FaExclamationTriangle, FaBullseye, FaTh, FaList, FaFlag, FaTasks, } from 'react-icons/fa' import classNames from 'classnames' import { ProjectStatusEnum, PsProject } from '../../../types/ps' import dayjs from 'dayjs' import { mockProjects } from '../../../mocks/mockProjects' import PhaseViewModal from './PhaseViewModal' import TaskViewModal from './TaskViewModal' import Widget from '../../../components/common/Widget' import { PriorityEnum } from '../../../types/common' import { getProjectStatusColor, getProjectStatusIcon, getProjectStatusText, getPriorityColor, getPriorityText, getProgressColor, } from '../../../utils/erp' import { Container } from '@/components/shared' import { ROUTES_ENUM } from '@/routes/route.constant' const ProjectList: React.FC = () => { const [searchTerm, setSearchTerm] = useState('') const [filterStatus, setFilterStatus] = useState('all') const [filterPriority, setFilterPriority] = useState('all') const [showFilters, setShowFilters] = useState(false) const [viewMode, setViewMode] = useState<'card' | 'list'>('list') // Modal states const [phasesModalOpen, setPhasesModalOpen] = useState(false) const [tasksModalOpen, setTasksModalOpen] = useState(false) const [selectedProject, setSelectedProject] = useState(null) // Modal functions const openPhasesModal = (project: PsProject) => { setSelectedProject(project) setPhasesModalOpen(true) } const openTasksModal = (project: PsProject) => { setSelectedProject(project) setTasksModalOpen(true) } const closeModals = () => { setPhasesModalOpen(false) setTasksModalOpen(false) setSelectedProject(null) } const { data: projects, isLoading, error, } = useQuery({ queryKey: ['projects', searchTerm, filterStatus, filterPriority], queryFn: async () => { await new Promise((resolve) => setTimeout(resolve, 500)) return mockProjects.filter((project) => { const matchesSearch = project.code.toLowerCase().includes(searchTerm.toLowerCase()) || project.name.toLowerCase().includes(searchTerm.toLowerCase()) const matchesStatus = filterStatus === 'all' || project.status === filterStatus const matchesPriority = filterPriority === 'all' || project.priority === filterPriority return matchesSearch && matchesStatus && matchesPriority }) }, }) if (isLoading) { return (
Projeler yükleniyor...
) } if (error) { return (
Projeler yüklenirken hata oluştu.
) } return (

Proje Listesi

Proje listesinizi yönetin

{/* View Toggle */}
Yeni Proje
{/* Header Actions */}
setSearchTerm(e.target.value)} className="pl-10 pr-3 py-1.5 text-sm w-80 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
{/* Filters Panel */} {showFilters && (
)} {/* Statistics Cards */}
p.status === ProjectStatusEnum.Active).length || 0} color="green" icon="FaArrowUp" /> acc + p.budget, 0).toLocaleString() || 0}`} color="purple" icon="FaDollarSign" /> acc + p.progress, 0) / projects.length, )}%` : '0%' } color="yellow" icon="FaBullseye" />
{/* Projects Display */} {viewMode === 'list' ? ( /* List View */

Proje Listesi

{projects?.map((project) => ( ))}
Proje Bilgileri Proje Yöneticisi Durum / Öncelik Tarihler Bütçe / Maliyet İlerleme İşlemler
{project.code}
{project.name}
{project.projectManager?.fullName}
{getProjectStatusIcon(project.status)} {getProjectStatusText(project.status)}
{getPriorityText(project.priority)}
{dayjs(project.startDate).format('DD.MM.YYYY')}
Bitiş: {dayjs(project.endDate).format('DD.MM.YYYY')}
₺{project.budget.toLocaleString()}
Harcanan: ₺{project.actualCost.toLocaleString()}
%{Math.round((project.actualCost / project.budget) * 100)} kullanıldı
%{project.progress}
) : ( /* Card View */
{projects?.map((project) => (

{project.code}

{project.name}

{getProjectStatusIcon(project.status)} {getProjectStatusText(project.status)} {getPriorityText(project.priority)}
{/* Project Manager */}
Proje Yöneticisi

{project.projectManager?.fullName}

{/* Progress */}
İlerleme {project.progress}%
{/* Dates and Budget */}
Başlangıç {dayjs(project.startDate).format('DD.MM.YYYY')}
Bitiş {dayjs(project.endDate).format('DD.MM.YYYY')}
Bütçe ₺{project.budget.toLocaleString()}
Harcanan ₺{project.actualCost.toLocaleString()}
{/* Budget Usage */}
Bütçe Kullanımı %{Math.round((project.actualCost / project.budget) * 100)}
))}
)} {/* Empty State */} {(!projects || projects.length === 0) && (

Proje bulunamadı

Yeni proje oluşturarak başlayın.

Yeni Proje Oluştur
)}
{/* Modals */} {selectedProject && ( <> )} ) } export default ProjectList