@boomerang-io/carbon-addons-boomerang-react 4.6.10-beta.5 → 4.6.11-beta.0

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.
Files changed (255) hide show
  1. package/README.md +162 -162
  2. package/dist/cjs/components/AboutPlatform/AboutPlatform.js +50 -50
  3. package/dist/cjs/components/AdvantageSideNav/AdvantageSideNav.js +241 -224
  4. package/dist/cjs/components/AutoSuggest/AutoSuggest.js +101 -101
  5. package/dist/cjs/components/Avatar/Avatar.js +18 -18
  6. package/dist/cjs/components/CheckboxList/CheckboxList.js +34 -34
  7. package/dist/cjs/components/ComboBox/ComboBox.js +103 -103
  8. package/dist/cjs/components/ComboBoxMultiSelect/ComboBoxMultiSelect.js +32 -32
  9. package/dist/cjs/components/ComboBoxMultiSelect/MultiSelect.js +208 -208
  10. package/dist/cjs/components/ComposedModal/ComposedModal.js +80 -80
  11. package/dist/cjs/components/ConfirmModal/ConfirmModal.js +43 -43
  12. package/dist/cjs/components/Creatable/Creatable.js +137 -137
  13. package/dist/cjs/components/DataDrivenInput/DataDrivenInput.js +226 -226
  14. package/dist/cjs/components/DateInput/DateInput.js +35 -35
  15. package/dist/cjs/components/DecisionButtons/DecisionButtons.js +61 -61
  16. package/dist/cjs/components/DelayedRender/DelayedRender.js +17 -17
  17. package/dist/cjs/components/DynamicFormik/DynamicFormik.js +578 -578
  18. package/dist/cjs/components/Error403/Error403.js +13 -13
  19. package/dist/cjs/components/Error403/ForbiddenErrorBackground.js +113 -113
  20. package/dist/cjs/components/Error403/GraphicWrangler/GraphicWrangler.js +62 -62
  21. package/dist/cjs/components/Error404/Error404.js +13 -13
  22. package/dist/cjs/components/Error404/GraphicLoch/GraphicLoch.js +17 -17
  23. package/dist/cjs/components/Error404/NotFoundErrorBackground.js +129 -129
  24. package/dist/cjs/components/ErrorBoundary/ErrorBoundary.js +32 -32
  25. package/dist/cjs/components/ErrorDragon/ErrorDragon.js +13 -13
  26. package/dist/cjs/components/ErrorDragon/assets/ErrorGraphic.js +35 -35
  27. package/dist/cjs/components/ErrorFullPage/ErrorFullPage.js +10 -10
  28. package/dist/cjs/components/ErrorMessage/ErrorMessage.js +22 -22
  29. package/dist/cjs/components/ErrorPage/ErrorPage.js +11 -11
  30. package/dist/cjs/components/ErrorPageCore/ErrorPageCore.js +15 -15
  31. package/dist/cjs/components/ErrorPageCore/GenericErrorBackground.js +124 -124
  32. package/dist/cjs/components/FeatureHeader/FeatureHeader.js +29 -29
  33. package/dist/cjs/components/FeatureNavTab/FeatureNavTab.js +12 -12
  34. package/dist/cjs/components/FeatureNavTabs/FeatureNavTabs.js +12 -12
  35. package/dist/cjs/components/FeatureSideNav/FeatureSideNav.js +12 -12
  36. package/dist/cjs/components/FeatureSideNav/FeatureSideNavFooter.js +8 -8
  37. package/dist/cjs/components/FeatureSideNav/FeatureSideNavHeader.js +8 -8
  38. package/dist/cjs/components/FeatureSideNav/FeatureSideNavLinks.js +14 -14
  39. package/dist/cjs/components/FeatureSideNavLink/FeatureSideNavLink.js +12 -12
  40. package/dist/cjs/components/Feedback/Feedback.js +40 -40
  41. package/dist/cjs/components/FlowModal/FlowModal.js +141 -141
  42. package/dist/cjs/components/FlowModal/FlowModalForm.js +12 -12
  43. package/dist/cjs/components/Header/Header.js +168 -182
  44. package/dist/cjs/components/Header/HeaderAppSwitcher.js +102 -94
  45. package/dist/cjs/components/Header/HeaderMenu.js +7 -7
  46. package/dist/cjs/components/Header/HeaderMenuItem.js +52 -52
  47. package/dist/cjs/components/Header/UserRequests.js +29 -29
  48. package/dist/cjs/components/ImageModal/ImageModal.js +17 -17
  49. package/dist/cjs/components/Loading/Loading.js +8 -8
  50. package/dist/cjs/components/MemberBar/MemberBar.js +20 -20
  51. package/dist/cjs/components/Modal/Modal.js +20 -20
  52. package/dist/cjs/components/ModalConfirmEdit/ModalConfirmArray.js +14 -14
  53. package/dist/cjs/components/ModalConfirmEdit/ModalConfirmDetails.js +11 -11
  54. package/dist/cjs/components/ModalConfirmEdit/ModalConfirmEdit.js +17 -17
  55. package/dist/cjs/components/ModalForm/ModalForm.js +9 -9
  56. package/dist/cjs/components/Notifications/NotificationsContainer.js +22 -22
  57. package/dist/cjs/components/Notifications/ToastNotification.js +21 -21
  58. package/dist/cjs/components/Notifications/notify.js +17 -17
  59. package/dist/cjs/components/PlatformBanner/PlatformBanner.js +8 -8
  60. package/dist/cjs/components/PlatformNotifications/PlatformNotification.js +17 -17
  61. package/dist/cjs/components/PlatformNotifications/PlatformNotificationsContainer.js +136 -136
  62. package/dist/cjs/components/Portal/Portal.js +14 -14
  63. package/dist/cjs/components/PrivacyRedirect/PrivacyRedirect.js +30 -30
  64. package/dist/cjs/components/PrivacyStatement/PrivacyStatement.js +90 -90
  65. package/dist/cjs/components/ProfileSettings/ProfileSettings.js +124 -124
  66. package/dist/cjs/components/ProtectedRoute/ProtectedRoute.js +13 -13
  67. package/dist/cjs/components/RadioGroup/RadioGroup.js +33 -33
  68. package/dist/cjs/components/RichTextArea/RichTextArea.js +142 -142
  69. package/dist/cjs/components/SignOut/SignOut.js +27 -27
  70. package/dist/cjs/components/SupportCenter/SupportCenter.js +65 -65
  71. package/dist/cjs/components/TextArea/TextArea.js +16 -16
  72. package/dist/cjs/components/TextInput/TextInput.js +13 -13
  73. package/dist/cjs/components/Toggle/Toggle.js +22 -22
  74. package/dist/cjs/components/TooltipHover/TooltipHover.js +39 -39
  75. package/dist/cjs/components/UIShell/UIShell.js +89 -90
  76. package/dist/cjs/config/servicesConfig.js +21 -21
  77. package/dist/cjs/constants/DataDrivenInputTypes.js +74 -74
  78. package/dist/cjs/constants/UserType.js +13 -13
  79. package/dist/cjs/hooks/useHeaderMenu.js +49 -49
  80. package/dist/cjs/hooks/usePortal.js +74 -74
  81. package/dist/cjs/hooks/useWindowSize.js +33 -33
  82. package/dist/cjs/internal/ListBox/ListBox.js +41 -41
  83. package/dist/cjs/internal/ListBox/ListBoxField.js +19 -19
  84. package/dist/cjs/internal/ListBox/ListBoxMenu.js +19 -19
  85. package/dist/cjs/internal/ListBox/ListBoxMenuIcon.js +31 -31
  86. package/dist/cjs/internal/ListBox/ListBoxMenuItem.js +38 -38
  87. package/dist/cjs/internal/ListBox/ListBoxSelection.js +64 -64
  88. package/dist/cjs/internal/ListBox/index.js +10 -10
  89. package/dist/cjs/internal/keyboard/keys.js +16 -16
  90. package/dist/cjs/internal/keyboard/match.js +67 -67
  91. package/dist/cjs/internal/settings.js +5 -5
  92. package/dist/cjs/tools/accessibility.js +13 -13
  93. package/dist/cjs/tools/createPropAdapter.js +44 -44
  94. package/dist/cjs/tools/isUrl.js +39 -39
  95. package/dist/cjs/tools/setupGetInstanceId.js +20 -20
  96. package/dist/cjs/tools/useSetState.js +12 -12
  97. package/dist/cjs/tools/yupAst/astGenerator.js +212 -212
  98. package/dist/cjs/tools/yupAst/customValidators.js +17 -17
  99. package/dist/esm/components/AboutPlatform/AboutPlatform.js +50 -50
  100. package/dist/esm/components/AdvantageSideNav/AdvantageSideNav.js +243 -226
  101. package/dist/esm/components/AutoSuggest/AutoSuggest.js +101 -101
  102. package/dist/esm/components/Avatar/Avatar.js +18 -18
  103. package/dist/esm/components/CheckboxList/CheckboxList.js +34 -34
  104. package/dist/esm/components/ComboBox/ComboBox.js +103 -103
  105. package/dist/esm/components/ComboBoxMultiSelect/ComboBoxMultiSelect.js +32 -32
  106. package/dist/esm/components/ComboBoxMultiSelect/MultiSelect.js +208 -208
  107. package/dist/esm/components/ComposedModal/ComposedModal.js +80 -80
  108. package/dist/esm/components/ConfirmModal/ConfirmModal.js +43 -43
  109. package/dist/esm/components/Creatable/Creatable.js +137 -137
  110. package/dist/esm/components/DataDrivenInput/DataDrivenInput.js +226 -226
  111. package/dist/esm/components/DateInput/DateInput.js +35 -35
  112. package/dist/esm/components/DecisionButtons/DecisionButtons.js +61 -61
  113. package/dist/esm/components/DelayedRender/DelayedRender.js +17 -17
  114. package/dist/esm/components/DynamicFormik/DynamicFormik.js +578 -578
  115. package/dist/esm/components/Error403/Error403.js +13 -13
  116. package/dist/esm/components/Error403/ForbiddenErrorBackground.js +113 -113
  117. package/dist/esm/components/Error403/GraphicWrangler/GraphicWrangler.js +62 -62
  118. package/dist/esm/components/Error404/Error404.js +13 -13
  119. package/dist/esm/components/Error404/GraphicLoch/GraphicLoch.js +17 -17
  120. package/dist/esm/components/Error404/NotFoundErrorBackground.js +129 -129
  121. package/dist/esm/components/ErrorBoundary/ErrorBoundary.js +32 -32
  122. package/dist/esm/components/ErrorDragon/ErrorDragon.js +13 -13
  123. package/dist/esm/components/ErrorDragon/assets/ErrorGraphic.js +35 -35
  124. package/dist/esm/components/ErrorFullPage/ErrorFullPage.js +10 -10
  125. package/dist/esm/components/ErrorMessage/ErrorMessage.js +22 -22
  126. package/dist/esm/components/ErrorPage/ErrorPage.js +11 -11
  127. package/dist/esm/components/ErrorPageCore/ErrorPageCore.js +15 -15
  128. package/dist/esm/components/ErrorPageCore/GenericErrorBackground.js +124 -124
  129. package/dist/esm/components/FeatureHeader/FeatureHeader.js +29 -29
  130. package/dist/esm/components/FeatureNavTab/FeatureNavTab.js +12 -12
  131. package/dist/esm/components/FeatureNavTabs/FeatureNavTabs.js +12 -12
  132. package/dist/esm/components/FeatureSideNav/FeatureSideNav.js +12 -12
  133. package/dist/esm/components/FeatureSideNav/FeatureSideNavFooter.js +8 -8
  134. package/dist/esm/components/FeatureSideNav/FeatureSideNavHeader.js +8 -8
  135. package/dist/esm/components/FeatureSideNav/FeatureSideNavLinks.js +14 -14
  136. package/dist/esm/components/FeatureSideNavLink/FeatureSideNavLink.js +12 -12
  137. package/dist/esm/components/Feedback/Feedback.js +40 -40
  138. package/dist/esm/components/FlowModal/FlowModal.js +141 -141
  139. package/dist/esm/components/FlowModal/FlowModalForm.js +12 -12
  140. package/dist/esm/components/Header/Header.js +168 -182
  141. package/dist/esm/components/Header/HeaderAppSwitcher.js +102 -94
  142. package/dist/esm/components/Header/HeaderMenu.js +7 -7
  143. package/dist/esm/components/Header/HeaderMenuItem.js +52 -52
  144. package/dist/esm/components/Header/UserRequests.js +29 -29
  145. package/dist/esm/components/ImageModal/ImageModal.js +17 -17
  146. package/dist/esm/components/Loading/Loading.js +8 -8
  147. package/dist/esm/components/MemberBar/MemberBar.js +20 -20
  148. package/dist/esm/components/Modal/Modal.js +20 -20
  149. package/dist/esm/components/ModalConfirmEdit/ModalConfirmArray.js +14 -14
  150. package/dist/esm/components/ModalConfirmEdit/ModalConfirmDetails.js +11 -11
  151. package/dist/esm/components/ModalConfirmEdit/ModalConfirmEdit.js +17 -17
  152. package/dist/esm/components/ModalForm/ModalForm.js +9 -9
  153. package/dist/esm/components/Notifications/NotificationsContainer.js +22 -22
  154. package/dist/esm/components/Notifications/ToastNotification.js +21 -21
  155. package/dist/esm/components/Notifications/notify.js +17 -17
  156. package/dist/esm/components/PlatformBanner/PlatformBanner.js +8 -8
  157. package/dist/esm/components/PlatformNotifications/PlatformNotification.js +17 -17
  158. package/dist/esm/components/PlatformNotifications/PlatformNotificationsContainer.js +136 -136
  159. package/dist/esm/components/Portal/Portal.js +14 -14
  160. package/dist/esm/components/PrivacyRedirect/PrivacyRedirect.js +30 -30
  161. package/dist/esm/components/PrivacyStatement/PrivacyStatement.js +90 -90
  162. package/dist/esm/components/ProfileSettings/ProfileSettings.js +124 -124
  163. package/dist/esm/components/ProtectedRoute/ProtectedRoute.js +13 -13
  164. package/dist/esm/components/RadioGroup/RadioGroup.js +33 -33
  165. package/dist/esm/components/RichTextArea/RichTextArea.js +142 -142
  166. package/dist/esm/components/SignOut/SignOut.js +27 -27
  167. package/dist/esm/components/SupportCenter/SupportCenter.js +65 -65
  168. package/dist/esm/components/TextArea/TextArea.js +16 -16
  169. package/dist/esm/components/TextInput/TextInput.js +13 -13
  170. package/dist/esm/components/Toggle/Toggle.js +22 -22
  171. package/dist/esm/components/TooltipHover/TooltipHover.js +39 -39
  172. package/dist/esm/components/UIShell/UIShell.js +89 -90
  173. package/dist/esm/config/servicesConfig.js +21 -21
  174. package/dist/esm/constants/DataDrivenInputTypes.js +74 -74
  175. package/dist/esm/constants/UserType.js +13 -13
  176. package/dist/esm/hooks/useHeaderMenu.js +49 -49
  177. package/dist/esm/hooks/usePortal.js +74 -74
  178. package/dist/esm/hooks/useWindowSize.js +33 -33
  179. package/dist/esm/internal/ListBox/ListBox.js +41 -41
  180. package/dist/esm/internal/ListBox/ListBoxField.js +19 -19
  181. package/dist/esm/internal/ListBox/ListBoxMenu.js +19 -19
  182. package/dist/esm/internal/ListBox/ListBoxMenuIcon.js +31 -31
  183. package/dist/esm/internal/ListBox/ListBoxMenuItem.js +38 -38
  184. package/dist/esm/internal/ListBox/ListBoxSelection.js +64 -64
  185. package/dist/esm/internal/ListBox/index.js +10 -10
  186. package/dist/esm/internal/keyboard/keys.js +16 -16
  187. package/dist/esm/internal/keyboard/match.js +67 -67
  188. package/dist/esm/internal/settings.js +5 -5
  189. package/dist/esm/tools/accessibility.js +13 -13
  190. package/dist/esm/tools/createPropAdapter.js +44 -44
  191. package/dist/esm/tools/isUrl.js +39 -39
  192. package/dist/esm/tools/setupGetInstanceId.js +20 -20
  193. package/dist/esm/tools/useSetState.js +12 -12
  194. package/dist/esm/tools/yupAst/astGenerator.js +212 -212
  195. package/dist/esm/tools/yupAst/customValidators.js +17 -17
  196. package/dist/types/index.d.ts +1309 -1407
  197. package/package.json +167 -167
  198. package/scss/components/AboutPlatform/_aboutPlatform.scss +139 -139
  199. package/scss/components/AdvantageSideNav/_advantageSideNav.scss +267 -261
  200. package/scss/components/AutoSuggest/_autoSuggest.scss +62 -62
  201. package/scss/components/Avatar/_avatar.scss +32 -32
  202. package/scss/components/CheckboxList/_checkboxList.scss +26 -26
  203. package/scss/components/ComboBox/_combobox.scss +23 -23
  204. package/scss/components/ComboBoxMultiSelect/_comboBoxMultiSelect.scss +53 -53
  205. package/scss/components/ConfirmModal/_confirmModal.scss +12 -12
  206. package/scss/components/Creatable/_creatable.scss +48 -48
  207. package/scss/components/DateInput/_dateInput.scss +36 -36
  208. package/scss/components/DecisionButtons/_decisionButtons.scss +132 -132
  209. package/scss/components/DynamicFormik/_dynamicFormik.scss +17 -17
  210. package/scss/components/ErrorBoundary/_errorBoundary.scss +12 -12
  211. package/scss/components/ErrorDragon/_errorDragon.scss +55 -55
  212. package/scss/components/ErrorMessage/_errorMessage.scss +43 -43
  213. package/scss/components/ErrorPage/_errorPage.scss +66 -66
  214. package/scss/components/ErrorPageCore/_errorPageCore.scss +73 -73
  215. package/scss/components/FeatureHeader/_featureHeader.scss +67 -67
  216. package/scss/components/FeatureNavTab/_featureNavTab.scss +27 -27
  217. package/scss/components/FeatureSideNav/_featureSideNav.scss +76 -76
  218. package/scss/components/FeatureSideNavLink/_featureSideNavLink.scss +49 -49
  219. package/scss/components/Feedback/_feedback.scss +46 -46
  220. package/scss/components/Header/_header.scss +179 -179
  221. package/scss/components/Header/_headerAppSwitcher.scss +117 -117
  222. package/scss/components/Header/_headerMenu.scss +30 -30
  223. package/scss/components/Header/_headerMenuItem.scss +65 -65
  224. package/scss/components/Header/_userRequests.scss +36 -36
  225. package/scss/components/ImageModal/_imageModal.scss +51 -51
  226. package/scss/components/MemberBar/_memberBar.scss +99 -99
  227. package/scss/components/Modal/_modal.scss +163 -163
  228. package/scss/components/ModalConfirmEdit/_modalConfirmEdit.scss +113 -113
  229. package/scss/components/Notifications/_notifications.scss +57 -57
  230. package/scss/components/PlatformBanner/_platformBanner.scss +30 -30
  231. package/scss/components/PlatformNotifications/_platformNotifications.scss +230 -230
  232. package/scss/components/PrivacyRedirect/_privacyRedirect.scss +43 -43
  233. package/scss/components/PrivacyStatement/_privacyStatement.scss +137 -137
  234. package/scss/components/ProfileSettings/_profileSettings.scss +117 -117
  235. package/scss/components/ProtectedRoute/_protectedRoute.scss +32 -32
  236. package/scss/components/RadioGroup/_radioGroup.scss +46 -46
  237. package/scss/components/RichTextArea/_richTextArea.scss +82 -82
  238. package/scss/components/SignOut/_signOut.scss +51 -51
  239. package/scss/components/SupportCenter/_supportCenter.scss +16 -16
  240. package/scss/components/TextArea/_textArea.scss +19 -19
  241. package/scss/components/TextInput/_textInput.scss +26 -26
  242. package/scss/components/Toggle/_toggle.scss +80 -80
  243. package/scss/components/TooltipHover/_tooltip.scss +48 -48
  244. package/scss/global/_config.scss +14 -14
  245. package/scss/global/_tippy.scss +49 -49
  246. package/scss/global/index.scss +402 -401
  247. package/scss/global/themes/_boomerang.scss +184 -184
  248. package/scss/global/themes/_default.scss +79 -79
  249. package/scss/global/themes/_shell-tokens.scss +42 -42
  250. package/scss/global/utils/_animations.scss +15 -15
  251. package/scss/global/utils/_mixins.scss +67 -67
  252. package/scss/global/utils/index.scss +10 -10
  253. package/dist/cjs/components/Header/HeaderTeamSwitcher.js +0 -324
  254. package/dist/esm/components/Header/HeaderTeamSwitcher.js +0 -315
  255. package/scss/components/Header/_headerTeamSwitcher.scss +0 -195
@@ -5,20 +5,20 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var reactDom = require('react-dom');
6
6
  var usePortal = require('../../hooks/usePortal.js');
7
7
 
8
- /*
9
- IBM Confidential
10
- 694970X, 69497O0
11
- © Copyright IBM Corp. 2022, 2024
12
- */
13
- /**
14
- * @example
15
- * <Portal>
16
- * <p>Thinking with portals</p>
17
- * </Portal>
18
- */
19
- const Portal = ({ id, children }) => {
20
- const target = usePortal.default(id);
21
- return reactDom.createPortal(children, target);
8
+ /*
9
+ IBM Confidential
10
+ 694970X, 69497O0
11
+ © Copyright IBM Corp. 2022, 2024
12
+ */
13
+ /**
14
+ * @example
15
+ * <Portal>
16
+ * <p>Thinking with portals</p>
17
+ * </Portal>
18
+ */
19
+ const Portal = ({ id, children }) => {
20
+ const target = usePortal.default(id);
21
+ return reactDom.createPortal(children, target);
22
22
  };
23
23
 
24
24
  exports.default = Portal;
@@ -10,36 +10,36 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
10
 
11
11
  var React__default = /*#__PURE__*/_interopDefault(React);
12
12
 
13
- /*
14
- IBM Confidential
15
- 694970X, 69497O0
16
- © Copyright IBM Corp. 2022, 2024
17
- */
18
- function PrivacyRedirect(props) {
19
- const { baseEnvUrl, isOpen = false, user, platformName = "the platform" } = props;
20
- const handleOnSubmit = () => {
21
- const pendingDeletion = user?.status === "pending_deletion";
22
- if (pendingDeletion) {
23
- window.location.assign(`${baseEnvUrl}/launchpad`); // There is no marketing site so TBD where this links to
24
- }
25
- else {
26
- window.location.assign(`${baseEnvUrl}/launchpad?rd=${document.URL}`);
27
- }
28
- };
29
- const pendingDeletion = user?.status === "pending_deletion";
30
- const contentText = pendingDeletion
31
- ? `We’re working on removing your account and personal information from ${platformName}. Please allow up to 1 month (as mandated by GDPR regulations) for us to complete your request.`
32
- : "Before continuing, we need you to consent to the Privacy Statement.";
33
- const buttonText = pendingDeletion ? "Go to Launchpad" : "View Privacy Statement";
34
- return (React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-redirect-container ${settings.prefix}--bmrg-header-modal` },
35
- React__default.default.createElement(react.ComposedModal, { "aria-label": "GDPR Modal", open: isOpen, onClose: () => {
36
- return false;
37
- } },
38
- React__default.default.createElement(react.ModalHeader, { title: "Our Privacy Statement" }),
39
- React__default.default.createElement(react.ModalBody, null,
40
- React__default.default.createElement("span", { className: `${settings.prefix}--bmrg-redirect__body` }, contentText)),
41
- React__default.default.createElement(react.ModalFooter, null,
42
- React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "primary", onClick: handleOnSubmit }, buttonText)))));
13
+ /*
14
+ IBM Confidential
15
+ 694970X, 69497O0
16
+ © Copyright IBM Corp. 2022, 2024
17
+ */
18
+ function PrivacyRedirect(props) {
19
+ const { baseEnvUrl, isOpen = false, user, platformName = "the platform" } = props;
20
+ const handleOnSubmit = () => {
21
+ const pendingDeletion = user?.status === "pending_deletion";
22
+ if (pendingDeletion) {
23
+ window.location.assign(`${baseEnvUrl}/launchpad`); // There is no marketing site so TBD where this links to
24
+ }
25
+ else {
26
+ window.location.assign(`${baseEnvUrl}/launchpad?rd=${document.URL}`);
27
+ }
28
+ };
29
+ const pendingDeletion = user?.status === "pending_deletion";
30
+ const contentText = pendingDeletion
31
+ ? `We’re working on removing your account and personal information from ${platformName}. Please allow up to 1 month (as mandated by GDPR regulations) for us to complete your request.`
32
+ : "Before continuing, we need you to consent to the Privacy Statement.";
33
+ const buttonText = pendingDeletion ? "Go to Launchpad" : "View Privacy Statement";
34
+ return (React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-redirect-container ${settings.prefix}--bmrg-header-modal` },
35
+ React__default.default.createElement(react.ComposedModal, { "aria-label": "GDPR Modal", open: isOpen, onClose: () => {
36
+ return false;
37
+ } },
38
+ React__default.default.createElement(react.ModalHeader, { title: "Our Privacy Statement" }),
39
+ React__default.default.createElement(react.ModalBody, null,
40
+ React__default.default.createElement("span", { className: `${settings.prefix}--bmrg-redirect__body` }, contentText)),
41
+ React__default.default.createElement(react.ModalFooter, null,
42
+ React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "primary", onClick: handleOnSubmit }, buttonText)))));
43
43
  }
44
44
 
45
45
  exports.default = PrivacyRedirect;
@@ -20,96 +20,96 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
20
20
  var React__default = /*#__PURE__*/_interopDefault(React);
21
21
  var dompurify__default = /*#__PURE__*/_interopDefault(dompurify);
22
22
 
23
- /*
24
- IBM Confidential
25
- 694970X, 69497O0
26
- © Copyright IBM Corp. 2022, 2024
27
- */
28
- function formatDateTimestamp(timestamp) {
29
- return new Date(timestamp).toLocaleDateString("en-us", {
30
- year: "numeric",
31
- month: "long",
32
- day: "numeric",
33
- });
34
- }
35
- function PrivacyStatement({ baseServicesUrl, closeModal, isOpen, organization = "the platform", platformEmail = "isesupp@us.ibm.com", }) {
36
- const [resetKey, setResetKey] = React__default.default.useState(0);
37
- const [isConfirmModalOpen, setIsConfirmModalOpen] = React__default.default.useState(false);
38
- const statementUrl = servicesConfig.serviceUrl.getStatement({ baseServicesUrl });
39
- const statementQuery = reactQuery.useQuery({
40
- queryKey: statementUrl,
41
- queryFn: servicesConfig.resolver.query(statementUrl),
42
- });
43
- const { mutateAsync, error: mutateUserConsentError } = reactQuery.useMutation(servicesConfig.resolver.putUserConsent);
44
- function closeConfirmModal() {
45
- setIsConfirmModalOpen(false);
46
- }
47
- function handleClose() {
48
- closeModal();
49
- closeConfirmModal();
50
- setResetKey(resetKey + 1);
51
- }
52
- async function handleSubmit() {
53
- const body = {
54
- hasConsented: false,
55
- version: statementQuery.data?.version,
56
- };
57
- try {
58
- await mutateAsync({ baseServicesUrl, body });
59
- notify.default(React__default.default.createElement(ToastNotification.default, { subtitle: "Successfully requested account deletion", title: "Delete Account", kind: "success" }), { containerId: `${settings.prefix}--bmrg-header-notifications` });
60
- closeConfirmModal();
61
- closeModal();
62
- if (window.location) {
63
- window.location.reload();
64
- }
65
- }
66
- catch (e) {
67
- closeConfirmModal();
68
- }
69
- }
70
- return (React__default.default.createElement(react.ComposedModal, { "aria-label": "Privacy Statement", className: `${settings.prefix}--bmrg-privacy-statement-container ${settings.prefix}--bmrg-header-modal`, onClose: handleClose, open: isOpen, preventCloseOnClickOutside: isConfirmModalOpen },
71
- React__default.default.createElement(react.ModalHeader, { closeModal: handleClose, label: `Effective as of ${statementQuery.data ? formatDateTimestamp(statementQuery.data.effectiveDate) : ""}`, title: "Privacy Statement" }),
72
- React__default.default.createElement(react.ModalBody, { key: resetKey },
73
- React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-privacy-statement` },
74
- React__default.default.createElement(React__default.default.Fragment, null,
75
- statementQuery.isLoading ? (React__default.default.createElement(Loading.default, null)) : statementQuery.error ? (React__default.default.createElement(ErrorMessage.default, { style: { color: "#F2F4F8" } })) : (statementQuery.data &&
76
- statementQuery.data.formContent?.sections?.length > 0 && (React__default.default.createElement(React__default.default.Fragment, null,
77
- React__default.default.createElement(react.Accordion, null, statementQuery.data.formContent.sections.map((section) => {
78
- return (React__default.default.createElement(react.AccordionItem, { title: section.title, key: section.title },
79
- React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement__content`, dangerouslySetInnerHTML: {
80
- __html: dompurify__default.default.sanitize(section.content),
81
- } })));
82
- })),
83
- React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement__message` },
84
- `For any questions or concerns about business and personal information captured on
85
- ${organization}, please contact${" "}`,
86
- React__default.default.createElement("a", { href: `mailto:${platformEmail}?subject=${organization} Privacy Statement` }, platformEmail),
87
- ".")))),
88
- mutateUserConsentError && (React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement__error` }, "Failed to receive deletion request. Please try again."))))),
89
- React__default.default.createElement(react.ModalFooter, null,
90
- React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "secondary", onClick: handleClose }, "Close"),
91
- React__default.default.createElement(react.Button, { kind: "danger", onClick: () => setIsConfirmModalOpen(true) }, "Request account deletion"),
92
- React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-privacy-statement-delete` },
93
- React__default.default.createElement(react.ComposedModal, { onClose: closeConfirmModal, open: isConfirmModalOpen },
94
- React__default.default.createElement(react.ModalHeader, { closeModal: closeConfirmModal, label: "Delete Account", title: "Request account deletion" }),
95
- React__default.default.createElement(react.ModalBody, null,
96
- React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement-delete__desc` }, "By selecting to delete your account, your account will be deleted along with all of your user data from our system and we will notify your team(s) that you are no longer a memeber of the platform. Are you sure you want to delete your account?")),
97
- React__default.default.createElement(react.ModalFooter, null,
98
- React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "secondary", onClick: closeConfirmModal }, "No, go back to Privacy Statement"),
99
- React__default.default.createElement(react.Button, { kind: "danger", type: "submit", onClick: handleSubmit }, "Yes, delete my account")))))));
100
- }
101
- function PrivacyStatementMenuItem(props) {
102
- const menuItemRef = React__default.default.useRef(null);
103
- const [isOpen, setIsOpen] = React__default.default.useState(false);
104
- const handleClose = () => {
105
- setIsOpen(false);
106
- setTimeout(() => {
107
- menuItemRef.current?.focus();
108
- }, 0);
109
- };
110
- return (React__default.default.createElement(React__default.default.Fragment, null,
111
- React__default.default.createElement(HeaderMenuItem.default, { icon: React__default.default.createElement(icons.Locked, null), onClick: () => setIsOpen(!isOpen), ref: menuItemRef, text: "Privacy Statement", type: "button" }),
112
- React__default.default.createElement(PrivacyStatement, { isOpen: isOpen, closeModal: handleClose, ...props })));
23
+ /*
24
+ IBM Confidential
25
+ 694970X, 69497O0
26
+ © Copyright IBM Corp. 2022, 2024
27
+ */
28
+ function formatDateTimestamp(timestamp) {
29
+ return new Date(timestamp).toLocaleDateString("en-us", {
30
+ year: "numeric",
31
+ month: "long",
32
+ day: "numeric",
33
+ });
34
+ }
35
+ function PrivacyStatement({ baseServicesUrl, closeModal, isOpen, organization = "the platform", platformEmail = "isesupp@us.ibm.com", }) {
36
+ const [resetKey, setResetKey] = React__default.default.useState(0);
37
+ const [isConfirmModalOpen, setIsConfirmModalOpen] = React__default.default.useState(false);
38
+ const statementUrl = servicesConfig.serviceUrl.getStatement({ baseServicesUrl });
39
+ const statementQuery = reactQuery.useQuery({
40
+ queryKey: statementUrl,
41
+ queryFn: servicesConfig.resolver.query(statementUrl),
42
+ });
43
+ const { mutateAsync, error: mutateUserConsentError } = reactQuery.useMutation(servicesConfig.resolver.putUserConsent);
44
+ function closeConfirmModal() {
45
+ setIsConfirmModalOpen(false);
46
+ }
47
+ function handleClose() {
48
+ closeModal();
49
+ closeConfirmModal();
50
+ setResetKey(resetKey + 1);
51
+ }
52
+ async function handleSubmit() {
53
+ const body = {
54
+ hasConsented: false,
55
+ version: statementQuery.data?.version,
56
+ };
57
+ try {
58
+ await mutateAsync({ baseServicesUrl, body });
59
+ notify.default(React__default.default.createElement(ToastNotification.default, { subtitle: "Successfully requested account deletion", title: "Delete Account", kind: "success" }), { containerId: `${settings.prefix}--bmrg-header-notifications` });
60
+ closeConfirmModal();
61
+ closeModal();
62
+ if (window.location) {
63
+ window.location.reload();
64
+ }
65
+ }
66
+ catch (e) {
67
+ closeConfirmModal();
68
+ }
69
+ }
70
+ return (React__default.default.createElement(react.ComposedModal, { "aria-label": "Privacy Statement", className: `${settings.prefix}--bmrg-privacy-statement-container ${settings.prefix}--bmrg-header-modal`, onClose: handleClose, open: isOpen, preventCloseOnClickOutside: isConfirmModalOpen },
71
+ React__default.default.createElement(react.ModalHeader, { closeModal: handleClose, label: `Effective as of ${statementQuery.data ? formatDateTimestamp(statementQuery.data.effectiveDate) : ""}`, title: "Privacy Statement" }),
72
+ React__default.default.createElement(react.ModalBody, { key: resetKey },
73
+ React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-privacy-statement` },
74
+ React__default.default.createElement(React__default.default.Fragment, null,
75
+ statementQuery.isLoading ? (React__default.default.createElement(Loading.default, null)) : statementQuery.error ? (React__default.default.createElement(ErrorMessage.default, { style: { color: "#F2F4F8" } })) : (statementQuery.data &&
76
+ statementQuery.data.formContent?.sections?.length > 0 && (React__default.default.createElement(React__default.default.Fragment, null,
77
+ React__default.default.createElement(react.Accordion, null, statementQuery.data.formContent.sections.map((section) => {
78
+ return (React__default.default.createElement(react.AccordionItem, { title: section.title, key: section.title },
79
+ React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement__content`, dangerouslySetInnerHTML: {
80
+ __html: dompurify__default.default.sanitize(section.content),
81
+ } })));
82
+ })),
83
+ React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement__message` },
84
+ `For any questions or concerns about business and personal information captured on
85
+ ${organization}, please contact${" "}`,
86
+ React__default.default.createElement("a", { href: `mailto:${platformEmail}?subject=${organization} Privacy Statement` }, platformEmail),
87
+ ".")))),
88
+ mutateUserConsentError && (React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement__error` }, "Failed to receive deletion request. Please try again."))))),
89
+ React__default.default.createElement(react.ModalFooter, null,
90
+ React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "secondary", onClick: handleClose }, "Close"),
91
+ React__default.default.createElement(react.Button, { kind: "danger", onClick: () => setIsConfirmModalOpen(true) }, "Request account deletion"),
92
+ React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-privacy-statement-delete` },
93
+ React__default.default.createElement(react.ComposedModal, { onClose: closeConfirmModal, open: isConfirmModalOpen },
94
+ React__default.default.createElement(react.ModalHeader, { closeModal: closeConfirmModal, label: "Delete Account", title: "Request account deletion" }),
95
+ React__default.default.createElement(react.ModalBody, null,
96
+ React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-privacy-statement-delete__desc` }, "By selecting to delete your account, your account will be deleted along with all of your user data from our system and we will notify your team(s) that you are no longer a memeber of the platform. Are you sure you want to delete your account?")),
97
+ React__default.default.createElement(react.ModalFooter, null,
98
+ React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "secondary", onClick: closeConfirmModal }, "No, go back to Privacy Statement"),
99
+ React__default.default.createElement(react.Button, { kind: "danger", type: "submit", onClick: handleSubmit }, "Yes, delete my account")))))));
100
+ }
101
+ function PrivacyStatementMenuItem(props) {
102
+ const menuItemRef = React__default.default.useRef(null);
103
+ const [isOpen, setIsOpen] = React__default.default.useState(false);
104
+ const handleClose = () => {
105
+ setIsOpen(false);
106
+ setTimeout(() => {
107
+ menuItemRef.current?.focus();
108
+ }, 0);
109
+ };
110
+ return (React__default.default.createElement(React__default.default.Fragment, null,
111
+ React__default.default.createElement(HeaderMenuItem.default, { icon: React__default.default.createElement(icons.Locked, null), onClick: () => setIsOpen(!isOpen), ref: menuItemRef, text: "Privacy Statement", type: "button" }),
112
+ React__default.default.createElement(PrivacyStatement, { isOpen: isOpen, closeModal: handleClose, ...props })));
113
113
  }
114
114
 
115
115
  exports.PrivacyStatementMenuItem = PrivacyStatementMenuItem;
@@ -19,130 +19,130 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
19
19
  var React__default = /*#__PURE__*/_interopDefault(React);
20
20
  var sortBy__default = /*#__PURE__*/_interopDefault(sortBy);
21
21
 
22
- /*
23
- IBM Confidential
24
- 694970X, 69497O0
25
- © Copyright IBM Corp. 2022, 2024
26
- */
27
- function determineIfConfigIsDifferent(teams, initialTeams) {
28
- let isConfigDifferent = false;
29
- for (let idx = 0; idx < teams?.length; idx++) {
30
- if (teams[idx]?.visible !== initialTeams[idx]?.visible) {
31
- isConfigDifferent = true;
32
- break;
33
- }
34
- }
35
- return isConfigDifferent;
36
- }
37
- function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal }) {
38
- const queryClient = reactQuery.useQueryClient();
39
- const [initialTeams, setInitialTeams] = React.useState([]);
40
- const [teams, setTeams] = React.useState([]);
41
- const userUrl = servicesConfig.serviceUrl.getLaunchpadUser({ baseServicesUrl });
42
- const profileUrl = servicesConfig.serviceUrl.resourceUserProfile({ baseServicesUrl });
43
- const { data: user, isLoading: userIsLoading, error: userError, } = reactQuery.useQuery({
44
- queryKey: userUrl,
45
- queryFn: servicesConfig.resolver.query(userUrl),
46
- });
47
- const { mutateAsync: mutateUserProfile, isLoading: mutateUserProfileIsLoading, error: mutateUserProfileError, } = reactQuery.useMutation(servicesConfig.resolver.patchUserProfile, {
48
- onSuccess: () => {
49
- queryClient.invalidateQueries(userUrl);
50
- queryClient.invalidateQueries(profileUrl);
51
- },
52
- });
53
- // Only disable when we have a user and we know that there aren' any lower level groups to manage
54
- const disableModal = user && user?.lowerLevelGroups === undefined;
55
- React.useEffect(() => {
56
- const teams = user?.lowerLevelGroups ?? [];
57
- setInitialTeams(teams);
58
- setTeams(teams);
59
- }, [user]);
60
- function handleClose() {
61
- closeModal();
62
- setTeams(initialTeams);
63
- }
64
- async function handleSubmit() {
65
- const body = {
66
- lowerLevelGroups: teams,
67
- };
68
- try {
69
- await mutateUserProfile({ baseServicesUrl, body });
70
- notify.default(React__default.default.createElement(ToastNotification.default, { subtitle: "Successfully updated user settings", title: "Update Settings", kind: "success" }), { containerId: `${settings.prefix}--bmrg-header-notifications` });
71
- closeModal();
72
- }
73
- catch (e) {
74
- // noop
75
- }
76
- }
77
- const visibleTeamCount = teams?.filter((team) => team?.visible)?.length ?? 0;
78
- const allTeamsAreChecked = teams?.length === visibleTeamCount;
79
- const someTeamsAreChecked = visibleTeamCount > 0 && !allTeamsAreChecked;
80
- const isConfigDifferent = determineIfConfigIsDifferent(teams, initialTeams);
81
- function batchChangeTeamVisibility() {
82
- const updatedTeams = teams.map((team) => ({ ...team, visible: !allTeamsAreChecked }));
83
- setTeams(updatedTeams);
84
- }
85
- function handleUpdateTeamVisibility(id, checked) {
86
- const updatedTeams = [];
87
- for (let team of teams) {
88
- const newTeam = { ...team };
89
- if (newTeam.id === id) {
90
- newTeam.visible = checked;
91
- }
92
- updatedTeams.push(newTeam);
93
- }
94
- setTeams(updatedTeams);
95
- }
96
- if (disableModal) {
97
- return (React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-profile-menu-user` },
98
- React__default.default.createElement(Avatar.default, { size: "medium", src: src, userName: userName }),
99
- React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-menu-user__name` },
100
- " ",
101
- userName ? userName : "",
102
- " ")));
103
- }
104
- return (React__default.default.createElement(react.ComposedModal, { "aria-label": "Profile Settings", className: `${settings.prefix}--bmrg-profile-settings-container ${settings.prefix}--bmrg-header-modal`, open: isOpen, onClose: handleClose, preventCloseOnClickOutside: true },
105
- React__default.default.createElement(react.ModalHeader, { closeModal: handleClose, title: `User profile - ${userName}` }),
106
- React__default.default.createElement(react.ModalBody, { style: { maxHeight: "31.5rem" } },
107
- React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__title` }, "More user profile settings will be here eventually, but for now you can choose which Teams are shown in your sidebar in Launchpad."),
108
- React__default.default.createElement("h2", { className: `${settings.prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad sidebar"),
109
- React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__description` }, "Choose Teams to show or hide in your Launchpad sidebar and Catalog (useful for sensitive demos). You will not be able to access or view unchecked Teams from the sidebar, and cannot add items to them from Catalog."),
110
- userIsLoading ? (React__default.default.createElement(react.StructuredListSkeleton, null)) : userError ? (React__default.default.createElement(ErrorMessage.default, { style: { color: "#F2F4F8", padding: "1rem" } })) : teams?.length > 0 ? (React__default.default.createElement(react.StructuredListWrapper, { className: `${settings.prefix}--bmrg-profile-settings-list` },
111
- React__default.default.createElement(react.StructuredListHead, null,
112
- React__default.default.createElement(react.StructuredListRow, { head: true },
113
- React__default.default.createElement(react.StructuredListCell, { head: true },
114
- React__default.default.createElement(react.Checkbox, { checked: allTeamsAreChecked, id: "team-name-batch-toggle", indeterminate: someTeamsAreChecked, labelText: "Team Name", onChange: batchChangeTeamVisibility })))),
115
- React__default.default.createElement(react.StructuredListBody, null, sortBy__default.default(teams, "name").map(({ name, displayName, id, visible }) => (React__default.default.createElement(react.StructuredListRow, { key: id, className: !visible ? `${settings.prefix}--bmrg-profile-settings-list__row--disabled` : "" },
116
- React__default.default.createElement(react.StructuredListCell, null,
117
- React__default.default.createElement(react.Checkbox, { checked: visible, id: id, labelText: Boolean(displayName) ? displayName : name, onChange: (_, { checked, id }) => {
118
- return handleUpdateTeamVisibility(id, checked);
119
- } })))))))) : (React__default.default.createElement("p", { style: { marginTop: "3rem", color: "#F2F4F8" } }, "No teams to configure. Join or create teams in Launchpad!"))),
120
- React__default.default.createElement(react.ModalFooter, null,
121
- mutateUserProfileError && (React__default.default.createElement("div", { style: {
122
- position: "absolute",
123
- top: "-5rem",
124
- left: "2rem",
125
- width: "90%",
126
- } },
127
- React__default.default.createElement(react.InlineNotification, { kind: "error", title: "Something's Wrong", subtitle: "Failed to update user profile" }))),
128
- React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "secondary", onClick: handleClose }, "Cancel"),
129
- React__default.default.createElement(react.Button, { disabled: !isConfigDifferent || mutateUserProfileIsLoading, kind: "primary", type: "submit", onClick: (e) => {
130
- e.preventDefault();
131
- handleSubmit();
132
- } }, mutateUserProfileError ? "Try Again" : mutateUserProfileIsLoading ? "Saving..." : "Save changes"))));
133
- }
134
- function ProfileSettingsMenuItem(props) {
135
- const menuItemRef = React__default.default.useRef(null);
136
- const [isOpen, setIsOpen] = React__default.default.useState(false);
137
- const handleClose = () => {
138
- setIsOpen(false);
139
- setTimeout(() => {
140
- menuItemRef.current?.focus();
141
- }, 0);
142
- };
143
- return (React__default.default.createElement(React__default.default.Fragment, null,
144
- React__default.default.createElement(HeaderMenuItem.default, { onClick: () => setIsOpen(!isOpen), ref: menuItemRef, src: props.src, type: "user", userName: props.userName }),
145
- React__default.default.createElement(ProfileSettings, { isOpen: isOpen, closeModal: handleClose, ...props })));
22
+ /*
23
+ IBM Confidential
24
+ 694970X, 69497O0
25
+ © Copyright IBM Corp. 2022, 2024
26
+ */
27
+ function determineIfConfigIsDifferent(teams, initialTeams) {
28
+ let isConfigDifferent = false;
29
+ for (let idx = 0; idx < teams?.length; idx++) {
30
+ if (teams[idx]?.visible !== initialTeams[idx]?.visible) {
31
+ isConfigDifferent = true;
32
+ break;
33
+ }
34
+ }
35
+ return isConfigDifferent;
36
+ }
37
+ function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal }) {
38
+ const queryClient = reactQuery.useQueryClient();
39
+ const [initialTeams, setInitialTeams] = React.useState([]);
40
+ const [teams, setTeams] = React.useState([]);
41
+ const userUrl = servicesConfig.serviceUrl.getLaunchpadUser({ baseServicesUrl });
42
+ const profileUrl = servicesConfig.serviceUrl.resourceUserProfile({ baseServicesUrl });
43
+ const { data: user, isLoading: userIsLoading, error: userError, } = reactQuery.useQuery({
44
+ queryKey: userUrl,
45
+ queryFn: servicesConfig.resolver.query(userUrl),
46
+ });
47
+ const { mutateAsync: mutateUserProfile, isLoading: mutateUserProfileIsLoading, error: mutateUserProfileError, } = reactQuery.useMutation(servicesConfig.resolver.patchUserProfile, {
48
+ onSuccess: () => {
49
+ queryClient.invalidateQueries(userUrl);
50
+ queryClient.invalidateQueries(profileUrl);
51
+ },
52
+ });
53
+ // Only disable when we have a user and we know that there aren' any lower level groups to manage
54
+ const disableModal = user && user?.lowerLevelGroups === undefined;
55
+ React.useEffect(() => {
56
+ const teams = user?.lowerLevelGroups ?? [];
57
+ setInitialTeams(teams);
58
+ setTeams(teams);
59
+ }, [user]);
60
+ function handleClose() {
61
+ closeModal();
62
+ setTeams(initialTeams);
63
+ }
64
+ async function handleSubmit() {
65
+ const body = {
66
+ lowerLevelGroups: teams,
67
+ };
68
+ try {
69
+ await mutateUserProfile({ baseServicesUrl, body });
70
+ notify.default(React__default.default.createElement(ToastNotification.default, { subtitle: "Successfully updated user settings", title: "Update Settings", kind: "success" }), { containerId: `${settings.prefix}--bmrg-header-notifications` });
71
+ closeModal();
72
+ }
73
+ catch (e) {
74
+ // noop
75
+ }
76
+ }
77
+ const visibleTeamCount = teams?.filter((team) => team?.visible)?.length ?? 0;
78
+ const allTeamsAreChecked = teams?.length === visibleTeamCount;
79
+ const someTeamsAreChecked = visibleTeamCount > 0 && !allTeamsAreChecked;
80
+ const isConfigDifferent = determineIfConfigIsDifferent(teams, initialTeams);
81
+ function batchChangeTeamVisibility() {
82
+ const updatedTeams = teams.map((team) => ({ ...team, visible: !allTeamsAreChecked }));
83
+ setTeams(updatedTeams);
84
+ }
85
+ function handleUpdateTeamVisibility(id, checked) {
86
+ const updatedTeams = [];
87
+ for (let team of teams) {
88
+ const newTeam = { ...team };
89
+ if (newTeam.id === id) {
90
+ newTeam.visible = checked;
91
+ }
92
+ updatedTeams.push(newTeam);
93
+ }
94
+ setTeams(updatedTeams);
95
+ }
96
+ if (disableModal) {
97
+ return (React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-profile-menu-user` },
98
+ React__default.default.createElement(Avatar.default, { size: "medium", src: src, userName: userName }),
99
+ React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-menu-user__name` },
100
+ " ",
101
+ userName ? userName : "",
102
+ " ")));
103
+ }
104
+ return (React__default.default.createElement(react.ComposedModal, { "aria-label": "Profile Settings", className: `${settings.prefix}--bmrg-profile-settings-container ${settings.prefix}--bmrg-header-modal`, open: isOpen, onClose: handleClose, preventCloseOnClickOutside: true },
105
+ React__default.default.createElement(react.ModalHeader, { closeModal: handleClose, title: `User profile - ${userName}` }),
106
+ React__default.default.createElement(react.ModalBody, { style: { maxHeight: "31.5rem" } },
107
+ React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__title` }, "More user profile settings will be here eventually, but for now you can choose which Teams are shown in your sidebar in Launchpad."),
108
+ React__default.default.createElement("h2", { className: `${settings.prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad sidebar"),
109
+ React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__description` }, "Choose Teams to show or hide in your Launchpad sidebar and Catalog (useful for sensitive demos). You will not be able to access or view unchecked Teams from the sidebar, and cannot add items to them from Catalog."),
110
+ userIsLoading ? (React__default.default.createElement(react.StructuredListSkeleton, null)) : userError ? (React__default.default.createElement(ErrorMessage.default, { style: { color: "#F2F4F8", padding: "1rem" } })) : teams?.length > 0 ? (React__default.default.createElement(react.StructuredListWrapper, { className: `${settings.prefix}--bmrg-profile-settings-list` },
111
+ React__default.default.createElement(react.StructuredListHead, null,
112
+ React__default.default.createElement(react.StructuredListRow, { head: true },
113
+ React__default.default.createElement(react.StructuredListCell, { head: true },
114
+ React__default.default.createElement(react.Checkbox, { checked: allTeamsAreChecked, id: "team-name-batch-toggle", indeterminate: someTeamsAreChecked, labelText: "Team Name", onChange: batchChangeTeamVisibility })))),
115
+ React__default.default.createElement(react.StructuredListBody, null, sortBy__default.default(teams, "name").map(({ name, displayName, id, visible }) => (React__default.default.createElement(react.StructuredListRow, { key: id, className: !visible ? `${settings.prefix}--bmrg-profile-settings-list__row--disabled` : "" },
116
+ React__default.default.createElement(react.StructuredListCell, null,
117
+ React__default.default.createElement(react.Checkbox, { checked: visible, id: id, labelText: Boolean(displayName) ? displayName : name, onChange: (_, { checked, id }) => {
118
+ return handleUpdateTeamVisibility(id, checked);
119
+ } })))))))) : (React__default.default.createElement("p", { style: { marginTop: "3rem", color: "#F2F4F8" } }, "No teams to configure. Join or create teams in Launchpad!"))),
120
+ React__default.default.createElement(react.ModalFooter, null,
121
+ mutateUserProfileError && (React__default.default.createElement("div", { style: {
122
+ position: "absolute",
123
+ top: "-5rem",
124
+ left: "2rem",
125
+ width: "90%",
126
+ } },
127
+ React__default.default.createElement(react.InlineNotification, { kind: "error", title: "Something's Wrong", subtitle: "Failed to update user profile" }))),
128
+ React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "secondary", onClick: handleClose }, "Cancel"),
129
+ React__default.default.createElement(react.Button, { disabled: !isConfigDifferent || mutateUserProfileIsLoading, kind: "primary", type: "submit", onClick: (e) => {
130
+ e.preventDefault();
131
+ handleSubmit();
132
+ } }, mutateUserProfileError ? "Try Again" : mutateUserProfileIsLoading ? "Saving..." : "Save changes"))));
133
+ }
134
+ function ProfileSettingsMenuItem(props) {
135
+ const menuItemRef = React__default.default.useRef(null);
136
+ const [isOpen, setIsOpen] = React__default.default.useState(false);
137
+ const handleClose = () => {
138
+ setIsOpen(false);
139
+ setTimeout(() => {
140
+ menuItemRef.current?.focus();
141
+ }, 0);
142
+ };
143
+ return (React__default.default.createElement(React__default.default.Fragment, null,
144
+ React__default.default.createElement(HeaderMenuItem.default, { onClick: () => setIsOpen(!isOpen), ref: menuItemRef, src: props.src, type: "user", userName: props.userName }),
145
+ React__default.default.createElement(ProfileSettings, { isOpen: isOpen, closeModal: handleClose, ...props })));
146
146
  }
147
147
 
148
148
  exports.ProfileSettingsMenuItem = ProfileSettingsMenuItem;
@@ -10,19 +10,19 @@ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
10
 
11
11
  var React__default = /*#__PURE__*/_interopDefault(React);
12
12
 
13
- /*
14
- IBM Confidential
15
- 694970X, 69497O0
16
- © Copyright IBM Corp. 2022, 2024
17
- */
18
- const checkAuth = (userRole, allowedUserRoles) => {
19
- if (Array.isArray(userRole)) {
20
- return userRole.some((role) => allowedUserRoles.some((allowedRole) => allowedRole === role));
21
- }
22
- return allowedUserRoles.some((allowedRole) => allowedRole === userRole);
23
- };
24
- function ProtectedRoute({ allowedUserRoles, component, message = "If you think you should be, contact your friendly neighborhood platform admin.", title = "Sorry mate, you are not allowed here.", userRole, ...rest }) {
25
- return (React__default.default.createElement(reactRouterDom.Route, { ...rest }, checkAuth(userRole, allowedUserRoles) ? component : React__default.default.createElement(Error403.default, { message: message, title: title })));
13
+ /*
14
+ IBM Confidential
15
+ 694970X, 69497O0
16
+ © Copyright IBM Corp. 2022, 2024
17
+ */
18
+ const checkAuth = (userRole, allowedUserRoles) => {
19
+ if (Array.isArray(userRole)) {
20
+ return userRole.some((role) => allowedUserRoles.some((allowedRole) => allowedRole === role));
21
+ }
22
+ return allowedUserRoles.some((allowedRole) => allowedRole === userRole);
23
+ };
24
+ function ProtectedRoute({ allowedUserRoles, component, message = "If you think you should be, contact your friendly neighborhood platform admin.", title = "Sorry mate, you are not allowed here.", userRole, ...rest }) {
25
+ return (React__default.default.createElement(reactRouterDom.Route, { ...rest }, checkAuth(userRole, allowedUserRoles) ? component : React__default.default.createElement(Error403.default, { message: message, title: title })));
26
26
  }
27
27
 
28
28
  exports.default = ProtectedRoute;