UNPKG

@boomerang-io/carbon-addons-boomerang-react

Version:
122 lines (115 loc) 11.7 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var React = require('react'); var reactQuery = require('@tanstack/react-query'); var icons = require('@carbon/react/icons'); var Header = require('../Header/Header.js'); var HeaderMenuItem = require('../Header/HeaderMenuItem.js'); var PrivacyRedirect = require('../PrivacyRedirect/PrivacyRedirect.js'); var AboutPlatform = require('../AboutPlatform/AboutPlatform.js'); var Feedback = require('../Feedback/Feedback.js'); var SupportCenter = require('../SupportCenter/SupportCenter.js'); var PrivacyStatement = require('../PrivacyStatement/PrivacyStatement.js'); var ProfileSettings = require('../ProfileSettings/ProfileSettings.js'); var SignOut = require('../SignOut/SignOut.js'); var servicesConfig = require('../../config/servicesConfig.js'); var UserType = require('../../constants/UserType.js'); function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefault(React); /* IBM Confidential 694970X, 69497O0 © Copyright IBM Corp. 2022, 2024 */ 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, }) { // Support base header .e.g for an error state if (!config) { return (React__default.default.createElement(reactQuery.QueryClientProvider, { client: servicesConfig.queryClient }, React__default.default.createElement(Header.default, { baseEnvUrl: baseEnvUrl ?? "", baseServicesUrl: "", carbonTheme: carbonTheme, enableAppSwitcher: false, enableNotifications: false, enableNotificationsCount: false, enableTeamSwitcher: enableTeamSwitcher, productName: productName || platformName || "", user: user }))); } const { features, navigation, platform, platformMessage } = config; const names = getProductAndPlatformNames({ productName, platformName, platform }); const sendIdeasUrl = platform?.feedbackUrl || "https://ideas.ibm.com"; const supportLink = platform?.supportUrl; const sendBluePointsAwardUrl = platform?.sendBluePointsAwardUrl; const partnerEmailId = "ica-support@ibm.com"; /** * Check feature enablement via explicit feature flags */ const isAppSwitcherEnabled = Boolean(features?.["appSwitcher.enabled"]); const instanceSwitcherEnabled = Boolean(platform?.["instanceSwitcherEnabled"]); const isFeedbackEnabled = Boolean(features?.["feedback.enabled"]); const isNotificationsEnabled = Boolean(features?.["notifications.enabled"]); const isNotificationsCountEnabled = Boolean(features?.["notificationsCount.enabled"]); const isSupportEnabled = Boolean(features?.["support.enabled"]); /** * Check feature enablement via value truthiness */ const isAboutPlatformEnabled = Boolean(platform.name); const isCommunityEnabled = Boolean(platform?.communityUrl); const isSendMailEnabled = Boolean(platform.sendMail); const isSignOutEnabled = Boolean(platform?.signOutUrl); const isUserEnabled = Boolean(user?.id); const isPartnerUser = Boolean(user?.type === UserType.USER_PLATFORM_ROLE.Partner); const supportFlagCheck = user?.showSupport; const askICAEnabled = Boolean(platform?.askICAEnabled); /** * Checking for conditions when we explicitly set "renderPrivacyRedirect" to false (it defaults to true) OR * it's disabled overall for the platform. This lets us toggle the UIShell consent redirect per app as needed * e.g. disabled in Launchpad, but have it enabled for rest of the platform AND also support * having it disabled in a "standalone" mode via the consent.enable feature flag, i.e. data driven via the service */ const isPrivacyRedirectDisabled = renderPrivacyRedirect === false || features?.["consent.enabled"] === false; const isPrivacyModalRendered = isPrivacyRedirectDisabled === false && user?.hasConsented === false; /** * Also enable/disable privacy statement via the consent.enabled feature flag */ const isPrivacyStatementDisabled = renderPrivacyStatement === false || features?.["consent.enabled"] === false; return (React__default.default.createElement(reactQuery.QueryClientProvider, { client: servicesConfig.queryClient }, 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: [ 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 })), 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" })), !isPrivacyStatementDisabled && (React__default.default.createElement(PrivacyStatement.PrivacyStatementMenuItem, { key: "privacy-statement", baseServicesUrl: platform.baseServicesUrl, platformEmail: platform?.platformEmail })), ...profileMenuItems, isSignOutEnabled && React__default.default.createElement(SignOut.SignOutMenuItem, { key: "Sign Out", signOutLink: platform.signOutUrl }), ].filter(Boolean), supportMenuItems: [ !isPartnerUser && (React__default.default.createElement(HeaderMenuItem.default, { key: "docs", href: platform?.docs?.url, icon: React__default.default.createElement(icons.Document, null), "data-testid": "docs", kind: "external", text: "Docs", type: "link" })), isSupportEnabled && (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" }))), 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" }), 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" }), React__default.default.createElement("span", { style: { borderBottom: "1px solid #b8c1c1" } }), 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" })), isFeedbackEnabled && (React__default.default.createElement(Feedback.FeedbackMenuItem, { key: "feedback", platformName: platform?.platformName, platformOrganization: platform?.platformOrganization, sendIdeasUrl: sendIdeasUrl, sendBluePointsAwardUrl: sendBluePointsAwardUrl })), !isPartnerUser && askICAEnabled ? (React__default.default.createElement(HeaderMenuItem.default, { key: "chat-launch", href: platform?.askICAUrl, icon: React__default.default.createElement(icons.ChatLaunch, null), "data-testid": "askICA-chatlaunch", kind: "external", text: "AskICA", type: "link" })) : null, !isPartnerUser && enableIcaMacs && (React__default.default.createElement(HeaderMenuItem.default, { key: "launch-ideation-agent", href: `${platform.baseEnvUrl}/launchpad/macs`, icon: React__default.default.createElement(icons.Cognitive, null), "data-testid": "launch-ideation-agent", kind: "app", text: "AI Proposal Feedback Tool", type: "link" })), isAboutPlatformEnabled && (React__default.default.createElement(AboutPlatform.AboutPlatformMenuItem, { key: "about-platform", name: platform.name, baseServicesUrl: platform.baseServicesUrl })), tutorialScreenToShow && handleShowTutorial && (React__default.default.createElement(HeaderMenuItem.default, { key: "launch-tutorial", onClick: handleShowTutorial, icon: React__default.default.createElement(icons.Book, null), "data-testid": "launch-tutorial", text: "Launch Tutorial", type: "button" })), ...supportMenuItems, ].filter(Boolean), history: history, isLaunchpad: isLaunchpad, isLoadingTeamSwitcher: isLoadingTeamSwitcher, isSuccessTeamSwitcher: isSuccessTeamSwitcher, refetchUser: refetchUser, refetchNavigation: refetchNavigation, setIsSuccessTeamSwitcher: setIsSuccessTeamSwitcher, trackEvent: trackEvent, user: user, userTeams: userTeams, userTeamsAssets: userTeamsAssets }), isPrivacyModalRendered ? (React__default.default.createElement(PrivacyRedirect.default, { isOpen: true, baseEnvUrl: platform.baseEnvUrl, platformName: platform?.name, user: user })) : null)); } /** * Determine how to render the name and prefix in the Header based * on what is passed in. If we only have the plaform or product name, then * we want it to be bolded. If we have both, then make the platform the prefix */ function getProductAndPlatformNames(args) { const { productName, platformName, platform } = args; const resolvedPlatformName = platform.platformName ?? platformName; let finalProductName = ""; let finalPlatformName = ""; if (productName && resolvedPlatformName) { finalProductName = productName; finalPlatformName = resolvedPlatformName; } else if (productName && !resolvedPlatformName) { finalProductName = productName; } else if (!productName && resolvedPlatformName) { finalProductName = resolvedPlatformName; } else ; return { productName: finalProductName, platformName: finalPlatformName }; } exports.default = UIShell;