@boomerang-io/carbon-addons-boomerang-react 4.6.11-beta.2 → 4.6.11-beta.21

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.
@@ -0,0 +1,315 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { useQueryClient, useMutation } from 'react-query';
3
+ import { InlineLoading, HeaderMenu, HeaderMenuItem } from '@carbon/react';
4
+ import { CheckmarkFilled, AddAlt, GroupAccount, ChevronDown } from '@carbon/react/icons';
5
+ import sortBy from 'lodash.sortby';
6
+ import HeaderMenu$1 from './HeaderMenu.js';
7
+ import { resolver, serviceUrl } from '../../config/servicesConfig.js';
8
+ import { prefix } from '../../internal/settings.js';
9
+
10
+ /*
11
+ IBM Confidential
12
+ 694970X, 69497O0
13
+ © Copyright IBM Corp. 2022, 2025
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`;
18
+ const headerDropdownMenuClassname = `${prefix}--header-dropdown-menu`;
19
+ const headerDropdownMenuListClassname = `${prefix}--bmrg-header-drop-down`;
20
+ const headerDropdownMenuItemContainerClassname = `${prefix}--header-dropdown-menu-item-container`;
21
+ const headerDropdownMenuItemClassname = `${prefix}--header-dropdown-menu-item`;
22
+ const headerDropdownMenuItemTextIconClassname = `${prefix}--header-dropdown-menu-item-text-icon`;
23
+ const headerDropdownMenuItemTextClassname = `${prefix}--header-dropdown-menu-item-text`;
24
+ const headerDropdownMenuItemIconClassname = `${prefix}--header-dropdown-menu-item-icon`;
25
+ const headerDropdownMenuItemAccountContainerClassname = `${prefix}--header-dropdown-menu-item-account-container`;
26
+ const headerDropdownMenuItemAccountClassname = `${prefix}--header-dropdown-menu-item-account`;
27
+ const headerDropdownMenuItemAccountIconsClassname = `${prefix}--header-dropdown-menu-item-account-icons`;
28
+ const headerDropdownMenuItemAccountGroupIconClassname = `${prefix}--header-dropdown-menu-item-account-group-icon`;
29
+ const headerDropdownMenuItemAccountChevronIconClassname = `${prefix}--header-dropdown-menu-item-account-chevron-icon`;
30
+ const headerDropdownMenuItemAccountSubmenuClassname = `${prefix}--header-dropdown-menu-item-account-submenu`;
31
+ const headerTeamSwitcherCreateTeamButtonContainerClassname = `${prefix}--header-team-switcher-create-team-button-container`;
32
+ const headerTeamSwitcherCreateTeamButtonClassname = `${prefix}--header-team-switcher-create-team-button`;
33
+ const headerTeamSwitcherCreateTeamButtonTextClassname = `${prefix}--header-team-switcher-create-team-button-text`;
34
+ const headerTeamSwitcherCreateTeamButtonIconClassname = `${prefix}--header-team-switcher-create-team-button-icon`;
35
+ function HeaderTeamSwitcher({ analyticsHelpers, baseServicesUrl, createJoinTeamTrigger, history, isLaunchpad, isLoadingTeamSwitcher, isSuccessTeamSwitcher, setIsSuccessTeamSwitcher, menuAriaLabelRecord, menuButtonId, menuListId, navigationPlatform, teamsQuery, trackEvent, user, userTeams, }) {
36
+ const queryClient = useQueryClient();
37
+ const [selectedTeam, setSelectedTeam] = useState();
38
+ const [openAccountSubmenuId, setOpenAccountSubmenuId] = useState("");
39
+ const hasUserTeams = Boolean(userTeams);
40
+ const showSelectTeamPurpose = navigationPlatform?.requireTeamPurpose;
41
+ const createTeamButtonText = showSelectTeamPurpose ? "Create Team" : "Create or Join Team";
42
+ const userTeamInstanceSwitcherDefault = user?.teamInstanceSwitcherDefault;
43
+ const profileUrl = serviceUrl.resourceUserProfile({ baseServicesUrl });
44
+ const teamLink = ({ teamId }) => {
45
+ return `${navigationPlatform.baseEnvUrl}/launchpad/teams/${teamId}`;
46
+ };
47
+ const { mutateAsync: mutateUserProfile, isLoading: mutateUserProfileIsLoading } = useMutation(resolver.patchUserProfile, {
48
+ onSuccess: () => {
49
+ queryClient.invalidateQueries(profileUrl);
50
+ },
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]);
61
+ useEffect(() => {
62
+ let accountTeams, standardTeams, personalTeam = [];
63
+ if (hasUserTeams) {
64
+ accountTeams = userTeams?.data?.accountTeams ?? [];
65
+ standardTeams = userTeams?.data?.standardTeams ?? [];
66
+ personalTeam = userTeams?.data?.personalTeam ?? [];
67
+ }
68
+ else {
69
+ accountTeams = teamsQuery?.data?.accountTeams ?? [];
70
+ standardTeams = teamsQuery?.data?.standardTeams ?? [];
71
+ personalTeam = teamsQuery?.data?.personalTeam ?? [];
72
+ }
73
+ const userHasPersonalTeam = personalTeam.length > 0;
74
+ const userHasAccountTeams = accountTeams.length > 0;
75
+ const userHasStandardTeams = standardTeams.length > 0;
76
+ const userHasTeams = userHasPersonalTeam || userHasAccountTeams || userHasStandardTeams;
77
+ const handleSelectTeam = async ({ team }) => {
78
+ setSelectedTeam(team);
79
+ if (!userTeamInstanceSwitcherDefault) {
80
+ const body = {
81
+ teamInstanceSwitcherDefault: team.id,
82
+ };
83
+ await mutateUserProfile({ baseServicesUrl, body });
84
+ }
85
+ };
86
+ if (userHasTeams) {
87
+ if (!userTeamInstanceSwitcherDefault) {
88
+ if (userHasPersonalTeam) {
89
+ handleSelectTeam({ team: personalTeam[0] });
90
+ }
91
+ else if (userHasAccountTeams) {
92
+ const sortedAccounts = sortBy(accountTeams, [
93
+ (account) => (account.displayName ? account.displayName : account.name),
94
+ ]);
95
+ handleSelectTeam({ team: sortedAccounts[0] });
96
+ }
97
+ else if (userHasStandardTeams) {
98
+ const sortedStandardTeams = sortBy(standardTeams, [
99
+ (standardTeam) => (standardTeam.displayName ? standardTeam.displayName : standardTeam.name),
100
+ ]);
101
+ handleSelectTeam({ team: sortedStandardTeams[0] });
102
+ }
103
+ }
104
+ else if (selectedTeam?.id !== userTeamInstanceSwitcherDefault) {
105
+ let allProjectTeams = [];
106
+ if (userHasAccountTeams) {
107
+ accountTeams.forEach((team) => {
108
+ if (team.projectTeams && team.projectTeams.length > 0) {
109
+ allProjectTeams = allProjectTeams.concat(team.projectTeams);
110
+ }
111
+ });
112
+ }
113
+ const allTeams = personalTeam.concat(standardTeams, accountTeams, allProjectTeams);
114
+ const newSelectedTeam = allTeams.find((team) => team.id === userTeamInstanceSwitcherDefault);
115
+ handleSelectTeam({ team: newSelectedTeam });
116
+ }
117
+ }
118
+ }, [
119
+ baseServicesUrl,
120
+ hasUserTeams,
121
+ mutateUserProfile,
122
+ selectedTeam,
123
+ teamsQuery?.data?.accountTeams,
124
+ teamsQuery?.data?.personalTeam,
125
+ teamsQuery?.data?.standardTeams,
126
+ userTeamInstanceSwitcherDefault,
127
+ userTeams?.data?.accountTeams,
128
+ userTeams?.data?.personalTeam,
129
+ userTeams?.data?.standardTeams,
130
+ ]);
131
+ const handleHeaderMenuClick = () => {
132
+ setOpenAccountSubmenuId("");
133
+ };
134
+ const handleTeamClick = ({ team, type }) => {
135
+ setOpenAccountSubmenuId("");
136
+ if (analyticsHelpers?.navigateEventHandler && trackEvent) {
137
+ analyticsHelpers.navigateEventHandler({
138
+ action: `Clicked ${team.name} in Team Switcher`,
139
+ category: "Team Switcher",
140
+ destinationPath: teamLink({ teamId: team.id }),
141
+ teamId: team.id,
142
+ teamType: type,
143
+ trackEvent,
144
+ });
145
+ }
146
+ if (isLaunchpad && Boolean(history)) {
147
+ history.push(`/teams/${team.id}`);
148
+ }
149
+ else {
150
+ window.open(teamLink({ teamId: team.id }), "_self");
151
+ }
152
+ };
153
+ const handleCreateJoinTeamClick = (e) => {
154
+ if (analyticsHelpers?.ctaEventHandler && trackEvent) {
155
+ analyticsHelpers.ctaEventHandler({
156
+ category: "Team Switcher",
157
+ CTA: "Create/Join team clicked",
158
+ pageName: "",
159
+ trackEvent,
160
+ });
161
+ }
162
+ if (createJoinTeamTrigger) {
163
+ createJoinTeamTrigger(e);
164
+ }
165
+ else {
166
+ window.open(`${navigationPlatform.baseEnvUrl}/launchpad?createJoinTeam=true`, "_self");
167
+ }
168
+ };
169
+ const handleOpenAccountSubmenu = ({ e, id }) => {
170
+ e.stopPropagation();
171
+ if (openAccountSubmenuId === id) {
172
+ setOpenAccountSubmenuId("");
173
+ }
174
+ else {
175
+ setOpenAccountSubmenuId(id);
176
+ }
177
+ };
178
+ if (userTeams?.isLoading || teamsQuery?.isLoading || mutateUserProfileIsLoading) {
179
+ return (React.createElement("div", { style: { display: "flex", alignItems: "center" } },
180
+ React.createElement(InlineLoading, null)));
181
+ }
182
+ if (userTeams?.data || teamsQuery?.data) {
183
+ let accountTeams, standardTeams, personalTeam = [];
184
+ if (hasUserTeams) {
185
+ accountTeams = userTeams?.data?.accountTeams ?? [];
186
+ standardTeams = userTeams?.data?.standardTeams ?? [];
187
+ personalTeam = userTeams?.data?.personalTeam ?? [];
188
+ }
189
+ else {
190
+ accountTeams = teamsQuery?.data?.accountTeams ?? [];
191
+ standardTeams = teamsQuery?.data?.standardTeams ?? [];
192
+ personalTeam = teamsQuery?.data?.personalTeam ?? [];
193
+ }
194
+ let sortedAccountTeamsWithNamesToDisplay = [];
195
+ let sortedStandardTeamsWithNamesToDisplay = [];
196
+ if (accountTeams?.length > 0) {
197
+ const newAccountTeams = accountTeams.map((team) => {
198
+ let newProjectTeams = [];
199
+ if (team.projectTeams && team.projectTeams.length > 0) {
200
+ newProjectTeams = team.projectTeams?.map((team) => ({
201
+ ...team,
202
+ nameToDisplay: team.displayName ? team.displayName : team.name,
203
+ }));
204
+ }
205
+ return {
206
+ ...team,
207
+ nameToDisplay: team.displayName ? team.displayName : team.name,
208
+ projectTeams: sortBy(newProjectTeams, ["nameToDisplay"]),
209
+ };
210
+ });
211
+ sortedAccountTeamsWithNamesToDisplay = sortBy(newAccountTeams, ["nameToDisplay"]);
212
+ }
213
+ if (standardTeams?.length > 0) {
214
+ const newStandardTeams = standardTeams.map((team) => {
215
+ return {
216
+ ...team,
217
+ nameToDisplay: team.displayName ? team.displayName : team.name,
218
+ };
219
+ });
220
+ sortedStandardTeamsWithNamesToDisplay = sortBy(newStandardTeams, ["nameToDisplay"]);
221
+ }
222
+ let selectedTeamName = selectedTeam?.displayName ? selectedTeam.displayName : selectedTeam?.name;
223
+ if (selectedTeamName && selectedTeamName.length > 65) {
224
+ selectedTeamName = selectedTeamName.slice(0, 65) + "...";
225
+ }
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",
304
+ // eslint-disable-next-line no-script-url
305
+ href: "javascript:void(0)" },
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))));
311
+ }
312
+ return null;
313
+ }
314
+
315
+ export { HeaderTeamSwitcher as default };
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  import { QueryClientProvider } from 'react-query';
3
- import { Email, HelpDesk, Forum, ChatLaunch, Cognitive, Book } from '@carbon/react/icons';
3
+ import { Email, Document, HelpDesk, CatalogPublish, Policy, 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,10 +18,11 @@ IBM Confidential
18
18
  694970X, 69497O0
19
19
  © Copyright IBM Corp. 2022, 2024
20
20
  */
21
- function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformName, productName, profileMenuItems = [], supportMenuItems = [], renderPrivacyRedirect = true, renderPrivacyStatement = true, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, 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
- return (React.createElement(Header, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, productName: productName || platformName || "" }));
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
26
  }
26
27
  const { features, navigation, platform, platformMessage } = config;
27
28
  const names = getProductAndPlatformNames({ productName, platformName, platform });
@@ -61,15 +62,19 @@ function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformN
61
62
  */
62
63
  const isPrivacyStatementDisabled = renderPrivacyStatement === false || features?.["consent.enabled"] === false;
63
64
  return (React.createElement(QueryClientProvider, { client: queryClient },
64
- React.createElement(Header, { baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, 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: [
65
+ 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: [
65
66
  isUserEnabled && (React.createElement(ProfileSettingsMenuItem, { key: "profile-settings", baseServicesUrl: platform.baseServicesUrl, src: `${platform.baseServicesUrl}/users/image/${user?.email}`, userName: user?.displayName ?? user?.name })),
66
67
  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" })),
67
68
  !isPrivacyStatementDisabled && (React.createElement(PrivacyStatementMenuItem, { key: "privacy-statement", baseServicesUrl: platform.baseServicesUrl, platformEmail: platform?.platformEmail })),
68
69
  ...profileMenuItems,
69
70
  isSignOutEnabled && React.createElement(SignOutMenuItem, { key: "Sign Out", signOutLink: platform.signOutUrl }),
70
71
  ].filter(Boolean), supportMenuItems: [
72
+ React.createElement(HeaderMenuItem, { key: "docs", href: platform?.docs?.url, icon: React.createElement(Document, null), "data-testid": "docs", kind: "app", text: "Docs", type: "link" }),
71
73
  isSupportEnabled &&
72
74
  (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" }))),
75
+ 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" }),
76
+ 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
+ React.createElement("span", { style: { "borderBottom": "1px solid #b8c1c1" } }),
73
78
  isCommunityEnabled && (React.createElement(HeaderMenuItem, { key: "community", href: platform?.communityUrl, icon: React.createElement(Forum, null), kind: "external", text: "Community", type: "link" })),
74
79
  isFeedbackEnabled && (React.createElement(FeedbackMenuItem, { key: "feedback", platformName: platform?.platformName, platformOrganization: platform?.platformOrganization, sendIdeasUrl: sendIdeasUrl })),
75
80
  !isPartnerUser && askICAEnabled ? (React.createElement(HeaderMenuItem, { key: "chat-launch", href: platform?.askICAUrl, icon: React.createElement(ChatLaunch, null), "data-testid": "askICA-chatlaunch", kind: "external", text: "AskICA", type: "link" })) : null,
@@ -77,7 +82,7 @@ function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformN
77
82
  isAboutPlatformEnabled && (React.createElement(AboutPlatformMenuItem, { key: "about-platform", name: platform.name, baseServicesUrl: platform.baseServicesUrl })),
78
83
  tutorialScreenToShow && handleShowTutorial && (React.createElement(HeaderMenuItem, { key: "launch-tutorial", onClick: handleShowTutorial, icon: React.createElement(Book, null), "data-testid": "launch-tutorial", text: "Launch Tutorial", type: "button" })),
79
84
  ...supportMenuItems,
80
- ].filter(Boolean), userTeams: userTeams }),
85
+ ].filter(Boolean), history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, trackEvent: trackEvent, user: user, userTeams: userTeams }),
81
86
  isPrivacyModalRendered ? (React.createElement(PrivacyRedirect, { isOpen: true, baseEnvUrl: platform.baseEnvUrl, platformName: platform?.name, user: user })) : null));
82
87
  }
83
88
  /**
@@ -223,6 +223,7 @@ type User = {
223
223
  hasOpenPersonalTeamRequest?: boolean;
224
224
  personalTeamAssistantsAccess?: boolean;
225
225
  personalTeamAssistantsAccessRequested?: boolean;
226
+ teamInstanceSwitcherDefault?: string | null;
226
227
  };
227
228
  type UserTeams = {
228
229
  accountTeams: {
@@ -252,6 +253,89 @@ type PlatformNotification = {
252
253
  type: string;
253
254
  userId: string;
254
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
+ admin: {
297
+ url: string;
298
+ };
299
+ docs: {
300
+ url: string;
301
+ };
302
+ catalog: {
303
+ url: string;
304
+ };
305
+ gaEnabled: boolean;
306
+ linkCatalogId: string;
307
+ instanceSwitcherEnabled: boolean;
308
+ inviteTime: number;
309
+ name: string;
310
+ onPremDeploymentEnabled: boolean;
311
+ personalTeamEnabled: boolean;
312
+ partnerRegex: string;
313
+ platformName: string;
314
+ platformOrganization: string;
315
+ pocTeamEnabled: boolean;
316
+ privateTeams: boolean;
317
+ requireTeamPurpose: boolean;
318
+ segmentEnabled: boolean;
319
+ sendMail: boolean;
320
+ signOutUrl: string;
321
+ standardUserIDCPInviteEnabled: boolean;
322
+ teamInviteTime: number;
323
+ temporayModalEnabled: boolean;
324
+ tilesEnabled: boolean;
325
+ tutorialEnabled: boolean;
326
+ tutorialVideoLink1: string;
327
+ tutorialVideoLink2: string;
328
+ tutorialVideoLink3: string;
329
+ tutorialVideoLink4: string;
330
+ tutorialVideoLink5: string;
331
+ version: string;
332
+ };
333
+ platformMessage: null | {
334
+ kind: string;
335
+ message: string;
336
+ title: string;
337
+ };
338
+ }
255
339
  type NavLink = {
256
340
  name: string;
257
341
  url: string;
@@ -271,9 +355,15 @@ type Props$I = {
271
355
  showChatButton?: boolean;
272
356
  showSelectTeamPurpose?: boolean;
273
357
  homeLink?: string;
358
+ agentAssistantStudioLink?: string;
359
+ agentAssistantLibraryLink?: string;
360
+ documentCollectionsLink?: string;
361
+ settingsLink?: string;
362
+ toolsLink?: string;
274
363
  joinCreateTrigger?: (props: any) => void;
275
364
  isLoading?: boolean;
276
365
  isOpen?: boolean;
366
+ navigation?: Navigation;
277
367
  navLinks?: NavLink[];
278
368
  personalTeams?: Array<SideNavTeam>;
279
369
  showChatTooltip?: boolean;
@@ -346,14 +436,21 @@ type Props$H = React.ComponentPropsWithoutRef<"img"> & {
346
436
  declare function Avatar({ alt, className, size, src, style, title, userName, plainTooltip, ...rest }: Props$H): React.JSX.Element;
347
437
 
348
438
  type Props$G = {
439
+ analyticsHelpers?: any;
349
440
  baseServicesUrl?: string;
350
441
  baseEnvUrl?: string;
351
442
  carbonTheme?: "white" | "g10" | "g90" | "g100";
352
443
  className?: string;
444
+ createJoinTeamTrigger?: Function;
353
445
  enableAppSwitcher?: boolean;
354
446
  instanceSwitcherEnabled?: boolean;
355
447
  enableNotifications?: boolean;
356
448
  enableNotificationsCount?: boolean;
449
+ history?: any;
450
+ isLaunchpad?: boolean;
451
+ isLoadingTeamSwitcher?: boolean;
452
+ isSuccessTeamSwitcher?: boolean;
453
+ setIsSuccessTeamSwitcher?: Function;
357
454
  leftPanel?: (args: {
358
455
  close: () => void;
359
456
  isOpen: boolean;
@@ -381,7 +478,9 @@ type Props$G = {
381
478
  supportMenuItems?: React.ReactNode[];
382
479
  instanceSwitcherMenuItems?: React.ReactNode[];
383
480
  templateMeteringEvent?: (props: any) => void;
481
+ trackEvent?: Function;
384
482
  triggerEvent?: (props: any) => any;
483
+ user?: User;
385
484
  userTeams?: {
386
485
  data: any;
387
486
  isLoading: boolean;
@@ -1354,7 +1453,9 @@ type Props$1 = {
1354
1453
  declare function ToggleComponent({ helperText, id, invalid, invalidText, reversed, label, labelText, labelA, labelB, orientation, tooltipClassName, tooltipContent, tooltipProps, ...toggleProps }: Props$1): React.JSX.Element;
1355
1454
 
1356
1455
  type Props = {
1456
+ analyticsHelpers?: any;
1357
1457
  carbonTheme?: "white" | "g10" | "g90" | "g100";
1458
+ createJoinTeamTrigger?: Function;
1358
1459
  baseEnvUrl?: string;
1359
1460
  config?: {
1360
1461
  features?: {
@@ -1376,6 +1477,8 @@ type Props = {
1376
1477
  baseEnvUrl: string;
1377
1478
  baseServicesUrl: string;
1378
1479
  communityUrl?: string;
1480
+ releaseNotesUrl?: string;
1481
+ legalTermsUrl?: string;
1379
1482
  feedbackUrl?: string;
1380
1483
  name?: string;
1381
1484
  platformEmail?: string;
@@ -1383,6 +1486,9 @@ type Props = {
1383
1486
  platformVersion: string;
1384
1487
  platformVersionError: boolean;
1385
1488
  platformOrganization?: string;
1489
+ docs?: {
1490
+ url: string;
1491
+ };
1386
1492
  privateTeams?: boolean;
1387
1493
  sendIdeasUrl?: string;
1388
1494
  sendMail?: boolean;
@@ -1399,6 +1505,11 @@ type Props = {
1399
1505
  };
1400
1506
  platformMessage?: any;
1401
1507
  };
1508
+ history?: any;
1509
+ isLaunchpad?: boolean;
1510
+ isLoadingTeamSwitcher?: boolean;
1511
+ isSuccessTeamSwitcher?: boolean;
1512
+ setIsSuccessTeamSwitcher?: Function;
1402
1513
  leftPanel?: (args: {
1403
1514
  close: () => void;
1404
1515
  isOpen: boolean;
@@ -1420,6 +1531,7 @@ type Props = {
1420
1531
  };
1421
1532
  supportMenuItems?: React.ReactNode[];
1422
1533
  templateMeteringEvent?: (props: any) => void;
1534
+ trackEvent?: Function;
1423
1535
  triggerEvent?: (props: any) => any;
1424
1536
  user?: User;
1425
1537
  userTeams?: {
@@ -1431,6 +1543,6 @@ type Props = {
1431
1543
  handleShowTutorial?: Function;
1432
1544
  tutorialScreenToShow?: string;
1433
1545
  };
1434
- declare function UIShell({ baseEnvUrl, carbonTheme, config, leftPanel, platformName, productName, profileMenuItems, supportMenuItems, renderPrivacyRedirect, renderPrivacyStatement, rightPanel, handleShowTutorial, skipToContentProps, templateMeteringEvent, triggerEvent, tutorialScreenToShow, user, userTeams, enableIcaMacs, }: Props): React.JSX.Element;
1546
+ 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;
1435
1547
 
1436
1548
  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,13 +1,13 @@
1
1
  {
2
2
  "name": "@boomerang-io/carbon-addons-boomerang-react",
3
3
  "description": "Carbon Addons for Boomerang apps",
4
- "version": "4.6.11-beta.2",
4
+ "version": "4.6.11-beta.21",
5
5
  "author": {
6
6
  "name": "Tim Bula",
7
7
  "email": "timrbula@gmail.com"
8
8
  },
9
9
  "license": "Apache-2",
10
- "repository": {
10
+ "repository": {
11
11
  "type": "git",
12
12
  "url": "git@github.com:boomerang-io/carbon-addons-boomerang-react"
13
13
  },
@@ -259,9 +259,3 @@ IBM Confidential
259
259
  .#{$prefix}--teamSelectModalBody {
260
260
  overflow: visible;
261
261
  }
262
-
263
- .#{$prefix}--teamSelectionModalContainer {
264
- max-width: 40rem;
265
- max-height: 13.25rem;
266
- }
267
-