fix: Allow undo/redo handler when outside of editor focus.
closes #6533
This commit is contained in:
@@ -4,6 +4,7 @@ import { transparentize } from "polished";
|
|||||||
import { baseKeymap } from "prosemirror-commands";
|
import { baseKeymap } from "prosemirror-commands";
|
||||||
import { dropCursor } from "prosemirror-dropcursor";
|
import { dropCursor } from "prosemirror-dropcursor";
|
||||||
import { gapCursor } from "prosemirror-gapcursor";
|
import { gapCursor } from "prosemirror-gapcursor";
|
||||||
|
import { redo, undo } from "prosemirror-history";
|
||||||
import { inputRules, InputRule } from "prosemirror-inputrules";
|
import { inputRules, InputRule } from "prosemirror-inputrules";
|
||||||
import { keymap } from "prosemirror-keymap";
|
import { keymap } from "prosemirror-keymap";
|
||||||
import { MarkdownParser } from "prosemirror-markdown";
|
import { MarkdownParser } from "prosemirror-markdown";
|
||||||
@@ -586,6 +587,20 @@ export class Editor extends React.PureComponent<
|
|||||||
this.props
|
this.props
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Undo the last change in the editor.
|
||||||
|
*
|
||||||
|
* @returns True if the undo was successful
|
||||||
|
*/
|
||||||
|
public undo = () => undo(this.view.state, this.view.dispatch, this.view);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Redo the last change in the editor.
|
||||||
|
*
|
||||||
|
* @returns True if the change was successful
|
||||||
|
*/
|
||||||
|
public redo = () => redo(this.view.state, this.view.dispatch, this.view);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns true if the trimmed content of the editor is an empty string.
|
* Returns true if the trimmed content of the editor is an empty string.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -202,6 +202,20 @@ class DocumentScene extends React.Component<Props> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
onUndoRedo = (event: KeyboardEvent) => {
|
||||||
|
if (isModKey(event)) {
|
||||||
|
if (event.shiftKey) {
|
||||||
|
if (this.editor.current?.redo()) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (this.editor.current?.undo()) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
onMove = (ev: React.MouseEvent | KeyboardEvent) => {
|
onMove = (ev: React.MouseEvent | KeyboardEvent) => {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
const { document, dialogs, t, abilities } = this.props;
|
const { document, dialogs, t, abilities } = this.props;
|
||||||
@@ -406,6 +420,7 @@ class DocumentScene extends React.Component<Props> {
|
|||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
<RegisterKeyDown trigger="m" handler={this.onMove} />
|
<RegisterKeyDown trigger="m" handler={this.onMove} />
|
||||||
|
<RegisterKeyDown trigger="z" handler={this.onUndoRedo} />
|
||||||
<RegisterKeyDown trigger="e" handler={this.goToEdit} />
|
<RegisterKeyDown trigger="e" handler={this.goToEdit} />
|
||||||
<RegisterKeyDown trigger="Escape" handler={this.goBack} />
|
<RegisterKeyDown trigger="Escape" handler={this.goBack} />
|
||||||
<RegisterKeyDown trigger="h" handler={this.goToHistory} />
|
<RegisterKeyDown trigger="h" handler={this.goToHistory} />
|
||||||
|
|||||||
Reference in New Issue
Block a user