@boomerang-io/carbon-addons-boomerang-react 4.6.21-beta.29 → 4.6.21-beta.30
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 +20 -7
- package/dist/cjs/components/Header/Header.js +3 -2
- package/dist/cjs/components/Header/HeaderTeamSwitcher.js +60 -44
- package/dist/cjs/components/ProfileSettings/ProfileSettings.js +3 -3
- package/dist/cjs/components/UIShell/UIShell.js +3 -3
- package/dist/cjs/constants/TeamTypes.js +15 -0
- package/dist/esm/components/AdvantageSideNav/AdvantageSideNav.js +21 -8
- package/dist/esm/components/Header/Header.js +3 -2
- package/dist/esm/components/Header/HeaderTeamSwitcher.js +60 -44
- package/dist/esm/components/ProfileSettings/ProfileSettings.js +3 -3
- package/dist/esm/components/UIShell/UIShell.js +3 -3
- package/dist/esm/constants/TeamTypes.js +13 -0
- package/dist/types/index.d.ts +4 -2
- package/package.json +1 -1
- package/scss/components/ProfileSettings/_profileSettings.scss +0 -1
|
@@ -47,10 +47,8 @@ function AdvantageSideNav(props) {
|
|
|
47
47
|
const agentAssistantLibraryLink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.AgentLibrary)?.url;
|
|
48
48
|
const documentCollectionsLink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.DocumentCollections)?.url;
|
|
49
49
|
const catalogNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Catalog)?.url;
|
|
50
|
-
sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Settings)?.url;
|
|
50
|
+
const settingsLink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Settings)?.url;
|
|
51
51
|
const adminNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Admin)?.url;
|
|
52
|
-
const isAgentStudioEnabled = true;
|
|
53
|
-
const isDocumentCollectionsEnabled = true;
|
|
54
52
|
// get current selected team
|
|
55
53
|
let teamSwitcherTeam = null;
|
|
56
54
|
if (Array.isArray(personalTeams) && personalTeams.length > 0) {
|
|
@@ -122,6 +120,14 @@ function AdvantageSideNav(props) {
|
|
|
122
120
|
destinationPath: documentCollectionsLink,
|
|
123
121
|
});
|
|
124
122
|
};
|
|
123
|
+
const handleSettingsClick = () => {
|
|
124
|
+
triggerEvent &&
|
|
125
|
+
triggerEvent({
|
|
126
|
+
action: "Clicked on SideNav Settings link",
|
|
127
|
+
category: "Sidenav",
|
|
128
|
+
destinationPath: settingsLink,
|
|
129
|
+
});
|
|
130
|
+
};
|
|
125
131
|
const handleChatClick = () => {
|
|
126
132
|
let redirectLink = chatLink
|
|
127
133
|
? chatLink
|
|
@@ -212,22 +218,29 @@ function AdvantageSideNav(props) {
|
|
|
212
218
|
React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-advantage-sidenav-item-tag` },
|
|
213
219
|
"Tools",
|
|
214
220
|
React__default.default.createElement(react.Tag, { size: "sm", title: "BETA", type: "high-contrast" }, "BETA")))) : null,
|
|
215
|
-
agentAssistantStudioLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
|
|
216
|
-
|
|
221
|
+
agentAssistantStudioLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
|
|
222
|
+
// isActive={
|
|
223
|
+
// (agentStudioPath && windowLocation.href.includes(`/launchpad${agentStudioPath}`)) ||
|
|
224
|
+
// (agenticAppsPath && windowLocation.href.includes(`/launchpad${agenticAppsPath}`))
|
|
225
|
+
// }
|
|
226
|
+
className: !enableChatButton ? `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` : "", disabled: Boolean(!enableChatButton), renderIcon: icons.IntentRequestCreate, href: agentAssistantStudioLink, onClick: (e) => {
|
|
217
227
|
if (isLaunchpad) {
|
|
218
228
|
handleLaunchpadLink(e);
|
|
219
229
|
history.push(agentStudioPath);
|
|
220
230
|
}
|
|
221
231
|
handleAgentAssistantStudioClick();
|
|
222
232
|
} }, "Agent & Assistant Studio")) : null,
|
|
223
|
-
agentAssistantLibraryLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: icons.Folders, href: agentAssistantLibraryLink,
|
|
233
|
+
agentAssistantLibraryLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: icons.Folders, href: agentAssistantLibraryLink, className: !enableChatButton ? `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` : "", disabled: Boolean(!enableChatButton), onClick: (e) => {
|
|
224
234
|
handleAgentAssistantLibraryClick();
|
|
225
235
|
} }, "Agent & Assistant Library")) : null,
|
|
226
|
-
documentCollectionsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-document-collections-link", renderIcon: icons.DocumentMultiple_02, href: documentCollectionsLink,
|
|
236
|
+
documentCollectionsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-document-collections-link", renderIcon: icons.DocumentMultiple_02, href: documentCollectionsLink, className: !enableChatButton ? `${settings.prefix}--bmrg-advantage-sidenav__inactive-link` : "", disabled: Boolean(!enableChatButton), onClick: (e) => {
|
|
227
237
|
handleDocumentCollectionsClick();
|
|
228
238
|
} }, "Document Collections")) : null,
|
|
229
239
|
showSecondDivider ? React__default.default.createElement(react.SideNavDivider, null) : null,
|
|
230
240
|
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,
|
|
241
|
+
settingsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: icons.Settings, href: settingsLink, onClick: (e) => {
|
|
242
|
+
handleSettingsClick();
|
|
243
|
+
} }, "Settings")) : null,
|
|
231
244
|
adminNavlink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-admin-link", href: adminNavlink, renderIcon: icons.LicenseThirdParty }, "Admin")) : null),
|
|
232
245
|
children ? (React__default.default.createElement(React__default.default.Fragment, null,
|
|
233
246
|
React__default.default.createElement(react.SideNavDivider, 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
|
|
|
@@ -226,33 +227,58 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
226
227
|
standardTeams = teamsQuery?.data?.standardTeams ?? [];
|
|
227
228
|
personalTeam = teamsQuery?.data?.personalTeam ?? [];
|
|
228
229
|
}
|
|
229
|
-
let
|
|
230
|
-
|
|
230
|
+
let newPersonalTeam = personalTeam.length > 0
|
|
231
|
+
? personalTeam.map((personalTeam) => ({
|
|
232
|
+
...personalTeam,
|
|
233
|
+
type: TeamTypes.TEAM_TYPES.PERSONAL,
|
|
234
|
+
nameToDisplay: personalTeam.displayName ? personalTeam.displayName : personalTeam.name,
|
|
235
|
+
}))
|
|
236
|
+
: [];
|
|
237
|
+
let newAccountTeams = [];
|
|
238
|
+
let newStandardTeams = [];
|
|
231
239
|
if (accountTeams?.length > 0) {
|
|
232
|
-
|
|
240
|
+
newAccountTeams = accountTeams.map((team) => {
|
|
233
241
|
let newProjectTeams = [];
|
|
234
242
|
if (team.projectTeams && team.projectTeams.length > 0) {
|
|
235
|
-
newProjectTeams = team.projectTeams?.map((
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
243
|
+
newProjectTeams = team.projectTeams?.map((projectTeam) => {
|
|
244
|
+
return {
|
|
245
|
+
...projectTeam,
|
|
246
|
+
nameToDisplay: projectTeam.displayName ? projectTeam.displayName : projectTeam.name,
|
|
247
|
+
};
|
|
248
|
+
});
|
|
239
249
|
}
|
|
240
250
|
return {
|
|
241
251
|
...team,
|
|
242
252
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
253
|
+
type: TeamTypes.TEAM_TYPES.ACCOUNT,
|
|
243
254
|
projectTeams: sortBy__default.default(newProjectTeams, ["nameToDisplay"]),
|
|
244
255
|
};
|
|
245
256
|
});
|
|
246
|
-
sortedAccountTeamsWithNamesToDisplay = sortBy__default.default(newAccountTeams, ["nameToDisplay"]);
|
|
247
257
|
}
|
|
248
258
|
if (standardTeams?.length > 0) {
|
|
249
|
-
|
|
259
|
+
newStandardTeams = standardTeams.map((team) => {
|
|
250
260
|
return {
|
|
251
261
|
...team,
|
|
262
|
+
type: TeamTypes.TEAM_TYPES.STANDARD,
|
|
252
263
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
253
264
|
};
|
|
254
265
|
});
|
|
255
|
-
|
|
266
|
+
}
|
|
267
|
+
let allTeams = newPersonalTeam.concat(newAccountTeams, newStandardTeams);
|
|
268
|
+
const order = { [TeamTypes.TEAM_TYPES.PERSONAL]: 1, [TeamTypes.TEAM_TYPES.ACCOUNT]: 2, [TeamTypes.TEAM_TYPES.STANDARD]: 3 };
|
|
269
|
+
allTeams = sortBy__default.default(allTeams, [(team) => order[team.type], "nameToDisplay"]);
|
|
270
|
+
if (selectedTeam) {
|
|
271
|
+
const selectedTeamIndex = allTeams.findIndex((team, index) => {
|
|
272
|
+
if (team.id === selectedTeam.id) {
|
|
273
|
+
return true;
|
|
274
|
+
}
|
|
275
|
+
else if (Array.isArray(team.projectTeams) && team.projectTeams?.length > 0) {
|
|
276
|
+
return team.projectTeams.some((projectTeam) => projectTeam.id === selectedTeam.id);
|
|
277
|
+
}
|
|
278
|
+
return false;
|
|
279
|
+
});
|
|
280
|
+
const [removedTeam] = allTeams.splice(selectedTeamIndex, 1);
|
|
281
|
+
allTeams.unshift(removedTeam);
|
|
256
282
|
}
|
|
257
283
|
let selectedTeamName = selectedTeam?.displayName
|
|
258
284
|
? selectedTeam.displayName
|
|
@@ -274,29 +300,22 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
274
300
|
React__default.default.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
|
|
275
301
|
React__default.default.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
|
|
276
302
|
React__default.default.createElement(icons.AddAlt, { className: headerTeamSwitcherCreateTeamButtonIconClassname })))),
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
const isTeamSelected = team.id === selectedTeam?.id;
|
|
281
|
-
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-personal-menu-item-id` },
|
|
282
|
-
React__default.default.createElement(react.HeaderMenuItem, { key: team.id, id: `${team.id}-personal-menu-item`, "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
283
|
-
handleTeamClick({ team, type: "personal" });
|
|
284
|
-
},
|
|
285
|
-
// eslint-disable-next-line no-script-url
|
|
286
|
-
href: "javascript:void(0)", "data-testid": "header-team-switcher-menu-item" },
|
|
287
|
-
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
288
|
-
React__default.default.createElement("span", { title: teamName, className: headerDropdownMenuItemTextClassname }, teamName),
|
|
289
|
-
isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
290
|
-
})
|
|
291
|
-
: null,
|
|
292
|
-
accountTeams.length > 0
|
|
293
|
-
? sortedAccountTeamsWithNamesToDisplay.map((team) => {
|
|
303
|
+
allTeams.map((team) => {
|
|
304
|
+
const isTeamSelected = team.id === selectedTeam?.id;
|
|
305
|
+
if (team.type === TeamTypes.TEAM_TYPES.ACCOUNT) {
|
|
294
306
|
const isSubmenuOpen = team.id === openAccountSubmenuId;
|
|
295
|
-
const
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
307
|
+
const projectTeams = team.projectTeams;
|
|
308
|
+
const existProjectTeams = Array.isArray(projectTeams) && projectTeams.length > 0;
|
|
309
|
+
let selectedProjectTeamIndex = -1;
|
|
310
|
+
if (existProjectTeams) {
|
|
311
|
+
selectedProjectTeamIndex = projectTeams.findIndex((team) => team.id === selectedTeam?.id);
|
|
312
|
+
}
|
|
313
|
+
const isProjectTeamSelected = selectedProjectTeamIndex >= 0;
|
|
299
314
|
const isMenuSelected = isTeamSelected || isProjectTeamSelected;
|
|
315
|
+
if (existProjectTeams && isProjectTeamSelected) {
|
|
316
|
+
const [removedTeam] = projectTeams.splice(selectedProjectTeamIndex, 1);
|
|
317
|
+
projectTeams.unshift(removedTeam);
|
|
318
|
+
}
|
|
300
319
|
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-account-menu` },
|
|
301
320
|
React__default.default.createElement(react.HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
|
|
302
321
|
// eslint-disable-next-line no-script-url
|
|
@@ -304,7 +323,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
304
323
|
React__default.default.createElement("div", { className: headerDropdownMenuItemAccountClassname },
|
|
305
324
|
React__default.default.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
|
|
306
325
|
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
307
|
-
isMenuSelected ?
|
|
326
|
+
isMenuSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null),
|
|
308
327
|
React__default.default.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
|
|
309
328
|
React__default.default.createElement(icons.GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
|
|
310
329
|
React__default.default.createElement(icons.ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
|
|
@@ -316,9 +335,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
316
335
|
href: "javascript:void(0)" },
|
|
317
336
|
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
|
|
318
337
|
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
|
|
319
|
-
isTeamSelected ?
|
|
320
|
-
|
|
321
|
-
?
|
|
338
|
+
isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)),
|
|
339
|
+
projectTeams && projectTeams.length > 0
|
|
340
|
+
? projectTeams.map((team) => {
|
|
322
341
|
const isTeamSelected = team.id === selectedTeam?.id;
|
|
323
342
|
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-project-menu-item` },
|
|
324
343
|
React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
@@ -331,22 +350,19 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
331
350
|
isTeamSelected ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
|
|
332
351
|
})
|
|
333
352
|
: null)));
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
? sortedStandardTeamsWithNamesToDisplay.map((team) => {
|
|
338
|
-
const isTeamSelected = team.id === selectedTeam?.id;
|
|
339
|
-
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-standard-menu-item` },
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-${team.type}-menu-item` },
|
|
340
356
|
React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
341
|
-
handleTeamClick({ team, type: "
|
|
357
|
+
handleTeamClick({ team, type: team.type ?? "" });
|
|
342
358
|
}, "data-testid": "header-team-switcher-menu-item",
|
|
343
359
|
// eslint-disable-next-line no-script-url
|
|
344
360
|
href: "javascript:void(0)" },
|
|
345
361
|
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
346
362
|
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
347
363
|
isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
348
|
-
}
|
|
349
|
-
|
|
364
|
+
}
|
|
365
|
+
})))));
|
|
350
366
|
}
|
|
351
367
|
return null;
|
|
352
368
|
}
|
|
@@ -122,9 +122,9 @@ function ProfileSettings({ baseServicesUrl, refetchUser, refetchUserTeams, refet
|
|
|
122
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 },
|
|
123
123
|
React__default.default.createElement(react.ModalHeader, { closeModal: handleClose, title: `User profile - ${userName}` }),
|
|
124
124
|
React__default.default.createElement(react.ModalBody, { style: { maxHeight: "31.5rem" } },
|
|
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
|
|
126
|
-
React__default.default.createElement("h2", { className: `${settings.prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad
|
|
127
|
-
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."),
|
|
128
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` },
|
|
129
129
|
React__default.default.createElement(react.StructuredListHead, null,
|
|
130
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, refetchUserTeams, 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,7 +71,7 @@ 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: [
|
|
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
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 })),
|
|
@@ -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;
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import cx from 'classnames';
|
|
3
3
|
import { SideNavLink, SideNav, SideNavItems, SideNavDivider, Tag } from '@carbon/react';
|
|
4
4
|
import TooltipHover from '../TooltipHover/TooltipHover.js';
|
|
5
|
-
import { ChatBot, Home, UserMultiple, AddAlt, Api, IntentRequestCreate, Folders, DocumentMultiple_02, Catalog, LicenseThirdParty } from '@carbon/react/icons';
|
|
5
|
+
import { ChatBot, Home, UserMultiple, AddAlt, Api, IntentRequestCreate, Folders, DocumentMultiple_02, Catalog, Settings, LicenseThirdParty } from '@carbon/react/icons';
|
|
6
6
|
import { USER_PLATFORM_ROLE } from '../../constants/UserType.js';
|
|
7
7
|
import { prefix } from '../../internal/settings.js';
|
|
8
8
|
|
|
@@ -38,10 +38,8 @@ function AdvantageSideNav(props) {
|
|
|
38
38
|
const agentAssistantLibraryLink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.AgentLibrary)?.url;
|
|
39
39
|
const documentCollectionsLink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.DocumentCollections)?.url;
|
|
40
40
|
const catalogNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Catalog)?.url;
|
|
41
|
-
sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Settings)?.url;
|
|
41
|
+
const settingsLink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Settings)?.url;
|
|
42
42
|
const adminNavlink = sideNavUrls?.find((sideNavUrl) => sideNavUrl.key === SideNavUrlKeys.Admin)?.url;
|
|
43
|
-
const isAgentStudioEnabled = true;
|
|
44
|
-
const isDocumentCollectionsEnabled = true;
|
|
45
43
|
// get current selected team
|
|
46
44
|
let teamSwitcherTeam = null;
|
|
47
45
|
if (Array.isArray(personalTeams) && personalTeams.length > 0) {
|
|
@@ -113,6 +111,14 @@ function AdvantageSideNav(props) {
|
|
|
113
111
|
destinationPath: documentCollectionsLink,
|
|
114
112
|
});
|
|
115
113
|
};
|
|
114
|
+
const handleSettingsClick = () => {
|
|
115
|
+
triggerEvent &&
|
|
116
|
+
triggerEvent({
|
|
117
|
+
action: "Clicked on SideNav Settings link",
|
|
118
|
+
category: "Sidenav",
|
|
119
|
+
destinationPath: settingsLink,
|
|
120
|
+
});
|
|
121
|
+
};
|
|
116
122
|
const handleChatClick = () => {
|
|
117
123
|
let redirectLink = chatLink
|
|
118
124
|
? chatLink
|
|
@@ -203,22 +209,29 @@ function AdvantageSideNav(props) {
|
|
|
203
209
|
React.createElement("div", { className: `${prefix}--bmrg-advantage-sidenav-item-tag` },
|
|
204
210
|
"Tools",
|
|
205
211
|
React.createElement(Tag, { size: "sm", title: "BETA", type: "high-contrast" }, "BETA")))) : null,
|
|
206
|
-
agentAssistantStudioLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
|
|
207
|
-
|
|
212
|
+
agentAssistantStudioLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link",
|
|
213
|
+
// isActive={
|
|
214
|
+
// (agentStudioPath && windowLocation.href.includes(`/launchpad${agentStudioPath}`)) ||
|
|
215
|
+
// (agenticAppsPath && windowLocation.href.includes(`/launchpad${agenticAppsPath}`))
|
|
216
|
+
// }
|
|
217
|
+
className: !enableChatButton ? `${prefix}--bmrg-advantage-sidenav__inactive-link` : "", disabled: Boolean(!enableChatButton), renderIcon: IntentRequestCreate, href: agentAssistantStudioLink, onClick: (e) => {
|
|
208
218
|
if (isLaunchpad) {
|
|
209
219
|
handleLaunchpadLink(e);
|
|
210
220
|
history.push(agentStudioPath);
|
|
211
221
|
}
|
|
212
222
|
handleAgentAssistantStudioClick();
|
|
213
223
|
} }, "Agent & Assistant Studio")) : null,
|
|
214
|
-
agentAssistantLibraryLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: Folders, href: agentAssistantLibraryLink,
|
|
224
|
+
agentAssistantLibraryLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: Folders, href: agentAssistantLibraryLink, className: !enableChatButton ? `${prefix}--bmrg-advantage-sidenav__inactive-link` : "", disabled: Boolean(!enableChatButton), onClick: (e) => {
|
|
215
225
|
handleAgentAssistantLibraryClick();
|
|
216
226
|
} }, "Agent & Assistant Library")) : null,
|
|
217
|
-
documentCollectionsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-document-collections-link", renderIcon: DocumentMultiple_02, href: documentCollectionsLink,
|
|
227
|
+
documentCollectionsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-document-collections-link", renderIcon: DocumentMultiple_02, href: documentCollectionsLink, className: !enableChatButton ? `${prefix}--bmrg-advantage-sidenav__inactive-link` : "", disabled: Boolean(!enableChatButton), onClick: (e) => {
|
|
218
228
|
handleDocumentCollectionsClick();
|
|
219
229
|
} }, "Document Collections")) : null,
|
|
220
230
|
showSecondDivider ? React.createElement(SideNavDivider, null) : null,
|
|
221
231
|
catalogNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`), href: catalogNavlink, renderIcon: Catalog }, "Catalog")) : null,
|
|
232
|
+
settingsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: Settings, href: settingsLink, onClick: (e) => {
|
|
233
|
+
handleSettingsClick();
|
|
234
|
+
} }, "Settings")) : null,
|
|
222
235
|
adminNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-admin-link", href: adminNavlink, renderIcon: LicenseThirdParty }, "Admin")) : null),
|
|
223
236
|
children ? (React.createElement(React.Fragment, null,
|
|
224
237
|
React.createElement(SideNavDivider, 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
|
|
@@ -217,33 +218,58 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
217
218
|
standardTeams = teamsQuery?.data?.standardTeams ?? [];
|
|
218
219
|
personalTeam = teamsQuery?.data?.personalTeam ?? [];
|
|
219
220
|
}
|
|
220
|
-
let
|
|
221
|
-
|
|
221
|
+
let newPersonalTeam = personalTeam.length > 0
|
|
222
|
+
? personalTeam.map((personalTeam) => ({
|
|
223
|
+
...personalTeam,
|
|
224
|
+
type: TEAM_TYPES.PERSONAL,
|
|
225
|
+
nameToDisplay: personalTeam.displayName ? personalTeam.displayName : personalTeam.name,
|
|
226
|
+
}))
|
|
227
|
+
: [];
|
|
228
|
+
let newAccountTeams = [];
|
|
229
|
+
let newStandardTeams = [];
|
|
222
230
|
if (accountTeams?.length > 0) {
|
|
223
|
-
|
|
231
|
+
newAccountTeams = accountTeams.map((team) => {
|
|
224
232
|
let newProjectTeams = [];
|
|
225
233
|
if (team.projectTeams && team.projectTeams.length > 0) {
|
|
226
|
-
newProjectTeams = team.projectTeams?.map((
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
234
|
+
newProjectTeams = team.projectTeams?.map((projectTeam) => {
|
|
235
|
+
return {
|
|
236
|
+
...projectTeam,
|
|
237
|
+
nameToDisplay: projectTeam.displayName ? projectTeam.displayName : projectTeam.name,
|
|
238
|
+
};
|
|
239
|
+
});
|
|
230
240
|
}
|
|
231
241
|
return {
|
|
232
242
|
...team,
|
|
233
243
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
244
|
+
type: TEAM_TYPES.ACCOUNT,
|
|
234
245
|
projectTeams: sortBy(newProjectTeams, ["nameToDisplay"]),
|
|
235
246
|
};
|
|
236
247
|
});
|
|
237
|
-
sortedAccountTeamsWithNamesToDisplay = sortBy(newAccountTeams, ["nameToDisplay"]);
|
|
238
248
|
}
|
|
239
249
|
if (standardTeams?.length > 0) {
|
|
240
|
-
|
|
250
|
+
newStandardTeams = standardTeams.map((team) => {
|
|
241
251
|
return {
|
|
242
252
|
...team,
|
|
253
|
+
type: TEAM_TYPES.STANDARD,
|
|
243
254
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
244
255
|
};
|
|
245
256
|
});
|
|
246
|
-
|
|
257
|
+
}
|
|
258
|
+
let allTeams = newPersonalTeam.concat(newAccountTeams, newStandardTeams);
|
|
259
|
+
const order = { [TEAM_TYPES.PERSONAL]: 1, [TEAM_TYPES.ACCOUNT]: 2, [TEAM_TYPES.STANDARD]: 3 };
|
|
260
|
+
allTeams = sortBy(allTeams, [(team) => order[team.type], "nameToDisplay"]);
|
|
261
|
+
if (selectedTeam) {
|
|
262
|
+
const selectedTeamIndex = allTeams.findIndex((team, index) => {
|
|
263
|
+
if (team.id === selectedTeam.id) {
|
|
264
|
+
return true;
|
|
265
|
+
}
|
|
266
|
+
else if (Array.isArray(team.projectTeams) && team.projectTeams?.length > 0) {
|
|
267
|
+
return team.projectTeams.some((projectTeam) => projectTeam.id === selectedTeam.id);
|
|
268
|
+
}
|
|
269
|
+
return false;
|
|
270
|
+
});
|
|
271
|
+
const [removedTeam] = allTeams.splice(selectedTeamIndex, 1);
|
|
272
|
+
allTeams.unshift(removedTeam);
|
|
247
273
|
}
|
|
248
274
|
let selectedTeamName = selectedTeam?.displayName
|
|
249
275
|
? selectedTeam.displayName
|
|
@@ -265,29 +291,22 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
265
291
|
React.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
|
|
266
292
|
React.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
|
|
267
293
|
React.createElement(AddAlt, { className: headerTeamSwitcherCreateTeamButtonIconClassname })))),
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
const isTeamSelected = team.id === selectedTeam?.id;
|
|
272
|
-
return (React.createElement("div", { key: team.id, id: `${team.id}-personal-menu-item-id` },
|
|
273
|
-
React.createElement(HeaderMenuItem, { key: team.id, id: `${team.id}-personal-menu-item`, "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
274
|
-
handleTeamClick({ team, type: "personal" });
|
|
275
|
-
},
|
|
276
|
-
// eslint-disable-next-line no-script-url
|
|
277
|
-
href: "javascript:void(0)", "data-testid": "header-team-switcher-menu-item" },
|
|
278
|
-
React.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
279
|
-
React.createElement("span", { title: teamName, className: headerDropdownMenuItemTextClassname }, teamName),
|
|
280
|
-
isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
281
|
-
})
|
|
282
|
-
: null,
|
|
283
|
-
accountTeams.length > 0
|
|
284
|
-
? sortedAccountTeamsWithNamesToDisplay.map((team) => {
|
|
294
|
+
allTeams.map((team) => {
|
|
295
|
+
const isTeamSelected = team.id === selectedTeam?.id;
|
|
296
|
+
if (team.type === TEAM_TYPES.ACCOUNT) {
|
|
285
297
|
const isSubmenuOpen = team.id === openAccountSubmenuId;
|
|
286
|
-
const
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
298
|
+
const projectTeams = team.projectTeams;
|
|
299
|
+
const existProjectTeams = Array.isArray(projectTeams) && projectTeams.length > 0;
|
|
300
|
+
let selectedProjectTeamIndex = -1;
|
|
301
|
+
if (existProjectTeams) {
|
|
302
|
+
selectedProjectTeamIndex = projectTeams.findIndex((team) => team.id === selectedTeam?.id);
|
|
303
|
+
}
|
|
304
|
+
const isProjectTeamSelected = selectedProjectTeamIndex >= 0;
|
|
290
305
|
const isMenuSelected = isTeamSelected || isProjectTeamSelected;
|
|
306
|
+
if (existProjectTeams && isProjectTeamSelected) {
|
|
307
|
+
const [removedTeam] = projectTeams.splice(selectedProjectTeamIndex, 1);
|
|
308
|
+
projectTeams.unshift(removedTeam);
|
|
309
|
+
}
|
|
291
310
|
return (React.createElement("div", { key: team.id, id: `${team.id}-account-menu` },
|
|
292
311
|
React.createElement(HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
|
|
293
312
|
// eslint-disable-next-line no-script-url
|
|
@@ -295,7 +314,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
295
314
|
React.createElement("div", { className: headerDropdownMenuItemAccountClassname },
|
|
296
315
|
React.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
|
|
297
316
|
React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
298
|
-
isMenuSelected ?
|
|
317
|
+
isMenuSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null),
|
|
299
318
|
React.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
|
|
300
319
|
React.createElement(GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
|
|
301
320
|
React.createElement(ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
|
|
@@ -307,9 +326,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
307
326
|
href: "javascript:void(0)" },
|
|
308
327
|
React.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
|
|
309
328
|
React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
|
|
310
|
-
isTeamSelected ?
|
|
311
|
-
|
|
312
|
-
?
|
|
329
|
+
isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)),
|
|
330
|
+
projectTeams && projectTeams.length > 0
|
|
331
|
+
? projectTeams.map((team) => {
|
|
313
332
|
const isTeamSelected = team.id === selectedTeam?.id;
|
|
314
333
|
return (React.createElement("div", { key: team.id, id: `${team.id}-project-menu-item` },
|
|
315
334
|
React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
@@ -322,22 +341,19 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
322
341
|
isTeamSelected ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
|
|
323
342
|
})
|
|
324
343
|
: null)));
|
|
325
|
-
}
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
? sortedStandardTeamsWithNamesToDisplay.map((team) => {
|
|
329
|
-
const isTeamSelected = team.id === selectedTeam?.id;
|
|
330
|
-
return (React.createElement("div", { key: team.id, id: `${team.id}-standard-menu-item` },
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
return (React.createElement("div", { key: team.id, id: `${team.id}-${team.type}-menu-item` },
|
|
331
347
|
React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
332
|
-
handleTeamClick({ team, type: "
|
|
348
|
+
handleTeamClick({ team, type: team.type ?? "" });
|
|
333
349
|
}, "data-testid": "header-team-switcher-menu-item",
|
|
334
350
|
// eslint-disable-next-line no-script-url
|
|
335
351
|
href: "javascript:void(0)" },
|
|
336
352
|
React.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
337
353
|
React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
338
354
|
isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
339
|
-
}
|
|
340
|
-
|
|
355
|
+
}
|
|
356
|
+
})))));
|
|
341
357
|
}
|
|
342
358
|
return null;
|
|
343
359
|
}
|
|
@@ -113,9 +113,9 @@ function ProfileSettings({ baseServicesUrl, refetchUser, refetchUserTeams, refet
|
|
|
113
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 },
|
|
114
114
|
React.createElement(ModalHeader, { closeModal: handleClose, title: `User profile - ${userName}` }),
|
|
115
115
|
React.createElement(ModalBody, { style: { maxHeight: "31.5rem" } },
|
|
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
|
|
117
|
-
React.createElement("h2", { className: `${prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad
|
|
118
|
-
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."),
|
|
119
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` },
|
|
120
120
|
React.createElement(StructuredListHead, null,
|
|
121
121
|
React.createElement(StructuredListRow, { head: true },
|
|
@@ -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, refetchUserTeams, 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,7 +63,7 @@ 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: [
|
|
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
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 })),
|
package/dist/types/index.d.ts
CHANGED
|
@@ -367,6 +367,7 @@ type Props$G = {
|
|
|
367
367
|
className?: string;
|
|
368
368
|
createJoinTeamTrigger?: Function;
|
|
369
369
|
enableAppSwitcher?: boolean;
|
|
370
|
+
enableTeamSwitcher?: boolean;
|
|
370
371
|
instanceSwitcherEnabled?: boolean;
|
|
371
372
|
enableNotifications?: boolean;
|
|
372
373
|
enableNotificationsCount?: boolean;
|
|
@@ -1437,6 +1438,7 @@ type Props = {
|
|
|
1437
1438
|
};
|
|
1438
1439
|
platformMessage?: any;
|
|
1439
1440
|
};
|
|
1441
|
+
enableTeamSwitcher?: boolean;
|
|
1440
1442
|
history?: any;
|
|
1441
1443
|
isLaunchpad?: boolean;
|
|
1442
1444
|
isLoadingTeamSwitcher?: boolean;
|
|
@@ -1457,8 +1459,8 @@ type Props = {
|
|
|
1457
1459
|
component: React.ReactNode;
|
|
1458
1460
|
};
|
|
1459
1461
|
refetchUser?: Function;
|
|
1460
|
-
refetchNavigation?: Function;
|
|
1461
1462
|
refetchUserTeams?: Function;
|
|
1463
|
+
refetchNavigation?: Function;
|
|
1462
1464
|
skipToContentProps?: {
|
|
1463
1465
|
href?: string;
|
|
1464
1466
|
children?: string;
|
|
@@ -1483,6 +1485,6 @@ type Props = {
|
|
|
1483
1485
|
handleShowTutorial?: Function;
|
|
1484
1486
|
tutorialScreenToShow?: string;
|
|
1485
1487
|
};
|
|
1486
|
-
declare function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme, config, createJoinTeamTrigger, 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;
|
|
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;
|
|
1487
1489
|
|
|
1488
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