@boomerang-io/carbon-addons-boomerang-react 4.6.13-beta.2 → 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,10 +3,10 @@
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');
9
- var reactRouterDom = require('react-router-dom');
10
10
  var icons = require('@carbon/react/icons');
11
11
  var UserType = require('../../constants/UserType.js');
12
12
  var settings = require('../../internal/settings.js');
@@ -180,15 +180,14 @@ function AdvantageSideNav(props) {
180
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) => {
181
181
  if (isLaunchpad) {
182
182
  handleLaunchpadLink(e);
183
- history.push("/launchpad/");
183
+ history.push("/");
184
184
  }
185
185
  handleHomeClick();
186
186
  } }, "Home")) : null,
187
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) => {
188
188
  if (isLaunchpad) {
189
189
  handleLaunchpadLink(e);
190
- return React__default.default.createElement(reactRouterDom.Link, { to: appLink.team({ teamId: teamSwitcherTeam.id }) });
191
- // history.push(`/launchpad/teams/${teamSwitcherTeam.id}`);
190
+ history.push(`/teams/${teamSwitcherTeam.id}`);
192
191
  }
193
192
  handleTeamClick({
194
193
  team: teamSwitcherTeam,
@@ -227,11 +226,16 @@ function AdvantageSideNav(props) {
227
226
  handleDocumentCollectionsClick();
228
227
  } }, "Document Collections")) : null,
229
228
  showSecondDivider ? React__default.default.createElement(react.SideNavDivider, null) : null,
230
- 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,
231
235
  settingsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: icons.Settings, href: settingsLink, onClick: (e) => {
232
236
  handleSettingsClick();
233
237
  } }, "Settings")) : null,
234
- 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),
235
239
  children ? (React__default.default.createElement(React__default.default.Fragment, null,
236
240
  React__default.default.createElement(react.SideNavDivider, null),
237
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,8 +1,8 @@
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';
5
- import { Link } from 'react-router-dom';
6
6
  import { ChatBot, Home, UserMultiple, AddAlt, Api, IntentRequestCreate, Folders, DocumentMultiple_02, Catalog, Settings, LicenseThirdParty } from '@carbon/react/icons';
7
7
  import { USER_PLATFORM_ROLE } from '../../constants/UserType.js';
8
8
  import { prefix } from '../../internal/settings.js';
@@ -171,15 +171,14 @@ function AdvantageSideNav(props) {
171
171
  homeLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-home-link", isActive: `${baseEnvUrl}/${app}/`.includes(windowLocation.href), renderIcon: Home, href: homeLink, onClick: (e) => {
172
172
  if (isLaunchpad) {
173
173
  handleLaunchpadLink(e);
174
- history.push("/launchpad/");
174
+ history.push("/");
175
175
  }
176
176
  handleHomeClick();
177
177
  } }, "Home")) : null,
178
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) => {
179
179
  if (isLaunchpad) {
180
180
  handleLaunchpadLink(e);
181
- return React.createElement(Link, { to: appLink.team({ teamId: teamSwitcherTeam.id }) });
182
- // history.push(`/launchpad/teams/${teamSwitcherTeam.id}`);
181
+ history.push(`/teams/${teamSwitcherTeam.id}`);
183
182
  }
184
183
  handleTeamClick({
185
184
  team: teamSwitcherTeam,
@@ -218,11 +217,16 @@ function AdvantageSideNav(props) {
218
217
  handleDocumentCollectionsClick();
219
218
  } }, "Document Collections")) : null,
220
219
  showSecondDivider ? React.createElement(SideNavDivider, null) : null,
221
- 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,
222
226
  settingsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: Settings, href: settingsLink, onClick: (e) => {
223
227
  handleSettingsClick();
224
228
  } }, "Settings")) : null,
225
- 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),
226
230
  children ? (React.createElement(React.Fragment, null,
227
231
  React.createElement(SideNavDivider, null),
228
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.2",
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 {