fix link selector on mobile

This commit is contained in:
Philipinho
2026-03-15 22:02:11 +00:00
parent f99d8c2808
commit 33d9f0a458
@@ -1,7 +1,7 @@
import { BubbleMenu, BubbleMenuProps } from "@tiptap/react/menus"; import { BubbleMenu, BubbleMenuProps } from "@tiptap/react/menus";
import { isNodeSelection, useEditorState } from "@tiptap/react"; import { isNodeSelection, useEditorState } from "@tiptap/react";
import type { Editor } from "@tiptap/react"; import type { Editor } from "@tiptap/react";
import { FC, useEffect, useRef, useState } from "react"; import { FC, SetStateAction, useCallback, useEffect, useRef, useState } from "react";
import { import {
IconBold, IconBold,
IconCode, IconCode,
@@ -49,6 +49,7 @@ export const EditorBubbleMenu: FC<EditorBubbleMenuProps> = (props) => {
const [, setDraftCommentId] = useAtom(draftCommentIdAtom); const [, setDraftCommentId] = useAtom(draftCommentIdAtom);
const showCommentPopupRef = useRef(showCommentPopup); const showCommentPopupRef = useRef(showCommentPopup);
const showAiMenuRef = useRef(showAiMenu); const showAiMenuRef = useRef(showAiMenu);
const isLinkSelectorOpenRef = useRef(false);
useEffect(() => { useEffect(() => {
showCommentPopupRef.current = showCommentPopup; showCommentPopupRef.current = showCommentPopup;
@@ -125,6 +126,10 @@ export const EditorBubbleMenu: FC<EditorBubbleMenuProps> = (props) => {
const bubbleMenuProps: EditorBubbleMenuProps = { const bubbleMenuProps: EditorBubbleMenuProps = {
...props, ...props,
shouldShow: ({ state, editor }) => { shouldShow: ({ state, editor }) => {
if (isLinkSelectorOpenRef.current) {
return true;
}
const { selection } = state; const { selection } = state;
const { empty } = selection; const { empty } = selection;
@@ -155,7 +160,14 @@ export const EditorBubbleMenu: FC<EditorBubbleMenuProps> = (props) => {
const [isNodeSelectorOpen, setIsNodeSelectorOpen] = useState(false); const [isNodeSelectorOpen, setIsNodeSelectorOpen] = useState(false);
const [isTextAlignmentSelectorOpen, setIsTextAlignmentOpen] = useState(false); const [isTextAlignmentSelectorOpen, setIsTextAlignmentOpen] = useState(false);
const [isLinkSelectorOpen, setIsLinkSelectorOpen] = useState(false); const [isLinkSelectorOpen, _setIsLinkSelectorOpen] = useState(false);
const setIsLinkSelectorOpen = useCallback((value: SetStateAction<boolean>) => {
_setIsLinkSelectorOpen((prev) => {
const next = typeof value === 'function' ? value(prev) : value;
isLinkSelectorOpenRef.current = next;
return next;
});
}, []);
const [isColorSelectorOpen, setIsColorSelectorOpen] = useState(false); const [isColorSelectorOpen, setIsColorSelectorOpen] = useState(false);
// Hide the bubble menu immediately when AI menu is shown // Hide the bubble menu immediately when AI menu is shown