@hitachivantara/uikit-react-core 3.55.0 → 3.55.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/dist/TagsInput/TagsInput.d.ts +1 -1
- package/dist/TagsInput/TagsInput.js +51 -59
- package/dist/TagsInput/TagsInput.js.map +1 -1
- package/dist/legacy/TagsInput/TagsInput.d.ts +1 -1
- package/dist/legacy/TagsInput/TagsInput.js +51 -59
- package/dist/legacy/TagsInput/TagsInput.js.map +1 -1
- package/dist/modern/TagsInput/TagsInput.d.ts +1 -1
- package/dist/modern/TagsInput/TagsInput.js +43 -49
- package/dist/modern/TagsInput/TagsInput.js.map +1 -1
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [3.55.1](https://github.com/lumada-design/hv-uikit-react/compare/@hitachivantara/uikit-react-core@3.55.0...@hitachivantara/uikit-react-core@3.55.1) (2022-02-10)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **TagsInput:** fix reset input on value change ([d4f2df1](https://github.com/lumada-design/hv-uikit-react/commit/d4f2df1f83b6eb7aa2a22556c2a33001a667ab23))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
# [3.55.0](https://github.com/lumada-design/hv-uikit-react/compare/@hitachivantara/uikit-react-core@3.54.2...@hitachivantara/uikit-react-core@3.55.0) (2022-02-07)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -18,7 +18,7 @@ export type HvTagsInputClassKey =
|
|
|
18
18
|
| "error";
|
|
19
19
|
|
|
20
20
|
export interface HvTagsInputProps
|
|
21
|
-
extends StandardProps<HvInputProps, HvTagsInputClassKey, "onChange"
|
|
21
|
+
extends StandardProps<HvInputProps, HvTagsInputClassKey, "onChange"> {
|
|
22
22
|
/**
|
|
23
23
|
* The label of the form element.
|
|
24
24
|
*
|
|
@@ -136,16 +136,6 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
136
136
|
value = _useControlled2[0],
|
|
137
137
|
setValue = _useControlled2[1];
|
|
138
138
|
|
|
139
|
-
var _useState = (0, _react.useState)(""),
|
|
140
|
-
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
141
|
-
tagInput = _useState2[0],
|
|
142
|
-
setTagInput = _useState2[1];
|
|
143
|
-
|
|
144
|
-
var _useState3 = (0, _react.useState)(value.length),
|
|
145
|
-
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
146
|
-
tagCursorPos = _useState4[0],
|
|
147
|
-
setTagCursorPos = _useState4[1];
|
|
148
|
-
|
|
149
139
|
var _useControlled3 = (0, _utils.useControlled)(status, _validationStates.default.standBy),
|
|
150
140
|
_useControlled4 = (0, _slicedToArray2.default)(_useControlled3, 2),
|
|
151
141
|
validationState = _useControlled4[0],
|
|
@@ -156,18 +146,29 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
156
146
|
validationMessage = _useControlled6[0],
|
|
157
147
|
setValidationMessage = _useControlled6[1];
|
|
158
148
|
|
|
149
|
+
var _useState = (0, _react.useState)(""),
|
|
150
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
151
|
+
tagInput = _useState2[0],
|
|
152
|
+
setTagInput = _useState2[1];
|
|
153
|
+
|
|
154
|
+
var _useState3 = (0, _react.useState)(value.length),
|
|
155
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
156
|
+
tagCursorPos = _useState4[0],
|
|
157
|
+
setTagCursorPos = _useState4[1];
|
|
158
|
+
|
|
159
159
|
var _useState5 = (0, _react.useState)(true),
|
|
160
160
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
161
161
|
stateValid = _useState6[0],
|
|
162
162
|
setStateValid = _useState6[1];
|
|
163
163
|
|
|
164
|
+
var inputRef = (0, _react.useRef)();
|
|
165
|
+
var containerRef = (0, _react.useRef)();
|
|
166
|
+
var resetInput = (0, _react.useRef)(false);
|
|
164
167
|
var isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;
|
|
165
168
|
var hasCounter = maxTagsQuantity != null && !hideCounter;
|
|
166
169
|
var isStateInvalid = (0, _react.useMemo)(function () {
|
|
167
170
|
return hasCounter && value.length > maxTagsQuantity;
|
|
168
171
|
}, [hasCounter, maxTagsQuantity, value.length]);
|
|
169
|
-
var inputRef = (0, _react.useRef)();
|
|
170
|
-
var containerRef = (0, _react.useRef)();
|
|
171
172
|
var errorMessages = (0, _react.useMemo)(function () {
|
|
172
173
|
return _objectSpread(_objectSpread({}, _validations.DEFAULT_ERROR_MESSAGES), validationMessages);
|
|
173
174
|
}, // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -183,6 +184,27 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
183
184
|
setStateValid(true);
|
|
184
185
|
}
|
|
185
186
|
}, [errorMessages.maxCharError, maxTagsQuantity, setValidationMessage, setValidationState]);
|
|
187
|
+
/**
|
|
188
|
+
* Deletes a Tag from the array of tags and sets the new position for the tag cursor.
|
|
189
|
+
* Also executes the user provided onDelete and onChange events.
|
|
190
|
+
*
|
|
191
|
+
* @param {number} tagPos - the position at which to remove the tag
|
|
192
|
+
* @param {Event} event - the event associated with the delete
|
|
193
|
+
* @param {boolean} end - whether or not to set the cursor at the end of the array
|
|
194
|
+
*/
|
|
195
|
+
|
|
196
|
+
var deleteTag = (0, _react.useCallback)(function (tagPos, event, end) {
|
|
197
|
+
var _inputRef$current;
|
|
198
|
+
|
|
199
|
+
var newTagsArr = [].concat((0, _toConsumableArray2.default)(value.slice(0, tagPos)), (0, _toConsumableArray2.default)(value.slice(tagPos + 1)));
|
|
200
|
+
setValue(newTagsArr); // eslint-disable-next-line no-nested-ternary
|
|
201
|
+
|
|
202
|
+
setTagCursorPos(end ? newTagsArr.length : tagCursorPos > 0 ? tagCursorPos - 1 : 0);
|
|
203
|
+
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
|
204
|
+
performValidation(newTagsArr);
|
|
205
|
+
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[tagPos], tagPos);
|
|
206
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
207
|
+
}, [onChange, onDelete, performValidation, setValue, tagCursorPos, value]);
|
|
186
208
|
var canShowError = status !== undefined && status === "invalid" && statusMessage !== undefined || !stateValid;
|
|
187
209
|
/**
|
|
188
210
|
* Handler for the `onChange` event on the tag input
|
|
@@ -192,20 +214,10 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
192
214
|
setTagInput(input);
|
|
193
215
|
}, []);
|
|
194
216
|
(0, _react.useEffect)(function () {
|
|
195
|
-
// keep scroll focused on the input when the value changes
|
|
196
217
|
if (!multiline) {
|
|
197
|
-
var _containerRef$current
|
|
218
|
+
var _containerRef$current;
|
|
198
219
|
|
|
199
|
-
var element = containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.children[
|
|
200
|
-
var offset = element === null || element === void 0 ? void 0 : element.offsetWidth;
|
|
201
|
-
containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : (_containerRef$current3 = _containerRef$current2.scrollBy) === null || _containerRef$current3 === void 0 ? void 0 : _containerRef$current3.call(_containerRef$current2, offset !== null && offset !== void 0 ? offset : 0, 0);
|
|
202
|
-
}
|
|
203
|
-
}, [multiline, value]);
|
|
204
|
-
(0, _react.useEffect)(function () {
|
|
205
|
-
if (!multiline) {
|
|
206
|
-
var _containerRef$current4;
|
|
207
|
-
|
|
208
|
-
var element = containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current4 = containerRef.current) === null || _containerRef$current4 === void 0 ? void 0 : _containerRef$current4.children[tagCursorPos]; // this setTimeout is a workaround for Firefox not properly dealing
|
|
220
|
+
var element = containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.children[tagCursorPos]; // this setTimeout is a workaround for Firefox not properly dealing
|
|
209
221
|
// with setting the scrollLeft value.
|
|
210
222
|
|
|
211
223
|
setTimeout(function () {
|
|
@@ -216,6 +228,13 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
216
228
|
element === null || element === void 0 ? void 0 : element.focus();
|
|
217
229
|
}
|
|
218
230
|
}, [multiline, tagCursorPos]);
|
|
231
|
+
(0, _react.useEffect)(function () {
|
|
232
|
+
if (resetInput.current) {
|
|
233
|
+
setTagInput("");
|
|
234
|
+
setTagCursorPos(value.length);
|
|
235
|
+
resetInput.current = false;
|
|
236
|
+
}
|
|
237
|
+
}, [value]);
|
|
219
238
|
/**
|
|
220
239
|
* Handler for the `onEnter` event on the tag input
|
|
221
240
|
*/
|
|
@@ -230,8 +249,7 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
230
249
|
};
|
|
231
250
|
var newTagsArr = [].concat((0, _toConsumableArray2.default)(value), [newTag]);
|
|
232
251
|
setValue(newTagsArr);
|
|
233
|
-
|
|
234
|
-
setTagCursorPos(newTagsArr.length);
|
|
252
|
+
resetInput.current = true;
|
|
235
253
|
performValidation(newTagsArr);
|
|
236
254
|
onAdd === null || onAdd === void 0 ? void 0 : onAdd(event, newTag, newTagsArr.length - 1);
|
|
237
255
|
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
@@ -254,15 +272,7 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
254
272
|
|
|
255
273
|
case "Backspace":
|
|
256
274
|
if (isTagSelected) {
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[tagCursorPos], tagCursorPos);
|
|
260
|
-
var newTagsArr = [].concat((0, _toConsumableArray2.default)(value.slice(0, tagCursorPos)), (0, _toConsumableArray2.default)(value.slice(tagCursorPos + 1)));
|
|
261
|
-
setValue(newTagsArr);
|
|
262
|
-
setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);
|
|
263
|
-
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
|
264
|
-
performValidation(newTagsArr);
|
|
265
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
275
|
+
deleteTag(tagCursorPos, event, false);
|
|
266
276
|
} else {
|
|
267
277
|
setTagCursorPos(value.length - 1);
|
|
268
278
|
}
|
|
@@ -271,17 +281,7 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
271
281
|
|
|
272
282
|
case "Delete":
|
|
273
283
|
if (isTagSelected) {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[tagCursorPos], tagCursorPos);
|
|
277
|
-
|
|
278
|
-
var _newTagsArr = [].concat((0, _toConsumableArray2.default)(value.slice(0, tagCursorPos)), (0, _toConsumableArray2.default)(value.slice(tagCursorPos + 1)));
|
|
279
|
-
|
|
280
|
-
setValue(_newTagsArr);
|
|
281
|
-
setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);
|
|
282
|
-
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
|
|
283
|
-
performValidation(_newTagsArr);
|
|
284
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(event, _newTagsArr);
|
|
284
|
+
deleteTag(tagCursorPos, event, false);
|
|
285
285
|
}
|
|
286
286
|
|
|
287
287
|
break;
|
|
@@ -290,31 +290,23 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
290
290
|
break;
|
|
291
291
|
}
|
|
292
292
|
}
|
|
293
|
-
}, [
|
|
293
|
+
}, [deleteTag, isTagSelected, tagCursorPos, tagInput, value.length]);
|
|
294
294
|
/**
|
|
295
295
|
* Handler for the `onDelete` event on the tag component
|
|
296
296
|
*/
|
|
297
297
|
|
|
298
298
|
var onDeleteTagHandler = (0, _react.useCallback)(function (event, i) {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[i], i);
|
|
302
|
-
var newTagsArr = [].concat((0, _toConsumableArray2.default)(value.slice(0, i)), (0, _toConsumableArray2.default)(value.slice(i + 1)));
|
|
299
|
+
deleteTag(i, event, true);
|
|
303
300
|
setValidationState(_validationStates.default.standBy);
|
|
304
|
-
|
|
305
|
-
setTagCursorPos(newTagsArr.length);
|
|
306
|
-
(_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 ? void 0 : _inputRef$current3.focus();
|
|
307
|
-
performValidation(newTagsArr);
|
|
308
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
309
|
-
}, [onDelete, value, setValidationState, setValue, performValidation, onChange]);
|
|
301
|
+
}, [deleteTag, setValidationState]);
|
|
310
302
|
/**
|
|
311
303
|
* Handler for the `onClick` event on the list container
|
|
312
304
|
*/
|
|
313
305
|
|
|
314
306
|
var onContainerClickHandler = (0, _react.useCallback)(function () {
|
|
315
|
-
var _inputRef$
|
|
307
|
+
var _inputRef$current2;
|
|
316
308
|
|
|
317
|
-
(_inputRef$
|
|
309
|
+
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
|
|
318
310
|
setTagCursorPos(value.length);
|
|
319
311
|
}, [value.length]);
|
|
320
312
|
return /*#__PURE__*/_react.default.createElement(_.HvFormElement, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/TagsInput/TagsInput.js"],"names":["HvTagsInput","props","classes","className","id","name","valueProp","value","defaultValue","readOnly","disabled","required","textAreaLabel","label","ariaLabel","ariaLabelledBy","description","ariaDescribedBy","onChange","onAdd","onDelete","placeholder","hideCounter","middleCountLabel","maxTagsQuantity","autoFocus","resizable","inputProps","countCharProps","multiline","status","statusMessage","validationMessages","others","elementId","hasLabel","hasDescription","setValue","tagInput","setTagInput","length","tagCursorPos","setTagCursorPos","validationStates","standBy","validationState","setValidationState","validationMessage","setValidationMessage","stateValid","setStateValid","isTagSelected","hasCounter","isStateInvalid","inputRef","containerRef","errorMessages","DEFAULT_ERROR_MESSAGES","error","requiredError","minCharError","maxCharError","performValidation","currValue","invalid","valid","canShowError","undefined","onChangeHandler","event","input","element","current","children","offset","offsetWidth","scrollBy","setTimeout","container","scrollLeft","offsetLeft","getBoundingClientRect","width","focus","onEnterHandler","tag","preventDefault","newTag","type","newTagsArr","onKeyDownHandler","code","slice","onDeleteTagHandler","i","onContainerClickHandler","root","labelContainer","characterCounter","tagsList","singleLine","map","t","otherProps","gutters","listItemGutters","listItemRoot","tagSelected","chipRoot","tabIndex","tagInputContainerRoot","tagInputRoot","inputBorderContainer","tagInputBorderContainer","inputRootFocused","tagInputRootFocused","propTypes","PropTypes","string","shape","isRequired","array","node","bool","func","number","instanceOf","Object","styles"],"mappings":"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","sourcesContent":["import React, { useRef, useState, useCallback, useMemo, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport clsx from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport { withStyles } from \"@material-ui/core\";\nimport { setId, useControlled } from \"../utils\";\nimport {\n HvFormElement,\n HvListContainer,\n HvListItem,\n HvTag,\n HvInput,\n HvLabel,\n HvInfoMessage,\n HvCharCounter,\n HvWarningText,\n useUniqueId,\n} from \"..\";\nimport validationStates from \"../Forms/FormElement/validationStates\";\nimport { DEFAULT_ERROR_MESSAGES } from \"../BaseInput/validations\";\nimport styles from \"./styles\";\n\n/**\n * A tags input is a single or multiline control that allows the input of tags.\n */\nconst HvTagsInput = (props) => {\n const {\n classes,\n className,\n\n id,\n name,\n\n value: valueProp,\n defaultValue = [],\n\n readOnly = false,\n disabled = false,\n required = false,\n\n label: textAreaLabel,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n description,\n \"aria-describedby\": ariaDescribedBy,\n\n onChange,\n onAdd,\n onDelete,\n\n placeholder,\n\n hideCounter = false,\n middleCountLabel = \"/\",\n maxTagsQuantity,\n\n autoFocus = false,\n resizable = true,\n\n inputProps = {},\n countCharProps = {},\n\n multiline = false,\n\n status,\n statusMessage,\n\n validationMessages,\n\n ...others\n } = props;\n const elementId = useUniqueId(id, \"hvTagsInput\");\n\n const hasLabel = textAreaLabel != null;\n const hasDescription = description != null;\n\n const [value, setValue] = useControlled(valueProp, defaultValue);\n\n const [tagInput, setTagInput] = useState(\"\");\n const [tagCursorPos, setTagCursorPos] = useState(value.length);\n\n const [validationState, setValidationState] = useControlled(status, validationStates.standBy);\n const [validationMessage, setValidationMessage] = useControlled(statusMessage, \"\");\n\n const [stateValid, setStateValid] = useState(true);\n\n const isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;\n\n const hasCounter = maxTagsQuantity != null && !hideCounter;\n\n const isStateInvalid = useMemo(() => {\n return hasCounter && value.length > maxTagsQuantity;\n }, [hasCounter, maxTagsQuantity, value.length]);\n\n const inputRef = useRef();\n const containerRef = useRef();\n\n const errorMessages = useMemo(\n () => ({ ...DEFAULT_ERROR_MESSAGES, ...validationMessages }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n validationMessages?.error,\n validationMessages?.requiredError,\n validationMessages?.minCharError,\n validationMessages?.maxCharError,\n ]\n );\n\n const performValidation = useCallback(\n (currValue) => {\n if (maxTagsQuantity !== null && currValue.length > maxTagsQuantity) {\n setValidationState(validationStates.invalid);\n setValidationMessage(errorMessages.maxCharError);\n setStateValid(false);\n } else {\n setValidationState(validationStates.valid);\n setValidationMessage(\"\");\n setStateValid(true);\n }\n },\n [errorMessages.maxCharError, maxTagsQuantity, setValidationMessage, setValidationState]\n );\n\n const canShowError =\n (status !== undefined && status === \"invalid\" && statusMessage !== undefined) || !stateValid;\n\n /**\n * Handler for the `onChange` event on the tag input\n */\n const onChangeHandler = useCallback((event, input) => {\n setTagInput(input);\n }, []);\n\n useEffect(() => {\n // keep scroll focused on the input when the value changes\n if (!multiline) {\n const element = containerRef?.current?.children[value.length];\n const offset = element?.offsetWidth;\n containerRef?.current?.scrollBy?.(offset ?? 0, 0);\n }\n }, [multiline, value]);\n\n useEffect(() => {\n if (!multiline) {\n const element = containerRef?.current?.children[tagCursorPos];\n // this setTimeout is a workaround for Firefox not properly dealing\n // with setting the scrollLeft value.\n setTimeout(() => {\n const container = containerRef.current;\n if (isNil(container)) return;\n container.scrollLeft = element\n ? element.offsetLeft -\n container.getBoundingClientRect().width / 2 +\n element.getBoundingClientRect().width / 2\n : 0;\n }, 50);\n\n element?.focus();\n }\n }, [multiline, tagCursorPos]);\n\n /**\n * Handler for the `onEnter` event on the tag input\n */\n const onEnterHandler = useCallback(\n (event, tag) => {\n event.preventDefault();\n if (tag !== \"\") {\n const newTag = { label: tag, type: \"semantic\" };\n const newTagsArr = [...value, newTag];\n setValue(newTagsArr);\n setTagInput(\"\");\n setTagCursorPos(newTagsArr.length);\n performValidation(newTagsArr);\n onAdd?.(event, newTag, newTagsArr.length - 1);\n onChange?.(event, newTagsArr);\n }\n },\n [onAdd, onChange, performValidation, setValue, value]\n );\n\n /**\n * Handler for the `onKeyDown` event on the list container.\n */\n const onKeyDownHandler = useCallback(\n (event) => {\n if (tagInput === \"\") {\n switch (event.code) {\n case \"ArrowLeft\":\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n break;\n case \"ArrowRight\":\n setTagCursorPos(tagCursorPos < value.length ? tagCursorPos + 1 : value.length);\n break;\n case \"Backspace\":\n if (isTagSelected) {\n onDelete?.(event, value[tagCursorPos], tagCursorPos);\n const newTagsArr = [\n ...value.slice(0, tagCursorPos),\n ...value.slice(tagCursorPos + 1),\n ];\n setValue(newTagsArr);\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onChange?.(event, newTagsArr);\n } else {\n setTagCursorPos(value.length - 1);\n }\n break;\n case \"Delete\":\n if (isTagSelected) {\n onDelete?.(event, value[tagCursorPos], tagCursorPos);\n const newTagsArr = [\n ...value.slice(0, tagCursorPos),\n ...value.slice(tagCursorPos + 1),\n ];\n setValue(newTagsArr);\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onChange?.(event, newTagsArr);\n }\n break;\n default:\n break;\n }\n }\n },\n [isTagSelected, onChange, onDelete, performValidation, setValue, tagCursorPos, tagInput, value]\n );\n\n /**\n * Handler for the `onDelete` event on the tag component\n */\n const onDeleteTagHandler = useCallback(\n (event, i) => {\n onDelete?.(event, value[i], i);\n const newTagsArr = [...value.slice(0, i), ...value.slice(i + 1)];\n setValidationState(validationStates.standBy);\n setValue(newTagsArr);\n setTagCursorPos(newTagsArr.length);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onChange?.(event, newTagsArr);\n },\n [onDelete, value, setValidationState, setValue, performValidation, onChange]\n );\n\n /**\n * Handler for the `onClick` event on the list container\n */\n const onContainerClickHandler = useCallback(() => {\n inputRef.current?.focus();\n setTagCursorPos(value.length);\n }, [value.length]);\n\n return (\n <HvFormElement\n id={id}\n name={name}\n disabled={disabled}\n readOnly={readOnly}\n status={validationState}\n required={required}\n className={clsx(classes.root, className, {\n [classes.disabled]: disabled,\n })}\n >\n {(hasLabel || hasDescription) && (\n <div className={classes.labelContainer}>\n {hasLabel && (\n <HvLabel\n className={classes.label}\n id={setId(id, \"label\")}\n htmlFor={setId(elementId, \"input\")}\n label={textAreaLabel}\n />\n )}\n\n {hasDescription && (\n <HvInfoMessage className={classes.description} id={setId(elementId, \"description\")}>\n {description}\n </HvInfoMessage>\n )}\n </div>\n )}\n\n {hasCounter && (\n <HvCharCounter\n id={setId(elementId, \"charCounter\")}\n className={classes.characterCounter}\n separator={middleCountLabel}\n currentCharQuantity={value.length}\n maxCharQuantity={maxTagsQuantity}\n {...countCharProps}\n />\n )}\n\n <HvListContainer\n className={clsx(\n classes.tagsList,\n canShowError && classes.error,\n resizable && multiline && classes.resizable,\n isStateInvalid && classes.invalid,\n !multiline && classes.singleLine\n )}\n onKeyDown={onKeyDownHandler}\n onClick={onContainerClickHandler}\n ref={containerRef}\n >\n {value &&\n value.map((t, i) => {\n const tag =\n typeof t === \"string\"\n ? {\n label: t,\n type: \"semantic\",\n }\n : t;\n const { label, type, ...otherProps } = tag;\n return (\n <HvListItem\n // eslint-disable-next-line react/no-array-index-key\n key={`${tag.label}-${i}`}\n tabIndex={-1}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n gutters: classes.listItemGutters,\n root: classes.listItemRoot,\n }}\n id={`tag-${i}`}\n >\n <HvTag\n label={label}\n className={clsx(i === tagCursorPos && classes.tagSelected)}\n classes={{\n chipRoot: classes.chipRoot,\n }}\n type={type}\n {...(!(readOnly || disabled || type === \"categorical\") && {\n onDelete: (event) => onDeleteTagHandler(event, i),\n })}\n deleteButtonProps={{\n tabIndex: -1,\n }}\n {...otherProps}\n />\n </HvListItem>\n );\n })}\n {!(disabled || readOnly) && (\n <HvListItem\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputContainerRoot,\n gutters: classes.listItemGutters,\n }}\n id={`tag-${value.length}`}\n >\n <HvInput\n value={tagInput}\n disableClear\n onChange={onChangeHandler}\n onEnter={onEnterHandler}\n placeholder={value.length === 0 ? placeholder : \"\"}\n autoFocus={autoFocus}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputRoot,\n input: classes.input,\n inputBorderContainer: classes.tagInputBorderContainer,\n inputRootFocused: classes.tagInputRootFocused,\n }}\n disabled={disabled}\n readOnly={readOnly || isTagSelected}\n inputProps={{\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\":\n ariaDescribedBy != null\n ? ariaDescribedBy\n : description && setId(elementId, \"description\"),\n\n ...inputProps,\n }}\n inputRef={inputRef}\n {...others}\n />\n </HvListItem>\n )}\n </HvListContainer>\n {canShowError && (\n <HvWarningText id={setId(elementId, \"error\")} disableBorder className={classes.error}>\n {validationMessage}\n </HvWarningText>\n )}\n </HvFormElement>\n );\n};\n\nHvTagsInput.propTypes = {\n /**\n * Class names to be applied.\n */\n className: PropTypes.string,\n /**\n * A Jss Object used to override or extend the component styles applied.\n */\n classes: PropTypes.PropTypes.shape({\n /**\n * Styles applied to the input element.\n */\n input: PropTypes.string,\n /**\n * Styles applied to the list item gutters.\n */\n listItemGutters: PropTypes.string,\n /**\n * Styles applied to the list item element.\n */\n listItemRoot: PropTypes.string,\n /**\n * Styles applied to the root container of the textarea.\n */\n root: PropTypes.string,\n /**\n *\n */\n chipRoot: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n disabled: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n resizable: PropTypes.string,\n /**\n * Style applied to the root when invalid.\n */\n invalid: PropTypes.string,\n /**\n * Styles applied to text area container that holds the label, description and counter.\n */\n labelContainer: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n label: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n description: PropTypes.string,\n /**\n * Style applied on the character counter.\n */\n characterCounter: PropTypes.string,\n /**\n * Styles applied to the tags list container element.\n */\n tagsList: PropTypes.string,\n /**\n * Styles applied to the tag input container element.\n */\n tagInputContainerRoot: PropTypes.string,\n /**\n * Styles applied to the tag input element.\n */\n tagInputRoot: PropTypes.string,\n /**\n * Styles applied to a tag element when selected\n */\n tagSelected: PropTypes.string,\n /**\n * Styles applied to the input element border.\n */\n tagInputBorderContainer: PropTypes.string,\n /**\n * Styles applied to the input element when focused.\n */\n tagInputRootFocused: PropTypes.string,\n /**\n * Styles applied to the container when in single line mode.\n */\n singleLine: PropTypes.string,\n /**\n * Styles applied to the tags list when an error occurred.\n */\n error: PropTypes.string,\n }).isRequired,\n /**\n * Id to be applied to the form element root node.\n */\n id: PropTypes.string,\n /**\n * The form element name.\n */\n name: PropTypes.string,\n /**\n * The value of the form element.\n */\n value: PropTypes.array,\n /**\n * When uncontrolled, defines the initial input value.\n */\n defaultValue: PropTypes.array,\n /**\n * The label of the form element.\n *\n * The form element must be labeled for accessibility reasons.\n * If not provided, an aria-label or aria-labelledby must be inputted via inputProps.\n */\n label: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-label\": PropTypes.string,\n /**\n * @ignore\n */\n \"aria-labelledby\": PropTypes.string,\n /**\n * Provide additional descriptive text for the form element.\n */\n description: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-describedby\": PropTypes.string,\n /**\n * Indicates that the form element is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * Indicates that the form element is not editable.\n */\n readOnly: PropTypes.bool,\n /**\n * Indicates that the form element is required.\n */\n required: PropTypes.bool,\n /**\n * The function that will be executed onChange.\n */\n onChange: PropTypes.func,\n /**\n * The function that will be executed when a tag is deleted.\n */\n onDelete: PropTypes.func,\n /**\n * The function that will be executed when a tag is added.\n */\n onAdd: PropTypes.func,\n /**\n * The placeholder value of the input.\n */\n placeholder: PropTypes.string,\n /**\n * If `true` the character counter isn't shown even if maxTagsQuantity is set.\n */\n hideCounter: PropTypes.bool,\n /**\n * Text between the current char counter and max value.\n */\n middleCountLabel: PropTypes.string,\n /**\n * The maximum allowed length of the characters, if this value is null no check\n * will be performed.\n */\n maxTagsQuantity: PropTypes.number,\n /**\n * Attributes applied to the input element.\n */\n inputProps: PropTypes.instanceOf(Object),\n /**\n * If `true` it should autofocus.\n */\n autoFocus: PropTypes.bool,\n /**\n * If `true` the component is resizable.\n */\n resizable: PropTypes.bool,\n /**\n * Props passed to the HvCharCount component.\n */\n countCharProps: PropTypes.instanceOf(Object),\n /**\n * If `true` the component is in multiline mode.\n */\n multiline: PropTypes.bool,\n /**\n * The status of the form element.\n */\n status: PropTypes.string,\n /**\n * The error message to show when `status` is \"invalid\".\n */\n statusMessage: PropTypes.string,\n\n /**\n * An Object containing the various texts associated with the input.\n */\n validationMessages: PropTypes.shape({\n /**\n * The value when a validation fails.\n */\n error: PropTypes.string,\n /**\n * The message that appears when there are too many characters.\n */\n maxCharError: PropTypes.string,\n /**\n * The message that appears when there are too few characters.\n */\n minCharError: PropTypes.string,\n /**\n * The message that appears when the input is empty and required.\n */\n requiredError: PropTypes.string,\n }),\n};\n\nexport default withStyles(styles, { name: \"HvTagsInput\" })(HvTagsInput);\n"],"file":"TagsInput.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/TagsInput/TagsInput.js"],"names":["HvTagsInput","props","classes","className","id","name","valueProp","value","defaultValue","readOnly","disabled","required","textAreaLabel","label","ariaLabel","ariaLabelledBy","description","ariaDescribedBy","onChange","onAdd","onDelete","placeholder","hideCounter","middleCountLabel","maxTagsQuantity","autoFocus","resizable","inputProps","countCharProps","multiline","status","statusMessage","validationMessages","others","elementId","hasLabel","hasDescription","setValue","validationStates","standBy","validationState","setValidationState","validationMessage","setValidationMessage","tagInput","setTagInput","length","tagCursorPos","setTagCursorPos","stateValid","setStateValid","inputRef","containerRef","resetInput","isTagSelected","hasCounter","isStateInvalid","errorMessages","DEFAULT_ERROR_MESSAGES","error","requiredError","minCharError","maxCharError","performValidation","currValue","invalid","valid","deleteTag","tagPos","event","end","newTagsArr","slice","current","focus","canShowError","undefined","onChangeHandler","input","element","children","setTimeout","container","scrollLeft","offsetLeft","getBoundingClientRect","width","onEnterHandler","tag","preventDefault","newTag","type","onKeyDownHandler","code","onDeleteTagHandler","i","onContainerClickHandler","root","labelContainer","characterCounter","tagsList","singleLine","map","t","otherProps","gutters","listItemGutters","listItemRoot","tagSelected","chipRoot","tabIndex","tagInputContainerRoot","tagInputRoot","inputBorderContainer","tagInputBorderContainer","inputRootFocused","tagInputRootFocused","propTypes","PropTypes","string","shape","isRequired","array","node","bool","func","number","instanceOf","Object","styles"],"mappings":"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","sourcesContent":["import React, { useRef, useState, useCallback, useMemo, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport clsx from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport { withStyles } from \"@material-ui/core\";\nimport { setId, useControlled } from \"../utils\";\nimport {\n HvFormElement,\n HvListContainer,\n HvListItem,\n HvTag,\n HvInput,\n HvLabel,\n HvInfoMessage,\n HvCharCounter,\n HvWarningText,\n useUniqueId,\n} from \"..\";\nimport validationStates from \"../Forms/FormElement/validationStates\";\nimport { DEFAULT_ERROR_MESSAGES } from \"../BaseInput/validations\";\nimport styles from \"./styles\";\n\n/**\n * A tags input is a single or multiline control that allows the input of tags.\n */\nconst HvTagsInput = (props) => {\n const {\n classes,\n className,\n\n id,\n name,\n\n value: valueProp,\n defaultValue = [],\n\n readOnly = false,\n disabled = false,\n required = false,\n\n label: textAreaLabel,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n description,\n \"aria-describedby\": ariaDescribedBy,\n\n onChange,\n onAdd,\n onDelete,\n\n placeholder,\n\n hideCounter = false,\n middleCountLabel = \"/\",\n maxTagsQuantity,\n\n autoFocus = false,\n resizable = true,\n\n inputProps = {},\n countCharProps = {},\n\n multiline = false,\n\n status,\n statusMessage,\n\n validationMessages,\n\n ...others\n } = props;\n const elementId = useUniqueId(id, \"hvTagsInput\");\n\n const hasLabel = textAreaLabel != null;\n const hasDescription = description != null;\n\n const [value, setValue] = useControlled(valueProp, defaultValue);\n const [validationState, setValidationState] = useControlled(status, validationStates.standBy);\n const [validationMessage, setValidationMessage] = useControlled(statusMessage, \"\");\n\n const [tagInput, setTagInput] = useState(\"\");\n const [tagCursorPos, setTagCursorPos] = useState(value.length);\n const [stateValid, setStateValid] = useState(true);\n\n const inputRef = useRef();\n const containerRef = useRef();\n const resetInput = useRef(false);\n\n const isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;\n const hasCounter = maxTagsQuantity != null && !hideCounter;\n\n const isStateInvalid = useMemo(() => {\n return hasCounter && value.length > maxTagsQuantity;\n }, [hasCounter, maxTagsQuantity, value.length]);\n\n const errorMessages = useMemo(\n () => ({ ...DEFAULT_ERROR_MESSAGES, ...validationMessages }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n validationMessages?.error,\n validationMessages?.requiredError,\n validationMessages?.minCharError,\n validationMessages?.maxCharError,\n ]\n );\n\n const performValidation = useCallback(\n (currValue) => {\n if (maxTagsQuantity !== null && currValue.length > maxTagsQuantity) {\n setValidationState(validationStates.invalid);\n setValidationMessage(errorMessages.maxCharError);\n setStateValid(false);\n } else {\n setValidationState(validationStates.valid);\n setValidationMessage(\"\");\n setStateValid(true);\n }\n },\n [errorMessages.maxCharError, maxTagsQuantity, setValidationMessage, setValidationState]\n );\n\n /**\n * Deletes a Tag from the array of tags and sets the new position for the tag cursor.\n * Also executes the user provided onDelete and onChange events.\n *\n * @param {number} tagPos - the position at which to remove the tag\n * @param {Event} event - the event associated with the delete\n * @param {boolean} end - whether or not to set the cursor at the end of the array\n */\n const deleteTag = useCallback(\n (tagPos, event, end) => {\n const newTagsArr = [...value.slice(0, tagPos), ...value.slice(tagPos + 1)];\n setValue(newTagsArr);\n // eslint-disable-next-line no-nested-ternary\n setTagCursorPos(end ? newTagsArr.length : tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onDelete?.(event, value[tagPos], tagPos);\n onChange?.(event, newTagsArr);\n },\n [onChange, onDelete, performValidation, setValue, tagCursorPos, value]\n );\n\n const canShowError =\n (status !== undefined && status === \"invalid\" && statusMessage !== undefined) || !stateValid;\n\n /**\n * Handler for the `onChange` event on the tag input\n */\n const onChangeHandler = useCallback((event, input) => {\n setTagInput(input);\n }, []);\n\n useEffect(() => {\n if (!multiline) {\n const element = containerRef?.current?.children[tagCursorPos];\n // this setTimeout is a workaround for Firefox not properly dealing\n // with setting the scrollLeft value.\n setTimeout(() => {\n const container = containerRef.current;\n if (isNil(container)) return;\n container.scrollLeft = element\n ? element.offsetLeft -\n container.getBoundingClientRect().width / 2 +\n element.getBoundingClientRect().width / 2\n : 0;\n }, 50);\n\n element?.focus();\n }\n }, [multiline, tagCursorPos]);\n\n useEffect(() => {\n if (resetInput.current) {\n setTagInput(\"\");\n setTagCursorPos(value.length);\n resetInput.current = false;\n }\n }, [value]);\n\n /**\n * Handler for the `onEnter` event on the tag input\n */\n const onEnterHandler = useCallback(\n (event, tag) => {\n event.preventDefault();\n if (tag !== \"\") {\n const newTag = { label: tag, type: \"semantic\" };\n const newTagsArr = [...value, newTag];\n setValue(newTagsArr);\n resetInput.current = true;\n performValidation(newTagsArr);\n onAdd?.(event, newTag, newTagsArr.length - 1);\n onChange?.(event, newTagsArr);\n }\n },\n [onAdd, onChange, performValidation, setValue, value]\n );\n\n /**\n * Handler for the `onKeyDown` event on the list container.\n */\n const onKeyDownHandler = useCallback(\n (event) => {\n if (tagInput === \"\") {\n switch (event.code) {\n case \"ArrowLeft\":\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n break;\n case \"ArrowRight\":\n setTagCursorPos(tagCursorPos < value.length ? tagCursorPos + 1 : value.length);\n break;\n case \"Backspace\":\n if (isTagSelected) {\n deleteTag(tagCursorPos, event, false);\n } else {\n setTagCursorPos(value.length - 1);\n }\n break;\n case \"Delete\":\n if (isTagSelected) {\n deleteTag(tagCursorPos, event, false);\n }\n break;\n default:\n break;\n }\n }\n },\n [deleteTag, isTagSelected, tagCursorPos, tagInput, value.length]\n );\n\n /**\n * Handler for the `onDelete` event on the tag component\n */\n const onDeleteTagHandler = useCallback(\n (event, i) => {\n deleteTag(i, event, true);\n setValidationState(validationStates.standBy);\n },\n [deleteTag, setValidationState]\n );\n\n /**\n * Handler for the `onClick` event on the list container\n */\n const onContainerClickHandler = useCallback(() => {\n inputRef.current?.focus();\n setTagCursorPos(value.length);\n }, [value.length]);\n\n return (\n <HvFormElement\n id={id}\n name={name}\n disabled={disabled}\n readOnly={readOnly}\n status={validationState}\n required={required}\n className={clsx(classes.root, className, {\n [classes.disabled]: disabled,\n })}\n >\n {(hasLabel || hasDescription) && (\n <div className={classes.labelContainer}>\n {hasLabel && (\n <HvLabel\n className={classes.label}\n id={setId(id, \"label\")}\n htmlFor={setId(elementId, \"input\")}\n label={textAreaLabel}\n />\n )}\n\n {hasDescription && (\n <HvInfoMessage className={classes.description} id={setId(elementId, \"description\")}>\n {description}\n </HvInfoMessage>\n )}\n </div>\n )}\n\n {hasCounter && (\n <HvCharCounter\n id={setId(elementId, \"charCounter\")}\n className={classes.characterCounter}\n separator={middleCountLabel}\n currentCharQuantity={value.length}\n maxCharQuantity={maxTagsQuantity}\n {...countCharProps}\n />\n )}\n\n <HvListContainer\n className={clsx(\n classes.tagsList,\n canShowError && classes.error,\n resizable && multiline && classes.resizable,\n isStateInvalid && classes.invalid,\n !multiline && classes.singleLine\n )}\n onKeyDown={onKeyDownHandler}\n onClick={onContainerClickHandler}\n ref={containerRef}\n >\n {value &&\n value.map((t, i) => {\n const tag =\n typeof t === \"string\"\n ? {\n label: t,\n type: \"semantic\",\n }\n : t;\n const { label, type, ...otherProps } = tag;\n return (\n <HvListItem\n // eslint-disable-next-line react/no-array-index-key\n key={`${tag.label}-${i}`}\n tabIndex={-1}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n gutters: classes.listItemGutters,\n root: classes.listItemRoot,\n }}\n id={`tag-${i}`}\n >\n <HvTag\n label={label}\n className={clsx(i === tagCursorPos && classes.tagSelected)}\n classes={{\n chipRoot: classes.chipRoot,\n }}\n type={type}\n {...(!(readOnly || disabled || type === \"categorical\") && {\n onDelete: (event) => onDeleteTagHandler(event, i),\n })}\n deleteButtonProps={{\n tabIndex: -1,\n }}\n {...otherProps}\n />\n </HvListItem>\n );\n })}\n {!(disabled || readOnly) && (\n <HvListItem\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputContainerRoot,\n gutters: classes.listItemGutters,\n }}\n id={`tag-${value.length}`}\n >\n <HvInput\n value={tagInput}\n disableClear\n onChange={onChangeHandler}\n onEnter={onEnterHandler}\n placeholder={value.length === 0 ? placeholder : \"\"}\n autoFocus={autoFocus}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputRoot,\n input: classes.input,\n inputBorderContainer: classes.tagInputBorderContainer,\n inputRootFocused: classes.tagInputRootFocused,\n }}\n disabled={disabled}\n readOnly={readOnly || isTagSelected}\n inputProps={{\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\":\n ariaDescribedBy != null\n ? ariaDescribedBy\n : description && setId(elementId, \"description\"),\n\n ...inputProps,\n }}\n inputRef={inputRef}\n {...others}\n />\n </HvListItem>\n )}\n </HvListContainer>\n {canShowError && (\n <HvWarningText id={setId(elementId, \"error\")} disableBorder className={classes.error}>\n {validationMessage}\n </HvWarningText>\n )}\n </HvFormElement>\n );\n};\n\nHvTagsInput.propTypes = {\n /**\n * Class names to be applied.\n */\n className: PropTypes.string,\n /**\n * A Jss Object used to override or extend the component styles applied.\n */\n classes: PropTypes.PropTypes.shape({\n /**\n * Styles applied to the input element.\n */\n input: PropTypes.string,\n /**\n * Styles applied to the list item gutters.\n */\n listItemGutters: PropTypes.string,\n /**\n * Styles applied to the list item element.\n */\n listItemRoot: PropTypes.string,\n /**\n * Styles applied to the root container of the textarea.\n */\n root: PropTypes.string,\n /**\n *\n */\n chipRoot: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n disabled: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n resizable: PropTypes.string,\n /**\n * Style applied to the root when invalid.\n */\n invalid: PropTypes.string,\n /**\n * Styles applied to text area container that holds the label, description and counter.\n */\n labelContainer: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n label: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n description: PropTypes.string,\n /**\n * Style applied on the character counter.\n */\n characterCounter: PropTypes.string,\n /**\n * Styles applied to the tags list container element.\n */\n tagsList: PropTypes.string,\n /**\n * Styles applied to the tag input container element.\n */\n tagInputContainerRoot: PropTypes.string,\n /**\n * Styles applied to the tag input element.\n */\n tagInputRoot: PropTypes.string,\n /**\n * Styles applied to a tag element when selected\n */\n tagSelected: PropTypes.string,\n /**\n * Styles applied to the input element border.\n */\n tagInputBorderContainer: PropTypes.string,\n /**\n * Styles applied to the input element when focused.\n */\n tagInputRootFocused: PropTypes.string,\n /**\n * Styles applied to the container when in single line mode.\n */\n singleLine: PropTypes.string,\n /**\n * Styles applied to the tags list when an error occurred.\n */\n error: PropTypes.string,\n }).isRequired,\n /**\n * Id to be applied to the form element root node.\n */\n id: PropTypes.string,\n /**\n * The form element name.\n */\n name: PropTypes.string,\n /**\n * The value of the form element.\n */\n value: PropTypes.array,\n /**\n * When uncontrolled, defines the initial input value.\n */\n defaultValue: PropTypes.array,\n /**\n * The label of the form element.\n *\n * The form element must be labeled for accessibility reasons.\n * If not provided, an aria-label or aria-labelledby must be inputted via inputProps.\n */\n label: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-label\": PropTypes.string,\n /**\n * @ignore\n */\n \"aria-labelledby\": PropTypes.string,\n /**\n * Provide additional descriptive text for the form element.\n */\n description: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-describedby\": PropTypes.string,\n /**\n * Indicates that the form element is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * Indicates that the form element is not editable.\n */\n readOnly: PropTypes.bool,\n /**\n * Indicates that the form element is required.\n */\n required: PropTypes.bool,\n /**\n * The function that will be executed onChange.\n */\n onChange: PropTypes.func,\n /**\n * The function that will be executed when a tag is deleted.\n */\n onDelete: PropTypes.func,\n /**\n * The function that will be executed when a tag is added.\n */\n onAdd: PropTypes.func,\n /**\n * The placeholder value of the input.\n */\n placeholder: PropTypes.string,\n /**\n * If `true` the character counter isn't shown even if maxTagsQuantity is set.\n */\n hideCounter: PropTypes.bool,\n /**\n * Text between the current char counter and max value.\n */\n middleCountLabel: PropTypes.string,\n /**\n * The maximum allowed length of the characters, if this value is null no check\n * will be performed.\n */\n maxTagsQuantity: PropTypes.number,\n /**\n * Attributes applied to the input element.\n */\n inputProps: PropTypes.instanceOf(Object),\n /**\n * If `true` it should autofocus.\n */\n autoFocus: PropTypes.bool,\n /**\n * If `true` the component is resizable.\n */\n resizable: PropTypes.bool,\n /**\n * Props passed to the HvCharCount component.\n */\n countCharProps: PropTypes.instanceOf(Object),\n /**\n * If `true` the component is in multiline mode.\n */\n multiline: PropTypes.bool,\n /**\n * The status of the form element.\n */\n status: PropTypes.string,\n /**\n * The error message to show when `status` is \"invalid\".\n */\n statusMessage: PropTypes.string,\n\n /**\n * An Object containing the various texts associated with the input.\n */\n validationMessages: PropTypes.shape({\n /**\n * The value when a validation fails.\n */\n error: PropTypes.string,\n /**\n * The message that appears when there are too many characters.\n */\n maxCharError: PropTypes.string,\n /**\n * The message that appears when there are too few characters.\n */\n minCharError: PropTypes.string,\n /**\n * The message that appears when the input is empty and required.\n */\n requiredError: PropTypes.string,\n }),\n};\n\nexport default withStyles(styles, { name: \"HvTagsInput\" })(HvTagsInput);\n"],"file":"TagsInput.js"}
|
|
@@ -18,7 +18,7 @@ export type HvTagsInputClassKey =
|
|
|
18
18
|
| "error";
|
|
19
19
|
|
|
20
20
|
export interface HvTagsInputProps
|
|
21
|
-
extends StandardProps<HvInputProps, HvTagsInputClassKey, "onChange"
|
|
21
|
+
extends StandardProps<HvInputProps, HvTagsInputClassKey, "onChange"> {
|
|
22
22
|
/**
|
|
23
23
|
* The label of the form element.
|
|
24
24
|
*
|
|
@@ -88,16 +88,6 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
88
88
|
value = _useControlled2[0],
|
|
89
89
|
setValue = _useControlled2[1];
|
|
90
90
|
|
|
91
|
-
var _useState = useState(""),
|
|
92
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
93
|
-
tagInput = _useState2[0],
|
|
94
|
-
setTagInput = _useState2[1];
|
|
95
|
-
|
|
96
|
-
var _useState3 = useState(value.length),
|
|
97
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
98
|
-
tagCursorPos = _useState4[0],
|
|
99
|
-
setTagCursorPos = _useState4[1];
|
|
100
|
-
|
|
101
91
|
var _useControlled3 = useControlled(status, validationStates.standBy),
|
|
102
92
|
_useControlled4 = _slicedToArray(_useControlled3, 2),
|
|
103
93
|
validationState = _useControlled4[0],
|
|
@@ -108,18 +98,29 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
108
98
|
validationMessage = _useControlled6[0],
|
|
109
99
|
setValidationMessage = _useControlled6[1];
|
|
110
100
|
|
|
101
|
+
var _useState = useState(""),
|
|
102
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
103
|
+
tagInput = _useState2[0],
|
|
104
|
+
setTagInput = _useState2[1];
|
|
105
|
+
|
|
106
|
+
var _useState3 = useState(value.length),
|
|
107
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
108
|
+
tagCursorPos = _useState4[0],
|
|
109
|
+
setTagCursorPos = _useState4[1];
|
|
110
|
+
|
|
111
111
|
var _useState5 = useState(true),
|
|
112
112
|
_useState6 = _slicedToArray(_useState5, 2),
|
|
113
113
|
stateValid = _useState6[0],
|
|
114
114
|
setStateValid = _useState6[1];
|
|
115
115
|
|
|
116
|
+
var inputRef = useRef();
|
|
117
|
+
var containerRef = useRef();
|
|
118
|
+
var resetInput = useRef(false);
|
|
116
119
|
var isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;
|
|
117
120
|
var hasCounter = maxTagsQuantity != null && !hideCounter;
|
|
118
121
|
var isStateInvalid = useMemo(function () {
|
|
119
122
|
return hasCounter && value.length > maxTagsQuantity;
|
|
120
123
|
}, [hasCounter, maxTagsQuantity, value.length]);
|
|
121
|
-
var inputRef = useRef();
|
|
122
|
-
var containerRef = useRef();
|
|
123
124
|
var errorMessages = useMemo(function () {
|
|
124
125
|
return _objectSpread(_objectSpread({}, DEFAULT_ERROR_MESSAGES), validationMessages);
|
|
125
126
|
}, // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
@@ -135,6 +136,27 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
135
136
|
setStateValid(true);
|
|
136
137
|
}
|
|
137
138
|
}, [errorMessages.maxCharError, maxTagsQuantity, setValidationMessage, setValidationState]);
|
|
139
|
+
/**
|
|
140
|
+
* Deletes a Tag from the array of tags and sets the new position for the tag cursor.
|
|
141
|
+
* Also executes the user provided onDelete and onChange events.
|
|
142
|
+
*
|
|
143
|
+
* @param {number} tagPos - the position at which to remove the tag
|
|
144
|
+
* @param {Event} event - the event associated with the delete
|
|
145
|
+
* @param {boolean} end - whether or not to set the cursor at the end of the array
|
|
146
|
+
*/
|
|
147
|
+
|
|
148
|
+
var deleteTag = useCallback(function (tagPos, event, end) {
|
|
149
|
+
var _inputRef$current;
|
|
150
|
+
|
|
151
|
+
var newTagsArr = [].concat(_toConsumableArray(value.slice(0, tagPos)), _toConsumableArray(value.slice(tagPos + 1)));
|
|
152
|
+
setValue(newTagsArr); // eslint-disable-next-line no-nested-ternary
|
|
153
|
+
|
|
154
|
+
setTagCursorPos(end ? newTagsArr.length : tagCursorPos > 0 ? tagCursorPos - 1 : 0);
|
|
155
|
+
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
|
156
|
+
performValidation(newTagsArr);
|
|
157
|
+
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[tagPos], tagPos);
|
|
158
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
159
|
+
}, [onChange, onDelete, performValidation, setValue, tagCursorPos, value]);
|
|
138
160
|
var canShowError = status !== undefined && status === "invalid" && statusMessage !== undefined || !stateValid;
|
|
139
161
|
/**
|
|
140
162
|
* Handler for the `onChange` event on the tag input
|
|
@@ -144,20 +166,10 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
144
166
|
setTagInput(input);
|
|
145
167
|
}, []);
|
|
146
168
|
useEffect(function () {
|
|
147
|
-
// keep scroll focused on the input when the value changes
|
|
148
169
|
if (!multiline) {
|
|
149
|
-
var _containerRef$current
|
|
170
|
+
var _containerRef$current;
|
|
150
171
|
|
|
151
|
-
var element = containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.children[
|
|
152
|
-
var offset = element === null || element === void 0 ? void 0 : element.offsetWidth;
|
|
153
|
-
containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : (_containerRef$current3 = _containerRef$current2.scrollBy) === null || _containerRef$current3 === void 0 ? void 0 : _containerRef$current3.call(_containerRef$current2, offset !== null && offset !== void 0 ? offset : 0, 0);
|
|
154
|
-
}
|
|
155
|
-
}, [multiline, value]);
|
|
156
|
-
useEffect(function () {
|
|
157
|
-
if (!multiline) {
|
|
158
|
-
var _containerRef$current4;
|
|
159
|
-
|
|
160
|
-
var element = containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current4 = containerRef.current) === null || _containerRef$current4 === void 0 ? void 0 : _containerRef$current4.children[tagCursorPos]; // this setTimeout is a workaround for Firefox not properly dealing
|
|
172
|
+
var element = containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.children[tagCursorPos]; // this setTimeout is a workaround for Firefox not properly dealing
|
|
161
173
|
// with setting the scrollLeft value.
|
|
162
174
|
|
|
163
175
|
setTimeout(function () {
|
|
@@ -168,6 +180,13 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
168
180
|
element === null || element === void 0 ? void 0 : element.focus();
|
|
169
181
|
}
|
|
170
182
|
}, [multiline, tagCursorPos]);
|
|
183
|
+
useEffect(function () {
|
|
184
|
+
if (resetInput.current) {
|
|
185
|
+
setTagInput("");
|
|
186
|
+
setTagCursorPos(value.length);
|
|
187
|
+
resetInput.current = false;
|
|
188
|
+
}
|
|
189
|
+
}, [value]);
|
|
171
190
|
/**
|
|
172
191
|
* Handler for the `onEnter` event on the tag input
|
|
173
192
|
*/
|
|
@@ -182,8 +201,7 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
182
201
|
};
|
|
183
202
|
var newTagsArr = [].concat(_toConsumableArray(value), [newTag]);
|
|
184
203
|
setValue(newTagsArr);
|
|
185
|
-
|
|
186
|
-
setTagCursorPos(newTagsArr.length);
|
|
204
|
+
resetInput.current = true;
|
|
187
205
|
performValidation(newTagsArr);
|
|
188
206
|
onAdd === null || onAdd === void 0 ? void 0 : onAdd(event, newTag, newTagsArr.length - 1);
|
|
189
207
|
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
@@ -206,15 +224,7 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
206
224
|
|
|
207
225
|
case "Backspace":
|
|
208
226
|
if (isTagSelected) {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[tagCursorPos], tagCursorPos);
|
|
212
|
-
var newTagsArr = [].concat(_toConsumableArray(value.slice(0, tagCursorPos)), _toConsumableArray(value.slice(tagCursorPos + 1)));
|
|
213
|
-
setValue(newTagsArr);
|
|
214
|
-
setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);
|
|
215
|
-
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
|
216
|
-
performValidation(newTagsArr);
|
|
217
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
227
|
+
deleteTag(tagCursorPos, event, false);
|
|
218
228
|
} else {
|
|
219
229
|
setTagCursorPos(value.length - 1);
|
|
220
230
|
}
|
|
@@ -223,17 +233,7 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
223
233
|
|
|
224
234
|
case "Delete":
|
|
225
235
|
if (isTagSelected) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[tagCursorPos], tagCursorPos);
|
|
229
|
-
|
|
230
|
-
var _newTagsArr = [].concat(_toConsumableArray(value.slice(0, tagCursorPos)), _toConsumableArray(value.slice(tagCursorPos + 1)));
|
|
231
|
-
|
|
232
|
-
setValue(_newTagsArr);
|
|
233
|
-
setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);
|
|
234
|
-
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
|
|
235
|
-
performValidation(_newTagsArr);
|
|
236
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(event, _newTagsArr);
|
|
236
|
+
deleteTag(tagCursorPos, event, false);
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
break;
|
|
@@ -242,31 +242,23 @@ var HvTagsInput = function HvTagsInput(props) {
|
|
|
242
242
|
break;
|
|
243
243
|
}
|
|
244
244
|
}
|
|
245
|
-
}, [
|
|
245
|
+
}, [deleteTag, isTagSelected, tagCursorPos, tagInput, value.length]);
|
|
246
246
|
/**
|
|
247
247
|
* Handler for the `onDelete` event on the tag component
|
|
248
248
|
*/
|
|
249
249
|
|
|
250
250
|
var onDeleteTagHandler = useCallback(function (event, i) {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[i], i);
|
|
254
|
-
var newTagsArr = [].concat(_toConsumableArray(value.slice(0, i)), _toConsumableArray(value.slice(i + 1)));
|
|
251
|
+
deleteTag(i, event, true);
|
|
255
252
|
setValidationState(validationStates.standBy);
|
|
256
|
-
|
|
257
|
-
setTagCursorPos(newTagsArr.length);
|
|
258
|
-
(_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 ? void 0 : _inputRef$current3.focus();
|
|
259
|
-
performValidation(newTagsArr);
|
|
260
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
261
|
-
}, [onDelete, value, setValidationState, setValue, performValidation, onChange]);
|
|
253
|
+
}, [deleteTag, setValidationState]);
|
|
262
254
|
/**
|
|
263
255
|
* Handler for the `onClick` event on the list container
|
|
264
256
|
*/
|
|
265
257
|
|
|
266
258
|
var onContainerClickHandler = useCallback(function () {
|
|
267
|
-
var _inputRef$
|
|
259
|
+
var _inputRef$current2;
|
|
268
260
|
|
|
269
|
-
(_inputRef$
|
|
261
|
+
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
|
|
270
262
|
setTagCursorPos(value.length);
|
|
271
263
|
}, [value.length]);
|
|
272
264
|
return /*#__PURE__*/React.createElement(HvFormElement, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/TagsInput/TagsInput.js"],"names":["React","useRef","useState","useCallback","useMemo","useEffect","PropTypes","clsx","isNil","withStyles","setId","useControlled","HvFormElement","HvListContainer","HvListItem","HvTag","HvInput","HvLabel","HvInfoMessage","HvCharCounter","HvWarningText","useUniqueId","validationStates","DEFAULT_ERROR_MESSAGES","styles","HvTagsInput","props","classes","className","id","name","valueProp","value","defaultValue","readOnly","disabled","required","textAreaLabel","label","ariaLabel","ariaLabelledBy","description","ariaDescribedBy","onChange","onAdd","onDelete","placeholder","hideCounter","middleCountLabel","maxTagsQuantity","autoFocus","resizable","inputProps","countCharProps","multiline","status","statusMessage","validationMessages","others","elementId","hasLabel","hasDescription","setValue","tagInput","setTagInput","length","tagCursorPos","setTagCursorPos","standBy","validationState","setValidationState","validationMessage","setValidationMessage","stateValid","setStateValid","isTagSelected","hasCounter","isStateInvalid","inputRef","containerRef","errorMessages","error","requiredError","minCharError","maxCharError","performValidation","currValue","invalid","valid","canShowError","undefined","onChangeHandler","event","input","element","current","children","offset","offsetWidth","scrollBy","setTimeout","container","scrollLeft","offsetLeft","getBoundingClientRect","width","focus","onEnterHandler","tag","preventDefault","newTag","type","newTagsArr","onKeyDownHandler","code","slice","onDeleteTagHandler","i","onContainerClickHandler","root","labelContainer","characterCounter","tagsList","singleLine","map","t","otherProps","gutters","listItemGutters","listItemRoot","tagSelected","chipRoot","tabIndex","tagInputContainerRoot","tagInputRoot","inputBorderContainer","tagInputBorderContainer","inputRootFocused","tagInputRootFocused","propTypes","string","shape","isRequired","array","node","bool","func","number","instanceOf","Object"],"mappings":"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","sourcesContent":["import React, { useRef, useState, useCallback, useMemo, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport clsx from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport { withStyles } from \"@material-ui/core\";\nimport { setId, useControlled } from \"../utils\";\nimport {\n HvFormElement,\n HvListContainer,\n HvListItem,\n HvTag,\n HvInput,\n HvLabel,\n HvInfoMessage,\n HvCharCounter,\n HvWarningText,\n useUniqueId,\n} from \"..\";\nimport validationStates from \"../Forms/FormElement/validationStates\";\nimport { DEFAULT_ERROR_MESSAGES } from \"../BaseInput/validations\";\nimport styles from \"./styles\";\n\n/**\n * A tags input is a single or multiline control that allows the input of tags.\n */\nconst HvTagsInput = (props) => {\n const {\n classes,\n className,\n\n id,\n name,\n\n value: valueProp,\n defaultValue = [],\n\n readOnly = false,\n disabled = false,\n required = false,\n\n label: textAreaLabel,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n description,\n \"aria-describedby\": ariaDescribedBy,\n\n onChange,\n onAdd,\n onDelete,\n\n placeholder,\n\n hideCounter = false,\n middleCountLabel = \"/\",\n maxTagsQuantity,\n\n autoFocus = false,\n resizable = true,\n\n inputProps = {},\n countCharProps = {},\n\n multiline = false,\n\n status,\n statusMessage,\n\n validationMessages,\n\n ...others\n } = props;\n const elementId = useUniqueId(id, \"hvTagsInput\");\n\n const hasLabel = textAreaLabel != null;\n const hasDescription = description != null;\n\n const [value, setValue] = useControlled(valueProp, defaultValue);\n\n const [tagInput, setTagInput] = useState(\"\");\n const [tagCursorPos, setTagCursorPos] = useState(value.length);\n\n const [validationState, setValidationState] = useControlled(status, validationStates.standBy);\n const [validationMessage, setValidationMessage] = useControlled(statusMessage, \"\");\n\n const [stateValid, setStateValid] = useState(true);\n\n const isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;\n\n const hasCounter = maxTagsQuantity != null && !hideCounter;\n\n const isStateInvalid = useMemo(() => {\n return hasCounter && value.length > maxTagsQuantity;\n }, [hasCounter, maxTagsQuantity, value.length]);\n\n const inputRef = useRef();\n const containerRef = useRef();\n\n const errorMessages = useMemo(\n () => ({ ...DEFAULT_ERROR_MESSAGES, ...validationMessages }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n validationMessages?.error,\n validationMessages?.requiredError,\n validationMessages?.minCharError,\n validationMessages?.maxCharError,\n ]\n );\n\n const performValidation = useCallback(\n (currValue) => {\n if (maxTagsQuantity !== null && currValue.length > maxTagsQuantity) {\n setValidationState(validationStates.invalid);\n setValidationMessage(errorMessages.maxCharError);\n setStateValid(false);\n } else {\n setValidationState(validationStates.valid);\n setValidationMessage(\"\");\n setStateValid(true);\n }\n },\n [errorMessages.maxCharError, maxTagsQuantity, setValidationMessage, setValidationState]\n );\n\n const canShowError =\n (status !== undefined && status === \"invalid\" && statusMessage !== undefined) || !stateValid;\n\n /**\n * Handler for the `onChange` event on the tag input\n */\n const onChangeHandler = useCallback((event, input) => {\n setTagInput(input);\n }, []);\n\n useEffect(() => {\n // keep scroll focused on the input when the value changes\n if (!multiline) {\n const element = containerRef?.current?.children[value.length];\n const offset = element?.offsetWidth;\n containerRef?.current?.scrollBy?.(offset ?? 0, 0);\n }\n }, [multiline, value]);\n\n useEffect(() => {\n if (!multiline) {\n const element = containerRef?.current?.children[tagCursorPos];\n // this setTimeout is a workaround for Firefox not properly dealing\n // with setting the scrollLeft value.\n setTimeout(() => {\n const container = containerRef.current;\n if (isNil(container)) return;\n container.scrollLeft = element\n ? element.offsetLeft -\n container.getBoundingClientRect().width / 2 +\n element.getBoundingClientRect().width / 2\n : 0;\n }, 50);\n\n element?.focus();\n }\n }, [multiline, tagCursorPos]);\n\n /**\n * Handler for the `onEnter` event on the tag input\n */\n const onEnterHandler = useCallback(\n (event, tag) => {\n event.preventDefault();\n if (tag !== \"\") {\n const newTag = { label: tag, type: \"semantic\" };\n const newTagsArr = [...value, newTag];\n setValue(newTagsArr);\n setTagInput(\"\");\n setTagCursorPos(newTagsArr.length);\n performValidation(newTagsArr);\n onAdd?.(event, newTag, newTagsArr.length - 1);\n onChange?.(event, newTagsArr);\n }\n },\n [onAdd, onChange, performValidation, setValue, value]\n );\n\n /**\n * Handler for the `onKeyDown` event on the list container.\n */\n const onKeyDownHandler = useCallback(\n (event) => {\n if (tagInput === \"\") {\n switch (event.code) {\n case \"ArrowLeft\":\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n break;\n case \"ArrowRight\":\n setTagCursorPos(tagCursorPos < value.length ? tagCursorPos + 1 : value.length);\n break;\n case \"Backspace\":\n if (isTagSelected) {\n onDelete?.(event, value[tagCursorPos], tagCursorPos);\n const newTagsArr = [\n ...value.slice(0, tagCursorPos),\n ...value.slice(tagCursorPos + 1),\n ];\n setValue(newTagsArr);\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onChange?.(event, newTagsArr);\n } else {\n setTagCursorPos(value.length - 1);\n }\n break;\n case \"Delete\":\n if (isTagSelected) {\n onDelete?.(event, value[tagCursorPos], tagCursorPos);\n const newTagsArr = [\n ...value.slice(0, tagCursorPos),\n ...value.slice(tagCursorPos + 1),\n ];\n setValue(newTagsArr);\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onChange?.(event, newTagsArr);\n }\n break;\n default:\n break;\n }\n }\n },\n [isTagSelected, onChange, onDelete, performValidation, setValue, tagCursorPos, tagInput, value]\n );\n\n /**\n * Handler for the `onDelete` event on the tag component\n */\n const onDeleteTagHandler = useCallback(\n (event, i) => {\n onDelete?.(event, value[i], i);\n const newTagsArr = [...value.slice(0, i), ...value.slice(i + 1)];\n setValidationState(validationStates.standBy);\n setValue(newTagsArr);\n setTagCursorPos(newTagsArr.length);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onChange?.(event, newTagsArr);\n },\n [onDelete, value, setValidationState, setValue, performValidation, onChange]\n );\n\n /**\n * Handler for the `onClick` event on the list container\n */\n const onContainerClickHandler = useCallback(() => {\n inputRef.current?.focus();\n setTagCursorPos(value.length);\n }, [value.length]);\n\n return (\n <HvFormElement\n id={id}\n name={name}\n disabled={disabled}\n readOnly={readOnly}\n status={validationState}\n required={required}\n className={clsx(classes.root, className, {\n [classes.disabled]: disabled,\n })}\n >\n {(hasLabel || hasDescription) && (\n <div className={classes.labelContainer}>\n {hasLabel && (\n <HvLabel\n className={classes.label}\n id={setId(id, \"label\")}\n htmlFor={setId(elementId, \"input\")}\n label={textAreaLabel}\n />\n )}\n\n {hasDescription && (\n <HvInfoMessage className={classes.description} id={setId(elementId, \"description\")}>\n {description}\n </HvInfoMessage>\n )}\n </div>\n )}\n\n {hasCounter && (\n <HvCharCounter\n id={setId(elementId, \"charCounter\")}\n className={classes.characterCounter}\n separator={middleCountLabel}\n currentCharQuantity={value.length}\n maxCharQuantity={maxTagsQuantity}\n {...countCharProps}\n />\n )}\n\n <HvListContainer\n className={clsx(\n classes.tagsList,\n canShowError && classes.error,\n resizable && multiline && classes.resizable,\n isStateInvalid && classes.invalid,\n !multiline && classes.singleLine\n )}\n onKeyDown={onKeyDownHandler}\n onClick={onContainerClickHandler}\n ref={containerRef}\n >\n {value &&\n value.map((t, i) => {\n const tag =\n typeof t === \"string\"\n ? {\n label: t,\n type: \"semantic\",\n }\n : t;\n const { label, type, ...otherProps } = tag;\n return (\n <HvListItem\n // eslint-disable-next-line react/no-array-index-key\n key={`${tag.label}-${i}`}\n tabIndex={-1}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n gutters: classes.listItemGutters,\n root: classes.listItemRoot,\n }}\n id={`tag-${i}`}\n >\n <HvTag\n label={label}\n className={clsx(i === tagCursorPos && classes.tagSelected)}\n classes={{\n chipRoot: classes.chipRoot,\n }}\n type={type}\n {...(!(readOnly || disabled || type === \"categorical\") && {\n onDelete: (event) => onDeleteTagHandler(event, i),\n })}\n deleteButtonProps={{\n tabIndex: -1,\n }}\n {...otherProps}\n />\n </HvListItem>\n );\n })}\n {!(disabled || readOnly) && (\n <HvListItem\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputContainerRoot,\n gutters: classes.listItemGutters,\n }}\n id={`tag-${value.length}`}\n >\n <HvInput\n value={tagInput}\n disableClear\n onChange={onChangeHandler}\n onEnter={onEnterHandler}\n placeholder={value.length === 0 ? placeholder : \"\"}\n autoFocus={autoFocus}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputRoot,\n input: classes.input,\n inputBorderContainer: classes.tagInputBorderContainer,\n inputRootFocused: classes.tagInputRootFocused,\n }}\n disabled={disabled}\n readOnly={readOnly || isTagSelected}\n inputProps={{\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\":\n ariaDescribedBy != null\n ? ariaDescribedBy\n : description && setId(elementId, \"description\"),\n\n ...inputProps,\n }}\n inputRef={inputRef}\n {...others}\n />\n </HvListItem>\n )}\n </HvListContainer>\n {canShowError && (\n <HvWarningText id={setId(elementId, \"error\")} disableBorder className={classes.error}>\n {validationMessage}\n </HvWarningText>\n )}\n </HvFormElement>\n );\n};\n\nHvTagsInput.propTypes = {\n /**\n * Class names to be applied.\n */\n className: PropTypes.string,\n /**\n * A Jss Object used to override or extend the component styles applied.\n */\n classes: PropTypes.PropTypes.shape({\n /**\n * Styles applied to the input element.\n */\n input: PropTypes.string,\n /**\n * Styles applied to the list item gutters.\n */\n listItemGutters: PropTypes.string,\n /**\n * Styles applied to the list item element.\n */\n listItemRoot: PropTypes.string,\n /**\n * Styles applied to the root container of the textarea.\n */\n root: PropTypes.string,\n /**\n *\n */\n chipRoot: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n disabled: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n resizable: PropTypes.string,\n /**\n * Style applied to the root when invalid.\n */\n invalid: PropTypes.string,\n /**\n * Styles applied to text area container that holds the label, description and counter.\n */\n labelContainer: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n label: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n description: PropTypes.string,\n /**\n * Style applied on the character counter.\n */\n characterCounter: PropTypes.string,\n /**\n * Styles applied to the tags list container element.\n */\n tagsList: PropTypes.string,\n /**\n * Styles applied to the tag input container element.\n */\n tagInputContainerRoot: PropTypes.string,\n /**\n * Styles applied to the tag input element.\n */\n tagInputRoot: PropTypes.string,\n /**\n * Styles applied to a tag element when selected\n */\n tagSelected: PropTypes.string,\n /**\n * Styles applied to the input element border.\n */\n tagInputBorderContainer: PropTypes.string,\n /**\n * Styles applied to the input element when focused.\n */\n tagInputRootFocused: PropTypes.string,\n /**\n * Styles applied to the container when in single line mode.\n */\n singleLine: PropTypes.string,\n /**\n * Styles applied to the tags list when an error occurred.\n */\n error: PropTypes.string,\n }).isRequired,\n /**\n * Id to be applied to the form element root node.\n */\n id: PropTypes.string,\n /**\n * The form element name.\n */\n name: PropTypes.string,\n /**\n * The value of the form element.\n */\n value: PropTypes.array,\n /**\n * When uncontrolled, defines the initial input value.\n */\n defaultValue: PropTypes.array,\n /**\n * The label of the form element.\n *\n * The form element must be labeled for accessibility reasons.\n * If not provided, an aria-label or aria-labelledby must be inputted via inputProps.\n */\n label: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-label\": PropTypes.string,\n /**\n * @ignore\n */\n \"aria-labelledby\": PropTypes.string,\n /**\n * Provide additional descriptive text for the form element.\n */\n description: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-describedby\": PropTypes.string,\n /**\n * Indicates that the form element is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * Indicates that the form element is not editable.\n */\n readOnly: PropTypes.bool,\n /**\n * Indicates that the form element is required.\n */\n required: PropTypes.bool,\n /**\n * The function that will be executed onChange.\n */\n onChange: PropTypes.func,\n /**\n * The function that will be executed when a tag is deleted.\n */\n onDelete: PropTypes.func,\n /**\n * The function that will be executed when a tag is added.\n */\n onAdd: PropTypes.func,\n /**\n * The placeholder value of the input.\n */\n placeholder: PropTypes.string,\n /**\n * If `true` the character counter isn't shown even if maxTagsQuantity is set.\n */\n hideCounter: PropTypes.bool,\n /**\n * Text between the current char counter and max value.\n */\n middleCountLabel: PropTypes.string,\n /**\n * The maximum allowed length of the characters, if this value is null no check\n * will be performed.\n */\n maxTagsQuantity: PropTypes.number,\n /**\n * Attributes applied to the input element.\n */\n inputProps: PropTypes.instanceOf(Object),\n /**\n * If `true` it should autofocus.\n */\n autoFocus: PropTypes.bool,\n /**\n * If `true` the component is resizable.\n */\n resizable: PropTypes.bool,\n /**\n * Props passed to the HvCharCount component.\n */\n countCharProps: PropTypes.instanceOf(Object),\n /**\n * If `true` the component is in multiline mode.\n */\n multiline: PropTypes.bool,\n /**\n * The status of the form element.\n */\n status: PropTypes.string,\n /**\n * The error message to show when `status` is \"invalid\".\n */\n statusMessage: PropTypes.string,\n\n /**\n * An Object containing the various texts associated with the input.\n */\n validationMessages: PropTypes.shape({\n /**\n * The value when a validation fails.\n */\n error: PropTypes.string,\n /**\n * The message that appears when there are too many characters.\n */\n maxCharError: PropTypes.string,\n /**\n * The message that appears when there are too few characters.\n */\n minCharError: PropTypes.string,\n /**\n * The message that appears when the input is empty and required.\n */\n requiredError: PropTypes.string,\n }),\n};\n\nexport default withStyles(styles, { name: \"HvTagsInput\" })(HvTagsInput);\n"],"file":"TagsInput.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/TagsInput/TagsInput.js"],"names":["React","useRef","useState","useCallback","useMemo","useEffect","PropTypes","clsx","isNil","withStyles","setId","useControlled","HvFormElement","HvListContainer","HvListItem","HvTag","HvInput","HvLabel","HvInfoMessage","HvCharCounter","HvWarningText","useUniqueId","validationStates","DEFAULT_ERROR_MESSAGES","styles","HvTagsInput","props","classes","className","id","name","valueProp","value","defaultValue","readOnly","disabled","required","textAreaLabel","label","ariaLabel","ariaLabelledBy","description","ariaDescribedBy","onChange","onAdd","onDelete","placeholder","hideCounter","middleCountLabel","maxTagsQuantity","autoFocus","resizable","inputProps","countCharProps","multiline","status","statusMessage","validationMessages","others","elementId","hasLabel","hasDescription","setValue","standBy","validationState","setValidationState","validationMessage","setValidationMessage","tagInput","setTagInput","length","tagCursorPos","setTagCursorPos","stateValid","setStateValid","inputRef","containerRef","resetInput","isTagSelected","hasCounter","isStateInvalid","errorMessages","error","requiredError","minCharError","maxCharError","performValidation","currValue","invalid","valid","deleteTag","tagPos","event","end","newTagsArr","slice","current","focus","canShowError","undefined","onChangeHandler","input","element","children","setTimeout","container","scrollLeft","offsetLeft","getBoundingClientRect","width","onEnterHandler","tag","preventDefault","newTag","type","onKeyDownHandler","code","onDeleteTagHandler","i","onContainerClickHandler","root","labelContainer","characterCounter","tagsList","singleLine","map","t","otherProps","gutters","listItemGutters","listItemRoot","tagSelected","chipRoot","tabIndex","tagInputContainerRoot","tagInputRoot","inputBorderContainer","tagInputBorderContainer","inputRootFocused","tagInputRootFocused","propTypes","string","shape","isRequired","array","node","bool","func","number","instanceOf","Object"],"mappings":"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","sourcesContent":["import React, { useRef, useState, useCallback, useMemo, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport clsx from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport { withStyles } from \"@material-ui/core\";\nimport { setId, useControlled } from \"../utils\";\nimport {\n HvFormElement,\n HvListContainer,\n HvListItem,\n HvTag,\n HvInput,\n HvLabel,\n HvInfoMessage,\n HvCharCounter,\n HvWarningText,\n useUniqueId,\n} from \"..\";\nimport validationStates from \"../Forms/FormElement/validationStates\";\nimport { DEFAULT_ERROR_MESSAGES } from \"../BaseInput/validations\";\nimport styles from \"./styles\";\n\n/**\n * A tags input is a single or multiline control that allows the input of tags.\n */\nconst HvTagsInput = (props) => {\n const {\n classes,\n className,\n\n id,\n name,\n\n value: valueProp,\n defaultValue = [],\n\n readOnly = false,\n disabled = false,\n required = false,\n\n label: textAreaLabel,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n description,\n \"aria-describedby\": ariaDescribedBy,\n\n onChange,\n onAdd,\n onDelete,\n\n placeholder,\n\n hideCounter = false,\n middleCountLabel = \"/\",\n maxTagsQuantity,\n\n autoFocus = false,\n resizable = true,\n\n inputProps = {},\n countCharProps = {},\n\n multiline = false,\n\n status,\n statusMessage,\n\n validationMessages,\n\n ...others\n } = props;\n const elementId = useUniqueId(id, \"hvTagsInput\");\n\n const hasLabel = textAreaLabel != null;\n const hasDescription = description != null;\n\n const [value, setValue] = useControlled(valueProp, defaultValue);\n const [validationState, setValidationState] = useControlled(status, validationStates.standBy);\n const [validationMessage, setValidationMessage] = useControlled(statusMessage, \"\");\n\n const [tagInput, setTagInput] = useState(\"\");\n const [tagCursorPos, setTagCursorPos] = useState(value.length);\n const [stateValid, setStateValid] = useState(true);\n\n const inputRef = useRef();\n const containerRef = useRef();\n const resetInput = useRef(false);\n\n const isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;\n const hasCounter = maxTagsQuantity != null && !hideCounter;\n\n const isStateInvalid = useMemo(() => {\n return hasCounter && value.length > maxTagsQuantity;\n }, [hasCounter, maxTagsQuantity, value.length]);\n\n const errorMessages = useMemo(\n () => ({ ...DEFAULT_ERROR_MESSAGES, ...validationMessages }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n validationMessages?.error,\n validationMessages?.requiredError,\n validationMessages?.minCharError,\n validationMessages?.maxCharError,\n ]\n );\n\n const performValidation = useCallback(\n (currValue) => {\n if (maxTagsQuantity !== null && currValue.length > maxTagsQuantity) {\n setValidationState(validationStates.invalid);\n setValidationMessage(errorMessages.maxCharError);\n setStateValid(false);\n } else {\n setValidationState(validationStates.valid);\n setValidationMessage(\"\");\n setStateValid(true);\n }\n },\n [errorMessages.maxCharError, maxTagsQuantity, setValidationMessage, setValidationState]\n );\n\n /**\n * Deletes a Tag from the array of tags and sets the new position for the tag cursor.\n * Also executes the user provided onDelete and onChange events.\n *\n * @param {number} tagPos - the position at which to remove the tag\n * @param {Event} event - the event associated with the delete\n * @param {boolean} end - whether or not to set the cursor at the end of the array\n */\n const deleteTag = useCallback(\n (tagPos, event, end) => {\n const newTagsArr = [...value.slice(0, tagPos), ...value.slice(tagPos + 1)];\n setValue(newTagsArr);\n // eslint-disable-next-line no-nested-ternary\n setTagCursorPos(end ? newTagsArr.length : tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onDelete?.(event, value[tagPos], tagPos);\n onChange?.(event, newTagsArr);\n },\n [onChange, onDelete, performValidation, setValue, tagCursorPos, value]\n );\n\n const canShowError =\n (status !== undefined && status === \"invalid\" && statusMessage !== undefined) || !stateValid;\n\n /**\n * Handler for the `onChange` event on the tag input\n */\n const onChangeHandler = useCallback((event, input) => {\n setTagInput(input);\n }, []);\n\n useEffect(() => {\n if (!multiline) {\n const element = containerRef?.current?.children[tagCursorPos];\n // this setTimeout is a workaround for Firefox not properly dealing\n // with setting the scrollLeft value.\n setTimeout(() => {\n const container = containerRef.current;\n if (isNil(container)) return;\n container.scrollLeft = element\n ? element.offsetLeft -\n container.getBoundingClientRect().width / 2 +\n element.getBoundingClientRect().width / 2\n : 0;\n }, 50);\n\n element?.focus();\n }\n }, [multiline, tagCursorPos]);\n\n useEffect(() => {\n if (resetInput.current) {\n setTagInput(\"\");\n setTagCursorPos(value.length);\n resetInput.current = false;\n }\n }, [value]);\n\n /**\n * Handler for the `onEnter` event on the tag input\n */\n const onEnterHandler = useCallback(\n (event, tag) => {\n event.preventDefault();\n if (tag !== \"\") {\n const newTag = { label: tag, type: \"semantic\" };\n const newTagsArr = [...value, newTag];\n setValue(newTagsArr);\n resetInput.current = true;\n performValidation(newTagsArr);\n onAdd?.(event, newTag, newTagsArr.length - 1);\n onChange?.(event, newTagsArr);\n }\n },\n [onAdd, onChange, performValidation, setValue, value]\n );\n\n /**\n * Handler for the `onKeyDown` event on the list container.\n */\n const onKeyDownHandler = useCallback(\n (event) => {\n if (tagInput === \"\") {\n switch (event.code) {\n case \"ArrowLeft\":\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n break;\n case \"ArrowRight\":\n setTagCursorPos(tagCursorPos < value.length ? tagCursorPos + 1 : value.length);\n break;\n case \"Backspace\":\n if (isTagSelected) {\n deleteTag(tagCursorPos, event, false);\n } else {\n setTagCursorPos(value.length - 1);\n }\n break;\n case \"Delete\":\n if (isTagSelected) {\n deleteTag(tagCursorPos, event, false);\n }\n break;\n default:\n break;\n }\n }\n },\n [deleteTag, isTagSelected, tagCursorPos, tagInput, value.length]\n );\n\n /**\n * Handler for the `onDelete` event on the tag component\n */\n const onDeleteTagHandler = useCallback(\n (event, i) => {\n deleteTag(i, event, true);\n setValidationState(validationStates.standBy);\n },\n [deleteTag, setValidationState]\n );\n\n /**\n * Handler for the `onClick` event on the list container\n */\n const onContainerClickHandler = useCallback(() => {\n inputRef.current?.focus();\n setTagCursorPos(value.length);\n }, [value.length]);\n\n return (\n <HvFormElement\n id={id}\n name={name}\n disabled={disabled}\n readOnly={readOnly}\n status={validationState}\n required={required}\n className={clsx(classes.root, className, {\n [classes.disabled]: disabled,\n })}\n >\n {(hasLabel || hasDescription) && (\n <div className={classes.labelContainer}>\n {hasLabel && (\n <HvLabel\n className={classes.label}\n id={setId(id, \"label\")}\n htmlFor={setId(elementId, \"input\")}\n label={textAreaLabel}\n />\n )}\n\n {hasDescription && (\n <HvInfoMessage className={classes.description} id={setId(elementId, \"description\")}>\n {description}\n </HvInfoMessage>\n )}\n </div>\n )}\n\n {hasCounter && (\n <HvCharCounter\n id={setId(elementId, \"charCounter\")}\n className={classes.characterCounter}\n separator={middleCountLabel}\n currentCharQuantity={value.length}\n maxCharQuantity={maxTagsQuantity}\n {...countCharProps}\n />\n )}\n\n <HvListContainer\n className={clsx(\n classes.tagsList,\n canShowError && classes.error,\n resizable && multiline && classes.resizable,\n isStateInvalid && classes.invalid,\n !multiline && classes.singleLine\n )}\n onKeyDown={onKeyDownHandler}\n onClick={onContainerClickHandler}\n ref={containerRef}\n >\n {value &&\n value.map((t, i) => {\n const tag =\n typeof t === \"string\"\n ? {\n label: t,\n type: \"semantic\",\n }\n : t;\n const { label, type, ...otherProps } = tag;\n return (\n <HvListItem\n // eslint-disable-next-line react/no-array-index-key\n key={`${tag.label}-${i}`}\n tabIndex={-1}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n gutters: classes.listItemGutters,\n root: classes.listItemRoot,\n }}\n id={`tag-${i}`}\n >\n <HvTag\n label={label}\n className={clsx(i === tagCursorPos && classes.tagSelected)}\n classes={{\n chipRoot: classes.chipRoot,\n }}\n type={type}\n {...(!(readOnly || disabled || type === \"categorical\") && {\n onDelete: (event) => onDeleteTagHandler(event, i),\n })}\n deleteButtonProps={{\n tabIndex: -1,\n }}\n {...otherProps}\n />\n </HvListItem>\n );\n })}\n {!(disabled || readOnly) && (\n <HvListItem\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputContainerRoot,\n gutters: classes.listItemGutters,\n }}\n id={`tag-${value.length}`}\n >\n <HvInput\n value={tagInput}\n disableClear\n onChange={onChangeHandler}\n onEnter={onEnterHandler}\n placeholder={value.length === 0 ? placeholder : \"\"}\n autoFocus={autoFocus}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputRoot,\n input: classes.input,\n inputBorderContainer: classes.tagInputBorderContainer,\n inputRootFocused: classes.tagInputRootFocused,\n }}\n disabled={disabled}\n readOnly={readOnly || isTagSelected}\n inputProps={{\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\":\n ariaDescribedBy != null\n ? ariaDescribedBy\n : description && setId(elementId, \"description\"),\n\n ...inputProps,\n }}\n inputRef={inputRef}\n {...others}\n />\n </HvListItem>\n )}\n </HvListContainer>\n {canShowError && (\n <HvWarningText id={setId(elementId, \"error\")} disableBorder className={classes.error}>\n {validationMessage}\n </HvWarningText>\n )}\n </HvFormElement>\n );\n};\n\nHvTagsInput.propTypes = {\n /**\n * Class names to be applied.\n */\n className: PropTypes.string,\n /**\n * A Jss Object used to override or extend the component styles applied.\n */\n classes: PropTypes.PropTypes.shape({\n /**\n * Styles applied to the input element.\n */\n input: PropTypes.string,\n /**\n * Styles applied to the list item gutters.\n */\n listItemGutters: PropTypes.string,\n /**\n * Styles applied to the list item element.\n */\n listItemRoot: PropTypes.string,\n /**\n * Styles applied to the root container of the textarea.\n */\n root: PropTypes.string,\n /**\n *\n */\n chipRoot: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n disabled: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n resizable: PropTypes.string,\n /**\n * Style applied to the root when invalid.\n */\n invalid: PropTypes.string,\n /**\n * Styles applied to text area container that holds the label, description and counter.\n */\n labelContainer: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n label: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n description: PropTypes.string,\n /**\n * Style applied on the character counter.\n */\n characterCounter: PropTypes.string,\n /**\n * Styles applied to the tags list container element.\n */\n tagsList: PropTypes.string,\n /**\n * Styles applied to the tag input container element.\n */\n tagInputContainerRoot: PropTypes.string,\n /**\n * Styles applied to the tag input element.\n */\n tagInputRoot: PropTypes.string,\n /**\n * Styles applied to a tag element when selected\n */\n tagSelected: PropTypes.string,\n /**\n * Styles applied to the input element border.\n */\n tagInputBorderContainer: PropTypes.string,\n /**\n * Styles applied to the input element when focused.\n */\n tagInputRootFocused: PropTypes.string,\n /**\n * Styles applied to the container when in single line mode.\n */\n singleLine: PropTypes.string,\n /**\n * Styles applied to the tags list when an error occurred.\n */\n error: PropTypes.string,\n }).isRequired,\n /**\n * Id to be applied to the form element root node.\n */\n id: PropTypes.string,\n /**\n * The form element name.\n */\n name: PropTypes.string,\n /**\n * The value of the form element.\n */\n value: PropTypes.array,\n /**\n * When uncontrolled, defines the initial input value.\n */\n defaultValue: PropTypes.array,\n /**\n * The label of the form element.\n *\n * The form element must be labeled for accessibility reasons.\n * If not provided, an aria-label or aria-labelledby must be inputted via inputProps.\n */\n label: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-label\": PropTypes.string,\n /**\n * @ignore\n */\n \"aria-labelledby\": PropTypes.string,\n /**\n * Provide additional descriptive text for the form element.\n */\n description: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-describedby\": PropTypes.string,\n /**\n * Indicates that the form element is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * Indicates that the form element is not editable.\n */\n readOnly: PropTypes.bool,\n /**\n * Indicates that the form element is required.\n */\n required: PropTypes.bool,\n /**\n * The function that will be executed onChange.\n */\n onChange: PropTypes.func,\n /**\n * The function that will be executed when a tag is deleted.\n */\n onDelete: PropTypes.func,\n /**\n * The function that will be executed when a tag is added.\n */\n onAdd: PropTypes.func,\n /**\n * The placeholder value of the input.\n */\n placeholder: PropTypes.string,\n /**\n * If `true` the character counter isn't shown even if maxTagsQuantity is set.\n */\n hideCounter: PropTypes.bool,\n /**\n * Text between the current char counter and max value.\n */\n middleCountLabel: PropTypes.string,\n /**\n * The maximum allowed length of the characters, if this value is null no check\n * will be performed.\n */\n maxTagsQuantity: PropTypes.number,\n /**\n * Attributes applied to the input element.\n */\n inputProps: PropTypes.instanceOf(Object),\n /**\n * If `true` it should autofocus.\n */\n autoFocus: PropTypes.bool,\n /**\n * If `true` the component is resizable.\n */\n resizable: PropTypes.bool,\n /**\n * Props passed to the HvCharCount component.\n */\n countCharProps: PropTypes.instanceOf(Object),\n /**\n * If `true` the component is in multiline mode.\n */\n multiline: PropTypes.bool,\n /**\n * The status of the form element.\n */\n status: PropTypes.string,\n /**\n * The error message to show when `status` is \"invalid\".\n */\n statusMessage: PropTypes.string,\n\n /**\n * An Object containing the various texts associated with the input.\n */\n validationMessages: PropTypes.shape({\n /**\n * The value when a validation fails.\n */\n error: PropTypes.string,\n /**\n * The message that appears when there are too many characters.\n */\n maxCharError: PropTypes.string,\n /**\n * The message that appears when there are too few characters.\n */\n minCharError: PropTypes.string,\n /**\n * The message that appears when the input is empty and required.\n */\n requiredError: PropTypes.string,\n }),\n};\n\nexport default withStyles(styles, { name: \"HvTagsInput\" })(HvTagsInput);\n"],"file":"TagsInput.js"}
|
|
@@ -18,7 +18,7 @@ export type HvTagsInputClassKey =
|
|
|
18
18
|
| "error";
|
|
19
19
|
|
|
20
20
|
export interface HvTagsInputProps
|
|
21
|
-
extends StandardProps<HvInputProps, HvTagsInputClassKey, "onChange"
|
|
21
|
+
extends StandardProps<HvInputProps, HvTagsInputClassKey, "onChange"> {
|
|
22
22
|
/**
|
|
23
23
|
* The label of the form element.
|
|
24
24
|
*
|
|
@@ -61,18 +61,19 @@ const HvTagsInput = props => {
|
|
|
61
61
|
const hasLabel = textAreaLabel != null;
|
|
62
62
|
const hasDescription = description != null;
|
|
63
63
|
const [value, setValue] = useControlled(valueProp, defaultValue);
|
|
64
|
-
const [tagInput, setTagInput] = useState("");
|
|
65
|
-
const [tagCursorPos, setTagCursorPos] = useState(value.length);
|
|
66
64
|
const [validationState, setValidationState] = useControlled(status, validationStates.standBy);
|
|
67
65
|
const [validationMessage, setValidationMessage] = useControlled(statusMessage, "");
|
|
66
|
+
const [tagInput, setTagInput] = useState("");
|
|
67
|
+
const [tagCursorPos, setTagCursorPos] = useState(value.length);
|
|
68
68
|
const [stateValid, setStateValid] = useState(true);
|
|
69
|
+
const inputRef = useRef();
|
|
70
|
+
const containerRef = useRef();
|
|
71
|
+
const resetInput = useRef(false);
|
|
69
72
|
const isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;
|
|
70
73
|
const hasCounter = maxTagsQuantity != null && !hideCounter;
|
|
71
74
|
const isStateInvalid = useMemo(() => {
|
|
72
75
|
return hasCounter && value.length > maxTagsQuantity;
|
|
73
76
|
}, [hasCounter, maxTagsQuantity, value.length]);
|
|
74
|
-
const inputRef = useRef();
|
|
75
|
-
const containerRef = useRef();
|
|
76
77
|
const errorMessages = useMemo(() => _objectSpread(_objectSpread({}, DEFAULT_ERROR_MESSAGES), validationMessages), // eslint-disable-next-line react-hooks/exhaustive-deps
|
|
77
78
|
[validationMessages === null || validationMessages === void 0 ? void 0 : validationMessages.error, validationMessages === null || validationMessages === void 0 ? void 0 : validationMessages.requiredError, validationMessages === null || validationMessages === void 0 ? void 0 : validationMessages.minCharError, validationMessages === null || validationMessages === void 0 ? void 0 : validationMessages.maxCharError]);
|
|
78
79
|
const performValidation = useCallback(currValue => {
|
|
@@ -86,6 +87,27 @@ const HvTagsInput = props => {
|
|
|
86
87
|
setStateValid(true);
|
|
87
88
|
}
|
|
88
89
|
}, [errorMessages.maxCharError, maxTagsQuantity, setValidationMessage, setValidationState]);
|
|
90
|
+
/**
|
|
91
|
+
* Deletes a Tag from the array of tags and sets the new position for the tag cursor.
|
|
92
|
+
* Also executes the user provided onDelete and onChange events.
|
|
93
|
+
*
|
|
94
|
+
* @param {number} tagPos - the position at which to remove the tag
|
|
95
|
+
* @param {Event} event - the event associated with the delete
|
|
96
|
+
* @param {boolean} end - whether or not to set the cursor at the end of the array
|
|
97
|
+
*/
|
|
98
|
+
|
|
99
|
+
const deleteTag = useCallback((tagPos, event, end) => {
|
|
100
|
+
var _inputRef$current;
|
|
101
|
+
|
|
102
|
+
const newTagsArr = [...value.slice(0, tagPos), ...value.slice(tagPos + 1)];
|
|
103
|
+
setValue(newTagsArr); // eslint-disable-next-line no-nested-ternary
|
|
104
|
+
|
|
105
|
+
setTagCursorPos(end ? newTagsArr.length : tagCursorPos > 0 ? tagCursorPos - 1 : 0);
|
|
106
|
+
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
|
107
|
+
performValidation(newTagsArr);
|
|
108
|
+
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[tagPos], tagPos);
|
|
109
|
+
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
110
|
+
}, [onChange, onDelete, performValidation, setValue, tagCursorPos, value]);
|
|
89
111
|
const canShowError = status !== undefined && status === "invalid" && statusMessage !== undefined || !stateValid;
|
|
90
112
|
/**
|
|
91
113
|
* Handler for the `onChange` event on the tag input
|
|
@@ -95,20 +117,10 @@ const HvTagsInput = props => {
|
|
|
95
117
|
setTagInput(input);
|
|
96
118
|
}, []);
|
|
97
119
|
useEffect(() => {
|
|
98
|
-
// keep scroll focused on the input when the value changes
|
|
99
120
|
if (!multiline) {
|
|
100
|
-
var _containerRef$current
|
|
121
|
+
var _containerRef$current;
|
|
101
122
|
|
|
102
|
-
const element = containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.children[
|
|
103
|
-
const offset = element === null || element === void 0 ? void 0 : element.offsetWidth;
|
|
104
|
-
containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current2 = containerRef.current) === null || _containerRef$current2 === void 0 ? void 0 : (_containerRef$current3 = _containerRef$current2.scrollBy) === null || _containerRef$current3 === void 0 ? void 0 : _containerRef$current3.call(_containerRef$current2, offset !== null && offset !== void 0 ? offset : 0, 0);
|
|
105
|
-
}
|
|
106
|
-
}, [multiline, value]);
|
|
107
|
-
useEffect(() => {
|
|
108
|
-
if (!multiline) {
|
|
109
|
-
var _containerRef$current4;
|
|
110
|
-
|
|
111
|
-
const element = containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current4 = containerRef.current) === null || _containerRef$current4 === void 0 ? void 0 : _containerRef$current4.children[tagCursorPos]; // this setTimeout is a workaround for Firefox not properly dealing
|
|
123
|
+
const element = containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$current = containerRef.current) === null || _containerRef$current === void 0 ? void 0 : _containerRef$current.children[tagCursorPos]; // this setTimeout is a workaround for Firefox not properly dealing
|
|
112
124
|
// with setting the scrollLeft value.
|
|
113
125
|
|
|
114
126
|
setTimeout(() => {
|
|
@@ -119,6 +131,13 @@ const HvTagsInput = props => {
|
|
|
119
131
|
element === null || element === void 0 ? void 0 : element.focus();
|
|
120
132
|
}
|
|
121
133
|
}, [multiline, tagCursorPos]);
|
|
134
|
+
useEffect(() => {
|
|
135
|
+
if (resetInput.current) {
|
|
136
|
+
setTagInput("");
|
|
137
|
+
setTagCursorPos(value.length);
|
|
138
|
+
resetInput.current = false;
|
|
139
|
+
}
|
|
140
|
+
}, [value]);
|
|
122
141
|
/**
|
|
123
142
|
* Handler for the `onEnter` event on the tag input
|
|
124
143
|
*/
|
|
@@ -133,8 +152,7 @@ const HvTagsInput = props => {
|
|
|
133
152
|
};
|
|
134
153
|
const newTagsArr = [...value, newTag];
|
|
135
154
|
setValue(newTagsArr);
|
|
136
|
-
|
|
137
|
-
setTagCursorPos(newTagsArr.length);
|
|
155
|
+
resetInput.current = true;
|
|
138
156
|
performValidation(newTagsArr);
|
|
139
157
|
onAdd === null || onAdd === void 0 ? void 0 : onAdd(event, newTag, newTagsArr.length - 1);
|
|
140
158
|
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
@@ -157,15 +175,7 @@ const HvTagsInput = props => {
|
|
|
157
175
|
|
|
158
176
|
case "Backspace":
|
|
159
177
|
if (isTagSelected) {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[tagCursorPos], tagCursorPos);
|
|
163
|
-
const newTagsArr = [...value.slice(0, tagCursorPos), ...value.slice(tagCursorPos + 1)];
|
|
164
|
-
setValue(newTagsArr);
|
|
165
|
-
setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);
|
|
166
|
-
(_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 ? void 0 : _inputRef$current.focus();
|
|
167
|
-
performValidation(newTagsArr);
|
|
168
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
178
|
+
deleteTag(tagCursorPos, event, false);
|
|
169
179
|
} else {
|
|
170
180
|
setTagCursorPos(value.length - 1);
|
|
171
181
|
}
|
|
@@ -174,15 +184,7 @@ const HvTagsInput = props => {
|
|
|
174
184
|
|
|
175
185
|
case "Delete":
|
|
176
186
|
if (isTagSelected) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[tagCursorPos], tagCursorPos);
|
|
180
|
-
const newTagsArr = [...value.slice(0, tagCursorPos), ...value.slice(tagCursorPos + 1)];
|
|
181
|
-
setValue(newTagsArr);
|
|
182
|
-
setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);
|
|
183
|
-
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
|
|
184
|
-
performValidation(newTagsArr);
|
|
185
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
187
|
+
deleteTag(tagCursorPos, event, false);
|
|
186
188
|
}
|
|
187
189
|
|
|
188
190
|
break;
|
|
@@ -191,31 +193,23 @@ const HvTagsInput = props => {
|
|
|
191
193
|
break;
|
|
192
194
|
}
|
|
193
195
|
}
|
|
194
|
-
}, [
|
|
196
|
+
}, [deleteTag, isTagSelected, tagCursorPos, tagInput, value.length]);
|
|
195
197
|
/**
|
|
196
198
|
* Handler for the `onDelete` event on the tag component
|
|
197
199
|
*/
|
|
198
200
|
|
|
199
201
|
const onDeleteTagHandler = useCallback((event, i) => {
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
onDelete === null || onDelete === void 0 ? void 0 : onDelete(event, value[i], i);
|
|
203
|
-
const newTagsArr = [...value.slice(0, i), ...value.slice(i + 1)];
|
|
202
|
+
deleteTag(i, event, true);
|
|
204
203
|
setValidationState(validationStates.standBy);
|
|
205
|
-
|
|
206
|
-
setTagCursorPos(newTagsArr.length);
|
|
207
|
-
(_inputRef$current3 = inputRef.current) === null || _inputRef$current3 === void 0 ? void 0 : _inputRef$current3.focus();
|
|
208
|
-
performValidation(newTagsArr);
|
|
209
|
-
onChange === null || onChange === void 0 ? void 0 : onChange(event, newTagsArr);
|
|
210
|
-
}, [onDelete, value, setValidationState, setValue, performValidation, onChange]);
|
|
204
|
+
}, [deleteTag, setValidationState]);
|
|
211
205
|
/**
|
|
212
206
|
* Handler for the `onClick` event on the list container
|
|
213
207
|
*/
|
|
214
208
|
|
|
215
209
|
const onContainerClickHandler = useCallback(() => {
|
|
216
|
-
var _inputRef$
|
|
210
|
+
var _inputRef$current2;
|
|
217
211
|
|
|
218
|
-
(_inputRef$
|
|
212
|
+
(_inputRef$current2 = inputRef.current) === null || _inputRef$current2 === void 0 ? void 0 : _inputRef$current2.focus();
|
|
219
213
|
setTagCursorPos(value.length);
|
|
220
214
|
}, [value.length]);
|
|
221
215
|
return /*#__PURE__*/React.createElement(HvFormElement, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/TagsInput/TagsInput.js"],"names":["React","useRef","useState","useCallback","useMemo","useEffect","PropTypes","clsx","isNil","withStyles","setId","useControlled","HvFormElement","HvListContainer","HvListItem","HvTag","HvInput","HvLabel","HvInfoMessage","HvCharCounter","HvWarningText","useUniqueId","validationStates","DEFAULT_ERROR_MESSAGES","styles","HvTagsInput","props","classes","className","id","name","value","valueProp","defaultValue","readOnly","disabled","required","label","textAreaLabel","ariaLabel","ariaLabelledBy","description","ariaDescribedBy","onChange","onAdd","onDelete","placeholder","hideCounter","middleCountLabel","maxTagsQuantity","autoFocus","resizable","inputProps","countCharProps","multiline","status","statusMessage","validationMessages","others","elementId","hasLabel","hasDescription","setValue","tagInput","setTagInput","tagCursorPos","setTagCursorPos","length","validationState","setValidationState","standBy","validationMessage","setValidationMessage","stateValid","setStateValid","isTagSelected","hasCounter","isStateInvalid","inputRef","containerRef","errorMessages","error","requiredError","minCharError","maxCharError","performValidation","currValue","invalid","valid","canShowError","undefined","onChangeHandler","event","input","element","current","children","offset","offsetWidth","scrollBy","setTimeout","container","scrollLeft","offsetLeft","getBoundingClientRect","width","focus","onEnterHandler","tag","preventDefault","newTag","type","newTagsArr","onKeyDownHandler","code","slice","onDeleteTagHandler","i","onContainerClickHandler","root","labelContainer","characterCounter","tagsList","singleLine","map","t","otherProps","gutters","listItemGutters","listItemRoot","tagSelected","chipRoot","tabIndex","tagInputContainerRoot","tagInputRoot","inputBorderContainer","tagInputBorderContainer","inputRootFocused","tagInputRootFocused","propTypes","string","shape","isRequired","array","node","bool","func","number","instanceOf","Object"],"mappings":"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","sourcesContent":["import React, { useRef, useState, useCallback, useMemo, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport clsx from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport { withStyles } from \"@material-ui/core\";\nimport { setId, useControlled } from \"../utils\";\nimport {\n HvFormElement,\n HvListContainer,\n HvListItem,\n HvTag,\n HvInput,\n HvLabel,\n HvInfoMessage,\n HvCharCounter,\n HvWarningText,\n useUniqueId,\n} from \"..\";\nimport validationStates from \"../Forms/FormElement/validationStates\";\nimport { DEFAULT_ERROR_MESSAGES } from \"../BaseInput/validations\";\nimport styles from \"./styles\";\n\n/**\n * A tags input is a single or multiline control that allows the input of tags.\n */\nconst HvTagsInput = (props) => {\n const {\n classes,\n className,\n\n id,\n name,\n\n value: valueProp,\n defaultValue = [],\n\n readOnly = false,\n disabled = false,\n required = false,\n\n label: textAreaLabel,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n description,\n \"aria-describedby\": ariaDescribedBy,\n\n onChange,\n onAdd,\n onDelete,\n\n placeholder,\n\n hideCounter = false,\n middleCountLabel = \"/\",\n maxTagsQuantity,\n\n autoFocus = false,\n resizable = true,\n\n inputProps = {},\n countCharProps = {},\n\n multiline = false,\n\n status,\n statusMessage,\n\n validationMessages,\n\n ...others\n } = props;\n const elementId = useUniqueId(id, \"hvTagsInput\");\n\n const hasLabel = textAreaLabel != null;\n const hasDescription = description != null;\n\n const [value, setValue] = useControlled(valueProp, defaultValue);\n\n const [tagInput, setTagInput] = useState(\"\");\n const [tagCursorPos, setTagCursorPos] = useState(value.length);\n\n const [validationState, setValidationState] = useControlled(status, validationStates.standBy);\n const [validationMessage, setValidationMessage] = useControlled(statusMessage, \"\");\n\n const [stateValid, setStateValid] = useState(true);\n\n const isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;\n\n const hasCounter = maxTagsQuantity != null && !hideCounter;\n\n const isStateInvalid = useMemo(() => {\n return hasCounter && value.length > maxTagsQuantity;\n }, [hasCounter, maxTagsQuantity, value.length]);\n\n const inputRef = useRef();\n const containerRef = useRef();\n\n const errorMessages = useMemo(\n () => ({ ...DEFAULT_ERROR_MESSAGES, ...validationMessages }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n validationMessages?.error,\n validationMessages?.requiredError,\n validationMessages?.minCharError,\n validationMessages?.maxCharError,\n ]\n );\n\n const performValidation = useCallback(\n (currValue) => {\n if (maxTagsQuantity !== null && currValue.length > maxTagsQuantity) {\n setValidationState(validationStates.invalid);\n setValidationMessage(errorMessages.maxCharError);\n setStateValid(false);\n } else {\n setValidationState(validationStates.valid);\n setValidationMessage(\"\");\n setStateValid(true);\n }\n },\n [errorMessages.maxCharError, maxTagsQuantity, setValidationMessage, setValidationState]\n );\n\n const canShowError =\n (status !== undefined && status === \"invalid\" && statusMessage !== undefined) || !stateValid;\n\n /**\n * Handler for the `onChange` event on the tag input\n */\n const onChangeHandler = useCallback((event, input) => {\n setTagInput(input);\n }, []);\n\n useEffect(() => {\n // keep scroll focused on the input when the value changes\n if (!multiline) {\n const element = containerRef?.current?.children[value.length];\n const offset = element?.offsetWidth;\n containerRef?.current?.scrollBy?.(offset ?? 0, 0);\n }\n }, [multiline, value]);\n\n useEffect(() => {\n if (!multiline) {\n const element = containerRef?.current?.children[tagCursorPos];\n // this setTimeout is a workaround for Firefox not properly dealing\n // with setting the scrollLeft value.\n setTimeout(() => {\n const container = containerRef.current;\n if (isNil(container)) return;\n container.scrollLeft = element\n ? element.offsetLeft -\n container.getBoundingClientRect().width / 2 +\n element.getBoundingClientRect().width / 2\n : 0;\n }, 50);\n\n element?.focus();\n }\n }, [multiline, tagCursorPos]);\n\n /**\n * Handler for the `onEnter` event on the tag input\n */\n const onEnterHandler = useCallback(\n (event, tag) => {\n event.preventDefault();\n if (tag !== \"\") {\n const newTag = { label: tag, type: \"semantic\" };\n const newTagsArr = [...value, newTag];\n setValue(newTagsArr);\n setTagInput(\"\");\n setTagCursorPos(newTagsArr.length);\n performValidation(newTagsArr);\n onAdd?.(event, newTag, newTagsArr.length - 1);\n onChange?.(event, newTagsArr);\n }\n },\n [onAdd, onChange, performValidation, setValue, value]\n );\n\n /**\n * Handler for the `onKeyDown` event on the list container.\n */\n const onKeyDownHandler = useCallback(\n (event) => {\n if (tagInput === \"\") {\n switch (event.code) {\n case \"ArrowLeft\":\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n break;\n case \"ArrowRight\":\n setTagCursorPos(tagCursorPos < value.length ? tagCursorPos + 1 : value.length);\n break;\n case \"Backspace\":\n if (isTagSelected) {\n onDelete?.(event, value[tagCursorPos], tagCursorPos);\n const newTagsArr = [\n ...value.slice(0, tagCursorPos),\n ...value.slice(tagCursorPos + 1),\n ];\n setValue(newTagsArr);\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onChange?.(event, newTagsArr);\n } else {\n setTagCursorPos(value.length - 1);\n }\n break;\n case \"Delete\":\n if (isTagSelected) {\n onDelete?.(event, value[tagCursorPos], tagCursorPos);\n const newTagsArr = [\n ...value.slice(0, tagCursorPos),\n ...value.slice(tagCursorPos + 1),\n ];\n setValue(newTagsArr);\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onChange?.(event, newTagsArr);\n }\n break;\n default:\n break;\n }\n }\n },\n [isTagSelected, onChange, onDelete, performValidation, setValue, tagCursorPos, tagInput, value]\n );\n\n /**\n * Handler for the `onDelete` event on the tag component\n */\n const onDeleteTagHandler = useCallback(\n (event, i) => {\n onDelete?.(event, value[i], i);\n const newTagsArr = [...value.slice(0, i), ...value.slice(i + 1)];\n setValidationState(validationStates.standBy);\n setValue(newTagsArr);\n setTagCursorPos(newTagsArr.length);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onChange?.(event, newTagsArr);\n },\n [onDelete, value, setValidationState, setValue, performValidation, onChange]\n );\n\n /**\n * Handler for the `onClick` event on the list container\n */\n const onContainerClickHandler = useCallback(() => {\n inputRef.current?.focus();\n setTagCursorPos(value.length);\n }, [value.length]);\n\n return (\n <HvFormElement\n id={id}\n name={name}\n disabled={disabled}\n readOnly={readOnly}\n status={validationState}\n required={required}\n className={clsx(classes.root, className, {\n [classes.disabled]: disabled,\n })}\n >\n {(hasLabel || hasDescription) && (\n <div className={classes.labelContainer}>\n {hasLabel && (\n <HvLabel\n className={classes.label}\n id={setId(id, \"label\")}\n htmlFor={setId(elementId, \"input\")}\n label={textAreaLabel}\n />\n )}\n\n {hasDescription && (\n <HvInfoMessage className={classes.description} id={setId(elementId, \"description\")}>\n {description}\n </HvInfoMessage>\n )}\n </div>\n )}\n\n {hasCounter && (\n <HvCharCounter\n id={setId(elementId, \"charCounter\")}\n className={classes.characterCounter}\n separator={middleCountLabel}\n currentCharQuantity={value.length}\n maxCharQuantity={maxTagsQuantity}\n {...countCharProps}\n />\n )}\n\n <HvListContainer\n className={clsx(\n classes.tagsList,\n canShowError && classes.error,\n resizable && multiline && classes.resizable,\n isStateInvalid && classes.invalid,\n !multiline && classes.singleLine\n )}\n onKeyDown={onKeyDownHandler}\n onClick={onContainerClickHandler}\n ref={containerRef}\n >\n {value &&\n value.map((t, i) => {\n const tag =\n typeof t === \"string\"\n ? {\n label: t,\n type: \"semantic\",\n }\n : t;\n const { label, type, ...otherProps } = tag;\n return (\n <HvListItem\n // eslint-disable-next-line react/no-array-index-key\n key={`${tag.label}-${i}`}\n tabIndex={-1}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n gutters: classes.listItemGutters,\n root: classes.listItemRoot,\n }}\n id={`tag-${i}`}\n >\n <HvTag\n label={label}\n className={clsx(i === tagCursorPos && classes.tagSelected)}\n classes={{\n chipRoot: classes.chipRoot,\n }}\n type={type}\n {...(!(readOnly || disabled || type === \"categorical\") && {\n onDelete: (event) => onDeleteTagHandler(event, i),\n })}\n deleteButtonProps={{\n tabIndex: -1,\n }}\n {...otherProps}\n />\n </HvListItem>\n );\n })}\n {!(disabled || readOnly) && (\n <HvListItem\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputContainerRoot,\n gutters: classes.listItemGutters,\n }}\n id={`tag-${value.length}`}\n >\n <HvInput\n value={tagInput}\n disableClear\n onChange={onChangeHandler}\n onEnter={onEnterHandler}\n placeholder={value.length === 0 ? placeholder : \"\"}\n autoFocus={autoFocus}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputRoot,\n input: classes.input,\n inputBorderContainer: classes.tagInputBorderContainer,\n inputRootFocused: classes.tagInputRootFocused,\n }}\n disabled={disabled}\n readOnly={readOnly || isTagSelected}\n inputProps={{\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\":\n ariaDescribedBy != null\n ? ariaDescribedBy\n : description && setId(elementId, \"description\"),\n\n ...inputProps,\n }}\n inputRef={inputRef}\n {...others}\n />\n </HvListItem>\n )}\n </HvListContainer>\n {canShowError && (\n <HvWarningText id={setId(elementId, \"error\")} disableBorder className={classes.error}>\n {validationMessage}\n </HvWarningText>\n )}\n </HvFormElement>\n );\n};\n\nHvTagsInput.propTypes = {\n /**\n * Class names to be applied.\n */\n className: PropTypes.string,\n /**\n * A Jss Object used to override or extend the component styles applied.\n */\n classes: PropTypes.PropTypes.shape({\n /**\n * Styles applied to the input element.\n */\n input: PropTypes.string,\n /**\n * Styles applied to the list item gutters.\n */\n listItemGutters: PropTypes.string,\n /**\n * Styles applied to the list item element.\n */\n listItemRoot: PropTypes.string,\n /**\n * Styles applied to the root container of the textarea.\n */\n root: PropTypes.string,\n /**\n *\n */\n chipRoot: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n disabled: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n resizable: PropTypes.string,\n /**\n * Style applied to the root when invalid.\n */\n invalid: PropTypes.string,\n /**\n * Styles applied to text area container that holds the label, description and counter.\n */\n labelContainer: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n label: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n description: PropTypes.string,\n /**\n * Style applied on the character counter.\n */\n characterCounter: PropTypes.string,\n /**\n * Styles applied to the tags list container element.\n */\n tagsList: PropTypes.string,\n /**\n * Styles applied to the tag input container element.\n */\n tagInputContainerRoot: PropTypes.string,\n /**\n * Styles applied to the tag input element.\n */\n tagInputRoot: PropTypes.string,\n /**\n * Styles applied to a tag element when selected\n */\n tagSelected: PropTypes.string,\n /**\n * Styles applied to the input element border.\n */\n tagInputBorderContainer: PropTypes.string,\n /**\n * Styles applied to the input element when focused.\n */\n tagInputRootFocused: PropTypes.string,\n /**\n * Styles applied to the container when in single line mode.\n */\n singleLine: PropTypes.string,\n /**\n * Styles applied to the tags list when an error occurred.\n */\n error: PropTypes.string,\n }).isRequired,\n /**\n * Id to be applied to the form element root node.\n */\n id: PropTypes.string,\n /**\n * The form element name.\n */\n name: PropTypes.string,\n /**\n * The value of the form element.\n */\n value: PropTypes.array,\n /**\n * When uncontrolled, defines the initial input value.\n */\n defaultValue: PropTypes.array,\n /**\n * The label of the form element.\n *\n * The form element must be labeled for accessibility reasons.\n * If not provided, an aria-label or aria-labelledby must be inputted via inputProps.\n */\n label: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-label\": PropTypes.string,\n /**\n * @ignore\n */\n \"aria-labelledby\": PropTypes.string,\n /**\n * Provide additional descriptive text for the form element.\n */\n description: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-describedby\": PropTypes.string,\n /**\n * Indicates that the form element is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * Indicates that the form element is not editable.\n */\n readOnly: PropTypes.bool,\n /**\n * Indicates that the form element is required.\n */\n required: PropTypes.bool,\n /**\n * The function that will be executed onChange.\n */\n onChange: PropTypes.func,\n /**\n * The function that will be executed when a tag is deleted.\n */\n onDelete: PropTypes.func,\n /**\n * The function that will be executed when a tag is added.\n */\n onAdd: PropTypes.func,\n /**\n * The placeholder value of the input.\n */\n placeholder: PropTypes.string,\n /**\n * If `true` the character counter isn't shown even if maxTagsQuantity is set.\n */\n hideCounter: PropTypes.bool,\n /**\n * Text between the current char counter and max value.\n */\n middleCountLabel: PropTypes.string,\n /**\n * The maximum allowed length of the characters, if this value is null no check\n * will be performed.\n */\n maxTagsQuantity: PropTypes.number,\n /**\n * Attributes applied to the input element.\n */\n inputProps: PropTypes.instanceOf(Object),\n /**\n * If `true` it should autofocus.\n */\n autoFocus: PropTypes.bool,\n /**\n * If `true` the component is resizable.\n */\n resizable: PropTypes.bool,\n /**\n * Props passed to the HvCharCount component.\n */\n countCharProps: PropTypes.instanceOf(Object),\n /**\n * If `true` the component is in multiline mode.\n */\n multiline: PropTypes.bool,\n /**\n * The status of the form element.\n */\n status: PropTypes.string,\n /**\n * The error message to show when `status` is \"invalid\".\n */\n statusMessage: PropTypes.string,\n\n /**\n * An Object containing the various texts associated with the input.\n */\n validationMessages: PropTypes.shape({\n /**\n * The value when a validation fails.\n */\n error: PropTypes.string,\n /**\n * The message that appears when there are too many characters.\n */\n maxCharError: PropTypes.string,\n /**\n * The message that appears when there are too few characters.\n */\n minCharError: PropTypes.string,\n /**\n * The message that appears when the input is empty and required.\n */\n requiredError: PropTypes.string,\n }),\n};\n\nexport default withStyles(styles, { name: \"HvTagsInput\" })(HvTagsInput);\n"],"file":"TagsInput.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/TagsInput/TagsInput.js"],"names":["React","useRef","useState","useCallback","useMemo","useEffect","PropTypes","clsx","isNil","withStyles","setId","useControlled","HvFormElement","HvListContainer","HvListItem","HvTag","HvInput","HvLabel","HvInfoMessage","HvCharCounter","HvWarningText","useUniqueId","validationStates","DEFAULT_ERROR_MESSAGES","styles","HvTagsInput","props","classes","className","id","name","value","valueProp","defaultValue","readOnly","disabled","required","label","textAreaLabel","ariaLabel","ariaLabelledBy","description","ariaDescribedBy","onChange","onAdd","onDelete","placeholder","hideCounter","middleCountLabel","maxTagsQuantity","autoFocus","resizable","inputProps","countCharProps","multiline","status","statusMessage","validationMessages","others","elementId","hasLabel","hasDescription","setValue","validationState","setValidationState","standBy","validationMessage","setValidationMessage","tagInput","setTagInput","tagCursorPos","setTagCursorPos","length","stateValid","setStateValid","inputRef","containerRef","resetInput","isTagSelected","hasCounter","isStateInvalid","errorMessages","error","requiredError","minCharError","maxCharError","performValidation","currValue","invalid","valid","deleteTag","tagPos","event","end","newTagsArr","slice","current","focus","canShowError","undefined","onChangeHandler","input","element","children","setTimeout","container","scrollLeft","offsetLeft","getBoundingClientRect","width","onEnterHandler","tag","preventDefault","newTag","type","onKeyDownHandler","code","onDeleteTagHandler","i","onContainerClickHandler","root","labelContainer","characterCounter","tagsList","singleLine","map","t","otherProps","gutters","listItemGutters","listItemRoot","tagSelected","chipRoot","tabIndex","tagInputContainerRoot","tagInputRoot","inputBorderContainer","tagInputBorderContainer","inputRootFocused","tagInputRootFocused","propTypes","string","shape","isRequired","array","node","bool","func","number","instanceOf","Object"],"mappings":"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","sourcesContent":["import React, { useRef, useState, useCallback, useMemo, useEffect } from \"react\";\nimport PropTypes from \"prop-types\";\nimport clsx from \"clsx\";\nimport isNil from \"lodash/isNil\";\nimport { withStyles } from \"@material-ui/core\";\nimport { setId, useControlled } from \"../utils\";\nimport {\n HvFormElement,\n HvListContainer,\n HvListItem,\n HvTag,\n HvInput,\n HvLabel,\n HvInfoMessage,\n HvCharCounter,\n HvWarningText,\n useUniqueId,\n} from \"..\";\nimport validationStates from \"../Forms/FormElement/validationStates\";\nimport { DEFAULT_ERROR_MESSAGES } from \"../BaseInput/validations\";\nimport styles from \"./styles\";\n\n/**\n * A tags input is a single or multiline control that allows the input of tags.\n */\nconst HvTagsInput = (props) => {\n const {\n classes,\n className,\n\n id,\n name,\n\n value: valueProp,\n defaultValue = [],\n\n readOnly = false,\n disabled = false,\n required = false,\n\n label: textAreaLabel,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n description,\n \"aria-describedby\": ariaDescribedBy,\n\n onChange,\n onAdd,\n onDelete,\n\n placeholder,\n\n hideCounter = false,\n middleCountLabel = \"/\",\n maxTagsQuantity,\n\n autoFocus = false,\n resizable = true,\n\n inputProps = {},\n countCharProps = {},\n\n multiline = false,\n\n status,\n statusMessage,\n\n validationMessages,\n\n ...others\n } = props;\n const elementId = useUniqueId(id, \"hvTagsInput\");\n\n const hasLabel = textAreaLabel != null;\n const hasDescription = description != null;\n\n const [value, setValue] = useControlled(valueProp, defaultValue);\n const [validationState, setValidationState] = useControlled(status, validationStates.standBy);\n const [validationMessage, setValidationMessage] = useControlled(statusMessage, \"\");\n\n const [tagInput, setTagInput] = useState(\"\");\n const [tagCursorPos, setTagCursorPos] = useState(value.length);\n const [stateValid, setStateValid] = useState(true);\n\n const inputRef = useRef();\n const containerRef = useRef();\n const resetInput = useRef(false);\n\n const isTagSelected = tagCursorPos >= 0 && tagCursorPos < value.length;\n const hasCounter = maxTagsQuantity != null && !hideCounter;\n\n const isStateInvalid = useMemo(() => {\n return hasCounter && value.length > maxTagsQuantity;\n }, [hasCounter, maxTagsQuantity, value.length]);\n\n const errorMessages = useMemo(\n () => ({ ...DEFAULT_ERROR_MESSAGES, ...validationMessages }),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n validationMessages?.error,\n validationMessages?.requiredError,\n validationMessages?.minCharError,\n validationMessages?.maxCharError,\n ]\n );\n\n const performValidation = useCallback(\n (currValue) => {\n if (maxTagsQuantity !== null && currValue.length > maxTagsQuantity) {\n setValidationState(validationStates.invalid);\n setValidationMessage(errorMessages.maxCharError);\n setStateValid(false);\n } else {\n setValidationState(validationStates.valid);\n setValidationMessage(\"\");\n setStateValid(true);\n }\n },\n [errorMessages.maxCharError, maxTagsQuantity, setValidationMessage, setValidationState]\n );\n\n /**\n * Deletes a Tag from the array of tags and sets the new position for the tag cursor.\n * Also executes the user provided onDelete and onChange events.\n *\n * @param {number} tagPos - the position at which to remove the tag\n * @param {Event} event - the event associated with the delete\n * @param {boolean} end - whether or not to set the cursor at the end of the array\n */\n const deleteTag = useCallback(\n (tagPos, event, end) => {\n const newTagsArr = [...value.slice(0, tagPos), ...value.slice(tagPos + 1)];\n setValue(newTagsArr);\n // eslint-disable-next-line no-nested-ternary\n setTagCursorPos(end ? newTagsArr.length : tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n inputRef.current?.focus();\n performValidation(newTagsArr);\n onDelete?.(event, value[tagPos], tagPos);\n onChange?.(event, newTagsArr);\n },\n [onChange, onDelete, performValidation, setValue, tagCursorPos, value]\n );\n\n const canShowError =\n (status !== undefined && status === \"invalid\" && statusMessage !== undefined) || !stateValid;\n\n /**\n * Handler for the `onChange` event on the tag input\n */\n const onChangeHandler = useCallback((event, input) => {\n setTagInput(input);\n }, []);\n\n useEffect(() => {\n if (!multiline) {\n const element = containerRef?.current?.children[tagCursorPos];\n // this setTimeout is a workaround for Firefox not properly dealing\n // with setting the scrollLeft value.\n setTimeout(() => {\n const container = containerRef.current;\n if (isNil(container)) return;\n container.scrollLeft = element\n ? element.offsetLeft -\n container.getBoundingClientRect().width / 2 +\n element.getBoundingClientRect().width / 2\n : 0;\n }, 50);\n\n element?.focus();\n }\n }, [multiline, tagCursorPos]);\n\n useEffect(() => {\n if (resetInput.current) {\n setTagInput(\"\");\n setTagCursorPos(value.length);\n resetInput.current = false;\n }\n }, [value]);\n\n /**\n * Handler for the `onEnter` event on the tag input\n */\n const onEnterHandler = useCallback(\n (event, tag) => {\n event.preventDefault();\n if (tag !== \"\") {\n const newTag = { label: tag, type: \"semantic\" };\n const newTagsArr = [...value, newTag];\n setValue(newTagsArr);\n resetInput.current = true;\n performValidation(newTagsArr);\n onAdd?.(event, newTag, newTagsArr.length - 1);\n onChange?.(event, newTagsArr);\n }\n },\n [onAdd, onChange, performValidation, setValue, value]\n );\n\n /**\n * Handler for the `onKeyDown` event on the list container.\n */\n const onKeyDownHandler = useCallback(\n (event) => {\n if (tagInput === \"\") {\n switch (event.code) {\n case \"ArrowLeft\":\n setTagCursorPos(tagCursorPos > 0 ? tagCursorPos - 1 : 0);\n break;\n case \"ArrowRight\":\n setTagCursorPos(tagCursorPos < value.length ? tagCursorPos + 1 : value.length);\n break;\n case \"Backspace\":\n if (isTagSelected) {\n deleteTag(tagCursorPos, event, false);\n } else {\n setTagCursorPos(value.length - 1);\n }\n break;\n case \"Delete\":\n if (isTagSelected) {\n deleteTag(tagCursorPos, event, false);\n }\n break;\n default:\n break;\n }\n }\n },\n [deleteTag, isTagSelected, tagCursorPos, tagInput, value.length]\n );\n\n /**\n * Handler for the `onDelete` event on the tag component\n */\n const onDeleteTagHandler = useCallback(\n (event, i) => {\n deleteTag(i, event, true);\n setValidationState(validationStates.standBy);\n },\n [deleteTag, setValidationState]\n );\n\n /**\n * Handler for the `onClick` event on the list container\n */\n const onContainerClickHandler = useCallback(() => {\n inputRef.current?.focus();\n setTagCursorPos(value.length);\n }, [value.length]);\n\n return (\n <HvFormElement\n id={id}\n name={name}\n disabled={disabled}\n readOnly={readOnly}\n status={validationState}\n required={required}\n className={clsx(classes.root, className, {\n [classes.disabled]: disabled,\n })}\n >\n {(hasLabel || hasDescription) && (\n <div className={classes.labelContainer}>\n {hasLabel && (\n <HvLabel\n className={classes.label}\n id={setId(id, \"label\")}\n htmlFor={setId(elementId, \"input\")}\n label={textAreaLabel}\n />\n )}\n\n {hasDescription && (\n <HvInfoMessage className={classes.description} id={setId(elementId, \"description\")}>\n {description}\n </HvInfoMessage>\n )}\n </div>\n )}\n\n {hasCounter && (\n <HvCharCounter\n id={setId(elementId, \"charCounter\")}\n className={classes.characterCounter}\n separator={middleCountLabel}\n currentCharQuantity={value.length}\n maxCharQuantity={maxTagsQuantity}\n {...countCharProps}\n />\n )}\n\n <HvListContainer\n className={clsx(\n classes.tagsList,\n canShowError && classes.error,\n resizable && multiline && classes.resizable,\n isStateInvalid && classes.invalid,\n !multiline && classes.singleLine\n )}\n onKeyDown={onKeyDownHandler}\n onClick={onContainerClickHandler}\n ref={containerRef}\n >\n {value &&\n value.map((t, i) => {\n const tag =\n typeof t === \"string\"\n ? {\n label: t,\n type: \"semantic\",\n }\n : t;\n const { label, type, ...otherProps } = tag;\n return (\n <HvListItem\n // eslint-disable-next-line react/no-array-index-key\n key={`${tag.label}-${i}`}\n tabIndex={-1}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n gutters: classes.listItemGutters,\n root: classes.listItemRoot,\n }}\n id={`tag-${i}`}\n >\n <HvTag\n label={label}\n className={clsx(i === tagCursorPos && classes.tagSelected)}\n classes={{\n chipRoot: classes.chipRoot,\n }}\n type={type}\n {...(!(readOnly || disabled || type === \"categorical\") && {\n onDelete: (event) => onDeleteTagHandler(event, i),\n })}\n deleteButtonProps={{\n tabIndex: -1,\n }}\n {...otherProps}\n />\n </HvListItem>\n );\n })}\n {!(disabled || readOnly) && (\n <HvListItem\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputContainerRoot,\n gutters: classes.listItemGutters,\n }}\n id={`tag-${value.length}`}\n >\n <HvInput\n value={tagInput}\n disableClear\n onChange={onChangeHandler}\n onEnter={onEnterHandler}\n placeholder={value.length === 0 ? placeholder : \"\"}\n autoFocus={autoFocus}\n className={clsx(!multiline && classes.singleLine)}\n classes={{\n root: classes.tagInputRoot,\n input: classes.input,\n inputBorderContainer: classes.tagInputBorderContainer,\n inputRootFocused: classes.tagInputRootFocused,\n }}\n disabled={disabled}\n readOnly={readOnly || isTagSelected}\n inputProps={{\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-describedby\":\n ariaDescribedBy != null\n ? ariaDescribedBy\n : description && setId(elementId, \"description\"),\n\n ...inputProps,\n }}\n inputRef={inputRef}\n {...others}\n />\n </HvListItem>\n )}\n </HvListContainer>\n {canShowError && (\n <HvWarningText id={setId(elementId, \"error\")} disableBorder className={classes.error}>\n {validationMessage}\n </HvWarningText>\n )}\n </HvFormElement>\n );\n};\n\nHvTagsInput.propTypes = {\n /**\n * Class names to be applied.\n */\n className: PropTypes.string,\n /**\n * A Jss Object used to override or extend the component styles applied.\n */\n classes: PropTypes.PropTypes.shape({\n /**\n * Styles applied to the input element.\n */\n input: PropTypes.string,\n /**\n * Styles applied to the list item gutters.\n */\n listItemGutters: PropTypes.string,\n /**\n * Styles applied to the list item element.\n */\n listItemRoot: PropTypes.string,\n /**\n * Styles applied to the root container of the textarea.\n */\n root: PropTypes.string,\n /**\n *\n */\n chipRoot: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n disabled: PropTypes.string,\n /**\n * Style applied to the root when resizable is `true`.\n */\n resizable: PropTypes.string,\n /**\n * Style applied to the root when invalid.\n */\n invalid: PropTypes.string,\n /**\n * Styles applied to text area container that holds the label, description and counter.\n */\n labelContainer: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n label: PropTypes.string,\n /**\n * Styles applied to the label element.\n */\n description: PropTypes.string,\n /**\n * Style applied on the character counter.\n */\n characterCounter: PropTypes.string,\n /**\n * Styles applied to the tags list container element.\n */\n tagsList: PropTypes.string,\n /**\n * Styles applied to the tag input container element.\n */\n tagInputContainerRoot: PropTypes.string,\n /**\n * Styles applied to the tag input element.\n */\n tagInputRoot: PropTypes.string,\n /**\n * Styles applied to a tag element when selected\n */\n tagSelected: PropTypes.string,\n /**\n * Styles applied to the input element border.\n */\n tagInputBorderContainer: PropTypes.string,\n /**\n * Styles applied to the input element when focused.\n */\n tagInputRootFocused: PropTypes.string,\n /**\n * Styles applied to the container when in single line mode.\n */\n singleLine: PropTypes.string,\n /**\n * Styles applied to the tags list when an error occurred.\n */\n error: PropTypes.string,\n }).isRequired,\n /**\n * Id to be applied to the form element root node.\n */\n id: PropTypes.string,\n /**\n * The form element name.\n */\n name: PropTypes.string,\n /**\n * The value of the form element.\n */\n value: PropTypes.array,\n /**\n * When uncontrolled, defines the initial input value.\n */\n defaultValue: PropTypes.array,\n /**\n * The label of the form element.\n *\n * The form element must be labeled for accessibility reasons.\n * If not provided, an aria-label or aria-labelledby must be inputted via inputProps.\n */\n label: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-label\": PropTypes.string,\n /**\n * @ignore\n */\n \"aria-labelledby\": PropTypes.string,\n /**\n * Provide additional descriptive text for the form element.\n */\n description: PropTypes.node,\n /**\n * @ignore\n */\n \"aria-describedby\": PropTypes.string,\n /**\n * Indicates that the form element is disabled.\n */\n disabled: PropTypes.bool,\n /**\n * Indicates that the form element is not editable.\n */\n readOnly: PropTypes.bool,\n /**\n * Indicates that the form element is required.\n */\n required: PropTypes.bool,\n /**\n * The function that will be executed onChange.\n */\n onChange: PropTypes.func,\n /**\n * The function that will be executed when a tag is deleted.\n */\n onDelete: PropTypes.func,\n /**\n * The function that will be executed when a tag is added.\n */\n onAdd: PropTypes.func,\n /**\n * The placeholder value of the input.\n */\n placeholder: PropTypes.string,\n /**\n * If `true` the character counter isn't shown even if maxTagsQuantity is set.\n */\n hideCounter: PropTypes.bool,\n /**\n * Text between the current char counter and max value.\n */\n middleCountLabel: PropTypes.string,\n /**\n * The maximum allowed length of the characters, if this value is null no check\n * will be performed.\n */\n maxTagsQuantity: PropTypes.number,\n /**\n * Attributes applied to the input element.\n */\n inputProps: PropTypes.instanceOf(Object),\n /**\n * If `true` it should autofocus.\n */\n autoFocus: PropTypes.bool,\n /**\n * If `true` the component is resizable.\n */\n resizable: PropTypes.bool,\n /**\n * Props passed to the HvCharCount component.\n */\n countCharProps: PropTypes.instanceOf(Object),\n /**\n * If `true` the component is in multiline mode.\n */\n multiline: PropTypes.bool,\n /**\n * The status of the form element.\n */\n status: PropTypes.string,\n /**\n * The error message to show when `status` is \"invalid\".\n */\n statusMessage: PropTypes.string,\n\n /**\n * An Object containing the various texts associated with the input.\n */\n validationMessages: PropTypes.shape({\n /**\n * The value when a validation fails.\n */\n error: PropTypes.string,\n /**\n * The message that appears when there are too many characters.\n */\n maxCharError: PropTypes.string,\n /**\n * The message that appears when there are too few characters.\n */\n minCharError: PropTypes.string,\n /**\n * The message that appears when the input is empty and required.\n */\n requiredError: PropTypes.string,\n }),\n};\n\nexport default withStyles(styles, { name: \"HvTagsInput\" })(HvTagsInput);\n"],"file":"TagsInput.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hitachivantara/uikit-react-core",
|
|
3
|
-
"version": "3.55.
|
|
3
|
+
"version": "3.55.1",
|
|
4
4
|
"description": "A collection of React components for the Hitachi Vantara's Design System.",
|
|
5
5
|
"homepage": "https://github.com/lumada-design/hv-uikit-react",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -104,5 +104,5 @@
|
|
|
104
104
|
"publishConfig": {
|
|
105
105
|
"access": "public"
|
|
106
106
|
},
|
|
107
|
-
"gitHead": "
|
|
107
|
+
"gitHead": "e5fc10f26f06ed20b9fa4203b5a8f0a0c905391c"
|
|
108
108
|
}
|