From ffb10ac64542766c0cbea6aff9799f9bf3de7f7d Mon Sep 17 00:00:00 2001 From: Silberengel Date: Tue, 17 Mar 2026 06:11:25 +0100 Subject: [PATCH] fix mentions --- .../PostEditor/PostTextarea/Emoji/EmojiList.tsx | 15 +++++++++------ .../PostTextarea/Mention/MentionList.tsx | 17 ++++++++++------- .../PostTextarea/Mention/suggestion.ts | 3 ++- .../TextareaWithMentionAutocomplete/index.tsx | 5 +++-- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/components/PostEditor/PostTextarea/Emoji/EmojiList.tsx b/src/components/PostEditor/PostTextarea/Emoji/EmojiList.tsx index 0249e6e1..ccd311f0 100644 --- a/src/components/PostEditor/PostTextarea/Emoji/EmojiList.tsx +++ b/src/components/PostEditor/PostTextarea/Emoji/EmojiList.tsx @@ -14,10 +14,11 @@ export interface EmojiListHandler { } export const EmojiList = forwardRef((props, ref) => { + const items = props.items ?? [] const [selectedIndex, setSelectedIndex] = useState(0) const selectItem = (index: number): void => { - const item = props.items[index] + const item = items[index] if (item) { props.command({ name: item }) @@ -27,18 +28,20 @@ export const EmojiList = forwardRef((props, re } const upHandler = (): void => { - setSelectedIndex((selectedIndex + props.items.length - 1) % props.items.length) + if (!items.length) return + setSelectedIndex((selectedIndex + items.length - 1) % items.length) } const downHandler = (): void => { - setSelectedIndex((selectedIndex + 1) % props.items.length) + if (!items.length) return + setSelectedIndex((selectedIndex + 1) % items.length) } const enterHandler = (): void => { selectItem(selectedIndex) } - useEffect(() => setSelectedIndex(props.items.length ? 0 : -1), [props.items]) + useEffect(() => setSelectedIndex(items.length ? 0 : -1), [items]) useImperativeHandle(ref, () => { return { @@ -63,7 +66,7 @@ export const EmojiList = forwardRef((props, re } }, [upHandler, downHandler, enterHandler]) - if (!props.items?.length) { + if (!items.length) { return null } @@ -74,7 +77,7 @@ export const EmojiList = forwardRef((props, re onTouchMove={(e) => e.stopPropagation()} >
- {props.items.map((item, index) => { + {items.map((item, index) => { return ( ((props, ref) => { + const items = props.items ?? [] const inDialog = Boolean(props.editor?.view?.dom?.closest?.('[role="dialog"]')) const [internalIndex, setInternalIndex] = useState(0) const isControlled = props.selectedIndex !== undefined @@ -29,7 +30,7 @@ const MentionList = forwardRef((props, ref) const setSelectedIndex = isControlled ? (n: number) => props.onSelectIndex?.(n) : setInternalIndex const selectItem = (index: number) => { - const item = props.items[index] + const item = items[index] if (item) { props.command({ id: item, label: formatNpub(item) }) @@ -37,11 +38,13 @@ const MentionList = forwardRef((props, ref) } const upHandler = () => { - setSelectedIndex((selectedIndex + props.items.length - 1) % props.items.length) + if (!items.length) return + setSelectedIndex((selectedIndex + items.length - 1) % items.length) } const downHandler = () => { - setSelectedIndex((selectedIndex + 1) % props.items.length) + if (!items.length) return + setSelectedIndex((selectedIndex + 1) % items.length) } const enterHandler = () => { @@ -50,9 +53,9 @@ const MentionList = forwardRef((props, ref) useEffect(() => { if (!isControlled) { - setInternalIndex(props.items.length ? 0 : -1) + setInternalIndex(items.length ? 0 : -1) } - }, [props.items, isControlled]) + }, [items, isControlled]) useImperativeHandle(ref, () => ({ onKeyDown: ({ event }: SuggestionKeyDownProps) => { @@ -75,7 +78,7 @@ const MentionList = forwardRef((props, ref) } })) - if (!props.items?.length) { + if (!items.length) { return null } @@ -88,7 +91,7 @@ const MentionList = forwardRef((props, ref) onWheel={(e: React.WheelEvent) => e.stopPropagation()} onTouchMove={(e: React.TouchEvent) => e.stopPropagation()} > - {props.items.map((item, index) => ( + {items.map((item, index) => (