import { Alert, Button, Center, Group, Modal, Pagination, Table, } from "@mantine/core"; import { IconInfoCircle } from "@tabler/icons-react"; import { usePubSub } from "create-pubsub/react"; import { useCallback, useMemo, useState } from "react"; import { logEntriesPubSub } from "../../modules/logEntries"; export default function LogsModal({ opened, onClose, }: { opened: boolean; onClose: () => void; }) { const [logEntries] = usePubSub(logEntriesPubSub); const [page, setPage] = useState(1); const logEntriesPerPage = 5; const logEntriesFromCurrentPage = useMemo( () => logEntries.slice( (page - 1) * logEntriesPerPage, page * logEntriesPerPage, ), [logEntries, page], ); const downloadLogsAsJson = useCallback(() => { const jsonString = JSON.stringify(logEntries, null, 2); const blob = new Blob([jsonString], { type: "application/json" }); const url = URL.createObjectURL(blob); const link = document.createElement("a"); link.href = url; link.download = "logs.json"; document.body.appendChild(link); link.click(); document.body.removeChild(link); URL.revokeObjectURL(url); }, [logEntries]); return ( } mb="md"> This information is stored solely in your browser for personal use. It isn't sent automatically and is retained for debugging purposes should you need to{" "} report a bug . Time Message {logEntriesFromCurrentPage.map((entry, index) => ( {new Date(entry.timestamp).toLocaleTimeString()} {entry.message} ))}
); }