|
|
|
@ -281,6 +281,7 @@ const MemoEditor = (props: Props) => {
|
|
|
|
|
id: memo.id,
|
|
|
|
|
relations: state.relationList,
|
|
|
|
|
});
|
|
|
|
|
await memoStore.getOrFetchMemoById(memo.id, { skipCache: true });
|
|
|
|
|
if (onConfirm) {
|
|
|
|
|
onConfirm(memo.id);
|
|
|
|
|
}
|
|
|
|
@ -310,6 +311,7 @@ const MemoEditor = (props: Props) => {
|
|
|
|
|
id: memo.id,
|
|
|
|
|
relations: state.relationList,
|
|
|
|
|
});
|
|
|
|
|
await memoStore.getOrFetchMemoById(memo.id, { skipCache: true });
|
|
|
|
|
if (onConfirm) {
|
|
|
|
|
onConfirm(memo.id);
|
|
|
|
|
}
|
|
|
|
@ -319,57 +321,15 @@ const MemoEditor = (props: Props) => {
|
|
|
|
|
console.error(error);
|
|
|
|
|
toast.error(error.response.data.message);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
setState((state) => {
|
|
|
|
|
return {
|
|
|
|
|
...state,
|
|
|
|
|
isRequesting: false,
|
|
|
|
|
resourceList: [],
|
|
|
|
|
relationList: [],
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
setState((prevState) => ({
|
|
|
|
|
...prevState,
|
|
|
|
|
resourceList: [],
|
|
|
|
|
}));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleCheckBoxBtnClick = () => {
|
|
|
|
|
if (!editorRef.current) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
const currentPosition = editorRef.current?.getCursorPosition();
|
|
|
|
|
const currentLineNumber = editorRef.current?.getCursorLineNumber();
|
|
|
|
|
const currentLine = editorRef.current?.getLine(currentLineNumber);
|
|
|
|
|
let newLine = "";
|
|
|
|
|
let cursorChange = 0;
|
|
|
|
|
if (/^- \[( |x|X)\] /.test(currentLine)) {
|
|
|
|
|
newLine = currentLine.replace(/^- \[( |x|X)\] /, "");
|
|
|
|
|
cursorChange = -6;
|
|
|
|
|
} else if (/^\d+\. |- /.test(currentLine)) {
|
|
|
|
|
const match = currentLine.match(/^\d+\. |- /) ?? [""];
|
|
|
|
|
newLine = currentLine.replace(/^\d+\. |- /, "- [ ] ");
|
|
|
|
|
cursorChange = -match[0].length + 6;
|
|
|
|
|
} else {
|
|
|
|
|
newLine = "- [ ] " + currentLine;
|
|
|
|
|
cursorChange = 6;
|
|
|
|
|
}
|
|
|
|
|
editorRef.current?.setLine(currentLineNumber, newLine);
|
|
|
|
|
editorRef.current.setCursorPosition(currentPosition + cursorChange);
|
|
|
|
|
editorRef.current?.scrollToCursor();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleCodeBlockBtnClick = () => {
|
|
|
|
|
if (!editorRef.current) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const cursorPosition = editorRef.current.getCursorPosition();
|
|
|
|
|
const prevValue = editorRef.current.getContent().slice(0, cursorPosition);
|
|
|
|
|
if (prevValue === "" || prevValue.endsWith("\n")) {
|
|
|
|
|
editorRef.current?.insertText("", "```\n", "\n```");
|
|
|
|
|
} else {
|
|
|
|
|
editorRef.current?.insertText("", "\n```\n", "\n```");
|
|
|
|
|
}
|
|
|
|
|
editorRef.current?.scrollToCursor();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const handleTagSelectorClick = useCallback((tag: string) => {
|
|
|
|
@ -419,18 +379,6 @@ const MemoEditor = (props: Props) => {
|
|
|
|
|
>
|
|
|
|
|
<Icon.Link className="w-5 h-5 mx-auto" />
|
|
|
|
|
</IconButton>
|
|
|
|
|
<IconButton
|
|
|
|
|
className="flex flex-row justify-center items-center p-1 w-auto h-auto mr-1 select-none rounded cursor-pointer text-gray-600 dark:text-gray-400 hover:bg-gray-300 dark:hover:bg-zinc-800 hover:shadow"
|
|
|
|
|
onClick={handleCheckBoxBtnClick}
|
|
|
|
|
>
|
|
|
|
|
<Icon.CheckSquare className="w-5 h-5 mx-auto" />
|
|
|
|
|
</IconButton>
|
|
|
|
|
<IconButton
|
|
|
|
|
className="flex flex-row justify-center items-center p-1 w-auto h-auto mr-1 select-none rounded cursor-pointer text-gray-600 dark:text-gray-400 hover:bg-gray-300 dark:hover:bg-zinc-800 hover:shadow"
|
|
|
|
|
onClick={handleCodeBlockBtnClick}
|
|
|
|
|
>
|
|
|
|
|
<Icon.Code className="w-5 h-5 mx-auto" />
|
|
|
|
|
</IconButton>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<ResourceListView resourceList={state.resourceList} setResourceList={handleSetResourceList} />
|
|
|
|
@ -456,7 +404,7 @@ const MemoEditor = (props: Props) => {
|
|
|
|
|
</Select>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="shrink-0 flex flex-row justify-end items-center">
|
|
|
|
|
<Button color="success" disabled={!allowSave} onClick={handleSaveBtnClick}>
|
|
|
|
|
<Button color="success" disabled={!allowSave} loading={state.isRequesting} onClick={handleSaveBtnClick}>
|
|
|
|
|
{t("editor.save")}
|
|
|
|
|
</Button>
|
|
|
|
|
</div>
|
|
|
|
|