@boomerang-io/carbon-addons-boomerang-react 4.6.5-beta.4 → 4.6.5-beta.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/Header/Header.js +15 -11
- package/dist/cjs/components/UIShell/UIShell.js +2 -1
- package/dist/esm/components/Header/Header.js +16 -12
- package/dist/esm/components/UIShell/UIShell.js +2 -1
- package/dist/types/index.d.ts +4 -0
- package/package.json +1 -1
- package/scss/components/Header/_header.scss +10 -6
|
@@ -54,8 +54,9 @@ const MenuAriaLabelRecord = {
|
|
|
54
54
|
Switcher: "Switcher menu",
|
|
55
55
|
};
|
|
56
56
|
const headerButtonClassNames = "cds--btn--icon-only cds--header__action cds--btn cds--btn--primary cds--btn--icon-only cds--btn cds--btn--primary";
|
|
57
|
+
const instanceCheckMarkStyle = "instance-checkmark-style";
|
|
57
58
|
function Header(props) {
|
|
58
|
-
const { productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, navLinks, prefixName = "", rightPanel, skipToContentProps, templateMeteringEvent, triggerEvent, userTeams, } = props;
|
|
59
|
+
const { productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, navLinks, platform, prefixName = "", rightPanel, skipToContentProps, templateMeteringEvent, triggerEvent, userTeams, } = props;
|
|
59
60
|
return (React__default.default.createElement(React__default.default.Fragment, null,
|
|
60
61
|
React__default.default.createElement(react.Theme, { theme: carbonTheme },
|
|
61
62
|
React__default.default.createElement(react.Header, { "aria-label": "App navigation header", className: className },
|
|
@@ -66,9 +67,8 @@ function Header(props) {
|
|
|
66
67
|
? 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)))
|
|
67
68
|
: null),
|
|
68
69
|
React__default.default.createElement(react.HeaderGlobalBar, null,
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
menuItems: props.instanceSwitcherMenuItems }),
|
|
70
|
+
props?.instanceSwitcherEnabled &&
|
|
71
|
+
React__default.default.createElement(InstanceSwitcherMenu, { enabled: Boolean(props.instanceSwitcherEnabled), menuItems: platform?.instances }),
|
|
72
72
|
React__default.default.createElement(RequestsMenu, { baseEnvUrl: baseEnvUrl, enabled: Boolean(props.requestSummary), summary: props.requestSummary }),
|
|
73
73
|
React__default.default.createElement(NotificationsMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: Boolean(props.enableNotifications), countEnabled: Boolean(props.enableNotificationsCount) }),
|
|
74
74
|
React__default.default.createElement(SupportMenu, { enabled: Array.isArray(props.supportMenuItems) && props.supportMenuItems.length > 0, menuItems: props.supportMenuItems }),
|
|
@@ -78,18 +78,22 @@ function Header(props) {
|
|
|
78
78
|
React__default.default.createElement(NotificationsContainer.default, { enableMultiContainer: true, containerId: `${settings.prefix}--bmrg-header-notifications` })));
|
|
79
79
|
}
|
|
80
80
|
function InstanceSwitcherMenu(props) {
|
|
81
|
+
const currentURL = "https://au.ica.ibm.com";
|
|
81
82
|
const { isOpen, toggleActive, ref } = useHeaderMenu.default(MenuButtonId.InstanceSwitcher);
|
|
82
83
|
if (!props.enabled) {
|
|
83
84
|
return null;
|
|
84
85
|
}
|
|
85
|
-
return (React__default.default.createElement("div", { style: { position: "relative" }, ref: ref },
|
|
86
|
+
return (React__default.default.createElement("div", { className: `${settings.prefix}--bmrg-header-instance-switcher`, style: { position: "relative" }, ref: ref },
|
|
86
87
|
React__default.default.createElement("button", { "aria-controls": MenuListId.instanceSwitcher, "aria-expanded": isOpen, "aria-haspopup": "menu", "aria-label": MenuAriaLabelRecord.instanceSwitcher, className: headerButtonClassNames, "data-testid": "header-instanceSwitcher-link", id: MenuButtonId.InstanceSwitcher, onClick: toggleActive },
|
|
87
|
-
React__default.default.createElement(icons.
|
|
88
|
-
isOpen ? (React__default.default.createElement(HeaderMenu.default, { "aria-labelledby": MenuButtonId.InstanceSwitcher, id: MenuListId.instanceSwitcher },
|
|
89
|
-
React__default.default.createElement(react.HeaderMenuItem, {
|
|
90
|
-
React__default.default.createElement("div", null,
|
|
91
|
-
|
|
92
|
-
|
|
88
|
+
React__default.default.createElement(icons.Wikis, { size: 20 })),
|
|
89
|
+
isOpen ? (React__default.default.createElement(HeaderMenu.default, { "aria-labelledby": MenuButtonId.InstanceSwitcher, id: MenuListId.instanceSwitcher }, Array.isArray(props.menuItems)
|
|
90
|
+
? props.menuItems.map((item) => (React__default.default.createElement(react.HeaderMenuItem, { "aria-label": `Instance Switcher for ${item.instanceName}`, "data-testid": "header-menu-instance-switcher", href: item.url, isCurrentPage: window?.location?.href && item.url ? window.location.href.startsWith(item.url) : false, key: item.instanceName, target: "_self", rel: "noopener noreferrer" },
|
|
91
|
+
React__default.default.createElement("div", null,
|
|
92
|
+
React__default.default.createElement("span", null, "AU"),
|
|
93
|
+
currentURL.includes((item.instanceName).toLowerCase()) ? React__default.default.createElement("span", { className: instanceCheckMarkStyle },
|
|
94
|
+
React__default.default.createElement(icons.Checkmark, null),
|
|
95
|
+
" ") : ""))))
|
|
96
|
+
: null)) : null));
|
|
93
97
|
}
|
|
94
98
|
function RequestsMenu(props) {
|
|
95
99
|
const { isOpen, toggleActive, ref } = useHeaderMenu.default(MenuButtonId.Requests);
|
|
@@ -40,6 +40,7 @@ function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformN
|
|
|
40
40
|
* Check feature enablement via explicit feature flags
|
|
41
41
|
*/
|
|
42
42
|
const isAppSwitcherEnabled = Boolean(features?.["appSwitcher.enabled"]);
|
|
43
|
+
const instanceSwitcherEnabled = Boolean(platform?.["instanceSwitcherEnabled"]);
|
|
43
44
|
const isFeedbackEnabled = Boolean(features?.["feedback.enabled"]);
|
|
44
45
|
const isNotificationsEnabled = Boolean(features?.["notifications.enabled"]);
|
|
45
46
|
const isNotificationsCountEnabled = Boolean(features?.["notificationsCount.enabled"]);
|
|
@@ -68,7 +69,7 @@ function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformN
|
|
|
68
69
|
*/
|
|
69
70
|
const isPrivacyStatementDisabled = renderPrivacyStatement === false || features?.["consent.enabled"] === false;
|
|
70
71
|
return (React__default.default.createElement(reactQuery.QueryClientProvider, { client: servicesConfig.queryClient },
|
|
71
|
-
React__default.default.createElement(Header.default, { baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, enableAppSwitcher: isAppSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, leftPanel: leftPanel, navLinks: navigation, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
|
|
72
|
+
React__default.default.createElement(Header.default, { 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: [
|
|
72
73
|
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 })),
|
|
73
74
|
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" })),
|
|
74
75
|
!isPrivacyStatementDisabled && (React__default.default.createElement(PrivacyStatement.PrivacyStatementMenuItem, { key: "privacy-statement", baseServicesUrl: platform.baseServicesUrl, platformEmail: platform?.platformEmail })),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { Theme, Header as Header$1, SkipToContent, HeaderName, HeaderNavigation, HeaderMenuItem, HeaderGlobalBar, HeaderPanel, HeaderMenuButton, SideNav, SideNavItems, SideNavLink } from '@carbon/react';
|
|
3
|
-
import {
|
|
3
|
+
import { Wikis, Checkmark, Collaborate, NotificationNew, Notification, Help, UserAvatar, Close, Switcher, OpenPanelFilledRight } from '@carbon/react/icons';
|
|
4
4
|
import HeaderAppSwitcher from './HeaderAppSwitcher.js';
|
|
5
5
|
import HeaderMenu from './HeaderMenu.js';
|
|
6
6
|
import NotificationsContainer from '../Notifications/NotificationsContainer.js';
|
|
@@ -46,8 +46,9 @@ const MenuAriaLabelRecord = {
|
|
|
46
46
|
Switcher: "Switcher menu",
|
|
47
47
|
};
|
|
48
48
|
const headerButtonClassNames = "cds--btn--icon-only cds--header__action cds--btn cds--btn--primary cds--btn--icon-only cds--btn cds--btn--primary";
|
|
49
|
+
const instanceCheckMarkStyle = "instance-checkmark-style";
|
|
49
50
|
function Header(props) {
|
|
50
|
-
const { productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, navLinks, prefixName = "", rightPanel, skipToContentProps, templateMeteringEvent, triggerEvent, userTeams, } = props;
|
|
51
|
+
const { productName, baseEnvUrl, baseServicesUrl, carbonTheme = "g10", className, navLinks, platform, prefixName = "", rightPanel, skipToContentProps, templateMeteringEvent, triggerEvent, userTeams, } = props;
|
|
51
52
|
return (React.createElement(React.Fragment, null,
|
|
52
53
|
React.createElement(Theme, { theme: carbonTheme },
|
|
53
54
|
React.createElement(Header$1, { "aria-label": "App navigation header", className: className },
|
|
@@ -58,9 +59,8 @@ function Header(props) {
|
|
|
58
59
|
? 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)))
|
|
59
60
|
: null),
|
|
60
61
|
React.createElement(HeaderGlobalBar, null,
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
menuItems: props.instanceSwitcherMenuItems }),
|
|
62
|
+
props?.instanceSwitcherEnabled &&
|
|
63
|
+
React.createElement(InstanceSwitcherMenu, { enabled: Boolean(props.instanceSwitcherEnabled), menuItems: platform?.instances }),
|
|
64
64
|
React.createElement(RequestsMenu, { baseEnvUrl: baseEnvUrl, enabled: Boolean(props.requestSummary), summary: props.requestSummary }),
|
|
65
65
|
React.createElement(NotificationsMenu, { baseEnvUrl: baseEnvUrl, baseServicesUrl: baseServicesUrl, enabled: Boolean(props.enableNotifications), countEnabled: Boolean(props.enableNotificationsCount) }),
|
|
66
66
|
React.createElement(SupportMenu, { enabled: Array.isArray(props.supportMenuItems) && props.supportMenuItems.length > 0, menuItems: props.supportMenuItems }),
|
|
@@ -70,18 +70,22 @@ function Header(props) {
|
|
|
70
70
|
React.createElement(NotificationsContainer, { enableMultiContainer: true, containerId: `${prefix}--bmrg-header-notifications` })));
|
|
71
71
|
}
|
|
72
72
|
function InstanceSwitcherMenu(props) {
|
|
73
|
+
const currentURL = "https://au.ica.ibm.com";
|
|
73
74
|
const { isOpen, toggleActive, ref } = useHeaderMenu(MenuButtonId.InstanceSwitcher);
|
|
74
75
|
if (!props.enabled) {
|
|
75
76
|
return null;
|
|
76
77
|
}
|
|
77
|
-
return (React.createElement("div", { style: { position: "relative" }, ref: ref },
|
|
78
|
+
return (React.createElement("div", { className: `${prefix}--bmrg-header-instance-switcher`, style: { position: "relative" }, ref: ref },
|
|
78
79
|
React.createElement("button", { "aria-controls": MenuListId.instanceSwitcher, "aria-expanded": isOpen, "aria-haspopup": "menu", "aria-label": MenuAriaLabelRecord.instanceSwitcher, className: headerButtonClassNames, "data-testid": "header-instanceSwitcher-link", id: MenuButtonId.InstanceSwitcher, onClick: toggleActive },
|
|
79
|
-
React.createElement(
|
|
80
|
-
isOpen ? (React.createElement(HeaderMenu, { "aria-labelledby": MenuButtonId.InstanceSwitcher, id: MenuListId.instanceSwitcher },
|
|
81
|
-
React.createElement(HeaderMenuItem, {
|
|
82
|
-
React.createElement("div", null,
|
|
83
|
-
|
|
84
|
-
|
|
80
|
+
React.createElement(Wikis, { size: 20 })),
|
|
81
|
+
isOpen ? (React.createElement(HeaderMenu, { "aria-labelledby": MenuButtonId.InstanceSwitcher, id: MenuListId.instanceSwitcher }, Array.isArray(props.menuItems)
|
|
82
|
+
? props.menuItems.map((item) => (React.createElement(HeaderMenuItem, { "aria-label": `Instance Switcher for ${item.instanceName}`, "data-testid": "header-menu-instance-switcher", href: item.url, isCurrentPage: window?.location?.href && item.url ? window.location.href.startsWith(item.url) : false, key: item.instanceName, target: "_self", rel: "noopener noreferrer" },
|
|
83
|
+
React.createElement("div", null,
|
|
84
|
+
React.createElement("span", null, "AU"),
|
|
85
|
+
currentURL.includes((item.instanceName).toLowerCase()) ? React.createElement("span", { className: instanceCheckMarkStyle },
|
|
86
|
+
React.createElement(Checkmark, null),
|
|
87
|
+
" ") : ""))))
|
|
88
|
+
: null)) : null));
|
|
85
89
|
}
|
|
86
90
|
function RequestsMenu(props) {
|
|
87
91
|
const { isOpen, toggleActive, ref } = useHeaderMenu(MenuButtonId.Requests);
|
|
@@ -32,6 +32,7 @@ function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformN
|
|
|
32
32
|
* Check feature enablement via explicit feature flags
|
|
33
33
|
*/
|
|
34
34
|
const isAppSwitcherEnabled = Boolean(features?.["appSwitcher.enabled"]);
|
|
35
|
+
const instanceSwitcherEnabled = Boolean(platform?.["instanceSwitcherEnabled"]);
|
|
35
36
|
const isFeedbackEnabled = Boolean(features?.["feedback.enabled"]);
|
|
36
37
|
const isNotificationsEnabled = Boolean(features?.["notifications.enabled"]);
|
|
37
38
|
const isNotificationsCountEnabled = Boolean(features?.["notificationsCount.enabled"]);
|
|
@@ -60,7 +61,7 @@ function UIShell({ baseEnvUrl, carbonTheme = "g10", config, leftPanel, platformN
|
|
|
60
61
|
*/
|
|
61
62
|
const isPrivacyStatementDisabled = renderPrivacyStatement === false || features?.["consent.enabled"] === false;
|
|
62
63
|
return (React.createElement(QueryClientProvider, { client: queryClient },
|
|
63
|
-
React.createElement(Header, { baseEnvUrl: platform.baseEnvUrl, baseServicesUrl: platform.baseServicesUrl, carbonTheme: carbonTheme, enableAppSwitcher: isAppSwitcherEnabled, enableNotifications: isNotificationsEnabled, enableNotificationsCount: isNotificationsCountEnabled, leftPanel: leftPanel, navLinks: navigation, platformMessage: platformMessage, prefixName: names.platformName, productName: names.productName, rightPanel: rightPanel, requestSummary: user?.requestSummary, skipToContentProps: skipToContentProps, templateMeteringEvent: templateMeteringEvent, triggerEvent: triggerEvent, profileMenuItems: [
|
|
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: [
|
|
64
65
|
isUserEnabled && (React.createElement(ProfileSettingsMenuItem, { key: "profile-settings", baseServicesUrl: platform.baseServicesUrl, src: `${platform.baseServicesUrl}/users/image/${user?.email}`, userName: user?.displayName ?? user?.name })),
|
|
65
66
|
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" })),
|
|
66
67
|
!isPrivacyStatementDisabled && (React.createElement(PrivacyStatementMenuItem, { key: "privacy-statement", baseServicesUrl: platform.baseServicesUrl, platformEmail: platform?.platformEmail })),
|
package/dist/types/index.d.ts
CHANGED
|
@@ -349,6 +349,7 @@ type Props$G = {
|
|
|
349
349
|
carbonTheme?: "white" | "g10" | "g90" | "g100";
|
|
350
350
|
className?: string;
|
|
351
351
|
enableAppSwitcher?: boolean;
|
|
352
|
+
instanceSwitcherEnabled?: boolean;
|
|
352
353
|
enableNotifications?: boolean;
|
|
353
354
|
enableNotificationsCount?: boolean;
|
|
354
355
|
leftPanel?: (args: {
|
|
@@ -357,6 +358,7 @@ type Props$G = {
|
|
|
357
358
|
navLinks?: NavLink[];
|
|
358
359
|
}) => React.ReactNode;
|
|
359
360
|
navLinks?: NavLink[];
|
|
361
|
+
platform?: any;
|
|
360
362
|
platformMessage?: string;
|
|
361
363
|
prefixName?: string;
|
|
362
364
|
productName: string;
|
|
@@ -1385,6 +1387,8 @@ type Props = {
|
|
|
1385
1387
|
askICAEnabled?: boolean;
|
|
1386
1388
|
signOutUrl?: string;
|
|
1387
1389
|
version?: string;
|
|
1390
|
+
instanceSwitcherEnabled?: boolean;
|
|
1391
|
+
instances?: any[];
|
|
1388
1392
|
assistantVersion?: string;
|
|
1389
1393
|
agentsVersion?: string;
|
|
1390
1394
|
scribeFlowVersion?: string;
|
package/package.json
CHANGED
|
@@ -115,7 +115,15 @@ IBM Confidential
|
|
|
115
115
|
align-items: center;
|
|
116
116
|
font-size: 10px;
|
|
117
117
|
}
|
|
118
|
-
|
|
118
|
+
.#{$prefix}--bmrg-header-instance-switcher .cds--bmrg-header-drop-down a.cds--header__menu-item
|
|
119
|
+
{
|
|
120
|
+
padding: 10px 15px !important;
|
|
121
|
+
border-bottom: 1px solid lightgrey !important;
|
|
122
|
+
}
|
|
123
|
+
.instance-checkmark-style
|
|
124
|
+
{
|
|
125
|
+
padding-left: 8rem;
|
|
126
|
+
}
|
|
119
127
|
// span, p, a, div {
|
|
120
128
|
// color: shell.$bmrg-theme-primary;
|
|
121
129
|
// &:hover {
|
|
@@ -142,11 +150,7 @@ a.#{$prefix}--header__menu-item {
|
|
|
142
150
|
color: shell.$bmrg-theme-primary !important;
|
|
143
151
|
background-color: shell.$bmrg-theme-active !important;
|
|
144
152
|
}
|
|
145
|
-
|
|
146
|
-
#InstanceSwitcher .cds--header .cds--bmrg-header-drop-down a.cds--header__menu-item
|
|
147
|
-
{
|
|
148
|
-
padding: 10px 15px;
|
|
149
|
-
border-bottom: 1px solid lightgrey;
|
|
153
|
+
|
|
150
154
|
}
|
|
151
155
|
a.#{$prefix}--side-nav__link {
|
|
152
156
|
color: shell.$bmrg-theme-secondary;
|