From 1c8d818ee027e4597c40e540540ebe31b962d232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=BE=B7=E5=AE=87?= Date: Tue, 15 Sep 2026 19:52:55 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=8D=E7=94=A8=E5=BC=95=E7=94=A8=E8=8A=82?= =?UTF-8?q?=E7=82=B9=E6=8F=92=E5=85=A5=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 统一资源与 Skill 候选的 Lexical 节点插入流程 避免两个选择处理器在删除查询和关闭菜单行为上漂移 --- .../ResourceReferenceInput.tsx | 54 +++++++++---------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/apps/ai-game-creator-shell/src/features/project-workspace/ResourceReferenceInput.tsx b/apps/ai-game-creator-shell/src/features/project-workspace/ResourceReferenceInput.tsx index e17892abc..7366eba81 100644 --- a/apps/ai-game-creator-shell/src/features/project-workspace/ResourceReferenceInput.tsx +++ b/apps/ai-game-creator-shell/src/features/project-workspace/ResourceReferenceInput.tsx @@ -858,41 +858,15 @@ function ResourceReferenceEditor({ [editor, pickerOpen], ); - const handleSelectMention = useCallback( + const insertReferenceNode = useCallback( ( - option: ResourceMentionOption, + reference: ChatReference, textNodeContainingQuery: TextNode | null, closeMenu: () => void, ) => { textNodeContainingQuery?.remove(); const selection = $getSelection(); - if ($isRangeSelection(selection)) { - selection.insertNodes([ - $createResourceReferenceNode(option.reference), - $createTextNode(' '), - ]); - } else { - const paragraph = $createParagraphNode(); - paragraph.append( - $createResourceReferenceNode(option.reference), - $createTextNode(' '), - ); - $getRoot().append(paragraph); - } - closeMenu(); - }, - [], - ); - - const handleSelectSkill = useCallback( - ( - option: SkillMentionOption, - textNodeContainingQuery: TextNode | null, - closeMenu: () => void, - ) => { - textNodeContainingQuery?.remove(); - const selection = $getSelection(); - const node = $createResourceReferenceNode(option.skill); + const node = $createResourceReferenceNode(reference); if ($isRangeSelection(selection)) { selection.insertNodes([node, $createTextNode(' ')]); } else { @@ -905,6 +879,28 @@ function ResourceReferenceEditor({ [], ); + const handleSelectMention = useCallback( + ( + option: ResourceMentionOption, + textNodeContainingQuery: TextNode | null, + closeMenu: () => void, + ) => { + insertReferenceNode(option.reference, textNodeContainingQuery, closeMenu); + }, + [insertReferenceNode], + ); + + const handleSelectSkill = useCallback( + ( + option: SkillMentionOption, + textNodeContainingQuery: TextNode | null, + closeMenu: () => void, + ) => { + insertReferenceNode(option.skill, textNodeContainingQuery, closeMenu); + }, + [insertReferenceNode], + ); + // —— C8 AI 润色与发送前提醒 —— // 润色状态机抽到 `usePromptPolish`(资源侧两处入口共用同一份);这里只剩下 // 聊天特有的「发送前提醒」:提醒偏好、本轮已确认草稿指纹与表单拦截。