superdesk-ui-framework 3.0.1-beta.2 → 3.0.1-beta.20
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/.vscode/settings.json +5 -0
- package/app/fonts/sd_icons.eot +0 -0
- package/app/fonts/sd_icons.svg +14 -7
- package/app/fonts/sd_icons.ttf +0 -0
- package/app/fonts/sd_icons.woff +0 -0
- package/app/img/SD-logo.svg +52 -0
- package/app/scripts/toggleBoxNext.js +1 -1
- package/app/styles/_accessibility.scss +1 -0
- package/app/styles/_big-icon-font.scss +3 -0
- package/app/styles/_boxed-list.scss +3 -0
- package/app/styles/_buttons.scss +1 -1
- package/app/styles/_content-divider.scss +63 -8
- package/app/styles/_hamburger.scss +160 -0
- package/app/styles/_helpers.scss +35 -5
- package/app/styles/_icon-font.scss +19 -9
- package/app/styles/_master-desk.scss +3 -2
- package/app/styles/_modals.scss +6 -3
- package/app/styles/_normalize.scss +4 -0
- package/app/styles/_sd-tag-input.scss +221 -296
- package/app/styles/_simple-list.scss +1 -0
- package/app/styles/_table-list.scss +115 -12
- package/app/styles/app.scss +4 -0
- package/app/styles/components/_list-item.scss +36 -17
- package/app/styles/components/_sd-collapse-box.scss +6 -6
- package/app/styles/components/_sd-grid-item.scss +30 -16
- package/app/styles/components/_sd-notification-panel.scss +48 -0
- package/app/styles/components/_sd-photo-preview.scss +3 -3
- package/app/styles/components/_sd-searchbar.scss +7 -0
- package/app/styles/design-tokens/_design-tokens-general.scss +3 -6
- package/app/styles/design-tokens/_new-colors.scss +16 -6
- package/app/styles/dropdowns/_basic-dropdown.scss +6 -0
- package/app/styles/form-elements/_forms-general.scss +81 -7
- package/app/styles/form-elements/_input-wrap.scss +138 -0
- package/app/styles/form-elements/_inputs.scss +577 -102
- package/app/styles/grids/_grid-layout.scss +147 -40
- package/app/styles/interface-elements/_side-panel.scss +1 -1
- package/app/styles/layout/_basic-layout.scss +2 -2
- package/app/styles/layout/_editor.scss +10 -4
- package/app/styles/menus/_sd-bottom-tabs.scss +70 -0
- package/app/styles/menus/_sd-left-navigation.scss +24 -1
- package/app/styles/menus/_sd-sidebar-menu.scss +10 -14
- package/app/styles/menus/_sd-top-menu.scss +19 -5
- package/app/styles/primereact/_pr-dialog.scss +1 -0
- package/app/styles/primereact/_pr-dropdown.scss +17 -3
- package/app/styles/primereact/_pr-menu.scss +6 -5
- package/app-typescript/components/Badge.tsx +3 -2
- package/app-typescript/components/ContentDivider.tsx +3 -0
- package/app-typescript/components/DatePicker.tsx +71 -36
- package/app-typescript/components/DonutChart.tsx +1 -1
- package/app-typescript/components/Dropdown.tsx +127 -82
- package/app-typescript/components/DurationInput.tsx +400 -0
- package/app-typescript/components/EmptyState.tsx +2 -1
- package/app-typescript/components/Form/FormLabel.tsx +8 -1
- package/app-typescript/components/Form/FormRowNew.tsx +41 -0
- package/app-typescript/components/Form/InputBase.tsx +95 -0
- package/app-typescript/components/Form/InputNew.tsx +107 -0
- package/app-typescript/components/Form/InputWrapper.tsx +79 -0
- package/app-typescript/components/Form/index.tsx +4 -0
- package/app-typescript/components/Icon.tsx +1 -1
- package/app-typescript/components/IconButton.tsx +5 -1
- package/app-typescript/components/Input.tsx +39 -42
- package/app-typescript/components/Label.tsx +49 -10
- package/app-typescript/components/Layouts/AuthoringContainer.tsx +2 -1
- package/app-typescript/components/Layouts/AuthoringInnerHeader.tsx +1 -1
- package/app-typescript/components/Layouts/AuthoringMain.tsx +4 -2
- package/app-typescript/components/Layouts/BottomBarAction.tsx +35 -0
- package/app-typescript/components/Layouts/CoreLayout.tsx +63 -0
- package/app-typescript/components/Layouts/CoreLayoutContainer.tsx +16 -0
- package/app-typescript/components/Layouts/CoreLayoutFooter.tsx +15 -0
- package/app-typescript/components/Layouts/CoreLayoutMain.tsx +22 -0
- package/app-typescript/components/Layouts/CoreLayoutOverlay.tsx +15 -0
- package/app-typescript/components/Layouts/CoreLayoutSlideInMenu.tsx +24 -0
- package/app-typescript/components/Layouts/CoreLayoutTopMenu.tsx +35 -0
- package/app-typescript/components/Layouts/HamburgerButton.tsx +41 -0
- package/app-typescript/components/Layouts/Layout.tsx +2 -2
- package/app-typescript/components/Layouts/MainMenu.tsx +101 -0
- package/app-typescript/components/Layouts/NotificationPanel.tsx +109 -0
- package/app-typescript/components/Layouts/index.tsx +12 -0
- package/app-typescript/components/LeftMenu.tsx +127 -116
- package/app-typescript/components/Lists/BoxedList.tsx +36 -4
- package/app-typescript/components/Lists/ContentList.tsx +38 -10
- package/app-typescript/components/Lists/TableList.tsx +283 -151
- package/app-typescript/components/Menu.tsx +31 -7
- package/app-typescript/components/Modal.tsx +5 -2
- package/app-typescript/components/MultiSelect.tsx +35 -5
- package/app-typescript/components/NavButton.tsx +4 -0
- package/app-typescript/components/Navigation/BottomNav.tsx +83 -0
- package/app-typescript/components/SearchBar.tsx +39 -12
- package/app-typescript/components/Select.tsx +27 -37
- package/app-typescript/components/SelectGrid.tsx +1 -1
- package/app-typescript/components/SelectWithTemplate.tsx +32 -7
- package/app-typescript/components/Skeleton.tsx +1 -1
- package/app-typescript/components/Spacer.tsx +87 -0
- package/app-typescript/components/Text/Time.tsx +34 -0
- package/app-typescript/components/TimePicker.tsx +38 -15
- package/app-typescript/components/Togglebox.tsx +1 -1
- package/app-typescript/components/Tooltip.tsx +7 -5
- package/app-typescript/components/TreeSelect.tsx +490 -208
- package/app-typescript/components/WithSizeObserver.tsx +88 -0
- package/app-typescript/dist/components/Alert.d.ts +16 -0
- package/app-typescript/dist/components/Autocomplete.d.ts +48 -0
- package/app-typescript/dist/components/Avatar.d.ts +33 -0
- package/app-typescript/dist/components/Badge.d.ts +13 -0
- package/app-typescript/dist/components/Button.d.ts +23 -0
- package/app-typescript/dist/components/ButtonGroup.d.ts +12 -0
- package/app-typescript/dist/components/CheckButtonGroup.d.ts +11 -0
- package/app-typescript/dist/components/CheckGroup.d.ts +9 -0
- package/app-typescript/dist/components/Checkbox.d.ts +19 -0
- package/app-typescript/dist/components/CheckboxButton.d.ts +19 -0
- package/app-typescript/dist/components/DatePicker.d.ts +37 -0
- package/app-typescript/dist/components/Divider.d.ts +9 -0
- package/app-typescript/dist/components/DonutChart.d.ts +12 -0
- package/app-typescript/dist/components/Dropdown.d.ts +28 -0
- package/app-typescript/dist/components/DropdownFirst.d.ts +42 -0
- package/app-typescript/dist/components/EmptyState.d.ts +11 -0
- package/app-typescript/dist/components/FormLabel.d.ts +9 -0
- package/app-typescript/dist/components/Genie.d.ts +13 -0
- package/app-typescript/dist/components/GridItem.d.ts +69 -0
- package/app-typescript/dist/components/GridList.d.ts +14 -0
- package/app-typescript/dist/components/HeadingText.d.ts +10 -0
- package/app-typescript/dist/components/HelloWorld.d.ts +8 -0
- package/app-typescript/dist/components/Icon.d.ts +12 -0
- package/app-typescript/dist/components/IconButton.d.ts +12 -0
- package/app-typescript/dist/components/IconLabel.d.ts +11 -0
- package/app-typescript/dist/components/Input.d.ts +24 -0
- package/app-typescript/dist/components/Label.d.ts +15 -0
- package/app-typescript/dist/components/LeftMenu.d.ts +26 -0
- package/app-typescript/dist/components/Loader.d.ts +8 -0
- package/app-typescript/dist/components/NavButton.d.ts +15 -0
- package/app-typescript/dist/components/Popover.d.ts +13 -0
- package/app-typescript/dist/components/PropsList.d.ts +15 -0
- package/app-typescript/dist/components/Radio.d.ts +19 -0
- package/app-typescript/dist/components/RadioButton.d.ts +20 -0
- package/app-typescript/dist/components/Select.d.ts +29 -0
- package/app-typescript/dist/components/SelectWithTemplate.d.ts +32 -0
- package/app-typescript/dist/components/SlidingToolbar.d.ts +8 -0
- package/app-typescript/dist/components/StrechBar.d.ts +4 -0
- package/app-typescript/dist/components/SubNav.d.ts +10 -0
- package/app-typescript/dist/components/Switch.d.ts +12 -0
- package/app-typescript/dist/components/TabCustom.d.ts +25 -0
- package/app-typescript/dist/components/TabList.d.ts +22 -0
- package/app-typescript/dist/components/Tag.d.ts +9 -0
- package/app-typescript/dist/components/TagInput.d.ts +7 -0
- package/app-typescript/dist/components/TagInputTest.d.ts +18 -0
- package/app-typescript/dist/components/TimePicker.d.ts +11 -0
- package/app-typescript/dist/components/Tooltip.d.ts +11 -0
- package/app-typescript/dist/components/_Positioner.d.ts +27 -0
- package/app-typescript/dist/index.d.ts +56 -0
- package/app-typescript/helpers.tsx +3 -0
- package/app-typescript/index.ts +8 -1
- package/dist/SD-logo.svg +52 -0
- package/dist/examples.bundle.css +941 -8
- package/dist/examples.bundle.js +71435 -66878
- package/dist/playgrounds/accessible-theme-test.html +1 -1
- package/dist/playgrounds/layout-test-2.html +1 -1
- package/dist/playgrounds/list-item-test.html +1 -1
- package/dist/playgrounds/master-desk.html +1 -1
- package/dist/playgrounds/media-carousel.html +1 -1
- package/dist/playgrounds/photo-desk.html +1 -1
- package/dist/playgrounds/planning.html +1 -1
- package/dist/playgrounds/publish.html +1 -1
- package/dist/playgrounds/publisher-content-analytics.html +1 -1
- package/dist/playgrounds/publisher-content-list-automatic.html +1 -1
- package/dist/playgrounds/publisher-content-list-manual.html +1 -1
- package/dist/playgrounds/publisher-content-lists.html +1 -1
- package/dist/playgrounds/publisher-dashboard.html +1 -1
- package/dist/playgrounds/publisher-output-control.html +1 -1
- package/dist/playgrounds/react-playgrounds/CoreLayout.tsx +156 -0
- package/dist/playgrounds/react-playgrounds/Index.tsx +1 -0
- package/dist/playgrounds/react-playgrounds/RundownEditor.tsx +26 -23
- package/dist/playgrounds/react-playgrounds/Rundowns.tsx +20 -21
- package/dist/playgrounds/react-playgrounds/SamsPlayground.tsx +12 -3
- package/dist/playgrounds/react-playgrounds/TestGround.tsx +415 -25
- package/dist/playgrounds/react-playgrounds/components/Layout.tsx +2 -2
- package/dist/playgrounds/swimlane-view.html +1 -1
- package/dist/playgrounds/toasts.html +1 -1
- package/dist/playgrounds/video-editor.html +1 -1
- package/dist/react/Badges.tsx +18 -0
- package/dist/react/ContentDivider.tsx +22 -18
- package/dist/react/ContentList.tsx +200 -18
- package/dist/react/DatePicker.tsx +31 -6
- package/dist/react/Dropdowns.tsx +580 -48
- package/dist/react/DurationInput.tsx +108 -0
- package/dist/react/Index.tsx +10 -0
- package/dist/react/Inputs.tsx +256 -8
- package/dist/react/Labels.tsx +51 -1
- package/dist/react/LeftNavigations.tsx +71 -44
- package/dist/react/MultiSelect.tsx +10 -2
- package/dist/react/SelectWithTemplate.tsx +6 -1
- package/dist/react/Selects.tsx +55 -0
- package/dist/react/TableList.tsx +77 -186
- package/dist/react/TimePicker.tsx +22 -12
- package/dist/react/Togglebox.tsx +1 -1
- package/dist/react/TreeSelect.tsx +270 -48
- package/dist/react/WithSizeObserver.tsx +44 -0
- package/dist/react/tree-select/TreeSelect.tsx +273 -0
- package/dist/react/tree-select/example-1.tsx +71 -0
- package/dist/react/tree-select/example-2.tsx +59 -0
- package/dist/sd_icons.eot +0 -0
- package/dist/sd_icons.svg +14 -7
- package/dist/sd_icons.ttf +0 -0
- package/dist/sd_icons.woff +0 -0
- package/dist/superdesk-ui.bundle.css +4313 -629
- package/dist/superdesk-ui.bundle.js +75364 -60124
- package/dist/vendor.bundle.js +25027 -25027
- package/examples/index.js +4 -0
- package/examples/pages/playgrounds/accessible-theme-test.html +1 -1
- package/examples/pages/playgrounds/layout-test-2.html +1 -1
- package/examples/pages/playgrounds/list-item-test.html +1 -1
- package/examples/pages/playgrounds/master-desk.html +1 -1
- package/examples/pages/playgrounds/media-carousel.html +1 -1
- package/examples/pages/playgrounds/photo-desk.html +1 -1
- package/examples/pages/playgrounds/planning.html +1 -1
- package/examples/pages/playgrounds/publish.html +1 -1
- package/examples/pages/playgrounds/publisher-content-analytics.html +1 -1
- package/examples/pages/playgrounds/publisher-content-list-automatic.html +1 -1
- package/examples/pages/playgrounds/publisher-content-list-manual.html +1 -1
- package/examples/pages/playgrounds/publisher-content-lists.html +1 -1
- package/examples/pages/playgrounds/publisher-dashboard.html +1 -1
- package/examples/pages/playgrounds/publisher-output-control.html +1 -1
- package/examples/pages/playgrounds/react-playgrounds/CoreLayout.tsx +156 -0
- package/examples/pages/playgrounds/react-playgrounds/Index.tsx +1 -0
- package/examples/pages/playgrounds/react-playgrounds/RundownEditor.tsx +26 -23
- package/examples/pages/playgrounds/react-playgrounds/Rundowns.tsx +20 -21
- package/examples/pages/playgrounds/react-playgrounds/SamsPlayground.tsx +12 -3
- package/examples/pages/playgrounds/react-playgrounds/TestGround.tsx +415 -25
- package/examples/pages/playgrounds/react-playgrounds/components/Layout.tsx +2 -2
- package/examples/pages/playgrounds/swimlane-view.html +1 -1
- package/examples/pages/playgrounds/toasts.html +1 -1
- package/examples/pages/playgrounds/video-editor.html +1 -1
- package/examples/pages/react/Badges.tsx +18 -0
- package/examples/pages/react/ContentDivider.tsx +22 -18
- package/examples/pages/react/ContentList.tsx +200 -18
- package/examples/pages/react/DatePicker.tsx +31 -6
- package/examples/pages/react/Dropdowns.tsx +580 -48
- package/examples/pages/react/DurationInput.tsx +108 -0
- package/examples/pages/react/Index.tsx +10 -0
- package/examples/pages/react/Inputs.tsx +256 -8
- package/examples/pages/react/Labels.tsx +51 -1
- package/examples/pages/react/LeftNavigations.tsx +71 -44
- package/examples/pages/react/MultiSelect.tsx +10 -2
- package/examples/pages/react/SelectWithTemplate.tsx +6 -1
- package/examples/pages/react/Selects.tsx +55 -0
- package/examples/pages/react/TableList.tsx +77 -186
- package/examples/pages/react/TimePicker.tsx +22 -12
- package/examples/pages/react/Togglebox.tsx +1 -1
- package/examples/pages/react/TreeSelect.tsx +270 -48
- package/examples/pages/react/WithSizeObserver.tsx +44 -0
- package/examples/pages/react/tree-select/TreeSelect.tsx +273 -0
- package/examples/pages/react/tree-select/example-1.tsx +71 -0
- package/examples/pages/react/tree-select/example-2.tsx +59 -0
- package/package.json +8 -8
- package/react/components/Alert.js +10 -8
- package/react/components/Autocomplete.js +16 -12
- package/react/components/Avatar.js +8 -6
- package/react/components/Badge.d.ts +1 -0
- package/react/components/Badge.js +9 -7
- package/react/components/Button.js +8 -6
- package/react/components/ButtonGroup.js +7 -5
- package/react/components/Carousel.js +4 -2
- package/react/components/CheckButtonGroup.js +6 -4
- package/react/components/CheckGroup.js +5 -3
- package/react/components/Checkbox.js +5 -3
- package/react/components/CheckboxButton.js +6 -4
- package/react/components/ContentDivider.d.ts +1 -0
- package/react/components/ContentDivider.js +10 -6
- package/react/components/CreateButton.js +6 -4
- package/react/components/DatePicker.d.ts +11 -0
- package/react/components/DatePicker.js +44 -35
- package/react/components/Divider.js +6 -4
- package/react/components/DonutChart.d.ts +1 -1
- package/react/components/DonutChart.js +24 -6
- package/react/components/DropZone.js +6 -4
- package/react/components/Dropdown.d.ts +6 -5
- package/react/components/Dropdown.js +63 -35
- package/react/components/DropdownFirst.js +18 -11
- package/react/components/DurationInput.d.ts +42 -0
- package/react/components/DurationInput.js +364 -0
- package/react/components/EmptyState.d.ts +1 -0
- package/react/components/EmptyState.js +8 -6
- package/react/components/Form/FormGroup.js +7 -5
- package/react/components/Form/FormItem.js +5 -3
- package/react/components/Form/FormLabel.d.ts +4 -1
- package/react/components/Form/FormLabel.js +13 -5
- package/react/components/Form/FormRow.js +5 -3
- package/react/components/Form/FormRowNew.d.ts +12 -0
- package/react/components/Form/FormRowNew.js +67 -0
- package/react/components/Form/FormText.js +4 -2
- package/react/components/Form/InputBase.d.ts +41 -0
- package/react/components/Form/InputBase.js +86 -0
- package/react/components/Form/InputNew.d.ts +45 -0
- package/react/components/Form/InputNew.js +75 -0
- package/react/components/Form/InputWrapper.d.ts +28 -0
- package/react/components/Form/InputWrapper.js +91 -0
- package/react/components/Form/index.d.ts +4 -0
- package/react/components/Form/index.js +9 -0
- package/react/components/FormLabel.js +5 -3
- package/react/components/GridItem.js +9 -7
- package/react/components/GridList.js +8 -6
- package/react/components/HeadingText.js +4 -2
- package/react/components/HelloWorld.js +4 -2
- package/react/components/Icon.d.ts +1 -1
- package/react/components/Icon.js +9 -7
- package/react/components/IconButton.js +8 -6
- package/react/components/IconLabel.js +7 -5
- package/react/components/IconPicker.js +13 -9
- package/react/components/Input.d.ts +6 -2
- package/react/components/Input.js +16 -31
- package/react/components/Label.d.ts +1 -0
- package/react/components/Label.js +28 -10
- package/react/components/Layouts/AuthorinInnerSideBar.js +4 -2
- package/react/components/Layouts/AuthoringContainer.d.ts +1 -0
- package/react/components/Layouts/AuthoringContainer.js +8 -6
- package/react/components/Layouts/AuthoringFrame.js +4 -2
- package/react/components/Layouts/AuthoringFrameContainer.js +4 -2
- package/react/components/Layouts/AuthoringFrameLeftBar.js +4 -2
- package/react/components/Layouts/AuthoringFrameMain.js +4 -2
- package/react/components/Layouts/AuthoringFrameNavBar.js +4 -2
- package/react/components/Layouts/AuthoringFrameOverlay.js +4 -2
- package/react/components/Layouts/AuthoringFrameRightBar.js +4 -2
- package/react/components/Layouts/AuthoringFrameSidePanel.js +5 -3
- package/react/components/Layouts/AuthoringFrameSidePanelOverlay.js +5 -3
- package/react/components/Layouts/AuthoringInnerBody.js +4 -2
- package/react/components/Layouts/AuthoringInnerHeader.js +7 -5
- package/react/components/Layouts/AuthoringMain.js +5 -3
- package/react/components/Layouts/AuthoringMainContainer.js +4 -2
- package/react/components/Layouts/AuthoringMainContent.js +4 -2
- package/react/components/Layouts/AuthoringMainToolBar.js +5 -3
- package/react/components/Layouts/BottomBarAction.d.ts +12 -0
- package/react/components/Layouts/BottomBarAction.js +59 -0
- package/react/components/Layouts/Container.js +9 -7
- package/react/components/Layouts/ContentSplitter.js +6 -4
- package/react/components/Layouts/CoreLayout.d.ts +20 -0
- package/react/components/Layouts/CoreLayout.js +55 -0
- package/react/components/Layouts/CoreLayoutContainer.d.ts +9 -0
- package/react/components/Layouts/CoreLayoutContainer.js +49 -0
- package/react/components/Layouts/CoreLayoutFooter.d.ts +8 -0
- package/react/components/Layouts/CoreLayoutFooter.js +49 -0
- package/react/components/Layouts/CoreLayoutMain.d.ts +10 -0
- package/react/components/Layouts/CoreLayoutMain.js +56 -0
- package/react/components/Layouts/CoreLayoutOverlay.d.ts +8 -0
- package/react/components/Layouts/CoreLayoutOverlay.js +49 -0
- package/react/components/Layouts/CoreLayoutSlideInMenu.d.ts +11 -0
- package/react/components/Layouts/CoreLayoutSlideInMenu.js +58 -0
- package/react/components/Layouts/CoreLayoutTopMenu.d.ts +14 -0
- package/react/components/Layouts/CoreLayoutTopMenu.js +54 -0
- package/react/components/Layouts/HamburgerButton.d.ts +14 -0
- package/react/components/Layouts/HamburgerButton.js +63 -0
- package/react/components/Layouts/HeaderPanel.js +4 -2
- package/react/components/Layouts/Layout.js +4 -3
- package/react/components/Layouts/LayoutContainer.js +4 -2
- package/react/components/Layouts/LeftPanel.js +5 -3
- package/react/components/Layouts/MainMenu.d.ts +41 -0
- package/react/components/Layouts/MainMenu.js +103 -0
- package/react/components/Layouts/MainPanel.js +5 -3
- package/react/components/Layouts/NotificationPanel.d.ts +45 -0
- package/react/components/Layouts/NotificationPanel.js +110 -0
- package/react/components/Layouts/OverlayPanel.js +4 -2
- package/react/components/Layouts/PageLayout.js +4 -2
- package/react/components/Layouts/Panel.js +16 -14
- package/react/components/Layouts/RightPanel.js +4 -2
- package/react/components/Layouts/index.d.ts +11 -0
- package/react/components/Layouts/index.js +23 -0
- package/react/components/LeftMenu.d.ts +5 -1
- package/react/components/LeftMenu.js +27 -13
- package/react/components/ListItemLoader.js +4 -2
- package/react/components/Lists/BoxedList.d.ts +6 -0
- package/react/components/Lists/BoxedList.js +36 -15
- package/react/components/Lists/ContentList.d.ts +50 -0
- package/react/components/Lists/ContentList.js +106 -0
- package/react/components/Lists/SimpleList.js +9 -7
- package/react/components/Lists/TableList.d.ts +62 -0
- package/react/components/Lists/TableList.js +208 -0
- package/react/components/Lists/index.js +1 -0
- package/react/components/Loader.js +4 -2
- package/react/components/Menu.d.ts +2 -1
- package/react/components/Menu.js +48 -12
- package/react/components/Modal.d.ts +2 -1
- package/react/components/Modal.js +30 -9
- package/react/components/NavButton.d.ts +1 -0
- package/react/components/NavButton.js +9 -4
- package/react/components/Navigation/BottomNav.d.ts +24 -0
- package/react/components/Navigation/BottomNav.js +88 -0
- package/react/components/Navigation/QuickNavBar.js +13 -9
- package/react/components/Navigation/SideBarMenu.js +4 -2
- package/react/components/Navigation/SideBarTabs.js +4 -2
- package/react/components/Navigation/index.js +1 -0
- package/react/components/Popover.js +4 -2
- package/react/components/PropsList.js +4 -2
- package/react/components/RadioButtonGroup.js +9 -7
- package/react/components/RadioGroup.js +6 -4
- package/react/components/SearchBar.d.ts +3 -2
- package/react/components/SearchBar.js +34 -8
- package/react/components/Select.d.ts +5 -1
- package/react/components/Select.js +9 -23
- package/react/components/SelectGrid.d.ts +1 -1
- package/react/components/SelectGrid.js +44 -23
- package/react/components/SelectWithTemplate.d.ts +11 -1
- package/react/components/SelectWithTemplate.js +23 -12
- package/react/components/Skeleton.d.ts +1 -1
- package/react/components/Skeleton.js +26 -5
- package/react/components/SlidingToolbar.js +6 -4
- package/react/components/Spinner.js +6 -4
- package/react/components/StrechBar.js +4 -2
- package/react/components/SubNav.js +9 -7
- package/react/components/Switch.js +6 -4
- package/react/components/SwitchGroup.js +5 -3
- package/react/components/TabCustom.js +11 -7
- package/react/components/TabList.js +6 -4
- package/react/components/Tag.js +5 -4
- package/react/components/TagInput.js +7 -6
- package/react/components/TagInputTest.js +13 -9
- package/react/components/Text/Heading.js +10 -8
- package/react/components/Text/Text.js +10 -8
- package/react/components/Text/Time.d.ts +15 -0
- package/react/components/Text/Time.js +65 -0
- package/react/components/ThemeSelector.js +7 -5
- package/react/components/TimePicker.d.ts +11 -1
- package/react/components/TimePicker.js +14 -5
- package/react/components/Toast.js +1 -1
- package/react/components/ToastMessage.js +6 -5
- package/react/components/ToastText.js +1 -1
- package/react/components/ToastWrapper.d.ts +2 -2
- package/react/components/ToastWrapper.js +14 -10
- package/react/components/Togglebox.d.ts +1 -1
- package/react/components/Togglebox.js +36 -15
- package/react/components/Tooltip.d.ts +1 -0
- package/react/components/Tooltip.js +14 -10
- package/react/components/TreeSelect.d.ts +80 -0
- package/react/components/TreeSelect.js +494 -0
- package/react/components/WithSizeObserver.d.ts +25 -0
- package/react/components/WithSizeObserver.js +95 -0
- package/react/components/_Positioner.js +4 -2
- package/react/helpers.d.ts +1 -0
- package/react/helpers.js +7 -0
- package/react/index.d.ts +8 -0
- package/react/index.js +20 -2
- package/yarn-error.log +111 -0
- package/patches/@superdesk+primereact+5.0.2-4.patch +0 -13
- package/sd_icons.eot +0 -0
- package/sd_icons.svg +0 -189
- package/sd_icons.ttf +0 -0
- package/sd_icons.woff +0 -0
@@ -3,6 +3,9 @@ import addDays from 'date-fns/addDays';
|
|
3
3
|
import format from 'date-fns/format';
|
4
4
|
import {Calendar, LocaleSettings, CalendarProps} from '@superdesk/primereact/calendar';
|
5
5
|
import {throttle} from 'lodash';
|
6
|
+
// import classNames from 'classnames';
|
7
|
+
import nextId from "react-id-generator";
|
8
|
+
import { InputWrapper } from './Form';
|
6
9
|
|
7
10
|
export type DatePickerLocaleSettings = Omit<LocaleSettings, 'today' | 'clear'>;
|
8
11
|
|
@@ -29,6 +32,17 @@ interface IDatePickerBase {
|
|
29
32
|
}}
|
30
33
|
*/
|
31
34
|
locale?: DatePickerLocaleSettings;
|
35
|
+
|
36
|
+
// label props
|
37
|
+
inlineLabel?: boolean;
|
38
|
+
required?: boolean;
|
39
|
+
fullWidth?: boolean;
|
40
|
+
invalid?: boolean;
|
41
|
+
labelHidden?: boolean;
|
42
|
+
tabindex?: number;
|
43
|
+
label?: string;
|
44
|
+
info?: string;
|
45
|
+
error?: string;
|
32
46
|
}
|
33
47
|
|
34
48
|
interface IDatePicker extends IDatePickerBase {
|
@@ -53,6 +67,7 @@ interface IState {
|
|
53
67
|
// valid means it can be parsed
|
54
68
|
// if a value is invalid on blur, it will be set to an empty string and `props.onChange` called with `null`
|
55
69
|
valid: boolean;
|
70
|
+
invalid: boolean;
|
56
71
|
}
|
57
72
|
|
58
73
|
// tries to parse primereact/calendar value format to IDatePicker['value']
|
@@ -65,7 +80,6 @@ function parseFromPrimeReactCalendarFormat(value: CalendarProps['value']): IDate
|
|
65
80
|
return null;
|
66
81
|
} else {
|
67
82
|
// at this point value is a free input string that can't be parsed to a Date inside primereact/calendar
|
68
|
-
|
69
83
|
return 'failed-to-parse';
|
70
84
|
}
|
71
85
|
}
|
@@ -77,13 +91,14 @@ function parseToPrimeReactCalendarFormat(value: IDatePicker['value']): CalendarP
|
|
77
91
|
export class DatePicker extends React.PureComponent<IDatePicker, IState> {
|
78
92
|
private instance: IPrivatePrimeReactCalendarApi | undefined;
|
79
93
|
hidePopupOnScroll: () => void;
|
94
|
+
private htmlId = nextId();
|
80
95
|
|
81
96
|
constructor(props: IDatePicker) {
|
82
97
|
super(props);
|
83
|
-
|
84
98
|
this.state = {
|
85
99
|
value: parseToPrimeReactCalendarFormat(this.props.value),
|
86
100
|
valid: true,
|
101
|
+
invalid: this.props.invalid ?? false,
|
87
102
|
};
|
88
103
|
|
89
104
|
this.hidePopupOnScroll = throttle(() => {
|
@@ -122,7 +137,6 @@ export class DatePicker extends React.PureComponent<IDatePicker, IState> {
|
|
122
137
|
|
123
138
|
render() {
|
124
139
|
let locale: LocaleSettings | undefined;
|
125
|
-
|
126
140
|
if (this.props.locale != null) {
|
127
141
|
locale = {
|
128
142
|
...this.props.locale,
|
@@ -132,7 +146,21 @@ export class DatePicker extends React.PureComponent<IDatePicker, IState> {
|
|
132
146
|
}
|
133
147
|
|
134
148
|
return (
|
135
|
-
<
|
149
|
+
<InputWrapper
|
150
|
+
label={this.props.label}
|
151
|
+
error={this.props.error}
|
152
|
+
required={this.props.required}
|
153
|
+
disabled={this.props.disabled}
|
154
|
+
invalid={this.state.invalid}
|
155
|
+
info={this.props.info}
|
156
|
+
inlineLabel={this.props.inlineLabel}
|
157
|
+
labelHidden={this.props.labelHidden}
|
158
|
+
fullWidth={this.props.fullWidth}
|
159
|
+
htmlId={this.htmlId}
|
160
|
+
tabindex={this.props.tabindex}>
|
161
|
+
<Calendar
|
162
|
+
inputId={this.htmlId}
|
163
|
+
ariaLabelledBy={this.htmlId + 'label'}
|
136
164
|
ref={(ref) => {
|
137
165
|
this.instance = ref as unknown as IPrivatePrimeReactCalendarApi;
|
138
166
|
}}
|
@@ -153,24 +181,22 @@ export class DatePicker extends React.PureComponent<IDatePicker, IState> {
|
|
153
181
|
showIcon={true}
|
154
182
|
icon="icon-calendar"
|
155
183
|
headerTemplate={() => this.props.shortcuts == null ? null : (
|
156
|
-
<div
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
))
|
173
|
-
}
|
184
|
+
<div
|
185
|
+
style={{width: '100%', display: 'flex', justifyContent: 'space-between', marginBottom: 10}}>
|
186
|
+
{this.props.shortcuts.map(({label, days}, i) => (
|
187
|
+
<button
|
188
|
+
key={i}
|
189
|
+
className="btn btn--hollow btn--small"
|
190
|
+
onClick={() => {
|
191
|
+
this.props.onChange(addDays(new Date(), days));
|
192
|
+
|
193
|
+
if (this.instance != null && typeof this.instance.hideOverlay === 'function') {
|
194
|
+
this.instance.hideOverlay();
|
195
|
+
}
|
196
|
+
}}>
|
197
|
+
{label}
|
198
|
+
</button>
|
199
|
+
))}
|
174
200
|
</div>
|
175
201
|
)}
|
176
202
|
appendTo={document.body} // making it work inside `overflow:hidden`
|
@@ -184,8 +210,8 @@ export class DatePicker extends React.PureComponent<IDatePicker, IState> {
|
|
184
210
|
// restoring internal state to current props value
|
185
211
|
this.setState({valid: true, value: parseToPrimeReactCalendarFormat(this.props.value)});
|
186
212
|
}
|
187
|
-
}}
|
188
|
-
|
213
|
+
}} />
|
214
|
+
</InputWrapper>
|
189
215
|
);
|
190
216
|
}
|
191
217
|
}
|
@@ -199,18 +225,27 @@ export class DatePickerISO extends React.PureComponent<IDatePickerISO> {
|
|
199
225
|
render() {
|
200
226
|
return (
|
201
227
|
<DatePicker
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
228
|
+
value={new Date(this.props.value)}
|
229
|
+
onChange={(value) => {
|
230
|
+
if (value === null) {
|
231
|
+
this.props.onChange('');
|
232
|
+
} else {
|
233
|
+
this.props.onChange(format(value, 'yyyy-MM-dd'));
|
234
|
+
}
|
235
|
+
}}
|
236
|
+
disabled={this.props.disabled}
|
237
|
+
shortcuts={this.props.shortcuts}
|
238
|
+
dateFormat={this.props.dateFormat}
|
239
|
+
locale={this.props.locale}
|
240
|
+
inlineLabel={this.props.inlineLabel}
|
241
|
+
required={this.props.required}
|
242
|
+
fullWidth={this.props.fullWidth}
|
243
|
+
invalid={this.props.invalid}
|
244
|
+
labelHidden={this.props.labelHidden}
|
245
|
+
tabindex={this.props.tabindex}
|
246
|
+
label={this.props.label}
|
247
|
+
info={this.props.info}
|
248
|
+
error={this.props.error}
|
214
249
|
/>
|
215
250
|
);
|
216
251
|
}
|
@@ -4,35 +4,42 @@ import { createPopper } from '@popperjs/core';
|
|
4
4
|
import { useId } from "react-id-generator";
|
5
5
|
|
6
6
|
export interface IMenuItem {
|
7
|
-
label: string;
|
7
|
+
label: string | React.ReactNode;
|
8
8
|
icon?: string;
|
9
9
|
active?: boolean;
|
10
10
|
onSelect(): void;
|
11
11
|
}
|
12
12
|
|
13
|
+
interface IMenuItemRes extends IMenuItem {
|
14
|
+
onChange?(event?: any): void;
|
15
|
+
}
|
16
|
+
|
13
17
|
export interface ISubmenu {
|
14
18
|
type: 'submenu';
|
15
|
-
label: string;
|
19
|
+
label: string | React.ReactNode;
|
16
20
|
icon?: string;
|
17
21
|
items: Array<IMenuItem | ISubmenu | IMenuGroup | 'divider'>;
|
18
22
|
}
|
19
23
|
|
20
24
|
export interface IMenuGroup {
|
21
25
|
type: 'group';
|
22
|
-
label?: string;
|
26
|
+
label?: string | React.ReactNode;
|
23
27
|
items: Array<IMenuItem | ISubmenu | IMenuGroup | 'divider'>;
|
24
28
|
}
|
25
29
|
|
26
30
|
interface IMenu {
|
27
|
-
label?: string;
|
31
|
+
label?: string | React.ReactNode;
|
28
32
|
align?: 'left' | 'right';
|
29
33
|
items: Array<IMenuItem | ISubmenu | IMenuGroup | 'divider'>;
|
30
34
|
header?: Array<IMenuItem | ISubmenu | IMenuGroup | 'divider'>;
|
31
35
|
footer?: Array<IMenuItem | ISubmenu | IMenuGroup | 'divider'>;
|
32
36
|
append?: boolean;
|
33
37
|
children: React.ReactNode;
|
38
|
+
onChange?(event?: any): void;
|
34
39
|
}
|
35
40
|
|
41
|
+
const DROPDOWN_ID_CONTAINER = "sd-dropdown-constainer";
|
42
|
+
|
36
43
|
export const Dropdown = ({
|
37
44
|
items,
|
38
45
|
header,
|
@@ -40,15 +47,13 @@ export const Dropdown = ({
|
|
40
47
|
children,
|
41
48
|
append,
|
42
49
|
align,
|
50
|
+
onChange,
|
43
51
|
}: IMenu) => {
|
44
52
|
const [open, setOpen] = React.useState(false);
|
45
53
|
const [change, setChange] = React.useState(false);
|
46
54
|
const [menuID] = useId();
|
47
|
-
const DROPDOWN_ID = "react-placeholder";
|
48
55
|
const ref = React.useRef(null);
|
49
|
-
const refSubMenu = React.useRef(null);
|
50
56
|
const buttonRef = React.useRef(null);
|
51
|
-
const refButtonSubMenu = React.useRef(null);
|
52
57
|
const headerElements = header?.map((el, index) => {
|
53
58
|
return each(el, index);
|
54
59
|
});
|
@@ -60,12 +65,12 @@ export const Dropdown = ({
|
|
60
65
|
const footerElements = footer?.map((el, index) => {
|
61
66
|
return each(el, index);
|
62
67
|
});
|
68
|
+
|
63
69
|
React.useEffect(() => {
|
64
|
-
const existingElement = document.getElementById(
|
70
|
+
const existingElement = document.getElementById(DROPDOWN_ID_CONTAINER);
|
65
71
|
if (!existingElement) {
|
66
72
|
const el = document.createElement("div");
|
67
|
-
el.id =
|
68
|
-
// style placeholder
|
73
|
+
el.id = DROPDOWN_ID_CONTAINER;
|
69
74
|
el.style.position = 'absolute';
|
70
75
|
el.style.top = '0';
|
71
76
|
el.style.left = '0';
|
@@ -74,7 +79,6 @@ export const Dropdown = ({
|
|
74
79
|
|
75
80
|
document.body.appendChild(el);
|
76
81
|
}
|
77
|
-
|
78
82
|
}, [change]);
|
79
83
|
|
80
84
|
React.useLayoutEffect(() => {
|
@@ -82,17 +86,12 @@ export const Dropdown = ({
|
|
82
86
|
addInPlaceholder();
|
83
87
|
}
|
84
88
|
setChange(true);
|
85
|
-
|
86
89
|
}, [open]);
|
87
90
|
|
88
|
-
// structure for append menu
|
89
91
|
function createAppendMenu() {
|
90
92
|
if (header && footer) {
|
91
93
|
return (
|
92
|
-
<div className='dropdown__menu dropdown__menu--has-head-foot'
|
93
|
-
id={menuID}
|
94
|
-
role='menu'
|
95
|
-
ref={ref}>
|
94
|
+
<div className='dropdown__menu dropdown__menu--has-head-foot' id={menuID} role='menu' ref={ref}>
|
96
95
|
<ul className='dropdown__menu-header'>
|
97
96
|
{headerElements}
|
98
97
|
</ul>
|
@@ -106,10 +105,7 @@ export const Dropdown = ({
|
|
106
105
|
);
|
107
106
|
} else if (header) {
|
108
107
|
return (
|
109
|
-
<div className='dropdown__menu dropdown__menu--has-head-foot'
|
110
|
-
id={menuID}
|
111
|
-
role='menu'
|
112
|
-
ref={ref}>
|
108
|
+
<div className='dropdown__menu dropdown__menu--has-head-foot' id={menuID} role='menu' ref={ref}>
|
113
109
|
<ul className='dropdown__menu-header'>
|
114
110
|
{headerElements}
|
115
111
|
</ul>
|
@@ -120,10 +116,7 @@ export const Dropdown = ({
|
|
120
116
|
);
|
121
117
|
} else if (footer) {
|
122
118
|
return (
|
123
|
-
<div className='dropdown__menu dropdown__menu--has-head-foot'
|
124
|
-
id={menuID}
|
125
|
-
role='menu'
|
126
|
-
ref={ref}>
|
119
|
+
<div className='dropdown__menu dropdown__menu--has-head-foot' id={menuID} role='menu' ref={ref}>
|
127
120
|
<ul className='dropdown__menu-body'>
|
128
121
|
{dropdownElements}
|
129
122
|
</ul>
|
@@ -134,17 +127,13 @@ export const Dropdown = ({
|
|
134
127
|
);
|
135
128
|
} else {
|
136
129
|
return (
|
137
|
-
<ul className='dropdown__menu '
|
138
|
-
id={menuID}
|
139
|
-
role='menu'
|
140
|
-
ref={ref}>
|
130
|
+
<ul className='dropdown__menu ' id={menuID} role='menu' ref={ref}>
|
141
131
|
{dropdownElements}
|
142
132
|
</ul>
|
143
133
|
);
|
144
134
|
}
|
145
135
|
}
|
146
136
|
|
147
|
-
// toggle menu
|
148
137
|
function toggleDisplay() {
|
149
138
|
if (!open) {
|
150
139
|
let menuRef: any;
|
@@ -193,14 +182,13 @@ export const Dropdown = ({
|
|
193
182
|
}
|
194
183
|
|
195
184
|
function addInPlaceholder() {
|
196
|
-
const placeholder = document.getElementById(
|
185
|
+
const placeholder = document.getElementById(DROPDOWN_ID_CONTAINER);
|
197
186
|
let menu = createAppendMenu();
|
198
187
|
if (open) {
|
199
188
|
return ReactDOM.render(menu, placeholder);
|
200
189
|
} else {
|
201
|
-
|
202
|
-
|
203
|
-
menuDOM.style.display = 'none';
|
190
|
+
if (placeholder) {
|
191
|
+
ReactDOM.unmountComponentAtNode(placeholder);
|
204
192
|
}
|
205
193
|
}
|
206
194
|
}
|
@@ -212,33 +200,13 @@ export const Dropdown = ({
|
|
212
200
|
submenuItems.push(each(el, key));
|
213
201
|
});
|
214
202
|
return (
|
215
|
-
<
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
onMouseOver={() => {
|
223
|
-
let subMenuRef = refSubMenu.current;
|
224
|
-
let subToggleRef = refButtonSubMenu.current;
|
225
|
-
if (subMenuRef && subToggleRef) {
|
226
|
-
createPopper(subToggleRef, subMenuRef, {
|
227
|
-
placement: 'right-start',
|
228
|
-
});
|
229
|
-
}
|
230
|
-
}}
|
231
|
-
onClick={item['onSelect']}>
|
232
|
-
{item['icon'] ? <i className={'icon-' + item['icon']}></i> : null}
|
233
|
-
{item['label']}
|
234
|
-
</button>
|
235
|
-
<ul ref={refSubMenu}
|
236
|
-
role='menu'
|
237
|
-
className='dropdown__menu'>
|
238
|
-
{submenuItems}
|
239
|
-
</ul>
|
240
|
-
</div>
|
241
|
-
</li>
|
203
|
+
<DropdownItemWithSubmenu
|
204
|
+
key={index}
|
205
|
+
index={index}
|
206
|
+
item={item}
|
207
|
+
menuID={menuID}
|
208
|
+
subMenuItems={submenuItems}
|
209
|
+
onChange={onChange} />
|
242
210
|
);
|
243
211
|
} else if (item['type'] === 'group') {
|
244
212
|
let groupItems: any = [];
|
@@ -258,16 +226,18 @@ export const Dropdown = ({
|
|
258
226
|
} else {
|
259
227
|
return (
|
260
228
|
<DropdownItem
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
229
|
+
key={index}
|
230
|
+
label={item['label']}
|
231
|
+
icon={item['icon']}
|
232
|
+
active={item['active']}
|
233
|
+
onSelect={item['onSelect']}
|
234
|
+
onChange={onChange} />
|
235
|
+
);
|
266
236
|
}
|
267
237
|
}
|
268
238
|
|
269
239
|
return (
|
270
|
-
<div className={'dropdown ' + (open ? 'open' : '')}
|
240
|
+
<div className={'dropdown ' + (open ? 'open' : '')}>
|
271
241
|
{typeof children === 'object' ?
|
272
242
|
(React.isValidElement(children) ?
|
273
243
|
<div ref={buttonRef} style={{ display: 'content' }}>
|
@@ -281,11 +251,11 @@ export const Dropdown = ({
|
|
281
251
|
</div> : null)
|
282
252
|
:
|
283
253
|
<button ref={buttonRef}
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
254
|
+
className=' dropdown__toggle dropdown-toggle'
|
255
|
+
aria-haspopup="menu"
|
256
|
+
tabIndex={0}
|
257
|
+
aria-expanded={open}
|
258
|
+
onClick={toggleDisplay}>
|
289
259
|
{children}
|
290
260
|
<span className="dropdown__caret"></span>
|
291
261
|
</button>}
|
@@ -294,7 +264,7 @@ export const Dropdown = ({
|
|
294
264
|
null : (function() {
|
295
265
|
if (header && footer) {
|
296
266
|
return (
|
297
|
-
<div className='dropdown__menu dropdown__menu--has-head-foot' role='menu' ref={ref}
|
267
|
+
<div className='dropdown__menu dropdown__menu--has-head-foot' role='menu' ref={ref}>
|
298
268
|
<ul className='dropdown__menu-header'>
|
299
269
|
{headerElements}
|
300
270
|
</ul>
|
@@ -308,7 +278,7 @@ export const Dropdown = ({
|
|
308
278
|
);
|
309
279
|
} else if (header) {
|
310
280
|
return (
|
311
|
-
<div className='dropdown__menu dropdown__menu--has-head-foot' role='menu' ref={ref}
|
281
|
+
<div className='dropdown__menu dropdown__menu--has-head-foot' role='menu' ref={ref}>
|
312
282
|
<ul className='dropdown__menu-header'>
|
313
283
|
{headerElements}
|
314
284
|
</ul>
|
@@ -319,7 +289,7 @@ export const Dropdown = ({
|
|
319
289
|
);
|
320
290
|
} else if (footer) {
|
321
291
|
return (
|
322
|
-
<div className='dropdown__menu dropdown__menu--has-head-foot' role='menu' ref={ref}
|
292
|
+
<div className='dropdown__menu dropdown__menu--has-head-foot' role='menu' ref={ref}>
|
323
293
|
<ul className='dropdown__menu-body'>
|
324
294
|
{dropdownElements}
|
325
295
|
</ul>
|
@@ -330,7 +300,7 @@ export const Dropdown = ({
|
|
330
300
|
);
|
331
301
|
} else {
|
332
302
|
return (
|
333
|
-
<ul className='dropdown__menu' role='menu' ref={ref}
|
303
|
+
<ul className='dropdown__menu' role='menu' ref={ref}>
|
334
304
|
{dropdownElements}
|
335
305
|
</ul>
|
336
306
|
);
|
@@ -341,18 +311,93 @@ export const Dropdown = ({
|
|
341
311
|
};
|
342
312
|
|
343
313
|
const DropdownItem = ({
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
314
|
+
label,
|
315
|
+
icon,
|
316
|
+
active,
|
317
|
+
onSelect,
|
318
|
+
onChange,
|
319
|
+
}: IMenuItemRes) => {
|
349
320
|
return (
|
350
321
|
<li role='none' className={active ? 'dropdown__menu-item--active' : ''}>
|
351
|
-
<button tabIndex={0}
|
322
|
+
<button tabIndex={0}
|
323
|
+
role='menuitem'
|
324
|
+
onClick={() => {
|
325
|
+
setTimeout(() => {
|
326
|
+
onSelect();
|
327
|
+
});
|
328
|
+
if (onChange) {
|
329
|
+
onChange();
|
330
|
+
}
|
331
|
+
}}>
|
352
332
|
<i className={icon ? ('icon-' + icon) : ''}></i>
|
353
333
|
{label}
|
354
334
|
</button>
|
355
335
|
</li>
|
356
336
|
);
|
337
|
+
};
|
338
|
+
|
339
|
+
const DropdownItemWithSubmenu = ({
|
340
|
+
index,
|
341
|
+
item,
|
342
|
+
menuID,
|
343
|
+
subMenuItems,
|
344
|
+
onChange,
|
345
|
+
}: IMenuItem | any) => {
|
346
|
+
const [open, setOpen] = React.useState<undefined | boolean>(undefined);
|
347
|
+
|
348
|
+
const refButtonSubMenu = React.useRef(null);
|
349
|
+
const refSubMenu = React.useRef(null);
|
350
|
+
const placeholder = document.getElementById(menuID);
|
357
351
|
|
352
|
+
React.useEffect(() => {
|
353
|
+
let subMenuRef: any = refSubMenu.current;
|
354
|
+
let subToggleRef = refButtonSubMenu.current;
|
355
|
+
|
356
|
+
if (open === true) {
|
357
|
+
placeholder?.appendChild(subMenuRef);
|
358
|
+
subMenuRef.style.display = 'block';
|
359
|
+
} else if (open === false) {
|
360
|
+
placeholder?.removeChild(subMenuRef);
|
361
|
+
subMenuRef.style.display = 'none';
|
362
|
+
}
|
363
|
+
|
364
|
+
if (subMenuRef && subToggleRef) {
|
365
|
+
createPopper(subToggleRef, subMenuRef, {
|
366
|
+
placement: 'right-start',
|
367
|
+
});
|
368
|
+
}
|
369
|
+
}, [open]);
|
370
|
+
|
371
|
+
return (
|
372
|
+
<li key={index} ref={refButtonSubMenu}>
|
373
|
+
<div className='dropdown'
|
374
|
+
onMouseLeave={() => setOpen(false)}>
|
375
|
+
<button
|
376
|
+
className='dropdown__toggle dropdown-toggle'
|
377
|
+
aria-haspopup="menu"
|
378
|
+
tabIndex={0}
|
379
|
+
onClick={() => {
|
380
|
+
if (item.onSelect) {
|
381
|
+
setTimeout(() => {
|
382
|
+
item.onSelect();
|
383
|
+
});
|
384
|
+
}
|
385
|
+
if (onChange) {
|
386
|
+
onChange();
|
387
|
+
}
|
388
|
+
}}
|
389
|
+
onMouseOver={() => setOpen(true) }>
|
390
|
+
{item['icon'] ? <i className={'icon-' + item['icon']}></i> : null}
|
391
|
+
{item['label']}
|
392
|
+
</button>
|
393
|
+
<ul
|
394
|
+
role='menu'
|
395
|
+
ref={refSubMenu}
|
396
|
+
style={{display: 'none'}}
|
397
|
+
className='dropdown__menu'>
|
398
|
+
{subMenuItems}
|
399
|
+
</ul>
|
400
|
+
</div>
|
401
|
+
</li>
|
402
|
+
);
|
358
403
|
};
|