import React, { FC, useState } from 'react'; import { Table, Tag, Typography } from 'antd'; import Linkify from 'react-linkify'; import { SortOrder, TablePaginationConfig } from 'antd/lib/table/interface'; import { format } from 'date-fns'; 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}; } export type LogTableProps = { logs: object[]; initialPageSize: number; }; export const LogTable: FC = ({ logs, initialPageSize }) => { if (!logs?.length) { return null; } const [pageSize, setPageSize] = useState(initialPageSize); const handleTableChange = (pagination: TablePaginationConfig) => { setPageSize(pagination.pageSize); }; 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, 'pp 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, }} onChange={handleTableChange} /> ); };