|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- /**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- * @flow strict-local
- * @emails oncall+draft_js
- */
- 'use strict';
-
- const EditorState = require("./EditorState");
-
- function keyCommandUndo(e: SyntheticKeyboardEvent<>, editorState: EditorState, updateFn: (editorState: EditorState) => void): void {
- const undoneState = EditorState.undo(editorState); // If the last change to occur was a spellcheck change, allow the undo
- // event to fall through to the browser. This allows the browser to record
- // the unwanted change, which should soon lead it to learn not to suggest
- // the correction again.
-
- if (editorState.getLastChangeType() === 'spellcheck-change') {
- const nativelyRenderedContent = undoneState.getCurrentContent();
- updateFn(EditorState.set(undoneState, {
- nativelyRenderedContent
- }));
- return;
- } // Otheriwse, manage the undo behavior manually.
-
-
- e.preventDefault();
-
- if (!editorState.getNativelyRenderedContent()) {
- updateFn(undoneState);
- return;
- } // Trigger a re-render with the current content state to ensure that the
- // component tree has up-to-date props for comparison.
-
-
- updateFn(EditorState.set(editorState, {
- nativelyRenderedContent: null
- })); // Wait to ensure that the re-render has occurred before performing
- // the undo action.
-
- setTimeout(() => {
- updateFn(undoneState);
- }, 0);
- }
-
- module.exports = keyCommandUndo;
|