@boomerang-io/carbon-addons-boomerang-react 4.6.21-beta.3 → 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.
@@ -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) => {
@@ -213,24 +218,26 @@ function AdvantageSideNav(props) {
213
218
  React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-advantage-sidenav-item-tag` },
214
219
  "Tools",
215
220
  React__default.default.createElement(react.Tag, { size: "sm", title: "BETA", type: "high-contrast" }, "BETA")))) : null,
216
- agentAssistantStudioLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link", isActive: (agentStudioPath && windowLocation.href.includes(`/launchpad${agentStudioPath}`)) ||
217
- (agenticAppsPath && windowLocation.href.includes(`/launchpad${agenticAppsPath}`)), renderIcon: icons.IntentRequestCreate, href: agentAssistantStudioLink, onClick: (e) => {
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) => {
218
227
  if (isLaunchpad) {
219
228
  handleLaunchpadLink(e);
220
229
  history.push(agentStudioPath);
221
230
  }
222
231
  handleAgentAssistantStudioClick();
223
232
  } }, "Agent & Assistant Studio")) : null,
224
- agentAssistantLibraryLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: icons.Folders, href: agentAssistantLibraryLink, onClick: (e) => {
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) => {
225
234
  handleAgentAssistantLibraryClick();
226
235
  } }, "Agent & Assistant Library")) : null,
227
- documentCollectionsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-document-collections-link", renderIcon: icons.DocumentMultiple_02, href: documentCollectionsLink, onClick: (e) => {
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) => {
228
237
  handleDocumentCollectionsClick();
229
238
  } }, "Document Collections")) : null,
230
239
  showSecondDivider ? React__default.default.createElement(react.SideNavDivider, null) : null,
231
- catalogNavlink ? (React__default.default.createElement(react.SideNavLink, { to: catalogNavlink, "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`),
232
- // href={catalogNavlink}
233
- renderIcon: icons.Catalog }, "Catalog")) : null,
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,
234
241
  settingsLink ? (React__default.default.createElement(react.SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: icons.Settings, href: settingsLink, onClick: (e) => {
235
242
  handleSettingsClick();
236
243
  } }, "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
 
@@ -147,6 +148,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
147
148
  teamsQuery?.data?.personalTeam?.length === 0))) {
148
149
  handleNoTeamsToSelect();
149
150
  }
151
+ else if (userTeamInstanceSwitcherDefault === null) {
152
+ setSelectedTeam(null);
153
+ }
150
154
  }, [
151
155
  baseServicesUrl,
152
156
  hasUserTeams,
@@ -223,33 +227,58 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
223
227
  standardTeams = teamsQuery?.data?.standardTeams ?? [];
224
228
  personalTeam = teamsQuery?.data?.personalTeam ?? [];
225
229
  }
226
- let sortedAccountTeamsWithNamesToDisplay = [];
227
- let sortedStandardTeamsWithNamesToDisplay = [];
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 = [];
228
239
  if (accountTeams?.length > 0) {
229
- const newAccountTeams = accountTeams.map((team) => {
240
+ newAccountTeams = accountTeams.map((team) => {
230
241
  let newProjectTeams = [];
231
242
  if (team.projectTeams && team.projectTeams.length > 0) {
232
- newProjectTeams = team.projectTeams?.map((team) => ({
233
- ...team,
234
- nameToDisplay: team.displayName ? team.displayName : team.name,
235
- }));
243
+ newProjectTeams = team.projectTeams?.map((projectTeam) => {
244
+ return {
245
+ ...projectTeam,
246
+ nameToDisplay: projectTeam.displayName ? projectTeam.displayName : projectTeam.name,
247
+ };
248
+ });
236
249
  }
237
250
  return {
238
251
  ...team,
239
252
  nameToDisplay: team.displayName ? team.displayName : team.name,
253
+ type: TeamTypes.TEAM_TYPES.ACCOUNT,
240
254
  projectTeams: sortBy__default.default(newProjectTeams, ["nameToDisplay"]),
241
255
  };
242
256
  });
243
- sortedAccountTeamsWithNamesToDisplay = sortBy__default.default(newAccountTeams, ["nameToDisplay"]);
244
257
  }
245
258
  if (standardTeams?.length > 0) {
246
- const newStandardTeams = standardTeams.map((team) => {
259
+ newStandardTeams = standardTeams.map((team) => {
247
260
  return {
248
261
  ...team,
262
+ type: TeamTypes.TEAM_TYPES.STANDARD,
249
263
  nameToDisplay: team.displayName ? team.displayName : team.name,
250
264
  };
251
265
  });
252
- sortedStandardTeamsWithNamesToDisplay = sortBy__default.default(newStandardTeams, ["nameToDisplay"]);
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);
253
282
  }
254
283
  let selectedTeamName = selectedTeam?.displayName
255
284
  ? selectedTeam.displayName
@@ -271,29 +300,22 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
271
300
  React__default.default.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
272
301
  React__default.default.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
273
302
  React__default.default.createElement(icons.AddAlt, { className: headerTeamSwitcherCreateTeamButtonIconClassname })))),
274
- personalTeam.length > 0
275
- ? personalTeam.map((team) => {
276
- const teamName = team.displayName ? team.displayName : team.name;
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) => {
303
+ allTeams.map((team) => {
304
+ const isTeamSelected = team.id === selectedTeam?.id;
305
+ if (team.type === TeamTypes.TEAM_TYPES.ACCOUNT) {
291
306
  const isSubmenuOpen = team.id === openAccountSubmenuId;
292
- const isProjectTeamSelected = team.projectTeams &&
293
- team.projectTeams.length > 0 &&
294
- team.projectTeams.some((team) => team.id === selectedTeam?.id);
295
- const isTeamSelected = team.id === selectedTeam?.id;
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;
296
314
  const isMenuSelected = isTeamSelected || isProjectTeamSelected;
315
+ if (existProjectTeams && isProjectTeamSelected) {
316
+ const [removedTeam] = projectTeams.splice(selectedProjectTeamIndex, 1);
317
+ projectTeams.unshift(removedTeam);
318
+ }
297
319
  return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-account-menu` },
298
320
  React__default.default.createElement(react.HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
299
321
  // eslint-disable-next-line no-script-url
@@ -301,7 +323,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
301
323
  React__default.default.createElement("div", { className: headerDropdownMenuItemAccountClassname },
302
324
  React__default.default.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
303
325
  React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
304
- isMenuSelected ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null),
326
+ isMenuSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null),
305
327
  React__default.default.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
306
328
  React__default.default.createElement(icons.GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
307
329
  React__default.default.createElement(icons.ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
@@ -313,9 +335,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
313
335
  href: "javascript:void(0)" },
314
336
  React__default.default.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
315
337
  React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
316
- isTeamSelected ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null)),
317
- team.projectTeams && team.projectTeams.length > 0
318
- ? team.projectTeams.map((team) => {
338
+ isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)),
339
+ projectTeams && projectTeams.length > 0
340
+ ? projectTeams.map((team) => {
319
341
  const isTeamSelected = team.id === selectedTeam?.id;
320
342
  return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-project-menu-item` },
321
343
  React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
@@ -328,22 +350,19 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
328
350
  isTeamSelected ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
329
351
  })
330
352
  : null)));
331
- })
332
- : null,
333
- standardTeams.length > 0
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` },
353
+ }
354
+ else {
355
+ return (React__default.default.createElement("div", { key: team.id, id: `${team.id}-${team.type}-menu-item` },
337
356
  React__default.default.createElement(react.HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
338
- handleTeamClick({ team, type: "standard" });
357
+ handleTeamClick({ team, type: team.type ?? "" });
339
358
  }, "data-testid": "header-team-switcher-menu-item",
340
359
  // eslint-disable-next-line no-script-url
341
360
  href: "javascript:void(0)" },
342
361
  React__default.default.createElement("div", { className: headerDropdownMenuItemClassname },
343
362
  React__default.default.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
344
363
  isTeamSelected ? React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
345
- })
346
- : null))));
364
+ }
365
+ })))));
347
366
  }
348
367
  return null;
349
368
  }
@@ -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 sidebar in Launchpad."),
108
- React__default.default.createElement("h2", { className: `${settings.prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad sidebar"),
109
- React__default.default.createElement("p", { className: `${settings.prefix}--bmrg-profile-settings__description` }, "Choose Teams to show or hide in your Launchpad sidebar and Catalog (useful for sensitive demos). You will not be able to access or view unchecked Teams from the sidebar, and cannot add items to them from Catalog."),
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
- React__default.default.createElement(HeaderMenuItem.default, { key: "legal-terms", href: platform?.legalTermsUrl, icon: React__default.default.createElement(icons.Policy, null), "data-testid": "legal-terms", kind: "app", text: "Legal Terms", type: "link" }),
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) => {
@@ -204,24 +209,26 @@ function AdvantageSideNav(props) {
204
209
  React.createElement("div", { className: `${prefix}--bmrg-advantage-sidenav-item-tag` },
205
210
  "Tools",
206
211
  React.createElement(Tag, { size: "sm", title: "BETA", type: "high-contrast" }, "BETA")))) : null,
207
- agentAssistantStudioLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-studio-link", isActive: (agentStudioPath && windowLocation.href.includes(`/launchpad${agentStudioPath}`)) ||
208
- (agenticAppsPath && windowLocation.href.includes(`/launchpad${agenticAppsPath}`)), renderIcon: IntentRequestCreate, href: agentAssistantStudioLink, onClick: (e) => {
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) => {
209
218
  if (isLaunchpad) {
210
219
  handleLaunchpadLink(e);
211
220
  history.push(agentStudioPath);
212
221
  }
213
222
  handleAgentAssistantStudioClick();
214
223
  } }, "Agent & Assistant Studio")) : null,
215
- agentAssistantLibraryLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-agent-assistant-library-link", renderIcon: Folders, href: agentAssistantLibraryLink, onClick: (e) => {
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) => {
216
225
  handleAgentAssistantLibraryClick();
217
226
  } }, "Agent & Assistant Library")) : null,
218
- documentCollectionsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-document-collections-link", renderIcon: DocumentMultiple_02, href: documentCollectionsLink, onClick: (e) => {
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) => {
219
228
  handleDocumentCollectionsClick();
220
229
  } }, "Document Collections")) : null,
221
230
  showSecondDivider ? React.createElement(SideNavDivider, null) : null,
222
- catalogNavlink ? (React.createElement(SideNavLink, { to: catalogNavlink, "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`),
223
- // href={catalogNavlink}
224
- renderIcon: Catalog }, "Catalog")) : null,
231
+ catalogNavlink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`), href: catalogNavlink, renderIcon: Catalog }, "Catalog")) : null,
225
232
  settingsLink ? (React.createElement(SideNavLink, { "data-testid": "sidenav-settings-link", renderIcon: Settings, href: settingsLink, onClick: (e) => {
226
233
  handleSettingsClick();
227
234
  } }, "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
@@ -138,6 +139,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
138
139
  teamsQuery?.data?.personalTeam?.length === 0))) {
139
140
  handleNoTeamsToSelect();
140
141
  }
142
+ else if (userTeamInstanceSwitcherDefault === null) {
143
+ setSelectedTeam(null);
144
+ }
141
145
  }, [
142
146
  baseServicesUrl,
143
147
  hasUserTeams,
@@ -214,33 +218,58 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
214
218
  standardTeams = teamsQuery?.data?.standardTeams ?? [];
215
219
  personalTeam = teamsQuery?.data?.personalTeam ?? [];
216
220
  }
217
- let sortedAccountTeamsWithNamesToDisplay = [];
218
- let sortedStandardTeamsWithNamesToDisplay = [];
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 = [];
219
230
  if (accountTeams?.length > 0) {
220
- const newAccountTeams = accountTeams.map((team) => {
231
+ newAccountTeams = accountTeams.map((team) => {
221
232
  let newProjectTeams = [];
222
233
  if (team.projectTeams && team.projectTeams.length > 0) {
223
- newProjectTeams = team.projectTeams?.map((team) => ({
224
- ...team,
225
- nameToDisplay: team.displayName ? team.displayName : team.name,
226
- }));
234
+ newProjectTeams = team.projectTeams?.map((projectTeam) => {
235
+ return {
236
+ ...projectTeam,
237
+ nameToDisplay: projectTeam.displayName ? projectTeam.displayName : projectTeam.name,
238
+ };
239
+ });
227
240
  }
228
241
  return {
229
242
  ...team,
230
243
  nameToDisplay: team.displayName ? team.displayName : team.name,
244
+ type: TEAM_TYPES.ACCOUNT,
231
245
  projectTeams: sortBy(newProjectTeams, ["nameToDisplay"]),
232
246
  };
233
247
  });
234
- sortedAccountTeamsWithNamesToDisplay = sortBy(newAccountTeams, ["nameToDisplay"]);
235
248
  }
236
249
  if (standardTeams?.length > 0) {
237
- const newStandardTeams = standardTeams.map((team) => {
250
+ newStandardTeams = standardTeams.map((team) => {
238
251
  return {
239
252
  ...team,
253
+ type: TEAM_TYPES.STANDARD,
240
254
  nameToDisplay: team.displayName ? team.displayName : team.name,
241
255
  };
242
256
  });
243
- sortedStandardTeamsWithNamesToDisplay = sortBy(newStandardTeams, ["nameToDisplay"]);
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);
244
273
  }
245
274
  let selectedTeamName = selectedTeam?.displayName
246
275
  ? selectedTeam.displayName
@@ -262,29 +291,22 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
262
291
  React.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
263
292
  React.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
264
293
  React.createElement(AddAlt, { className: headerTeamSwitcherCreateTeamButtonIconClassname })))),
265
- personalTeam.length > 0
266
- ? personalTeam.map((team) => {
267
- const teamName = team.displayName ? team.displayName : team.name;
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) => {
294
+ allTeams.map((team) => {
295
+ const isTeamSelected = team.id === selectedTeam?.id;
296
+ if (team.type === TEAM_TYPES.ACCOUNT) {
282
297
  const isSubmenuOpen = team.id === openAccountSubmenuId;
283
- const isProjectTeamSelected = team.projectTeams &&
284
- team.projectTeams.length > 0 &&
285
- team.projectTeams.some((team) => team.id === selectedTeam?.id);
286
- const isTeamSelected = team.id === selectedTeam?.id;
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;
287
305
  const isMenuSelected = isTeamSelected || isProjectTeamSelected;
306
+ if (existProjectTeams && isProjectTeamSelected) {
307
+ const [removedTeam] = projectTeams.splice(selectedProjectTeamIndex, 1);
308
+ projectTeams.unshift(removedTeam);
309
+ }
288
310
  return (React.createElement("div", { key: team.id, id: `${team.id}-account-menu` },
289
311
  React.createElement(HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
290
312
  // eslint-disable-next-line no-script-url
@@ -292,7 +314,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
292
314
  React.createElement("div", { className: headerDropdownMenuItemAccountClassname },
293
315
  React.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
294
316
  React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
295
- isMenuSelected ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null),
317
+ isMenuSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null),
296
318
  React.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
297
319
  React.createElement(GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
298
320
  React.createElement(ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
@@ -304,9 +326,9 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
304
326
  href: "javascript:void(0)" },
305
327
  React.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
306
328
  React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
307
- isTeamSelected ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null)),
308
- team.projectTeams && team.projectTeams.length > 0
309
- ? team.projectTeams.map((team) => {
329
+ isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)),
330
+ projectTeams && projectTeams.length > 0
331
+ ? projectTeams.map((team) => {
310
332
  const isTeamSelected = team.id === selectedTeam?.id;
311
333
  return (React.createElement("div", { key: team.id, id: `${team.id}-project-menu-item` },
312
334
  React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
@@ -319,22 +341,19 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
319
341
  isTeamSelected ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
320
342
  })
321
343
  : null)));
322
- })
323
- : null,
324
- standardTeams.length > 0
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` },
344
+ }
345
+ else {
346
+ return (React.createElement("div", { key: team.id, id: `${team.id}-${team.type}-menu-item` },
328
347
  React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
329
- handleTeamClick({ team, type: "standard" });
348
+ handleTeamClick({ team, type: team.type ?? "" });
330
349
  }, "data-testid": "header-team-switcher-menu-item",
331
350
  // eslint-disable-next-line no-script-url
332
351
  href: "javascript:void(0)" },
333
352
  React.createElement("div", { className: headerDropdownMenuItemClassname },
334
353
  React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
335
354
  isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
336
- })
337
- : null))));
355
+ }
356
+ })))));
338
357
  }
339
358
  return null;
340
359
  }
@@ -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 sidebar in Launchpad."),
99
- React.createElement("h2", { className: `${prefix}--bmrg-profile-settings__subtitle` }, "Teams visible in Launchpad sidebar"),
100
- React.createElement("p", { className: `${prefix}--bmrg-profile-settings__description` }, "Choose Teams to show or hide in your Launchpad sidebar and Catalog (useful for sensitive demos). You will not be able to access or view unchecked Teams from the sidebar, and cannot add items to them from Catalog."),
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, Policy, Forum, ChatLaunch, Cognitive, Book } from '@carbon/react/icons';
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
- React.createElement(HeaderMenuItem, { key: "legal-terms", href: platform?.legalTermsUrl, icon: React.createElement(Policy, null), "data-testid": "legal-terms", kind: "app", text: "Legal Terms", type: "link" }),
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 })),
@@ -0,0 +1,13 @@
1
+ /*
2
+ IBM Confidential
3
+ 694970X, 69497O0
4
+ © Copyright IBM Corp. 2022, 2024
5
+ */
6
+ const TEAM_TYPES = {
7
+ ACCOUNT: "account",
8
+ PERSONAL: "personal",
9
+ PROJECT: "project",
10
+ STANDARD: "standard",
11
+ };
12
+
13
+ export { TEAM_TYPES };
@@ -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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@boomerang-io/carbon-addons-boomerang-react",
3
3
  "description": "Carbon Addons for Boomerang apps",
4
- "version": "4.6.21-beta.3",
4
+ "version": "4.6.21-beta.30",
5
5
  "author": {
6
6
  "name": "Tim Bula",
7
7
  "email": "timrbula@gmail.com"
@@ -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);