fix: manually confirm active wysiwyg on pointerdown

fix_wysiwyg_blur
dwelle 4 years ago
parent e6d9797167
commit 3439da164d

@ -322,6 +322,8 @@ class App extends React.Component<AppProps, AppState> {
private id: string; private id: string;
private history: History; private history: History;
private activeWysiwyg: null | { handleSubmit: () => void } = null;
constructor(props: AppProps) { constructor(props: AppProps) {
super(props); super(props);
const defaultAppState = getDefaultAppState(); const defaultAppState = getDefaultAppState();
@ -1763,7 +1765,7 @@ class App extends React.Component<AppProps, AppState> {
]); ]);
}; };
textWysiwyg({ const { handleSubmit } = textWysiwyg({
id: element.id, id: element.id,
appState: this.state, appState: this.state,
canvas: this.canvas, canvas: this.canvas,
@ -1787,6 +1789,7 @@ class App extends React.Component<AppProps, AppState> {
} }
}), }),
onSubmit: withBatchedUpdates(({ text, viaKeyboard }) => { onSubmit: withBatchedUpdates(({ text, viaKeyboard }) => {
this.activeWysiwyg = null;
const isDeleted = !text.trim(); const isDeleted = !text.trim();
updateElement(text, isDeleted); updateElement(text, isDeleted);
// select the created text element only if submitting via keyboard // select the created text element only if submitting via keyboard
@ -1828,6 +1831,8 @@ class App extends React.Component<AppProps, AppState> {
// do an initial update to re-initialize element position since we were // do an initial update to re-initialize element position since we were
// modifying element's x/y for sake of editor (case: syncing to remote) // modifying element's x/y for sake of editor (case: syncing to remote)
updateElement(element.text); updateElement(element.text);
this.activeWysiwyg = { handleSubmit };
} }
private getTextElementAtPosition( private getTextElementAtPosition(
@ -2285,6 +2290,10 @@ class App extends React.Component<AppProps, AppState> {
) => { ) => {
event.persist(); event.persist();
if (this.activeWysiwyg) {
this.activeWysiwyg.handleSubmit();
}
// remove any active selection when we start to interact with canvas // remove any active selection when we start to interact with canvas
// (mainly, we care about removing selection outside the component which // (mainly, we care about removing selection outside the component which
// would prevent our copy handling otherwise) // would prevent our copy handling otherwise)

@ -16,7 +16,7 @@ describe("textWysiwyg", () => {
const element = UI.createElement("text"); const element = UI.createElement("text");
new Pointer("mouse").clickOn(element); new Pointer("mouse").doubleClickOn(element);
textarea = document.querySelector( textarea = document.querySelector(
".excalidraw-textEditorContainer > textarea", ".excalidraw-textEditorContainer > textarea",
)!; )!;

@ -368,4 +368,6 @@ export const textWysiwyg = ({
excalidrawContainer excalidrawContainer
?.querySelector(".excalidraw-textEditorContainer")! ?.querySelector(".excalidraw-textEditorContainer")!
.appendChild(editable); .appendChild(editable);
return { handleSubmit };
}; };

Loading…
Cancel
Save