mirror of
https://github.com/streetwriters/notesnook.git
synced 2025-12-23 15:09:33 +01:00
fix keyboard refocus in editor
This commit is contained in:
@@ -9,7 +9,7 @@ import { hexToRGBA } from '../../utils/ColorUtils';
|
|||||||
import { sleep } from '../../utils/TimeUtils';
|
import { sleep } from '../../utils/TimeUtils';
|
||||||
import { EditorWebView, textInput } from '../../views/Editor/Functions';
|
import { EditorWebView, textInput } from '../../views/Editor/Functions';
|
||||||
import tiny from '../../views/Editor/tiny/tiny';
|
import tiny from '../../views/Editor/tiny/tiny';
|
||||||
import { focusEditor } from '../../views/Editor/tiny/toolbar/constants';
|
import { focusEditor, reFocusEditor } from '../../views/Editor/tiny/toolbar/constants';
|
||||||
import { Toast } from '../Toast';
|
import { Toast } from '../Toast';
|
||||||
import { GetPremium } from './GetPremium';
|
import { GetPremium } from './GetPremium';
|
||||||
|
|
||||||
@@ -53,16 +53,7 @@ const ActionSheetWrapper = ({
|
|||||||
};
|
};
|
||||||
|
|
||||||
const _onClose = async () => {
|
const _onClose = async () => {
|
||||||
if (editing.isFocused === true) {
|
await reFocusEditor();
|
||||||
textInput.current?.focus();
|
|
||||||
await sleep(10);
|
|
||||||
if (editing.focusType == 'editor') {
|
|
||||||
focusEditor();
|
|
||||||
} else {
|
|
||||||
Platform.OS === 'android' && EditorWebView.current.requestFocus();
|
|
||||||
tiny.call(EditorWebView, tiny.focusTitle);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (onClose) {
|
if (onClose) {
|
||||||
onClose();
|
onClose();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,8 +154,8 @@ const EditorHeader = () => {
|
|||||||
const showActionsheet = async () => {
|
const showActionsheet = async () => {
|
||||||
let note = getNote() && db.notes.note(getNote().id).data;
|
let note = getNote() && db.notes.note(getNote().id).data;
|
||||||
if (editing.isFocused) {
|
if (editing.isFocused) {
|
||||||
tiny.call(EditorWebView, tiny.blur);
|
Keyboard.dismiss();
|
||||||
await sleep(300);
|
await sleep(500);
|
||||||
editing.isFocused = true;
|
editing.isFocused = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,10 +19,10 @@ window.blur();
|
|||||||
|
|
||||||
const removeMarkdown = `
|
const removeMarkdown = `
|
||||||
tinymce.activeEditor.plugins.textpattern.setPatterns("")
|
tinymce.activeEditor.plugins.textpattern.setPatterns("")
|
||||||
`
|
`;
|
||||||
const setMarkdown = `
|
const setMarkdown = `
|
||||||
tinymce.activeEditor.plugins.textpattern.setPatterns(markdownPatterns)
|
tinymce.activeEditor.plugins.textpattern.setPatterns(markdownPatterns)
|
||||||
`
|
`;
|
||||||
|
|
||||||
const keyboardStateChanged = `(function() {
|
const keyboardStateChanged = `(function() {
|
||||||
let node = tinymce.activeEditor.selection.getNode();
|
let node = tinymce.activeEditor.selection.getNode();
|
||||||
@@ -152,7 +152,6 @@ isLoading = false;
|
|||||||
const html = value => post('html', value);
|
const html = value => post('html', value);
|
||||||
|
|
||||||
const focusEditor = `
|
const focusEditor = `
|
||||||
window.focus();
|
|
||||||
tinymce.activeEditor.focus();
|
tinymce.activeEditor.focus();
|
||||||
`;
|
`;
|
||||||
|
|
||||||
@@ -186,7 +185,7 @@ const onKeyboardShow = () => {
|
|||||||
if (!editing.movedAway) {
|
if (!editing.movedAway) {
|
||||||
editing.isFocused = true;
|
editing.isFocused = true;
|
||||||
if (Platform.OS === 'ios') {
|
if (Platform.OS === 'ios') {
|
||||||
if (editing.focusType === "title") return;
|
if (editing.focusType === 'title') return;
|
||||||
call(EditorWebView, keyboardStateChanged);
|
call(EditorWebView, keyboardStateChanged);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import { createRef } from 'react';
|
import { createRef } from 'react';
|
||||||
import {Platform} from 'react-native';
|
import {Platform} from 'react-native';
|
||||||
import { eSendEvent } from '../../../../services/EventManager';
|
import { eSendEvent } from '../../../../services/EventManager';
|
||||||
import {EditorWebView} from '../../Functions';
|
import { editing } from '../../../../utils';
|
||||||
|
import { sleep } from '../../../../utils/TimeUtils';
|
||||||
|
import {EditorWebView, textInput} from '../../Functions';
|
||||||
import tiny from '../tiny';
|
import tiny from '../tiny';
|
||||||
|
|
||||||
export const properties = {
|
export const properties = {
|
||||||
@@ -17,17 +19,32 @@ export function formatSelection(command) {
|
|||||||
EditorWebView.current?.injectJavaScript(command);
|
EditorWebView.current?.injectJavaScript(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function focusEditor(format,kill=true) {
|
export async function focusEditor(format,kill=true) {
|
||||||
kill && eSendEvent("showTooltip");
|
kill && eSendEvent("showTooltip");
|
||||||
Platform.OS === 'android' && EditorWebView.current.requestFocus();
|
Platform.OS === "android" && EditorWebView.current.requestFocus();
|
||||||
if (format === 'link' || format === 'video') {
|
if (format === 'link' || format === 'video') {
|
||||||
tiny.call(EditorWebView, tiny.blur + ' ' + tiny.focusEditor);
|
tiny.call(EditorWebView, tiny.blur + ' ' + tiny.focusEditor);
|
||||||
} else {
|
} else {
|
||||||
|
console.log('focus editor');
|
||||||
|
EditorWebView.current?.requestFocus();
|
||||||
tiny.call(EditorWebView, tiny.focusEditor);
|
tiny.call(EditorWebView, tiny.focusEditor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export async function reFocusEditor() {
|
||||||
|
if (editing.isFocused === true) {
|
||||||
|
await sleep(300);
|
||||||
|
textInput.current?.focus();
|
||||||
|
await sleep(300);
|
||||||
|
if (editing.focusType == 'editor') {
|
||||||
|
focusEditor(null,false);
|
||||||
|
} else {
|
||||||
|
Platform.OS === 'android' && EditorWebView.current?.requestFocus();
|
||||||
|
tiny.call(EditorWebView, tiny.focusTitle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
export function rgbToHex(color) {
|
export function rgbToHex(color) {
|
||||||
color = '' + color;
|
color = '' + color;
|
||||||
if (!color || color.indexOf('rgb') < 0) {
|
if (!color || color.indexOf('rgb') < 0) {
|
||||||
|
|||||||
@@ -190,7 +190,7 @@ const ToolbarItem = ({
|
|||||||
let user = await db.user.getUser();
|
let user = await db.user.getUser();
|
||||||
if (user && !user.isEmailConfirmed) {
|
if (user && !user.isEmailConfirmed) {
|
||||||
if (editing.isFocused) {
|
if (editing.isFocused) {
|
||||||
tiny.call(EditorWebView, tiny.blur);
|
Keyboard.dismiss();
|
||||||
await sleep(300);
|
await sleep(300);
|
||||||
editing.isFocused = true;
|
editing.isFocused = true;
|
||||||
}
|
}
|
||||||
@@ -206,7 +206,7 @@ const ToolbarItem = ({
|
|||||||
}
|
}
|
||||||
if (type === 'settings') {
|
if (type === 'settings') {
|
||||||
if (editing.isFocused) {
|
if (editing.isFocused) {
|
||||||
tiny.call(EditorWebView, tiny.blur);
|
Keyboard.dismiss();
|
||||||
await sleep(300);
|
await sleep(300);
|
||||||
editing.isFocused = true;
|
editing.isFocused = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,19 @@
|
|||||||
import { getLinkPreview } from 'link-preview-js';
|
import { getLinkPreview } from 'link-preview-js';
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import { Platform } from 'react-native';
|
||||||
import { Image, ScrollView, View,TouchableOpacity } from 'react-native';
|
import { Image, ScrollView, View,TouchableOpacity } from 'react-native';
|
||||||
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
import Icon from 'react-native-vector-icons/MaterialCommunityIcons';
|
||||||
import { ActionIcon } from '../../../../components/ActionIcon';
|
import { ActionIcon } from '../../../../components/ActionIcon';
|
||||||
import Heading from '../../../../components/Typography/Heading';
|
import Heading from '../../../../components/Typography/Heading';
|
||||||
import Paragraph from '../../../../components/Typography/Paragraph';
|
import Paragraph from '../../../../components/Typography/Paragraph';
|
||||||
import { useTracked } from '../../../../provider';
|
import { useTracked } from '../../../../provider';
|
||||||
|
import { editing } from '../../../../utils';
|
||||||
import { openLinkInBrowser } from '../../../../utils/functions';
|
import { openLinkInBrowser } from '../../../../utils/functions';
|
||||||
import { SIZE } from '../../../../utils/SizeUtils';
|
import { SIZE } from '../../../../utils/SizeUtils';
|
||||||
import { INPUT_MODE, properties } from './constants';
|
import { sleep } from '../../../../utils/TimeUtils';
|
||||||
|
import { EditorWebView, textInput } from '../../Functions';
|
||||||
|
import tiny from '../tiny';
|
||||||
|
import { focusEditor, INPUT_MODE, properties, reFocusEditor } from './constants';
|
||||||
|
|
||||||
let prevLink = {};
|
let prevLink = {};
|
||||||
let prevHeight = 50;
|
let prevHeight = 50;
|
||||||
@@ -90,8 +95,9 @@ const LinkPreview = ({setMode, value, onSubmit}) => {
|
|||||||
const openLink = () => {
|
const openLink = () => {
|
||||||
openLinkInBrowser(value, colors)
|
openLinkInBrowser(value, colors)
|
||||||
.catch((e) => {})
|
.catch((e) => {})
|
||||||
.then((r) => {
|
.then(async (r) => {
|
||||||
console.log('closed');
|
console.log('closed browser now');
|
||||||
|
await reFocusEditor();
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user