@boomerang-io/carbon-addons-boomerang-react 4.6.21-beta.4 → 4.6.21-beta.40
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 +38 -67
- package/dist/cjs/components/Header/Header.js +3 -2
- package/dist/cjs/components/Header/HeaderTeamSwitcher.js +70 -45
- package/dist/cjs/components/ProfileSettings/ProfileSettings.js +22 -4
- package/dist/cjs/components/UIShell/UIShell.js +13 -5
- package/dist/cjs/constants/TeamTypes.js +15 -0
- package/dist/esm/components/AdvantageSideNav/AdvantageSideNav.js +38 -67
- package/dist/esm/components/Header/Header.js +3 -2
- package/dist/esm/components/Header/HeaderTeamSwitcher.js +70 -45
- package/dist/esm/components/ProfileSettings/ProfileSettings.js +22 -4
- package/dist/esm/components/UIShell/UIShell.js +14 -6
- package/dist/esm/constants/TeamTypes.js +13 -0
- package/dist/types/index.d.ts +5 -1
- package/package.json +1 -1
- package/scss/components/ProfileSettings/_profileSettings.scss +1 -1
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var React = require('react');
|
|
6
|
-
var reactRouterDom = require('react-router-dom');
|
|
7
6
|
var cx = require('classnames');
|
|
8
7
|
var react = require('@carbon/react');
|
|
9
8
|
var TooltipHover = require('../TooltipHover/TooltipHover.js');
|
|
@@ -34,11 +33,10 @@ const SideNavUrlKeys = {
|
|
|
34
33
|
Admin: "admin",
|
|
35
34
|
};
|
|
36
35
|
function AdvantageSideNav(props) {
|
|
37
|
-
const { app, appLink, agenticAppsPath = "", agentStudioPath = "", regionalTeam, enableChatButton = true, showChatButton = true, showSelectTeamPurpose = false, defaultAssistantLink, joinCreateTrigger, isLoading, isOpen, teams = [], triggerEvent, accounts = [], baseEnvUrl, className, navLinks, personalTeams = [], user, showChatTooltip, templateMeteringEvent, tooltipMessage, isLaunchpad = false, sideNavUrls, history, children, personalTeamEnabled, ...rest } = props;
|
|
36
|
+
const { app, appLink, agenticAppsPath = "", agentStudioPath = "", regionalTeam, enableChatButton = true, showChatButton = true, showSelectTeamPurpose = false, defaultAssistantLink, joinCreateTrigger, isLoading, isOpen, teams = [], triggerEvent, accounts = [], baseEnvUrl, className, navLinks, personalTeams = [], user, showChatTooltip, templateMeteringEvent, tooltipMessage, isLaunchpad = false, isbetaLaunchpad = false, sideNavUrls, history, children, personalTeamEnabled, ...rest } = props;
|
|
38
37
|
const [activeMenu, setActiveMenu] = React__default.default.useState(false);
|
|
39
38
|
const isMenuOpen = isOpen || activeMenu;
|
|
40
39
|
const windowLocation = window.location;
|
|
41
|
-
const location = reactRouterDom.useLocation();
|
|
42
40
|
const isPartnerUser = user?.type === UserType.USER_PLATFORM_ROLE.Partner;
|
|
43
41
|
const joinButtontitle = showSelectTeamPurpose ? "Create Team" : "Create or Join Team";
|
|
44
42
|
const hamburguerMenu = document.getElementById("header-sidenav-menu-button");
|
|
@@ -51,6 +49,7 @@ function AdvantageSideNav(props) {
|
|
|
51
49
|
const catalogNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Catalog)?.url;
|
|
52
50
|
const settingsLink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Settings)?.url;
|
|
53
51
|
const adminNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Admin)?.url;
|
|
52
|
+
const AssistantStudioLink = false;
|
|
54
53
|
// get current selected team
|
|
55
54
|
let teamSwitcherTeam = null;
|
|
56
55
|
if (Array.isArray(personalTeams) && personalTeams.length > 0) {
|
|
@@ -98,38 +97,6 @@ function AdvantageSideNav(props) {
|
|
|
98
97
|
destinationPath: toolsLink,
|
|
99
98
|
});
|
|
100
99
|
};
|
|
101
|
-
const handleAgentAssistantStudioClick = () => {
|
|
102
|
-
triggerEvent &&
|
|
103
|
-
triggerEvent({
|
|
104
|
-
action: "Clicked on SideNav Agent & Assistant Studio link",
|
|
105
|
-
category: "Sidenav",
|
|
106
|
-
destinationPath: agentAssistantStudioLink,
|
|
107
|
-
});
|
|
108
|
-
};
|
|
109
|
-
const handleAgentAssistantLibraryClick = () => {
|
|
110
|
-
triggerEvent &&
|
|
111
|
-
triggerEvent({
|
|
112
|
-
action: "Clicked on SideNav Agent & Assistant Library link",
|
|
113
|
-
category: "Sidenav",
|
|
114
|
-
destinationPath: agentAssistantLibraryLink,
|
|
115
|
-
});
|
|
116
|
-
};
|
|
117
|
-
const handleDocumentCollectionsClick = () => {
|
|
118
|
-
triggerEvent &&
|
|
119
|
-
triggerEvent({
|
|
120
|
-
action: "Clicked on SideNav Document Collections link",
|
|
121
|
-
category: "Sidenav",
|
|
122
|
-
destinationPath: documentCollectionsLink,
|
|
123
|
-
});
|
|
124
|
-
};
|
|
125
|
-
const handleSettingsClick = () => {
|
|
126
|
-
triggerEvent &&
|
|
127
|
-
triggerEvent({
|
|
128
|
-
action: "Clicked on SideNav Settings link",
|
|
129
|
-
category: "Sidenav",
|
|
130
|
-
destinationPath: settingsLink,
|
|
131
|
-
});
|
|
132
|
-
};
|
|
133
100
|
const handleChatClick = () => {
|
|
134
101
|
let redirectLink = chatLink
|
|
135
102
|
? chatLink
|
|
@@ -170,8 +137,17 @@ function AdvantageSideNav(props) {
|
|
|
170
137
|
}
|
|
171
138
|
setActiveMenu(false);
|
|
172
139
|
};
|
|
173
|
-
const chatSideNavLink = (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-chat-link", className: !enableChatButton ? `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` : "", disabled: Boolean(!enableChatButton), renderIcon: icons.ChatBot, href: enableChatButton && chatLink, onClick: enableChatButton ? handleChatClick : (e) => e.preventDefault() }, "Chat"));
|
|
140
|
+
const chatSideNavLink = (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-chat-link", className: !enableChatButton ? `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` : "", isActive: windowLocation.href.includes(`${baseEnvUrl}/chat`), disabled: Boolean(!enableChatButton), renderIcon: icons.ChatBot, href: enableChatButton && chatLink, onClick: enableChatButton ? handleChatClick : (e) => e.preventDefault() }, "Chat"));
|
|
174
141
|
const showSecondDivider = showChatButton || toolsLink || agentAssistantStudioLink || agentAssistantLibraryLink || documentCollectionsLink;
|
|
142
|
+
const navigateInternal = (url) => {
|
|
143
|
+
const target = new URL(url, window.location.origin);
|
|
144
|
+
if (target.origin === window.location.origin) {
|
|
145
|
+
history.push(target.pathname + target.search + target.hash);
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
window.location.href = url;
|
|
149
|
+
}
|
|
150
|
+
};
|
|
175
151
|
return (React__default.default.createElement(react.SideNav, { "aria-label": "sidenav-container", className: cx__default.default(`${settings.prefix}--bmrg-advantage-sidenav-container`, className, {
|
|
176
152
|
"--closed": !isMenuOpen,
|
|
177
153
|
}), "data-testid": "sidenav-container", isRail: true, expanded: isMenuOpen, onMouseEnter: () => setActiveMenu(true), onMouseLeave: () => {
|
|
@@ -183,6 +159,11 @@ function AdvantageSideNav(props) {
|
|
|
183
159
|
handleLaunchpadLink(e);
|
|
184
160
|
history.push("/");
|
|
185
161
|
}
|
|
162
|
+
if (isbetaLaunchpad) {
|
|
163
|
+
console.log("beta launchpad home link clicked");
|
|
164
|
+
handleLaunchpadLink(e);
|
|
165
|
+
history.push("/launchpad");
|
|
166
|
+
}
|
|
186
167
|
handleHomeClick();
|
|
187
168
|
} }, "Home")) : null,
|
|
188
169
|
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(`/launchpad/teams/${teamSwitcherTeam.id}`), className: `${settings.prefix}--bmrg-advantage-sidenav-team`, renderIcon: icons.UserMultiple, href: `${baseEnvUrl}/${app}/teams/${teamSwitcherTeam.id}`, onClick: (e) => {
|
|
@@ -207,7 +188,7 @@ function AdvantageSideNav(props) {
|
|
|
207
188
|
} }, joinButtontitle)) : null,
|
|
208
189
|
React__default.default.createElement(react.SideNavDivider, null),
|
|
209
190
|
showChatButton &&
|
|
210
|
-
(showChatTooltip ? (React__default.default.createElement(TooltipHover.default, { className: `${settings.prefix}--bmrg-side-nav__tooltip`, content: tooltipMessage, direction: "right" },
|
|
191
|
+
(showChatTooltip ? (React__default.default.createElement(TooltipHover.default, { className: `${settings.prefix}--bmrg-side-nav__tooltip`, isActive: windowLocation.href.includes(`${baseEnvUrl}/chat`), content: tooltipMessage, direction: "right" },
|
|
211
192
|
React__default.default.createElement("span", null, chatSideNavLink))) : (chatSideNavLink)),
|
|
212
193
|
toolsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-tools-link", renderIcon: icons.Api, href: toolsLink, onClick: (e) => {
|
|
213
194
|
handleToolsClick();
|
|
@@ -215,37 +196,27 @@ function AdvantageSideNav(props) {
|
|
|
215
196
|
React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-advantage-sidenav-item-tag` },
|
|
216
197
|
"Tools",
|
|
217
198
|
React__default.default.createElement(react.Tag, { size: "sm", title: "BETA", type: "high-contrast" }, "BETA")))) : null,
|
|
218
|
-
agentAssistantStudioLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
handleDocumentCollectionsClick();
|
|
231
|
-
} }, "Document Collections")) : null,
|
|
199
|
+
agentAssistantStudioLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
|
|
200
|
+
// isActive={
|
|
201
|
+
// (agentStudioPath && windowLocation.href.includes(`/launchpad${agentStudioPath}`)) ||
|
|
202
|
+
// (agenticAppsPath && windowLocation.href.includes(`/launchpad${agenticAppsPath}`))
|
|
203
|
+
// }
|
|
204
|
+
className: `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink), renderIcon: icons.IntentRequestCreate }, "Agent & Assistant Studio")) : null,
|
|
205
|
+
agentAssistantLibraryLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: icons.Folders,
|
|
206
|
+
//href={agentAssistantLibraryLink}
|
|
207
|
+
className: `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink) }, "Agent & Assistant Library")) : null,
|
|
208
|
+
documentCollectionsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-document-collections-link", renderIcon: icons.DocumentMultiple_02,
|
|
209
|
+
//href={documentCollectionsLink}
|
|
210
|
+
className: `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink) }, "Document Collections")) : null,
|
|
232
211
|
showSecondDivider ? React__default.default.createElement(react.SideNavDivider, null) : null,
|
|
233
|
-
catalogNavlink ? (React__default.default.createElement(
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
// >
|
|
242
|
-
// Catalog
|
|
243
|
-
// </SideNavLink>
|
|
244
|
-
) : null,
|
|
245
|
-
settingsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: icons.Settings, href: settingsLink, onClick: (e) => {
|
|
246
|
-
handleSettingsClick();
|
|
247
|
-
} }, "Settings")) : null,
|
|
248
|
-
adminNavlink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-admin-link", href: adminNavlink, renderIcon: icons.LicenseThirdParty }, "Admin")) : null),
|
|
212
|
+
catalogNavlink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`), href: catalogNavlink, renderIcon: icons.Catalog }, "Catalog")) : null,
|
|
213
|
+
settingsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: icons.Settings,
|
|
214
|
+
// href={settingsLink}
|
|
215
|
+
className: `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink) }, "Settings")) : null,
|
|
216
|
+
adminNavlink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-admin-link", renderIcon: icons.LicenseThirdParty, onClick: (e) => {
|
|
217
|
+
e.preventDefault();
|
|
218
|
+
navigateInternal(adminNavlink);
|
|
219
|
+
} }, "Admin")) : null),
|
|
249
220
|
children ? (React__default.default.createElement(React__default.default.Fragment, null,
|
|
250
221
|
React__default.default.createElement(react.SideNavDivider, null),
|
|
251
222
|
children)) : null)));
|
|
@@ -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, userTeamsAssets, } = props;
|
|
65
|
+
const { analyticsHelpers, productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, createJoinTeamTrigger, enableTeamSwitcher = true, 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({
|
|
@@ -70,6 +70,7 @@ function Header(props) {
|
|
|
70
70
|
queryFn: servicesConfig.resolver.query(userTeamsUrl, null),
|
|
71
71
|
enabled: !hasUserTeams && Boolean(baseServicesUrl),
|
|
72
72
|
});
|
|
73
|
+
const showTeamSwitcher = enableTeamSwitcher && Boolean(user);
|
|
73
74
|
return (React__default.default.createElement(React__default.default.Fragment, null,
|
|
74
75
|
React__default.default.createElement(react.Theme, { theme: carbonTheme },
|
|
75
76
|
React__default.default.createElement(react.Header, { "aria-label": "App navigation header", className: className },
|
|
@@ -80,7 +81,7 @@ function Header(props) {
|
|
|
80
81
|
? navLinks.map((link) => (React__default.default.createElement(react.HeaderMenuItem, { "aria-label": `Link for ${link.name}`, "data-testid": "header-menu-link", href: link.url, isCurrentPage: window?.location?.href && link.url ? window.location.href.startsWith(link.url) : false, key: link.name, target: link.isExternal ? "_blank" : undefined, rel: link.isExternal ? "noopener noreferrer" : undefined }, link.name)))
|
|
81
82
|
: null),
|
|
82
83
|
React__default.default.createElement(react.HeaderGlobalBar, null,
|
|
83
|
-
React__default.default.createElement(HeaderTeamSwitcher.default, { analyticsHelpers: analyticsHelpers, baseServicesUrl: baseServicesUrl, createJoinTeamTrigger: createJoinTeamTrigger, history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, menuAriaLabelRecord: MenuAriaLabelRecord.TeamSwitcher, menuButtonId: MenuButtonId.TeamSwitcher, menuListId: MenuListId.TeamSwitcher, navigationPlatform: platform, refetchUser: refetchUser, refetchNavigation: refetchNavigation, teamsQuery: teamsQuery, trackEvent: trackEvent, user: user, userTeams: userTeams }),
|
|
84
|
+
showTeamSwitcher ? (React__default.default.createElement(HeaderTeamSwitcher.default, { analyticsHelpers: analyticsHelpers, baseServicesUrl: baseServicesUrl, createJoinTeamTrigger: createJoinTeamTrigger, history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, menuAriaLabelRecord: MenuAriaLabelRecord.TeamSwitcher, menuButtonId: MenuButtonId.TeamSwitcher, menuListId: MenuListId.TeamSwitcher, navigationPlatform: platform, refetchUser: refetchUser, refetchNavigation: refetchNavigation, teamsQuery: teamsQuery, trackEvent: trackEvent, user: user, userTeams: userTeams })) : null,
|
|
84
85
|
props?.instanceSwitcherEnabled && (React__default.default.createElement(InstanceSwitcherMenu, { enabled: Boolean(props.instanceSwitcherEnabled), menuItems: platform?.instances })),
|
|
85
86
|
React__default.default.createElement(RequestsMenu, { baseEnvUrl: baseEnvUrl, enabled: Boolean(props.requestSummary), summary: props.requestSummary }),
|
|
86
87
|
React__default.default.createElement(NotificationsMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: Boolean(props.enableNotifications), countEnabled: Boolean(props.enableNotificationsCount) }),
|
|
@@ -11,6 +11,7 @@ var HeaderMenu = require('./HeaderMenu.js');
|
|
|
11
11
|
var servicesConfig = require('../../config/servicesConfig.js');
|
|
12
12
|
var settings = require('../../internal/settings.js');
|
|
13
13
|
var UserType = require('../../constants/UserType.js');
|
|
14
|
+
var TeamTypes = require('../../constants/TeamTypes.js');
|
|
14
15
|
|
|
15
16
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
17
|
|
|
@@ -52,6 +53,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
52
53
|
const showSelectTeamPurpose = navigationPlatform?.requireTeamPurpose;
|
|
53
54
|
const createTeamButtonText = showSelectTeamPurpose ? "Create Team" : "Create or Join Team";
|
|
54
55
|
const userTeamInstanceSwitcherDefault = user?.teamInstanceSwitcherDefault;
|
|
56
|
+
const hasUpdatedDefaultTeamRef = React__default.default.useRef(false);
|
|
55
57
|
const teamLink = ({ teamId }) => {
|
|
56
58
|
return `${navigationPlatform.baseEnvUrl}/launchpad/teams/${teamId}`;
|
|
57
59
|
};
|
|
@@ -90,7 +92,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
90
92
|
const userHasTeams = userHasPersonalTeam || userHasAccountTeams || userHasStandardTeams;
|
|
91
93
|
const handleSelectTeam = async ({ team }) => {
|
|
92
94
|
setSelectedTeam(team);
|
|
93
|
-
if (!userTeamInstanceSwitcherDefault
|
|
95
|
+
if (!userTeamInstanceSwitcherDefault &&
|
|
96
|
+
!hasUpdatedDefaultTeamRef.current) {
|
|
97
|
+
hasUpdatedDefaultTeamRef.current = true;
|
|
94
98
|
const body = {
|
|
95
99
|
teamInstanceSwitcherDefault: team.id,
|
|
96
100
|
};
|
|
@@ -98,6 +102,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
98
102
|
}
|
|
99
103
|
};
|
|
100
104
|
const handleNoTeamsToSelect = async () => {
|
|
105
|
+
if (hasUpdatedDefaultTeamRef.current)
|
|
106
|
+
return;
|
|
107
|
+
hasUpdatedDefaultTeamRef.current = true;
|
|
101
108
|
const body = {
|
|
102
109
|
teamInstanceSwitcherDefault: null,
|
|
103
110
|
};
|
|
@@ -147,6 +154,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
147
154
|
teamsQuery?.data?.personalTeam?.length === 0))) {
|
|
148
155
|
handleNoTeamsToSelect();
|
|
149
156
|
}
|
|
157
|
+
else if (userTeamInstanceSwitcherDefault === null) {
|
|
158
|
+
setSelectedTeam(null);
|
|
159
|
+
}
|
|
150
160
|
}, [
|
|
151
161
|
baseServicesUrl,
|
|
152
162
|
hasUserTeams,
|
|
@@ -223,33 +233,58 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
223
233
|
standardTeams = teamsQuery?.data?.standardTeams ?? [];
|
|
224
234
|
personalTeam = teamsQuery?.data?.personalTeam ?? [];
|
|
225
235
|
}
|
|
226
|
-
let
|
|
227
|
-
|
|
236
|
+
let newPersonalTeam = personalTeam.length > 0
|
|
237
|
+
? personalTeam.map((personalTeam) => ({
|
|
238
|
+
...personalTeam,
|
|
239
|
+
type: TeamTypes.TEAM_TYPES.PERSONAL,
|
|
240
|
+
nameToDisplay: personalTeam.displayName ? personalTeam.displayName : personalTeam.name,
|
|
241
|
+
}))
|
|
242
|
+
: [];
|
|
243
|
+
let newAccountTeams = [];
|
|
244
|
+
let newStandardTeams = [];
|
|
228
245
|
if (accountTeams?.length > 0) {
|
|
229
|
-
|
|
246
|
+
newAccountTeams = accountTeams.map((team) => {
|
|
230
247
|
let newProjectTeams = [];
|
|
231
248
|
if (team.projectTeams && team.projectTeams.length > 0) {
|
|
232
|
-
newProjectTeams = team.projectTeams?.map((
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
249
|
+
newProjectTeams = team.projectTeams?.map((projectTeam) => {
|
|
250
|
+
return {
|
|
251
|
+
...projectTeam,
|
|
252
|
+
nameToDisplay: projectTeam.displayName ? projectTeam.displayName : projectTeam.name,
|
|
253
|
+
};
|
|
254
|
+
});
|
|
236
255
|
}
|
|
237
256
|
return {
|
|
238
257
|
...team,
|
|
239
258
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
259
|
+
type: TeamTypes.TEAM_TYPES.ACCOUNT,
|
|
240
260
|
projectTeams: sortBy__default.default(newProjectTeams, ["nameToDisplay"]),
|
|
241
261
|
};
|
|
242
262
|
});
|
|
243
|
-
sortedAccountTeamsWithNamesToDisplay = sortBy__default.default(newAccountTeams, ["nameToDisplay"]);
|
|
244
263
|
}
|
|
245
264
|
if (standardTeams?.length > 0) {
|
|
246
|
-
|
|
265
|
+
newStandardTeams = standardTeams.map((team) => {
|
|
247
266
|
return {
|
|
248
267
|
...team,
|
|
268
|
+
type: TeamTypes.TEAM_TYPES.STANDARD,
|
|
249
269
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
250
270
|
};
|
|
251
271
|
});
|
|
252
|
-
|
|
272
|
+
}
|
|
273
|
+
let allTeams = newPersonalTeam.concat(newAccountTeams, newStandardTeams);
|
|
274
|
+
const order = { [TeamTypes.TEAM_TYPES.PERSONAL]: 1, [TeamTypes.TEAM_TYPES.ACCOUNT]: 2, [TeamTypes.TEAM_TYPES.STANDARD]: 3 };
|
|
275
|
+
allTeams = sortBy__default.default(allTeams, [(team) => order[team.type], "nameToDisplay"]);
|
|
276
|
+
if (selectedTeam) {
|
|
277
|
+
const selectedTeamIndex = allTeams.findIndex((team, index) => {
|
|
278
|
+
if (team.id === selectedTeam.id) {
|
|
279
|
+
return true;
|
|
280
|
+
}
|
|
281
|
+
else if (Array.isArray(team.projectTeams) && team.projectTeams?.length > 0) {
|
|
282
|
+
return team.projectTeams.some((projectTeam) => projectTeam.id === selectedTeam.id);
|
|
283
|
+
}
|
|
284
|
+
return false;
|
|
285
|
+
});
|
|
286
|
+
const [removedTeam] = allTeams.splice(selectedTeamIndex, 1);
|
|
287
|
+
allTeams.unshift(removedTeam);
|
|
253
288
|
}
|
|
254
289
|
let selectedTeamName = selectedTeam?.displayName
|
|
255
290
|
? selectedTeam.displayName
|
|
@@ -271,29 +306,22 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
271
306
|
React__default.default.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
|
|
272
307
|
React__default.default.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
|
|
273
308
|
React__default.default.createElement(icons.AddAlt, { className: headerTeamSwitcherCreateTeamButtonIconClassname })))),
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
const isTeamSelected = team.id === selectedTeam?.id;
|
|
278
|
-
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-personal-menu-item-id` },
|
|
279
|
-
React__default.default.createElement(react.HeaderMenuItem, { key: team.id, id: `${team.id}-personal-menu-item`, "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
280
|
-
handleTeamClick({ team, type: "personal" });
|
|
281
|
-
},
|
|
282
|
-
// eslint-disable-next-line no-script-url
|
|
283
|
-
href: "javascript:void(0)", "data-testid": "header-team-switcher-menu-item" },
|
|
284
|
-
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
285
|
-
React__default.default.createElement("span", { title: teamName, className: headerDropdownMenuItemTextClassname }, teamName),
|
|
286
|
-
isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
287
|
-
})
|
|
288
|
-
: null,
|
|
289
|
-
accountTeams.length > 0
|
|
290
|
-
? sortedAccountTeamsWithNamesToDisplay.map((team) => {
|
|
309
|
+
allTeams.map((team) => {
|
|
310
|
+
const isTeamSelected = team.id === selectedTeam?.id;
|
|
311
|
+
if (team.type === TeamTypes.TEAM_TYPES.ACCOUNT) {
|
|
291
312
|
const isSubmenuOpen = team.id === openAccountSubmenuId;
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
313
|
+
const projectTeams = team.projectTeams;
|
|
314
|
+
const existProjectTeams = Array.isArray(projectTeams) && projectTeams.length > 0;
|
|
315
|
+
let selectedProjectTeamIndex = -1;
|
|
316
|
+
if (existProjectTeams) {
|
|
317
|
+
selectedProjectTeamIndex = projectTeams.findIndex((team) => team.id === selectedTeam?.id);
|
|
318
|
+
}
|
|
319
|
+
const isProjectTeamSelected = selectedProjectTeamIndex >= 0;
|
|
296
320
|
const isMenuSelected = isTeamSelected || isProjectTeamSelected;
|
|
321
|
+
if (existProjectTeams && isProjectTeamSelected) {
|
|
322
|
+
const [removedTeam] = projectTeams.splice(selectedProjectTeamIndex, 1);
|
|
323
|
+
projectTeams.unshift(removedTeam);
|
|
324
|
+
}
|
|
297
325
|
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-account-menu` },
|
|
298
326
|
React__default.default.createElement(react.HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
|
|
299
327
|
// eslint-disable-next-line no-script-url
|
|
@@ -301,7 +329,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
301
329
|
React__default.default.createElement("div", { className: headerDropdownMenuItemAccountClassname },
|
|
302
330
|
React__default.default.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
|
|
303
331
|
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
304
|
-
isMenuSelected ?
|
|
332
|
+
isMenuSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null),
|
|
305
333
|
React__default.default.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
|
|
306
334
|
React__default.default.createElement(icons.GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
|
|
307
335
|
React__default.default.createElement(icons.ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
|
|
@@ -313,9 +341,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
313
341
|
href: "javascript:void(0)" },
|
|
314
342
|
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
|
|
315
343
|
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
|
|
316
|
-
isTeamSelected ?
|
|
317
|
-
|
|
318
|
-
?
|
|
344
|
+
isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)),
|
|
345
|
+
projectTeams && projectTeams.length > 0
|
|
346
|
+
? projectTeams.map((team) => {
|
|
319
347
|
const isTeamSelected = team.id === selectedTeam?.id;
|
|
320
348
|
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-project-menu-item` },
|
|
321
349
|
React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
@@ -328,22 +356,19 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
328
356
|
isTeamSelected ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
|
|
329
357
|
})
|
|
330
358
|
: null)));
|
|
331
|
-
}
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
? sortedStandardTeamsWithNamesToDisplay.map((team) => {
|
|
335
|
-
const isTeamSelected = team.id === selectedTeam?.id;
|
|
336
|
-
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-standard-menu-item` },
|
|
359
|
+
}
|
|
360
|
+
else {
|
|
361
|
+
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-${team.type}-menu-item` },
|
|
337
362
|
React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
338
|
-
handleTeamClick({ team, type: "
|
|
363
|
+
handleTeamClick({ team, type: team.type ?? "" });
|
|
339
364
|
}, "data-testid": "header-team-switcher-menu-item",
|
|
340
365
|
// eslint-disable-next-line no-script-url
|
|
341
366
|
href: "javascript:void(0)" },
|
|
342
367
|
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
343
368
|
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
344
369
|
isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
345
|
-
}
|
|
346
|
-
|
|
370
|
+
}
|
|
371
|
+
})))));
|
|
347
372
|
}
|
|
348
373
|
return null;
|
|
349
374
|
}
|
|
@@ -34,12 +34,13 @@ function determineIfConfigIsDifferent(teams, initialTeams) {
|
|
|
34
34
|
}
|
|
35
35
|
return isConfigDifferent;
|
|
36
36
|
}
|
|
37
|
-
function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal }) {
|
|
37
|
+
function ProfileSettings({ baseServicesUrl, refetchUser, refetchUserTeams, refetchNavigation, src, userName, isOpen, closeModal, }) {
|
|
38
38
|
const queryClient = reactQuery.useQueryClient();
|
|
39
39
|
const [initialTeams, setInitialTeams] = React.useState([]);
|
|
40
40
|
const [teams, setTeams] = React.useState([]);
|
|
41
41
|
const userUrl = servicesConfig.serviceUrl.getLaunchpadUser({ baseServicesUrl });
|
|
42
42
|
const profileUrl = servicesConfig.serviceUrl.resourceUserProfile({ baseServicesUrl });
|
|
43
|
+
const userTeamsUrl = servicesConfig.serviceUrl.getUserTeamsServices({ baseServicesUrl });
|
|
43
44
|
const { data: user, isLoading: userIsLoading, error: userError, } = reactQuery.useQuery({
|
|
44
45
|
queryKey: userUrl,
|
|
45
46
|
queryFn: servicesConfig.resolver.query(userUrl),
|
|
@@ -48,6 +49,22 @@ function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal })
|
|
|
48
49
|
onSuccess: () => {
|
|
49
50
|
queryClient.invalidateQueries(userUrl);
|
|
50
51
|
queryClient.invalidateQueries(profileUrl);
|
|
52
|
+
queryClient.invalidateQueries(userTeamsUrl);
|
|
53
|
+
if (refetchUser) {
|
|
54
|
+
setTimeout(() => {
|
|
55
|
+
refetchUser();
|
|
56
|
+
}, 1000);
|
|
57
|
+
}
|
|
58
|
+
if (refetchUserTeams) {
|
|
59
|
+
setTimeout(() => {
|
|
60
|
+
refetchUserTeams();
|
|
61
|
+
}, 1000);
|
|
62
|
+
}
|
|
63
|
+
if (refetchNavigation) {
|
|
64
|
+
setTimeout(() => {
|
|
65
|
+
refetchNavigation();
|
|
66
|
+
}, 1000);
|
|
67
|
+
}
|
|
51
68
|
},
|
|
52
69
|
});
|
|
53
70
|
// Only disable when we have a user and we know that there aren' any lower level groups to manage
|
|
@@ -63,6 +80,7 @@ function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal })
|
|
|
63
80
|
}
|
|
64
81
|
async function handleSubmit() {
|
|
65
82
|
const body = {
|
|
83
|
+
teamInstanceSwitcherDefault: null,
|
|
66
84
|
lowerLevelGroups: teams,
|
|
67
85
|
};
|
|
68
86
|
try {
|
|
@@ -104,9 +122,9 @@ function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal })
|
|
|
104
122
|
return (React__default.default.createElement(react.ComposedModal, { "aria-label": "Profile Settings", className: `${settings.prefix}--bmrg-profile-settings-container ${settings.prefix}--bmrg-header-modal`, open: isOpen, onClose: handleClose, preventCloseOnClickOutside: true },
|
|
105
123
|
React__default.default.createElement(react.ModalHeader, { closeModal: handleClose, title: `User profile - ${userName}` }),
|
|
106
124
|
React__default.default.createElement(react.ModalBody, { style: { maxHeight: "31.5rem" } },
|
|
107
|
-
React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__title` }, "More user profile settings will be here eventually, but for now you can choose which Teams are shown in your
|
|
108
|
-
React__default.default.createElement("h2", { className: `${settings.prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad
|
|
109
|
-
React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__description` }, "Choose Teams to show or hide in your Launchpad
|
|
125
|
+
React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__title` }, "More user profile settings will be here eventually, but for now you can choose which Teams are shown in your team switcher in Launchpad."),
|
|
126
|
+
React__default.default.createElement("h2", { className: `${settings.prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad team switcher"),
|
|
127
|
+
React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__description` }, "Choose Teams to show or hide in your Launchpad team switcher and Catalog (useful for sensitive demos). You will not be able to access or view unchecked Teams from the team switcher, and cannot add items to them from Catalog."),
|
|
110
128
|
userIsLoading ? (React__default.default.createElement(react.StructuredListSkeleton, null)) : userError ? (React__default.default.createElement(ErrorMessage.default, { style: { color: "#F2F4F8", padding: "1rem" } })) : teams?.length > 0 ? (React__default.default.createElement(react.StructuredListWrapper, { className: `${settings.prefix}--bmrg-profile-settings-list` },
|
|
111
129
|
React__default.default.createElement(react.StructuredListHead, null,
|
|
112
130
|
React__default.default.createElement(react.StructuredListRow, { head: true },
|
|
@@ -26,11 +26,11 @@ 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, userTeamsAssets, enableIcaMacs, }) {
|
|
29
|
+
function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, createJoinTeamTrigger, enableTeamSwitcher = true, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, refetchUser, refetchUserTeams, 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 },
|
|
33
|
-
React__default.default.createElement(Header.default, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, productName: productName || platformName || "", user: user })));
|
|
33
|
+
React__default.default.createElement(Header.default, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, enableTeamSwitcher: enableTeamSwitcher, productName: productName || platformName || "", user: user })));
|
|
34
34
|
}
|
|
35
35
|
const { features, navigation, platform, platformMessage } = config;
|
|
36
36
|
const names = getProductAndPlatformNames({ productName, platformName, platform });
|
|
@@ -71,8 +71,8 @@ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, cr
|
|
|
71
71
|
*/
|
|
72
72
|
const isPrivacyStatementDisabled = renderPrivacyStatement === false || features?.["consent.enabled"] === false;
|
|
73
73
|
return (React__default.default.createElement(reactQuery.QueryClientProvider, { client: servicesConfig.queryClient },
|
|
74
|
-
React__default.default.createElement(Header.default, { analyticsHelpers: analyticsHelpers, baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, createJoinTeamTrigger: createJoinTeamTrigger, enableAppSwitcher: isAppSwitcherEnabled, instanceSwitcherEnabled: instanceSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, leftPanel: leftPanel, navLinks: navigation, platform: platform, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
|
|
75
|
-
isUserEnabled && (React__default.default.createElement(ProfileSettings.ProfileSettingsMenuItem, { key: "profile-settings", baseServicesUrl: platform.baseServicesUrl, src: `${platform.baseServicesUrl}/users/image/${user?.email}`, userName: user?.displayName ?? user?.name })),
|
|
74
|
+
React__default.default.createElement(Header.default, { analyticsHelpers: analyticsHelpers, baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, createJoinTeamTrigger: createJoinTeamTrigger, enableAppSwitcher: isAppSwitcherEnabled, instanceSwitcherEnabled: instanceSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, enableTeamSwitcher: enableTeamSwitcher, leftPanel: leftPanel, navLinks: navigation, platform: platform, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
|
|
75
|
+
isUserEnabled && (React__default.default.createElement(ProfileSettings.ProfileSettingsMenuItem, { key: "profile-settings", baseServicesUrl: platform.baseServicesUrl, src: `${platform.baseServicesUrl}/users/image/${user?.email}`, userName: user?.displayName ?? user?.name, refetchUser: refetchUser, refetchUserTeams: refetchUserTeams, refetchNavigation: refetchNavigation })),
|
|
76
76
|
isSendMailEnabled && (React__default.default.createElement(HeaderMenuItem.default, { key: "email-preferences", href: `${platform.baseEnvUrl}/launchpad/email-preferences`, icon: React__default.default.createElement(icons.Email, null), kind: "internal", text: "Email Preferences", type: "link" })),
|
|
77
77
|
!isPrivacyStatementDisabled && (React__default.default.createElement(PrivacyStatement.PrivacyStatementMenuItem, { key: "privacy-statement", baseServicesUrl: platform.baseServicesUrl, platformEmail: platform?.platformEmail })),
|
|
78
78
|
...profileMenuItems,
|
|
@@ -82,7 +82,15 @@ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, cr
|
|
|
82
82
|
isSupportEnabled &&
|
|
83
83
|
(supportFlagCheck || isPartnerUser ? (React__default.default.createElement(SupportCenter.SupportCenterMenuItem, { key: "support-center", platformName: platform?.platformName, platformOrganization: platform?.platformOrganization, supportLink: supportLink, partnerEmailId: partnerEmailId, enablePartner: isPartnerUser, baseServicesUrl: platform.baseServicesUrl })) : (React__default.default.createElement(HeaderMenuItem.default, { key: "support-center", href: platform?.supportUrl, icon: React__default.default.createElement(icons.HelpDesk, null), kind: "external", text: "Support Center", type: "link" }))),
|
|
84
84
|
React__default.default.createElement(HeaderMenuItem.default, { key: "release-notes", href: platform?.releaseNotesUrl, icon: React__default.default.createElement(icons.CatalogPublish, null), "data-testid": "release-notes", kind: "app", text: "Release Notes", type: "link" }),
|
|
85
|
-
|
|
85
|
+
// <HeaderMenuItem
|
|
86
|
+
// key="legal-terms"
|
|
87
|
+
// href={platform?.legalTermsUrl as string}
|
|
88
|
+
// icon={<Policy />}
|
|
89
|
+
// data-testid="legal-terms"
|
|
90
|
+
// kind="app"
|
|
91
|
+
// text="Legal Terms"
|
|
92
|
+
// type="link"
|
|
93
|
+
// />,
|
|
86
94
|
React__default.default.createElement("span", { style: { borderBottom: "1px solid #b8c1c1" } }),
|
|
87
95
|
isCommunityEnabled && (React__default.default.createElement(HeaderMenuItem.default, { key: "community", href: platform?.communityUrl, icon: React__default.default.createElement(icons.Forum, null), kind: "external", text: "Community", type: "link" })),
|
|
88
96
|
isFeedbackEnabled && (React__default.default.createElement(Feedback.FeedbackMenuItem, { key: "feedback", platformName: platform?.platformName, platformOrganization: platform?.platformOrganization, sendIdeasUrl: sendIdeasUrl, sendBluePointsAwardUrl: sendBluePointsAwardUrl })),
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
IBM Confidential
|
|
5
|
+
694970X, 69497O0
|
|
6
|
+
© Copyright IBM Corp. 2022, 2024
|
|
7
|
+
*/
|
|
8
|
+
const TEAM_TYPES = {
|
|
9
|
+
ACCOUNT: "account",
|
|
10
|
+
PERSONAL: "personal",
|
|
11
|
+
PROJECT: "project",
|
|
12
|
+
STANDARD: "standard",
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
exports.TEAM_TYPES = TEAM_TYPES;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { useLocation, Link } from 'react-router-dom';
|
|
3
2
|
import cx from 'classnames';
|
|
4
3
|
import { SideNavLink, SideNav, SideNavItems, SideNavDivider, Tag } from '@carbon/react';
|
|
5
4
|
import TooltipHover from '../TooltipHover/TooltipHover.js';
|
|
@@ -25,11 +24,10 @@ const SideNavUrlKeys = {
|
|
|
25
24
|
Admin: "admin",
|
|
26
25
|
};
|
|
27
26
|
function AdvantageSideNav(props) {
|
|
28
|
-
const { app, appLink, agenticAppsPath = "", agentStudioPath = "", regionalTeam, enableChatButton = true, showChatButton = true, showSelectTeamPurpose = false, defaultAssistantLink, joinCreateTrigger, isLoading, isOpen, teams = [], triggerEvent, accounts = [], baseEnvUrl, className, navLinks, personalTeams = [], user, showChatTooltip, templateMeteringEvent, tooltipMessage, isLaunchpad = false, sideNavUrls, history, children, personalTeamEnabled, ...rest } = props;
|
|
27
|
+
const { app, appLink, agenticAppsPath = "", agentStudioPath = "", regionalTeam, enableChatButton = true, showChatButton = true, showSelectTeamPurpose = false, defaultAssistantLink, joinCreateTrigger, isLoading, isOpen, teams = [], triggerEvent, accounts = [], baseEnvUrl, className, navLinks, personalTeams = [], user, showChatTooltip, templateMeteringEvent, tooltipMessage, isLaunchpad = false, isbetaLaunchpad = false, sideNavUrls, history, children, personalTeamEnabled, ...rest } = props;
|
|
29
28
|
const [activeMenu, setActiveMenu] = React.useState(false);
|
|
30
29
|
const isMenuOpen = isOpen || activeMenu;
|
|
31
30
|
const windowLocation = window.location;
|
|
32
|
-
const location = useLocation();
|
|
33
31
|
const isPartnerUser = user?.type === USER_PLATFORM_ROLE.Partner;
|
|
34
32
|
const joinButtontitle = showSelectTeamPurpose ? "Create Team" : "Create or Join Team";
|
|
35
33
|
const hamburguerMenu = document.getElementById("header-sidenav-menu-button");
|
|
@@ -42,6 +40,7 @@ function AdvantageSideNav(props) {
|
|
|
42
40
|
const catalogNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Catalog)?.url;
|
|
43
41
|
const settingsLink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Settings)?.url;
|
|
44
42
|
const adminNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Admin)?.url;
|
|
43
|
+
const AssistantStudioLink = false;
|
|
45
44
|
// get current selected team
|
|
46
45
|
let teamSwitcherTeam = null;
|
|
47
46
|
if (Array.isArray(personalTeams) && personalTeams.length > 0) {
|
|
@@ -89,38 +88,6 @@ function AdvantageSideNav(props) {
|
|
|
89
88
|
destinationPath: toolsLink,
|
|
90
89
|
});
|
|
91
90
|
};
|
|
92
|
-
const handleAgentAssistantStudioClick = () => {
|
|
93
|
-
triggerEvent &&
|
|
94
|
-
triggerEvent({
|
|
95
|
-
action: "Clicked on SideNav Agent & Assistant Studio link",
|
|
96
|
-
category: "Sidenav",
|
|
97
|
-
destinationPath: agentAssistantStudioLink,
|
|
98
|
-
});
|
|
99
|
-
};
|
|
100
|
-
const handleAgentAssistantLibraryClick = () => {
|
|
101
|
-
triggerEvent &&
|
|
102
|
-
triggerEvent({
|
|
103
|
-
action: "Clicked on SideNav Agent & Assistant Library link",
|
|
104
|
-
category: "Sidenav",
|
|
105
|
-
destinationPath: agentAssistantLibraryLink,
|
|
106
|
-
});
|
|
107
|
-
};
|
|
108
|
-
const handleDocumentCollectionsClick = () => {
|
|
109
|
-
triggerEvent &&
|
|
110
|
-
triggerEvent({
|
|
111
|
-
action: "Clicked on SideNav Document Collections link",
|
|
112
|
-
category: "Sidenav",
|
|
113
|
-
destinationPath: documentCollectionsLink,
|
|
114
|
-
});
|
|
115
|
-
};
|
|
116
|
-
const handleSettingsClick = () => {
|
|
117
|
-
triggerEvent &&
|
|
118
|
-
triggerEvent({
|
|
119
|
-
action: "Clicked on SideNav Settings link",
|
|
120
|
-
category: "Sidenav",
|
|
121
|
-
destinationPath: settingsLink,
|
|
122
|
-
});
|
|
123
|
-
};
|
|
124
91
|
const handleChatClick = () => {
|
|
125
92
|
let redirectLink = chatLink
|
|
126
93
|
? chatLink
|
|
@@ -161,8 +128,17 @@ function AdvantageSideNav(props) {
|
|
|
161
128
|
}
|
|
162
129
|
setActiveMenu(false);
|
|
163
130
|
};
|
|
164
|
-
const chatSideNavLink = (React.createElement(SideNavLink, { "data-testid": "sidenav-chat-link", className: !enableChatButton ? `${prefix}--bmrg-advantage-sidenav__inactive-link` : "", disabled: Boolean(!enableChatButton), renderIcon: ChatBot, href: enableChatButton && chatLink, onClick: enableChatButton ? handleChatClick : (e) => e.preventDefault() }, "Chat"));
|
|
131
|
+
const chatSideNavLink = (React.createElement(SideNavLink, { "data-testid": "sidenav-chat-link", className: !enableChatButton ? `${prefix}--bmrg-advantage-sidenav__inactive-link` : "", isActive: windowLocation.href.includes(`${baseEnvUrl}/chat`), disabled: Boolean(!enableChatButton), renderIcon: ChatBot, href: enableChatButton && chatLink, onClick: enableChatButton ? handleChatClick : (e) => e.preventDefault() }, "Chat"));
|
|
165
132
|
const showSecondDivider = showChatButton || toolsLink || agentAssistantStudioLink || agentAssistantLibraryLink || documentCollectionsLink;
|
|
133
|
+
const navigateInternal = (url) => {
|
|
134
|
+
const target = new URL(url, window.location.origin);
|
|
135
|
+
if (target.origin === window.location.origin) {
|
|
136
|
+
history.push(target.pathname + target.search + target.hash);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
window.location.href = url;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
166
142
|
return (React.createElement(SideNav, { "aria-label": "sidenav-container", className: cx(`${prefix}--bmrg-advantage-sidenav-container`, className, {
|
|
167
143
|
"--closed": !isMenuOpen,
|
|
168
144
|
}), "data-testid": "sidenav-container", isRail: true, expanded: isMenuOpen, onMouseEnter: () => setActiveMenu(true), onMouseLeave: () => {
|
|
@@ -174,6 +150,11 @@ function AdvantageSideNav(props) {
|
|
|
174
150
|
handleLaunchpadLink(e);
|
|
175
151
|
history.push("/");
|
|
176
152
|
}
|
|
153
|
+
if (isbetaLaunchpad) {
|
|
154
|
+
console.log("beta launchpad home link clicked");
|
|
155
|
+
handleLaunchpadLink(e);
|
|
156
|
+
history.push("/launchpad");
|
|
157
|
+
}
|
|
177
158
|
handleHomeClick();
|
|
178
159
|
} }, "Home")) : null,
|
|
179
160
|
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(`/launchpad/teams/${teamSwitcherTeam.id}`), className: `${prefix}--bmrg-advantage-sidenav-team`, renderIcon: UserMultiple, href: `${baseEnvUrl}/${app}/teams/${teamSwitcherTeam.id}`, onClick: (e) => {
|
|
@@ -198,7 +179,7 @@ function AdvantageSideNav(props) {
|
|
|
198
179
|
} }, joinButtontitle)) : null,
|
|
199
180
|
React.createElement(SideNavDivider, null),
|
|
200
181
|
showChatButton &&
|
|
201
|
-
(showChatTooltip ? (React.createElement(TooltipHover, { className: `${prefix}--bmrg-side-nav__tooltip`, content: tooltipMessage, direction: "right" },
|
|
182
|
+
(showChatTooltip ? (React.createElement(TooltipHover, { className: `${prefix}--bmrg-side-nav__tooltip`, isActive: windowLocation.href.includes(`${baseEnvUrl}/chat`), content: tooltipMessage, direction: "right" },
|
|
202
183
|
React.createElement("span", null, chatSideNavLink))) : (chatSideNavLink)),
|
|
203
184
|
toolsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-tools-link", renderIcon: Api, href: toolsLink, onClick: (e) => {
|
|
204
185
|
handleToolsClick();
|
|
@@ -206,37 +187,27 @@ function AdvantageSideNav(props) {
|
|
|
206
187
|
React.createElement("div", { className: `${prefix}--bmrg-advantage-sidenav-item-tag` },
|
|
207
188
|
"Tools",
|
|
208
189
|
React.createElement(Tag, { size: "sm", title: "BETA", type: "high-contrast" }, "BETA")))) : null,
|
|
209
|
-
agentAssistantStudioLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
handleDocumentCollectionsClick();
|
|
222
|
-
} }, "Document Collections")) : null,
|
|
190
|
+
agentAssistantStudioLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
|
|
191
|
+
// isActive={
|
|
192
|
+
// (agentStudioPath && windowLocation.href.includes(`/launchpad${agentStudioPath}`)) ||
|
|
193
|
+
// (agenticAppsPath && windowLocation.href.includes(`/launchpad${agenticAppsPath}`))
|
|
194
|
+
// }
|
|
195
|
+
className: `${prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink), renderIcon: IntentRequestCreate }, "Agent & Assistant Studio")) : null,
|
|
196
|
+
agentAssistantLibraryLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: Folders,
|
|
197
|
+
//href={agentAssistantLibraryLink}
|
|
198
|
+
className: `${prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink) }, "Agent & Assistant Library")) : null,
|
|
199
|
+
documentCollectionsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-document-collections-link", renderIcon: DocumentMultiple_02,
|
|
200
|
+
//href={documentCollectionsLink}
|
|
201
|
+
className: `${prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink) }, "Document Collections")) : null,
|
|
223
202
|
showSecondDivider ? React.createElement(SideNavDivider, null) : null,
|
|
224
|
-
catalogNavlink ? (React.createElement(
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
// >
|
|
233
|
-
// Catalog
|
|
234
|
-
// </SideNavLink>
|
|
235
|
-
) : null,
|
|
236
|
-
settingsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: Settings, href: settingsLink, onClick: (e) => {
|
|
237
|
-
handleSettingsClick();
|
|
238
|
-
} }, "Settings")) : null,
|
|
239
|
-
adminNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-admin-link", href: adminNavlink, renderIcon: LicenseThirdParty }, "Admin")) : null),
|
|
203
|
+
catalogNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`), href: catalogNavlink, renderIcon: Catalog }, "Catalog")) : null,
|
|
204
|
+
settingsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: Settings,
|
|
205
|
+
// href={settingsLink}
|
|
206
|
+
className: `${prefix}--bmrg-advantage-sidenav__inactive-link` , disabled: Boolean(!AssistantStudioLink) }, "Settings")) : null,
|
|
207
|
+
adminNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-admin-link", renderIcon: LicenseThirdParty, onClick: (e) => {
|
|
208
|
+
e.preventDefault();
|
|
209
|
+
navigateInternal(adminNavlink);
|
|
210
|
+
} }, "Admin")) : null),
|
|
240
211
|
children ? (React.createElement(React.Fragment, null,
|
|
241
212
|
React.createElement(SideNavDivider, null),
|
|
242
213
|
children)) : null)));
|
|
@@ -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, userTeamsAssets, } = props;
|
|
57
|
+
const { analyticsHelpers, productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, createJoinTeamTrigger, enableTeamSwitcher = true, 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({
|
|
@@ -62,6 +62,7 @@ function Header(props) {
|
|
|
62
62
|
queryFn: resolver.query(userTeamsUrl, null),
|
|
63
63
|
enabled: !hasUserTeams && Boolean(baseServicesUrl),
|
|
64
64
|
});
|
|
65
|
+
const showTeamSwitcher = enableTeamSwitcher && Boolean(user);
|
|
65
66
|
return (React.createElement(React.Fragment, null,
|
|
66
67
|
React.createElement(Theme, { theme: carbonTheme },
|
|
67
68
|
React.createElement(Header$1, { "aria-label": "App navigation header", className: className },
|
|
@@ -72,7 +73,7 @@ function Header(props) {
|
|
|
72
73
|
? navLinks.map((link) => (React.createElement(HeaderMenuItem, { "aria-label": `Link for ${link.name}`, "data-testid": "header-menu-link", href: link.url, isCurrentPage: window?.location?.href && link.url ? window.location.href.startsWith(link.url) : false, key: link.name, target: link.isExternal ? "_blank" : undefined, rel: link.isExternal ? "noopener noreferrer" : undefined }, link.name)))
|
|
73
74
|
: null),
|
|
74
75
|
React.createElement(HeaderGlobalBar, null,
|
|
75
|
-
React.createElement(HeaderTeamSwitcher, { analyticsHelpers: analyticsHelpers, baseServicesUrl: baseServicesUrl, createJoinTeamTrigger: createJoinTeamTrigger, history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, menuAriaLabelRecord: MenuAriaLabelRecord.TeamSwitcher, menuButtonId: MenuButtonId.TeamSwitcher, menuListId: MenuListId.TeamSwitcher, navigationPlatform: platform, refetchUser: refetchUser, refetchNavigation: refetchNavigation, teamsQuery: teamsQuery, trackEvent: trackEvent, user: user, userTeams: userTeams }),
|
|
76
|
+
showTeamSwitcher ? (React.createElement(HeaderTeamSwitcher, { analyticsHelpers: analyticsHelpers, baseServicesUrl: baseServicesUrl, createJoinTeamTrigger: createJoinTeamTrigger, history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, menuAriaLabelRecord: MenuAriaLabelRecord.TeamSwitcher, menuButtonId: MenuButtonId.TeamSwitcher, menuListId: MenuListId.TeamSwitcher, navigationPlatform: platform, refetchUser: refetchUser, refetchNavigation: refetchNavigation, teamsQuery: teamsQuery, trackEvent: trackEvent, user: user, userTeams: userTeams })) : null,
|
|
76
77
|
props?.instanceSwitcherEnabled && (React.createElement(InstanceSwitcherMenu, { enabled: Boolean(props.instanceSwitcherEnabled), menuItems: platform?.instances })),
|
|
77
78
|
React.createElement(RequestsMenu, { baseEnvUrl: baseEnvUrl, enabled: Boolean(props.requestSummary), summary: props.requestSummary }),
|
|
78
79
|
React.createElement(NotificationsMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: Boolean(props.enableNotifications), countEnabled: Boolean(props.enableNotificationsCount) }),
|
|
@@ -7,6 +7,7 @@ import HeaderMenu$1 from './HeaderMenu.js';
|
|
|
7
7
|
import { resolver } from '../../config/servicesConfig.js';
|
|
8
8
|
import { prefix } from '../../internal/settings.js';
|
|
9
9
|
import { USER_PLATFORM_ROLE } from '../../constants/UserType.js';
|
|
10
|
+
import { TEAM_TYPES } from '../../constants/TeamTypes.js';
|
|
10
11
|
|
|
11
12
|
/*
|
|
12
13
|
IBM Confidential
|
|
@@ -43,6 +44,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
43
44
|
const showSelectTeamPurpose = navigationPlatform?.requireTeamPurpose;
|
|
44
45
|
const createTeamButtonText = showSelectTeamPurpose ? "Create Team" : "Create or Join Team";
|
|
45
46
|
const userTeamInstanceSwitcherDefault = user?.teamInstanceSwitcherDefault;
|
|
47
|
+
const hasUpdatedDefaultTeamRef = React.useRef(false);
|
|
46
48
|
const teamLink = ({ teamId }) => {
|
|
47
49
|
return `${navigationPlatform.baseEnvUrl}/launchpad/teams/${teamId}`;
|
|
48
50
|
};
|
|
@@ -81,7 +83,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
81
83
|
const userHasTeams = userHasPersonalTeam || userHasAccountTeams || userHasStandardTeams;
|
|
82
84
|
const handleSelectTeam = async ({ team }) => {
|
|
83
85
|
setSelectedTeam(team);
|
|
84
|
-
if (!userTeamInstanceSwitcherDefault
|
|
86
|
+
if (!userTeamInstanceSwitcherDefault &&
|
|
87
|
+
!hasUpdatedDefaultTeamRef.current) {
|
|
88
|
+
hasUpdatedDefaultTeamRef.current = true;
|
|
85
89
|
const body = {
|
|
86
90
|
teamInstanceSwitcherDefault: team.id,
|
|
87
91
|
};
|
|
@@ -89,6 +93,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
89
93
|
}
|
|
90
94
|
};
|
|
91
95
|
const handleNoTeamsToSelect = async () => {
|
|
96
|
+
if (hasUpdatedDefaultTeamRef.current)
|
|
97
|
+
return;
|
|
98
|
+
hasUpdatedDefaultTeamRef.current = true;
|
|
92
99
|
const body = {
|
|
93
100
|
teamInstanceSwitcherDefault: null,
|
|
94
101
|
};
|
|
@@ -138,6 +145,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
138
145
|
teamsQuery?.data?.personalTeam?.length === 0))) {
|
|
139
146
|
handleNoTeamsToSelect();
|
|
140
147
|
}
|
|
148
|
+
else if (userTeamInstanceSwitcherDefault === null) {
|
|
149
|
+
setSelectedTeam(null);
|
|
150
|
+
}
|
|
141
151
|
}, [
|
|
142
152
|
baseServicesUrl,
|
|
143
153
|
hasUserTeams,
|
|
@@ -214,33 +224,58 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
214
224
|
standardTeams = teamsQuery?.data?.standardTeams ?? [];
|
|
215
225
|
personalTeam = teamsQuery?.data?.personalTeam ?? [];
|
|
216
226
|
}
|
|
217
|
-
let
|
|
218
|
-
|
|
227
|
+
let newPersonalTeam = personalTeam.length > 0
|
|
228
|
+
? personalTeam.map((personalTeam) => ({
|
|
229
|
+
...personalTeam,
|
|
230
|
+
type: TEAM_TYPES.PERSONAL,
|
|
231
|
+
nameToDisplay: personalTeam.displayName ? personalTeam.displayName : personalTeam.name,
|
|
232
|
+
}))
|
|
233
|
+
: [];
|
|
234
|
+
let newAccountTeams = [];
|
|
235
|
+
let newStandardTeams = [];
|
|
219
236
|
if (accountTeams?.length > 0) {
|
|
220
|
-
|
|
237
|
+
newAccountTeams = accountTeams.map((team) => {
|
|
221
238
|
let newProjectTeams = [];
|
|
222
239
|
if (team.projectTeams && team.projectTeams.length > 0) {
|
|
223
|
-
newProjectTeams = team.projectTeams?.map((
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
240
|
+
newProjectTeams = team.projectTeams?.map((projectTeam) => {
|
|
241
|
+
return {
|
|
242
|
+
...projectTeam,
|
|
243
|
+
nameToDisplay: projectTeam.displayName ? projectTeam.displayName : projectTeam.name,
|
|
244
|
+
};
|
|
245
|
+
});
|
|
227
246
|
}
|
|
228
247
|
return {
|
|
229
248
|
...team,
|
|
230
249
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
250
|
+
type: TEAM_TYPES.ACCOUNT,
|
|
231
251
|
projectTeams: sortBy(newProjectTeams, ["nameToDisplay"]),
|
|
232
252
|
};
|
|
233
253
|
});
|
|
234
|
-
sortedAccountTeamsWithNamesToDisplay = sortBy(newAccountTeams, ["nameToDisplay"]);
|
|
235
254
|
}
|
|
236
255
|
if (standardTeams?.length > 0) {
|
|
237
|
-
|
|
256
|
+
newStandardTeams = standardTeams.map((team) => {
|
|
238
257
|
return {
|
|
239
258
|
...team,
|
|
259
|
+
type: TEAM_TYPES.STANDARD,
|
|
240
260
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
241
261
|
};
|
|
242
262
|
});
|
|
243
|
-
|
|
263
|
+
}
|
|
264
|
+
let allTeams = newPersonalTeam.concat(newAccountTeams, newStandardTeams);
|
|
265
|
+
const order = { [TEAM_TYPES.PERSONAL]: 1, [TEAM_TYPES.ACCOUNT]: 2, [TEAM_TYPES.STANDARD]: 3 };
|
|
266
|
+
allTeams = sortBy(allTeams, [(team) => order[team.type], "nameToDisplay"]);
|
|
267
|
+
if (selectedTeam) {
|
|
268
|
+
const selectedTeamIndex = allTeams.findIndex((team, index) => {
|
|
269
|
+
if (team.id === selectedTeam.id) {
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
else if (Array.isArray(team.projectTeams) && team.projectTeams?.length > 0) {
|
|
273
|
+
return team.projectTeams.some((projectTeam) => projectTeam.id === selectedTeam.id);
|
|
274
|
+
}
|
|
275
|
+
return false;
|
|
276
|
+
});
|
|
277
|
+
const [removedTeam] = allTeams.splice(selectedTeamIndex, 1);
|
|
278
|
+
allTeams.unshift(removedTeam);
|
|
244
279
|
}
|
|
245
280
|
let selectedTeamName = selectedTeam?.displayName
|
|
246
281
|
? selectedTeam.displayName
|
|
@@ -262,29 +297,22 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
262
297
|
React.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
|
|
263
298
|
React.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
|
|
264
299
|
React.createElement(AddAlt, { className: headerTeamSwitcherCreateTeamButtonIconClassname })))),
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
const isTeamSelected = team.id === selectedTeam?.id;
|
|
269
|
-
return (React.createElement("div", { key: team.id, id: `${team.id}-personal-menu-item-id` },
|
|
270
|
-
React.createElement(HeaderMenuItem, { key: team.id, id: `${team.id}-personal-menu-item`, "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
271
|
-
handleTeamClick({ team, type: "personal" });
|
|
272
|
-
},
|
|
273
|
-
// eslint-disable-next-line no-script-url
|
|
274
|
-
href: "javascript:void(0)", "data-testid": "header-team-switcher-menu-item" },
|
|
275
|
-
React.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
276
|
-
React.createElement("span", { title: teamName, className: headerDropdownMenuItemTextClassname }, teamName),
|
|
277
|
-
isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
278
|
-
})
|
|
279
|
-
: null,
|
|
280
|
-
accountTeams.length > 0
|
|
281
|
-
? sortedAccountTeamsWithNamesToDisplay.map((team) => {
|
|
300
|
+
allTeams.map((team) => {
|
|
301
|
+
const isTeamSelected = team.id === selectedTeam?.id;
|
|
302
|
+
if (team.type === TEAM_TYPES.ACCOUNT) {
|
|
282
303
|
const isSubmenuOpen = team.id === openAccountSubmenuId;
|
|
283
|
-
const
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
304
|
+
const projectTeams = team.projectTeams;
|
|
305
|
+
const existProjectTeams = Array.isArray(projectTeams) && projectTeams.length > 0;
|
|
306
|
+
let selectedProjectTeamIndex = -1;
|
|
307
|
+
if (existProjectTeams) {
|
|
308
|
+
selectedProjectTeamIndex = projectTeams.findIndex((team) => team.id === selectedTeam?.id);
|
|
309
|
+
}
|
|
310
|
+
const isProjectTeamSelected = selectedProjectTeamIndex >= 0;
|
|
287
311
|
const isMenuSelected = isTeamSelected || isProjectTeamSelected;
|
|
312
|
+
if (existProjectTeams && isProjectTeamSelected) {
|
|
313
|
+
const [removedTeam] = projectTeams.splice(selectedProjectTeamIndex, 1);
|
|
314
|
+
projectTeams.unshift(removedTeam);
|
|
315
|
+
}
|
|
288
316
|
return (React.createElement("div", { key: team.id, id: `${team.id}-account-menu` },
|
|
289
317
|
React.createElement(HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
|
|
290
318
|
// eslint-disable-next-line no-script-url
|
|
@@ -292,7 +320,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
292
320
|
React.createElement("div", { className: headerDropdownMenuItemAccountClassname },
|
|
293
321
|
React.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
|
|
294
322
|
React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
295
|
-
isMenuSelected ?
|
|
323
|
+
isMenuSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null),
|
|
296
324
|
React.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
|
|
297
325
|
React.createElement(GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
|
|
298
326
|
React.createElement(ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
|
|
@@ -304,9 +332,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
304
332
|
href: "javascript:void(0)" },
|
|
305
333
|
React.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
|
|
306
334
|
React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
|
|
307
|
-
isTeamSelected ?
|
|
308
|
-
|
|
309
|
-
?
|
|
335
|
+
isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)),
|
|
336
|
+
projectTeams && projectTeams.length > 0
|
|
337
|
+
? projectTeams.map((team) => {
|
|
310
338
|
const isTeamSelected = team.id === selectedTeam?.id;
|
|
311
339
|
return (React.createElement("div", { key: team.id, id: `${team.id}-project-menu-item` },
|
|
312
340
|
React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
@@ -319,22 +347,19 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
319
347
|
isTeamSelected ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
|
|
320
348
|
})
|
|
321
349
|
: null)));
|
|
322
|
-
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
? sortedStandardTeamsWithNamesToDisplay.map((team) => {
|
|
326
|
-
const isTeamSelected = team.id === selectedTeam?.id;
|
|
327
|
-
return (React.createElement("div", { key: team.id, id: `${team.id}-standard-menu-item` },
|
|
350
|
+
}
|
|
351
|
+
else {
|
|
352
|
+
return (React.createElement("div", { key: team.id, id: `${team.id}-${team.type}-menu-item` },
|
|
328
353
|
React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
329
|
-
handleTeamClick({ team, type: "
|
|
354
|
+
handleTeamClick({ team, type: team.type ?? "" });
|
|
330
355
|
}, "data-testid": "header-team-switcher-menu-item",
|
|
331
356
|
// eslint-disable-next-line no-script-url
|
|
332
357
|
href: "javascript:void(0)" },
|
|
333
358
|
React.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
334
359
|
React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
335
360
|
isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
336
|
-
}
|
|
337
|
-
|
|
361
|
+
}
|
|
362
|
+
})))));
|
|
338
363
|
}
|
|
339
364
|
return null;
|
|
340
365
|
}
|
|
@@ -25,12 +25,13 @@ function determineIfConfigIsDifferent(teams, initialTeams) {
|
|
|
25
25
|
}
|
|
26
26
|
return isConfigDifferent;
|
|
27
27
|
}
|
|
28
|
-
function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal }) {
|
|
28
|
+
function ProfileSettings({ baseServicesUrl, refetchUser, refetchUserTeams, refetchNavigation, src, userName, isOpen, closeModal, }) {
|
|
29
29
|
const queryClient = useQueryClient();
|
|
30
30
|
const [initialTeams, setInitialTeams] = useState([]);
|
|
31
31
|
const [teams, setTeams] = useState([]);
|
|
32
32
|
const userUrl = serviceUrl.getLaunchpadUser({ baseServicesUrl });
|
|
33
33
|
const profileUrl = serviceUrl.resourceUserProfile({ baseServicesUrl });
|
|
34
|
+
const userTeamsUrl = serviceUrl.getUserTeamsServices({ baseServicesUrl });
|
|
34
35
|
const { data: user, isLoading: userIsLoading, error: userError, } = useQuery({
|
|
35
36
|
queryKey: userUrl,
|
|
36
37
|
queryFn: resolver.query(userUrl),
|
|
@@ -39,6 +40,22 @@ function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal })
|
|
|
39
40
|
onSuccess: () => {
|
|
40
41
|
queryClient.invalidateQueries(userUrl);
|
|
41
42
|
queryClient.invalidateQueries(profileUrl);
|
|
43
|
+
queryClient.invalidateQueries(userTeamsUrl);
|
|
44
|
+
if (refetchUser) {
|
|
45
|
+
setTimeout(() => {
|
|
46
|
+
refetchUser();
|
|
47
|
+
}, 1000);
|
|
48
|
+
}
|
|
49
|
+
if (refetchUserTeams) {
|
|
50
|
+
setTimeout(() => {
|
|
51
|
+
refetchUserTeams();
|
|
52
|
+
}, 1000);
|
|
53
|
+
}
|
|
54
|
+
if (refetchNavigation) {
|
|
55
|
+
setTimeout(() => {
|
|
56
|
+
refetchNavigation();
|
|
57
|
+
}, 1000);
|
|
58
|
+
}
|
|
42
59
|
},
|
|
43
60
|
});
|
|
44
61
|
// Only disable when we have a user and we know that there aren' any lower level groups to manage
|
|
@@ -54,6 +71,7 @@ function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal })
|
|
|
54
71
|
}
|
|
55
72
|
async function handleSubmit() {
|
|
56
73
|
const body = {
|
|
74
|
+
teamInstanceSwitcherDefault: null,
|
|
57
75
|
lowerLevelGroups: teams,
|
|
58
76
|
};
|
|
59
77
|
try {
|
|
@@ -95,9 +113,9 @@ function ProfileSettings({ baseServicesUrl, src, userName, isOpen, closeModal })
|
|
|
95
113
|
return (React.createElement(ComposedModal, { "aria-label": "Profile Settings", className: `${prefix}--bmrg-profile-settings-container ${prefix}--bmrg-header-modal`, open: isOpen, onClose: handleClose, preventCloseOnClickOutside: true },
|
|
96
114
|
React.createElement(ModalHeader, { closeModal: handleClose, title: `User profile - ${userName}` }),
|
|
97
115
|
React.createElement(ModalBody, { style: { maxHeight: "31.5rem" } },
|
|
98
|
-
React.createElement("p", { className: `${prefix}--bmrg-profile-settings__title` }, "More user profile settings will be here eventually, but for now you can choose which Teams are shown in your
|
|
99
|
-
React.createElement("h2", { className: `${prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad
|
|
100
|
-
React.createElement("p", { className: `${prefix}--bmrg-profile-settings__description` }, "Choose Teams to show or hide in your Launchpad
|
|
116
|
+
React.createElement("p", { className: `${prefix}--bmrg-profile-settings__title` }, "More user profile settings will be here eventually, but for now you can choose which Teams are shown in your team switcher in Launchpad."),
|
|
117
|
+
React.createElement("h2", { className: `${prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad team switcher"),
|
|
118
|
+
React.createElement("p", { className: `${prefix}--bmrg-profile-settings__description` }, "Choose Teams to show or hide in your Launchpad team switcher and Catalog (useful for sensitive demos). You will not be able to access or view unchecked Teams from the team switcher, and cannot add items to them from Catalog."),
|
|
101
119
|
userIsLoading ? (React.createElement(StructuredListSkeleton, null)) : userError ? (React.createElement(Error, { style: { color: "#F2F4F8", padding: "1rem" } })) : teams?.length > 0 ? (React.createElement(StructuredListWrapper, { className: `${prefix}--bmrg-profile-settings-list` },
|
|
102
120
|
React.createElement(StructuredListHead, null,
|
|
103
121
|
React.createElement(StructuredListRow, { head: true },
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { QueryClientProvider } from 'react-query';
|
|
3
|
-
import { Email, Document, HelpDesk, CatalogPublish,
|
|
3
|
+
import { Email, Document, HelpDesk, CatalogPublish, Forum, ChatLaunch, Cognitive, Book } from '@carbon/react/icons';
|
|
4
4
|
import Header from '../Header/Header.js';
|
|
5
5
|
import HeaderMenuItem from '../Header/HeaderMenuItem.js';
|
|
6
6
|
import PrivacyRedirect from '../PrivacyRedirect/PrivacyRedirect.js';
|
|
@@ -18,11 +18,11 @@ 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, userTeamsAssets, enableIcaMacs, }) {
|
|
21
|
+
function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, createJoinTeamTrigger, enableTeamSwitcher = true, history, isLaunchpad = false, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, refetchUser, refetchUserTeams, 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 },
|
|
25
|
-
React.createElement(Header, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, productName: productName || platformName || "", user: user })));
|
|
25
|
+
React.createElement(Header, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, enableTeamSwitcher: enableTeamSwitcher, productName: productName || platformName || "", user: user })));
|
|
26
26
|
}
|
|
27
27
|
const { features, navigation, platform, platformMessage } = config;
|
|
28
28
|
const names = getProductAndPlatformNames({ productName, platformName, platform });
|
|
@@ -63,8 +63,8 @@ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, cr
|
|
|
63
63
|
*/
|
|
64
64
|
const isPrivacyStatementDisabled = renderPrivacyStatement === false || features?.["consent.enabled"] === false;
|
|
65
65
|
return (React.createElement(QueryClientProvider, { client: queryClient },
|
|
66
|
-
React.createElement(Header, { analyticsHelpers: analyticsHelpers, baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, createJoinTeamTrigger: createJoinTeamTrigger, enableAppSwitcher: isAppSwitcherEnabled, instanceSwitcherEnabled: instanceSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, leftPanel: leftPanel, navLinks: navigation, platform: platform, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
|
|
67
|
-
isUserEnabled && (React.createElement(ProfileSettingsMenuItem, { key: "profile-settings", baseServicesUrl: platform.baseServicesUrl, src: `${platform.baseServicesUrl}/users/image/${user?.email}`, userName: user?.displayName ?? user?.name })),
|
|
66
|
+
React.createElement(Header, { analyticsHelpers: analyticsHelpers, baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, createJoinTeamTrigger: createJoinTeamTrigger, enableAppSwitcher: isAppSwitcherEnabled, instanceSwitcherEnabled: instanceSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, enableTeamSwitcher: enableTeamSwitcher, leftPanel: leftPanel, navLinks: navigation, platform: platform, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
|
|
67
|
+
isUserEnabled && (React.createElement(ProfileSettingsMenuItem, { key: "profile-settings", baseServicesUrl: platform.baseServicesUrl, src: `${platform.baseServicesUrl}/users/image/${user?.email}`, userName: user?.displayName ?? user?.name, refetchUser: refetchUser, refetchUserTeams: refetchUserTeams, refetchNavigation: refetchNavigation })),
|
|
68
68
|
isSendMailEnabled && (React.createElement(HeaderMenuItem, { key: "email-preferences", href: `${platform.baseEnvUrl}/launchpad/email-preferences`, icon: React.createElement(Email, null), kind: "internal", text: "Email Preferences", type: "link" })),
|
|
69
69
|
!isPrivacyStatementDisabled && (React.createElement(PrivacyStatementMenuItem, { key: "privacy-statement", baseServicesUrl: platform.baseServicesUrl, platformEmail: platform?.platformEmail })),
|
|
70
70
|
...profileMenuItems,
|
|
@@ -74,7 +74,15 @@ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, cr
|
|
|
74
74
|
isSupportEnabled &&
|
|
75
75
|
(supportFlagCheck || isPartnerUser ? (React.createElement(SupportCenterMenuItem, { key: "support-center", platformName: platform?.platformName, platformOrganization: platform?.platformOrganization, supportLink: supportLink, partnerEmailId: partnerEmailId, enablePartner: isPartnerUser, baseServicesUrl: platform.baseServicesUrl })) : (React.createElement(HeaderMenuItem, { key: "support-center", href: platform?.supportUrl, icon: React.createElement(HelpDesk, null), kind: "external", text: "Support Center", type: "link" }))),
|
|
76
76
|
React.createElement(HeaderMenuItem, { key: "release-notes", href: platform?.releaseNotesUrl, icon: React.createElement(CatalogPublish, null), "data-testid": "release-notes", kind: "app", text: "Release Notes", type: "link" }),
|
|
77
|
-
|
|
77
|
+
// <HeaderMenuItem
|
|
78
|
+
// key="legal-terms"
|
|
79
|
+
// href={platform?.legalTermsUrl as string}
|
|
80
|
+
// icon={<Policy />}
|
|
81
|
+
// data-testid="legal-terms"
|
|
82
|
+
// kind="app"
|
|
83
|
+
// text="Legal Terms"
|
|
84
|
+
// type="link"
|
|
85
|
+
// />,
|
|
78
86
|
React.createElement("span", { style: { borderBottom: "1px solid #b8c1c1" } }),
|
|
79
87
|
isCommunityEnabled && (React.createElement(HeaderMenuItem, { key: "community", href: platform?.communityUrl, icon: React.createElement(Forum, null), kind: "external", text: "Community", type: "link" })),
|
|
80
88
|
isFeedbackEnabled && (React.createElement(FeedbackMenuItem, { key: "feedback", platformName: platform?.platformName, platformOrganization: platform?.platformOrganization, sendIdeasUrl: sendIdeasUrl, sendBluePointsAwardUrl: sendBluePointsAwardUrl })),
|
package/dist/types/index.d.ts
CHANGED
|
@@ -296,6 +296,7 @@ type Props$I = {
|
|
|
296
296
|
triggerEvent?: (props: any) => void;
|
|
297
297
|
user: User;
|
|
298
298
|
isLaunchpad?: boolean;
|
|
299
|
+
isbetaLaunchpad?: boolean;
|
|
299
300
|
userTeamsError?: boolean;
|
|
300
301
|
userTeamsLoading?: boolean;
|
|
301
302
|
history?: any;
|
|
@@ -366,6 +367,7 @@ type Props$G = {
|
|
|
366
367
|
className?: string;
|
|
367
368
|
createJoinTeamTrigger?: Function;
|
|
368
369
|
enableAppSwitcher?: boolean;
|
|
370
|
+
enableTeamSwitcher?: boolean;
|
|
369
371
|
instanceSwitcherEnabled?: boolean;
|
|
370
372
|
enableNotifications?: boolean;
|
|
371
373
|
enableNotificationsCount?: boolean;
|
|
@@ -1436,6 +1438,7 @@ type Props = {
|
|
|
1436
1438
|
};
|
|
1437
1439
|
platformMessage?: any;
|
|
1438
1440
|
};
|
|
1441
|
+
enableTeamSwitcher?: boolean;
|
|
1439
1442
|
history?: any;
|
|
1440
1443
|
isLaunchpad?: boolean;
|
|
1441
1444
|
isLoadingTeamSwitcher?: boolean;
|
|
@@ -1456,6 +1459,7 @@ type Props = {
|
|
|
1456
1459
|
component: React.ReactNode;
|
|
1457
1460
|
};
|
|
1458
1461
|
refetchUser?: Function;
|
|
1462
|
+
refetchUserTeams?: Function;
|
|
1459
1463
|
refetchNavigation?: Function;
|
|
1460
1464
|
skipToContentProps?: {
|
|
1461
1465
|
href?: string;
|
|
@@ -1481,6 +1485,6 @@ type Props = {
|
|
|
1481
1485
|
handleShowTutorial?: Function;
|
|
1482
1486
|
tutorialScreenToShow?: string;
|
|
1483
1487
|
};
|
|
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;
|
|
1488
|
+
declare function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme, config, createJoinTeamTrigger, enableTeamSwitcher, history, isLaunchpad, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems, supportMenuItems, renderPrivacyRedirect, renderPrivacyStatement, rightPanel, handleShowTutorial, refetchUser, refetchUserTeams, refetchNavigation, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, userTeamsAssets, enableIcaMacs, }: Props): React.JSX.Element;
|
|
1485
1489
|
|
|
1486
1490
|
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
|
@@ -4,7 +4,6 @@ IBM Confidential
|
|
|
4
4
|
© Copyright IBM Corp. 2022, 2024
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
-
|
|
8
7
|
@use "../../global/config" as *;
|
|
9
8
|
@use "../../global/utils";
|
|
10
9
|
@use "../../global/themes/shell-tokens" as shell;
|
|
@@ -29,6 +28,7 @@ IBM Confidential
|
|
|
29
28
|
|
|
30
29
|
.#{$prefix}--modal-content {
|
|
31
30
|
color: shell.$bmrg-theme-primary;
|
|
31
|
+
mask-image: none !important;
|
|
32
32
|
.#{$prefix}--bmrg-profile-settings__title {
|
|
33
33
|
color: shell.$bmrg-theme-primary;
|
|
34
34
|
font-size: utils.rem(14px);
|