diff --git a/client/homebrew/editor/tagInput/tagInput.jsx b/client/homebrew/editor/tagInput/tagInput.jsx index 8063b4ab2..cfcb2be42 100644 --- a/client/homebrew/editor/tagInput/tagInput.jsx +++ b/client/homebrew/editor/tagInput/tagInput.jsx @@ -1,53 +1,74 @@ const React = require('react'); const { useState } = React; -const _ = require('lodash'); - -const TagInput = ({unique = true, values = [], ...props})=>{ +const TagInput = ({ unique = true, values = [], ...props }) => { const [temporaryValue, setTemporaryValue] = useState(''); - const [valueContext, setValueContext] = useState(values.map((value)=>({ value: value, editing : false }))); + const [valueContext, setValueContext] = useState(values.map((value) => ({ value, editing: false }))); + const handleInputKeyDown = (evt, value) => { + if (evt.key === 'Enter') { + submitTag(evt.target.value, value); + } + }; - const editTag = (evt)=>{ - setValueContext(valueContext.map((context)=>{ - context.editing = context.value === evt.target.dataset.value ? true : false; - return context; - })) - } + const submitTag = (newValue, originalValue) => { + setValueContext((prevContext) => { + return prevContext.map((context) => { + if (context.value === originalValue) { + return { ...context, value: newValue, editing: false }; + } + return context; + }); + }); + }; - const renderReadTag = (value)=>{ + const editTag = (valueToEdit) => { + setValueContext((prevContext) => { + return prevContext.map((context) => { + if (context.value === valueToEdit) { + return { ...context, editing: true }; + } + return { ...context, editing: false }; + }); + }); + }; + + const renderReadTag = (context) => { return ( -
editTag(evt)}> - {value} +
editTag(context.value)}> + {context.value}
- ) - } + ); + }; - const renderWriteTag = (value)=>{ + const renderWriteTag = (context) => { return ( - - ) - } + handleInputKeyDown(evt, context.value)} + autoFocus + /> + ); + }; return (
-
- - {Object.values(valueContext).map((context, i)=>{ return context.editing ? renderWriteTag(context.value) : renderReadTag(context.value) })} + {valueContext.map((context) => { return context.editing ? renderWriteTag(context) : renderReadTag(context); })} setTemporaryValue(e.target.value)} /> + onChange={(e) => setTemporaryValue(e.target.value)} />
- ) -} + ); +}; -module.exports = TagInput; \ No newline at end of file +module.exports = TagInput;