import React from "react"; import { Table, Tag, Typography } from "antd"; import Linkify from "react-linkify"; import { SortOrder } from "antd/lib/table/interface"; import format from 'date-fns/format' const { Title } = Typography; function renderColumnLevel(text, entry) { let color = 'black'; if (entry.level === "warning") { color = "orange"; } else if (entry.level === 'error') { color = "red"; } return {text}; } function renderMessage(text) { return ( {text} ) } interface Props { logs: object[], pageSize: number } export default function LogTable({ logs, pageSize }: Props) { if (!logs?.length) { return null; } const columns = [ { title: "Level", dataIndex: "level", key: "level", filters: [ { text: "Info", value: "info", }, { text: "Warning", value: "warning", }, { text: "Error", value: "Error", }, ], onFilter: (level, row) => row.level.indexOf(level) === 0, render: renderColumnLevel, }, { title: "Timestamp", dataIndex: "time", key: "time", render: (timestamp) => { const dateObject = new Date(timestamp); return format(dateObject, 'p P'); }, sorter: (a, b) => new Date(a.time).getTime() - new Date(b.time).getTime(), sortDirections: ["descend", "ascend"] as SortOrder[], defaultSortOrder: "descend" as SortOrder, }, { title: "Message", dataIndex: "message", key: "message", render: renderMessage, }, ]; return (
Logs row.time} pagination={{ pageSize: pageSize || 20 }} /> ); }