chore: update insert content in editor (#336)

This commit is contained in:
boojack
2022-10-23 20:28:30 +08:00
committed by GitHub
parent 5690dab6bb
commit fe5ba6850b
2 changed files with 26 additions and 28 deletions

View File

@ -47,19 +47,19 @@ const Editor = forwardRef((props: Props, ref: React.ForwardedRef<EditorRefAction
focus: () => { focus: () => {
editorRef.current?.focus(); editorRef.current?.focus();
}, },
insertText: (content = "", prefix = "", suffix = prefix) => { insertText: (content = "", prefix = "", suffix = "") => {
if (!editorRef.current) { if (!editorRef.current) {
return; return;
} }
const cursorPosition = editorRef.current.selectionStart; const cursorPosition = editorRef.current.selectionStart;
const endPosition = editorRef.current.selectionEnd; const endPosition = editorRef.current.selectionEnd;
const prevValue = editorRef.current.value; const prevValue = editorRef.current.value;
const value = const value =
prevValue.slice(0, cursorPosition) + prevValue.slice(0, cursorPosition) +
prefix + prefix +
prevValue.slice(cursorPosition, endPosition) + (content || prevValue.slice(cursorPosition, endPosition)) +
suffix + suffix +
content +
prevValue.slice(endPosition); prevValue.slice(endPosition);
editorRef.current.value = value; editorRef.current.value = value;

View File

@ -76,39 +76,37 @@ const MemoEditor: React.FC = () => {
prevGlobalStateRef.current = editorState; prevGlobalStateRef.current = editorState;
}, [state, editorState.editMemoId]); }, [state, editorState.editMemoId]);
const handleInsertMark = (mark: string) => {
editorRef.current?.insertText("", mark);
};
const handleKeyDown = (event: React.KeyboardEvent) => { const handleKeyDown = (event: React.KeyboardEvent) => {
if (event.key === "Escape" && state.fullscreen) { if (event.key === "Escape" && state.fullscreen) {
handleFullscreenBtnClick(); handleFullscreenBtnClick();
return; return;
} }
if (event.key === "Enter" && (event.ctrlKey || event.metaKey)) {
handleSaveBtnClick();
return;
}
if (event.key === "Tab") { if (event.key === "Tab") {
event.preventDefault(); event.preventDefault();
editorRef.current?.insertText(" ".repeat(TAB_SPACE_WIDTH)); editorRef.current?.insertText(" ".repeat(TAB_SPACE_WIDTH));
return; return;
} }
if (event.ctrlKey || event.metaKey) { if (event.ctrlKey || event.metaKey) {
event.preventDefault(); if (event.key === "Enter") {
switch (event.key) { handleSaveBtnClick();
case "b":
handleInsertMark("**");
break;
case "i":
handleInsertMark("*");
break;
case "e":
handleInsertMark("`");
break;
}
return; return;
} }
if (event.key === "b") {
event.preventDefault();
editorRef.current?.insertText("", "**", "**");
return;
}
if (event.key === "i") {
event.preventDefault();
editorRef.current?.insertText("", "*", "*");
return;
}
if (event.key === "e") {
event.preventDefault();
editorRef.current?.insertText("", "`", "`");
return;
}
}
}; };
const handleDropEvent = async (event: React.DragEvent) => { const handleDropEvent = async (event: React.DragEvent) => {
@ -235,9 +233,9 @@ const MemoEditor: React.FC = () => {
const cursorPosition = editorRef.current.getCursorPosition(); const cursorPosition = editorRef.current.getCursorPosition();
const prevValue = editorRef.current.getContent().slice(0, cursorPosition); const prevValue = editorRef.current.getContent().slice(0, cursorPosition);
if (prevValue === "" || prevValue.endsWith("\n")) { if (prevValue === "" || prevValue.endsWith("\n")) {
editorRef.current?.insertText("- [ ] "); editorRef.current?.insertText("", "- [ ] ");
} else { } else {
editorRef.current?.insertText("\n- [ ] "); editorRef.current?.insertText("", "\n- [ ] ");
} }
}; };
@ -249,9 +247,9 @@ const MemoEditor: React.FC = () => {
const cursorPosition = editorRef.current.getCursorPosition(); const cursorPosition = editorRef.current.getCursorPosition();
const prevValue = editorRef.current.getContent().slice(0, cursorPosition); const prevValue = editorRef.current.getContent().slice(0, cursorPosition);
if (prevValue === "" || prevValue.endsWith("\n")) { if (prevValue === "" || prevValue.endsWith("\n")) {
editorRef.current?.insertText("```\n\n```"); editorRef.current?.insertText("", "```\n", "\n```");
} else { } else {
editorRef.current?.insertText("\n```\n\n```"); editorRef.current?.insertText("", "\n```\n", "\n```");
} }
}; };
@ -375,7 +373,7 @@ const MemoEditor: React.FC = () => {
)} )}
</div> </div>
</div> </div>
<button className="action-btn"> <button className="action-btn !hidden sm:!flex ">
<Icon.Smile className="icon-img" onClick={handleEmojiPickerBtnClick} /> <Icon.Smile className="icon-img" onClick={handleEmojiPickerBtnClick} />
</button> </button>
<button className="action-btn"> <button className="action-btn">