diff --git a/demos/src/Examples/Community/React/MentionList.jsx b/demos/src/Examples/Community/React/MentionList.jsx index 148fc4cf..40b157f4 100644 --- a/demos/src/Examples/Community/React/MentionList.jsx +++ b/demos/src/Examples/Community/React/MentionList.jsx @@ -1,79 +1,68 @@ -import React from 'react' +import React, { + useState, + useEffect, + forwardRef, + useImperativeHandle, +} from 'react' import './MentionList.scss' -export class MentionList extends React.Component { - constructor(props) { - super(props) +export const MentionList = forwardRef((props, ref) => { + const [selectedIndex, setSelectedIndex] = useState(0) - this.state = { - selectedIndex: 0, - } - } - - componentDidUpdate(oldProps) { - if (this.props.items !== oldProps.items) { - this.setState({ - selectedIndex: 0, - }) - } - } - - onKeyDown({ event }) { - if (event.key === 'ArrowUp') { - this.upHandler() - return true - } - - if (event.key === 'ArrowDown') { - this.downHandler() - return true - } - - if (event.key === 'Enter') { - this.enterHandler() - return true - } - - return false - } - - upHandler() { - this.setState({ - selectedIndex: ((this.state.selectedIndex + this.props.items.length) - 1) % this.props.items.length, - }) - } - - downHandler() { - this.setState({ - selectedIndex: (this.state.selectedIndex + 1) % this.props.items.length, - }) - } - - enterHandler() { - this.selectItem(this.state.selectedIndex) - } - - selectItem(index) { - const item = this.props.items[index] + const selectItem = index => { + const item = props.items[index] if (item) { - this.props.command({ id: item }) + props.command({ id: item }) } } - render() { - return ( -