diff --git a/src/editor/widgets/Autocomplete.js b/src/editor/widgets/Autocomplete.js index cae0435..c35a0a5 100644 --- a/src/editor/widgets/Autocomplete.js +++ b/src/editor/widgets/Autocomplete.js @@ -1,83 +1,97 @@ -import React, { useState } from 'react' +import React, { Component, createRef } from 'react' import { useCombobox } from 'downshift' -const Autocomplete = props => { +export default class Autocomplete extends Component { - const [ inputItems, setInputItems ] = useState(props.vocabulary); - - const onInputValueChange = ({ inputValue }) => { - if (inputValue.length > 0) { - const prefixMatches = props.vocabulary.filter(item => { - return item.toLowerCase().startsWith(inputValue.toLowerCase()); - }); + constructor(props) { + super(props); - setInputItems(prefixMatches); - } else { - // ...or none, if the input is empty - setInputItems([]); - } - } - - const { - isOpen, - getMenuProps, - getInputProps, - getComboboxProps, - highlightedIndex, - getItemProps, - setInputValue - } = useCombobox({ - items: inputItems, - onInputValueChange, - onSelectedItemChange: ({ inputValue }) => { - onSubmit(inputValue); - setInputValue(''); - } - }); + this.element = createRef(); - const onSubmit = inputValue => { - setInputValue(''); - if (inputValue.trim().length > 0) - props.onSubmit(inputValue); - } - - const onKeyUp = evt => { - const { value } = evt.target; - - if (evt.which == 13 && highlightedIndex == -1) { - onSubmit(value); - } else if (evt.which == 40 && value.length == 0) { - setInputItems(props.vocabulary); // Show all options on key down - } else if (evt.which == 27) { - props.onCancel && props.onCancel(); - } else { - props.onChange && props.onChange(value); + this.state = { + inputItems: props.vocabulary || [] } } - return ( -