fix suggestion menu exit bug

This commit is contained in:
Philipinho
2026-01-24 06:49:33 +00:00
parent 605bf760be
commit 31e66ecf90
4 changed files with 29 additions and 17 deletions
@@ -164,7 +164,7 @@ const MentionList = forwardRef<any, MentionListProps>((props, ref) => {
const enterHandler = () => {
if (!renderItems.length) return;
if (renderItems[selectedIndex].entityType !== "header") {
if (renderItems[selectedIndex]?.entityType !== "header") {
selectItem(selectedIndex);
}
};
@@ -204,7 +204,7 @@ const MentionList = forwardRef<any, MentionListProps>((props, ref) => {
parentPageId: page.id || null,
title: title
};
let createdPage: IPage;
try {
createdPage = await createPageMutation.mutateAsync(payload);
@@ -77,7 +77,7 @@ const mentionRenderItems = () => {
{
placement: "bottom-start",
middleware: [offset(0), flip(), shift()],
}
},
).then(({ x, y }) => {
Object.assign(element.style, {
left: `${x}px`,
@@ -86,7 +86,7 @@ const mentionRenderItems = () => {
zIndex: "9999",
});
});
}
},
);
},
onUpdate: (props: {
@@ -115,23 +115,30 @@ const mentionRenderItems = () => {
// destroy component if space is greater 3 without a match
if (
whitespaceCount > 3 &&
whitespaceCount > 4 &&
//@ts-ignore
props.editor.storage.mentionItems.length === 0
props.editor.storage.mentionItems.length === 1
) {
destroy();
return;
}
// fallback exit
if (whitespaceCount > 7) {
destroy();
return;
}
},
onKeyDown: (props: { event: KeyboardEvent }) => {
if (props.event.key)
if (
props.event.key === "Escape" ||
(props.event.key === "Enter" && !component)
) {
destroy();
return false;
}
if (props.event.key === "Escape") {
destroy();
return true;
}
if (props.event.key === "Enter" && !component) {
destroy();
return false;
}
return (component?.ref as any)?.onKeyDown(props);
},
onExit: () => {
@@ -78,6 +78,7 @@ import i18n from "@/i18n.ts";
import { MarkdownClipboard } from "@/features/editor/extensions/markdown-clipboard.ts";
import EmojiCommand from "./emoji-command";
import { countWords } from "alfaaz";
import { PluginKey } from "@tiptap/pm/state";
const lowlight = createLowlight(common);
lowlight.register("mermaid", plaintext);
@@ -243,12 +244,12 @@ export const mainExtensions = [
"Mod-f": () => {
const event = new CustomEvent("openFindDialogFromEditor", {});
document.dispatchEvent(event);
return true;
return false;
},
Escape: () => {
const event = new CustomEvent("closeFindDialogFromEditor", {});
document.dispatchEvent(event);
return true;
return false;
},
};
},
@@ -53,6 +53,7 @@ export default function PageHeaderMenu({ readOnly }: PageHeaderMenuProps) {
const event = new CustomEvent("openFindDialogFromEditor", {});
document.dispatchEvent(event);
},
{ preventDefault: false },
],
[
"Escape",
@@ -60,6 +61,7 @@ export default function PageHeaderMenu({ readOnly }: PageHeaderMenuProps) {
const event = new CustomEvent("closeFindDialogFromEditor", {});
document.dispatchEvent(event);
},
{ preventDefault: false },
],
],
[],
@@ -280,7 +282,9 @@ function ConnectionWarning() {
const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);
useEffect(() => {
const isDisconnected = ["disconnected", "connecting"].includes(yjsConnectionStatus);
const isDisconnected = ["disconnected", "connecting"].includes(
yjsConnectionStatus,
);
if (isDisconnected) {
if (!timeoutRef.current) {