@boomerang-io/carbon-addons-boomerang-react 4.6.13-beta.0 → 4.6.13-beta.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
+ var reactRouterDom = require('react-router-dom');
6
7
  var cx = require('classnames');
7
8
  var react = require('@carbon/react');
8
9
  var TooltipHover = require('../TooltipHover/TooltipHover.js');
@@ -179,14 +180,14 @@ function AdvantageSideNav(props) {
179
180
  homeLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-home-link", isActive: `${baseEnvUrl}/${app}/`.includes(windowLocation.href), renderIcon: icons.Home, href: homeLink, onClick: (e) => {
180
181
  if (isLaunchpad) {
181
182
  handleLaunchpadLink(e);
182
- history.push("/launchpad/");
183
+ history.push("/");
183
184
  }
184
185
  handleHomeClick();
185
186
  } }, "Home")) : null,
186
187
  teamSwitcherTeam ? (React__default.default.createElement(react.SideNavLink, { title: teamSwitcherTeam.isAccount ? "Account Page" : "Team Page", name: teamSwitcherTeam.name, "data-testid": "sidenav-team-link", id: teamSwitcherTeam.id, isActive: windowLocation.href.includes(teamSwitcherTeam.id), className: `${settings.prefix}--bmrg-advantage-sidenav-team`, renderIcon: icons.UserMultiple, href: `${baseEnvUrl}/${app}/teams/${teamSwitcherTeam.id}`, onClick: (e) => {
187
188
  if (isLaunchpad) {
188
189
  handleLaunchpadLink(e);
189
- history.push(`/launchpad/teams/${teamSwitcherTeam.id}`);
190
+ history.push(`/teams/${teamSwitcherTeam.id}`);
190
191
  }
191
192
  handleTeamClick({
192
193
  team: teamSwitcherTeam,
@@ -225,11 +226,16 @@ function AdvantageSideNav(props) {
225
226
  handleDocumentCollectionsClick();
226
227
  } }, "Document Collections")) : null,
227
228
  showSecondDivider ? React__default.default.createElement(react.SideNavDivider, null) : null,
228
- catalogNavlink ? (React__default.default.createElement(react.SideNavLink, { href: catalogNavlink, renderIcon: icons.Catalog }, "Catalog")) : null,
229
+ catalogNavlink ? (
230
+ // <SideNavLink data-testid="sidenav-catalog-link" href={catalogNavlink} renderIcon={Catalog}>
231
+ // Catalog
232
+ // </SideNavLink>
233
+ React__default.default.createElement(reactRouterDom.Link, { to: catalogNavlink },
234
+ React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-catalog-link", renderIcon: icons.Catalog }, "Catalog"))) : null,
229
235
  settingsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: icons.Settings, href: settingsLink, onClick: (e) => {
230
236
  handleSettingsClick();
231
237
  } }, "Settings")) : null,
232
- adminNavlink ? (React__default.default.createElement(react.SideNavLink, { href: adminNavlink, renderIcon: icons.LicenseThirdParty }, "Admin")) : null),
238
+ adminNavlink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-admin-link", href: adminNavlink, renderIcon: icons.LicenseThirdParty }, "Admin")) : null),
233
239
  children ? (React__default.default.createElement(React__default.default.Fragment, null,
234
240
  React__default.default.createElement(react.SideNavDivider, null),
235
241
  children)) : null)));
@@ -33,6 +33,7 @@ function Feedback(props) {
33
33
  "Submit your idea ",
34
34
  React__default.default.createElement("a", { "aria-describedby": "new-window-aria-desc-0", href: props.sendBluePointsAwardUrl, target: "_blank", rel: "noopener noreferrer" }, "here"),
35
35
  " and you could win a BluePoints award."),
36
+ React__default.default.createElement("p", null, "You must have an IBM email address to submit the idea."),
36
37
  React__default.default.createElement("p", null, "We look forward to your feedback and ideas!"))),
37
38
  React__default.default.createElement(react.ModalFooter, null,
38
39
  React__default.default.createElement(react.Button, { "data-modal-primary-focus": true, kind: "primary", onClick: props.closeModal }, "OK"))));
@@ -62,7 +62,7 @@ const MenuAriaLabelRecord = {
62
62
  const headerButtonClassNames = "cds--btn--icon-only cds--header__action cds--btn cds--btn--primary cds--btn--icon-only cds--btn cds--btn--primary";
63
63
  const instanceCheckMarkContainerClass = "instance-checkmark-style-container";
64
64
  function Header(props) {
65
- const { analyticsHelpers, productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, createJoinTeamTrigger, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, navLinks, platform, prefixName = "", refetchUser, refetchNavigation, rightPanel, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, user, userTeams, } = props;
65
+ const { analyticsHelpers, productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, createJoinTeamTrigger, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, navLinks, platform, prefixName = "", refetchUser, refetchNavigation, rightPanel, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, user, userTeams, userTeamsAssets, } = props;
66
66
  const hasUserTeams = Boolean(userTeams);
67
67
  const userTeamsUrl = servicesConfig.serviceUrl.getUserTeamsServices({ baseServicesUrl });
68
68
  const teamsQuery = reactQuery.useQuery({
@@ -86,7 +86,7 @@ function Header(props) {
86
86
  React__default.default.createElement(NotificationsMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: Boolean(props.enableNotifications), countEnabled: Boolean(props.enableNotificationsCount) }),
87
87
  React__default.default.createElement(SupportMenu, { enabled: Array.isArray(props.supportMenuItems) && props.supportMenuItems.length > 0, menuItems: props.supportMenuItems }),
88
88
  React__default.default.createElement(ProfileMenu, { enabled: Array.isArray(props.profileMenuItems) && props.profileMenuItems.length > 0, menuItems: props.profileMenuItems }),
89
- React__default.default.createElement(AppSwitcherMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: props.enableAppSwitcher, teamsQuery: teamsQuery, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, userTeams: userTeams }),
89
+ React__default.default.createElement(AppSwitcherMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: props.enableAppSwitcher, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, userTeams: userTeamsAssets }),
90
90
  React__default.default.createElement(RightPanelMenu, { enabled: Boolean(rightPanel && Object.keys(rightPanel).length), ...rightPanel })))),
91
91
  React__default.default.createElement(NotificationsContainer.default, { enableMultiContainer: true, containerId: `${settings.prefix}--bmrg-header-notifications` })));
92
92
  }
@@ -162,12 +162,20 @@ function ProfileMenu(props) {
162
162
  }
163
163
  function AppSwitcherMenu(props) {
164
164
  const { isOpen, toggleActive, ref } = useHeaderMenu.default(MenuButtonId.Switcher);
165
+ const hasUserTeamsAssets = Boolean(props.userTeams);
166
+ const userTeamsAssetsUrl = servicesConfig.serviceUrl.getUserTeamsServicesAssets({ baseServicesUrl: props.baseServicesUrl });
167
+ const queryEnabled = isOpen && props.enabled && !hasUserTeamsAssets && Boolean(props.baseServicesUrl);
168
+ const teamsAssetsQuery = reactQuery.useQuery({
169
+ queryKey: userTeamsAssetsUrl,
170
+ queryFn: servicesConfig.resolver.query(userTeamsAssetsUrl, null),
171
+ enabled: queryEnabled,
172
+ });
165
173
  if (!props.enabled || !props.baseServicesUrl) {
166
174
  return null;
167
175
  }
168
176
  return (React__default.default.createElement("div", { ref: ref },
169
177
  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 })),
170
- 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 })));
178
+ React__default.default.createElement(HeaderAppSwitcher.default, { baseEnvUrl: props.baseEnvUrl, baseServicesUrl: props.baseServicesUrl, id: MenuListId.Switcher, isOpen: isOpen, teamsQuery: teamsAssetsQuery, templateMeteringEvent: props.templateMeteringEvent, triggerEvent: props.triggerEvent, userTeams: props.userTeams })));
171
179
  }
172
180
  function RightPanelMenu(props) {
173
181
  const { isOpen, toggleActive, ref } = useHeaderMenu.default(MenuButtonId.RightPanel);
@@ -71,17 +71,17 @@ function HeaderAppSwitcher({ baseServicesUrl, baseEnvUrl, id, isOpen, teamsQuery
71
71
  return null;
72
72
  }
73
73
  function TeamServiceListMenu({ baseEnvUrl, isAccount, isMember, team, templateMeteringEvent, triggerEvent, }) {
74
- const { name, displayName, services } = team;
74
+ const { id, name, displayName, services } = team;
75
75
  const nameToDisplay = displayName ? displayName : name;
76
76
  const isNameTruncated = nameToDisplay?.length > 30;
77
77
  if (!isMember) {
78
- return (React__default.default.createElement("div", { className: `${settings.prefix}--side-nav__item`, title: isNameTruncated ? nameToDisplay : undefined },
78
+ return (React__default.default.createElement("div", { id: id, className: `${settings.prefix}--side-nav__item`, title: isNameTruncated ? nameToDisplay : undefined },
79
79
  React__default.default.createElement("button", { disabled: true, className: `${settings.prefix}--side-nav__submenu`, "data-testid": "header-app-switcher-service" },
80
80
  React__default.default.createElement("span", { className: `${settings.prefix}--side-nav__submenu-title` }, nameToDisplay))));
81
81
  }
82
82
  return (
83
83
  // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
84
- React__default.default.createElement("ul", { className: `${settings.prefix}--bmrg-header-team`, title: isNameTruncated ? nameToDisplay : undefined },
84
+ React__default.default.createElement("ul", { id: id, className: `${settings.prefix}--bmrg-header-team`, title: isNameTruncated ? nameToDisplay : undefined },
85
85
  React__default.default.createElement(react.SideNavMenu, { title: nameToDisplay },
86
86
  React__default.default.createElement(ServiceList, { baseEnvUrl: baseEnvUrl, isAccount: isAccount, servicesData: services, team: team, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent }))));
87
87
  }
@@ -98,7 +98,7 @@ function ServiceList(props) {
98
98
  return (React__default.default.createElement(React__default.default.Fragment, null, servicesData.map((service) => {
99
99
  const isExternalLink = typeof service?.url?.includes === "function" && !service.url.includes(baseEnvUrl);
100
100
  const isNameTruncated = isExternalLink ? service.name.length > 28 : service.name.length > 32;
101
- return (React__default.default.createElement(react.SideNavMenuItem, { key: service.name, href: service.url, title: isNameTruncated ? service.name : undefined, onClick: () => handleLinkClick(service), "data-testid": "header-app-switcher-service", ...(isExternalLink ? externalProps : undefined) },
101
+ return (React__default.default.createElement(react.SideNavMenuItem, { id: service.id, key: service.id, href: service.url, title: isNameTruncated ? service.name : undefined, onClick: () => handleLinkClick(service), "data-testid": "header-app-switcher-service", ...(isExternalLink ? externalProps : undefined) },
102
102
  React__default.default.createElement("span", null, service.name),
103
103
  isExternalLink ? React__default.default.createElement(icons.Launch, { size: 16, title: "Opens page in new tab" }) : undefined));
104
104
  })));
@@ -26,7 +26,7 @@ IBM Confidential
26
26
  694970X, 69497O0
27
27
  © Copyright IBM Corp. 2022, 2024
28
28
  */
29
- function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, createJoinTeamTrigger, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, refetchUser, refetchNavigation, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }) {
29
+ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, createJoinTeamTrigger, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, refetchUser, refetchNavigation, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, userTeamsAssets, enableIcaMacs, }) {
30
30
  // Support base header .e.g for an error state
31
31
  if (!config) {
32
32
  return (React__default.default.createElement(reactQuery.QueryClientProvider, { client: servicesConfig.queryClient },
@@ -91,7 +91,7 @@ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, cr
91
91
  isAboutPlatformEnabled && (React__default.default.createElement(AboutPlatform.AboutPlatformMenuItem, { key: "about-platform", name: platform.name, baseServicesUrl: platform.baseServicesUrl })),
92
92
  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" })),
93
93
  ...supportMenuItems,
94
- ].filter(Boolean), history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, refetchUser: refetchUser, refetchNavigation: refetchNavigation, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, trackEvent: trackEvent, user: user, userTeams: userTeams }),
94
+ ].filter(Boolean), history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, refetchUser: refetchUser, refetchNavigation: refetchNavigation, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, trackEvent: trackEvent, user: user, userTeams: userTeams, userTeamsAssets: userTeamsAssets }),
95
95
  isPrivacyModalRendered ? (React__default.default.createElement(PrivacyRedirect.default, { isOpen: true, baseEnvUrl: platform.baseEnvUrl, platformName: platform?.name, user: user })) : null));
96
96
  }
97
97
  /**
@@ -21,6 +21,7 @@ const serviceUrl = {
21
21
  getStatement: ({ baseServicesUrl }) => `${baseServicesUrl}/users/consents`,
22
22
  getTeamServices: ({ baseServicesUrl, teamId }) => `${baseServicesUrl}/launchpad/teams/${teamId}/services`,
23
23
  getUserTeamsServices: ({ baseServicesUrl }) => `${baseServicesUrl}/users/teams/services`,
24
+ getUserTeamsServicesAssets: ({ baseServicesUrl }) => `${baseServicesUrl}/users/teams/services/assets`,
24
25
  resourceUserConsent: ({ baseServicesUrl }) => `${baseServicesUrl}/users/consent`,
25
26
  resourceUserProfile: ({ baseServicesUrl }) => `${baseServicesUrl}/users/profile`,
26
27
  };
@@ -1,4 +1,5 @@
1
1
  import React from 'react';
2
+ import { Link } from 'react-router-dom';
2
3
  import cx from 'classnames';
3
4
  import { SideNavLink, SideNav, SideNavItems, SideNavDivider } from '@carbon/react';
4
5
  import TooltipHover from '../TooltipHover/TooltipHover.js';
@@ -170,14 +171,14 @@ function AdvantageSideNav(props) {
170
171
  homeLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-home-link", isActive: `${baseEnvUrl}/${app}/`.includes(windowLocation.href), renderIcon: Home, href: homeLink, onClick: (e) => {
171
172
  if (isLaunchpad) {
172
173
  handleLaunchpadLink(e);
173
- history.push("/launchpad/");
174
+ history.push("/");
174
175
  }
175
176
  handleHomeClick();
176
177
  } }, "Home")) : null,
177
178
  teamSwitcherTeam ? (React.createElement(SideNavLink, { title: teamSwitcherTeam.isAccount ? "Account Page" : "Team Page", name: teamSwitcherTeam.name, "data-testid": "sidenav-team-link", id: teamSwitcherTeam.id, isActive: windowLocation.href.includes(teamSwitcherTeam.id), className: `${prefix}--bmrg-advantage-sidenav-team`, renderIcon: UserMultiple, href: `${baseEnvUrl}/${app}/teams/${teamSwitcherTeam.id}`, onClick: (e) => {
178
179
  if (isLaunchpad) {
179
180
  handleLaunchpadLink(e);
180
- history.push(`/launchpad/teams/${teamSwitcherTeam.id}`);
181
+ history.push(`/teams/${teamSwitcherTeam.id}`);
181
182
  }
182
183
  handleTeamClick({
183
184
  team: teamSwitcherTeam,
@@ -216,11 +217,16 @@ function AdvantageSideNav(props) {
216
217
  handleDocumentCollectionsClick();
217
218
  } }, "Document Collections")) : null,
218
219
  showSecondDivider ? React.createElement(SideNavDivider, null) : null,
219
- catalogNavlink ? (React.createElement(SideNavLink, { href: catalogNavlink, renderIcon: Catalog }, "Catalog")) : null,
220
+ catalogNavlink ? (
221
+ // <SideNavLink data-testid="sidenav-catalog-link" href={catalogNavlink} renderIcon={Catalog}>
222
+ // Catalog
223
+ // </SideNavLink>
224
+ React.createElement(Link, { to: catalogNavlink },
225
+ React.createElement(SideNavLink, { "data-testid": "sidenav-catalog-link", renderIcon: Catalog }, "Catalog"))) : null,
220
226
  settingsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: Settings, href: settingsLink, onClick: (e) => {
221
227
  handleSettingsClick();
222
228
  } }, "Settings")) : null,
223
- adminNavlink ? (React.createElement(SideNavLink, { href: adminNavlink, renderIcon: LicenseThirdParty }, "Admin")) : null),
229
+ adminNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-admin-link", href: adminNavlink, renderIcon: LicenseThirdParty }, "Admin")) : null),
224
230
  children ? (React.createElement(React.Fragment, null,
225
231
  React.createElement(SideNavDivider, null),
226
232
  children)) : null)));
@@ -25,6 +25,7 @@ function Feedback(props) {
25
25
  "Submit your idea ",
26
26
  React.createElement("a", { "aria-describedby": "new-window-aria-desc-0", href: props.sendBluePointsAwardUrl, target: "_blank", rel: "noopener noreferrer" }, "here"),
27
27
  " and you could win a BluePoints award."),
28
+ React.createElement("p", null, "You must have an IBM email address to submit the idea."),
28
29
  React.createElement("p", null, "We look forward to your feedback and ideas!"))),
29
30
  React.createElement(ModalFooter, null,
30
31
  React.createElement(Button, { "data-modal-primary-focus": true, kind: "primary", onClick: props.closeModal }, "OK"))));
@@ -54,7 +54,7 @@ const MenuAriaLabelRecord = {
54
54
  const headerButtonClassNames = "cds--btn--icon-only cds--header__action cds--btn cds--btn--primary cds--btn--icon-only cds--btn cds--btn--primary";
55
55
  const instanceCheckMarkContainerClass = "instance-checkmark-style-container";
56
56
  function Header(props) {
57
- const { analyticsHelpers, productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, createJoinTeamTrigger, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, navLinks, platform, prefixName = "", refetchUser, refetchNavigation, rightPanel, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, user, userTeams, } = props;
57
+ const { analyticsHelpers, productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, createJoinTeamTrigger, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, navLinks, platform, prefixName = "", refetchUser, refetchNavigation, rightPanel, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, user, userTeams, userTeamsAssets, } = props;
58
58
  const hasUserTeams = Boolean(userTeams);
59
59
  const userTeamsUrl = serviceUrl.getUserTeamsServices({ baseServicesUrl });
60
60
  const teamsQuery = useQuery({
@@ -78,7 +78,7 @@ function Header(props) {
78
78
  React.createElement(NotificationsMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: Boolean(props.enableNotifications), countEnabled: Boolean(props.enableNotificationsCount) }),
79
79
  React.createElement(SupportMenu, { enabled: Array.isArray(props.supportMenuItems) && props.supportMenuItems.length > 0, menuItems: props.supportMenuItems }),
80
80
  React.createElement(ProfileMenu, { enabled: Array.isArray(props.profileMenuItems) && props.profileMenuItems.length > 0, menuItems: props.profileMenuItems }),
81
- React.createElement(AppSwitcherMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: props.enableAppSwitcher, teamsQuery: teamsQuery, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, userTeams: userTeams }),
81
+ React.createElement(AppSwitcherMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: props.enableAppSwitcher, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, userTeams: userTeamsAssets }),
82
82
  React.createElement(RightPanelMenu, { enabled: Boolean(rightPanel && Object.keys(rightPanel).length), ...rightPanel })))),
83
83
  React.createElement(NotificationsContainer, { enableMultiContainer: true, containerId: `${prefix}--bmrg-header-notifications` })));
84
84
  }
@@ -154,12 +154,20 @@ function ProfileMenu(props) {
154
154
  }
155
155
  function AppSwitcherMenu(props) {
156
156
  const { isOpen, toggleActive, ref } = useHeaderMenu(MenuButtonId.Switcher);
157
+ const hasUserTeamsAssets = Boolean(props.userTeams);
158
+ const userTeamsAssetsUrl = serviceUrl.getUserTeamsServicesAssets({ baseServicesUrl: props.baseServicesUrl });
159
+ const queryEnabled = isOpen && props.enabled && !hasUserTeamsAssets && Boolean(props.baseServicesUrl);
160
+ const teamsAssetsQuery = useQuery({
161
+ queryKey: userTeamsAssetsUrl,
162
+ queryFn: resolver.query(userTeamsAssetsUrl, null),
163
+ enabled: queryEnabled,
164
+ });
157
165
  if (!props.enabled || !props.baseServicesUrl) {
158
166
  return null;
159
167
  }
160
168
  return (React.createElement("div", { ref: ref },
161
169
  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 })),
162
- 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 })));
170
+ React.createElement(HeaderAppSwitcher, { baseEnvUrl: props.baseEnvUrl, baseServicesUrl: props.baseServicesUrl, id: MenuListId.Switcher, isOpen: isOpen, teamsQuery: teamsAssetsQuery, templateMeteringEvent: props.templateMeteringEvent, triggerEvent: props.triggerEvent, userTeams: props.userTeams })));
163
171
  }
164
172
  function RightPanelMenu(props) {
165
173
  const { isOpen, toggleActive, ref } = useHeaderMenu(MenuButtonId.RightPanel);
@@ -62,17 +62,17 @@ function HeaderAppSwitcher({ baseServicesUrl, baseEnvUrl, id, isOpen, teamsQuery
62
62
  return null;
63
63
  }
64
64
  function TeamServiceListMenu({ baseEnvUrl, isAccount, isMember, team, templateMeteringEvent, triggerEvent, }) {
65
- const { name, displayName, services } = team;
65
+ const { id, name, displayName, services } = team;
66
66
  const nameToDisplay = displayName ? displayName : name;
67
67
  const isNameTruncated = nameToDisplay?.length > 30;
68
68
  if (!isMember) {
69
- return (React.createElement("div", { className: `${prefix}--side-nav__item`, title: isNameTruncated ? nameToDisplay : undefined },
69
+ return (React.createElement("div", { id: id, className: `${prefix}--side-nav__item`, title: isNameTruncated ? nameToDisplay : undefined },
70
70
  React.createElement("button", { disabled: true, className: `${prefix}--side-nav__submenu`, "data-testid": "header-app-switcher-service" },
71
71
  React.createElement("span", { className: `${prefix}--side-nav__submenu-title` }, nameToDisplay))));
72
72
  }
73
73
  return (
74
74
  // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions
75
- React.createElement("ul", { className: `${prefix}--bmrg-header-team`, title: isNameTruncated ? nameToDisplay : undefined },
75
+ React.createElement("ul", { id: id, className: `${prefix}--bmrg-header-team`, title: isNameTruncated ? nameToDisplay : undefined },
76
76
  React.createElement(SideNavMenu, { title: nameToDisplay },
77
77
  React.createElement(ServiceList, { baseEnvUrl: baseEnvUrl, isAccount: isAccount, servicesData: services, team: team, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent }))));
78
78
  }
@@ -89,7 +89,7 @@ function ServiceList(props) {
89
89
  return (React.createElement(React.Fragment, null, servicesData.map((service) => {
90
90
  const isExternalLink = typeof service?.url?.includes === "function" && !service.url.includes(baseEnvUrl);
91
91
  const isNameTruncated = isExternalLink ? service.name.length > 28 : service.name.length > 32;
92
- return (React.createElement(SideNavMenuItem, { key: service.name, href: service.url, title: isNameTruncated ? service.name : undefined, onClick: () => handleLinkClick(service), "data-testid": "header-app-switcher-service", ...(isExternalLink ? externalProps : undefined) },
92
+ return (React.createElement(SideNavMenuItem, { id: service.id, key: service.id, href: service.url, title: isNameTruncated ? service.name : undefined, onClick: () => handleLinkClick(service), "data-testid": "header-app-switcher-service", ...(isExternalLink ? externalProps : undefined) },
93
93
  React.createElement("span", null, service.name),
94
94
  isExternalLink ? React.createElement(Launch, { size: 16, title: "Opens page in new tab" }) : undefined));
95
95
  })));
@@ -18,7 +18,7 @@ IBM Confidential
18
18
  694970X, 69497O0
19
19
  © Copyright IBM Corp. 2022, 2024
20
20
  */
21
- function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, createJoinTeamTrigger, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, refetchUser, refetchNavigation, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }) {
21
+ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, createJoinTeamTrigger, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, refetchUser, refetchNavigation, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, userTeamsAssets, enableIcaMacs, }) {
22
22
  // Support base header .e.g for an error state
23
23
  if (!config) {
24
24
  return (React.createElement(QueryClientProvider, { client: queryClient },
@@ -83,7 +83,7 @@ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, cr
83
83
  isAboutPlatformEnabled && (React.createElement(AboutPlatformMenuItem, { key: "about-platform", name: platform.name, baseServicesUrl: platform.baseServicesUrl })),
84
84
  tutorialScreenToShow && handleShowTutorial && (React.createElement(HeaderMenuItem, { key: "launch-tutorial", onClick: handleShowTutorial, icon: React.createElement(Book, null), "data-testid": "launch-tutorial", text: "Launch Tutorial", type: "button" })),
85
85
  ...supportMenuItems,
86
- ].filter(Boolean), history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, refetchUser: refetchUser, refetchNavigation: refetchNavigation, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, trackEvent: trackEvent, user: user, userTeams: userTeams }),
86
+ ].filter(Boolean), history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, refetchUser: refetchUser, refetchNavigation: refetchNavigation, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, trackEvent: trackEvent, user: user, userTeams: userTeams, userTeamsAssets: userTeamsAssets }),
87
87
  isPrivacyModalRendered ? (React.createElement(PrivacyRedirect, { isOpen: true, baseEnvUrl: platform.baseEnvUrl, platformName: platform?.name, user: user })) : null));
88
88
  }
89
89
  /**
@@ -15,6 +15,7 @@ const serviceUrl = {
15
15
  getStatement: ({ baseServicesUrl }) => `${baseServicesUrl}/users/consents`,
16
16
  getTeamServices: ({ baseServicesUrl, teamId }) => `${baseServicesUrl}/launchpad/teams/${teamId}/services`,
17
17
  getUserTeamsServices: ({ baseServicesUrl }) => `${baseServicesUrl}/users/teams/services`,
18
+ getUserTeamsServicesAssets: ({ baseServicesUrl }) => `${baseServicesUrl}/users/teams/services/assets`,
18
19
  resourceUserConsent: ({ baseServicesUrl }) => `${baseServicesUrl}/users/consent`,
19
20
  resourceUserProfile: ({ baseServicesUrl }) => `${baseServicesUrl}/users/profile`,
20
21
  };
@@ -78,11 +78,15 @@ type SimpleIdNameMap = {
78
78
  privateTeam?: boolean;
79
79
  displayName?: string;
80
80
  services?: Array<{
81
+ id: string;
82
+ templateId: string;
81
83
  name: string;
82
84
  url: string;
83
85
  }>;
84
86
  };
85
87
  type SimpleTeamService = {
88
+ id: string;
89
+ templateId: string;
86
90
  name: string;
87
91
  url: string;
88
92
  };
@@ -407,6 +411,11 @@ type Props$G = {
407
411
  isLoading: boolean;
408
412
  error: any;
409
413
  };
414
+ userTeamsAssets?: {
415
+ data: any;
416
+ isLoading: boolean;
417
+ error: any;
418
+ };
410
419
  };
411
420
  declare function Header(props: Props$G): React.JSX.Element;
412
421
 
@@ -1463,10 +1472,15 @@ type Props = {
1463
1472
  isLoading: boolean;
1464
1473
  error: any;
1465
1474
  };
1475
+ userTeamsAssets?: {
1476
+ data: any;
1477
+ isLoading: boolean;
1478
+ error: any;
1479
+ };
1466
1480
  enableIcaMacs?: boolean;
1467
1481
  handleShowTutorial?: Function;
1468
1482
  tutorialScreenToShow?: string;
1469
1483
  };
1470
- declare function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme, config, createJoinTeamTrigger, history, isLaunchpad, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems, supportMenuItems, renderPrivacyRedirect, renderPrivacyStatement, rightPanel, handleShowTutorial, refetchUser, refetchNavigation, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }: Props): React.JSX.Element;
1484
+ declare function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme, config, createJoinTeamTrigger, history, isLaunchpad, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems, supportMenuItems, renderPrivacyRedirect, renderPrivacyStatement, rightPanel, handleShowTutorial, refetchUser, refetchNavigation, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, userTeamsAssets, enableIcaMacs, }: Props): React.JSX.Element;
1471
1485
 
1472
1486
  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.13-beta.0",
4
+ "version": "4.6.13-beta.20",
5
5
  "author": {
6
6
  "name": "Tim Bula",
7
7
  "email": "timrbula@gmail.com"
@@ -11,7 +11,11 @@ IBM Confidential
11
11
 
12
12
  .#{$prefix}--bmrg-feedback-container {
13
13
  .#{$prefix}--modal-container {
14
- height: utils.rem(288px);
14
+ height: 22rem;
15
+ }
16
+
17
+ .#{$prefix}--modal-content {
18
+ mask-image: none !important;
15
19
  }
16
20
 
17
21
  .#{$prefix}--bmrg-feedback {