import { Button } from "@/shared/ui/button"; import { AlertTriangle, Calendar, ChevronLeft, ChevronRight, Eye, Mail, Pencil, Phone, Plus, Search, Trash2, Users, X, } from "lucide-react"; import { useState } from "react"; import { useNavigate } from "react-router-dom"; type User = { id: number; username: string; email?: string; phone?: string; createdAt: string; }; export default function UserList() { const [searchQuery, setSearchQuery] = useState(""); const [currentPage, setCurrentPage] = useState(1); const usersPerPage = 6; const navigate = useNavigate(); const [users, setUsers] = useState([ { id: 1, username: "john_doe", email: "john@example.com", createdAt: "2024-01-15", }, { id: 2, username: "jane_smith", phone: "+998907654321", createdAt: "2024-01-20", }, { id: 3, username: "ali_karimov", phone: "+998909876543", createdAt: "2024-02-01", }, { id: 4, username: "sara_johnson", email: "sara@example.com", phone: "+998901234567", createdAt: "2024-02-10", }, { id: 5, username: "murod_toshev", email: "murod@example.com", createdAt: "2024-02-15", }, { id: 6, username: "aziza_sobirova", email: "aziza@example.com", createdAt: "2024-03-01", }, { id: 7, username: "timur_ergashev", phone: "+998907777777", createdAt: "2024-03-10", }, { id: 8, username: "odil_akbarov", email: "odil@example.com", createdAt: "2024-03-12", }, { id: 9, username: "lola_nazarova", phone: "+998909111222", createdAt: "2024-04-05", }, { id: 10, username: "bahrom_tursunov", email: "bahrom@example.com", createdAt: "2024-04-10", }, ]); const [confirmDelete, setConfirmDelete] = useState(null); const handleDelete = (id: number) => { setUsers((prev) => prev.filter((u) => u.id !== id)); setConfirmDelete(null); }; const formatPhone = (phone: string) => { if (phone.startsWith("+998")) { return phone.replace( /(\+998)(\d{2})(\d{3})(\d{2})(\d{2})/, "$1 $2 $3 $4 $5", ); } return phone; }; const filteredUsers = users.filter( (user) => user.username.toLowerCase().includes(searchQuery.toLowerCase()) || user.email?.toLowerCase().includes(searchQuery.toLowerCase()) || user.phone?.includes(searchQuery), ); const totalPages = Math.ceil(filteredUsers.length / usersPerPage); const startIndex = (currentPage - 1) * usersPerPage; const paginatedUsers = filteredUsers.slice( startIndex, startIndex + usersPerPage, ); const getInitials = (username: string) => username.slice(0, 2).toUpperCase(); const getAvatarGradient = (id: number) => { const gradients = ["from-blue-600 to-cyan-500"]; return gradients[id % gradients.length]; }; return (

Foydalanuvchilar

Jami {users.length} ta foydalanuvchini boshqaring

} gradient="from-blue-600 to-blue-400" /> u.email).length.toString()} icon={} gradient="from-cyan-600 to-cyan-400" /> u.phone).length.toString()} icon={} gradient="from-purple-600 to-pink-400" />
{ setSearchQuery(e.target.value); setCurrentPage(1); }} className="w-full pl-14 pr-4 py-3 bg-slate-700/30 border border-slate-600/50 text-white placeholder-slate-400 rounded-xl focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all" />
{paginatedUsers.map((user) => (
{getInitials(user.username)}

{user.username}

Faol
{user.email && (
{user.email}
)} {user.phone && (
{formatPhone(user.phone)}
)}
{user.createdAt}
))}
{[...Array(totalPages)].map((_, i) => ( ))}
{confirmDelete && (

Foydalanuvchini o'chirish

Siz{" "} {confirmDelete.username} {" "} foydalanuvchini o'chirmoqchimisiz?

Ushbu amalni qaytarib bo'lmaydi.

)}
); } function StatCard({ title, value, icon, gradient, }: { title: string; value: string; icon: React.ReactNode; gradient: string; }) { return (

{title}

{icon}

{value}

); }