@boomerang-io/carbon-addons-boomerang-react 4.6.10-beta.3 → 4.6.10-beta.5

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.
@@ -1,7 +1,7 @@
1
1
  import React, { useState, useEffect } from 'react';
2
2
  import { useQueryClient, useMutation } from 'react-query';
3
3
  import { InlineLoading, HeaderMenu, HeaderMenuItem } from '@carbon/react';
4
- import { AddAlt, CheckmarkFilled, GroupAccount, ChevronDown } from '@carbon/react/icons';
4
+ import { CheckmarkFilled, AddAlt, GroupAccount, ChevronDown } from '@carbon/react/icons';
5
5
  import sortBy from 'lodash.sortby';
6
6
  import HeaderMenu$1 from './HeaderMenu.js';
7
7
  import { resolver, serviceUrl } from '../../config/servicesConfig.js';
@@ -12,6 +12,9 @@ IBM Confidential
12
12
  694970X, 69497O0
13
13
  © Copyright IBM Corp. 2022, 2025
14
14
  */
15
+ const headerDropdownMenuContainerClassname = `${prefix}--header-dropdown-menu-container`;
16
+ const headerDropdownMenuLoadingClassname = `${prefix}--header-dropdown-menu-loading`;
17
+ const headerDropdownMenuSuccessClassname = `${prefix}--header-dropdown-menu-success`;
15
18
  const headerDropdownMenuClassname = `${prefix}--header-dropdown-menu`;
16
19
  const headerDropdownMenuListClassname = `${prefix}--bmrg-header-drop-down`;
17
20
  const headerDropdownMenuItemContainerClassname = `${prefix}--header-dropdown-menu-item-container`;
@@ -29,7 +32,7 @@ const headerTeamSwitcherCreateTeamButtonContainerClassname = `${prefix}--header-
29
32
  const headerTeamSwitcherCreateTeamButtonClassname = `${prefix}--header-team-switcher-create-team-button`;
30
33
  const headerTeamSwitcherCreateTeamButtonTextClassname = `${prefix}--header-team-switcher-create-team-button-text`;
31
34
  const headerTeamSwitcherCreateTeamButtonIconClassname = `${prefix}--header-team-switcher-create-team-button-icon`;
32
- function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamTrigger, history, isLaunchpad, menuAriaLabelRecord, menuButtonId, menuListId, navigationPlatform, teamsQuery, trackEvent, user, userTeams, }) {
35
+ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamTrigger, history, isLaunchpad, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, menuAriaLabelRecord, menuButtonId, menuListId, navigationPlatform, teamsQuery, trackEvent, user, userTeams, }) {
33
36
  const queryClient = useQueryClient();
34
37
  const [selectedTeam, setSelectedTeam] = useState();
35
38
  const [openAccountSubmenuId, setOpenAccountSubmenuId] = useState("");
@@ -38,11 +41,23 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
38
41
  const createTeamButtonText = showSelectTeamPurpose ? "Create Team" : "Create or Join Team";
39
42
  const userTeamInstanceSwitcherDefault = user?.teamInstanceSwitcherDefault;
40
43
  const profileUrl = serviceUrl.resourceUserProfile({ baseServicesUrl });
44
+ const teamLink = ({ teamId }) => {
45
+ return `${navigationPlatform.baseEnvUrl}/launchpad/teams/${teamId}`;
46
+ };
41
47
  const { mutateAsync: mutateUserProfile, isLoading: mutateUserProfileIsLoading } = useMutation(resolver.patchUserProfile, {
42
48
  onSuccess: () => {
43
49
  queryClient.invalidateQueries(profileUrl);
44
50
  },
45
51
  });
52
+ React.useEffect(() => {
53
+ let timer;
54
+ if (isSuccessTeamSwitcher && setIsSuccessTeamSwitcher) {
55
+ timer = setTimeout(() => {
56
+ setIsSuccessTeamSwitcher(false);
57
+ }, 3000);
58
+ }
59
+ return () => clearTimeout(timer);
60
+ }, [isSuccessTeamSwitcher, setIsSuccessTeamSwitcher]);
46
61
  useEffect(() => {
47
62
  let accountTeams, standardTeams, personalTeam = [];
48
63
  if (hasUserTeams) {
@@ -74,10 +89,16 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
74
89
  handleSelectTeam({ team: personalTeam[0] });
75
90
  }
76
91
  else if (userHasAccountTeams) {
77
- handleSelectTeam({ team: accountTeams[0] });
92
+ const sortedAccounts = sortBy(accountTeams, [
93
+ (account) => (account.displayName ? account.displayName : account.name),
94
+ ]);
95
+ handleSelectTeam({ team: sortedAccounts[0] });
78
96
  }
79
97
  else if (userHasStandardTeams) {
80
- handleSelectTeam({ team: standardTeams[0] });
98
+ const sortedStandardTeams = sortBy(standardTeams, [
99
+ (standardTeam) => (standardTeam.displayName ? standardTeam.displayName : standardTeam.name),
100
+ ]);
101
+ handleSelectTeam({ team: sortedStandardTeams[0] });
81
102
  }
82
103
  }
83
104
  else if (selectedTeam?.id !== userTeamInstanceSwitcherDefault) {
@@ -107,12 +128,16 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
107
128
  userTeams?.data?.personalTeam,
108
129
  userTeams?.data?.standardTeams,
109
130
  ]);
131
+ const handleHeaderMenuClick = () => {
132
+ setOpenAccountSubmenuId("");
133
+ };
110
134
  const handleTeamClick = ({ team, type }) => {
135
+ setOpenAccountSubmenuId("");
111
136
  if (analyticsHelpers?.navigateEventHandler && trackEvent) {
112
137
  analyticsHelpers.navigateEventHandler({
113
138
  action: `Clicked ${team.name} in Team Switcher`,
114
139
  category: "Team Switcher",
115
- destinationPath: `${navigationPlatform.baseEnvUrl}/launchpad/teams/${team.id}`,
140
+ destinationPath: teamLink({ teamId: team.id }),
116
141
  teamId: team.id,
117
142
  teamType: type,
118
143
  trackEvent,
@@ -122,7 +147,7 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
122
147
  history.push(`/teams/${team.id}`);
123
148
  }
124
149
  else {
125
- window.open(`${navigationPlatform.baseEnvUrl}/launchpad/teams/${team.id}`, "_self");
150
+ window.open(teamLink({ teamId: team.id }), "_self");
126
151
  }
127
152
  };
128
153
  const handleCreateJoinTeamClick = (e) => {
@@ -195,79 +220,94 @@ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamT
195
220
  sortedStandardTeamsWithNamesToDisplay = sortBy(newStandardTeams, ["nameToDisplay"]);
196
221
  }
197
222
  let selectedTeamName = selectedTeam?.displayName ? selectedTeam.displayName : selectedTeam?.name;
198
- if (selectedTeamName && selectedTeamName.length > 42) {
199
- selectedTeamName = selectedTeamName.slice(0, 42) + "...";
223
+ if (selectedTeamName && selectedTeamName.length > 65) {
224
+ selectedTeamName = selectedTeamName.slice(0, 65) + "...";
200
225
  }
201
- return (React.createElement(HeaderMenu, { "aria-label": menuAriaLabelRecord, className: headerDropdownMenuClassname, menuLinkName: selectedTeamName ? selectedTeamName : "No team selected", "data-testid": "header-team-switcher-menu" },
202
- React.createElement(HeaderMenu$1, { "aria-labelledby": menuButtonId, className: headerDropdownMenuListClassname, id: menuListId },
203
- React.createElement(HeaderMenuItem, { className: headerTeamSwitcherCreateTeamButtonContainerClassname, onClick: handleCreateJoinTeamClick,
204
- // eslint-disable-next-line no-script-url
205
- href: "javascript:void(0)", role: "menuitem", "data-testid": "header-team-switcher-create-join-team-button" },
206
- React.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
207
- React.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
208
- React.createElement(AddAlt, { className: headerTeamSwitcherCreateTeamButtonIconClassname }))),
209
- personalTeam.length > 0
210
- ? personalTeam.map((team) => {
211
- const teamName = team.displayName ? team.displayName : team.name;
212
- const isTeamSelected = team.id === selectedTeam?.id;
213
- return (React.createElement(HeaderMenuItem, { key: team.id, "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => handleTeamClick({ team, type: "personal" }),
214
- // eslint-disable-next-line no-script-url
215
- href: "javascript:void(0)", "data-testid": "header-team-switcher-menu-item" },
216
- React.createElement("div", { className: headerDropdownMenuItemClassname },
217
- React.createElement("span", { title: teamName, className: headerDropdownMenuItemTextClassname }, teamName),
218
- isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)));
219
- })
220
- : null,
221
- accountTeams.length > 0
222
- ? sortedAccountTeamsWithNamesToDisplay.map((team) => {
223
- const isSubmenuOpen = team.id === openAccountSubmenuId;
224
- const isProjectTeamSelected = team.projectTeams &&
225
- team.projectTeams.length > 0 &&
226
- team.projectTeams.some((team) => team.id === selectedTeam?.id);
227
- const isTeamSelected = team.id === selectedTeam?.id;
228
- const isMenuSelected = isTeamSelected || isProjectTeamSelected;
229
- return (React.createElement(React.Fragment, null,
230
- React.createElement(HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
231
- // eslint-disable-next-line no-script-url
232
- href: "javascript:void(0)", "data-testid": "header-team-switcher-menu-account-accordion" },
233
- React.createElement("div", { className: headerDropdownMenuItemAccountClassname },
234
- React.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
235
- React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
236
- isMenuSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null),
237
- React.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
238
- React.createElement(GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
239
- React.createElement(ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
240
- React.createElement("div", { "aria-expanded": isSubmenuOpen, className: headerDropdownMenuItemAccountSubmenuClassname },
241
- React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => handleTeamClick({ team, type: "account" }), "data-testid": "header-team-switcher-menu-account-accordion-item",
226
+ return (React.createElement("div", { className: headerDropdownMenuContainerClassname },
227
+ isLoadingTeamSwitcher ? (React.createElement("div", { className: headerDropdownMenuLoadingClassname },
228
+ React.createElement(InlineLoading, null))) : isSuccessTeamSwitcher ? (React.createElement("div", { className: headerDropdownMenuSuccessClassname },
229
+ React.createElement(CheckmarkFilled, null))) : null,
230
+ React.createElement(HeaderMenu, { id: "header-team-switcher-menu", "aria-label": menuAriaLabelRecord, className: headerDropdownMenuClassname, menuLinkName: selectedTeamName ? selectedTeamName : "No team selected", onClick: handleHeaderMenuClick, "data-testid": "header-team-switcher-menu" },
231
+ React.createElement(HeaderMenu$1, { "aria-labelledby": menuButtonId, className: headerDropdownMenuListClassname, id: menuListId },
232
+ React.createElement(HeaderMenuItem, { id: "header-team-switcher-create-join-team-button", className: headerTeamSwitcherCreateTeamButtonContainerClassname, onClick: handleCreateJoinTeamClick,
233
+ // eslint-disable-next-line no-script-url
234
+ href: "javascript:void(0)", role: "menuitem", "data-testid": "header-team-switcher-create-join-team-button" },
235
+ React.createElement("div", { className: headerTeamSwitcherCreateTeamButtonClassname },
236
+ React.createElement("span", { className: headerTeamSwitcherCreateTeamButtonTextClassname }, createTeamButtonText),
237
+ React.createElement(AddAlt, { className: headerTeamSwitcherCreateTeamButtonIconClassname }))),
238
+ personalTeam.length > 0
239
+ ? personalTeam.map((team) => {
240
+ const teamName = team.displayName ? team.displayName : team.name;
241
+ const isTeamSelected = team.id === selectedTeam?.id;
242
+ return (React.createElement("div", { key: team.id, id: `${team.id}-personal-menu-item-id` },
243
+ React.createElement(HeaderMenuItem, { key: team.id, id: `${team.id}-personal-menu-item`, "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
244
+ handleTeamClick({ team, type: "personal" });
245
+ },
246
+ // eslint-disable-next-line no-script-url
247
+ href: "javascript:void(0)", "data-testid": "header-team-switcher-menu-item" },
248
+ React.createElement("div", { className: headerDropdownMenuItemClassname },
249
+ React.createElement("span", { title: teamName, className: headerDropdownMenuItemTextClassname }, teamName),
250
+ isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
251
+ })
252
+ : null,
253
+ accountTeams.length > 0
254
+ ? sortedAccountTeamsWithNamesToDisplay.map((team) => {
255
+ const isSubmenuOpen = team.id === openAccountSubmenuId;
256
+ const isProjectTeamSelected = team.projectTeams &&
257
+ team.projectTeams.length > 0 &&
258
+ team.projectTeams.some((team) => team.id === selectedTeam?.id);
259
+ const isTeamSelected = team.id === selectedTeam?.id;
260
+ const isMenuSelected = isTeamSelected || isProjectTeamSelected;
261
+ return (React.createElement("div", { key: team.id, id: `${team.id}-account-menu` },
262
+ React.createElement(HeaderMenuItem, { "aria-expanded": isSubmenuOpen, "aria-selected": isMenuSelected, className: headerDropdownMenuItemAccountContainerClassname, onClick: (e) => handleOpenAccountSubmenu({ e, id: team.id }),
263
+ // eslint-disable-next-line no-script-url
264
+ href: "javascript:void(0)", "data-testid": "header-team-switcher-menu-account-accordion" },
265
+ React.createElement("div", { className: headerDropdownMenuItemAccountClassname },
266
+ React.createElement("div", { className: headerDropdownMenuItemTextIconClassname },
267
+ React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
268
+ isMenuSelected ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null),
269
+ React.createElement("div", { className: headerDropdownMenuItemAccountIconsClassname },
270
+ React.createElement(GroupAccount, { className: headerDropdownMenuItemAccountGroupIconClassname }),
271
+ React.createElement(ChevronDown, { className: headerDropdownMenuItemAccountChevronIconClassname })))),
272
+ React.createElement("div", { id: `${team.id}-account-submenu`, key: `${team.id}-account-submenu`, "aria-expanded": isSubmenuOpen, className: headerDropdownMenuItemAccountSubmenuClassname },
273
+ React.createElement(HeaderMenuItem, { key: `${team.id}-menu-item`, id: `${team.id}-account-menu-item`, "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
274
+ handleTeamClick({ team, type: "account" });
275
+ }, "data-testid": "header-team-switcher-menu-account-accordion-item",
276
+ // eslint-disable-next-line no-script-url
277
+ href: "javascript:void(0)" },
278
+ React.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
279
+ React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
280
+ isTeamSelected ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null)),
281
+ team.projectTeams && team.projectTeams.length > 0
282
+ ? team.projectTeams.map((team) => {
283
+ const isTeamSelected = team.id === selectedTeam?.id;
284
+ return (React.createElement("div", { key: team.id, id: `${team.id}-project-menu-item` },
285
+ React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
286
+ handleTeamClick({ team, type: "project" });
287
+ }, "data-testid": "header-team-switcher-menu-account-accordion-item",
288
+ // eslint-disable-next-line no-script-url
289
+ href: "javascript:void(0)" },
290
+ React.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
291
+ React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
292
+ isTeamSelected ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null))));
293
+ })
294
+ : null)));
295
+ })
296
+ : null,
297
+ standardTeams.length > 0
298
+ ? sortedStandardTeamsWithNamesToDisplay.map((team) => {
299
+ const isTeamSelected = team.id === selectedTeam?.id;
300
+ return (React.createElement("div", { key: team.id, id: `${team.id}-standard-menu-item` },
301
+ React.createElement(HeaderMenuItem, { "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => {
302
+ handleTeamClick({ team, type: "standard" });
303
+ }, "data-testid": "header-team-switcher-menu-item",
242
304
  // eslint-disable-next-line no-script-url
243
305
  href: "javascript:void(0)" },
244
- React.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
245
- React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, "Account Page"),
246
- isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)),
247
- team.projectTeams && team.projectTeams.length > 0
248
- ? team.projectTeams.map((team) => {
249
- const isTeamSelected = team.id === selectedTeam?.id;
250
- return (React.createElement(HeaderMenuItem, { key: team.id, "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => handleTeamClick({ team, type: "project" }), "data-testid": "header-team-switcher-menu-account-accordion-item",
251
- // eslint-disable-next-line no-script-url
252
- href: "javascript:void(0)" },
253
- React.createElement("div", { className: headerDropdownMenuItemClassname, style: { paddingLeft: "1rem" } },
254
- React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
255
- isTeamSelected ? (React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname })) : null)));
256
- })
257
- : null)));
258
- })
259
- : null,
260
- standardTeams.length > 0
261
- ? sortedStandardTeamsWithNamesToDisplay.map((team) => {
262
- const isTeamSelected = team.id === selectedTeam?.id;
263
- return (React.createElement(HeaderMenuItem, { key: team.id, "aria-selected": isTeamSelected, className: headerDropdownMenuItemContainerClassname, onClick: () => handleTeamClick({ team, type: "standard" }), "data-testid": "header-team-switcher-menu-item",
264
- // eslint-disable-next-line no-script-url
265
- href: "javascript:void(0)" },
266
- React.createElement("div", { className: headerDropdownMenuItemClassname },
267
- React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
268
- isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null)));
269
- })
270
- : null)));
306
+ React.createElement("div", { className: headerDropdownMenuItemClassname },
307
+ React.createElement("span", { title: team.nameToDisplay, className: headerDropdownMenuItemTextClassname }, team.nameToDisplay),
308
+ isTeamSelected ? React.createElement(CheckmarkFilled, { className: headerDropdownMenuItemIconClassname }) : null))));
309
+ })
310
+ : null))));
271
311
  }
272
312
  return null;
273
313
  }
@@ -18,7 +18,7 @@ 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, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }) {
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, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }) {
22
22
  // Support base header .e.g for an error state
23
23
  if (!config) {
24
24
  return (React.createElement(QueryClientProvider, { client: queryClient },
@@ -78,7 +78,7 @@ function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme = "g10", config, cr
78
78
  isAboutPlatformEnabled && (React.createElement(AboutPlatformMenuItem, { key: "about-platform", name: platform.name, baseServicesUrl: platform.baseServicesUrl })),
79
79
  tutorialScreenToShow && handleShowTutorial && (React.createElement(HeaderMenuItem, { key: "launch-tutorial", onClick: handleShowTutorial, icon: React.createElement(Book, null), "data-testid": "launch-tutorial", text: "Launch Tutorial", type: "button" })),
80
80
  ...supportMenuItems,
81
- ].filter(Boolean), history: history, isLaunchpad: isLaunchpad, trackEvent: trackEvent, user: user, userTeams: userTeams }),
81
+ ].filter(Boolean), history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, trackEvent: trackEvent, user: user, userTeams: userTeams }),
82
82
  isPrivacyModalRendered ? (React.createElement(PrivacyRedirect, { isOpen: true, baseEnvUrl: platform.baseEnvUrl, platformName: platform?.name, user: user })) : null));
83
83
  }
84
84
  /**
@@ -253,6 +253,80 @@ type PlatformNotification = {
253
253
  type: string;
254
254
  userId: string;
255
255
  };
256
+ interface Navigation {
257
+ features: {
258
+ "appSwitcher.enabled": boolean;
259
+ "docs.enabled": boolean;
260
+ "eventing.enabled": boolean;
261
+ "feedback.enabled": boolean;
262
+ "homePage.enabled": boolean;
263
+ "metering.enabled": boolean;
264
+ "notifications.enabled": boolean;
265
+ "notificationsCount.enabled": boolean;
266
+ "partner.enabled": boolean;
267
+ "support.enabled": boolean;
268
+ "welcome.enabled": boolean;
269
+ };
270
+ improveQuestions: [
271
+ {
272
+ key: string;
273
+ options: [string];
274
+ question: string;
275
+ type: string;
276
+ }
277
+ ];
278
+ navigation: [
279
+ {
280
+ name: string;
281
+ url: string;
282
+ }
283
+ ];
284
+ platform: {
285
+ addServiceRequestUrl: string;
286
+ baseEnvUrl: string;
287
+ baseServicesUrl: string;
288
+ cashEIAEnabled: boolean;
289
+ catalogContributorUrl: string;
290
+ catalogItemRequestLimit: number;
291
+ catalogRecipeRequestLimit: number;
292
+ communityUrl: string;
293
+ displayLogo: boolean;
294
+ feedbackUrl: string;
295
+ footerEnabled: boolean;
296
+ gaEnabled: boolean;
297
+ linkCatalogId: string;
298
+ instanceSwitcherEnabled: boolean;
299
+ inviteTime: number;
300
+ name: string;
301
+ onPremDeploymentEnabled: boolean;
302
+ personalTeamEnabled: boolean;
303
+ partnerRegex: string;
304
+ platformName: string;
305
+ platformOrganization: string;
306
+ pocTeamEnabled: boolean;
307
+ privateTeams: boolean;
308
+ requireTeamPurpose: boolean;
309
+ segmentEnabled: boolean;
310
+ sendMail: boolean;
311
+ signOutUrl: string;
312
+ standardUserIDCPInviteEnabled: boolean;
313
+ teamInviteTime: number;
314
+ temporayModalEnabled: boolean;
315
+ tilesEnabled: boolean;
316
+ tutorialEnabled: boolean;
317
+ tutorialVideoLink1: string;
318
+ tutorialVideoLink2: string;
319
+ tutorialVideoLink3: string;
320
+ tutorialVideoLink4: string;
321
+ tutorialVideoLink5: string;
322
+ version: string;
323
+ };
324
+ platformMessage: null | {
325
+ kind: string;
326
+ message: string;
327
+ title: string;
328
+ };
329
+ }
256
330
  type NavLink = {
257
331
  name: string;
258
332
  url: string;
@@ -272,9 +346,15 @@ type Props$I = {
272
346
  showChatButton?: boolean;
273
347
  showSelectTeamPurpose?: boolean;
274
348
  homeLink?: string;
349
+ agentAssistantStudioLink?: string;
350
+ agentAssistantLibraryLink?: string;
351
+ documentCollectionsLink?: string;
352
+ settingsLink?: string;
353
+ toolsLink?: string;
275
354
  joinCreateTrigger?: (props: any) => void;
276
355
  isLoading?: boolean;
277
356
  isOpen?: boolean;
357
+ navigation?: Navigation;
278
358
  navLinks?: NavLink[];
279
359
  personalTeams?: Array<SideNavTeam>;
280
360
  showChatTooltip?: boolean;
@@ -359,6 +439,9 @@ type Props$G = {
359
439
  enableNotificationsCount?: boolean;
360
440
  history?: any;
361
441
  isLaunchpad?: boolean;
442
+ isLoadingTeamSwitcher?: boolean;
443
+ isSuccessTeamSwitcher?: boolean;
444
+ setIsSuccessTeamSwitcher?: Function;
362
445
  leftPanel?: (args: {
363
446
  close: () => void;
364
447
  isOpen: boolean;
@@ -1410,6 +1493,9 @@ type Props = {
1410
1493
  };
1411
1494
  history?: any;
1412
1495
  isLaunchpad?: boolean;
1496
+ isLoadingTeamSwitcher?: boolean;
1497
+ isSuccessTeamSwitcher?: boolean;
1498
+ setIsSuccessTeamSwitcher?: Function;
1413
1499
  leftPanel?: (args: {
1414
1500
  close: () => void;
1415
1501
  isOpen: boolean;
@@ -1443,6 +1529,6 @@ type Props = {
1443
1529
  handleShowTutorial?: Function;
1444
1530
  tutorialScreenToShow?: string;
1445
1531
  };
1446
- declare function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme, config, createJoinTeamTrigger, history, isLaunchpad, leftPanel, platformName, productName, profileMenuItems, supportMenuItems, renderPrivacyRedirect, renderPrivacyStatement, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }: Props): React.JSX.Element;
1532
+ declare function UIShell({ analyticsHelpers, baseEnvUrl, carbonTheme, config, createJoinTeamTrigger, history, isLaunchpad, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, leftPanel, platformName, productName, profileMenuItems, supportMenuItems, renderPrivacyRedirect, renderPrivacyStatement, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, trackEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }: Props): React.JSX.Element;
1447
1533
 
1448
1534
  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.10-beta.3",
4
+ "version": "4.6.10-beta.5",
5
5
  "author": {
6
6
  "name": "Tim Bula",
7
7
  "email": "timrbula@gmail.com"
@@ -10,9 +10,27 @@ IBM Confidential
10
10
  @use "../../global/themes/shell-tokens" as shell;
11
11
 
12
12
  :root {
13
+ .#{$prefix}--header-dropdown-menu-container {
14
+ display: flex;
15
+ }
16
+
17
+ .#{$prefix}--header-dropdown-menu-loading {
18
+ align-items: center;
19
+ display: flex;
20
+ }
21
+
22
+ .#{$prefix}--header-dropdown-menu-success {
23
+ align-items: center;
24
+ display: flex;
25
+
26
+ svg path {
27
+ fill: var(--cds-tag-border-green);
28
+ }
29
+ }
30
+
13
31
  .#{$prefix}--header-dropdown-menu {
14
32
  list-style: none;
15
- width: 15rem;
33
+ max-width: 18.5625rem;
16
34
 
17
35
  .#{$prefix}--header__menu-title {
18
36
  display: flex;
@@ -33,14 +51,17 @@ IBM Confidential
33
51
 
34
52
  .#{$prefix}--header__menu {
35
53
  box-shadow: none;
36
- width: 18.5625rem;
54
+ min-width: 18.5625rem;
55
+ position: relative;
56
+ width: 100%;
37
57
 
38
58
  .#{$prefix}--bmrg-header-drop-down {
39
- position: absolute;
40
- max-height: 48rem;
59
+ max-height: min(48rem, 84vh);
60
+ min-width: 18.5625rem;
41
61
  overflow-y: auto;
42
- margin-right: 3.5625rem;
43
- width: 18.5625rem;
62
+ position: absolute;
63
+ right: 0;
64
+ width: 100%;
44
65
 
45
66
  a.#{$prefix}--header__menu-item {
46
67
  cursor: pointer;
@@ -78,7 +99,8 @@ IBM Confidential
78
99
  justify-content: space-between;
79
100
  }
80
101
 
81
- .#{$prefix}--header__menu-item[aria-selected="true"] {
102
+ .#{$prefix}--header__menu-item[aria-selected="true"],
103
+ .#{$prefix}--header__menu-item:hover {
82
104
  background-color: var(--cds-layer-hover-01) !important;
83
105
  }
84
106
  }
@@ -109,6 +131,10 @@ IBM Confidential
109
131
  }
110
132
  }
111
133
 
134
+ .#{$prefix}--header__menu-item:hover {
135
+ background-color: var(--cds-layer-hover-01) !important;
136
+ }
137
+
112
138
  .#{$prefix}--header__menu-item[aria-expanded="true"] {
113
139
  background-color: var(--cds-layer-hover-01) !important;
114
140
 
@@ -129,7 +155,7 @@ IBM Confidential
129
155
  transition: max-height 150ms ease-in-out, opacity 150ms ease-in-out;
130
156
 
131
157
  &[aria-expanded="true"] {
132
- max-height: 40rem;
158
+ max-height: 100rem;
133
159
  opacity: 1;
134
160
  overflow-y: auto;
135
161
  }
@@ -137,6 +163,10 @@ IBM Confidential
137
163
 
138
164
  .#{$prefix}--header-team-switcher-create-team-button-container {
139
165
  border-bottom: 0.0625rem solid var(--cds-border-subtle-00);
166
+
167
+ .#{$prefix}--header__menu-item:hover {
168
+ background-color: var(--cds-layer-hover-01) !important;
169
+ }
140
170
  }
141
171
 
142
172
  .#{$prefix}--header-team-switcher-create-team-button {