diff --git a/package-lock.json b/package-lock.json index 7b7069b..8122c39 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "@recogito/recogito-client-core", - "version": "0.1.5", + "version": "0.1.6", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -2315,6 +2315,11 @@ } } }, + "compute-scroll-into-view": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.14.tgz", + "integrity": "sha512-mKDjINe3tc6hGelUMNDzuhorIUZ7kS7BwyY0r2wQd2HOH2tRuJykiC06iSEX8y1TuhNzvz4GcJnK16mM2J1NMQ==" + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2804,6 +2809,27 @@ "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", "dev": true }, + "downshift": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/downshift/-/downshift-5.4.6.tgz", + "integrity": "sha512-GtSCmZUQMulQQ0gX3N3jvUAABJNU8IfAMLzFLu0E2fcOTt98xropy0iriYW2PSClRUqJ4QwKAov7FDy9Gk9aOA==", + "requires": { + "@babel/runtime": "^7.10.2", + "compute-scroll-into-view": "^1.0.14", + "prop-types": "^15.7.2", + "react-is": "^16.13.1" + }, + "dependencies": { + "@babel/runtime": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz", + "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + } + } + }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", diff --git a/package.json b/package.json index b01d51a..401cb6e 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ }, "dependencies": { "axios": "^0.19.0", + "downshift": "^5.4.6", "node-polyglot": "^2.4.0", "preact": "^10.4.1", "react-contenteditable": "^3.3.3", diff --git a/src/relations/editor/RelationAutocomplete.js b/src/relations/editor/RelationAutocomplete.js new file mode 100644 index 0000000..5165037 --- /dev/null +++ b/src/relations/editor/RelationAutocomplete.js @@ -0,0 +1,55 @@ +import React, { useState, useEffect, useRef } from 'react' +import { useCombobox } from 'downshift' + +const RelationAutocomplete = props => { + + const element = useRef(); + + const [ inputItems, setInputItems ] = useState(props.vocabulary); + + useEffect(() => + element.current?.querySelector('input').focus(), []); + + const onInputValueChange = ({ inputValue }) => { + props.onChange(inputValue); + setInputItems( + props.vocabulary.filter(item => + item.toLowerCase().startsWith(inputValue.toLowerCase()))) + } + + const { + isOpen, + getMenuProps, + getInputProps, + getComboboxProps, + highlightedIndex, + getItemProps, + } = useCombobox({ items: inputItems, onInputValueChange }); + + return ( +