'use client'; import React, { useMemo, useState } from 'react'; import { withRef } from '@udecode/cn'; import { EmojiInlineIndexSearch, insertEmoji } from '@udecode/plate-emoji'; import { EmojiPlugin } from '@udecode/plate-emoji/react'; import { PlateElement, usePluginOption } from '@udecode/plate/react'; import { useDebounce } from '@plone/plate/hooks/use-debounce'; import { InlineCombobox, InlineComboboxContent, InlineComboboxEmpty, InlineComboboxGroup, InlineComboboxInput, InlineComboboxItem, } from './inline-combobox'; export const EmojiInputElement = withRef( ({ className, ...props }, ref) => { const { children, editor, element } = props; const data = usePluginOption(EmojiPlugin, 'data')!; const [value, setValue] = useState(''); const debouncedValue = useDebounce(value, 100); const isPending = value !== debouncedValue; const filteredEmojis = useMemo(() => { if (debouncedValue.trim().length === 0) return []; return EmojiInlineIndexSearch.getInstance(data) .search(debouncedValue.replace(/:$/, '')) .get(); }, [data, debouncedValue]); return ( {!isPending && ( No results )} {filteredEmojis.map((emoji) => ( insertEmoji(editor, emoji)} > {emoji.skins[0].native} {emoji.name} ))} {children} ); }, );