import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react' /** * Dropdown list rendered by TipTap's mention suggestion. * Receives `items` (user objects) and keyboard nav commands via ref. */ const MentionList = forwardRef(function MentionList({ items, command }, ref) { const [selectedIndex, setSelectedIndex] = useState(0) // Reset selection when items change useEffect(() => setSelectedIndex(0), [items]) // Expose keyboard handler to TipTap suggestion plugin useImperativeHandle(ref, () => ({ onKeyDown: ({ event }) => { if (event.key === 'ArrowUp') { setSelectedIndex((i) => (i + items.length - 1) % items.length) return true } if (event.key === 'ArrowDown') { setSelectedIndex((i) => (i + 1) % items.length) return true } if (event.key === 'Enter') { selectItem(selectedIndex) return true } return false }, })) const selectItem = (index) => { const item = items[index] if (item) { command({ id: item.username, label: item.username }) } } if (!items.length) { return (

No users found

) } return (
{items.map((item, index) => ( ))}
) }) export default MentionList