diff --git a/desktop/app/src/chrome/ConsoleLogs.tsx b/desktop/app/src/chrome/ConsoleLogs.tsx index 70b3ab7ef..2379e3ef5 100644 --- a/desktop/app/src/chrome/ConsoleLogs.tsx +++ b/desktop/app/src/chrome/ConsoleLogs.tsx @@ -12,8 +12,13 @@ import {Button, Toolbar, ButtonGroup, Layout} from '../ui'; import React from 'react'; import {Console, Hook} from 'console-feed'; import type {Methods} from 'console-feed/lib/definitions/Methods'; +import type {Styles} from 'console-feed/lib/definitions/Styles'; import {createState, useValue} from 'flipper-plugin'; import {useLocalStorage} from '../utils/useLocalStorage'; +import {theme, useIsDarkMode} from '../sandy-chrome/theme'; +import {useIsSandy} from '../sandy-chrome/SandyContext'; + +const MAX_LOG_ITEMS = 1000; const logsAtom = createState([]); export const errorCounterAtom = createState(0); @@ -23,7 +28,12 @@ export function enableConsoleHook() { Hook( window.console, (log) => { - logsAtom.set([...logsAtom.get(), log]); + if (log.method === 'debug') { + return; // See below, skip debug messages which are generated very aggressively by Flipper + } + const newLogs = logsAtom.get().slice(-MAX_LOG_ITEMS); + newLogs.push(log); + logsAtom.set(newLogs); if (log.method === 'error' || log.method === 'assert') { errorCounterAtom.set(errorCounterAtom.get() + 1); } @@ -39,7 +49,8 @@ function clearLogs() { const allLogLevels: Methods[] = [ 'log', - 'debug', + // 'debug', We typically don't want to allow users to enable the debug logs, as they are used very intensively by flipper itself, + // making Flipper / console-feed. For debug level logging, use the Chrome devtools. 'info', 'warn', 'error', @@ -54,6 +65,8 @@ const allLogLevels: Methods[] = [ const defaultLogLevels: Methods[] = ['warn', 'error', 'table', 'assert']; export function ConsoleLogs() { + const isSandy = useIsSandy(); + const isDarkMode = useIsDarkMode(); const logs = useValue(logsAtom); const [logLevels, setLogLevels] = useLocalStorage( 'console-logs-loglevels', @@ -77,6 +90,8 @@ export function ConsoleLogs() { ); }, [logLevels, setLogLevels]); + const styles = useMemo(() => buildTheme(isSandy), [isSandy]); + return ( @@ -87,7 +102,46 @@ export function ConsoleLogs() { - + ); } + +function buildTheme(isSandy: boolean): Styles { + if (!isSandy) { + const bg = '#333'; + return { + BASE_BACKGROUND_COLOR: bg, + BASE_COLOR: 'white', + LOG_BACKGROUND: bg, + }; + } + return { + // See: https://github.com/samdenty/console-feed/blob/master/src/definitions/Styles.d.ts + BASE_BACKGROUND_COLOR: 'transparent', + BASE_COLOR: theme.textColorPrimary, + LOG_COLOR: theme.textColorPrimary, + LOG_BACKGROUND: 'transparent', + LOG_INFO_BACKGROUND: 'transparent', + LOG_COMMAND_BACKGROUND: 'transparent', + LOG_RESULT_BACKGROUND: 'transparent', + LOG_WARN_BACKGROUND: theme.warningColor, + LOG_ERROR_BACKGROUND: theme.errorColor, + LOG_INFO_COLOR: theme.textColorPrimary, + LOG_COMMAND_COLOR: theme.textColorSecondary, + LOG_RESULT_COLOR: theme.textColorSecondary, + LOG_WARN_COLOR: 'white', + LOG_ERROR_COLOR: 'white', + LOG_INFO_BORDER: theme.dividerColor, + LOG_COMMAND_BORDER: theme.dividerColor, + LOG_RESULT_BORDER: theme.dividerColor, + LOG_WARN_BORDER: theme.dividerColor, + LOG_ERROR_BORDER: theme.dividerColor, + LOG_BORDER: theme.dividerColor, + }; +} diff --git a/desktop/app/src/chrome/__tests__/__snapshots__/ExportDataPluginSheet.node.tsx.snap b/desktop/app/src/chrome/__tests__/__snapshots__/ExportDataPluginSheet.node.tsx.snap index f6e5b2d18..588bc3b33 100644 --- a/desktop/app/src/chrome/__tests__/__snapshots__/ExportDataPluginSheet.node.tsx.snap +++ b/desktop/app/src/chrome/__tests__/__snapshots__/ExportDataPluginSheet.node.tsx.snap @@ -43,7 +43,7 @@ exports[`SettingsSheet snapshot with nothing enabled 1`] = ` TestDevicePlugin