@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.
@@ -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, { to: catalogNavlink, "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`),
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 sortedAccountTeamsWithNamesToDisplay = [];
227
- let sortedStandardTeamsWithNamesToDisplay = [];
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
- const newAccountTeams = accountTeams.map((team) => {
248
+ newAccountTeams = accountTeams.map((team) => {
230
249
  let newProjectTeams = [];
231
250
  if (team.projectTeams && team.projectTeams.length > 0) {
232
- newProjectTeams = team.projectTeams?.map((team) => ({
233
- ...team,
234
- nameToDisplay: team.displayName ? team.displayName : team.name,
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
- const newStandardTeams = standardTeams.map((team) => {
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
- sortedStandardTeamsWithNamesToDisplay = sortBy__default.default(newStandardTeams, ["nameToDisplay"]);
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
- 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) => {
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 isProjectTeamSelected = team.projectTeams &&
293
- team.projectTeams.length > 0 &&
294
- team.projectTeams.some((team) => team.id === selectedTeam?.id);
295
- const isTeamSelected = team.id === selectedTeam?.id;
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 ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null),
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 ? (React__default.default.createElement(icons.CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null)),
317
- team.projectTeams && team.projectTeams.length > 0
318
- ? team.projectTeams.map((team) => {
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
- : 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` },
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: "standard" });
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
- : null))));
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 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) => {
@@ -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, { to: catalogNavlink, "data-testid": "sidenav-catalog-link", isActive: windowLocation.href.includes(`${baseEnvUrl}/catalog`),
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 sortedAccountTeamsWithNamesToDisplay = [];
218
- let sortedStandardTeamsWithNamesToDisplay = [];
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
- const newAccountTeams = accountTeams.map((team) => {
239
+ newAccountTeams = accountTeams.map((team) => {
221
240
  let newProjectTeams = [];
222
241
  if (team.projectTeams && team.projectTeams.length > 0) {
223
- newProjectTeams = team.projectTeams?.map((team) => ({
224
- ...team,
225
- nameToDisplay: team.displayName ? team.displayName : team.name,
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
- const newStandardTeams = standardTeams.map((team) => {
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
- sortedStandardTeamsWithNamesToDisplay = sortBy(newStandardTeams, ["nameToDisplay"]);
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
- 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) => {
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 isProjectTeamSelected = team.projectTeams &&
284
- team.projectTeams.length > 0 &&
285
- team.projectTeams.some((team) => team.id === selectedTeam?.id);
286
- const isTeamSelected = team.id === selectedTeam?.id;
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 ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null),
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 ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null)),
308
- team.projectTeams && team.projectTeams.length > 0
309
- ? team.projectTeams.map((team) => {
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
- : 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` },
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: "standard" });
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
- : null))));
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 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.32",
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);