@boomerang-io/carbon-addons-boomerang-react 4.6.8-beta.22 → 4.6.8-beta.24

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.
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
+ var reactQuery = require('react-query');
6
7
  var react = require('@carbon/react');
7
8
  var icons = require('@carbon/react/icons');
8
9
  var HeaderAppSwitcher = require('./HeaderAppSwitcher.js');
@@ -12,6 +13,7 @@ var PlatformNotificationsContainer = require('../PlatformNotifications/PlatformN
12
13
  var UserRequests = require('./UserRequests.js');
13
14
  var useHeaderMenu = require('../../hooks/useHeaderMenu.js');
14
15
  var useWindowSize = require('../../hooks/useWindowSize.js');
16
+ var servicesConfig = require('../../config/servicesConfig.js');
15
17
  var settings = require('../../internal/settings.js');
16
18
 
17
19
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -21,7 +23,7 @@ var React__default = /*#__PURE__*/_interopDefault(React);
21
23
  /*
22
24
  IBM Confidential
23
25
  694970X, 69497O0
24
- © Copyright IBM Corp. 2022, 2024
26
+ © Copyright IBM Corp. 2022, 2025
25
27
  */
26
28
  const MenuListId = {
27
29
  Notifcations: "header-notifications-dialog",
@@ -32,6 +34,7 @@ const MenuListId = {
32
34
  Support: "header-support-menu",
33
35
  instanceSwitcher: "header-instanceSwitcher-menu",
34
36
  Switcher: "header-switcher-menu",
37
+ TeamSwitcher: "header-team-switcher-menu",
35
38
  };
36
39
  const MenuButtonId = {
37
40
  Notifcations: "header-notifications-dialog-button",
@@ -42,6 +45,7 @@ const MenuButtonId = {
42
45
  Support: "header-support-menu-button",
43
46
  InstanceSwitcher: "header-instanceSwitcher-menu-button",
44
47
  Switcher: "header-switcher-menu-button",
48
+ TeamSwitcher: "header-team-switcher-menu-button",
45
49
  };
46
50
  const MenuAriaLabelRecord = {
47
51
  Notifcations: "Notifications dialog",
@@ -52,11 +56,19 @@ const MenuAriaLabelRecord = {
52
56
  instanceSwitcher: "Instance Switcher Menu",
53
57
  Support: "Support menu",
54
58
  Switcher: "Switcher menu",
59
+ TeamSwitcher: "Team Switcher menu",
55
60
  };
56
61
  const headerButtonClassNames = "cds--btn--icon-only cds--header__action cds--btn cds--btn--primary cds--btn--icon-only cds--btn cds--btn--primary";
57
62
  const instanceCheckMarkContainerClass = "instance-checkmark-style-container";
58
63
  function Header(props) {
59
- const { productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, navLinks, platform, prefixName = "", rightPanel, skipToContentProps, templateMeteringEvent, triggerEvent, userTeams, } = props;
64
+ const { analyticsHelpers, productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, createJoinTeamTrigger, history, isLaunchpad = false, navLinks, platform, prefixName = "", rightPanel, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, user, userTeams, } = props;
65
+ const hasUserTeams = Boolean(userTeams);
66
+ const userTeamsUrl = servicesConfig.serviceUrl.getUserTeamsServices({ baseServicesUrl });
67
+ const teamsQuery = reactQuery.useQuery({
68
+ queryKey: userTeamsUrl,
69
+ queryFn: servicesConfig.resolver.query(userTeamsUrl, null),
70
+ enabled: !hasUserTeams,
71
+ });
60
72
  return (React__default.default.createElement(React__default.default.Fragment, null,
61
73
  React__default.default.createElement(react.Theme, { theme: carbonTheme },
62
74
  React__default.default.createElement(react.Header, { "aria-label": "App navigation header", className: className },
@@ -72,7 +84,7 @@ function Header(props) {
72
84
  React__default.default.createElement(NotificationsMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: Boolean(props.enableNotifications), countEnabled: Boolean(props.enableNotificationsCount) }),
73
85
  React__default.default.createElement(SupportMenu, { enabled: Array.isArray(props.supportMenuItems) && props.supportMenuItems.length > 0, menuItems: props.supportMenuItems }),
74
86
  React__default.default.createElement(ProfileMenu, { enabled: Array.isArray(props.profileMenuItems) && props.profileMenuItems.length > 0, menuItems: props.profileMenuItems }),
75
- React__default.default.createElement(AppSwitcherMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: props.enableAppSwitcher, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, userTeams: userTeams }),
87
+ React__default.default.createElement(AppSwitcherMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: props.enableAppSwitcher, teamsQuery: teamsQuery, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, userTeams: userTeams }),
76
88
  React__default.default.createElement(RightPanelMenu, { enabled: Boolean(rightPanel && Object.keys(rightPanel).length), ...rightPanel })))),
77
89
  React__default.default.createElement(NotificationsContainer.default, { enableMultiContainer: true, containerId: `${settings.prefix}--bmrg-header-notifications` })));
78
90
  }
@@ -153,7 +165,7 @@ function AppSwitcherMenu(props) {
153
165
  }
154
166
  return (React__default.default.createElement("div", { ref: ref },
155
167
  React__default.default.createElement("button", { "aria-controls": MenuListId.Switcher, "aria-expanded": isOpen, "aria-haspopup": "menu", "aria-label": MenuAriaLabelRecord.Switcher, className: headerButtonClassNames, "data-testid": "header-appswitcher-link", id: MenuButtonId.Switcher, onClick: toggleActive }, isOpen ? React__default.default.createElement(icons.Close, { size: 20 }) : React__default.default.createElement(icons.Switcher, { size: 20 })),
156
- React__default.default.createElement(HeaderAppSwitcher.default, { baseEnvUrl: props.baseEnvUrl, baseServicesUrl: props.baseServicesUrl, id: MenuListId.Switcher, isOpen: isOpen, templateMeteringEvent: props.templateMeteringEvent, triggerEvent: props.triggerEvent, userTeams: props.userTeams })));
168
+ React__default.default.createElement(HeaderAppSwitcher.default, { baseEnvUrl: props.baseEnvUrl, baseServicesUrl: props.baseServicesUrl, id: MenuListId.Switcher, isOpen: isOpen, teamsQuery: props.teamsQuery, templateMeteringEvent: props.templateMeteringEvent, triggerEvent: props.triggerEvent, userTeams: props.userTeams })));
157
169
  }
158
170
  function RightPanelMenu(props) {
159
171
  const { isOpen, toggleActive, ref } = useHeaderMenu.default(MenuButtonId.RightPanel);
@@ -3,12 +3,10 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
- var reactQuery = require('react-query');
7
6
  var react = require('@carbon/react');
8
7
  var icons = require('@carbon/react/icons');
9
8
  var ErrorMessage = require('../ErrorMessage/ErrorMessage.js');
10
9
  var cx = require('classnames');
11
- var servicesConfig = require('../../config/servicesConfig.js');
12
10
  var settings = require('../../internal/settings.js');
13
11
 
14
12
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -28,14 +26,8 @@ const externalProps = {
28
26
  const panelClassName = `${settings.prefix}--bmrg-header-switcher-panel`;
29
27
  const contentClassName = `${settings.prefix}--bmrg-header-switcher`;
30
28
  const skeletonClassName = `${settings.prefix}--bmrg-header-switcher__skeleton`;
31
- function HeaderAppSwitcher({ baseServicesUrl, baseEnvUrl, id, isOpen, templateMeteringEvent, triggerEvent, userTeams }) {
29
+ function HeaderAppSwitcher({ baseServicesUrl, baseEnvUrl, id, isOpen, teamsQuery, templateMeteringEvent, triggerEvent, userTeams, }) {
32
30
  const hasUserTeams = Boolean(userTeams);
33
- const userTeamsUrl = servicesConfig.serviceUrl.getUserTeamsServices({ baseServicesUrl });
34
- const teamsQuery = reactQuery.useQuery({
35
- queryKey: userTeamsUrl,
36
- queryFn: servicesConfig.resolver.query(userTeamsUrl, null),
37
- enabled: !hasUserTeams
38
- });
39
31
  if (userTeams?.isLoading || teamsQuery?.isLoading) {
40
32
  return (React__default.default.createElement(react.HeaderPanel, { "aria-label": "App Switcher", className: panelClassName, expanded: isOpen, id: id, role: "menu" },
41
33
  React__default.default.createElement("div", { className: cx__default.default(contentClassName, "--is-loading", { "--is-hidden": !isOpen }) },
@@ -78,7 +70,7 @@ function HeaderAppSwitcher({ baseServicesUrl, baseEnvUrl, id, isOpen, templateMe
78
70
  }
79
71
  return null;
80
72
  }
81
- function TeamServiceListMenu({ baseEnvUrl, isAccount, isMember, team, templateMeteringEvent, triggerEvent }) {
73
+ function TeamServiceListMenu({ baseEnvUrl, isAccount, isMember, team, templateMeteringEvent, triggerEvent, }) {
82
74
  const { name, displayName, services } = team;
83
75
  const nameToDisplay = displayName ? displayName : name;
84
76
  const isNameTruncated = nameToDisplay?.length > 30;
@@ -26,10 +26,11 @@ IBM Confidential
26
26
  694970X, 69497O0
27
27
  © Copyright IBM Corp. 2022, 2024
28
28
  */
29
- function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }) {
29
+ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, createJoinTeamTrigger, history, isLaunchpad = false, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }) {
30
30
  // Support base header .e.g for an error state
31
31
  if (!config) {
32
- return (React__default.default.createElement(Header.default, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, productName: productName || platformName || "" }));
32
+ return (React__default.default.createElement(reactQuery.QueryClientProvider, { client: servicesConfig.queryClient },
33
+ React__default.default.createElement(Header.default, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, productName: productName || platformName || "", user: user })));
33
34
  }
34
35
  const { features, navigation, platform, platformMessage } = config;
35
36
  const names = getProductAndPlatformNames({ productName, platformName, platform });
@@ -69,7 +70,7 @@ function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformN
69
70
  */
70
71
  const isPrivacyStatementDisabled = renderPrivacyStatement === false || features?.["consent.enabled"] === false;
71
72
  return (React__default.default.createElement(reactQuery.QueryClientProvider, { client: servicesConfig.queryClient },
72
- React__default.default.createElement(Header.default, { baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, enableAppSwitcher: isAppSwitcherEnabled, instanceSwitcherEnabled: instanceSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, leftPanel: leftPanel, navLinks: navigation, platform: platform, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
73
+ React__default.default.createElement(Header.default, { analyticsHelpers: analyticsHelpers, baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, createJoinTeamTrigger: createJoinTeamTrigger, enableAppSwitcher: isAppSwitcherEnabled, instanceSwitcherEnabled: instanceSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, leftPanel: leftPanel, navLinks: navigation, platform: platform, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
73
74
  isUserEnabled && (React__default.default.createElement(ProfileSettings.ProfileSettingsMenuItem, { key: "profile-settings", baseServicesUrl: platform.baseServicesUrl, src: `${platform.baseServicesUrl}/users/image/${user?.email}`, userName: user?.displayName ?? user?.name })),
74
75
  isSendMailEnabled && (React__default.default.createElement(HeaderMenuItem.default, { key: "email-preferences", href: `${platform.baseEnvUrl}/launchpad/email-preferences`, icon: React__default.default.createElement(icons.Email, null), kind: "internal", text: "Email Preferences", type: "link" })),
75
76
  !isPrivacyStatementDisabled && (React__default.default.createElement(PrivacyStatement.PrivacyStatementMenuItem, { key: "privacy-statement", baseServicesUrl: platform.baseServicesUrl, platformEmail: platform?.platformEmail })),
@@ -85,7 +86,7 @@ function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformN
85
86
  isAboutPlatformEnabled && (React__default.default.createElement(AboutPlatform.AboutPlatformMenuItem, { key: "about-platform", name: platform.name, baseServicesUrl: platform.baseServicesUrl })),
86
87
  tutorialScreenToShow && handleShowTutorial && (React__default.default.createElement(HeaderMenuItem.default, { key: "launch-tutorial", onClick: handleShowTutorial, icon: React__default.default.createElement(icons.Book, null), "data-testid": "launch-tutorial", text: "Launch Tutorial", type: "button" })),
87
88
  ...supportMenuItems,
88
- ].filter(Boolean), userTeams: userTeams }),
89
+ ].filter(Boolean), history: history, isLaunchpad: isLaunchpad, trackEvent: trackEvent, user: user, userTeams: userTeams }),
89
90
  isPrivacyModalRendered ? (React__default.default.createElement(PrivacyRedirect.default, { isOpen: true, baseEnvUrl: platform.baseEnvUrl, platformName: platform?.name, user: user })) : null));
90
91
  }
91
92
  /**
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { useQuery } from 'react-query';
2
3
  import { Theme, Header as Header$1, SkipToContent, HeaderName, HeaderNavigation, HeaderMenuItem, HeaderGlobalBar, HeaderPanel, HeaderMenuButton, SideNav, SideNavItems, SideNavLink } from '@carbon/react';
3
4
  import { Wikis, Checkmark, Collaborate, NotificationNew, Notification, Help, UserAvatar, Close, Switcher, OpenPanelFilledRight } from '@carbon/react/icons';
4
5
  import HeaderAppSwitcher from './HeaderAppSwitcher.js';
@@ -8,12 +9,13 @@ import PlatformNotificationsContainer from '../PlatformNotifications/PlatformNot
8
9
  import UserRequests from './UserRequests.js';
9
10
  import useHeaderMenu from '../../hooks/useHeaderMenu.js';
10
11
  import useWindowSize from '../../hooks/useWindowSize.js';
12
+ import { resolver, serviceUrl } from '../../config/servicesConfig.js';
11
13
  import { prefix } from '../../internal/settings.js';
12
14
 
13
15
  /*
14
16
  IBM Confidential
15
17
  694970X, 69497O0
16
- © Copyright IBM Corp. 2022, 2024
18
+ © Copyright IBM Corp. 2022, 2025
17
19
  */
18
20
  const MenuListId = {
19
21
  Notifcations: "header-notifications-dialog",
@@ -24,6 +26,7 @@ const MenuListId = {
24
26
  Support: "header-support-menu",
25
27
  instanceSwitcher: "header-instanceSwitcher-menu",
26
28
  Switcher: "header-switcher-menu",
29
+ TeamSwitcher: "header-team-switcher-menu",
27
30
  };
28
31
  const MenuButtonId = {
29
32
  Notifcations: "header-notifications-dialog-button",
@@ -34,6 +37,7 @@ const MenuButtonId = {
34
37
  Support: "header-support-menu-button",
35
38
  InstanceSwitcher: "header-instanceSwitcher-menu-button",
36
39
  Switcher: "header-switcher-menu-button",
40
+ TeamSwitcher: "header-team-switcher-menu-button",
37
41
  };
38
42
  const MenuAriaLabelRecord = {
39
43
  Notifcations: "Notifications dialog",
@@ -44,11 +48,19 @@ const MenuAriaLabelRecord = {
44
48
  instanceSwitcher: "Instance Switcher Menu",
45
49
  Support: "Support menu",
46
50
  Switcher: "Switcher menu",
51
+ TeamSwitcher: "Team Switcher menu",
47
52
  };
48
53
  const headerButtonClassNames = "cds--btn--icon-only cds--header__action cds--btn cds--btn--primary cds--btn--icon-only cds--btn cds--btn--primary";
49
54
  const instanceCheckMarkContainerClass = "instance-checkmark-style-container";
50
55
  function Header(props) {
51
- const { productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, navLinks, platform, prefixName = "", rightPanel, skipToContentProps, templateMeteringEvent, triggerEvent, userTeams, } = props;
56
+ const { analyticsHelpers, productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, createJoinTeamTrigger, history, isLaunchpad = false, navLinks, platform, prefixName = "", rightPanel, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, user, userTeams, } = props;
57
+ const hasUserTeams = Boolean(userTeams);
58
+ const userTeamsUrl = serviceUrl.getUserTeamsServices({ baseServicesUrl });
59
+ const teamsQuery = useQuery({
60
+ queryKey: userTeamsUrl,
61
+ queryFn: resolver.query(userTeamsUrl, null),
62
+ enabled: !hasUserTeams,
63
+ });
52
64
  return (React.createElement(React.Fragment, null,
53
65
  React.createElement(Theme, { theme: carbonTheme },
54
66
  React.createElement(Header$1, { "aria-label": "App navigation header", className: className },
@@ -64,7 +76,7 @@ function Header(props) {
64
76
  React.createElement(NotificationsMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: Boolean(props.enableNotifications), countEnabled: Boolean(props.enableNotificationsCount) }),
65
77
  React.createElement(SupportMenu, { enabled: Array.isArray(props.supportMenuItems) && props.supportMenuItems.length > 0, menuItems: props.supportMenuItems }),
66
78
  React.createElement(ProfileMenu, { enabled: Array.isArray(props.profileMenuItems) && props.profileMenuItems.length > 0, menuItems: props.profileMenuItems }),
67
- React.createElement(AppSwitcherMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: props.enableAppSwitcher, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, userTeams: userTeams }),
79
+ React.createElement(AppSwitcherMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: props.enableAppSwitcher, teamsQuery: teamsQuery, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, userTeams: userTeams }),
68
80
  React.createElement(RightPanelMenu, { enabled: Boolean(rightPanel && Object.keys(rightPanel).length), ...rightPanel })))),
69
81
  React.createElement(NotificationsContainer, { enableMultiContainer: true, containerId: `${prefix}--bmrg-header-notifications` })));
70
82
  }
@@ -145,7 +157,7 @@ function AppSwitcherMenu(props) {
145
157
  }
146
158
  return (React.createElement("div", { ref: ref },
147
159
  React.createElement("button", { "aria-controls": MenuListId.Switcher, "aria-expanded": isOpen, "aria-haspopup": "menu", "aria-label": MenuAriaLabelRecord.Switcher, className: headerButtonClassNames, "data-testid": "header-appswitcher-link", id: MenuButtonId.Switcher, onClick: toggleActive }, isOpen ? React.createElement(Close, { size: 20 }) : React.createElement(Switcher, { size: 20 })),
148
- React.createElement(HeaderAppSwitcher, { baseEnvUrl: props.baseEnvUrl, baseServicesUrl: props.baseServicesUrl, id: MenuListId.Switcher, isOpen: isOpen, templateMeteringEvent: props.templateMeteringEvent, triggerEvent: props.triggerEvent, userTeams: props.userTeams })));
160
+ React.createElement(HeaderAppSwitcher, { baseEnvUrl: props.baseEnvUrl, baseServicesUrl: props.baseServicesUrl, id: MenuListId.Switcher, isOpen: isOpen, teamsQuery: props.teamsQuery, templateMeteringEvent: props.templateMeteringEvent, triggerEvent: props.triggerEvent, userTeams: props.userTeams })));
149
161
  }
150
162
  function RightPanelMenu(props) {
151
163
  const { isOpen, toggleActive, ref } = useHeaderMenu(MenuButtonId.RightPanel);
@@ -1,10 +1,8 @@
1
1
  import React from 'react';
2
- import { useQuery } from 'react-query';
3
2
  import { HeaderPanel, SkeletonText, SwitcherDivider, SideNavMenu, SideNavMenuItem } from '@carbon/react';
4
3
  import { Launch } from '@carbon/react/icons';
5
4
  import Error from '../ErrorMessage/ErrorMessage.js';
6
5
  import cx from 'classnames';
7
- import { resolver, serviceUrl } from '../../config/servicesConfig.js';
8
6
  import { prefix } from '../../internal/settings.js';
9
7
 
10
8
  /*
@@ -19,14 +17,8 @@ const externalProps = {
19
17
  const panelClassName = `${prefix}--bmrg-header-switcher-panel`;
20
18
  const contentClassName = `${prefix}--bmrg-header-switcher`;
21
19
  const skeletonClassName = `${prefix}--bmrg-header-switcher__skeleton`;
22
- function HeaderAppSwitcher({ baseServicesUrl, baseEnvUrl, id, isOpen, templateMeteringEvent, triggerEvent, userTeams }) {
20
+ function HeaderAppSwitcher({ baseServicesUrl, baseEnvUrl, id, isOpen, teamsQuery, templateMeteringEvent, triggerEvent, userTeams, }) {
23
21
  const hasUserTeams = Boolean(userTeams);
24
- const userTeamsUrl = serviceUrl.getUserTeamsServices({ baseServicesUrl });
25
- const teamsQuery = useQuery({
26
- queryKey: userTeamsUrl,
27
- queryFn: resolver.query(userTeamsUrl, null),
28
- enabled: !hasUserTeams
29
- });
30
22
  if (userTeams?.isLoading || teamsQuery?.isLoading) {
31
23
  return (React.createElement(HeaderPanel, { "aria-label": "App Switcher", className: panelClassName, expanded: isOpen, id: id, role: "menu" },
32
24
  React.createElement("div", { className: cx(contentClassName, "--is-loading", { "--is-hidden": !isOpen }) },
@@ -69,7 +61,7 @@ function HeaderAppSwitcher({ baseServicesUrl, baseEnvUrl, id, isOpen, templateMe
69
61
  }
70
62
  return null;
71
63
  }
72
- function TeamServiceListMenu({ baseEnvUrl, isAccount, isMember, team, templateMeteringEvent, triggerEvent }) {
64
+ function TeamServiceListMenu({ baseEnvUrl, isAccount, isMember, team, templateMeteringEvent, triggerEvent, }) {
73
65
  const { name, displayName, services } = team;
74
66
  const nameToDisplay = displayName ? displayName : name;
75
67
  const isNameTruncated = nameToDisplay?.length > 30;
@@ -18,10 +18,11 @@ IBM Confidential
18
18
  694970X, 69497O0
19
19
  © Copyright IBM Corp. 2022, 2024
20
20
  */
21
- function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }) {
21
+ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, createJoinTeamTrigger, history, isLaunchpad = false, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }) {
22
22
  // Support base header .e.g for an error state
23
23
  if (!config) {
24
- return (React.createElement(Header, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, productName: productName || platformName || "" }));
24
+ return (React.createElement(QueryClientProvider, { client: queryClient },
25
+ React.createElement(Header, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, productName: productName || platformName || "", user: user })));
25
26
  }
26
27
  const { features, navigation, platform, platformMessage } = config;
27
28
  const names = getProductAndPlatformNames({ productName, platformName, platform });
@@ -61,7 +62,7 @@ function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformN
61
62
  */
62
63
  const isPrivacyStatementDisabled = renderPrivacyStatement === false || features?.["consent.enabled"] === false;
63
64
  return (React.createElement(QueryClientProvider, { client: queryClient },
64
- React.createElement(Header, { baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, enableAppSwitcher: isAppSwitcherEnabled, instanceSwitcherEnabled: instanceSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, leftPanel: leftPanel, navLinks: navigation, platform: platform, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
65
+ React.createElement(Header, { analyticsHelpers: analyticsHelpers, baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, createJoinTeamTrigger: createJoinTeamTrigger, enableAppSwitcher: isAppSwitcherEnabled, instanceSwitcherEnabled: instanceSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, leftPanel: leftPanel, navLinks: navigation, platform: platform, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
65
66
  isUserEnabled && (React.createElement(ProfileSettingsMenuItem, { key: "profile-settings", baseServicesUrl: platform.baseServicesUrl, src: `${platform.baseServicesUrl}/users/image/${user?.email}`, userName: user?.displayName ?? user?.name })),
66
67
  isSendMailEnabled && (React.createElement(HeaderMenuItem, { key: "email-preferences", href: `${platform.baseEnvUrl}/launchpad/email-preferences`, icon: React.createElement(Email, null), kind: "internal", text: "Email Preferences", type: "link" })),
67
68
  !isPrivacyStatementDisabled && (React.createElement(PrivacyStatementMenuItem, { key: "privacy-statement", baseServicesUrl: platform.baseServicesUrl, platformEmail: platform?.platformEmail })),
@@ -77,7 +78,7 @@ function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformN
77
78
  isAboutPlatformEnabled && (React.createElement(AboutPlatformMenuItem, { key: "about-platform", name: platform.name, baseServicesUrl: platform.baseServicesUrl })),
78
79
  tutorialScreenToShow && handleShowTutorial && (React.createElement(HeaderMenuItem, { key: "launch-tutorial", onClick: handleShowTutorial, icon: React.createElement(Book, null), "data-testid": "launch-tutorial", text: "Launch Tutorial", type: "button" })),
79
80
  ...supportMenuItems,
80
- ].filter(Boolean), userTeams: userTeams }),
81
+ ].filter(Boolean), history: history, isLaunchpad: isLaunchpad, trackEvent: trackEvent, user: user, userTeams: userTeams }),
81
82
  isPrivacyModalRendered ? (React.createElement(PrivacyRedirect, { isOpen: true, baseEnvUrl: platform.baseEnvUrl, platformName: platform?.name, user: user })) : null));
82
83
  }
83
84
  /**
@@ -223,6 +223,7 @@ type User = {
223
223
  hasOpenPersonalTeamRequest?: boolean;
224
224
  personalTeamAssistantsAccess?: boolean;
225
225
  personalTeamAssistantsAccessRequested?: boolean;
226
+ teamInstanceSwitcherDefault?: string | null;
226
227
  };
227
228
  type UserTeams = {
228
229
  accountTeams: {
@@ -346,14 +347,18 @@ type Props$H = React.ComponentPropsWithoutRef<"img"> & {
346
347
  declare function Avatar({ alt, className, size, src, style, title, userName, plainTooltip, ...rest }: Props$H): React.JSX.Element;
347
348
 
348
349
  type Props$G = {
350
+ analyticsHelpers?: any;
349
351
  baseServicesUrl?: string;
350
352
  baseEnvUrl?: string;
351
353
  carbonTheme?: "white" | "g10" | "g90" | "g100";
352
354
  className?: string;
355
+ createJoinTeamTrigger?: Function;
353
356
  enableAppSwitcher?: boolean;
354
357
  instanceSwitcherEnabled?: boolean;
355
358
  enableNotifications?: boolean;
356
359
  enableNotificationsCount?: boolean;
360
+ history?: any;
361
+ isLaunchpad?: boolean;
357
362
  leftPanel?: (args: {
358
363
  close: () => void;
359
364
  isOpen: boolean;
@@ -381,7 +386,9 @@ type Props$G = {
381
386
  supportMenuItems?: React.ReactNode[];
382
387
  instanceSwitcherMenuItems?: React.ReactNode[];
383
388
  templateMeteringEvent?: (props: any) => void;
389
+ trackEvent?: Function;
384
390
  triggerEvent?: (props: any) => any;
391
+ user?: User;
385
392
  userTeams?: {
386
393
  data: any;
387
394
  isLoading: boolean;
@@ -1354,7 +1361,9 @@ type Props$1 = {
1354
1361
  declare function ToggleComponent({ helperText, id, invalid, invalidText, reversed, label, labelText, labelA, labelB, orientation, tooltipClassName, tooltipContent, tooltipProps, ...toggleProps }: Props$1): React.JSX.Element;
1355
1362
 
1356
1363
  type Props = {
1364
+ analyticsHelpers?: any;
1357
1365
  carbonTheme?: "white" | "g10" | "g90" | "g100";
1366
+ createJoinTeamTrigger?: Function;
1358
1367
  baseEnvUrl?: string;
1359
1368
  config?: {
1360
1369
  features?: {
@@ -1399,6 +1408,8 @@ type Props = {
1399
1408
  };
1400
1409
  platformMessage?: any;
1401
1410
  };
1411
+ history?: any;
1412
+ isLaunchpad?: boolean;
1402
1413
  leftPanel?: (args: {
1403
1414
  close: () => void;
1404
1415
  isOpen: boolean;
@@ -1420,6 +1431,7 @@ type Props = {
1420
1431
  };
1421
1432
  supportMenuItems?: React.ReactNode[];
1422
1433
  templateMeteringEvent?: (props: any) => void;
1434
+ trackEvent?: Function;
1423
1435
  triggerEvent?: (props: any) => any;
1424
1436
  user?: User;
1425
1437
  userTeams?: {
@@ -1431,6 +1443,6 @@ type Props = {
1431
1443
  handleShowTutorial?: Function;
1432
1444
  tutorialScreenToShow?: string;
1433
1445
  };
1434
- declare function UIShell({ baseEnvUrl, carbonTheme, config, leftPanel, platformName, productName, profileMenuItems, supportMenuItems, renderPrivacyRedirect, renderPrivacyStatement, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }: Props): React.JSX.Element;
1446
+ declare function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme, config, createJoinTeamTrigger, history, isLaunchpad, leftPanel, platformName, productName, profileMenuItems, supportMenuItems, renderPrivacyRedirect, renderPrivacyStatement, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }: Props): React.JSX.Element;
1435
1447
 
1436
1448
  export { AdvantageSideNav, AutoSuggestBmrg as AutoSuggest, Avatar, CheckboxListComponent as CheckboxList, ComboBoxComponent as ComboBox, ComboBoxMultiSelect, ComposedModal, ConfirmModal, CreatableComponent as Creatable, DataDrivenInput, DateInputComponent as DateInput, DecisionButtons, DelayedRender, DynamicFormik, DynamicInput, Error, Error403, Error404, ErrorBoundary, ErrorDragon, ErrorFullPage, Error as ErrorMessage, ErrorPage, ErrorPageCore, FeatureHeader, FeatureHeaderSubtitle, FeatureHeaderTitle, FeatureNavTab, FeatureNavTabs, FeatureSideNav, FeatureSideNavFooter, FeatureSideNavHeader, FeatureSideNavLink, FeatureSideNavLinks, FlowModalContainer as FlowModal, FlowModalForm, FormInput, Header, _default as HeaderMenuItem, ImageModal, InputGovernor, Loading, MemberBar, Modal, ModalConfirmEdit, FlowModalContainer as ModalFlow, FlowModalForm as ModalFlowForm, ModalForm, ModalFunctionChildrenProps, ModalTrigger, NotificationsContainer, PlatformBanner, PlatformNotificationsContainer, Portal, PrivacyStatement, ProtectedRoute, RadioGroupComponent as RadioGroup, RichTextAreaComponent as RichTextArea, SimpleTeamService, Team, TextAreaComponent as TextArea, TextInputComponent as TextInput, ToastNotification, ToggleComponent as Toggle, TooltipHover, UIShell, User, UserTeams, notify };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@boomerang-io/carbon-addons-boomerang-react",
3
3
  "description": "Carbon Addons for Boomerang apps",
4
- "version": "4.6.8-beta.22",
4
+ "version": "4.6.8-beta.24",
5
5
  "author": {
6
6
  "name": "Tim Bula",
7
7
  "email": "timrbula@gmail.com"
@@ -0,0 +1,165 @@
1
+ /*
2
+ IBM Confidential
3
+ 694970X, 69497O0
4
+ © Copyright IBM Corp. 2022, 2025
5
+ */
6
+
7
+ @use "../../global/config" as *;
8
+ @use '@carbon/themes/scss/tokens' as theme;
9
+ @use "../../global/utils";
10
+ @use "../../global/themes/shell-tokens" as shell;
11
+
12
+ :root {
13
+ .#{$prefix}--header-dropdown-menu {
14
+ list-style: none;
15
+ width: 15rem;
16
+
17
+ .#{$prefix}--header__menu-title {
18
+ display: flex;
19
+ font-weight: 700;
20
+ justify-content: space-between;
21
+ overflow: hidden;
22
+ width: 100%;
23
+
24
+ .#{$prefix}--header__menu-arrow {
25
+ min-height: 1rem;
26
+ min-width: 1rem;
27
+ }
28
+
29
+ &[aria-expanded="true"] {
30
+ background-color: var(--cds-layer-hover-01) !important;
31
+ }
32
+ }
33
+
34
+ .#{$prefix}--header__menu {
35
+ box-shadow: none;
36
+ width: 18.5625rem;
37
+
38
+ .#{$prefix}--bmrg-header-drop-down {
39
+ position: absolute;
40
+ max-height: 48rem;
41
+ overflow-y: auto;
42
+ margin-right: 3.5625rem;
43
+ width: 18.5625rem;
44
+
45
+ a.#{$prefix}--header__menu-item {
46
+ cursor: pointer;
47
+ width: 100%;
48
+
49
+ .#{$prefix}--text-truncate--end {
50
+ width: 100%;
51
+ }
52
+ }
53
+
54
+ .#{$prefix}--header-dropdown-menu-item-text-icon {
55
+ align-items: center;
56
+ display: flex;
57
+ }
58
+
59
+ .#{$prefix}--header-dropdown-menu-item-text {
60
+ display: -webkit-box;
61
+ line-clamp: 2;
62
+ overflow: hidden;
63
+ text-overflow: ellipsis;
64
+ -webkit-box-orient: vertical;
65
+ -webkit-line-clamp: 2;
66
+ }
67
+
68
+ .#{$prefix}--header-dropdown-menu-item-icon {
69
+ min-height: 1rem;
70
+ min-width: 1rem;
71
+ margin-left: 0.5rem;
72
+ }
73
+
74
+ .#{$prefix}--header-dropdown-menu-item-container {
75
+ .#{$prefix}--header-dropdown-menu-item {
76
+ align-items: center;
77
+ display: flex;
78
+ justify-content: space-between;
79
+ }
80
+
81
+ .#{$prefix}--header__menu-item[aria-selected="true"] {
82
+ background-color: var(--cds-layer-hover-01) !important;
83
+ }
84
+ }
85
+
86
+ .#{$prefix}--header-dropdown-menu-item-account-container {
87
+ .#{$prefix}--header-dropdown-menu-item-account {
88
+ align-items: center;
89
+ display: flex;
90
+ justify-content: space-between;
91
+
92
+ .#{$prefix}--header-dropdown-menu-item-account-icons {
93
+ align-items: center;
94
+ display: flex;
95
+ padding-left: 0.5rem;
96
+ }
97
+
98
+ .#{$prefix}--header-dropdown-menu-item-account-group-icon {
99
+ min-height: 1rem;
100
+ min-width: 1rem;
101
+ margin-right: 0.5rem;
102
+ }
103
+
104
+ .#{$prefix}--header-dropdown-menu-item-account-chevron-icon {
105
+ min-height: 1rem;
106
+ min-width: 1rem;
107
+ transition: transform 150ms ease-in-out;
108
+ transform: rotate(0deg);
109
+ }
110
+ }
111
+
112
+ .#{$prefix}--header__menu-item[aria-expanded="true"] {
113
+ background-color: var(--cds-layer-hover-01) !important;
114
+
115
+ .#{$prefix}--header-dropdown-menu-item-account-chevron-icon {
116
+ transform: rotate(180deg);
117
+ }
118
+ }
119
+
120
+ .#{$prefix}--header__menu-item[aria-selected="true"] {
121
+ background-color: var(--cds-layer-hover-01) !important;
122
+ }
123
+ }
124
+
125
+ .#{$prefix}--header-dropdown-menu-item-account-submenu {
126
+ max-height: 0;
127
+ overflow: hidden;
128
+ opacity: 0;
129
+ transition: max-height 150ms ease-in-out, opacity 150ms ease-in-out;
130
+
131
+ &[aria-expanded="true"] {
132
+ max-height: 40rem;
133
+ opacity: 1;
134
+ overflow-y: auto;
135
+ }
136
+ }
137
+
138
+ .#{$prefix}--header-team-switcher-create-team-button-container {
139
+ border-bottom: 0.0625rem solid var(--cds-border-subtle-00);
140
+ }
141
+
142
+ .#{$prefix}--header-team-switcher-create-team-button {
143
+ cursor: pointer;
144
+ display: flex;
145
+ justify-content: space-between;
146
+ padding: 0;
147
+ width: 100%;
148
+
149
+ .#{$prefix}--header-team-switcher-create-team-button-text {
150
+ color: var(--cds-link-primary) !important;
151
+ }
152
+
153
+ .#{$prefix}--header-team-switcher-create-team-button-icon {
154
+ height: 1rem;
155
+ width: 1rem;
156
+
157
+ path {
158
+ fill: var(--cds-link-primary) !important;
159
+ }
160
+ }
161
+ }
162
+ }
163
+ }
164
+ }
165
+ }
@@ -55,6 +55,7 @@ $use-theme-advantage-white: false !default;
55
55
  @use '../components/PrivacyRedirect/privacyRedirect';
56
56
  @use '../components/Header/header';
57
57
  @use '../components/Header/headerAppSwitcher';
58
+ @use '../components/Header/headerTeamSwitcher';
58
59
  @use '../components/Header/headerMenu';
59
60
  @use '../components/Header/headerMenuItem';
60
61
  @use '../components/Header/userRequests';
@@ -103,7 +104,7 @@ $use-theme-advantage-white: false !default;
103
104
  svg {
104
105
  fill: shell.$bmrg-theme-primary;
105
106
  }
106
- }
107
+ }
107
108
 
108
109
  .#{$prefix}--side-nav__item--active {
109
110
  .#{$prefix}--side-nav__icon {
@@ -155,7 +156,7 @@ $use-theme-advantage-white: false !default;
155
156
  .#{$prefix}--modal {
156
157
  background-color: shell.$bmrg-header-modal-overlay; //default isrgba(theme.$layer-accent-01, 0.5)
157
158
  }
158
-
159
+
159
160
  .#{$prefix}--modal-close {
160
161
  &:hover {
161
162
  background-color: shell.$bmrg-header-hover-background;