import { useState, memo } from 'react'; import { Form } from '@remix-run/react'; import { DataTable, Pagination, Button, Text, ConfirmModal } from '~/components/ui'; import { getAuthLevelName, getStatusName } from '~/lib/user-utils'; import { useSettings } from '~/contexts/SettingsContext'; import { AUTH_LEVELS } from '~/types/auth'; import type { UserWithoutPassword } from '~/types/database'; interface UserListProps { users: UserWithoutPassword[]; currentPage: number; totalPages: number; onPageChange: (page: number) => void; onEdit: (user: UserWithoutPassword) => void; onDelete: (userId: number) => void; onToggleStatus: (userId: number) => void; currentUserAuthLevel: number; loading?: boolean; } export const UserList = memo(function UserList({ users, currentPage, totalPages, onPageChange, onEdit, onDelete, onToggleStatus, currentUserAuthLevel, loading = false, }: UserListProps) { const { formatDate } = useSettings(); const [deleteModal, setDeleteModal] = useState<{ isOpen: boolean; user: UserWithoutPassword | null; }>({ isOpen: false, user: null }); const [statusModal, setStatusModal] = useState<{ isOpen: boolean; user: UserWithoutPassword | null; }>({ isOpen: false, user: null }); const handleDeleteClick = (user: UserWithoutPassword) => { setDeleteModal({ isOpen: true, user }); }; const handleStatusClick = (user: UserWithoutPassword) => { setStatusModal({ isOpen: true, user }); }; const handleDeleteConfirm = () => { if (deleteModal.user) { onDelete(deleteModal.user.id); } setDeleteModal({ isOpen: false, user: null }); }; const handleStatusConfirm = () => { if (statusModal.user) { onToggleStatus(statusModal.user.id); } setStatusModal({ isOpen: false, user: null }); }; const canEditUser = (user: UserWithoutPassword) => { // Superadmin can edit anyone if (currentUserAuthLevel === AUTH_LEVELS.SUPERADMIN) return true; // Admin cannot edit superadmin if (currentUserAuthLevel === AUTH_LEVELS.ADMIN && user.authLevel === AUTH_LEVELS.SUPERADMIN) { return false; } return true; }; const canDeleteUser = (user: UserWithoutPassword) => { // Same rules as edit return canEditUser(user); }; const columns = [ { key: 'name', header: 'الاسم', sortable: true, render: (user: UserWithoutPassword) => (