UNPKG

4.19 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.DualListSelectorListWrapper = exports.DualListSelectorListWrapperBase = void 0;
4const tslib_1 = require("tslib");
5const React = tslib_1.__importStar(require("react"));
6const dual_list_selector_1 = tslib_1.__importDefault(require("@patternfly/react-styles/css/components/DualListSelector/dual-list-selector"));
7const react_styles_1 = require("@patternfly/react-styles");
8const helpers_1 = require("../../helpers");
9const DualListSelectorList_1 = require("./DualListSelectorList");
10const DualListSelectorContext_1 = require("./DualListSelectorContext");
11const 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 // sets up keyboard focus handling for the dual list selector menu child of the pane. This keyboard
17 // handling is applied whether the pane is dynamically built or passed via the children prop.
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};
59exports.DualListSelectorListWrapperBase = DualListSelectorListWrapperBase;
60exports.DualListSelectorListWrapperBase.displayName = 'DualListSelectorListWrapperBase';
61exports.DualListSelectorListWrapper = React.forwardRef((props, ref) => (React.createElement(exports.DualListSelectorListWrapperBase, Object.assign({ innerRef: ref }, props))));
62exports.DualListSelectorListWrapper.displayName = 'DualListSelectorListWrapper';
63//# sourceMappingURL=DualListSelectorListWrapper.js.map
\No newline at end of file