import React, { useState } from "react"; import { Link } from "react-router-dom"; import { useQuery } from "@tanstack/react-query"; import { FaBuilding, FaPlus, FaSearch, FaFilter, FaDownload, FaEdit, FaEye, FaMapMarkerAlt, FaBox, FaArrowUp, FaExclamationTriangle, FaChartLine, } from "react-icons/fa"; import classNames from "classnames"; import { WarehouseTypeEnum } from "../../../types/wm"; import { mockWarehouses } from "../../../mocks/mockWarehouses"; import { getWarehouseTypeColor, getWarehouseTypeText, } from "../../../utils/erp"; const WarehouseList: React.FC = () => { const [searchTerm, setSearchTerm] = useState(""); const [filterType, setFilterType] = useState("all"); const [showFilters, setShowFilters] = useState(false); const { data: warehouses, isLoading, error, } = useQuery({ queryKey: ["warehouses", searchTerm, filterType], queryFn: async () => { await new Promise((resolve) => setTimeout(resolve, 500)); return mockWarehouses.filter((warehouse) => { const matchesSearch = warehouse.code.toLowerCase().includes(searchTerm.toLowerCase()) || warehouse.name.toLowerCase().includes(searchTerm.toLowerCase()); const matchesType = filterType === "all" || warehouse.warehouseType === filterType; return matchesSearch && matchesType; }); }, }); const getUtilizationColor = (utilization: number) => { const percentage = utilization; if (percentage >= 90) return "text-red-600"; if (percentage >= 75) return "text-yellow-600"; return "text-green-600"; }; if (isLoading) { return (
Depolar yükleniyor...
); } if (error) { return (
Depolar yüklenirken hata oluştu.
); } return (
{/* Header Actions */}
setSearchTerm(e.target.value)} className="pl-10 pr-4 py-1.5 text-sm w-64 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent" />
Yeni Depo
{/* Filters Panel */} {showFilters && (
)} {/* Statistics Cards */}

Toplam Depo

{warehouses?.length || 0}

Toplam Kapasite

{warehouses ?.reduce((acc, w) => acc + w.capacity, 0) .toLocaleString() || 0}

Kullanım Oranı

{warehouses?.length ? Math.round( (warehouses.reduce( (acc, w) => acc + w.currentUtilization, 0 ) / (warehouses.reduce((acc, w) => acc + w.capacity, 0) || 1)) * 100 ) : 0} %

Aktif Depo

{warehouses?.filter((w) => w.isActive).length || 0}

{/* Warehouses Table */}

Depo Listesi

{warehouses?.map((warehouse) => { const utilizationPercentage = Math.round( (warehouse.currentUtilization / warehouse.capacity) * 100 ); return ( ); })}
Depo Bilgileri Tür / Konum Kapasite Kullanım Oranı Performans Durum İşlemler
{warehouse.code}
{warehouse.name}
{warehouse.isMainWarehouse && ( Ana Depo )}
{getWarehouseTypeText(warehouse.warehouseType)}
{warehouse.address?.city},{" "} {warehouse.address?.country}
{warehouse.capacity.toLocaleString()} m³
Toplam Kapasite
Kullanılan: {warehouse.currentUtilization.toLocaleString()} m³
= 90 ? "bg-red-500" : utilizationPercentage >= 75 ? "bg-yellow-500" : "bg-green-500" )} style={{ width: `${Math.min(utilizationPercentage, 100)}%`, }} />
%{utilizationPercentage}
Verimli
Son 30 gün
{warehouse.isActive ? "Aktif" : "Pasif"}
{(!warehouses || warehouses.length === 0) && (

Depo bulunamadı

Yeni depo ekleyerek başlayın.

Yeni Depo Ekle
)}
); }; export default WarehouseList;