import React, { useState } from "react"; import { Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TablePagination, Paper, Input, IconButton, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Button, InputAdornment, Box, } from "@mui/material"; import DeleteIcon from "@mui/icons-material/Delete"; import SearchIcon from "@mui/icons-material/Search"; import { QuizTypeShort } from "../../Types/QuizType"; import { LabelMap } from "../../Types/LabelMap"; interface AdminTableProps { data: QuizTypeShort[]; onDelete: (row: QuizTypeShort) => void; filterKeys?: string[]; labelMap?: LabelMap; } const AdminTable: React.FC = ({ data, onDelete, filterKeys = [], labelMap = {}, }) => { const [page, setPage] = useState(0); const [rowsPerPage, setRowsPerPage] = useState(10); const [searchQuery, setSearchQuery] = useState(""); const [openDialog, setOpenDialog] = useState(false); const [deleteRow, setDeleteRow] = useState(null); const handleChangePage = (_event: unknown, newPage: number) => { setPage(newPage); }; const handleChangeRowsPerPage = (event: React.ChangeEvent) => { setRowsPerPage(parseInt(event.target.value, 10)); setPage(0); }; const handleSearchChange = (event: React.ChangeEvent) => { setSearchQuery(event.target.value); setPage(0); }; const handleOpenDialog = (row: QuizTypeShort) => { setDeleteRow(row); setOpenDialog(true); }; const handleCloseDialog = () => { setOpenDialog(false); setDeleteRow(null); }; const handleConfirmDelete = () => { if (deleteRow) { onDelete(deleteRow); } handleCloseDialog(); }; const filteredData = data.filter((row) => { return Object.values(row).some((value) => value.toString().toLowerCase().includes(searchQuery.toLowerCase()) ); }); const headers = Object.keys(labelMap).filter((key) => !filterKeys.includes(key)); return ( } sx={{ width: "30%" }} /> {headers.map((key) => ( {labelMap[key] || key} {/* Use custom label from map or fallback to key */} ))} {filteredData .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) .map((row, index) => ( {headers.map((key) => { const value = row[key as keyof QuizTypeShort]; let displayValue; if (value instanceof Date) { displayValue = value.toLocaleDateString("en-GB"); } else if (value && typeof value === "string" && !isNaN(Date.parse(value))) { displayValue = new Date(value).toLocaleDateString("en-GB"); } else { displayValue = value; } return {displayValue}; })} handleOpenDialog(row)}> ))}
Confirm Deletion Are you sure you want to delete this record?
); }; export default AdminTable;