@pingux/astro 2.6.0-alpha.3 → 2.6.0-alpha.4
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/lib/cjs/components/MultivaluesField/MultivaluesField.js +49 -19
- package/lib/cjs/components/MultivaluesField/MultivaluesField.test.js +50 -0
- package/lib/components/MultivaluesField/MultivaluesField.js +49 -19
- package/lib/components/MultivaluesField/MultivaluesField.test.js +50 -0
- package/package.json +1 -1
@@ -20,6 +20,8 @@ var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-s
|
|
20
20
|
var _from = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/from"));
|
21
21
|
var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/trim"));
|
22
22
|
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
|
23
|
+
var _reduce = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/reduce"));
|
24
|
+
var _findIndex = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find-index"));
|
23
25
|
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
|
24
26
|
var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
|
25
27
|
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
|
@@ -46,7 +48,7 @@ var _excluded = ["defaultSelectedKeys", "direction", "disabledKeys", "containerP
|
|
46
48
|
function _getRequireWildcardCache(nodeInterop) { if (typeof _WeakMap !== "function") return null; var cacheBabelInterop = new _WeakMap(); var cacheNodeInterop = new _WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
47
49
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = _Object$defineProperty && _Object$getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? _Object$getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { _Object$defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
48
50
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty2(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
49
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var
|
51
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context11, _context12; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context11 = ownKeys(Object(source), !0)).call(_context11, function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context12 = ownKeys(Object(source))).call(_context12, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
50
52
|
/**
|
51
53
|
* Complex control that lets you choose several tags from the dropdown list.
|
52
54
|
* Or to add your own values in non-restrictive mode.
|
@@ -57,7 +59,7 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
|
|
57
59
|
* Stately.
|
58
60
|
*/
|
59
61
|
var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
|
60
|
-
var
|
62
|
+
var _context8, _listBoxRef$current;
|
61
63
|
var defaultSelectedKeys = props.defaultSelectedKeys,
|
62
64
|
direction = props.direction,
|
63
65
|
_props$disabledKeys = props.disabledKeys,
|
@@ -141,8 +143,13 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
|
|
141
143
|
var close = function close() {
|
142
144
|
return setIsOpen(false);
|
143
145
|
};
|
146
|
+
var closeBadgeRefs = (0, _react.useRef)([]);
|
147
|
+
var inputWrapperRef = (0, _react.useRef)();
|
144
148
|
var inputRef = (0, _react.useRef)();
|
145
149
|
/* istanbul ignore next */
|
150
|
+
(0, _react.useImperativeHandle)(ref, function () {
|
151
|
+
return inputWrapperRef.current;
|
152
|
+
});
|
146
153
|
(0, _react.useImperativeHandle)(ref, function () {
|
147
154
|
return inputRef.current;
|
148
155
|
});
|
@@ -156,7 +163,7 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
|
|
156
163
|
placement: "".concat(direction, " end"),
|
157
164
|
scrollRef: listBoxRef,
|
158
165
|
shouldFlip: !isNotFlippable,
|
159
|
-
targetRef:
|
166
|
+
targetRef: inputWrapperRef
|
160
167
|
}),
|
161
168
|
overlayProps = _useOverlayPosition.overlayProps,
|
162
169
|
placement = _useOverlayPosition.placement,
|
@@ -180,12 +187,12 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
|
|
180
187
|
setMenuWidth = _useState10[1];
|
181
188
|
var onResize = (0, _react.useCallback)(function () {
|
182
189
|
/* istanbul ignore next */
|
183
|
-
if (
|
184
|
-
setMenuWidth("".concat(
|
190
|
+
if (inputWrapperRef.current) {
|
191
|
+
setMenuWidth("".concat(inputWrapperRef.current.offsetWidth + 2, "px"));
|
185
192
|
}
|
186
|
-
}, [
|
193
|
+
}, [inputWrapperRef, isOpen, setMenuWidth]);
|
187
194
|
(0, _utils.useResizeObserver)({
|
188
|
-
ref:
|
195
|
+
ref: inputWrapperRef,
|
189
196
|
onResize: onResize
|
190
197
|
});
|
191
198
|
(0, _utils.useLayoutEffect)(onResize, [onResize]);
|
@@ -280,8 +287,25 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
|
|
280
287
|
}
|
281
288
|
if (onKeyDown) onKeyDown(e.nativeEvent);
|
282
289
|
};
|
283
|
-
var deleteItem = function deleteItem(key) {
|
290
|
+
var deleteItem = function deleteItem(key, e) {
|
291
|
+
var _context5;
|
292
|
+
var activeBadgesKeys = (0, _reduce["default"])(_context5 = closeBadgeRefs.current).call(_context5, function (result, item) {
|
293
|
+
if (item) {
|
294
|
+
result.push(item.dataset.item);
|
295
|
+
}
|
296
|
+
return result;
|
297
|
+
}, []);
|
284
298
|
selectionManager.toggleSelection(key);
|
299
|
+
if (e.pointerType !== 'keyboard') return;
|
300
|
+
if (activeBadgesKeys.length > 1) {
|
301
|
+
var badgeIndex = (0, _findIndex["default"])(activeBadgesKeys).call(activeBadgesKeys, function (item) {
|
302
|
+
return item === key;
|
303
|
+
});
|
304
|
+
var nextFocusBadgeIndex = badgeIndex === activeBadgesKeys.length - 1 ? badgeIndex - 1 : badgeIndex;
|
305
|
+
closeBadgeRefs.current[nextFocusBadgeIndex].focus();
|
306
|
+
} else {
|
307
|
+
inputRef.current.focus();
|
308
|
+
}
|
285
309
|
};
|
286
310
|
var readOnlyTextItem = function readOnlyTextItem(key, name) {
|
287
311
|
return (0, _react2.jsx)(_.Text, {
|
@@ -300,8 +324,8 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
|
|
300
324
|
}, name);
|
301
325
|
};
|
302
326
|
var readOnlyInputEntry = isReadOnly && (readOnlyKeys.length ? (0, _map["default"])(readOnlyKeys).call(readOnlyKeys, function (key) {
|
303
|
-
var
|
304
|
-
var item = (0, _find["default"])(
|
327
|
+
var _context6, _context7;
|
328
|
+
var item = (0, _find["default"])(_context6 = (0, _concat["default"])(_context7 = []).call(_context7, initialItems, customItems)).call(_context6, function (el) {
|
305
329
|
return el.key === key;
|
306
330
|
});
|
307
331
|
if (item) {
|
@@ -331,7 +355,7 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
|
|
331
355
|
}
|
332
356
|
return null;
|
333
357
|
});
|
334
|
-
var multivaluesFieldBadge = function multivaluesFieldBadge(item) {
|
358
|
+
var multivaluesFieldBadge = function multivaluesFieldBadge(item, index) {
|
335
359
|
return (0, _react2.jsx)(_.Badge, (0, _extends2["default"])({
|
336
360
|
key: item.key,
|
337
361
|
role: "presentation",
|
@@ -341,9 +365,14 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
|
|
341
365
|
slots: item.slots
|
342
366
|
}, item.badgeProps), (0, _react2.jsx)(_.IconButton, (0, _extends2["default"])({
|
343
367
|
"aria-label": "delete ".concat(item.name),
|
344
|
-
|
345
|
-
|
368
|
+
"data-item": item.name,
|
369
|
+
onPress: function onPress(e) {
|
370
|
+
return deleteItem(item.key, e);
|
346
371
|
},
|
372
|
+
ref: function ref(el) {
|
373
|
+
return closeBadgeRefs.current[index] = el;
|
374
|
+
} // eslint-disable-line
|
375
|
+
,
|
347
376
|
variant: "badge.deleteButton"
|
348
377
|
}, item.buttonProps), (0, _react2.jsx)(_.Icon, {
|
349
378
|
icon: _CloseIcon["default"],
|
@@ -354,13 +383,13 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
|
|
354
383
|
}
|
355
384
|
})));
|
356
385
|
};
|
357
|
-
var selectedItems = (0, _react2.jsx)(_react["default"].Fragment, null, (0, _map["default"])(
|
358
|
-
var
|
359
|
-
var item = (0, _find["default"])(
|
386
|
+
var selectedItems = (0, _react2.jsx)(_react["default"].Fragment, null, (0, _map["default"])(_context8 = (0, _from["default"])(selectionManager.selectedKeys)).call(_context8, function (key, i) {
|
387
|
+
var _context9, _context10;
|
388
|
+
var item = (0, _find["default"])(_context9 = (0, _concat["default"])(_context10 = []).call(_context10, initialItems, customItems)).call(_context9, function (el) {
|
360
389
|
return el.key === key;
|
361
390
|
});
|
362
391
|
if (item) {
|
363
|
-
return multivaluesFieldBadge(item);
|
392
|
+
return multivaluesFieldBadge(item, i);
|
364
393
|
}
|
365
394
|
return null;
|
366
395
|
}));
|
@@ -385,7 +414,8 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
|
|
385
414
|
'aria-activedescendant': activeDescendant,
|
386
415
|
'aria-controls': (_listBoxRef$current = listBoxRef.current) === null || _listBoxRef$current === void 0 ? void 0 : _listBoxRef$current.id,
|
387
416
|
'aria-expanded': isOpen,
|
388
|
-
role: 'combobox'
|
417
|
+
role: 'combobox',
|
418
|
+
ref: inputRef
|
389
419
|
},
|
390
420
|
hasAutoFocus: hasAutoFocus,
|
391
421
|
hasNoStatusIndicator: hasNoStatusIndicator,
|
@@ -395,7 +425,7 @@ var MultivaluesField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref)
|
|
395
425
|
label: label,
|
396
426
|
placeholder: placeholder,
|
397
427
|
wrapperProps: {
|
398
|
-
ref:
|
428
|
+
ref: inputWrapperRef,
|
399
429
|
variant: 'forms.input.multivaluesWrapper',
|
400
430
|
sx: isReadOnly && {
|
401
431
|
boxShadow: 'inset 0 0 0 100px #e5e9f8',
|
@@ -620,4 +620,54 @@ test('in non-restrictive mode the value should be trimmed', function () {
|
|
620
620
|
expect(badge).not.toBeInTheDocument();
|
621
621
|
expect(trimmedBadge).toBeInTheDocument();
|
622
622
|
expect(input).toHaveValue('');
|
623
|
+
});
|
624
|
+
test('deleting a single badge via keyboard moves focus to the input', function () {
|
625
|
+
getComponent();
|
626
|
+
var input = _testWrapper.screen.getByRole('combobox');
|
627
|
+
_userEvent["default"].tab();
|
628
|
+
var options = _testWrapper.screen.getAllByRole('option');
|
629
|
+
var firstOption = options[0];
|
630
|
+
firstOption.click();
|
631
|
+
var badge = _testWrapper.screen.getByText(items[0].name);
|
632
|
+
expect(badge).toBeInTheDocument();
|
633
|
+
_userEvent["default"].tab({
|
634
|
+
shift: true
|
635
|
+
});
|
636
|
+
var deleteButton = badge.nextSibling;
|
637
|
+
expect(deleteButton).toHaveClass('is-focused');
|
638
|
+
_testWrapper.fireEvent.keyDown(deleteButton, {
|
639
|
+
key: 'Enter'
|
640
|
+
});
|
641
|
+
_testWrapper.fireEvent.keyUp(deleteButton, {
|
642
|
+
key: 'Enter'
|
643
|
+
});
|
644
|
+
expect(badge).not.toBeInTheDocument();
|
645
|
+
expect(input).toHaveClass('is-focused');
|
646
|
+
});
|
647
|
+
test('deleting the last badge via keyboard moves focus to the previous badge', function () {
|
648
|
+
getComponent();
|
649
|
+
_userEvent["default"].tab();
|
650
|
+
var options = _testWrapper.screen.getAllByRole('option');
|
651
|
+
var firstOption = options[0];
|
652
|
+
var secondOption = options[1];
|
653
|
+
firstOption.click();
|
654
|
+
secondOption.click();
|
655
|
+
var badge1 = _testWrapper.screen.getByText(items[0].name);
|
656
|
+
var badge2 = _testWrapper.screen.getByText(items[1].name);
|
657
|
+
expect(badge1).toBeInTheDocument();
|
658
|
+
expect(badge2).toBeInTheDocument();
|
659
|
+
_userEvent["default"].tab({
|
660
|
+
shift: true
|
661
|
+
});
|
662
|
+
var deleteButton1 = badge1.nextSibling;
|
663
|
+
var deleteButton2 = badge2.nextSibling;
|
664
|
+
expect(deleteButton2).toHaveClass('is-focused');
|
665
|
+
_testWrapper.fireEvent.keyDown(deleteButton2, {
|
666
|
+
key: 'Enter'
|
667
|
+
});
|
668
|
+
_testWrapper.fireEvent.keyUp(deleteButton2, {
|
669
|
+
key: 'Enter'
|
670
|
+
});
|
671
|
+
expect(badge2).not.toBeInTheDocument();
|
672
|
+
expect(deleteButton1).toHaveClass('is-focused');
|
623
673
|
});
|
@@ -11,12 +11,14 @@ import _slicedToArray from "@babel/runtime-corejs3/helpers/esm/slicedToArray";
|
|
11
11
|
import _objectWithoutProperties from "@babel/runtime-corejs3/helpers/esm/objectWithoutProperties";
|
12
12
|
var _excluded = ["defaultSelectedKeys", "direction", "disabledKeys", "containerProps", "hasAutoFocus", "hasNoStatusIndicator", "helperText", "inputProps", "isDisabled", "isNotFlippable", "isReadOnly", "isRequired", "items", "label", "mode", "onBlur", "onFocus", "onInputChange", "onKeyDown", "onKeyUp", "onOpenChange", "onSelectionChange", "placeholder", "readOnlyKeys", "selectedKeys", "scrollBoxProps", "status"];
|
13
13
|
function ownKeys(object, enumerableOnly) { var keys = _Object$keys(object); if (_Object$getOwnPropertySymbols) { var symbols = _Object$getOwnPropertySymbols(object); enumerableOnly && (symbols = _filterInstanceProperty(symbols).call(symbols, function (sym) { return _Object$getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
|
14
|
-
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var
|
14
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var _context11, _context12; var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? _forEachInstanceProperty(_context11 = ownKeys(Object(source), !0)).call(_context11, function (key) { _defineProperty(target, key, source[key]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(target, _Object$getOwnPropertyDescriptors(source)) : _forEachInstanceProperty(_context12 = ownKeys(Object(source))).call(_context12, function (key) { _Object$defineProperty(target, key, _Object$getOwnPropertyDescriptor(source, key)); }); } return target; }
|
15
15
|
import _filterInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/filter";
|
16
16
|
import _includesInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/includes";
|
17
17
|
import _Array$from from "@babel/runtime-corejs3/core-js-stable/array/from";
|
18
18
|
import _trimInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/trim";
|
19
19
|
import _concatInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/concat";
|
20
|
+
import _reduceInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/reduce";
|
21
|
+
import _findIndexInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find-index";
|
20
22
|
import _mapInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/map";
|
21
23
|
import _findInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find";
|
22
24
|
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
|
@@ -46,7 +48,7 @@ import ListBox from '../ListBox';
|
|
46
48
|
*/
|
47
49
|
import { jsx as ___EmotionJSX } from "@emotion/react";
|
48
50
|
var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
49
|
-
var
|
51
|
+
var _context8, _listBoxRef$current;
|
50
52
|
var defaultSelectedKeys = props.defaultSelectedKeys,
|
51
53
|
direction = props.direction,
|
52
54
|
_props$disabledKeys = props.disabledKeys,
|
@@ -130,8 +132,13 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
130
132
|
var close = function close() {
|
131
133
|
return setIsOpen(false);
|
132
134
|
};
|
135
|
+
var closeBadgeRefs = useRef([]);
|
136
|
+
var inputWrapperRef = useRef();
|
133
137
|
var inputRef = useRef();
|
134
138
|
/* istanbul ignore next */
|
139
|
+
useImperativeHandle(ref, function () {
|
140
|
+
return inputWrapperRef.current;
|
141
|
+
});
|
135
142
|
useImperativeHandle(ref, function () {
|
136
143
|
return inputRef.current;
|
137
144
|
});
|
@@ -145,7 +152,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
145
152
|
placement: "".concat(direction, " end"),
|
146
153
|
scrollRef: listBoxRef,
|
147
154
|
shouldFlip: !isNotFlippable,
|
148
|
-
targetRef:
|
155
|
+
targetRef: inputWrapperRef
|
149
156
|
}),
|
150
157
|
overlayProps = _useOverlayPosition.overlayProps,
|
151
158
|
placement = _useOverlayPosition.placement,
|
@@ -169,12 +176,12 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
169
176
|
setMenuWidth = _useState10[1];
|
170
177
|
var onResize = useCallback(function () {
|
171
178
|
/* istanbul ignore next */
|
172
|
-
if (
|
173
|
-
setMenuWidth("".concat(
|
179
|
+
if (inputWrapperRef.current) {
|
180
|
+
setMenuWidth("".concat(inputWrapperRef.current.offsetWidth + 2, "px"));
|
174
181
|
}
|
175
|
-
}, [
|
182
|
+
}, [inputWrapperRef, isOpen, setMenuWidth]);
|
176
183
|
useResizeObserver({
|
177
|
-
ref:
|
184
|
+
ref: inputWrapperRef,
|
178
185
|
onResize: onResize
|
179
186
|
});
|
180
187
|
useLayoutEffect(onResize, [onResize]);
|
@@ -269,8 +276,25 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
269
276
|
}
|
270
277
|
if (onKeyDown) onKeyDown(e.nativeEvent);
|
271
278
|
};
|
272
|
-
var deleteItem = function deleteItem(key) {
|
279
|
+
var deleteItem = function deleteItem(key, e) {
|
280
|
+
var _context5;
|
281
|
+
var activeBadgesKeys = _reduceInstanceProperty(_context5 = closeBadgeRefs.current).call(_context5, function (result, item) {
|
282
|
+
if (item) {
|
283
|
+
result.push(item.dataset.item);
|
284
|
+
}
|
285
|
+
return result;
|
286
|
+
}, []);
|
273
287
|
selectionManager.toggleSelection(key);
|
288
|
+
if (e.pointerType !== 'keyboard') return;
|
289
|
+
if (activeBadgesKeys.length > 1) {
|
290
|
+
var badgeIndex = _findIndexInstanceProperty(activeBadgesKeys).call(activeBadgesKeys, function (item) {
|
291
|
+
return item === key;
|
292
|
+
});
|
293
|
+
var nextFocusBadgeIndex = badgeIndex === activeBadgesKeys.length - 1 ? badgeIndex - 1 : badgeIndex;
|
294
|
+
closeBadgeRefs.current[nextFocusBadgeIndex].focus();
|
295
|
+
} else {
|
296
|
+
inputRef.current.focus();
|
297
|
+
}
|
274
298
|
};
|
275
299
|
var readOnlyTextItem = function readOnlyTextItem(key, name) {
|
276
300
|
return ___EmotionJSX(Text, {
|
@@ -289,8 +313,8 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
289
313
|
}, name);
|
290
314
|
};
|
291
315
|
var readOnlyInputEntry = isReadOnly && (readOnlyKeys.length ? _mapInstanceProperty(readOnlyKeys).call(readOnlyKeys, function (key) {
|
292
|
-
var
|
293
|
-
var item = _findInstanceProperty(
|
316
|
+
var _context6, _context7;
|
317
|
+
var item = _findInstanceProperty(_context6 = _concatInstanceProperty(_context7 = []).call(_context7, initialItems, customItems)).call(_context6, function (el) {
|
294
318
|
return el.key === key;
|
295
319
|
});
|
296
320
|
if (item) {
|
@@ -320,7 +344,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
320
344
|
}
|
321
345
|
return null;
|
322
346
|
});
|
323
|
-
var multivaluesFieldBadge = function multivaluesFieldBadge(item) {
|
347
|
+
var multivaluesFieldBadge = function multivaluesFieldBadge(item, index) {
|
324
348
|
return ___EmotionJSX(Badge, _extends({
|
325
349
|
key: item.key,
|
326
350
|
role: "presentation",
|
@@ -330,9 +354,14 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
330
354
|
slots: item.slots
|
331
355
|
}, item.badgeProps), ___EmotionJSX(IconButton, _extends({
|
332
356
|
"aria-label": "delete ".concat(item.name),
|
333
|
-
|
334
|
-
|
357
|
+
"data-item": item.name,
|
358
|
+
onPress: function onPress(e) {
|
359
|
+
return deleteItem(item.key, e);
|
335
360
|
},
|
361
|
+
ref: function ref(el) {
|
362
|
+
return closeBadgeRefs.current[index] = el;
|
363
|
+
} // eslint-disable-line
|
364
|
+
,
|
336
365
|
variant: "badge.deleteButton"
|
337
366
|
}, item.buttonProps), ___EmotionJSX(Icon, {
|
338
367
|
icon: Clear,
|
@@ -343,13 +372,13 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
343
372
|
}
|
344
373
|
})));
|
345
374
|
};
|
346
|
-
var selectedItems = ___EmotionJSX(React.Fragment, null, _mapInstanceProperty(
|
347
|
-
var
|
348
|
-
var item = _findInstanceProperty(
|
375
|
+
var selectedItems = ___EmotionJSX(React.Fragment, null, _mapInstanceProperty(_context8 = _Array$from(selectionManager.selectedKeys)).call(_context8, function (key, i) {
|
376
|
+
var _context9, _context10;
|
377
|
+
var item = _findInstanceProperty(_context9 = _concatInstanceProperty(_context10 = []).call(_context10, initialItems, customItems)).call(_context9, function (el) {
|
349
378
|
return el.key === key;
|
350
379
|
});
|
351
380
|
if (item) {
|
352
|
-
return multivaluesFieldBadge(item);
|
381
|
+
return multivaluesFieldBadge(item, i);
|
353
382
|
}
|
354
383
|
return null;
|
355
384
|
}));
|
@@ -374,7 +403,8 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
374
403
|
'aria-activedescendant': activeDescendant,
|
375
404
|
'aria-controls': (_listBoxRef$current = listBoxRef.current) === null || _listBoxRef$current === void 0 ? void 0 : _listBoxRef$current.id,
|
376
405
|
'aria-expanded': isOpen,
|
377
|
-
role: 'combobox'
|
406
|
+
role: 'combobox',
|
407
|
+
ref: inputRef
|
378
408
|
},
|
379
409
|
hasAutoFocus: hasAutoFocus,
|
380
410
|
hasNoStatusIndicator: hasNoStatusIndicator,
|
@@ -384,7 +414,7 @@ var MultivaluesField = /*#__PURE__*/forwardRef(function (props, ref) {
|
|
384
414
|
label: label,
|
385
415
|
placeholder: placeholder,
|
386
416
|
wrapperProps: {
|
387
|
-
ref:
|
417
|
+
ref: inputWrapperRef,
|
388
418
|
variant: 'forms.input.multivaluesWrapper',
|
389
419
|
sx: isReadOnly && {
|
390
420
|
boxShadow: 'inset 0 0 0 100px #e5e9f8',
|
@@ -617,4 +617,54 @@ test('in non-restrictive mode the value should be trimmed', function () {
|
|
617
617
|
expect(badge).not.toBeInTheDocument();
|
618
618
|
expect(trimmedBadge).toBeInTheDocument();
|
619
619
|
expect(input).toHaveValue('');
|
620
|
+
});
|
621
|
+
test('deleting a single badge via keyboard moves focus to the input', function () {
|
622
|
+
getComponent();
|
623
|
+
var input = screen.getByRole('combobox');
|
624
|
+
userEvent.tab();
|
625
|
+
var options = screen.getAllByRole('option');
|
626
|
+
var firstOption = options[0];
|
627
|
+
firstOption.click();
|
628
|
+
var badge = screen.getByText(items[0].name);
|
629
|
+
expect(badge).toBeInTheDocument();
|
630
|
+
userEvent.tab({
|
631
|
+
shift: true
|
632
|
+
});
|
633
|
+
var deleteButton = badge.nextSibling;
|
634
|
+
expect(deleteButton).toHaveClass('is-focused');
|
635
|
+
fireEvent.keyDown(deleteButton, {
|
636
|
+
key: 'Enter'
|
637
|
+
});
|
638
|
+
fireEvent.keyUp(deleteButton, {
|
639
|
+
key: 'Enter'
|
640
|
+
});
|
641
|
+
expect(badge).not.toBeInTheDocument();
|
642
|
+
expect(input).toHaveClass('is-focused');
|
643
|
+
});
|
644
|
+
test('deleting the last badge via keyboard moves focus to the previous badge', function () {
|
645
|
+
getComponent();
|
646
|
+
userEvent.tab();
|
647
|
+
var options = screen.getAllByRole('option');
|
648
|
+
var firstOption = options[0];
|
649
|
+
var secondOption = options[1];
|
650
|
+
firstOption.click();
|
651
|
+
secondOption.click();
|
652
|
+
var badge1 = screen.getByText(items[0].name);
|
653
|
+
var badge2 = screen.getByText(items[1].name);
|
654
|
+
expect(badge1).toBeInTheDocument();
|
655
|
+
expect(badge2).toBeInTheDocument();
|
656
|
+
userEvent.tab({
|
657
|
+
shift: true
|
658
|
+
});
|
659
|
+
var deleteButton1 = badge1.nextSibling;
|
660
|
+
var deleteButton2 = badge2.nextSibling;
|
661
|
+
expect(deleteButton2).toHaveClass('is-focused');
|
662
|
+
fireEvent.keyDown(deleteButton2, {
|
663
|
+
key: 'Enter'
|
664
|
+
});
|
665
|
+
fireEvent.keyUp(deleteButton2, {
|
666
|
+
key: 'Enter'
|
667
|
+
});
|
668
|
+
expect(badge2).not.toBeInTheDocument();
|
669
|
+
expect(deleteButton1).toHaveClass('is-focused');
|
620
670
|
});
|