diff --git a/apps/mobile/app/components/tabs/index.tsx b/apps/mobile/app/components/tabs/index.tsx index 58f364075..f4f45b506 100644 --- a/apps/mobile/app/components/tabs/index.tsx +++ b/apps/mobile/app/components/tabs/index.tsx @@ -59,7 +59,7 @@ export interface TabsRef { lock: () => boolean; openDrawer: (animated?: boolean) => void; closeDrawer: (animated?: boolean) => void; - page: number; + page: () => number; setScrollEnabled: () => true; isDrawerOpen: () => boolean; node: RefObject; @@ -239,7 +239,7 @@ export const FluidTabs = forwardRef(function FluidTabs( onDrawerStateChange(false); isDrawerOpen.value = false; }, - page: currentTab.value, + page: () => currentTab.value, setScrollEnabled: () => true, node: node }), diff --git a/apps/mobile/app/navigation/tabs-holder.js b/apps/mobile/app/navigation/tabs-holder.js index 9e8df3b49..18d4864bb 100644 --- a/apps/mobile/app/navigation/tabs-holder.js +++ b/apps/mobile/app/navigation/tabs-holder.js @@ -65,6 +65,7 @@ import { eClearEditor, eCloseFullscreenEditor, eOnEnterEditor, + eOnExitEditor, eOnLoadNote, eOpenFullscreenEditor, eUnlockNote @@ -511,6 +512,7 @@ const onChangeTab = async (event) => { editorState().movedAway = false; editorState().isFocused = true; activateKeepAwake(); + eSendEvent(eOnEnterEditor); if (!useTabStore.getState().getCurrentNoteId()) { eSendEvent(eOnLoadNote, { @@ -522,14 +524,13 @@ const onChangeTab = async (event) => { ) { eSendEvent(eUnlockNote); } - eSendEvent(eOnEnterEditor); } } else { if (event.from === 2) { deactivateKeepAwake(); editorState().movedAway = true; editorState().isFocused = false; - eSendEvent(eClearEditor, "removeHandler"); + eSendEvent(eOnExitEditor); // Lock all tabs with locked notes... for (const tab of useTabStore.getState().tabs) { diff --git a/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx b/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx index e18b2d3f7..da3cae595 100644 --- a/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx +++ b/apps/mobile/app/screens/editor/tiptap/use-editor-events.tsx @@ -26,7 +26,6 @@ import Clipboard from "@react-native-clipboard/clipboard"; import React, { useCallback, useEffect, useRef } from "react"; import { BackHandler, - InteractionManager, Keyboard, KeyboardEventListener, NativeEventSubscription, @@ -61,6 +60,7 @@ import { eCloseFullscreenEditor, eEditorTabFocused, eOnEnterEditor, + eOnExitEditor, eOnLoadNote, eOpenFullscreenEditor, eOpenLoginDialog, @@ -77,6 +77,7 @@ import { EditorMessage, EditorProps, useEditorType } from "./types"; import { useTabStore } from "./use-tab-store"; import { EditorEvents, editorState, openInternalLink } from "./utils"; + const publishNote = async () => { const user = useUserStore.getState().user; if (!user) { @@ -269,21 +270,20 @@ export const useEditorEvents = ( }, [editor, deviceMode, fullscreen]); const onHardwareBackPress = useCallback(() => { - if (tabBarRef.current?.page === 2) { + console.log(tabBarRef.current?.page()); + if (tabBarRef.current?.page() === 2) { onBackPress(); return true; } }, [onBackPress]); const onEnterEditor = useCallback(async () => { - InteractionManager.runAfterInteractions(() => { - if (!DDS.isTab) { - handleBack.current = BackHandler.addEventListener( - "hardwareBackPress", - onHardwareBackPress - ); - } - }); + if (!DDS.isTab) { + handleBack.current = BackHandler.addEventListener( + "hardwareBackPress", + onHardwareBackPress + ); + } }, [onHardwareBackPress]); const onClearEditorSessionRequest = useCallback( @@ -330,7 +330,14 @@ export const useEditorEvents = ( }, [fullscreen, onHardwareBackPress]); useEffect(() => { + const onExitEditor = () => { + if (handleBack.current) { + handleBack.current.remove(); + } + }; + eSubscribeEvent(eOnEnterEditor, onEnterEditor); + eSubscribeEvent(eOnExitEditor, onExitEditor); eSubscribeEvent( eClearEditor + editor.editorId, onClearEditorSessionRequest @@ -338,6 +345,7 @@ export const useEditorEvents = ( return () => { eUnSubscribeEvent(eClearEditor, onClearEditorSessionRequest); eUnSubscribeEvent(eOnEnterEditor, onEnterEditor); + eUnSubscribeEvent(eOnExitEditor, onExitEditor); }; }, [editor.editorId, onClearEditorSessionRequest, onEnterEditor]); @@ -641,10 +649,8 @@ export const useEditorEvents = ( .updateTab(useTabStore.getState().currentTab, { readonly: false }); - Navigation.queueRoutesForUpdate(); - ToastManager.show({ - heading: "Readonly mode disabled.", - type: "success" + setTimeout(() => { + Navigation.queueRoutesForUpdate(); }); } break; diff --git a/apps/mobile/app/screens/editor/tiptap/use-editor.ts b/apps/mobile/app/screens/editor/tiptap/use-editor.ts index 290912976..64380351b 100644 --- a/apps/mobile/app/screens/editor/tiptap/use-editor.ts +++ b/apps/mobile/app/screens/editor/tiptap/use-editor.ts @@ -837,7 +837,7 @@ export const useEditor = ( if (!noteId) { overlay(false); loadNote({ newNote: true }); - if (tabBarRef.current?.page === 1) { + if (tabBarRef.current?.page() === 1) { state.current.currentlyEditing = false; } } diff --git a/apps/mobile/app/utils/events.js b/apps/mobile/app/utils/events.js index 285cc588e..ffdd393a8 100644 --- a/apps/mobile/app/utils/events.js +++ b/apps/mobile/app/utils/events.js @@ -173,3 +173,4 @@ export const eUnlockWithBiometrics = "618"; export const eUnlockWithPassword = "619"; export const eUpdateNoteInEditor = "620"; export const eOnEnterEditor = "621"; +export const eOnExitEditor = "622";