qpp-style 0.0.9 → 0.0.10
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/.eslintrc.js +28 -28
- package/.husky/pre-commit +5 -0
- package/README.md +45 -0
- package/components/Accordion/index.jsx +35 -43
- package/components/Alert/index.js +53 -0
- package/components/Breadcrumb/index.js +4 -4
- package/components/Button/index.js +17 -6
- package/components/CalloutBox/index.js +109 -0
- package/components/Card/index.js +137 -0
- package/components/Details/DetailsIcons.js +50 -0
- package/components/Details/index.js +53 -0
- package/components/Dropdown/index.js +85 -0
- package/components/DropdownButton/Menu.js +25 -0
- package/components/DropdownButton/MenuButton.js +41 -0
- package/components/DropdownButton/MenuItem.js +25 -0
- package/components/DropdownButton/MenuItemLink.js +27 -0
- package/components/Error/Collapsible.jsx +2 -2
- package/components/Footer/FooterUI.jsx +175 -177
- package/components/Footer/footer.js +2 -12
- package/components/GovBanner/index.js +117 -0
- package/components/Header/HeaderAccountMenu.jsx +49 -75
- package/components/Header/HeaderContainer.jsx +46 -34
- package/components/Header/HeaderLogo.jsx +40 -17
- package/components/Header/HeaderMenuButton.js +38 -12
- package/components/Header/HeaderMenuItem.jsx +204 -64
- package/components/Header/HeaderMenuLink.js +46 -10
- package/components/Header/HeaderMenuSignOutButton.js +46 -10
- package/components/Header/HeaderMobileButton.js +15 -6
- package/components/Header/HeaderUI.jsx +118 -117
- package/components/Header/HelpIcon.jsx +7 -5
- package/components/Header/ImpersonatorBanner.jsx +81 -0
- package/components/Header/header.js +2 -0
- package/components/Header/hooks.js +53 -1
- package/components/Header/utag-helpers.js +9 -0
- package/components/Infotip/Infotip.jsx +6 -10
- package/components/Infotip/InfotipContent.jsx +46 -0
- package/components/Infotip/InfotipIcon.jsx +3 -3
- package/components/Link/index.js +61 -0
- package/components/Modal/Modal.jsx +53 -40
- package/components/Modal/index.jsx +11 -11
- package/components/NotificationBanner/CollapsedView.js +39 -0
- package/components/NotificationBanner/ExpandedView.js +45 -0
- package/components/NotificationBanner/index.js +219 -30
- package/components/Search/index.js +98 -0
- package/components/SessionDialog/sessionDialog.js +26 -0
- package/components/SessionDialogUI.jsx +34 -26
- package/components/SideNav/AnimationGroup/AnimationGroup.jsx +9 -2
- package/components/SideNav/Chart/ScoreChart.jsx +1 -1
- package/components/SideNav/Chart/__tests__/ScoreChart.test.js +3 -12
- package/components/SideNav/Chart/__tests__/__snapshots__/ScoreChart.test.js.snap +144 -35
- package/components/SideNav/Chart/index.js +1 -1
- package/components/SideNav/Content/LevelOneContent.jsx +145 -255
- package/components/SideNav/Content/LevelTwoContent.jsx +12 -10
- package/components/SideNav/Content/SelectRole/index.js +77 -0
- package/components/SideNav/Content/SelectRole/utils.js +140 -0
- package/components/SideNav/Details/PracticeDetails.jsx +4 -0
- package/components/SideNav/Links/CmsSwitchLink.jsx +1 -1
- package/components/SideNav/Links/NavLinkContainer.jsx +29 -34
- package/components/SideNav/Links/NavLinkDrawer.jsx +100 -17
- package/components/SideNav/Links/NavLinkInline.jsx +7 -2
- package/components/SideNav/SideNav.md +28 -27
- package/components/SideNav/UI/SideNavUI.jsx +122 -129
- package/components/SideNav/UI/default-content.json +117 -0
- package/components/SideNav/helpers.js +316 -4
- package/components/Tabs/TabPanel.js +5 -0
- package/components/Tabs/Tabs.js +73 -0
- package/components/TextInput/index.js +137 -0
- package/components/hooks/useGetConfig.js +75 -0
- package/components/index.js +103 -9
- package/coverage/clover.xml +1465 -41
- package/coverage/coverage-final.json +72 -1
- package/coverage/lcov-report/block-navigation.js +8 -0
- package/coverage/lcov-report/components/Accordion/index.html +26 -21
- package/coverage/lcov-report/components/Accordion/index.jsx.html +106 -131
- package/coverage/lcov-report/{SideNav/Chart → components/Button}/index.html +29 -24
- package/coverage/lcov-report/{Error/Collapsible.jsx.html → components/Button/index.js.html} +125 -114
- package/coverage/lcov-report/components/Error/Collapsible.jsx.html +92 -87
- package/coverage/lcov-report/components/Error/ErrorUI.jsx.html +32 -33
- package/coverage/lcov-report/components/Error/index.html +11 -6
- package/coverage/lcov-report/components/Footer/FooterUI.jsx.html +200 -189
- package/coverage/lcov-report/components/Footer/SocialLinks.jsx.html +24 -61
- package/coverage/lcov-report/components/Footer/Subscribe.jsx.html +18 -13
- package/coverage/lcov-report/components/Footer/index.html +35 -45
- package/coverage/lcov-report/components/{InfoModal → GovBanner}/index.html +27 -22
- package/coverage/lcov-report/components/{InfoModal/index.jsx.html → GovBanner/index.js.html} +157 -122
- package/coverage/lcov-report/components/Header/HeaderAccountMenu.jsx.html +93 -520
- package/coverage/lcov-report/components/Header/HeaderCancel.jsx.html +19 -23
- package/coverage/lcov-report/components/Header/HeaderContainer.jsx.html +280 -0
- package/coverage/lcov-report/components/{SideNav/Links/NavLinkContainer.jsx.html → Header/HeaderLogo.jsx.html} +78 -67
- package/coverage/lcov-report/components/{SideNav/Links/NavItemInline.jsx.html → Header/HeaderMenuButton.js.html} +71 -78
- package/coverage/lcov-report/components/{SideNav/Links/NavLinkDrawer.jsx.html → Header/HeaderMenuItem.jsx.html} +291 -268
- package/coverage/lcov-report/components/Header/HeaderMenuLink.js.html +253 -0
- package/coverage/lcov-report/components/Header/HeaderMenuSignOutButton.js.html +271 -0
- package/coverage/lcov-report/components/{SideNav/Links/NavLinkToggle.jsx.html → Header/HeaderMobileButton.js.html} +64 -47
- package/coverage/lcov-report/components/Header/HeaderUI.jsx.html +176 -756
- package/coverage/lcov-report/components/Header/HelpIcon.jsx.html +181 -0
- package/coverage/lcov-report/{Accordion/index.jsx.html → components/Header/ImpersonatorBanner.jsx.html} +109 -167
- package/coverage/lcov-report/components/Header/NavigationButtonIcon.jsx.html +24 -19
- package/coverage/lcov-report/components/Header/hooks.js.html +283 -0
- package/coverage/lcov-report/components/Header/index.html +203 -33
- package/coverage/lcov-report/components/{SideNav/Links/index.js.html → Header/utag-helpers.js.html} +35 -42
- package/coverage/lcov-report/components/Infotip/Infotip.jsx.html +53 -48
- package/coverage/lcov-report/components/Infotip/InfotipIcon.jsx.html +37 -32
- package/coverage/lcov-report/components/Infotip/index.html +8 -3
- package/coverage/lcov-report/components/Infotip/index.js.html +8 -3
- package/coverage/lcov-report/components/Modal/LegacyModal.jsx.html +301 -0
- package/coverage/lcov-report/{HeaderUI.jsx.html → components/Modal/Modal.jsx.html} +169 -257
- package/coverage/lcov-report/components/Modal/index.html +146 -0
- package/coverage/lcov-report/components/{SideNav/Details/IndividualDetails.jsx.html → Modal/index.jsx.html} +50 -42
- package/coverage/lcov-report/components/NotificationBanner/CollapsedView.js.html +202 -0
- package/coverage/lcov-report/components/NotificationBanner/ExpandedView.js.html +220 -0
- package/coverage/lcov-report/components/NotificationBanner/index.html +58 -23
- package/coverage/lcov-report/components/{SideNav/Content/LevelTwoContent.jsx.html → NotificationBanner/index.js.html} +292 -272
- package/coverage/lcov-report/components/SanitizedContent/index.html +8 -3
- package/coverage/lcov-report/components/SanitizedContent/index.jsx.html +475 -50
- package/coverage/lcov-report/components/SessionDialogUI.jsx.html +248 -255
- package/coverage/lcov-report/components/SideNav/Chart/ScoreChart.jsx.html +272 -408
- package/coverage/lcov-report/components/SideNav/Chart/index.html +28 -38
- package/coverage/lcov-report/components/SideNav/Content/SelectRole/index.html +116 -0
- package/coverage/lcov-report/components/SideNav/Content/SelectRole/utils.js.html +505 -0
- package/coverage/lcov-report/components/SideNav/helpers.js.html +987 -46
- package/coverage/lcov-report/components/SideNav/index.html +24 -19
- package/coverage/lcov-report/components/Tooltip/Tooltip.jsx.html +70 -65
- package/coverage/lcov-report/components/Tooltip/index.html +8 -3
- package/coverage/lcov-report/components/Tooltip/index.js.html +8 -3
- package/coverage/lcov-report/components/Tooltip/position.js.html +57 -64
- package/coverage/lcov-report/components/hooks/index.html +116 -0
- package/coverage/lcov-report/components/hooks/useGetConfig.js.html +310 -0
- package/coverage/lcov-report/components/index.html +10 -5
- package/coverage/lcov-report/index.html +401 -21
- package/coverage/lcov-report/{Error/ErrorUI.jsx.html → lib/Chevron.jsx.html} +44 -42
- package/coverage/lcov-report/lib/SvgComponents.jsx.html +1840 -0
- package/coverage/lcov-report/lib/index.html +34 -14
- package/coverage/lcov-report/react/components/Accordion/index.html +26 -21
- package/coverage/lcov-report/react/components/Accordion/index.jsx.html +67 -86
- package/coverage/lcov-report/react/components/{FlashNotification → Button}/index.html +23 -33
- package/coverage/lcov-report/{components/SideNav/Links/NavLinkInline.jsx.html → react/components/Button/index.js.html} +119 -120
- package/coverage/lcov-report/react/components/{Tabs → Dropdown}/index.html +23 -33
- package/coverage/lcov-report/react/components/{InfoModal/index.jsx.html → Dropdown/index.js.html} +102 -154
- package/coverage/lcov-report/react/components/Error/Collapsible.jsx.html +26 -21
- package/coverage/lcov-report/react/components/Error/ErrorUI.jsx.html +11 -6
- package/coverage/lcov-report/react/components/Error/error.js.html +8 -3
- package/coverage/lcov-report/react/components/Error/index.html +11 -6
- package/coverage/lcov-report/react/components/Footer/FooterUI.jsx.html +196 -194
- package/coverage/lcov-report/react/components/Footer/LegacyFooterUI.jsx.html +9 -4
- package/coverage/lcov-report/react/components/Footer/SocialLinks.jsx.html +18 -13
- package/coverage/lcov-report/react/components/Footer/Subscribe.jsx.html +18 -13
- package/coverage/lcov-report/react/components/Footer/footer.js.html +12 -37
- package/coverage/lcov-report/react/components/Footer/index.html +35 -45
- package/coverage/lcov-report/react/components/{InfoModal → GovBanner}/index.html +27 -22
- package/coverage/lcov-report/react/components/{Tabs/TabsUI.jsx.html → GovBanner/index.js.html} +146 -153
- package/coverage/lcov-report/react/components/Header/HeaderAccountMenu.jsx.html +81 -154
- package/coverage/lcov-report/react/components/Header/HeaderCancel.jsx.html +15 -10
- package/coverage/lcov-report/react/components/Header/HeaderContainer.jsx.html +91 -50
- package/coverage/lcov-report/react/components/Header/HeaderLogo.jsx.html +105 -31
- package/coverage/lcov-report/react/components/Header/HeaderMenuButton.js.html +109 -26
- package/coverage/lcov-report/react/components/Header/HeaderMenuItem.jsx.html +510 -85
- package/coverage/lcov-report/react/components/Header/HeaderMenuLink.js.html +137 -24
- package/coverage/lcov-report/react/components/Header/HeaderMenuSignOutButton.js.html +134 -21
- package/coverage/lcov-report/react/components/Header/HeaderMobileButton.js.html +56 -24
- package/coverage/lcov-report/react/components/Header/HeaderUI.jsx.html +172 -179
- package/coverage/lcov-report/react/components/Header/HelpIcon.jsx.html +30 -19
- package/coverage/lcov-report/react/components/Header/ImpersonatorBanner.jsx.html +331 -0
- package/coverage/lcov-report/react/components/Header/NavigationButtonIcon.jsx.html +9 -4
- package/coverage/lcov-report/react/components/Header/header.js.html +15 -4
- package/coverage/lcov-report/react/components/Header/hooks.js.html +187 -26
- package/coverage/lcov-report/react/components/Header/index.html +157 -122
- package/coverage/lcov-report/react/components/{Spinner/index.js.html → Header/utag-helpers.js.html} +26 -21
- package/coverage/lcov-report/react/components/Infotip/Infotip.jsx.html +12 -7
- package/coverage/lcov-report/react/components/{Tabs/tabs.js.html → Infotip/InfotipContent.jsx.html} +83 -48
- package/coverage/lcov-report/react/components/Infotip/InfotipIcon.jsx.html +12 -7
- package/coverage/lcov-report/react/components/Infotip/index.html +8 -3
- package/coverage/lcov-report/react/components/Infotip/index.js.html +8 -3
- package/coverage/lcov-report/react/components/{FlashNotification/FlashNotificationUI.jsx.html → Modal/LegacyModal.jsx.html} +89 -84
- package/coverage/lcov-report/react/components/Modal/Modal.jsx.html +505 -0
- package/coverage/lcov-report/react/components/Modal/index.html +52 -17
- package/coverage/lcov-report/react/components/Modal/index.jsx.html +38 -201
- package/coverage/lcov-report/{components/SideNav/Links/CmsSwitchLink.jsx.html → react/components/NotificationBanner/CollapsedView.js.html} +52 -50
- package/coverage/lcov-report/{components/SideNav/Details/PracticeDetails.jsx.html → react/components/NotificationBanner/ExpandedView.js.html} +74 -57
- package/coverage/lcov-report/react/components/NotificationBanner/index.html +56 -21
- package/coverage/lcov-report/react/components/NotificationBanner/index.js.html +615 -43
- package/coverage/lcov-report/react/components/SanitizedContent/index.html +8 -3
- package/coverage/lcov-report/react/components/SanitizedContent/index.jsx.html +12 -7
- package/coverage/lcov-report/react/components/{Spinner → SessionDialog}/index.html +11 -6
- package/coverage/lcov-report/react/components/{FlashNotification/index.js.html → SessionDialog/sessionDialog.js.html} +35 -42
- package/coverage/lcov-report/react/components/SessionDialogUI.jsx.html +80 -51
- package/coverage/lcov-report/react/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +38 -12
- package/coverage/lcov-report/react/components/SideNav/AnimationGroup/index.html +18 -13
- package/coverage/lcov-report/react/components/SideNav/Chart/ScoreChart.jsx.html +67 -56
- package/coverage/lcov-report/react/components/SideNav/Chart/index.html +26 -21
- package/coverage/lcov-report/react/components/SideNav/Chart/index.js.html +9 -4
- package/coverage/lcov-report/react/components/SideNav/Content/LevelOneContent.jsx.html +189 -514
- package/coverage/lcov-report/react/components/SideNav/Content/LevelTwoContent.jsx.html +28 -17
- package/coverage/lcov-report/{components/SideNav/Details → react/components/SideNav/Content/SelectRole}/index.html +42 -52
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/index.js.html +316 -0
- package/coverage/lcov-report/react/components/SideNav/Content/SelectRole/utils.js.html +505 -0
- package/coverage/lcov-report/react/components/SideNav/Content/index.html +32 -27
- package/coverage/lcov-report/react/components/SideNav/Content/index.js.html +8 -3
- package/coverage/lcov-report/react/components/SideNav/Details/IndividualDetails.jsx.html +10 -5
- package/coverage/lcov-report/react/components/SideNav/Details/PracticeDetails.jsx.html +26 -9
- package/coverage/lcov-report/react/components/SideNav/Details/index.html +23 -18
- package/coverage/lcov-report/react/components/SideNav/Details/index.js.html +8 -3
- package/coverage/lcov-report/react/components/SideNav/Links/CmsSwitchLink.jsx.html +9 -4
- package/coverage/lcov-report/react/components/SideNav/Links/NavItemInline.jsx.html +8 -3
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkContainer.jsx.html +54 -64
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkDrawer.jsx.html +281 -27
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkInline.jsx.html +66 -46
- package/coverage/lcov-report/react/components/SideNav/Links/NavLinkToggle.jsx.html +8 -3
- package/coverage/lcov-report/react/components/SideNav/Links/index.html +44 -39
- package/coverage/lcov-report/react/components/SideNav/Links/index.js.html +8 -3
- package/coverage/lcov-report/react/components/SideNav/UI/SideNavUI.jsx.html +165 -181
- package/coverage/lcov-report/react/components/SideNav/UI/index.html +28 -23
- package/coverage/lcov-report/react/components/SideNav/UI/index.js.html +8 -3
- package/coverage/lcov-report/react/components/SideNav/helpers.js.html +967 -26
- package/coverage/lcov-report/react/components/SideNav/index.html +27 -22
- package/coverage/lcov-report/react/components/SideNav/index.js.html +8 -3
- package/coverage/lcov-report/react/components/Tooltip/Tooltip.jsx.html +20 -15
- package/coverage/lcov-report/react/components/Tooltip/index.html +8 -3
- package/coverage/lcov-report/react/components/Tooltip/index.js.html +8 -3
- package/coverage/lcov-report/react/components/Tooltip/position.js.html +22 -17
- package/coverage/lcov-report/{components/SideNav/AnimationGroup → react/components/hooks}/index.html +29 -24
- package/coverage/lcov-report/react/components/hooks/useGetConfig.js.html +310 -0
- package/coverage/lcov-report/react/components/index.html +10 -5
- package/coverage/lcov-report/react/index.html +20 -15
- package/coverage/lcov-report/react/index.js.html +29 -9
- package/coverage/lcov-report/react/lib/Chevron.jsx.html +181 -0
- package/coverage/lcov-report/react/lib/SvgComponents.jsx.html +221 -132
- package/coverage/lcov-report/react/lib/index.html +32 -27
- package/coverage/lcov-report/react/lib/svg-definitions.svg.html +8 -3
- package/coverage/lcov-report/react/session/index.html +32 -27
- package/coverage/lcov-report/react/session/index.js.html +8 -3
- package/coverage/lcov-report/react/session/logout.js.html +122 -18
- package/coverage/lcov-report/react/session/refresh.js.html +12 -7
- package/coverage/lcov-report/react/session/ttl.js.html +9 -4
- package/coverage/lcov-report/session/index.html +50 -45
- package/coverage/lcov-report/session/index.js.html +8 -3
- package/coverage/lcov-report/session/logout.js.html +144 -49
- package/coverage/lcov-report/session/refresh.js.html +41 -36
- package/coverage/lcov-report/session/ttl.js.html +34 -29
- package/coverage/lcov-report/sorter.js +26 -0
- package/coverage/lcov.info +3189 -46
- package/dist/browser.js +1 -1
- package/dist/browser.js.LICENSE.txt +1 -7
- package/dist/browser.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.LICENSE.txt +1 -7
- package/dist/index.js.map +1 -1
- package/dist/react/index.js +1 -1
- package/dist/react/index.js.LICENSE.txt +16 -16
- package/dist/react/index.js.map +1 -1
- package/fonts/PublicSans-Black.ttf +0 -0
- package/fonts/PublicSans-BlackItalic.ttf +0 -0
- package/fonts/PublicSans-Bold.ttf +0 -0
- package/fonts/PublicSans-BoldItalic.ttf +0 -0
- package/fonts/PublicSans-ExtraBold.ttf +0 -0
- package/fonts/PublicSans-ExtraBoldItalic.ttf +0 -0
- package/fonts/PublicSans-ExtraLight.ttf +0 -0
- package/fonts/PublicSans-ExtraLightItalic.ttf +0 -0
- package/fonts/PublicSans-Italic.ttf +0 -0
- package/fonts/PublicSans-Light.ttf +0 -0
- package/fonts/PublicSans-LightItalic.ttf +0 -0
- package/fonts/PublicSans-Medium.ttf +0 -0
- package/fonts/PublicSans-MediumItalic.ttf +0 -0
- package/fonts/PublicSans-Regular.ttf +0 -0
- package/fonts/PublicSans-SemiBold.ttf +0 -0
- package/fonts/PublicSans-SemiBoldItalic.ttf +0 -0
- package/fonts/PublicSans-Thin.ttf +0 -0
- package/fonts/PublicSans-ThinItalic.ttf +0 -0
- package/images/icon-dot-gov.svg +1 -0
- package/images/icon-https.svg +1 -0
- package/images/icons/close-x.svg +6 -0
- package/images/icons/svg/arrow-down.svg +3 -0
- package/images/icons/svg/arrow-download.svg +1 -0
- package/images/icons/svg/arrow-right.svg +1 -0
- package/images/icons/svg/arrow-up.svg +3 -0
- package/images/icons/svg/block.svg +5 -0
- package/images/icons/svg/calendar.svg +1 -0
- package/images/icons/svg/check-circle.svg +5 -0
- package/images/icons/svg/checkmark.svg +7 -0
- package/images/icons/svg/chevron-down.svg +11 -0
- package/images/icons/svg/chevron-left.svg +12 -0
- package/images/icons/svg/chevron-right.svg +12 -0
- package/images/icons/svg/chevron-up.svg +12 -0
- package/images/icons/svg/clipboard.svg +1 -0
- package/images/icons/svg/close.svg +1 -0
- package/images/icons/svg/divide.svg +13 -0
- package/images/icons/svg/doctors-and-clinicians-preview.svg +10 -0
- package/images/icons/svg/download.svg +1 -0
- package/images/icons/svg/dropdown-arrow.svg +1 -0
- package/images/icons/svg/equals.svg +13 -0
- package/images/icons/svg/exclamation.svg +11 -0
- package/images/icons/svg/external.svg +1 -0
- package/images/icons/svg/file-download.svg +1 -0
- package/images/icons/svg/file-upload.svg +1 -0
- package/images/icons/svg/info.svg +20 -0
- package/images/icons/svg/manage-user-access.svg +8 -0
- package/images/icons/svg/multiply.svg +12 -0
- package/images/icons/svg/performance-feedback.svg +1 -0
- package/images/icons/svg/plus.svg +12 -0
- package/images/icons/svg/preview.svg +17 -0
- package/images/icons/svg/print.svg +1 -0
- package/images/icons/svg/registration.svg +8 -0
- package/images/icons/svg/reporting.svg +17 -0
- package/images/icons/svg/save-disk.svg +5 -0
- package/images/icons/svg/search.svg +1 -0
- package/images/icons/svg/subtract.svg +15 -0
- package/images/icons/svg/targeted-review.svg +15 -0
- package/images/icons/svg/tooltip-question.svg +1 -0
- package/images/icons/svg/trash.svg +1 -0
- package/images/icons/svg/upload.svg +1 -0
- package/images/us_flag_small.png +0 -0
- package/index.js +5 -0
- package/jest.config.js +139 -132
- package/lib/Chevron.jsx +32 -0
- package/lib/SvgComponents.jsx +197 -49
- package/package.json +60 -78
- package/session/logout.js +35 -2
- package/styles/_global.scss +63 -62
- package/styles/_main.scss +6 -0
- package/styles/_qpp-style.scss +0 -3
- package/styles/components/_accordion.scss +249 -246
- package/styles/components/_autocomplete.scss +0 -3
- package/styles/components/_spinner.scss +0 -2
- package/styles/components/_tables.scss +77 -67
- package/styles/components/_text.scss +102 -102
- package/styles/components/_variables.scss +12 -12
- package/styles/qppds/base/_backgrounds.scss +1 -6
- package/styles/qppds/base/_fonts.scss +24 -0
- package/styles/qppds/base/_icon.scss +31 -0
- package/styles/qppds/base/_layout.scss +5 -0
- package/styles/qppds/base/_typography.scss +77 -43
- package/styles/qppds/base/index.scss +3 -6
- package/styles/qppds/components/_alert.scss +101 -0
- package/styles/qppds/components/_breadcrumbs.scss +42 -10
- package/styles/qppds/components/_button.scss +38 -12
- package/styles/qppds/components/_card.scss +175 -0
- package/styles/qppds/components/_checkbox.scss +199 -0
- package/styles/qppds/components/_circular-loader.scss +47 -0
- package/styles/qppds/components/_details.scss +90 -0
- package/styles/qppds/components/_dropdown-menu.scss +125 -0
- package/styles/qppds/components/_dropdown.scss +5 -0
- package/styles/qppds/components/_footer.scss +606 -0
- package/styles/qppds/components/_gov-banner.scss +344 -0
- package/styles/{components → qppds/components}/_header.scss +460 -24
- package/styles/qppds/components/_link.scss +32 -9
- package/styles/qppds/components/_modal.scss +61 -21
- package/styles/qppds/components/_page-header.scss +65 -2
- package/styles/qppds/components/_pagination.scss +227 -0
- package/styles/qppds/components/_process-list.scss +104 -0
- package/styles/qppds/components/_radio-button.scss +184 -0
- package/styles/qppds/components/_search.scss +118 -0
- package/styles/{components → qppds/components}/_sidebar.scss +2 -0
- package/styles/qppds/components/_step-indicator.scss +190 -0
- package/styles/qppds/components/_table.scss +157 -0
- package/styles/qppds/components/_tabs.scss +197 -0
- package/styles/qppds/components/_text-input.scss +60 -0
- package/styles/qppds/components/index.scss +18 -0
- package/styles/{components → qppds/components}/sidebar/_links.scss +48 -1
- package/styles/qppds/components/sidebar/_select-role-dropdown.scss +21 -0
- package/styles/{components → qppds/components}/sidebar/_sidebar-animation.scss +4 -0
- package/styles/qppds/components/sidebar/_sidebar.scss +146 -0
- package/styles/qppds/settings/_functions.scss +3 -1
- package/styles/qppds/settings/mixins/_borders.scss +6 -0
- package/styles/qppds/settings/mixins/_focus.scss +7 -1
- package/styles/qppds/settings/mixins/_icons.scss +39 -4
- package/styles/qppds/settings/mixins/_index.scss +3 -0
- package/styles/qppds/settings/mixins/_layout.scss +46 -7
- package/styles/qppds/settings/mixins/_table.scss +91 -0
- package/styles/qppds/settings/mixins/_type.scss +89 -0
- package/styles/qppds/settings/variables/_color.scss +47 -1
- package/styles/qppds/settings/variables/_index.scss +2 -1
- package/styles/qppds/settings/variables/_layout.scss +34 -9
- package/styles/qppds/settings/variables/_type.scss +41 -0
- package/styles/qppds/settings/variables/_z-index.scss +8 -0
- package/styles/qppds/utilities/_background-color.scss +4 -0
- package/styles/qppds/utilities/_color.scss +24 -0
- package/styles/qppds/utilities/{_display-visability.scss → _display-visibility.scss} +8 -0
- package/styles/qppds/utilities/_flexbox.scss +113 -0
- package/styles/qppds/utilities/_font-family.scss +4 -0
- package/styles/qppds/utilities/_gap.scss +38 -0
- package/styles/qppds/utilities/_height.scss +79 -0
- package/styles/qppds/utilities/_list-style.scss +18 -0
- package/styles/qppds/utilities/_position.scss +24 -0
- package/styles/qppds/utilities/_text-align.scss +40 -0
- package/styles/qppds/utilities/_text-transform.scss +7 -0
- package/styles/qppds/utilities/_truncate.scss +5 -5
- package/styles/qppds/utilities/_vertical-align.scss +72 -0
- package/styles/qppds/utilities/_width.scss +38 -1
- package/styles/qppds/utilities/index.scss +8 -2
- package/svgo.config.js +14 -0
- package/test/components/Accordion.test.js +4 -13
- package/test/components/ErrorUI.test.js +10 -46
- package/test/components/FooterUI.test.js +0 -30
- package/test/components/HeaderUI.test.js +32 -40
- package/test/components/Infotip.test.js +18 -12
- package/test/components/SessionDialogUI.test.js +55 -70
- package/test-setup.js +0 -8
- package/webpack.config.js +29 -39
- package/webpack.config.react.js +7 -18
- package/.storybook/.babelrc +0 -4
- package/.storybook/main.js +0 -88
- package/.storybook/preview-head.html +0 -9
- package/.storybook/preview.js +0 -5
- package/Session.vim +0 -83
- package/components/Accordion/Accordion.stories.js +0 -20
- package/components/Breadcrumb/Breadcrumb.stories.js +0 -58
- package/components/Button/Button.stories.js +0 -125
- package/components/Footer/Footer.stories.js +0 -20
- package/components/Footer/LegacyFooterUI.jsx +0 -194
- package/components/Header/Header.stories.js +0 -32
- package/components/InfoModal/InfoModal.stories.js +0 -98
- package/components/InfoModal/index.jsx +0 -104
- package/components/Infotip/Infotip.stories.js +0 -50
- package/components/Modal/Modal.stories.js +0 -159
- package/components/NotificationBanner/NotificationBanner.stories.js +0 -22
- package/components/NotificationBanner/NotificationBannerUI.jsx +0 -282
- package/components/SideNav/SideNav.stories.js +0 -397
- package/components/Spinner/index.js +0 -9
- package/components/Tabs/TabsUI.jsx +0 -118
- package/components/Tabs/tabs.js +0 -36
- package/components/Tooltip/Tooltip.jsx +0 -88
- package/components/Tooltip/Tooltip.stories.js +0 -80
- package/components/Tooltip/index.js +0 -3
- package/components/Tooltip/position.js +0 -68
- package/components/UnwrappedSpinner/index.js +0 -8
- package/components/UnwrappedTabs/TabPanelUI.jsx +0 -16
- package/components/UnwrappedTabs/TabsUI.jsx +0 -82
- package/coverage/lcov-report/Accordion/index.html +0 -111
- package/coverage/lcov-report/Error/index.html +0 -126
- package/coverage/lcov-report/ScoreChart.jsx.html +0 -1025
- package/coverage/lcov-report/SideNav/Chart/ScoreChart.jsx.html +0 -1025
- package/coverage/lcov-report/components/Footer/LegacyFooterUI.jsx.html +0 -668
- package/coverage/lcov-report/components/NotificationBanner/NotificationBannerUI.jsx.html +0 -1010
- package/coverage/lcov-report/components/SideNav/AnimationGroup/AnimationGroup.jsx.html +0 -131
- package/coverage/lcov-report/components/SideNav/Chart/index.js.html +0 -89
- package/coverage/lcov-report/components/SideNav/Content/LevelOneContent.jsx.html +0 -1007
- package/coverage/lcov-report/components/SideNav/Content/index.html +0 -141
- package/coverage/lcov-report/components/SideNav/Content/index.js.html +0 -92
- package/coverage/lcov-report/components/SideNav/Details/index.js.html +0 -92
- package/coverage/lcov-report/components/SideNav/Links/index.html +0 -201
- package/coverage/lcov-report/components/SideNav/UI/SideNavUI.jsx.html +0 -1298
- package/coverage/lcov-report/components/SideNav/UI/index.html +0 -126
- package/coverage/lcov-report/components/SideNav/UI/index.js.html +0 -89
- package/coverage/lcov-report/lib/svg-definitions.svg.html +0 -1319
- package/coverage/lcov-report/react/components/NotificationBanner/NotificationBannerUI.jsx.html +0 -926
- package/styles/components/_footer.scss +0 -593
- package/styles/components/_header_backup.scss +0 -574
- package/styles/components/sidebar/_sidebar.scss +0 -141
- package/test/components/Tooltip.test.js +0 -147
- package/test/components/__snapshots__/Accordion.test.js.snap +0 -11439
- package/test/components/__snapshots__/HeaderUI.test.js.snap +0 -3
- /package/styles/{components → qppds/components}/sidebar/_animations.scss +0 -0
- /package/styles/{components → qppds/components}/sidebar/_cms.scss +0 -0
- /package/styles/{components → qppds/components}/sidebar/_details.scss +0 -0
- /package/styles/{components → qppds/components}/sidebar/_sidebar-tooltip.scss +0 -0
- /package/styles/{components → qppds/components}/sidebar/project-specific/_wi.scss +0 -0
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
2
|
-
import Modal from './index';
|
|
3
|
-
import { withKnobs, boolean, text } from '@storybook/addon-knobs';
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
title: 'Modal',
|
|
7
|
-
component: Modal,
|
|
8
|
-
decorators: [withKnobs],
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
const useModal = () => {
|
|
12
|
-
const [open, setOpen] = useState(false);
|
|
13
|
-
const openModal = () => setOpen(true);
|
|
14
|
-
const closeModal = () => setOpen(false);
|
|
15
|
-
return [open, openModal, closeModal];
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
export const WithDesignSystem = () => {
|
|
19
|
-
const [open, openModal, closeModal] = useModal();
|
|
20
|
-
const knobIsOpen = boolean('isOpen', false);
|
|
21
|
-
return (
|
|
22
|
-
<div className="qpp-u-padding--12">
|
|
23
|
-
<button className="qpp-c-button" onClick={openModal}>
|
|
24
|
-
Open Modal
|
|
25
|
-
</button>
|
|
26
|
-
<Modal
|
|
27
|
-
useDesignSystem
|
|
28
|
-
isOpen={open || knobIsOpen}
|
|
29
|
-
title={text('Title text', 'Title Text')}
|
|
30
|
-
onRequestClose={closeModal}
|
|
31
|
-
>
|
|
32
|
-
<p>
|
|
33
|
-
{text(
|
|
34
|
-
'bodyText',
|
|
35
|
-
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus ac pulvinar massa, in mattis ligula. Vestibulum enim velit, ullamcorper vitae lorem ullamcorper, blandit fringilla mauris.'
|
|
36
|
-
)}
|
|
37
|
-
</p>
|
|
38
|
-
</Modal>
|
|
39
|
-
</div>
|
|
40
|
-
);
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
export const WithDesignSystemDialog = () => {
|
|
44
|
-
const [open, openModal, closeModal] = useModal();
|
|
45
|
-
const knobIsOpen = boolean('isOpen', false);
|
|
46
|
-
return (
|
|
47
|
-
<div className="qpp-u-padding--12">
|
|
48
|
-
<button className="qpp-c-button" onClick={openModal}>
|
|
49
|
-
Open Modal
|
|
50
|
-
</button>
|
|
51
|
-
<Modal
|
|
52
|
-
useDesignSystem
|
|
53
|
-
isOpen={open || knobIsOpen}
|
|
54
|
-
title={text('Title text', 'Title Text')}
|
|
55
|
-
onRequestClose={closeModal}
|
|
56
|
-
primary={{
|
|
57
|
-
title: 'Yes, go for it',
|
|
58
|
-
onClick: () => {
|
|
59
|
-
console.log('submit');
|
|
60
|
-
closeModal();
|
|
61
|
-
},
|
|
62
|
-
}}
|
|
63
|
-
secondary={{
|
|
64
|
-
title: 'No, take me back',
|
|
65
|
-
}}
|
|
66
|
-
>
|
|
67
|
-
<p>
|
|
68
|
-
{text(
|
|
69
|
-
'bodyText',
|
|
70
|
-
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus ac pulvinar massa, in mattis ligula. Vestibulum enim velit, ullamcorper vitae lorem ullamcorper, blandit fringilla mauris.'
|
|
71
|
-
)}
|
|
72
|
-
</p>
|
|
73
|
-
</Modal>
|
|
74
|
-
</div>
|
|
75
|
-
);
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
export const WithDesignSystemOverflow = () => {
|
|
79
|
-
const [open, openModal, closeModal] = useModal();
|
|
80
|
-
const knobIsOpen = boolean('isOpen', false);
|
|
81
|
-
return (
|
|
82
|
-
<div className="qpp-u-padding--12">
|
|
83
|
-
<button className="qpp-c-button" onClick={openModal}>
|
|
84
|
-
Open Modal
|
|
85
|
-
</button>
|
|
86
|
-
<Modal
|
|
87
|
-
useDesignSystem
|
|
88
|
-
isOpen={open || knobIsOpen}
|
|
89
|
-
title={text('Title text', 'Title Text')}
|
|
90
|
-
onRequestClose={closeModal}
|
|
91
|
-
primary={{
|
|
92
|
-
title: 'Yes, go for it',
|
|
93
|
-
onClick: () => {
|
|
94
|
-
console.log('submit');
|
|
95
|
-
closeModal();
|
|
96
|
-
},
|
|
97
|
-
}}
|
|
98
|
-
secondary={{
|
|
99
|
-
title: 'No, take me back',
|
|
100
|
-
}}
|
|
101
|
-
>
|
|
102
|
-
<p>
|
|
103
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus ac
|
|
104
|
-
pulvinar massa, in mattis ligula. Vestibulum enim velit, ullamcorper
|
|
105
|
-
vitae lorem ullamcorper, blandit fringilla mauris. Aenean odio nulla,
|
|
106
|
-
dapibus convallis est ac, tempor congue lorem. Aliquam facilisis
|
|
107
|
-
tortor eget lectus gravida bibendum. Suspendisse vel posuere risus.
|
|
108
|
-
Etiam condimentum sollicitudin est, eget auctor lectus suscipit nec.
|
|
109
|
-
Duis efficitur vitae risus at malesuada. Mauris tempus turpis sed
|
|
110
|
-
lacus lacinia, et mattis tortor eleifend. In sit amet felis vel quam
|
|
111
|
-
egestas ultricies ac ac nisl. Morbi elementum dui libero, non
|
|
112
|
-
convallis risus ornare vel. Maecenas posuere ipsum ut sem aliquet,
|
|
113
|
-
quis maximus dolor cursus. Praesent vulputate orci tellus, sed
|
|
114
|
-
fringilla arcu mollis sit amet. Phasellus eros turpis, consequat sit
|
|
115
|
-
amet placerat sed, mollis ac justo.
|
|
116
|
-
</p>
|
|
117
|
-
<p>
|
|
118
|
-
Cras quis pharetra elit. Mauris lacinia quam quis metus mattis
|
|
119
|
-
lobortis vel nec arcu. Fusce nec tellus vel nunc cursus vestibulum.
|
|
120
|
-
Quisque pretium, arcu at sagittis posuere, leo magna tempus nunc, vel
|
|
121
|
-
malesuada nunc mauris ac ante. Donec arcu velit, imperdiet vitae purus
|
|
122
|
-
nec, imperdiet auctor nisi. Cras ornare, elit sit amet viverra
|
|
123
|
-
bibendum, justo dolor congue mi, quis pretium erat orci a lorem. Sed
|
|
124
|
-
rhoncus quam ut tellus hendrerit accumsan.
|
|
125
|
-
</p>
|
|
126
|
-
<p>
|
|
127
|
-
Donec varius elit vitae elit efficitur fermentum. Vestibulum ante
|
|
128
|
-
ipsum primis in faucibus orci luctus et ultrices posuere cubilia
|
|
129
|
-
curae; Nulla facilisi. Ut malesuada venenatis varius. Nunc libero
|
|
130
|
-
massa, luctus sagittis sapien ultrices, pulvinar venenatis purus. In
|
|
131
|
-
nec orci ac nibh sagittis lobortis vel sed massa. Morbi pretium odio
|
|
132
|
-
vitae malesuada ullamcorper. Pellentesque facilisis posuere
|
|
133
|
-
consectetur. Nam maximus finibus ante, non eleifend neque euismod et.
|
|
134
|
-
</p>
|
|
135
|
-
<p>
|
|
136
|
-
Pellentesque vehicula nec massa nec accumsan. Pellentesque non odio eu
|
|
137
|
-
felis hendrerit pellentesque non sed neque. Morbi dui nisl, facilisis
|
|
138
|
-
id gravida non, vehicula at dui. In eleifend suscipit imperdiet.
|
|
139
|
-
Quisque facilisis augue et mi lobortis tristique. Praesent auctor
|
|
140
|
-
dictum erat, non mollis ante tempus id. Integer et libero iaculis,
|
|
141
|
-
imperdiet neque at, pharetra nisl. Suspendisse diam massa, vehicula eu
|
|
142
|
-
varius ullamcorper, semper vel velit. Morbi consequat mattis nisi, id
|
|
143
|
-
dignissim est bibendum non. Suspendisse semper laoreet neque, ac
|
|
144
|
-
tincidunt tortor. Ut posuere urna a convallis consectetur. Mauris
|
|
145
|
-
varius cursus libero sed molestie. Duis id dignissim arcu. Mauris
|
|
146
|
-
tincidunt egestas congue.
|
|
147
|
-
</p>
|
|
148
|
-
<p>
|
|
149
|
-
Donec rutrum erat vitae nulla ultricies, quis laoreet orci consequat.
|
|
150
|
-
Nunc et justo volutpat dolor feugiat convallis. Vivamus efficitur nisi
|
|
151
|
-
quis risus eleifend, ut tincidunt turpis volutpat. Nam commodo turpis
|
|
152
|
-
dolor, dapibus rutrum erat facilisis a. Ut a dictum urna. Maecenas vel
|
|
153
|
-
egestas odio. Ut venenatis est dolor, eget ullamcorper diam finibus
|
|
154
|
-
et. Proin tincidunt porta pellentesque.
|
|
155
|
-
</p>
|
|
156
|
-
</Modal>
|
|
157
|
-
</div>
|
|
158
|
-
);
|
|
159
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import NotificationBanner from './NotificationBannerUI';
|
|
3
|
-
import { withKnobs, boolean } from '@storybook/addon-knobs';
|
|
4
|
-
|
|
5
|
-
export default {
|
|
6
|
-
title: 'NotificationBanner',
|
|
7
|
-
component: NotificationBanner,
|
|
8
|
-
decorators: [withKnobs],
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export const ExampleNotificationBanner = () => (
|
|
12
|
-
<NotificationBanner
|
|
13
|
-
dismissable={boolean('dismissable', false)}
|
|
14
|
-
content="CONTENT"
|
|
15
|
-
label="LABEL"
|
|
16
|
-
name="NAME"
|
|
17
|
-
fromStorage={false}
|
|
18
|
-
color="blue"
|
|
19
|
-
/>
|
|
20
|
-
);
|
|
21
|
-
|
|
22
|
-
ExampleNotificationBanner.storyName = 'example NotificationBanner';
|
|
@@ -1,282 +0,0 @@
|
|
|
1
|
-
import React, { Component } from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import SanitizedContent from '../SanitizedContent';
|
|
4
|
-
import { CloseXIcon, BellOutline } from '../../lib/SvgComponents.jsx';
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Renders the QPP NotificationBanner content.
|
|
8
|
-
*/
|
|
9
|
-
export default class NotificationBannerUI extends Component {
|
|
10
|
-
/**
|
|
11
|
-
* @param {Object} props - An object containing content and config data
|
|
12
|
-
* @param {Boolean} props.dismissable - Whether to render a close button
|
|
13
|
-
* @param {String} props.content - An HTML string of content
|
|
14
|
-
* @param {String} props.name - The unique name of this NotificationBanner
|
|
15
|
-
* @param {Boolean} props.fromStorage - Whether to load content from
|
|
16
|
-
* localStorage
|
|
17
|
-
*/
|
|
18
|
-
constructor(props) {
|
|
19
|
-
super(props);
|
|
20
|
-
|
|
21
|
-
this.state = {
|
|
22
|
-
content: props.content,
|
|
23
|
-
label: props.label,
|
|
24
|
-
color: props.color,
|
|
25
|
-
};
|
|
26
|
-
|
|
27
|
-
this._renderCloseButton = this.renderCloseButton.bind(this);
|
|
28
|
-
this._collapseNotification = this.collapseNotification.bind(this);
|
|
29
|
-
this._expandNotification = this.expandNotification.bind(this);
|
|
30
|
-
this._setBannerHeight = this.setBannerHeight.bind(this);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* If any notifications are found in localStorage, filter to ones that match
|
|
35
|
-
* this instance's unique props.name. If the notification is active, set the
|
|
36
|
-
* content, otherwise empty it.
|
|
37
|
-
*/
|
|
38
|
-
componentDidMount() {
|
|
39
|
-
const notifications = this.getNotificationsFromStorage() || [];
|
|
40
|
-
const now = new Date();
|
|
41
|
-
|
|
42
|
-
notifications
|
|
43
|
-
.filter((x) => x.name === this.props.name)
|
|
44
|
-
.forEach((x) => {
|
|
45
|
-
if (this.isNotificationCurrent(now, x)) {
|
|
46
|
-
this.setState({
|
|
47
|
-
content: this.props.fromStorage ? x.content : this.props.content,
|
|
48
|
-
label:
|
|
49
|
-
this.props.fromStorage && x.label ? x.label : this.props.label,
|
|
50
|
-
color:
|
|
51
|
-
this.props.fromStorage && x.color ? x.color : this.props.color,
|
|
52
|
-
expanded: this.isNotificationExpanded(x),
|
|
53
|
-
});
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
if (window.innerWidth <= 767) {
|
|
58
|
-
this.setState({
|
|
59
|
-
expanded: false,
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
window.addEventListener('load', this._setBannerHeight);
|
|
64
|
-
window.addEventListener('resize', this._setBannerHeight);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Attempt to read notifications from localStorage
|
|
69
|
-
* @return {Array} An array of notification objects
|
|
70
|
-
*/
|
|
71
|
-
getNotificationsFromStorage() {
|
|
72
|
-
try {
|
|
73
|
-
return JSON.parse(window.localStorage.getItem('notifications'));
|
|
74
|
-
} catch (e) {
|
|
75
|
-
return [];
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
setBannerHeight() {
|
|
80
|
-
if (this.state.content) {
|
|
81
|
-
this.bannerContainer.style.transition = 'none';
|
|
82
|
-
|
|
83
|
-
this.setState({
|
|
84
|
-
height: this.state.expanded
|
|
85
|
-
? '100%'
|
|
86
|
-
: this.collapsedWrapper.offsetHeight + 'px',
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Check the notification properties to determine whether it is still active
|
|
93
|
-
* based on the current date and time.
|
|
94
|
-
*
|
|
95
|
-
* @param {Date} now
|
|
96
|
-
* @param {Object} notification
|
|
97
|
-
* @return {Boolean}
|
|
98
|
-
*/
|
|
99
|
-
isNotificationCurrent(now, notification) {
|
|
100
|
-
const startDate = new Date(notification.startDate);
|
|
101
|
-
const endDate = new Date(notification.endDate);
|
|
102
|
-
const isActive =
|
|
103
|
-
(!this.isDateValid(startDate) && !this.isDateValid(endDate)) ||
|
|
104
|
-
(startDate <= now && now <= endDate);
|
|
105
|
-
|
|
106
|
-
return isActive;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
isNotificationExpanded(notification) {
|
|
110
|
-
const dateDismissed = new Date(notification.dateDismissed);
|
|
111
|
-
const dateUpdated = new Date(notification.dateUpdated);
|
|
112
|
-
const notDismissed =
|
|
113
|
-
(this.isDateValid(dateUpdated) &&
|
|
114
|
-
this.isDateValid(dateDismissed) &&
|
|
115
|
-
dateUpdated >= dateDismissed) ||
|
|
116
|
-
!this.isDateValid(dateDismissed);
|
|
117
|
-
|
|
118
|
-
return notDismissed;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Whether the date is valid, i.e. not null
|
|
123
|
-
*
|
|
124
|
-
* @param {Date} date
|
|
125
|
-
* @return {Boolean}
|
|
126
|
-
*/
|
|
127
|
-
isDateValid(date) {
|
|
128
|
-
return !isNaN(Date.parse(date));
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/**
|
|
132
|
-
* Try to find this NotificationBanner instance in localStorage, or else add
|
|
133
|
-
* a minimal version of it, and mark it with a dateDismissed, then update
|
|
134
|
-
* localStorage.
|
|
135
|
-
*/
|
|
136
|
-
markNotificationClosed() {
|
|
137
|
-
let found = false;
|
|
138
|
-
const dateDismissed = new Date().toISOString();
|
|
139
|
-
let notifications = (this.getNotificationsFromStorage() || []).map(
|
|
140
|
-
(notification) => {
|
|
141
|
-
if (notification.name === this.props.name) {
|
|
142
|
-
notification.dateDismissed = dateDismissed;
|
|
143
|
-
found = true;
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return notification;
|
|
147
|
-
}
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
if (!found) {
|
|
151
|
-
notifications = notifications.concat([
|
|
152
|
-
{
|
|
153
|
-
name: this.props.name,
|
|
154
|
-
dateDismissed,
|
|
155
|
-
},
|
|
156
|
-
]);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
window.localStorage.setItem('notifications', JSON.stringify(notifications));
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Callback when the user dimisses a notification. Mark it as dismissed in
|
|
164
|
-
* localStorage, empty the contents, and dispatch a custom event to notify
|
|
165
|
-
* any observers that it has been dismissed.
|
|
166
|
-
*/
|
|
167
|
-
collapseNotification(e) {
|
|
168
|
-
e.stopPropagation();
|
|
169
|
-
this.markNotificationClosed();
|
|
170
|
-
|
|
171
|
-
this.bannerContainer.style.transition = 'height .2s ease-out';
|
|
172
|
-
this.setState({
|
|
173
|
-
expanded: false,
|
|
174
|
-
height: this.collapsedWrapper.offsetHeight + 'px',
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
expandNotification() {
|
|
179
|
-
if (!this.state.expanded) {
|
|
180
|
-
this.bannerContainer.style.transition = 'height .2s ease-out';
|
|
181
|
-
this.setState({
|
|
182
|
-
expanded: true,
|
|
183
|
-
height: '100%',
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Renders the close button if the notification instance is dismissable.
|
|
190
|
-
*
|
|
191
|
-
* @return {String} HTML content
|
|
192
|
-
*/
|
|
193
|
-
renderCloseButton() {
|
|
194
|
-
if (this.props.dismissable) {
|
|
195
|
-
return (
|
|
196
|
-
<button
|
|
197
|
-
onClick={this._collapseNotification}
|
|
198
|
-
type="button"
|
|
199
|
-
className="notification-banner-close"
|
|
200
|
-
>
|
|
201
|
-
<svg className="close-icon" aria-hidden="true" focusable="false">
|
|
202
|
-
<CloseXIcon />
|
|
203
|
-
</svg>
|
|
204
|
-
<span className="sr-only">Close</span>
|
|
205
|
-
</button>
|
|
206
|
-
);
|
|
207
|
-
} else {
|
|
208
|
-
return '';
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
/**
|
|
213
|
-
* Render the notification if it has any contents.
|
|
214
|
-
*
|
|
215
|
-
* @return {String} HTML content
|
|
216
|
-
*/
|
|
217
|
-
render() {
|
|
218
|
-
if (this.state.content === '') {
|
|
219
|
-
return <div id="notification-banner" />;
|
|
220
|
-
} else {
|
|
221
|
-
const notificationStatus = this.state.expanded ? 'expanded' : 'collapsed';
|
|
222
|
-
const className = `notification-banner notification-banner-${this.state.color} ${notificationStatus}`;
|
|
223
|
-
|
|
224
|
-
return (
|
|
225
|
-
<div
|
|
226
|
-
style={{ height: this.state.height }}
|
|
227
|
-
ref={(elem) => (this.bannerContainer = elem)}
|
|
228
|
-
className={className}
|
|
229
|
-
>
|
|
230
|
-
<div
|
|
231
|
-
ref={(elem) => (this.expandedWrapper = elem)}
|
|
232
|
-
className={`notification-banner-wrapper expanded-view`}
|
|
233
|
-
>
|
|
234
|
-
<div className="notification-banner-label">{this.state.label}</div>
|
|
235
|
-
<div className="notification-banner-content">
|
|
236
|
-
<SanitizedContent
|
|
237
|
-
html={
|
|
238
|
-
this.state.expanded
|
|
239
|
-
? this.state.content
|
|
240
|
-
: '<p>Nothing to see here</p>'
|
|
241
|
-
}
|
|
242
|
-
/>
|
|
243
|
-
</div>
|
|
244
|
-
{this.state.expanded && this._renderCloseButton()}
|
|
245
|
-
</div>
|
|
246
|
-
|
|
247
|
-
<div
|
|
248
|
-
ref={(elem) => (this.collapsedWrapper = elem)}
|
|
249
|
-
className={`notification-banner-wrapper collapsed-view`}
|
|
250
|
-
onClick={this._expandNotification}
|
|
251
|
-
>
|
|
252
|
-
<button className={`notification-banner-label`}>
|
|
253
|
-
{this.state.label}
|
|
254
|
-
<span className="bell-icon">
|
|
255
|
-
<svg aria-hidden="true" focusable="false">
|
|
256
|
-
<BellOutline />
|
|
257
|
-
</svg>
|
|
258
|
-
</span>
|
|
259
|
-
</button>
|
|
260
|
-
</div>
|
|
261
|
-
</div>
|
|
262
|
-
);
|
|
263
|
-
}
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
NotificationBannerUI.propTypes = {
|
|
268
|
-
dismissable: PropTypes.bool,
|
|
269
|
-
content: PropTypes.string,
|
|
270
|
-
label: PropTypes.string,
|
|
271
|
-
name: PropTypes.string.isRequired,
|
|
272
|
-
fromStorage: PropTypes.bool,
|
|
273
|
-
color: PropTypes.string,
|
|
274
|
-
};
|
|
275
|
-
|
|
276
|
-
NotificationBannerUI.defaultProps = {
|
|
277
|
-
dismissable: true,
|
|
278
|
-
content: '',
|
|
279
|
-
fromStorage: false,
|
|
280
|
-
label: 'Update',
|
|
281
|
-
color: 'blue',
|
|
282
|
-
};
|