@boomerang-io/carbon-addons-boomerang-react 4.6.21-beta.3 → 4.6.21-beta.32
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 +7 -4
- package/dist/cjs/components/Header/Header.js +3 -2
- package/dist/cjs/components/Header/HeaderTeamSwitcher.js +71 -44
- 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 +7 -4
- package/dist/esm/components/Header/Header.js +3 -2
- package/dist/esm/components/Header/HeaderTeamSwitcher.js +71 -44
- 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
|
@@ -33,7 +33,7 @@ const SideNavUrlKeys = {
|
|
|
33
33
|
Admin: "admin",
|
|
34
34
|
};
|
|
35
35
|
function AdvantageSideNav(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, 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;
|
|
37
37
|
const [activeMenu, setActiveMenu] = React__default.default.useState(false);
|
|
38
38
|
const isMenuOpen = isOpen || activeMenu;
|
|
39
39
|
const windowLocation = window.location;
|
|
@@ -181,6 +181,11 @@ function AdvantageSideNav(props) {
|
|
|
181
181
|
handleLaunchpadLink(e);
|
|
182
182
|
history.push("/");
|
|
183
183
|
}
|
|
184
|
+
if (isbetaLaunchpad) {
|
|
185
|
+
console.log("beta launchpad home link clicked");
|
|
186
|
+
handleLaunchpadLink(e);
|
|
187
|
+
history.push("/launchpad");
|
|
188
|
+
}
|
|
184
189
|
handleHomeClick();
|
|
185
190
|
} }, "Home")) : null,
|
|
186
191
|
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) => {
|
|
@@ -228,9 +233,7 @@ function AdvantageSideNav(props) {
|
|
|
228
233
|
handleDocumentCollectionsClick();
|
|
229
234
|
} }, "Document Collections")) : null,
|
|
230
235
|
showSecondDivider ? React__default.default.createElement(react.SideNavDivider, null) : null,
|
|
231
|
-
catalogNavlink ? (React__default.default.createElement(react.SideNavLink, {
|
|
232
|
-
// href={catalogNavlink}
|
|
233
|
-
renderIcon: icons.Catalog }, "Catalog")) : null,
|
|
236
|
+
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,
|
|
234
237
|
settingsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: icons.Settings, href: settingsLink, onClick: (e) => {
|
|
235
238
|
handleSettingsClick();
|
|
236
239
|
} }, "Settings")) : 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
|
+
console.log("userTeamInstanceSwitcherDefault", userTeamInstanceSwitcherDefault);
|
|
55
57
|
const teamLink = ({ teamId }) => {
|
|
56
58
|
return `${navigationPlatform.baseEnvUrl}/launchpad/teams/${teamId}`;
|
|
57
59
|
};
|
|
@@ -89,11 +91,13 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
89
91
|
const userHasStandardTeams = standardTeams.length > 0;
|
|
90
92
|
const userHasTeams = userHasPersonalTeam || userHasAccountTeams || userHasStandardTeams;
|
|
91
93
|
const handleSelectTeam = async ({ team }) => {
|
|
94
|
+
console.log("handle select team", team);
|
|
92
95
|
setSelectedTeam(team);
|
|
93
96
|
if (!userTeamInstanceSwitcherDefault) {
|
|
94
97
|
const body = {
|
|
95
98
|
teamInstanceSwitcherDefault: team.id,
|
|
96
99
|
};
|
|
100
|
+
console.log("profile patch called", team);
|
|
97
101
|
await mutateUserProfile({ baseServicesUrl, body });
|
|
98
102
|
}
|
|
99
103
|
};
|
|
@@ -101,23 +105,27 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
101
105
|
const body = {
|
|
102
106
|
teamInstanceSwitcherDefault: null,
|
|
103
107
|
};
|
|
108
|
+
console.log("patch called inside handleNoTeamsToSelect");
|
|
104
109
|
await mutateUserProfile({ baseServicesUrl, body });
|
|
105
110
|
};
|
|
106
111
|
if (userHasTeams) {
|
|
107
112
|
if (!userTeamInstanceSwitcherDefault) {
|
|
108
113
|
if (userHasPersonalTeam) {
|
|
114
|
+
console.log("userHasPersonalTeam", personalTeam[0]);
|
|
109
115
|
handleSelectTeam({ team: personalTeam[0] });
|
|
110
116
|
}
|
|
111
117
|
else if (userHasAccountTeams) {
|
|
112
118
|
const sortedAccounts = sortBy__default.default(accountTeams, [
|
|
113
119
|
(account) => (account.displayName ? account.displayName : account.name),
|
|
114
120
|
]);
|
|
121
|
+
console.log("userHasAccountTeams", sortedAccounts[0]);
|
|
115
122
|
handleSelectTeam({ team: sortedAccounts[0] });
|
|
116
123
|
}
|
|
117
124
|
else if (userHasStandardTeams) {
|
|
118
125
|
const sortedStandardTeams = sortBy__default.default(standardTeams, [
|
|
119
126
|
(standardTeam) => (standardTeam.displayName ? standardTeam.displayName : standardTeam.name),
|
|
120
127
|
]);
|
|
128
|
+
console.log("userHasStandardTeams", sortedStandardTeams[0]);
|
|
121
129
|
handleSelectTeam({ team: sortedStandardTeams[0] });
|
|
122
130
|
}
|
|
123
131
|
}
|
|
@@ -132,6 +140,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
132
140
|
}
|
|
133
141
|
const allTeams = personalTeam.concat(standardTeams, accountTeams, allProjectTeams);
|
|
134
142
|
const newSelectedTeam = allTeams.find((team) => team.id === userTeamInstanceSwitcherDefault);
|
|
143
|
+
console.log("newSelectedTeam", newSelectedTeam);
|
|
135
144
|
handleSelectTeam({ team: newSelectedTeam });
|
|
136
145
|
}
|
|
137
146
|
// if teams data loaded but there are no teams
|
|
@@ -147,6 +156,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
147
156
|
teamsQuery?.data?.personalTeam?.length === 0))) {
|
|
148
157
|
handleNoTeamsToSelect();
|
|
149
158
|
}
|
|
159
|
+
else if (userTeamInstanceSwitcherDefault === null) {
|
|
160
|
+
setSelectedTeam(null);
|
|
161
|
+
}
|
|
150
162
|
}, [
|
|
151
163
|
baseServicesUrl,
|
|
152
164
|
hasUserTeams,
|
|
@@ -223,33 +235,58 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
223
235
|
standardTeams = teamsQuery?.data?.standardTeams ?? [];
|
|
224
236
|
personalTeam = teamsQuery?.data?.personalTeam ?? [];
|
|
225
237
|
}
|
|
226
|
-
let
|
|
227
|
-
|
|
238
|
+
let newPersonalTeam = personalTeam.length > 0
|
|
239
|
+
? personalTeam.map((personalTeam) => ({
|
|
240
|
+
...personalTeam,
|
|
241
|
+
type: TeamTypes.TEAM_TYPES.PERSONAL,
|
|
242
|
+
nameToDisplay: personalTeam.displayName ? personalTeam.displayName : personalTeam.name,
|
|
243
|
+
}))
|
|
244
|
+
: [];
|
|
245
|
+
let newAccountTeams = [];
|
|
246
|
+
let newStandardTeams = [];
|
|
228
247
|
if (accountTeams?.length > 0) {
|
|
229
|
-
|
|
248
|
+
newAccountTeams = accountTeams.map((team) => {
|
|
230
249
|
let newProjectTeams = [];
|
|
231
250
|
if (team.projectTeams && team.projectTeams.length > 0) {
|
|
232
|
-
newProjectTeams = team.projectTeams?.map((
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
251
|
+
newProjectTeams = team.projectTeams?.map((projectTeam) => {
|
|
252
|
+
return {
|
|
253
|
+
...projectTeam,
|
|
254
|
+
nameToDisplay: projectTeam.displayName ? projectTeam.displayName : projectTeam.name,
|
|
255
|
+
};
|
|
256
|
+
});
|
|
236
257
|
}
|
|
237
258
|
return {
|
|
238
259
|
...team,
|
|
239
260
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
261
|
+
type: TeamTypes.TEAM_TYPES.ACCOUNT,
|
|
240
262
|
projectTeams: sortBy__default.default(newProjectTeams, ["nameToDisplay"]),
|
|
241
263
|
};
|
|
242
264
|
});
|
|
243
|
-
sortedAccountTeamsWithNamesToDisplay = sortBy__default.default(newAccountTeams, ["nameToDisplay"]);
|
|
244
265
|
}
|
|
245
266
|
if (standardTeams?.length > 0) {
|
|
246
|
-
|
|
267
|
+
newStandardTeams = standardTeams.map((team) => {
|
|
247
268
|
return {
|
|
248
269
|
...team,
|
|
270
|
+
type: TeamTypes.TEAM_TYPES.STANDARD,
|
|
249
271
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
250
272
|
};
|
|
251
273
|
});
|
|
252
|
-
|
|
274
|
+
}
|
|
275
|
+
let allTeams = newPersonalTeam.concat(newAccountTeams, newStandardTeams);
|
|
276
|
+
const order = { [TeamTypes.TEAM_TYPES.PERSONAL]: 1, [TeamTypes.TEAM_TYPES.ACCOUNT]: 2, [TeamTypes.TEAM_TYPES.STANDARD]: 3 };
|
|
277
|
+
allTeams = sortBy__default.default(allTeams, [(team) => order[team.type], "nameToDisplay"]);
|
|
278
|
+
if (selectedTeam) {
|
|
279
|
+
const selectedTeamIndex = allTeams.findIndex((team, index) => {
|
|
280
|
+
if (team.id === selectedTeam.id) {
|
|
281
|
+
return true;
|
|
282
|
+
}
|
|
283
|
+
else if (Array.isArray(team.projectTeams) && team.projectTeams?.length > 0) {
|
|
284
|
+
return team.projectTeams.some((projectTeam) => projectTeam.id === selectedTeam.id);
|
|
285
|
+
}
|
|
286
|
+
return false;
|
|
287
|
+
});
|
|
288
|
+
const [removedTeam] = allTeams.splice(selectedTeamIndex, 1);
|
|
289
|
+
allTeams.unshift(removedTeam);
|
|
253
290
|
}
|
|
254
291
|
let selectedTeamName = selectedTeam?.displayName
|
|
255
292
|
? selectedTeam.displayName
|
|
@@ -271,29 +308,22 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
271
308
|
React__default.default.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
|
|
272
309
|
React__default.default.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
|
|
273
310
|
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) => {
|
|
311
|
+
allTeams.map((team) => {
|
|
312
|
+
const isTeamSelected = team.id === selectedTeam?.id;
|
|
313
|
+
if (team.type === TeamTypes.TEAM_TYPES.ACCOUNT) {
|
|
291
314
|
const isSubmenuOpen = team.id === openAccountSubmenuId;
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
315
|
+
const projectTeams = team.projectTeams;
|
|
316
|
+
const existProjectTeams = Array.isArray(projectTeams) && projectTeams.length > 0;
|
|
317
|
+
let selectedProjectTeamIndex = -1;
|
|
318
|
+
if (existProjectTeams) {
|
|
319
|
+
selectedProjectTeamIndex = projectTeams.findIndex((team) => team.id === selectedTeam?.id);
|
|
320
|
+
}
|
|
321
|
+
const isProjectTeamSelected = selectedProjectTeamIndex >= 0;
|
|
296
322
|
const isMenuSelected = isTeamSelected || isProjectTeamSelected;
|
|
323
|
+
if (existProjectTeams && isProjectTeamSelected) {
|
|
324
|
+
const [removedTeam] = projectTeams.splice(selectedProjectTeamIndex, 1);
|
|
325
|
+
projectTeams.unshift(removedTeam);
|
|
326
|
+
}
|
|
297
327
|
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-account-menu` },
|
|
298
328
|
React__default.default.createElement(react.HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
|
|
299
329
|
// eslint-disable-next-line no-script-url
|
|
@@ -301,7 +331,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
301
331
|
React__default.default.createElement("div", { className: headerDropdownMenuItemAccountClassname },
|
|
302
332
|
React__default.default.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
|
|
303
333
|
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
304
|
-
isMenuSelected ?
|
|
334
|
+
isMenuSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null),
|
|
305
335
|
React__default.default.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
|
|
306
336
|
React__default.default.createElement(icons.GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
|
|
307
337
|
React__default.default.createElement(icons.ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
|
|
@@ -313,9 +343,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
313
343
|
href: "javascript:void(0)" },
|
|
314
344
|
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
|
|
315
345
|
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
|
|
316
|
-
isTeamSelected ?
|
|
317
|
-
|
|
318
|
-
?
|
|
346
|
+
isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)),
|
|
347
|
+
projectTeams && projectTeams.length > 0
|
|
348
|
+
? projectTeams.map((team) => {
|
|
319
349
|
const isTeamSelected = team.id === selectedTeam?.id;
|
|
320
350
|
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-project-menu-item` },
|
|
321
351
|
React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
@@ -328,22 +358,19 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
328
358
|
isTeamSelected ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
|
|
329
359
|
})
|
|
330
360
|
: 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` },
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-${team.type}-menu-item` },
|
|
337
364
|
React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
338
|
-
handleTeamClick({ team, type: "
|
|
365
|
+
handleTeamClick({ team, type: team.type ?? "" });
|
|
339
366
|
}, "data-testid": "header-team-switcher-menu-item",
|
|
340
367
|
// eslint-disable-next-line no-script-url
|
|
341
368
|
href: "javascript:void(0)" },
|
|
342
369
|
React__default.default.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
343
370
|
React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
344
371
|
isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
345
|
-
}
|
|
346
|
-
|
|
372
|
+
}
|
|
373
|
+
})))));
|
|
347
374
|
}
|
|
348
375
|
return null;
|
|
349
376
|
}
|
|
@@ -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;
|
|
@@ -24,7 +24,7 @@ const SideNavUrlKeys = {
|
|
|
24
24
|
Admin: "admin",
|
|
25
25
|
};
|
|
26
26
|
function AdvantageSideNav(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, 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;
|
|
28
28
|
const [activeMenu, setActiveMenu] = React.useState(false);
|
|
29
29
|
const isMenuOpen = isOpen || activeMenu;
|
|
30
30
|
const windowLocation = window.location;
|
|
@@ -172,6 +172,11 @@ function AdvantageSideNav(props) {
|
|
|
172
172
|
handleLaunchpadLink(e);
|
|
173
173
|
history.push("/");
|
|
174
174
|
}
|
|
175
|
+
if (isbetaLaunchpad) {
|
|
176
|
+
console.log("beta launchpad home link clicked");
|
|
177
|
+
handleLaunchpadLink(e);
|
|
178
|
+
history.push("/launchpad");
|
|
179
|
+
}
|
|
175
180
|
handleHomeClick();
|
|
176
181
|
} }, "Home")) : null,
|
|
177
182
|
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) => {
|
|
@@ -219,9 +224,7 @@ function AdvantageSideNav(props) {
|
|
|
219
224
|
handleDocumentCollectionsClick();
|
|
220
225
|
} }, "Document Collections")) : null,
|
|
221
226
|
showSecondDivider ? React.createElement(SideNavDivider, null) : null,
|
|
222
|
-
catalogNavlink ? (React.createElement(SideNavLink, {
|
|
223
|
-
// href={catalogNavlink}
|
|
224
|
-
renderIcon: Catalog }, "Catalog")) : null,
|
|
227
|
+
catalogNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`), href: catalogNavlink, renderIcon: Catalog }, "Catalog")) : null,
|
|
225
228
|
settingsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: Settings, href: settingsLink, onClick: (e) => {
|
|
226
229
|
handleSettingsClick();
|
|
227
230
|
} }, "Settings")) : 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
|
+
console.log("userTeamInstanceSwitcherDefault", userTeamInstanceSwitcherDefault);
|
|
46
48
|
const teamLink = ({ teamId }) => {
|
|
47
49
|
return `${navigationPlatform.baseEnvUrl}/launchpad/teams/${teamId}`;
|
|
48
50
|
};
|
|
@@ -80,11 +82,13 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
80
82
|
const userHasStandardTeams = standardTeams.length > 0;
|
|
81
83
|
const userHasTeams = userHasPersonalTeam || userHasAccountTeams || userHasStandardTeams;
|
|
82
84
|
const handleSelectTeam = async ({ team }) => {
|
|
85
|
+
console.log("handle select team", team);
|
|
83
86
|
setSelectedTeam(team);
|
|
84
87
|
if (!userTeamInstanceSwitcherDefault) {
|
|
85
88
|
const body = {
|
|
86
89
|
teamInstanceSwitcherDefault: team.id,
|
|
87
90
|
};
|
|
91
|
+
console.log("profile patch called", team);
|
|
88
92
|
await mutateUserProfile({ baseServicesUrl, body });
|
|
89
93
|
}
|
|
90
94
|
};
|
|
@@ -92,23 +96,27 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
92
96
|
const body = {
|
|
93
97
|
teamInstanceSwitcherDefault: null,
|
|
94
98
|
};
|
|
99
|
+
console.log("patch called inside handleNoTeamsToSelect");
|
|
95
100
|
await mutateUserProfile({ baseServicesUrl, body });
|
|
96
101
|
};
|
|
97
102
|
if (userHasTeams) {
|
|
98
103
|
if (!userTeamInstanceSwitcherDefault) {
|
|
99
104
|
if (userHasPersonalTeam) {
|
|
105
|
+
console.log("userHasPersonalTeam", personalTeam[0]);
|
|
100
106
|
handleSelectTeam({ team: personalTeam[0] });
|
|
101
107
|
}
|
|
102
108
|
else if (userHasAccountTeams) {
|
|
103
109
|
const sortedAccounts = sortBy(accountTeams, [
|
|
104
110
|
(account) => (account.displayName ? account.displayName : account.name),
|
|
105
111
|
]);
|
|
112
|
+
console.log("userHasAccountTeams", sortedAccounts[0]);
|
|
106
113
|
handleSelectTeam({ team: sortedAccounts[0] });
|
|
107
114
|
}
|
|
108
115
|
else if (userHasStandardTeams) {
|
|
109
116
|
const sortedStandardTeams = sortBy(standardTeams, [
|
|
110
117
|
(standardTeam) => (standardTeam.displayName ? standardTeam.displayName : standardTeam.name),
|
|
111
118
|
]);
|
|
119
|
+
console.log("userHasStandardTeams", sortedStandardTeams[0]);
|
|
112
120
|
handleSelectTeam({ team: sortedStandardTeams[0] });
|
|
113
121
|
}
|
|
114
122
|
}
|
|
@@ -123,6 +131,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
123
131
|
}
|
|
124
132
|
const allTeams = personalTeam.concat(standardTeams, accountTeams, allProjectTeams);
|
|
125
133
|
const newSelectedTeam = allTeams.find((team) => team.id === userTeamInstanceSwitcherDefault);
|
|
134
|
+
console.log("newSelectedTeam", newSelectedTeam);
|
|
126
135
|
handleSelectTeam({ team: newSelectedTeam });
|
|
127
136
|
}
|
|
128
137
|
// if teams data loaded but there are no teams
|
|
@@ -138,6 +147,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
138
147
|
teamsQuery?.data?.personalTeam?.length === 0))) {
|
|
139
148
|
handleNoTeamsToSelect();
|
|
140
149
|
}
|
|
150
|
+
else if (userTeamInstanceSwitcherDefault === null) {
|
|
151
|
+
setSelectedTeam(null);
|
|
152
|
+
}
|
|
141
153
|
}, [
|
|
142
154
|
baseServicesUrl,
|
|
143
155
|
hasUserTeams,
|
|
@@ -214,33 +226,58 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
214
226
|
standardTeams = teamsQuery?.data?.standardTeams ?? [];
|
|
215
227
|
personalTeam = teamsQuery?.data?.personalTeam ?? [];
|
|
216
228
|
}
|
|
217
|
-
let
|
|
218
|
-
|
|
229
|
+
let newPersonalTeam = personalTeam.length > 0
|
|
230
|
+
? personalTeam.map((personalTeam) => ({
|
|
231
|
+
...personalTeam,
|
|
232
|
+
type: TEAM_TYPES.PERSONAL,
|
|
233
|
+
nameToDisplay: personalTeam.displayName ? personalTeam.displayName : personalTeam.name,
|
|
234
|
+
}))
|
|
235
|
+
: [];
|
|
236
|
+
let newAccountTeams = [];
|
|
237
|
+
let newStandardTeams = [];
|
|
219
238
|
if (accountTeams?.length > 0) {
|
|
220
|
-
|
|
239
|
+
newAccountTeams = accountTeams.map((team) => {
|
|
221
240
|
let newProjectTeams = [];
|
|
222
241
|
if (team.projectTeams && team.projectTeams.length > 0) {
|
|
223
|
-
newProjectTeams = team.projectTeams?.map((
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
242
|
+
newProjectTeams = team.projectTeams?.map((projectTeam) => {
|
|
243
|
+
return {
|
|
244
|
+
...projectTeam,
|
|
245
|
+
nameToDisplay: projectTeam.displayName ? projectTeam.displayName : projectTeam.name,
|
|
246
|
+
};
|
|
247
|
+
});
|
|
227
248
|
}
|
|
228
249
|
return {
|
|
229
250
|
...team,
|
|
230
251
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
252
|
+
type: TEAM_TYPES.ACCOUNT,
|
|
231
253
|
projectTeams: sortBy(newProjectTeams, ["nameToDisplay"]),
|
|
232
254
|
};
|
|
233
255
|
});
|
|
234
|
-
sortedAccountTeamsWithNamesToDisplay = sortBy(newAccountTeams, ["nameToDisplay"]);
|
|
235
256
|
}
|
|
236
257
|
if (standardTeams?.length > 0) {
|
|
237
|
-
|
|
258
|
+
newStandardTeams = standardTeams.map((team) => {
|
|
238
259
|
return {
|
|
239
260
|
...team,
|
|
261
|
+
type: TEAM_TYPES.STANDARD,
|
|
240
262
|
nameToDisplay: team.displayName ? team.displayName : team.name,
|
|
241
263
|
};
|
|
242
264
|
});
|
|
243
|
-
|
|
265
|
+
}
|
|
266
|
+
let allTeams = newPersonalTeam.concat(newAccountTeams, newStandardTeams);
|
|
267
|
+
const order = { [TEAM_TYPES.PERSONAL]: 1, [TEAM_TYPES.ACCOUNT]: 2, [TEAM_TYPES.STANDARD]: 3 };
|
|
268
|
+
allTeams = sortBy(allTeams, [(team) => order[team.type], "nameToDisplay"]);
|
|
269
|
+
if (selectedTeam) {
|
|
270
|
+
const selectedTeamIndex = allTeams.findIndex((team, index) => {
|
|
271
|
+
if (team.id === selectedTeam.id) {
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
274
|
+
else if (Array.isArray(team.projectTeams) && team.projectTeams?.length > 0) {
|
|
275
|
+
return team.projectTeams.some((projectTeam) => projectTeam.id === selectedTeam.id);
|
|
276
|
+
}
|
|
277
|
+
return false;
|
|
278
|
+
});
|
|
279
|
+
const [removedTeam] = allTeams.splice(selectedTeamIndex, 1);
|
|
280
|
+
allTeams.unshift(removedTeam);
|
|
244
281
|
}
|
|
245
282
|
let selectedTeamName = selectedTeam?.displayName
|
|
246
283
|
? selectedTeam.displayName
|
|
@@ -262,29 +299,22 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
262
299
|
React.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
|
|
263
300
|
React.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
|
|
264
301
|
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) => {
|
|
302
|
+
allTeams.map((team) => {
|
|
303
|
+
const isTeamSelected = team.id === selectedTeam?.id;
|
|
304
|
+
if (team.type === TEAM_TYPES.ACCOUNT) {
|
|
282
305
|
const isSubmenuOpen = team.id === openAccountSubmenuId;
|
|
283
|
-
const
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
306
|
+
const projectTeams = team.projectTeams;
|
|
307
|
+
const existProjectTeams = Array.isArray(projectTeams) && projectTeams.length > 0;
|
|
308
|
+
let selectedProjectTeamIndex = -1;
|
|
309
|
+
if (existProjectTeams) {
|
|
310
|
+
selectedProjectTeamIndex = projectTeams.findIndex((team) => team.id === selectedTeam?.id);
|
|
311
|
+
}
|
|
312
|
+
const isProjectTeamSelected = selectedProjectTeamIndex >= 0;
|
|
287
313
|
const isMenuSelected = isTeamSelected || isProjectTeamSelected;
|
|
314
|
+
if (existProjectTeams && isProjectTeamSelected) {
|
|
315
|
+
const [removedTeam] = projectTeams.splice(selectedProjectTeamIndex, 1);
|
|
316
|
+
projectTeams.unshift(removedTeam);
|
|
317
|
+
}
|
|
288
318
|
return (React.createElement("div", { key: team.id, id: `${team.id}-account-menu` },
|
|
289
319
|
React.createElement(HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
|
|
290
320
|
// eslint-disable-next-line no-script-url
|
|
@@ -292,7 +322,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
292
322
|
React.createElement("div", { className: headerDropdownMenuItemAccountClassname },
|
|
293
323
|
React.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
|
|
294
324
|
React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
295
|
-
isMenuSelected ?
|
|
325
|
+
isMenuSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null),
|
|
296
326
|
React.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
|
|
297
327
|
React.createElement(GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
|
|
298
328
|
React.createElement(ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
|
|
@@ -304,9 +334,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
304
334
|
href: "javascript:void(0)" },
|
|
305
335
|
React.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
|
|
306
336
|
React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
|
|
307
|
-
isTeamSelected ?
|
|
308
|
-
|
|
309
|
-
?
|
|
337
|
+
isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)),
|
|
338
|
+
projectTeams && projectTeams.length > 0
|
|
339
|
+
? projectTeams.map((team) => {
|
|
310
340
|
const isTeamSelected = team.id === selectedTeam?.id;
|
|
311
341
|
return (React.createElement("div", { key: team.id, id: `${team.id}-project-menu-item` },
|
|
312
342
|
React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
@@ -319,22 +349,19 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
|
|
|
319
349
|
isTeamSelected ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
|
|
320
350
|
})
|
|
321
351
|
: 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` },
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
return (React.createElement("div", { key: team.id, id: `${team.id}-${team.type}-menu-item` },
|
|
328
355
|
React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
|
|
329
|
-
handleTeamClick({ team, type: "
|
|
356
|
+
handleTeamClick({ team, type: team.type ?? "" });
|
|
330
357
|
}, "data-testid": "header-team-switcher-menu-item",
|
|
331
358
|
// eslint-disable-next-line no-script-url
|
|
332
359
|
href: "javascript:void(0)" },
|
|
333
360
|
React.createElement("div", { className: headerDropdownMenuItemClassname },
|
|
334
361
|
React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
|
|
335
362
|
isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
|
|
336
|
-
}
|
|
337
|
-
|
|
363
|
+
}
|
|
364
|
+
})))));
|
|
338
365
|
}
|
|
339
366
|
return null;
|
|
340
367
|
}
|
|
@@ -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);
|