From 81d560cf9183333016ff25abaa3e0e0729552ef8 Mon Sep 17 00:00:00 2001 From: Mark Sinclair Date: Thu, 8 Sep 2022 12:02:34 +0100 Subject: [PATCH] LogViewer react component --- nym-wallet/src/components/LogViewer/index.tsx | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 nym-wallet/src/components/LogViewer/index.tsx diff --git a/nym-wallet/src/components/LogViewer/index.tsx b/nym-wallet/src/components/LogViewer/index.tsx new file mode 100644 index 0000000000..58d6ad634e --- /dev/null +++ b/nym-wallet/src/components/LogViewer/index.tsx @@ -0,0 +1,84 @@ +import React, { FC, useEffect, useRef, useState } from 'react'; +import type { UnlistenFn } from '@tauri-apps/api/event'; +import { listen } from '@tauri-apps/api/event'; +import { Box, Paper, Stack, Table, TableBody, TableCell, TableContainer, TableRow } from '@mui/material'; + +// see https://github.com/tauri-apps/tauri-plugin-log/blob/dev/webview-src/index.ts#L4 +enum LogLevel { + Trace = 1, + Debug, + Info, + Warn, + Error, +} + +const getLogLevelName = (value: LogLevel) => { + switch (value) { + case LogLevel.Trace: + return 'Trace'; + case LogLevel.Debug: + return 'Debug'; + case LogLevel.Info: + return 'Info'; + case LogLevel.Warn: + return 'Warn'; + case LogLevel.Error: + return 'Error'; + default: + return 'Unknown'; + } +}; + +// see https://github.com/tauri-apps/tauri-plugin-log/blob/dev/webview-src/index.ts#L147 +interface RecordPayload { + level: LogLevel; + message: string; +} + +export const LogViewer: FC = () => { + const unlisten = useRef(); + const messages = useRef([]); + const [messageCount, setMessageCount] = useState(0); + + useEffect(() => { + listen('log://log', (event) => { + console.log(event.payload); + const payload = event.payload as RecordPayload; + messages.current.unshift(payload); + setMessageCount((prev) => prev + 1); + }).then((fn) => { + unlisten.current = fn; + }); + + return () => { + if (unlisten.current) { + unlisten.current(); + } + }; + }, []); + + return ( + + {messageCount} logs + +
+
+ + + + {messages.current.map((m) => ( + + + {getLogLevelName(m.level)} + + +
{m.message}
+
+
+ ))} +
+
+
+
+ ); +};