@patternfly/react-core 6.0.0-alpha.69 → 6.0.0-alpha.70
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 +6 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/Text/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/Tile/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
- package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
- package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -0
- package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/styles/package.json +1 -1
- package/dist/dynamic-modules.json +0 -3
- package/dist/esm/components/DualListSelector/DualListSelector.d.ts +4 -112
- package/dist/esm/components/DualListSelector/DualListSelector.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelector.js +3 -433
- package/dist/esm/components/DualListSelector/DualListSelector.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorContext.d.ts +0 -1
- package/dist/esm/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorContext.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorControl.js +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorControl.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorControlsWrapper.d.ts +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorControlsWrapper.js +1 -0
- package/dist/esm/components/DualListSelector/DualListSelectorControlsWrapper.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorList.d.ts +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorList.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorList.js +2 -7
- package/dist/esm/components/DualListSelector/DualListSelectorList.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorListItem.d.ts +4 -4
- package/dist/esm/components/DualListSelector/DualListSelectorListItem.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.d.ts +4 -6
- package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.js +3 -4
- package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorPane.d.ts +1 -22
- package/dist/esm/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorPane.js +6 -66
- package/dist/esm/components/DualListSelector/DualListSelectorPane.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorTree.d.ts +15 -15
- package/dist/esm/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.d.ts +7 -7
- package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/index.d.ts +0 -2
- package/dist/esm/components/DualListSelector/index.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/index.js +0 -2
- package/dist/esm/components/DualListSelector/index.js.map +1 -1
- package/dist/esm/deprecated/components/DualListSelector/DualListSelector.d.ts +131 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelector.d.ts.map +1 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelector.js +453 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelector.js.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorContext.d.ts +1 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorContext.js.map +1 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorControl.d.ts.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorControl.js +1 -1
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorControl.js.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorControlsWrapper.d.ts +1 -1
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorControlsWrapper.js +0 -1
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorControlsWrapper.js.map +1 -0
- package/dist/{js/next → esm/deprecated}/components/DualListSelector/DualListSelectorList.d.ts +1 -1
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorList.d.ts.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorList.js +7 -2
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorList.js.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorListItem.d.ts +4 -4
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorListItem.d.ts.map +1 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorListItem.js.map +1 -0
- package/dist/{js/next → esm/deprecated}/components/DualListSelector/DualListSelectorListWrapper.d.ts +6 -4
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorListWrapper.js +4 -3
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorPane.d.ts +52 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorPane.js +87 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorPane.js.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorTree.d.ts +15 -15
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorTree.js.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorTreeItem.d.ts +7 -7
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -0
- package/dist/esm/deprecated/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/index.d.ts +1 -0
- package/dist/esm/deprecated/components/DualListSelector/index.d.ts.map +1 -0
- package/dist/esm/{next → deprecated}/components/DualListSelector/index.js +1 -0
- package/dist/esm/deprecated/components/DualListSelector/index.js.map +1 -0
- package/dist/esm/deprecated/components/DualListSelector/treeUtils.d.ts.map +1 -0
- package/dist/esm/deprecated/components/DualListSelector/treeUtils.js.map +1 -0
- package/dist/esm/deprecated/components/index.d.ts +1 -0
- package/dist/esm/deprecated/components/index.d.ts.map +1 -1
- package/dist/esm/deprecated/components/index.js +1 -0
- package/dist/esm/deprecated/components/index.js.map +1 -1
- package/dist/esm/next/components/index.d.ts +0 -1
- package/dist/esm/next/components/index.d.ts.map +1 -1
- package/dist/esm/next/components/index.js +1 -1
- package/dist/esm/next/components/index.js.map +1 -1
- package/dist/esm/next/index.d.ts +0 -1
- package/dist/esm/next/index.d.ts.map +1 -1
- package/dist/esm/next/index.js +1 -1
- package/dist/esm/next/index.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelector.d.ts +4 -112
- package/dist/js/components/DualListSelector/DualListSelector.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelector.js +3 -433
- package/dist/js/components/DualListSelector/DualListSelector.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorContext.d.ts +0 -1
- package/dist/js/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorContext.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorControl.js +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorControl.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorControlsWrapper.d.ts +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorControlsWrapper.js +1 -0
- package/dist/js/components/DualListSelector/DualListSelectorControlsWrapper.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorList.d.ts +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorList.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorList.js +2 -7
- package/dist/js/components/DualListSelector/DualListSelectorList.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorListItem.d.ts +4 -4
- package/dist/js/components/DualListSelector/DualListSelectorListItem.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorListWrapper.d.ts +4 -6
- package/dist/js/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorListWrapper.js +3 -4
- package/dist/js/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorPane.d.ts +1 -22
- package/dist/js/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorPane.js +5 -65
- package/dist/js/components/DualListSelector/DualListSelectorPane.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorTree.d.ts +15 -15
- package/dist/js/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorTreeItem.d.ts +7 -7
- package/dist/js/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/index.d.ts +0 -2
- package/dist/js/components/DualListSelector/index.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/index.js +0 -2
- package/dist/js/components/DualListSelector/index.js.map +1 -1
- package/dist/js/deprecated/components/DualListSelector/DualListSelector.d.ts +131 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelector.d.ts.map +1 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelector.js +456 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelector.js.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorContext.d.ts +1 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorContext.js.map +1 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorControl.d.ts.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorControl.js +1 -1
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorControl.js.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorControlsWrapper.d.ts +1 -1
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorControlsWrapper.js +0 -1
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorControlsWrapper.js.map +1 -0
- package/dist/{esm/next → js/deprecated}/components/DualListSelector/DualListSelectorList.d.ts +1 -1
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorList.d.ts.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorList.js +7 -2
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorList.js.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorListItem.d.ts +4 -4
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorListItem.d.ts.map +1 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorListItem.js.map +1 -0
- package/dist/{esm/next → js/deprecated}/components/DualListSelector/DualListSelectorListWrapper.d.ts +6 -4
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorListWrapper.js +4 -3
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorPane.d.ts +52 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorPane.js +91 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorPane.js.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorTree.d.ts +15 -15
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorTree.js.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorTreeItem.d.ts +7 -7
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -0
- package/dist/js/deprecated/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/index.d.ts +1 -0
- package/dist/js/deprecated/components/DualListSelector/index.d.ts.map +1 -0
- package/dist/js/{next → deprecated}/components/DualListSelector/index.js +1 -0
- package/dist/js/deprecated/components/DualListSelector/index.js.map +1 -0
- package/dist/js/deprecated/components/DualListSelector/treeUtils.d.ts.map +1 -0
- package/dist/js/deprecated/components/DualListSelector/treeUtils.js.map +1 -0
- package/dist/js/deprecated/components/index.d.ts +1 -0
- package/dist/js/deprecated/components/index.d.ts.map +1 -1
- package/dist/js/deprecated/components/index.js +1 -0
- package/dist/js/deprecated/components/index.js.map +1 -1
- package/dist/js/next/components/index.d.ts +0 -1
- package/dist/js/next/components/index.d.ts.map +1 -1
- package/dist/js/next/components/index.js +0 -3
- package/dist/js/next/components/index.js.map +1 -1
- package/dist/js/next/index.d.ts +0 -1
- package/dist/js/next/index.d.ts.map +1 -1
- package/dist/js/next/index.js +0 -3
- package/dist/js/next/index.js.map +1 -1
- package/dist/umd/assets/{output-D0meVdH2.css → output-BcpwRLsL.css} +7486 -7486
- package/dist/umd/react-core.min.js +2 -2
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +2 -2
- package/single-packages.config.json +1 -1
- package/src/components/DualListSelector/DualListSelector.tsx +7 -752
- package/src/components/DualListSelector/DualListSelectorContext.ts +0 -1
- package/src/components/DualListSelector/DualListSelectorControl.tsx +1 -1
- package/src/components/DualListSelector/DualListSelectorControlsWrapper.tsx +2 -1
- package/src/components/DualListSelector/DualListSelectorList.tsx +3 -20
- package/src/components/DualListSelector/DualListSelectorListItem.tsx +4 -4
- package/src/components/DualListSelector/DualListSelectorListWrapper.tsx +6 -10
- package/src/components/DualListSelector/DualListSelectorPane.tsx +41 -192
- package/src/components/DualListSelector/DualListSelectorTree.tsx +15 -15
- package/src/components/DualListSelector/DualListSelectorTreeItem.tsx +7 -7
- package/src/components/DualListSelector/__tests__/DualListSelector.test.tsx +6 -45
- package/src/components/DualListSelector/__tests__/__snapshots__/DualListSelector.test.tsx.snap +52 -1715
- package/src/components/DualListSelector/examples/DualListSelector.md +27 -42
- package/src/components/DualListSelector/examples/DualListSelectorBasic.tsx +146 -19
- package/src/components/DualListSelector/examples/DualListSelectorBasicSearch.tsx +202 -22
- package/src/components/DualListSelector/examples/DualListSelectorBasicTooltips.tsx +155 -28
- package/src/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +298 -121
- package/src/components/DualListSelector/index.ts +0 -2
- package/src/deprecated/components/DualListSelector/DualListSelector.tsx +795 -0
- package/src/{next → deprecated}/components/DualListSelector/DualListSelectorContext.ts +1 -0
- package/src/{next → deprecated}/components/DualListSelector/DualListSelectorControl.tsx +1 -1
- package/src/{next → deprecated}/components/DualListSelector/DualListSelectorControlsWrapper.tsx +1 -2
- package/src/{next → deprecated}/components/DualListSelector/DualListSelectorList.tsx +20 -3
- package/src/{next → deprecated}/components/DualListSelector/DualListSelectorListItem.tsx +4 -4
- package/src/{next → deprecated}/components/DualListSelector/DualListSelectorListWrapper.tsx +10 -6
- package/src/deprecated/components/DualListSelector/DualListSelectorPane.tsx +245 -0
- package/src/{next → deprecated}/components/DualListSelector/DualListSelectorTree.tsx +15 -15
- package/src/{next → deprecated}/components/DualListSelector/DualListSelectorTreeItem.tsx +7 -7
- package/src/deprecated/components/DualListSelector/__tests__/DualListSelector.test.tsx +65 -0
- package/src/deprecated/components/DualListSelector/__tests__/__snapshots__/DualListSelector.test.tsx.snap +1785 -0
- package/src/{next → deprecated}/components/DualListSelector/examples/DualListSelector.md +56 -28
- package/src/deprecated/components/DualListSelector/examples/DualListSelectorBasic.tsx +30 -0
- package/src/deprecated/components/DualListSelector/examples/DualListSelectorBasicSearch.tsx +31 -0
- package/src/deprecated/components/DualListSelector/examples/DualListSelectorBasicTooltips.tsx +38 -0
- package/src/deprecated/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +93 -0
- package/src/{components → deprecated/components}/DualListSelector/examples/DualListSelectorComposable.tsx +32 -30
- package/src/{components → deprecated/components}/DualListSelector/examples/DualListSelectorComposableDragDrop.tsx +35 -32
- package/src/{components → deprecated/components}/DualListSelector/examples/DualListSelectorComposableTree.tsx +29 -27
- package/src/{components → deprecated/components}/DualListSelector/examples/DualListSelectorTreeExample.tsx +9 -6
- package/src/{next → deprecated}/components/DualListSelector/index.ts +1 -0
- package/src/deprecated/components/index.ts +1 -0
- package/src/next/components/index.ts +0 -1
- package/src/next/index.ts +0 -1
- package/dist/dynamic/next/components/DualListSelector/package.json +0 -1
- package/dist/dynamic/next/components/package.json +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelector.d.ts +0 -23
- package/dist/esm/next/components/DualListSelector/DualListSelector.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelector.js +0 -23
- package/dist/esm/next/components/DualListSelector/DualListSelector.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorContext.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorContext.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorControl.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorControl.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorList.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorList.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorPane.d.ts +0 -31
- package/dist/esm/next/components/DualListSelector/DualListSelectorPane.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorPane.js +0 -27
- package/dist/esm/next/components/DualListSelector/DualListSelectorPane.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorTree.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorTree.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/index.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/index.js.map +0 -1
- package/dist/esm/next/components/DualListSelector/treeUtils.d.ts.map +0 -1
- package/dist/esm/next/components/DualListSelector/treeUtils.js.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelector.d.ts +0 -23
- package/dist/js/next/components/DualListSelector/DualListSelector.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelector.js +0 -26
- package/dist/js/next/components/DualListSelector/DualListSelector.js.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorContext.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorContext.js.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorControl.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorControl.js.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.js.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorList.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorList.js.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorListItem.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorListItem.js.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.js.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorPane.d.ts +0 -31
- package/dist/js/next/components/DualListSelector/DualListSelectorPane.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorPane.js +0 -31
- package/dist/js/next/components/DualListSelector/DualListSelectorPane.js.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorTree.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorTree.js.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.js.map +0 -1
- package/dist/js/next/components/DualListSelector/index.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/index.js.map +0 -1
- package/dist/js/next/components/DualListSelector/treeUtils.d.ts.map +0 -1
- package/dist/js/next/components/DualListSelector/treeUtils.js.map +0 -1
- package/src/next/components/DualListSelector/DualListSelector.tsx +0 -50
- package/src/next/components/DualListSelector/DualListSelectorPane.tsx +0 -94
- package/src/next/components/DualListSelector/__tests__/DualListSelector.test.tsx +0 -26
- package/src/next/components/DualListSelector/__tests__/__snapshots__/DualListSelector.test.tsx.snap +0 -122
- package/src/next/components/DualListSelector/examples/DualListSelectorBasic.tsx +0 -157
- package/src/next/components/DualListSelector/examples/DualListSelectorBasicSearch.tsx +0 -211
- package/src/next/components/DualListSelector/examples/DualListSelectorBasicTooltips.tsx +0 -165
- package/src/next/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +0 -344
- /package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorContext.js +0 -0
- /package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorControl.d.ts +0 -0
- /package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorListItem.js +0 -0
- /package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorTree.js +0 -0
- /package/dist/esm/{next → deprecated}/components/DualListSelector/DualListSelectorTreeItem.js +0 -0
- /package/dist/esm/{next → deprecated}/components/DualListSelector/treeUtils.d.ts +0 -0
- /package/dist/esm/{next → deprecated}/components/DualListSelector/treeUtils.js +0 -0
- /package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorContext.js +0 -0
- /package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorControl.d.ts +0 -0
- /package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorListItem.js +0 -0
- /package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorTree.js +0 -0
- /package/dist/js/{next → deprecated}/components/DualListSelector/DualListSelectorTreeItem.js +0 -0
- /package/dist/js/{next → deprecated}/components/DualListSelector/treeUtils.d.ts +0 -0
- /package/dist/js/{next → deprecated}/components/DualListSelector/treeUtils.js +0 -0
- /package/src/{next/components → components}/DualListSelector/examples/DualListSelectorDragDrop.tsx +0 -0
- /package/src/{next/components → components}/DualListSelector/examples/DualListSelectorTree.tsx +0 -0
- /package/src/{next → deprecated}/components/DualListSelector/treeUtils.ts +0 -0
|
@@ -1,23 +1,7 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
|
|
3
3
|
import { css } from '@patternfly/react-styles';
|
|
4
|
-
import AngleDoubleLeftIcon from '@patternfly/react-icons/dist/esm/icons/angle-double-left-icon';
|
|
5
|
-
import AngleLeftIcon from '@patternfly/react-icons/dist/esm/icons/angle-left-icon';
|
|
6
|
-
import AngleDoubleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-double-right-icon';
|
|
7
|
-
import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon';
|
|
8
|
-
import { DualListSelectorPane } from './DualListSelectorPane';
|
|
9
4
|
import { GenerateId, PickOptional } from '../../helpers';
|
|
10
|
-
import { DualListSelectorTreeItemData } from './DualListSelectorTree';
|
|
11
|
-
import {
|
|
12
|
-
flattenTree,
|
|
13
|
-
flattenTreeWithFolders,
|
|
14
|
-
filterFolders,
|
|
15
|
-
filterTreeItems,
|
|
16
|
-
filterTreeItemsWithoutFolders,
|
|
17
|
-
filterRestTreeItems
|
|
18
|
-
} from './treeUtils';
|
|
19
|
-
import { DualListSelectorControlsWrapper } from './DualListSelectorControlsWrapper';
|
|
20
|
-
import { DualListSelectorControl } from './DualListSelectorControl';
|
|
21
5
|
import { DualListSelectorContext } from './DualListSelectorContext';
|
|
22
6
|
|
|
23
7
|
/** Acts as a container for all other DualListSelector sub-components when using a
|
|
@@ -27,763 +11,34 @@ import { DualListSelectorContext } from './DualListSelectorContext';
|
|
|
27
11
|
export interface DualListSelectorProps {
|
|
28
12
|
/** Additional classes applied to the dual list selector. */
|
|
29
13
|
className?: string;
|
|
30
|
-
/**
|
|
14
|
+
/** ID of the dual list selector. */
|
|
31
15
|
id?: string;
|
|
32
|
-
/** Flag indicating if the dual list selector uses trees instead of simple lists */
|
|
16
|
+
/** Flag indicating if the dual list selector uses trees instead of simple lists. */
|
|
33
17
|
isTree?: boolean;
|
|
34
|
-
/**
|
|
35
|
-
isDisabled?: boolean;
|
|
36
|
-
/** Content to be rendered in the dual list selector. Panes & controls will not be built dynamically when children are provided. */
|
|
18
|
+
/** Content to be rendered in the dual list selector. */
|
|
37
19
|
children?: React.ReactNode;
|
|
38
|
-
/** Title applied to the dynamically built available options pane. */
|
|
39
|
-
availableOptionsTitle?: string;
|
|
40
|
-
/** Options to display in the dynamically built available options pane. When using trees, the options should be in the DualListSelectorTreeItemData[] format. */
|
|
41
|
-
availableOptions?: React.ReactNode[] | DualListSelectorTreeItemData[];
|
|
42
|
-
/** Status message to display above the dynamically built available options pane. */
|
|
43
|
-
availableOptionsStatus?: string;
|
|
44
|
-
/** Actions to be displayed above the dynamically built available options pane. */
|
|
45
|
-
availableOptionsActions?: React.ReactNode[];
|
|
46
|
-
/** Title applied to the dynamically built chosen options pane. */
|
|
47
|
-
chosenOptionsTitle?: string;
|
|
48
|
-
/** Options to display in the dynamically built chosen options pane. When using trees, the options should be in the DualListSelectorTreeItemData[] format. */
|
|
49
|
-
chosenOptions?: React.ReactNode[] | DualListSelectorTreeItemData[];
|
|
50
|
-
/** Status message to display above the dynamically built chosen options pane.*/
|
|
51
|
-
chosenOptionsStatus?: string;
|
|
52
|
-
/** Actions to be displayed above the dynamically built chosen options pane. */
|
|
53
|
-
chosenOptionsActions?: React.ReactNode[];
|
|
54
|
-
/** Accessible label for the dynamically built controls between the two panes. */
|
|
55
|
-
controlsAriaLabel?: string;
|
|
56
|
-
/** Optional callback for the dynamically built add selected button */
|
|
57
|
-
addSelected?: (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void;
|
|
58
|
-
/** Accessible label for the dynamically built add selected button */
|
|
59
|
-
addSelectedAriaLabel?: string;
|
|
60
|
-
/** Tooltip content for the dynamically built add selected button */
|
|
61
|
-
addSelectedTooltip?: React.ReactNode;
|
|
62
|
-
/** Additonal tooltip properties for the dynamically built add selected tooltip */
|
|
63
|
-
addSelectedTooltipProps?: any;
|
|
64
|
-
/** Callback fired every time dynamically built options are chosen or removed */
|
|
65
|
-
onListChange?: (
|
|
66
|
-
event: React.MouseEvent<HTMLElement>,
|
|
67
|
-
newAvailableOptions: React.ReactNode[],
|
|
68
|
-
newChosenOptions: React.ReactNode[]
|
|
69
|
-
) => void;
|
|
70
|
-
/** Optional callback for the dynamically built add all button */
|
|
71
|
-
addAll?: (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void;
|
|
72
|
-
/** Accessible label for the dynamically built add all button */
|
|
73
|
-
addAllAriaLabel?: string;
|
|
74
|
-
/** Tooltip content for the dynamically built add all button */
|
|
75
|
-
addAllTooltip?: React.ReactNode;
|
|
76
|
-
/** Additonal tooltip properties for the dynamically built add all tooltip */
|
|
77
|
-
addAllTooltipProps?: any;
|
|
78
|
-
/** Optional callback for the dynamically built remove selected button */
|
|
79
|
-
removeSelected?: (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void;
|
|
80
|
-
/** Accessible label for the dynamically built remove selected button */
|
|
81
|
-
removeSelectedAriaLabel?: string;
|
|
82
|
-
/** Tooltip content for the dynamically built remove selected button */
|
|
83
|
-
removeSelectedTooltip?: React.ReactNode;
|
|
84
|
-
/** Additonal tooltip properties for the dynamically built remove selected tooltip */
|
|
85
|
-
removeSelectedTooltipProps?: any;
|
|
86
|
-
/** Optional callback for the dynamically built remove all button */
|
|
87
|
-
removeAll?: (newAvailableOptions: React.ReactNode[], newChosenOptions: React.ReactNode[]) => void;
|
|
88
|
-
/** Accessible label for the dynamically built remove all button */
|
|
89
|
-
removeAllAriaLabel?: string;
|
|
90
|
-
/** Tooltip content for the dynamically built remove all button */
|
|
91
|
-
removeAllTooltip?: React.ReactNode;
|
|
92
|
-
/** Additonal tooltip properties for the dynamically built remove all tooltip */
|
|
93
|
-
removeAllTooltipProps?: any;
|
|
94
|
-
/** Optional callback fired when a dynamically built option is selected */
|
|
95
|
-
onOptionSelect?: (
|
|
96
|
-
event: React.MouseEvent | React.ChangeEvent | React.KeyboardEvent,
|
|
97
|
-
index: number,
|
|
98
|
-
isChosen: boolean,
|
|
99
|
-
id: string,
|
|
100
|
-
itemData: any,
|
|
101
|
-
parentData: any
|
|
102
|
-
) => void;
|
|
103
|
-
/** Optional callback fired when a dynamically built option is checked */
|
|
104
|
-
onOptionCheck?: (
|
|
105
|
-
event: React.MouseEvent | React.ChangeEvent<HTMLInputElement> | React.KeyboardEvent,
|
|
106
|
-
checked: boolean,
|
|
107
|
-
checkedId: string,
|
|
108
|
-
newCheckedItems: string[]
|
|
109
|
-
) => void;
|
|
110
|
-
/** Flag indicating a search bar should be included above both the dynamically built available and chosen panes. */
|
|
111
|
-
isSearchable?: boolean;
|
|
112
|
-
/** Accessible label for the search input on the dynamically built available options pane. */
|
|
113
|
-
availableOptionsSearchAriaLabel?: string;
|
|
114
|
-
/** A callback for when the search input value for the dynamically built available options changes. */
|
|
115
|
-
onAvailableOptionsSearchInputChanged?: (event: React.FormEvent<HTMLInputElement>, value: string) => void;
|
|
116
|
-
/** Accessible label for the search input on the dynamically built chosen options pane. */
|
|
117
|
-
chosenOptionsSearchAriaLabel?: string;
|
|
118
|
-
/** A callback for when the search input value for the dynamically built chosen options changes. */
|
|
119
|
-
onChosenOptionsSearchInputChanged?: (event: React.FormEvent<HTMLInputElement>, value: string) => void;
|
|
120
|
-
/** Optional filter function for custom filtering based on search string. Used with a dynamically built search input. */
|
|
121
|
-
filterOption?: (option: React.ReactNode, input: string) => boolean;
|
|
122
20
|
}
|
|
123
21
|
|
|
124
|
-
|
|
125
|
-
availableOptions: React.ReactNode[];
|
|
126
|
-
availableOptionsSelected: number[];
|
|
127
|
-
availableFilteredOptions: React.ReactNode[];
|
|
128
|
-
chosenOptions: React.ReactNode[];
|
|
129
|
-
chosenOptionsSelected: number[];
|
|
130
|
-
chosenFilteredOptions: React.ReactNode[];
|
|
131
|
-
availableTreeFilteredOptions: string[];
|
|
132
|
-
availableTreeOptionsChecked: string[];
|
|
133
|
-
chosenTreeOptionsChecked: string[];
|
|
134
|
-
chosenTreeFilteredOptions: string[];
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
class DualListSelector extends React.Component<DualListSelectorProps, DualListSelectorState> {
|
|
22
|
+
class DualListSelector extends React.Component<DualListSelectorProps> {
|
|
138
23
|
static displayName = 'DualListSelector';
|
|
139
|
-
private addAllButtonRef = React.createRef<HTMLButtonElement>();
|
|
140
|
-
private addSelectedButtonRef = React.createRef<HTMLButtonElement>();
|
|
141
|
-
private removeSelectedButtonRef = React.createRef<HTMLButtonElement>();
|
|
142
|
-
private removeAllButtonRef = React.createRef<HTMLButtonElement>();
|
|
143
24
|
static defaultProps: PickOptional<DualListSelectorProps> = {
|
|
144
25
|
children: '',
|
|
145
|
-
|
|
146
|
-
availableOptionsTitle: 'Available options',
|
|
147
|
-
availableOptionsSearchAriaLabel: 'Available search input',
|
|
148
|
-
chosenOptions: [],
|
|
149
|
-
chosenOptionsTitle: 'Chosen options',
|
|
150
|
-
chosenOptionsSearchAriaLabel: 'Chosen search input',
|
|
151
|
-
controlsAriaLabel: 'Selector controls',
|
|
152
|
-
addAllAriaLabel: 'Add all',
|
|
153
|
-
addSelectedAriaLabel: 'Add selected',
|
|
154
|
-
removeSelectedAriaLabel: 'Remove selected',
|
|
155
|
-
removeAllAriaLabel: 'Remove all',
|
|
156
|
-
isTree: false,
|
|
157
|
-
isDisabled: false
|
|
26
|
+
isTree: false
|
|
158
27
|
};
|
|
159
28
|
|
|
160
|
-
// If the DualListSelector uses trees, concat the two initial arrays and merge duplicate folder IDs
|
|
161
|
-
private createMergedCopy() {
|
|
162
|
-
const copyOfAvailable = JSON.parse(JSON.stringify(this.props.availableOptions));
|
|
163
|
-
const copyOfChosen = JSON.parse(JSON.stringify(this.props.chosenOptions));
|
|
164
|
-
|
|
165
|
-
return this.props.isTree
|
|
166
|
-
? Object.values(
|
|
167
|
-
(copyOfAvailable as DualListSelectorTreeItemData[])
|
|
168
|
-
.concat(copyOfChosen as DualListSelectorTreeItemData[])
|
|
169
|
-
.reduce((mapObj: any, item: DualListSelectorTreeItemData) => {
|
|
170
|
-
const key = item.id;
|
|
171
|
-
if (mapObj[key]) {
|
|
172
|
-
// If map already has an item ID, add the dupe ID's children to the existing map
|
|
173
|
-
mapObj[key].children.push(...item.children);
|
|
174
|
-
} else {
|
|
175
|
-
// Else clone the item data
|
|
176
|
-
mapObj[key] = { ...item };
|
|
177
|
-
}
|
|
178
|
-
return mapObj;
|
|
179
|
-
}, {})
|
|
180
|
-
)
|
|
181
|
-
: null;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
29
|
constructor(props: DualListSelectorProps) {
|
|
185
30
|
super(props);
|
|
186
|
-
this.state = {
|
|
187
|
-
availableOptions: [...this.props.availableOptions] as React.ReactNode[],
|
|
188
|
-
availableOptionsSelected: [],
|
|
189
|
-
availableFilteredOptions: null,
|
|
190
|
-
availableTreeFilteredOptions: null,
|
|
191
|
-
chosenOptions: [...this.props.chosenOptions] as React.ReactNode[],
|
|
192
|
-
chosenOptionsSelected: [],
|
|
193
|
-
chosenFilteredOptions: null,
|
|
194
|
-
chosenTreeFilteredOptions: null,
|
|
195
|
-
availableTreeOptionsChecked: [],
|
|
196
|
-
chosenTreeOptionsChecked: []
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/** In dev environment, prevents circular structure during JSON stringification when
|
|
201
|
-
* options passed in to the dual list selector include HTML elements.
|
|
202
|
-
*/
|
|
203
|
-
replacer = (key: string, value: any) => {
|
|
204
|
-
if (key[0] === '_') {
|
|
205
|
-
return undefined;
|
|
206
|
-
}
|
|
207
|
-
return value;
|
|
208
|
-
};
|
|
209
|
-
|
|
210
|
-
componentDidUpdate() {
|
|
211
|
-
if (
|
|
212
|
-
JSON.stringify(this.props.availableOptions, this.replacer) !==
|
|
213
|
-
JSON.stringify(this.state.availableOptions, this.replacer) ||
|
|
214
|
-
JSON.stringify(this.props.chosenOptions, this.replacer) !==
|
|
215
|
-
JSON.stringify(this.state.chosenOptions, this.replacer)
|
|
216
|
-
) {
|
|
217
|
-
this.setState({
|
|
218
|
-
availableOptions: [...this.props.availableOptions] as React.ReactNode[],
|
|
219
|
-
chosenOptions: [...this.props.chosenOptions] as React.ReactNode[]
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
31
|
}
|
|
223
32
|
|
|
224
|
-
onFilterUpdate = (newFilteredOptions: React.ReactNode[], paneType: string, isSearchReset: boolean) => {
|
|
225
|
-
const { isTree } = this.props;
|
|
226
|
-
if (paneType === 'available') {
|
|
227
|
-
if (isSearchReset) {
|
|
228
|
-
this.setState({
|
|
229
|
-
availableFilteredOptions: null,
|
|
230
|
-
availableTreeFilteredOptions: null
|
|
231
|
-
});
|
|
232
|
-
return;
|
|
233
|
-
}
|
|
234
|
-
if (isTree) {
|
|
235
|
-
this.setState({
|
|
236
|
-
availableTreeFilteredOptions: flattenTreeWithFolders(
|
|
237
|
-
newFilteredOptions as unknown as DualListSelectorTreeItemData[]
|
|
238
|
-
)
|
|
239
|
-
});
|
|
240
|
-
} else {
|
|
241
|
-
this.setState({
|
|
242
|
-
availableFilteredOptions: newFilteredOptions as React.ReactNode[]
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
} else if (paneType === 'chosen') {
|
|
246
|
-
if (isSearchReset) {
|
|
247
|
-
this.setState({
|
|
248
|
-
chosenFilteredOptions: null,
|
|
249
|
-
chosenTreeFilteredOptions: null
|
|
250
|
-
});
|
|
251
|
-
return;
|
|
252
|
-
}
|
|
253
|
-
if (isTree) {
|
|
254
|
-
this.setState({
|
|
255
|
-
chosenTreeFilteredOptions: flattenTreeWithFolders(
|
|
256
|
-
newFilteredOptions as unknown as DualListSelectorTreeItemData[]
|
|
257
|
-
)
|
|
258
|
-
});
|
|
259
|
-
} else {
|
|
260
|
-
this.setState({
|
|
261
|
-
chosenFilteredOptions: newFilteredOptions as React.ReactNode[]
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
};
|
|
266
|
-
|
|
267
|
-
addAllVisible = (event: React.MouseEvent<HTMLElement>) => {
|
|
268
|
-
this.setState((prevState) => {
|
|
269
|
-
const itemsToRemove = [] as React.ReactNode[];
|
|
270
|
-
const newAvailable = [] as React.ReactNode[];
|
|
271
|
-
const movedOptions = prevState.availableFilteredOptions || prevState.availableOptions;
|
|
272
|
-
prevState.availableOptions.forEach((value) => {
|
|
273
|
-
if (movedOptions.indexOf(value) !== -1) {
|
|
274
|
-
itemsToRemove.push(value);
|
|
275
|
-
} else {
|
|
276
|
-
newAvailable.push(value);
|
|
277
|
-
}
|
|
278
|
-
});
|
|
279
|
-
|
|
280
|
-
const newChosen = [...prevState.chosenOptions, ...itemsToRemove];
|
|
281
|
-
this.props.addAll && this.props.addAll(newAvailable, newChosen);
|
|
282
|
-
this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
|
|
283
|
-
|
|
284
|
-
return {
|
|
285
|
-
chosenOptions: newChosen,
|
|
286
|
-
chosenFilteredOptions: newChosen,
|
|
287
|
-
availableOptions: newAvailable,
|
|
288
|
-
availableFilteredOptions: newAvailable,
|
|
289
|
-
chosenOptionsSelected: [],
|
|
290
|
-
availableOptionsSelected: []
|
|
291
|
-
};
|
|
292
|
-
});
|
|
293
|
-
};
|
|
294
|
-
|
|
295
|
-
addAllTreeVisible = (event: React.MouseEvent<HTMLElement>) => {
|
|
296
|
-
this.setState((prevState) => {
|
|
297
|
-
const movedOptions =
|
|
298
|
-
prevState.availableTreeFilteredOptions ||
|
|
299
|
-
flattenTreeWithFolders(prevState.availableOptions as unknown as DualListSelectorTreeItemData[]);
|
|
300
|
-
const newAvailable = prevState.availableOptions
|
|
301
|
-
.map((opt) => Object.assign({}, opt))
|
|
302
|
-
.filter((item) =>
|
|
303
|
-
filterRestTreeItems(item as unknown as DualListSelectorTreeItemData, movedOptions)
|
|
304
|
-
) as React.ReactNode[];
|
|
305
|
-
|
|
306
|
-
const currChosen = flattenTree(prevState.chosenOptions as unknown as DualListSelectorTreeItemData[]);
|
|
307
|
-
const nextChosenOptions = currChosen.concat(movedOptions);
|
|
308
|
-
const newChosen = this.createMergedCopy()
|
|
309
|
-
.map((opt) => Object.assign({}, opt))
|
|
310
|
-
.filter((item) =>
|
|
311
|
-
filterTreeItemsWithoutFolders(item as DualListSelectorTreeItemData, nextChosenOptions)
|
|
312
|
-
) as React.ReactNode[];
|
|
313
|
-
|
|
314
|
-
this.props.addAll && this.props.addAll(newAvailable, newChosen);
|
|
315
|
-
this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
|
|
316
|
-
|
|
317
|
-
return {
|
|
318
|
-
chosenOptions: newChosen,
|
|
319
|
-
chosenFilteredOptions: newChosen,
|
|
320
|
-
availableOptions: newAvailable,
|
|
321
|
-
availableFilteredOptions: newAvailable,
|
|
322
|
-
availableTreeOptionsChecked: [],
|
|
323
|
-
chosenTreeOptionsChecked: []
|
|
324
|
-
};
|
|
325
|
-
});
|
|
326
|
-
};
|
|
327
|
-
|
|
328
|
-
addSelected = (event: React.MouseEvent<HTMLElement>) => {
|
|
329
|
-
this.setState((prevState) => {
|
|
330
|
-
const itemsToRemove = [] as React.ReactNode[];
|
|
331
|
-
const newAvailable = [] as React.ReactNode[];
|
|
332
|
-
prevState.availableOptions.forEach((value, index) => {
|
|
333
|
-
if (prevState.availableOptionsSelected.indexOf(index) !== -1) {
|
|
334
|
-
itemsToRemove.push(value);
|
|
335
|
-
} else {
|
|
336
|
-
newAvailable.push(value);
|
|
337
|
-
}
|
|
338
|
-
});
|
|
339
|
-
|
|
340
|
-
const newChosen = [...prevState.chosenOptions, ...itemsToRemove];
|
|
341
|
-
this.props.addSelected && this.props.addSelected(newAvailable, newChosen);
|
|
342
|
-
this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
|
|
343
|
-
|
|
344
|
-
return {
|
|
345
|
-
chosenOptionsSelected: [],
|
|
346
|
-
availableOptionsSelected: [],
|
|
347
|
-
chosenOptions: newChosen,
|
|
348
|
-
chosenFilteredOptions: newChosen,
|
|
349
|
-
availableOptions: newAvailable,
|
|
350
|
-
availableFilteredOptions: newAvailable
|
|
351
|
-
};
|
|
352
|
-
});
|
|
353
|
-
};
|
|
354
|
-
|
|
355
|
-
addTreeSelected = (event: React.MouseEvent<HTMLElement>) => {
|
|
356
|
-
this.setState((prevState) => {
|
|
357
|
-
// Remove selected available nodes from current available nodes
|
|
358
|
-
const newAvailable = prevState.availableOptions
|
|
359
|
-
.map((opt) => Object.assign({}, opt))
|
|
360
|
-
.filter((item) =>
|
|
361
|
-
filterRestTreeItems(item as unknown as DualListSelectorTreeItemData, prevState.availableTreeOptionsChecked)
|
|
362
|
-
);
|
|
363
|
-
|
|
364
|
-
// Get next chosen options from current + new nodes and remap from base
|
|
365
|
-
const currChosen = flattenTree(prevState.chosenOptions as unknown as DualListSelectorTreeItemData[]);
|
|
366
|
-
const nextChosenOptions = currChosen.concat(prevState.availableTreeOptionsChecked);
|
|
367
|
-
const newChosen = this.createMergedCopy()
|
|
368
|
-
.map((opt) => Object.assign({}, opt))
|
|
369
|
-
.filter((item) =>
|
|
370
|
-
filterTreeItemsWithoutFolders(item as DualListSelectorTreeItemData, nextChosenOptions)
|
|
371
|
-
) as React.ReactNode[];
|
|
372
|
-
|
|
373
|
-
this.props.addSelected && this.props.addSelected(newAvailable, newChosen);
|
|
374
|
-
this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
|
|
375
|
-
|
|
376
|
-
return {
|
|
377
|
-
availableTreeOptionsChecked: [],
|
|
378
|
-
chosenTreeOptionsChecked: [],
|
|
379
|
-
availableOptions: newAvailable,
|
|
380
|
-
chosenOptions: newChosen
|
|
381
|
-
};
|
|
382
|
-
});
|
|
383
|
-
};
|
|
384
|
-
|
|
385
|
-
removeAllVisible = (event: React.MouseEvent<HTMLElement>) => {
|
|
386
|
-
this.setState((prevState) => {
|
|
387
|
-
const itemsToRemove = [] as React.ReactNode[];
|
|
388
|
-
const newChosen = [] as React.ReactNode[];
|
|
389
|
-
const movedOptions = prevState.chosenFilteredOptions || prevState.chosenOptions;
|
|
390
|
-
prevState.chosenOptions.forEach((value) => {
|
|
391
|
-
if (movedOptions.indexOf(value) !== -1) {
|
|
392
|
-
itemsToRemove.push(value);
|
|
393
|
-
} else {
|
|
394
|
-
newChosen.push(value);
|
|
395
|
-
}
|
|
396
|
-
});
|
|
397
|
-
|
|
398
|
-
const newAvailable = [...prevState.availableOptions, ...itemsToRemove];
|
|
399
|
-
this.props.removeAll && this.props.removeAll(newAvailable, newChosen);
|
|
400
|
-
this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
|
|
401
|
-
|
|
402
|
-
return {
|
|
403
|
-
chosenOptions: newChosen,
|
|
404
|
-
chosenFilteredOptions: newChosen,
|
|
405
|
-
availableOptions: newAvailable,
|
|
406
|
-
availableFilteredOptions: newAvailable,
|
|
407
|
-
chosenOptionsSelected: [],
|
|
408
|
-
availableOptionsSelected: []
|
|
409
|
-
};
|
|
410
|
-
});
|
|
411
|
-
};
|
|
412
|
-
|
|
413
|
-
removeAllTreeVisible = (event: React.MouseEvent<HTMLElement>) => {
|
|
414
|
-
this.setState((prevState) => {
|
|
415
|
-
const movedOptions =
|
|
416
|
-
prevState.chosenTreeFilteredOptions ||
|
|
417
|
-
flattenTreeWithFolders(prevState.chosenOptions as unknown as DualListSelectorTreeItemData[]);
|
|
418
|
-
|
|
419
|
-
const newChosen = prevState.chosenOptions
|
|
420
|
-
.map((opt) => Object.assign({}, opt))
|
|
421
|
-
.filter((item) => filterRestTreeItems(item as unknown as DualListSelectorTreeItemData, movedOptions));
|
|
422
|
-
const currAvailable = flattenTree(prevState.availableOptions as unknown as DualListSelectorTreeItemData[]);
|
|
423
|
-
const nextAvailableOptions = currAvailable.concat(movedOptions);
|
|
424
|
-
const newAvailable = this.createMergedCopy()
|
|
425
|
-
.map((opt) => Object.assign({}, opt))
|
|
426
|
-
.filter((item) =>
|
|
427
|
-
filterTreeItemsWithoutFolders(item as DualListSelectorTreeItemData, nextAvailableOptions)
|
|
428
|
-
) as React.ReactNode[];
|
|
429
|
-
|
|
430
|
-
this.props.removeAll && this.props.removeAll(newAvailable, newChosen);
|
|
431
|
-
this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
|
|
432
|
-
|
|
433
|
-
return {
|
|
434
|
-
chosenOptions: newChosen,
|
|
435
|
-
availableOptions: newAvailable,
|
|
436
|
-
availableTreeOptionsChecked: [],
|
|
437
|
-
chosenTreeOptionsChecked: []
|
|
438
|
-
};
|
|
439
|
-
});
|
|
440
|
-
};
|
|
441
|
-
|
|
442
|
-
removeSelected = (event: React.MouseEvent<HTMLElement>) => {
|
|
443
|
-
this.setState((prevState) => {
|
|
444
|
-
const itemsToRemove = [] as React.ReactNode[];
|
|
445
|
-
const newChosen = [] as React.ReactNode[];
|
|
446
|
-
prevState.chosenOptions.forEach((value, index) => {
|
|
447
|
-
if (prevState.chosenOptionsSelected.indexOf(index) !== -1) {
|
|
448
|
-
itemsToRemove.push(value);
|
|
449
|
-
} else {
|
|
450
|
-
newChosen.push(value);
|
|
451
|
-
}
|
|
452
|
-
});
|
|
453
|
-
|
|
454
|
-
const newAvailable = [...prevState.availableOptions, ...itemsToRemove];
|
|
455
|
-
this.props.removeSelected && this.props.removeSelected(newAvailable, newChosen);
|
|
456
|
-
this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
|
|
457
|
-
|
|
458
|
-
return {
|
|
459
|
-
chosenOptionsSelected: [],
|
|
460
|
-
availableOptionsSelected: [],
|
|
461
|
-
chosenOptions: newChosen,
|
|
462
|
-
chosenFilteredOptions: newChosen,
|
|
463
|
-
availableOptions: newAvailable,
|
|
464
|
-
availableFilteredOptions: newAvailable
|
|
465
|
-
};
|
|
466
|
-
});
|
|
467
|
-
};
|
|
468
|
-
|
|
469
|
-
removeTreeSelected = (event: React.MouseEvent<HTMLElement>) => {
|
|
470
|
-
this.setState((prevState) => {
|
|
471
|
-
// Remove selected chosen nodes from current chosen nodes
|
|
472
|
-
const newChosen = prevState.chosenOptions
|
|
473
|
-
.map((opt) => Object.assign({}, opt))
|
|
474
|
-
.filter((item) =>
|
|
475
|
-
filterRestTreeItems(item as unknown as DualListSelectorTreeItemData, prevState.chosenTreeOptionsChecked)
|
|
476
|
-
);
|
|
477
|
-
|
|
478
|
-
// Get next chosen options from current and remap from base
|
|
479
|
-
const currAvailable = flattenTree(prevState.availableOptions as unknown as DualListSelectorTreeItemData[]);
|
|
480
|
-
const nextAvailableOptions = currAvailable.concat(prevState.chosenTreeOptionsChecked);
|
|
481
|
-
const newAvailable = this.createMergedCopy()
|
|
482
|
-
.map((opt) => Object.assign({}, opt))
|
|
483
|
-
.filter((item) =>
|
|
484
|
-
filterTreeItemsWithoutFolders(item as DualListSelectorTreeItemData, nextAvailableOptions)
|
|
485
|
-
) as React.ReactNode[];
|
|
486
|
-
|
|
487
|
-
this.props.removeSelected && this.props.removeSelected(newAvailable, newChosen);
|
|
488
|
-
this.props.onListChange && this.props.onListChange(event, newAvailable, newChosen);
|
|
489
|
-
|
|
490
|
-
return {
|
|
491
|
-
availableTreeOptionsChecked: [],
|
|
492
|
-
chosenTreeOptionsChecked: [],
|
|
493
|
-
availableOptions: newAvailable,
|
|
494
|
-
chosenOptions: newChosen
|
|
495
|
-
};
|
|
496
|
-
});
|
|
497
|
-
};
|
|
498
|
-
|
|
499
|
-
onOptionSelect = (
|
|
500
|
-
e: React.MouseEvent | React.ChangeEvent | React.KeyboardEvent,
|
|
501
|
-
index: number,
|
|
502
|
-
isChosen: boolean,
|
|
503
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
504
|
-
id?: string,
|
|
505
|
-
itemData?: any,
|
|
506
|
-
parentData?: any
|
|
507
|
-
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
508
|
-
) => {
|
|
509
|
-
this.setState((prevState) => {
|
|
510
|
-
const originalArray = isChosen ? prevState.chosenOptionsSelected : prevState.availableOptionsSelected;
|
|
511
|
-
|
|
512
|
-
let updatedArray = null;
|
|
513
|
-
if (originalArray.indexOf(index) !== -1) {
|
|
514
|
-
updatedArray = originalArray.filter((value) => value !== index);
|
|
515
|
-
} else {
|
|
516
|
-
updatedArray = [...originalArray, index];
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
return {
|
|
520
|
-
chosenOptionsSelected: isChosen ? updatedArray : prevState.chosenOptionsSelected,
|
|
521
|
-
availableOptionsSelected: isChosen ? prevState.availableOptionsSelected : updatedArray
|
|
522
|
-
};
|
|
523
|
-
});
|
|
524
|
-
|
|
525
|
-
this.props.onOptionSelect && this.props.onOptionSelect(e, index, isChosen, id, itemData, parentData);
|
|
526
|
-
};
|
|
527
|
-
|
|
528
|
-
isChecked = (treeItem: DualListSelectorTreeItemData, isChosen: boolean) =>
|
|
529
|
-
isChosen
|
|
530
|
-
? this.state.chosenTreeOptionsChecked.includes(treeItem.id)
|
|
531
|
-
: this.state.availableTreeOptionsChecked.includes(treeItem.id);
|
|
532
|
-
areAllDescendantsChecked = (treeItem: DualListSelectorTreeItemData, isChosen: boolean): boolean =>
|
|
533
|
-
treeItem.children
|
|
534
|
-
? treeItem.children.every((child) => this.areAllDescendantsChecked(child, isChosen))
|
|
535
|
-
: this.isChecked(treeItem, isChosen);
|
|
536
|
-
areSomeDescendantsChecked = (treeItem: DualListSelectorTreeItemData, isChosen: boolean): boolean =>
|
|
537
|
-
treeItem.children
|
|
538
|
-
? treeItem.children.some((child) => this.areSomeDescendantsChecked(child, isChosen))
|
|
539
|
-
: this.isChecked(treeItem, isChosen);
|
|
540
|
-
|
|
541
|
-
mapChecked = (item: DualListSelectorTreeItemData, isChosen: boolean): DualListSelectorTreeItemData => {
|
|
542
|
-
const hasCheck = this.areAllDescendantsChecked(item, isChosen);
|
|
543
|
-
item.isChecked = false;
|
|
544
|
-
|
|
545
|
-
if (hasCheck) {
|
|
546
|
-
item.isChecked = true;
|
|
547
|
-
} else {
|
|
548
|
-
const hasPartialCheck = this.areSomeDescendantsChecked(item, isChosen);
|
|
549
|
-
if (hasPartialCheck) {
|
|
550
|
-
item.isChecked = null;
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
|
|
554
|
-
if (item.children) {
|
|
555
|
-
return {
|
|
556
|
-
...item,
|
|
557
|
-
children: item.children.map((child) => this.mapChecked(child, isChosen))
|
|
558
|
-
};
|
|
559
|
-
}
|
|
560
|
-
return item;
|
|
561
|
-
};
|
|
562
|
-
|
|
563
|
-
onTreeOptionCheck = (
|
|
564
|
-
evt: React.MouseEvent | React.ChangeEvent<HTMLInputElement> | React.KeyboardEvent,
|
|
565
|
-
isChecked: boolean,
|
|
566
|
-
itemData: DualListSelectorTreeItemData,
|
|
567
|
-
isChosen: boolean
|
|
568
|
-
) => {
|
|
569
|
-
const { availableOptions, availableTreeFilteredOptions, chosenOptions, chosenTreeFilteredOptions } = this.state;
|
|
570
|
-
let panelOptions;
|
|
571
|
-
if (isChosen) {
|
|
572
|
-
if (chosenTreeFilteredOptions) {
|
|
573
|
-
panelOptions = chosenOptions
|
|
574
|
-
.map((opt) => Object.assign({}, opt))
|
|
575
|
-
.filter((item) =>
|
|
576
|
-
filterTreeItemsWithoutFolders(item as unknown as DualListSelectorTreeItemData, chosenTreeFilteredOptions)
|
|
577
|
-
);
|
|
578
|
-
} else {
|
|
579
|
-
panelOptions = chosenOptions;
|
|
580
|
-
}
|
|
581
|
-
} else {
|
|
582
|
-
if (availableTreeFilteredOptions) {
|
|
583
|
-
panelOptions = availableOptions
|
|
584
|
-
.map((opt) => Object.assign({}, opt))
|
|
585
|
-
.filter((item) =>
|
|
586
|
-
filterTreeItemsWithoutFolders(item as unknown as DualListSelectorTreeItemData, availableTreeFilteredOptions)
|
|
587
|
-
);
|
|
588
|
-
} else {
|
|
589
|
-
panelOptions = availableOptions;
|
|
590
|
-
}
|
|
591
|
-
}
|
|
592
|
-
const checkedOptionTree = panelOptions
|
|
593
|
-
.map((opt) => Object.assign({}, opt))
|
|
594
|
-
.filter((item) => filterTreeItems(item as unknown as DualListSelectorTreeItemData, [itemData.id]));
|
|
595
|
-
const flatTree = flattenTreeWithFolders(checkedOptionTree as unknown as DualListSelectorTreeItemData[]);
|
|
596
|
-
|
|
597
|
-
const prevChecked = isChosen ? this.state.chosenTreeOptionsChecked : this.state.availableTreeOptionsChecked;
|
|
598
|
-
let updatedChecked = [] as string[];
|
|
599
|
-
if (isChecked) {
|
|
600
|
-
updatedChecked = prevChecked.concat(flatTree.filter((id) => !prevChecked.includes(id)));
|
|
601
|
-
} else {
|
|
602
|
-
updatedChecked = prevChecked.filter((id) => !flatTree.includes(id));
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
this.setState(
|
|
606
|
-
(prevState) => ({
|
|
607
|
-
availableTreeOptionsChecked: isChosen ? prevState.availableTreeOptionsChecked : updatedChecked,
|
|
608
|
-
chosenTreeOptionsChecked: isChosen ? updatedChecked : prevState.chosenTreeOptionsChecked
|
|
609
|
-
}),
|
|
610
|
-
() => {
|
|
611
|
-
this.props.onOptionCheck && this.props.onOptionCheck(evt, isChecked, itemData.id, updatedChecked);
|
|
612
|
-
}
|
|
613
|
-
);
|
|
614
|
-
};
|
|
615
|
-
|
|
616
33
|
render() {
|
|
617
|
-
const {
|
|
618
|
-
availableOptionsTitle,
|
|
619
|
-
availableOptionsActions,
|
|
620
|
-
availableOptionsSearchAriaLabel,
|
|
621
|
-
className,
|
|
622
|
-
children,
|
|
623
|
-
chosenOptionsTitle,
|
|
624
|
-
chosenOptionsActions,
|
|
625
|
-
chosenOptionsSearchAriaLabel,
|
|
626
|
-
filterOption,
|
|
627
|
-
isSearchable,
|
|
628
|
-
chosenOptionsStatus,
|
|
629
|
-
availableOptionsStatus,
|
|
630
|
-
controlsAriaLabel,
|
|
631
|
-
addAllAriaLabel,
|
|
632
|
-
addSelectedAriaLabel,
|
|
633
|
-
removeSelectedAriaLabel,
|
|
634
|
-
removeAllAriaLabel,
|
|
635
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
636
|
-
availableOptions: consumerPassedAvailableOptions,
|
|
637
|
-
chosenOptions: consumerPassedChosenOptions,
|
|
638
|
-
removeSelected,
|
|
639
|
-
addAll,
|
|
640
|
-
removeAll,
|
|
641
|
-
addSelected,
|
|
642
|
-
onListChange,
|
|
643
|
-
onAvailableOptionsSearchInputChanged,
|
|
644
|
-
onChosenOptionsSearchInputChanged,
|
|
645
|
-
onOptionSelect,
|
|
646
|
-
onOptionCheck,
|
|
647
|
-
id,
|
|
648
|
-
isTree,
|
|
649
|
-
isDisabled,
|
|
650
|
-
addAllTooltip,
|
|
651
|
-
addAllTooltipProps,
|
|
652
|
-
addSelectedTooltip,
|
|
653
|
-
addSelectedTooltipProps,
|
|
654
|
-
removeAllTooltip,
|
|
655
|
-
removeAllTooltipProps,
|
|
656
|
-
removeSelectedTooltip,
|
|
657
|
-
removeSelectedTooltipProps,
|
|
658
|
-
...props
|
|
659
|
-
} = this.props;
|
|
660
|
-
const {
|
|
661
|
-
availableOptions,
|
|
662
|
-
chosenOptions,
|
|
663
|
-
chosenOptionsSelected,
|
|
664
|
-
availableOptionsSelected,
|
|
665
|
-
chosenTreeOptionsChecked,
|
|
666
|
-
availableTreeOptionsChecked
|
|
667
|
-
} = this.state;
|
|
668
|
-
const availableOptionsStatusToDisplay =
|
|
669
|
-
availableOptionsStatus ||
|
|
670
|
-
(isTree
|
|
671
|
-
? `${
|
|
672
|
-
filterFolders(availableOptions as unknown as DualListSelectorTreeItemData[], availableTreeOptionsChecked)
|
|
673
|
-
.length
|
|
674
|
-
} of ${flattenTree(availableOptions as unknown as DualListSelectorTreeItemData[]).length} items selected`
|
|
675
|
-
: `${availableOptionsSelected.length} of ${availableOptions.length} items selected`);
|
|
676
|
-
const chosenOptionsStatusToDisplay =
|
|
677
|
-
chosenOptionsStatus ||
|
|
678
|
-
(isTree
|
|
679
|
-
? `${
|
|
680
|
-
filterFolders(chosenOptions as unknown as DualListSelectorTreeItemData[], chosenTreeOptionsChecked).length
|
|
681
|
-
} of ${flattenTree(chosenOptions as unknown as DualListSelectorTreeItemData[]).length} items selected`
|
|
682
|
-
: `${chosenOptionsSelected.length} of ${chosenOptions.length} items selected`);
|
|
683
|
-
|
|
684
|
-
const available = (
|
|
685
|
-
isTree
|
|
686
|
-
? availableOptions.map((item) => this.mapChecked(item as unknown as DualListSelectorTreeItemData, false))
|
|
687
|
-
: availableOptions
|
|
688
|
-
) as React.ReactNode[];
|
|
689
|
-
const chosen = (
|
|
690
|
-
isTree
|
|
691
|
-
? chosenOptions.map((item) => this.mapChecked(item as unknown as DualListSelectorTreeItemData, true))
|
|
692
|
-
: chosenOptions
|
|
693
|
-
) as React.ReactNode[];
|
|
34
|
+
const { className, children, id, isTree, ...props } = this.props;
|
|
694
35
|
|
|
695
36
|
return (
|
|
696
37
|
<DualListSelectorContext.Provider value={{ isTree }}>
|
|
697
38
|
<GenerateId>
|
|
698
39
|
{(randomId) => (
|
|
699
40
|
<div className={css(styles.dualListSelector, className)} id={id || randomId} {...props}>
|
|
700
|
-
{children
|
|
701
|
-
<>
|
|
702
|
-
<DualListSelectorPane
|
|
703
|
-
isSearchable={isSearchable}
|
|
704
|
-
onFilterUpdate={this.onFilterUpdate}
|
|
705
|
-
searchInputAriaLabel={availableOptionsSearchAriaLabel}
|
|
706
|
-
filterOption={filterOption}
|
|
707
|
-
onSearchInputChanged={onAvailableOptionsSearchInputChanged}
|
|
708
|
-
status={availableOptionsStatusToDisplay}
|
|
709
|
-
title={availableOptionsTitle}
|
|
710
|
-
options={available}
|
|
711
|
-
selectedOptions={isTree ? availableTreeOptionsChecked : availableOptionsSelected}
|
|
712
|
-
onOptionSelect={this.onOptionSelect}
|
|
713
|
-
onOptionCheck={(e, isChecked, itemData) => this.onTreeOptionCheck(e, isChecked, itemData, false)}
|
|
714
|
-
actions={availableOptionsActions}
|
|
715
|
-
id={`${id || randomId}-available-pane`}
|
|
716
|
-
isDisabled={isDisabled}
|
|
717
|
-
/>
|
|
718
|
-
<DualListSelectorControlsWrapper aria-label={controlsAriaLabel}>
|
|
719
|
-
<DualListSelectorControl
|
|
720
|
-
isDisabled={
|
|
721
|
-
(isTree ? availableTreeOptionsChecked.length === 0 : availableOptionsSelected.length === 0) ||
|
|
722
|
-
isDisabled
|
|
723
|
-
}
|
|
724
|
-
onClick={isTree ? this.addTreeSelected : this.addSelected}
|
|
725
|
-
ref={this.addSelectedButtonRef}
|
|
726
|
-
aria-label={addSelectedAriaLabel}
|
|
727
|
-
tooltipContent={addSelectedTooltip}
|
|
728
|
-
tooltipProps={addSelectedTooltipProps}
|
|
729
|
-
>
|
|
730
|
-
<AngleRightIcon />
|
|
731
|
-
</DualListSelectorControl>
|
|
732
|
-
<DualListSelectorControl
|
|
733
|
-
isDisabled={availableOptions.length === 0 || isDisabled}
|
|
734
|
-
onClick={isTree ? this.addAllTreeVisible : this.addAllVisible}
|
|
735
|
-
ref={this.addAllButtonRef}
|
|
736
|
-
aria-label={addAllAriaLabel}
|
|
737
|
-
tooltipContent={addAllTooltip}
|
|
738
|
-
tooltipProps={addAllTooltipProps}
|
|
739
|
-
>
|
|
740
|
-
<AngleDoubleRightIcon />
|
|
741
|
-
</DualListSelectorControl>
|
|
742
|
-
<DualListSelectorControl
|
|
743
|
-
isDisabled={chosenOptions.length === 0 || isDisabled}
|
|
744
|
-
onClick={isTree ? this.removeAllTreeVisible : this.removeAllVisible}
|
|
745
|
-
aria-label={removeAllAriaLabel}
|
|
746
|
-
ref={this.removeAllButtonRef}
|
|
747
|
-
tooltipContent={removeAllTooltip}
|
|
748
|
-
tooltipProps={removeAllTooltipProps}
|
|
749
|
-
>
|
|
750
|
-
<AngleDoubleLeftIcon />
|
|
751
|
-
</DualListSelectorControl>
|
|
752
|
-
<DualListSelectorControl
|
|
753
|
-
onClick={isTree ? this.removeTreeSelected : this.removeSelected}
|
|
754
|
-
isDisabled={
|
|
755
|
-
(isTree ? chosenTreeOptionsChecked.length === 0 : chosenOptionsSelected.length === 0) ||
|
|
756
|
-
isDisabled
|
|
757
|
-
}
|
|
758
|
-
ref={this.removeSelectedButtonRef}
|
|
759
|
-
aria-label={removeSelectedAriaLabel}
|
|
760
|
-
tooltipContent={removeSelectedTooltip}
|
|
761
|
-
tooltipProps={removeSelectedTooltipProps}
|
|
762
|
-
>
|
|
763
|
-
<AngleLeftIcon />
|
|
764
|
-
</DualListSelectorControl>
|
|
765
|
-
</DualListSelectorControlsWrapper>
|
|
766
|
-
<DualListSelectorPane
|
|
767
|
-
isChosen
|
|
768
|
-
isSearchable={isSearchable}
|
|
769
|
-
onFilterUpdate={this.onFilterUpdate}
|
|
770
|
-
searchInputAriaLabel={chosenOptionsSearchAriaLabel}
|
|
771
|
-
filterOption={filterOption}
|
|
772
|
-
onSearchInputChanged={onChosenOptionsSearchInputChanged}
|
|
773
|
-
title={chosenOptionsTitle}
|
|
774
|
-
status={chosenOptionsStatusToDisplay}
|
|
775
|
-
options={chosen}
|
|
776
|
-
selectedOptions={isTree ? chosenTreeOptionsChecked : chosenOptionsSelected}
|
|
777
|
-
onOptionSelect={this.onOptionSelect}
|
|
778
|
-
onOptionCheck={(e, isChecked, itemData) => this.onTreeOptionCheck(e, isChecked, itemData, true)}
|
|
779
|
-
actions={chosenOptionsActions}
|
|
780
|
-
id={`${id || randomId}-chosen-pane`}
|
|
781
|
-
isDisabled={isDisabled}
|
|
782
|
-
/>
|
|
783
|
-
</>
|
|
784
|
-
) : (
|
|
785
|
-
children
|
|
786
|
-
)}
|
|
41
|
+
{children}
|
|
787
42
|
</div>
|
|
788
43
|
)}
|
|
789
44
|
</GenerateId>
|