@boomerang-io/carbon-addons-boomerang-react 4.6.13-beta.2 → 4.6.13-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/AdvantageSideNav/AdvantageSideNav.js +10 -6
- package/dist/cjs/components/Feedback/Feedback.js +1 -0
- package/dist/cjs/components/Header/Header.js +11 -3
- package/dist/cjs/components/Header/HeaderAppSwitcher.js +4 -4
- package/dist/cjs/components/UIShell/UIShell.js +2 -2
- package/dist/cjs/config/servicesConfig.js +1 -0
- package/dist/esm/components/AdvantageSideNav/AdvantageSideNav.js +10 -6
- package/dist/esm/components/Feedback/Feedback.js +1 -0
- package/dist/esm/components/Header/Header.js +11 -3
- package/dist/esm/components/Header/HeaderAppSwitcher.js +4 -4
- package/dist/esm/components/UIShell/UIShell.js +2 -2
- package/dist/esm/config/servicesConfig.js +1 -0
- package/dist/types/index.d.ts +15 -1
- package/package.json +1 -1
- package/scss/components/Feedback/_feedback.scss +5 -1
|
@@ -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("/
|
|
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
|
-
|
|
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 ? (
|
|
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 }, "Catalogssss"))) : 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,
|
|
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:
|
|
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.
|
|
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("/
|
|
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
|
-
|
|
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 ? (
|
|
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 }, "Catalogssss"))) : 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,
|
|
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:
|
|
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.
|
|
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
|
};
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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
|
@@ -11,7 +11,11 @@ IBM Confidential
|
|
|
11
11
|
|
|
12
12
|
.#{$prefix}--bmrg-feedback-container {
|
|
13
13
|
.#{$prefix}--modal-container {
|
|
14
|
-
height:
|
|
14
|
+
height: 22rem;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.#{$prefix}--modal-content {
|
|
18
|
+
mask-image: none !important;
|
|
15
19
|
}
|
|
16
20
|
|
|
17
21
|
.#{$prefix}--bmrg-feedback {
|