diff --git a/src/client/types.gen.ts b/src/client/types.gen.ts index db389b3..e30a681 100644 --- a/src/client/types.gen.ts +++ b/src/client/types.gen.ts @@ -17765,6 +17765,14 @@ export type SearchMessagesData = { * Results per page, default 20, max 100 */ per_page?: number; + /** + * Scope search to a specific room by UUID + */ + room?: string; + /** + * Scope search to a specific project by name + */ + pn?: string; }; url: '/api/search/messages'; }; diff --git a/src/components/room/message/editor/IMEditor.tsx b/src/components/room/message/editor/IMEditor.tsx index 5533229..0973267 100644 --- a/src/components/room/message/editor/IMEditor.tsx +++ b/src/components/room/message/editor/IMEditor.tsx @@ -366,6 +366,14 @@ export const IMEditor = forwardRef(function IMEdi const slashPool = useMemo(() => [...mentionItems.commands], [mentionItems.commands]); + // Refs to avoid stale closure in useEditor's onUpdate + const atPoolRef = useRef(atPool); + const hashPoolRef = useRef(hashPool); + const slashPoolRef = useRef(slashPool); + useEffect(() => { atPoolRef.current = atPool; }, [atPool]); + useEffect(() => { hashPoolRef.current = hashPool; }, [hashPool]); + useEffect(() => { slashPoolRef.current = slashPool; }, [slashPool]); + const selectMention = useCallback((item: MentionItem) => { const editor = editorRef.current; if (!editor) return; @@ -518,7 +526,7 @@ export const IMEditor = forwardRef(function IMEdi const q = text.slice(ts - 1, from); if (trigger === '@' && q.length >= 1) { - const results = filterMentionItems(atPool, q.slice(1)); + const results = filterMentionItems(atPoolRef.current, q.slice(1)); setMentionQuery(q.slice(1)); setMentionItems2(results); setMentionIdx(0); @@ -533,7 +541,7 @@ export const IMEditor = forwardRef(function IMEdi } } } else if (trigger === '#' && q.length >= 1) { - const results = filterMentionItems(hashPool, q.slice(1)); + const results = filterMentionItems(hashPoolRef.current, q.slice(1)); setMentionQuery(q.slice(1)); setMentionItems2(results); setMentionIdx(0); @@ -548,7 +556,7 @@ export const IMEditor = forwardRef(function IMEdi } } } else if (trigger === '/' && q.length >= 1) { - const results = filterMentionItems(slashPool, q.slice(1)); + const results = filterMentionItems(slashPoolRef.current, q.slice(1)); setMentionQuery(q.slice(1)); setMentionItems2(results); setMentionIdx(0);