1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | exports.DualListSelectorListWrapper = exports.DualListSelectorListWrapperBase = void 0;
|
4 | const tslib_1 = require("tslib");
|
5 | const React = tslib_1.__importStar(require("react"));
|
6 | const dual_list_selector_1 = tslib_1.__importDefault(require("@patternfly/react-styles/css/components/DualListSelector/dual-list-selector"));
|
7 | const react_styles_1 = require("@patternfly/react-styles");
|
8 | const helpers_1 = require("../../helpers");
|
9 | const DualListSelectorList_1 = require("./DualListSelectorList");
|
10 | const DualListSelectorContext_1 = require("./DualListSelectorContext");
|
11 | const DualListSelectorListWrapperBase = (_a) => {
|
12 | var { className, children, 'aria-labelledby': ariaLabelledBy, innerRef, options = [], selectedOptions = [], onOptionSelect, displayOption, id = helpers_1.getUniqueId('dual-list-selector-list'), isDisabled = false } = _a, props = tslib_1.__rest(_a, ["className", "children", 'aria-labelledby', "innerRef", "options", "selectedOptions", "onOptionSelect", "displayOption", "id", "isDisabled"]);
|
13 | const [focusedOption, setFocusedOption] = React.useState('');
|
14 | const menuRef = innerRef || React.useRef(null);
|
15 | const { isTree } = React.useContext(DualListSelectorContext_1.DualListSelectorContext);
|
16 |
|
17 |
|
18 | const handleKeys = (event) => {
|
19 | if (!menuRef.current ||
|
20 | (menuRef.current !== event.target.closest('.pf-c-dual-list-selector__menu') &&
|
21 | !Array.from(menuRef.current.getElementsByClassName('pf-c-dual-list-selector__menu')).includes(event.target.closest('.pf-c-dual-list-selector__menu')))) {
|
22 | return;
|
23 | }
|
24 | event.stopImmediatePropagation();
|
25 | const validOptions = isTree
|
26 | ? Array.from(menuRef.current.querySelectorAll('.pf-c-dual-list-selector__item-toggle, .pf-c-dual-list-selector__item-check > input'))
|
27 | : Array.from(menuRef.current.getElementsByTagName('LI')).filter(el => !el.classList.contains('pf-m-disabled'));
|
28 | const activeElement = document.activeElement;
|
29 | helpers_1.handleArrows(event, validOptions, (element) => activeElement.contains(element), (element) => {
|
30 | if (element.classList.contains('.pf-c-dual-list-selector__list-item')) {
|
31 | setFocusedOption(element.id);
|
32 | }
|
33 | else {
|
34 | setFocusedOption(element.closest('.pf-c-dual-list-selector__list-item').id);
|
35 | }
|
36 | return element;
|
37 | }, ['.pf-c-dual-list-selector__item-toggle', '.pf-c-dual-list-selector__item-check > input'], undefined, false, false, false);
|
38 | };
|
39 | React.useEffect(() => {
|
40 | window.addEventListener('keydown', handleKeys);
|
41 | return () => {
|
42 | window.removeEventListener('keydown', handleKeys);
|
43 | };
|
44 | }, [menuRef.current]);
|
45 | return (React.createElement("div", Object.assign({ className: react_styles_1.css(dual_list_selector_1.default.dualListSelectorMenu, className), ref: menuRef, tabIndex: 0 }, props),
|
46 | React.createElement(DualListSelectorContext_1.DualListSelectorListContext.Provider, { value: {
|
47 | setFocusedOption,
|
48 | isTree,
|
49 | focusedOption,
|
50 | ariaLabelledBy,
|
51 | displayOption,
|
52 | selectedOptions,
|
53 | id,
|
54 | options,
|
55 | onOptionSelect,
|
56 | isDisabled
|
57 | } }, children ? children : React.createElement(DualListSelectorList_1.DualListSelectorList, null))));
|
58 | };
|
59 | exports.DualListSelectorListWrapperBase = DualListSelectorListWrapperBase;
|
60 | exports.DualListSelectorListWrapperBase.displayName = 'DualListSelectorListWrapperBase';
|
61 | exports.DualListSelectorListWrapper = React.forwardRef((props, ref) => (React.createElement(exports.DualListSelectorListWrapperBase, Object.assign({ innerRef: ref }, props))));
|
62 | exports.DualListSelectorListWrapper.displayName = 'DualListSelectorListWrapper';
|
63 |
|
\ | No newline at end of file |