diff --git a/src/features/DebugConsole/DebugConsole.tsx b/src/features/DebugConsole/DebugConsole.tsx
index 9324274..02f1332 100644
--- a/src/features/DebugConsole/DebugConsole.tsx
+++ b/src/features/DebugConsole/DebugConsole.tsx
@@ -1,23 +1,23 @@
import { skipToken } from '@reduxjs/toolkit/query';
-import { useState } from "react";
-import { Alert, Button, Form } from "react-bootstrap";
-import ListFiltersHeader from "../../shared/ListFiltersHeader";
+import { useState } from 'react';
+import { Alert, Button, Form } from 'react-bootstrap';
+import ListFiltersHeader from '../../shared/ListFiltersHeader';
import useAppParams from '../../shared/hooks/useAppParams';
import {
useGetDoNotLoadConfigOnNextBootQuery,
useSetDoNotLoadConfigOnNextBootMutation,
useSetLoadConfigMutation,
useSetRestartMutation
-} from "../../store/apiSlice";
+} from '../../store/apiSlice';
import { selectSearchText } from '../../store/debugConsole/debugConsoleSelectors';
import { debugConsoleActions } from '../../store/debugConsole/debugConsoleSlice';
import { useAppDispatch, useAppSelector } from '../../store/hooks';
import type { RootState } from '../../store/store';
-import ConsoleWindow from "./ConsoleWindow";
-import { DebugFilters } from "./DebugFilters";
+import ConsoleWindow from './ConsoleWindow';
+import { DebugFilters } from './DebugFilters';
import MinimumLogLevelDropdown from './MinimumLogLevelDropdown';
-import RestartConfirmModal from "./RestartConfirmModal";
-import { useFilteredMessages } from "./hooks/useFilteredMessages";
+import RestartConfirmModal from './RestartConfirmModal';
+import { useFilteredMessages } from './hooks/useFilteredMessages';
const DebugConsole = ({isConnected, join, stop, clear}: DebugConsoleProps) => {
//* HOOKS ***********************************************************/
@@ -41,6 +41,23 @@ const DebugConsole = ({isConnected, join, stop, clear}: DebugConsoleProps) => {
//* EFFECTS *********************************************************/
const filteredItems = useFilteredMessages(messages);
+ const exportFilteredItems = () => {
+ const content = filteredItems
+ .map((item) => `${item.Timestamp} [${item.Level}]${item.Properties?.Key ? ` [${item.Properties.Key}]` : ''} ${item.RenderedMessage}`)
+ .join('\n');
+ const blob = new Blob([content], { type: 'text/plain' });
+ const url = URL.createObjectURL(blob);
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = `debug-log-${new Date().toISOString().replace(/[:.]/g, '-')}.log`;
+ document.body.appendChild(a);
+ a.click();
+ setTimeout(() => {
+ document.body.removeChild(a);
+ URL.revokeObjectURL(url);
+ }, 0);
+ };
+
const clickRestart = () => {
setShowModal(true);
};
@@ -104,6 +121,15 @@ const DebugConsole = ({isConnected, join, stop, clear}: DebugConsoleProps) => {
>
Clear Console Trace
+