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"; 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;