mobile: fix back navigation from editor (#4867)

Signed-off-by: Ammar Ahmed <40239442+ammarahm-ed@users.noreply.github.com>
This commit is contained in:
Ammar Ahmed
2024-05-01 13:13:44 +05:00
committed by GitHub
parent 1e3149284e
commit 20742e2a1c
5 changed files with 27 additions and 19 deletions

View File

@@ -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<Animated.View>;
@@ -239,7 +239,7 @@ export const FluidTabs = forwardRef<TabsRef, TabProps>(function FluidTabs(
onDrawerStateChange(false);
isDrawerOpen.value = false;
},
page: currentTab.value,
page: () => currentTab.value,
setScrollEnabled: () => true,
node: node
}),

View File

@@ -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) {

View File

@@ -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;

View File

@@ -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;
}
}

View File

@@ -173,3 +173,4 @@ export const eUnlockWithBiometrics = "618";
export const eUnlockWithPassword = "619";
export const eUpdateNoteInEditor = "620";
export const eOnEnterEditor = "621";
export const eOnExitEditor = "622";