import React, { ReactElement, useCallback, useMemo, useRef, useState, } from 'react'; import { EditorState } from 'draft-js'; import Editor from '@draft-js-plugins/editor'; import createMentionPlugin, { defaultSuggestionsFilter, } from '@draft-js-plugins/mention'; import editorStyles from './CustomComponentMentionEditor.module.css'; import mentions from './Mentions'; export default function CustomComponentMentionEditor(): ReactElement { const ref = useRef(null); const [editorState, setEditorState] = useState(() => EditorState.createEmpty() ); const [open, setOpen] = useState(false); const [suggestions, setSuggestions] = useState(mentions); const { MentionSuggestions, plugins } = useMemo(() => { const mentionPlugin = createMentionPlugin({ mentionComponent(mentionProps) { return ( alert('Clicked on the Mention!')} > {mentionProps.children} ); }, }); // eslint-disable-next-line no-shadow const { MentionSuggestions } = mentionPlugin; // eslint-disable-next-line no-shadow const plugins = [mentionPlugin]; return { plugins, MentionSuggestions }; }, []); const onOpenChange = useCallback((_open: boolean) => { setOpen(_open); }, []); const onSearchChange = useCallback( ({ trigger, value }: { trigger: string; value: string }) => { setSuggestions(defaultSuggestionsFilter(value, mentions, trigger)); }, [] ); return (
{ ref.current!.focus(); }} > { // get the mention object selected }} />
); }