"react-modal": "3.16.1",
"sanitize-html": "2.8.0",
"slate": "0.90.0",
+ "slate-history": "0.93.0",
"slate-react": "0.90.0",
"tippy.js": "6.3.7",
"twemoji": "14.0.2",
"tiny-warning": "^1.0.3"
}
},
+ "node_modules/slate-history": {
+ "version": "0.93.0",
+ "resolved": "https://registry.npmjs.org/slate-history/-/slate-history-0.93.0.tgz",
+ "integrity": "sha512-Gr1GMGPipRuxIz41jD2/rbvzPj8eyar56TVMyJBvBeIpQSSjNISssvGNDYfJlSWM8eaRqf6DAcxMKzsLCYeX6g==",
+ "dependencies": {
+ "is-plain-object": "^5.0.0"
+ },
+ "peerDependencies": {
+ "slate": ">=0.65.3"
+ }
+ },
"node_modules/slate-react": {
"version": "0.90.0",
"resolved": "https://registry.npmjs.org/slate-react/-/slate-react-0.90.0.tgz",
"react-modal": "3.16.1",
"sanitize-html": "2.8.0",
"slate": "0.90.0",
+ "slate-history": "0.93.0",
"slate-react": "0.90.0",
"tippy.js": "6.3.7",
"twemoji": "14.0.2",
useCallback,
useState,
} from 'react';
-
import { Box, Scroll, Text } from 'folds';
import { Descendant, Editor, createEditor } from 'slate';
import {
RenderElementProps,
RenderPlaceholderProps,
} from 'slate-react';
+import { withHistory } from 'slate-history';
import { BlockType, RenderElement, RenderLeaf } from './Elements';
import { CustomElement } from './slate';
import * as css from './Editor.css';
};
export const useEditor = (): Editor => {
- const [editor] = useState(withInline(withVoid(withReact(createEditor()))));
+ const [editor] = useState(withInline(withVoid(withReact(withHistory(createEditor())))));
return editor;
};
});
toggleBlock(editor, BlockType.Paragraph);
+ removeAllMark(editor);
+};
+
+export const resetEditorHistory = (editor: Editor) => {
+ // eslint-disable-next-line no-param-reassign
+ editor.history = {
+ undos: [],
+ redos: [],
+ };
};
export const createMentionElement = (
import { BaseEditor } from 'slate';
import { ReactEditor } from 'slate-react';
+import { HistoryEditor } from 'slate-history';
import { BlockType } from './Elements';
export type HeadingLevel = 1 | 2 | 3;
-export type Editor = BaseEditor & ReactEditor;
+export type Editor = BaseEditor & HistoryEditor & ReactEditor;
export type Text = {
text: string;
| OrderedListElement
| UnorderedListElement;
-export type CustomEditor = BaseEditor & ReactEditor;
-
declare module 'slate' {
interface CustomTypes {
- Editor: BaseEditor & ReactEditor;
+ Editor: Editor;
Element: CustomElement;
Text: FormattedText & Text;
}
EmoticonAutocomplete,
createEmoticonElement,
moveCursor,
+ resetEditorHistory,
} from '../../components/editor';
import { EmojiBoard, EmojiBoardTab } from '../../components/emoji-board';
import { UseStateProvider } from '../../components/UseStateProvider';
const parsedDraft = JSON.parse(JSON.stringify(editor.children));
setMsgDraft(parsedDraft);
resetEditor(editor);
+ resetEditorHistory(editor);
};
}, [roomId, editor, setMsgDraft]);
}
mx.sendMessage(roomId, content);
resetEditor(editor);
+ resetEditorHistory(editor);
setReplyDraft();
sendTypingStatus(false);
}, [mx, roomId, editor, replyDraft, sendTypingStatus, setReplyDraft]);