From ddbd3601abfa4b28adfbded3718823218ccfd4fb Mon Sep 17 00:00:00 2001 From: Henry Heino <46334387+personalizedrefrigerator@users.noreply.github.com> Date: Fri, 2 Feb 2024 09:54:16 -0800 Subject: [PATCH] Mobile: Fixes #9807: Fix note editor errors/logs not sent to Joplin's logs (#9808) --- .../components/NoteEditor/NoteEditor.tsx | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/app-mobile/components/NoteEditor/NoteEditor.tsx b/packages/app-mobile/components/NoteEditor/NoteEditor.tsx index cfbcc97b4f..87db7ca713 100644 --- a/packages/app-mobile/components/NoteEditor/NoteEditor.tsx +++ b/packages/app-mobile/components/NoteEditor/NoteEditor.tsx @@ -8,7 +8,7 @@ import ExtendedWebView from '../ExtendedWebView'; import * as React from 'react'; import { forwardRef, useImperativeHandle } from 'react'; import { useMemo, useState, useCallback, useRef } from 'react'; -import { LayoutChangeEvent, View, ViewStyle } from 'react-native'; +import { LayoutChangeEvent, NativeSyntheticEvent, View, ViewStyle } from 'react-native'; const { editorFont } = require('../global-style'); import { EditorControl, EditorSettings, SelectionRange } from './types'; @@ -18,12 +18,16 @@ import { ChangeEvent, EditorEvent, EditorEventType, SelectionRangeChangeEvent, U import { EditorCommandType, EditorKeymap, EditorLanguageType, PluginData, SearchState } from '@joplin/editor/types'; import supportsCommand from '@joplin/editor/CodeMirror/editorCommands/supportsCommand'; import SelectionFormatting, { defaultSelectionFormatting } from '@joplin/editor/SelectionFormatting'; +import Logger from '@joplin/utils/Logger'; +import { WebViewErrorEvent } from 'react-native-webview/lib/RNCWebViewNativeComponent'; type ChangeEventHandler = (event: ChangeEvent)=> void; type UndoRedoDepthChangeHandler = (event: UndoRedoDepthChangeEvent)=> void; type SelectionChangeEventHandler = (event: SelectionRangeChangeEvent)=> void; type OnAttachCallback = ()=> void; +const logger = Logger.create('NoteEditor'); + interface Props { themeId: number; initialText: string; @@ -317,7 +321,6 @@ function NoteEditor(props: Props, ref: any) { "error: " + message + " in file://" + source + ", line " + lineno ); }; - window.onunhandledrejection = (event) => { window.ReactNativeWebView.postMessage( "error: Unhandled promise rejection: " + event @@ -374,7 +377,7 @@ function NoteEditor(props: Props, ref: any) { const data = event.nativeEvent.data; if (data.indexOf('error:') === 0) { - console.error('CodeMirror:', data); + logger.error('CodeMirror:', data); return; } @@ -383,8 +386,7 @@ function NoteEditor(props: Props, ref: any) { // eslint-disable-next-line @typescript-eslint/ban-types -- Old code before rule was applied const handlers: Record = { onLog: (event: any) => { - // eslint-disable-next-line no-console - console.info('CodeMirror:', ...event.value); + logger.info('CodeMirror:', ...event.value); }, onEditorEvent: (event: EditorEvent) => { @@ -428,13 +430,12 @@ function NoteEditor(props: Props, ref: any) { if (handlers[msg.name]) { handlers[msg.name](msg.data); } else { - // eslint-disable-next-line no-console - console.info('Unsupported CodeMirror message:', msg); + logger.warn('Unsupported CodeMirror message:', msg); } }, [props.onSelectionChange, props.onUndoRedoDepthChange, props.onChange, editorControl]); - const onError = useCallback(() => { - console.error('NoteEditor: webview error'); + const onError = useCallback((event: NativeSyntheticEvent) => { + logger.error(`Load error: Code ${event.nativeEvent.code}: ${event.nativeEvent.description}`); }, []); const [hasSpaceForToolbar, setHasSpaceForToolbar] = useState(true);