{"version":3,"sources":["common/hooks/useSettingsContext.js","common/layout/components/Breadcrumbs.jsx","utils/urlHelper.js","common/topnav/components/ProfileMenu.jsx","common/topnav/components/DomainSwitcher.jsx","common/topnav/components/MyGuide.jsx","common/topnav/components/notificationStyles.js","utils/htmlHelper.js","common/topnav/components/NotificationCard.jsx","common/topnav/services/notificationService.js","common/topnav/components/NotificationCategoryByTime.jsx","common/topnav/components/NotificationDrawer.jsx","common/hooks/useInterval.js","common/topnav/components/Notifications.jsx","common/topnav/components/Help.jsx","common/topnav/services/searchService.js","common/topnav/components/EnterpriseSearch.jsx","common/topnav/services/shoppingCartService.js","common/topnav/components/ShoppingCart.jsx","common/topnav/components/AppMenuHeader.jsx","common/topnav/services/sitemapService.js","common/topnav/services/timelineService.js","common/sidebar/components/ControlPanelContainer.jsx","common/layout/components/EmulationStrip.jsx","utils/treeHelper.js","common/layout/components/SitemapProvider.jsx","config/i18n.js","RouteChangeListener.jsx","analytics/Tracker.jsx","authentication/AuthorizeRoute.jsx","authentication/Login.jsx","authentication/Logout.jsx","AppRoutes.jsx","analytics/webAnalyticsService.js","analytics/MyGuideTracker.jsx","analytics/instance.js","analytics/TrackingProvider.jsx","RouteLeavingConfirmationModal.jsx","AppRouter.jsx","contexts/UserContextProvider.jsx","contexts/HeaderContextProvider.jsx","contexts/IntegrationContextProvider.jsx","App.jsx","index.jsx","utils/integrationHelper.js","utils/cookieHelper.js","contexts/ThemeContext.jsx","common/hooks/useIntegrationContext.js","utils/logger.js","authentication/AuthorizeService.js","utils/clientStorage.js","theme/services/themeHelper.js","config/apiRequestConfigHandler.js","config/apiResponseHandler.js","config/apiConfig.js","contexts/UserContext.jsx","contexts/SettingsContext.jsx","contexts/MessageContext.jsx","common/hooks/useBreadcrumbContext.js","contexts/BreadcrumbContext.jsx","contexts/HeaderContext.jsx","contexts/IntegrationContext.jsx","config/Config.jsx","modules/core/services/coreIFrameHelper.js","authentication/AuthorizationConstants.js","common/hooks/useUserContext.js","theme/GlobalStyle.jsx","common/hooks/useMessageContext.js","modules/onePlace/activitiesAndTasks/activities/services/myActivitiesService.js","theme/ThemeContainer.jsx","theme/services/themeService.js","modules/learning/activityBuilder/state/reducers/index.js","contexts/BreadcrumbContextProvider.jsx","modules/configuration/activitiesAndTasks/services/activitiesAndTaskConfigurationService.js","modules/core/components/CorePillarFrame.jsx","common/topnav/services/personService.js","state/reducers.js","state/store.js","contexts/MessageContextProvider.jsx","modules/core/services/translationService.js","modules/userSecurityQuestion/components/UserSecurityQuestions.jsx","modules/core/components/CoreMessageListener.jsx","modules/core/services/bootstrapService.js","modules/core/services/navigationService.js","modules/core/components/SecurityQuestions.jsx","common/settings/services/settingService.js","modules/learning/activityBuilder/state/reducers/activityReducer.js","modules/learning/activityBuilder/state/reducers/errorsReducer.js","contexts/SettingsContextProvider.jsx","modules/learning/activityBuilder/state/actions/actionTypes.js","common/layout/components/AppLayout.jsx","utils/pageHelper.js","common/hooks/useGoToHome.js","common/hooks/useHeaderContext.js","utils/IntegrationConstants.js"],"names":["useSettingsContext","context","useContext","SettingsContext","Error","StyledBreadcrumbs","styled","NavigationBreadcrumbs","_templateObject","_taggedTemplateLiteral","Breadcrumbs","settingsData","breadcrumbContext","useBreadcrumbContext","breadcrumbsEnabled","getSettingValueFromContext","settingContext","settingKey","settings","filter","setting","key","value","t","useTranslation","integrationContext","useIntegrationContext","useEffect","breadcrumbData","length","setPageTitleWithBreadcrumbData","toLowerCase","isRcoreNode","CheckIntegrationSetting","IntegrationElement","HideBreadCrumb","mode","_jsx","_Fragment","children","breadCrumbsData","homeIconLabel","authorizedRCoreRoutes","Set","rcoreBreadcrumbData","rootBreadcrumb","allowedCoreBreadcrumbs","nodeKey","GetProcessedNodeUrl","node","url","GetProcessedCoreUrl","addToAuthorisedRCoreRoutes","breadcrumb","rpKey","nodeUrl","replace","indexOf","substring","has","add","nodeBreadcrumbData","undefined","push","title","name","routeUrl","relyingPartyURL","urlPrefix","charAt","encodedUrl","encodeURIComponent","urlSuffix","concat","relyingPartyUrl","encodeRPUrl","window","location","host","StyledPopper","Popper","StyledMenuList","MenuList","_templateObject2","props","theme","variables","headerBarBackground","headerBarColor","MenuContainer","div","_templateObject3","ProfileMenuButton","MenuButton","_templateObject4","ariaExpanded","leftNavHeaderBackground","PofileMenu","_ref","userData","profileMenus","popperAnchor","setPopperAnchor","useState","isMenuOpen","setIsMenuOpen","isEmulation","setIsEmulation","isGuestUser","setIsGuestUser","userInfo","setUserInfo","itemList","setItemList","user","useUserContext","disableProfileMenu","isEmulatedUser","mustAnswerSecurityQuestions","metricKey","headerData","useHeaderContext","open","Boolean","index","directReportAriaLabel","count","directReporteesCount","closeMenu","removeIframeClickListeners","items","userDetails","personInfo","imagePath","Config","domain","fullName","jobTitle","showDonut","keyMeasure","Math","round","keyMeasureKey","options","keyMeasureLabel","label","donutVariant","getDonutColor","forEach","menu","showLink","item","iconType","iconName","actionType","ariaLabel","openRequisitionsCount","isEmulationEnabled","ApplicationPaths","Logout","async","authService","isEmulationMode","getEmulationFlag","getGuestUserFlag","CloseOnEscape","close","CloseOnClickAway","_jsxs","endIcon","menuOpenIcon","isOpen","onClick","e","menuButtonClick","event","currentTarget","headerContext","coreFrameLoaded","setTimeout","addIframeClickListeners","focusElement","document","getElementById","focus","disabled","id","ariaHasPopUp","disableFocusRipple","Avatar","variant","height","width","src","alt","className","toggle","anchorEl","placement","disableAutoAdjust","onKeyDown","menuItems","querySelectorAll","preventDefault","keyCode","shiftKey","firstChild","ProfilePopoutBody","textLine1","textLine2","textLine3","toString","onAvatarClick","handleAvatarClick","data","type","userId","staticData","userID","postMessage","onUserNameClick","handleUserNameClick","ariaLabelForTextLine1","ariaLabelForTextLine2","role","ariaLabelForTextLine3","ActionsList","onItemClick","handleItemClick","action","eventData","removeAccessToken","then","assign","catch","err","getLogger","error","defaultProps","ActionButton","TransparentButton","leftNavParentColor","p","topbarNavHoverStateBackground","topbarNavHoverStateTextColor","topbarNavActiveStateTextColor","topbarNavActiveStateBackground","DomainText","span","DomainLabel","DomainSwitcher","domainName","domainSwitchUrl","callbackEvent","Link","React","forwardRef","ref","RouteLink","_objectSpread","txtarialabel","txtariadescribedby","displayName","size","component","path","startIcon","Icon","MyGuideIconButton","IconButton","MyGuide","myGuideMenu","color","disableRipple","GmCXt","openAppPanel","NotificationsIconButton","StyledBadge","Badge","StyledDrawer","Drawer","NotificationHeader","h2","StyledCard","Card","_templateObject5","CardContentDiv","_templateObject6","NotificationDot","_templateObject7","btnPrimaryBg","ContentDiv","_templateObject8","NameDiv","_templateObject9","StyledSpan","_templateObject10","DescriptionDiv","_templateObject11","StyledLink","_templateObject12","NotificationCardDivider","_templateObject13","_templateObject14","NotificationCardsDiv","_templateObject15","NotificationList","ul","_templateObject16","NotificationListItem","li","_templateObject17","NotificationDateCategoryHeader","_templateObject18","ScrollContainer","_templateObject19","HeaderContainer","_templateObject20","StyledIconMenu","IconMenu","_templateObject21","StyledMenuItem","MenuItem","_templateObject22","StyledDivider","_templateObject23","ViewMoreButtonContainer","_templateObject24","_templateObject25","StyledDiv","_templateObject26","StyledHeader","_templateObject27","StyledCardActionArea","CardActionArea","_templateObject28","IconContainer","_templateObject29","IconDiv","_templateObject30","btnPrimaryColor","ColoredActivityName","_templateObject31","decodeHtmlEntities","html","DOMParser","parseFromString","body","textContent","NotificationCard","notificationData","updateNotification","closeDrawer","history","useHistory","tenantKey","setTenantKey","ActivityName","ActivityId","DueDate","JSON","parse","macroData","formattedDate","Date","toLocaleDateString","culture","Title","Description","notificationMessage","description","split","modifiedActivityName","coloredActivityName","displayActivityName","Tooltip","arrow","isRead","time","userProfile","getUserProfile","tenant","updateInappNotificationsStatus","notificationId","isReadStatus","stopPropagation","personId","config","getNotificationConfig","axios","post","response","resp","updateInappNotificationsReadStatus","personPK","results","dot","handleCardActionAreaClick","updateReadStatus","underline","NotificationCategoryByTime","headerText","notificationReadStatusHandler","map","NotificationDrawer","openConfig","openDrawer","setOpenDrawer","isUnReadOnly","setIsUnReadOnly","totalNotificationsCount","setTotalNotificationsCount","wrapperRef","useRef","todayData","_setTodayData","todayDataRef","setTodayData","current","yesterdayData","_setYesterdayData","yesterdayDataRef","setYesterdayData","olderData","_setOlderData","olderDataRef","setOlderData","pageNum","setPageNum","pageState","setPageState","getNotificationData","query","appendData","notificationRequest","getNotifications","totalCount","currentDateString","Intl","DateTimeFormat","timeZone","userTimeZoneId","dateStyle","timeStyle","format","currentDate","getDate","currentMonth","getMonth","currentYear","getFullYear","notifications","notif","NotificationDateTime","createDateTime","NotificationDate","NotificationMonth","NotificationYear","msDiff","getTime","days","floor","hours","minutes","minutesTag","minute","hoursTag","hour","daysTag","day","pageSize","offSet","container","getIframeContainer","pillarContainer","contentWindow","addEventListener","handleClickOutside","removeEventListener","contains","target","cleanup","findIdxHelper","i","bucket","idx","splice","anchor","tabIndex","markAllNotificationsAsReadMenuClick","markAllNotificationsAsRead","CustomScroll","SwitchWithLabel","checked","onChange","Button","ViewMoreButtonClick","useInterval","callback","delay","savedCallback","setInterval","clearInterval","Notifications","notificationCount","setNotificationCount","setLabel","_setTenantKey","tenantKeyRef","notificationPollingFrequency","settingObj","fetchUnreadNotificationCount","get","getUnreadNotificationCount","closeNotificationDrawer","openNotificationDrawer","resetUnReadInAppNotificationsCount","result","anchorOrigin","horizontal","vertical","badgeContent","HelpIconButton","Help","helpMenu","disableHelpIcon","getSearchTypes","targetUserId","getMaskedUserId","logger","getConfig","cache","Container","SrOnly","SearchComboBox","ComboBox","isFloatingSearch","SearchMenuItem","AutoSuggestContainer","ButtonContainer","CustomTextField","TextField","SearchIconContainer","SearchIcon","ClearIcon","isVisible","StyledPaper","Paper","FixedFooter","showBorder","StyledHighlighter","Hightlighter","EnterpriseSearch","_searchTypes$filter$","searchUrl","searchTypes","disableSearch","suggestionsCount","setSuggestionsCount","autoSuggestEnabled","useTheme","resultsView","setResultsView","setHeaderContext","defaultContext","searchContextKey","newSearchContext","newSearchTerm","getWindowLocation","search","qsList","keyValuePairs","decodeURIComponent","searchContext","setSearchContext","suggestions","setSuggestions","searchTerm","setSearchTerm","term","searchText","getSuggestions","optionList","requestUrl","getSearchSuggestions","suggestionResultSection","searchtext","interpolation","escapeValue","weight","isFixed","SearchCount","navigateToSearch","originalSearchText","isFromSuggestion","setContext","handleSearchClick","state","pathname","view","resetSearchValues","isNative","inputProps","menuProps","transformOrigin","PaperProps","style","backgroundColor","overflow","AutoSuggest","disableClearable","onSearch","paperComponent","getOptionLabel","option","handleSuggestion","showIcon","freeSolo","renderInput","params","placeholder","onKeyUp","renderOption","_ref2","inputValue","highlightClassName","textToHighlight","handleClearClick","getCartItemsCount","totalItems","ShoppingCartButton","BadgeIcon","ShoppingCart","shoppingCartMenu","disableShoppingCart","shoppingCartCount","setShoppingCartCount","Count","cartItemsCount","navigateToCart","itemCount","CloseIcon","SearchContainer","showGrid","AppMenuHeader","menusData","notificationsMenu","logoClickUrl","domainSwitchNode","onNavigationCallback","translationsData","screenResolution","matchMedia","smallerResolution","setSmallerResolution","matches","searchIconSelected","setSearchIconSelected","screenResize","setLiveRegionMessage","useLiveRegionContext","themeContext","CurrentThemeContext","disableAppHeader","logoData","favIconData","previewLogoUrl","favIconUrl","LogoSrc","logo","favIconSrc","favicon","faviconElement","href","image","addListener","removeListener","LiveRegion","AppHeader","logoSrc","skipLinkText","skipMenufocus","onSkipLinkClick","contentElement","getElementsByClassName","setAttribute","hideMenus","translations","onMenuOpen","callbackForClose","onMenuClose","selectedNode","poperLeftPosition","poperTopPosition","ResultsCallback","readResults","SearchText","searchElement","handleSearchClose","myGuideElement","shoppingCartElement","notificationsElement","profileMenu","ProfileMenu","helpElement","adminHeaderCustomElement","includeDashboardSitemap","dashboardSitemap","nodes","dashboardParent","childNodes","dashboards","dashboardType","selfNode","sitemap","find","unshift","rcoreSitemapHash","getLocalStorageItem","StorageConstants","Keys","updatedHash","addUpdateKeyValue","DashboardHash","hash","setLocalStorageItem","setIdbItem","getIdbItem","rcoreDashboardSitemap","RcoreDashboardHash","getSitemap","sitemapRequest","sitemapHash","dashboardHash","cachedRcoreSiteMap","foreceRefreshSitemap","hashValues","parseKeyValue","SitemapHash","rcoreDashboardHash","getNotificationCount","refresh","countOverDue","forceRefresh","countOverDueOnly","StyledControlPanelItem","ControlPanelItem","highlightControlPanelItem","navigatioUrl","homePageUrl","StyledControlPanel","ControlPanel","minh","StyledRouteLink","EllipseControlPanelItem","DisabledLink","ControlPanelContainer","controlPanelItems","setHighlightCPItem","ControlPanelItemList","setControlPanelItemList","PageControlPanelItemList","setPageControlPanelItemList","ControlPanelFooter","setControlPanelFooter","Nodes","footerNode","Footer","timelineCount","setTimelineCount","mytodosOverDueCount","setMytodosOverDueCount","disableControlPanel","showUpperEllipse","setShowUpperEllipse","showLowerEllipse","setShowLowerEllipse","calcHeight","updateCalcHeight","currentPage","setCurrentPage","firstPage","setFirstpage","lastPage","setLastPage","minHeight","setMinHeight","updateSize","clientheight","clientHeight","first","slice","ChangeEllipsePosition","position","timeLineBadgeAriaLable","useCallback","libNode","handleItemMouseClick","button","ControlPanelData","refreshTimeline","getPastDueCount","pastDueTrainingCount","showBadgeIcon","getMyTodosOverDueCount","getBadgeCount","footer","to","isDisabled","iconSize","btnSize","onMouseDown","Strip","Text","ExitEmulationBtn","EmulationStrip","emulatedUser","exitEmulationUrl","handleExitEmulation","username","getMaxDepthOfTree","rootNode","property","maxDepth","eachDeep","child","parent","ctx","depth","childrenPath","HeaderSection","IntegrationHomeBtn","coreNodes","SitemapProvider","setMenusData","isLoaded","setIsLoaded","errorMessage","setErrorMessage","setUserData","setProfileMenus","setHelpMenu","setMyGuideMenu","setNotificationsMenu","setShoppingCartMenu","homeUrl","setHomeUrl","dispatch","setDomainSwitchNode","setcontrolPanelItems","setSearchTypes","setSearchUrl","setExitEmulationUrl","coreReady","setCoreReady","selectedMenuKey","setSelectedMenuKey","refreshSitemap","queryString","parseBooleans","Promise","all","termsForUse","termsAndConditionsLink","availableControlPanelNodes","menuNodeList","controlPanelMenuItems","configuredControlPanelNodes","menuItem","ControlPanelitem","findValueDeep","definition","iconSource","updateControlPanelMenus","profileData","updateExitEmulationUrl","userObject","UserJustAnsweredSecurityQuestion","landingDashBoardurl","landingWebPart","accessibleRcoreRoutes","level","isAllowedCoreNode","pathFormat","userDetailsAuthService","securedRoutes","personNumber","dateFormat","dateformat","timeFormat","timeformat","usertimezoneid","twoLetterISOLanguageName","currentDomainId","setCurrentUser","routeUrls","quickLinks","filteredMenus","administration","setQuickLinks","maxDepthLevel","showAdditionalAction","actionName","myTeam","self","nodeIndex","findIndex","n","shoppingCartNode","helpNodes","myGuideNodes","notificationsNodes","domainNodes","searchNodes","filterMenus","errorResponse","configuredQuickLinks","menuQuickLinksNodeKey","configuredQuickLinkNodes","quickLink","masterSitemapId","availableQuickLinkNodes","menuQuickLinksNode","expandQuickLinksByDefault","expandQuickLinksNodeKey","ShowHomeButton","handleIntegrationHomeBtn","HideTopBar","SelectedNode","HideControlPanel","PageLoader","show","getUser","i18n","use","Backend","initReactI18next","init","fallbackLng","debug","ns","defaultNS","lng","profile","backend","backends","LocalforageBackend","BackendAdapter","Http","loadPath","customHeaders","Authorization","access_token","allowMultiLoading","backendOptions","expirationTime","driver","localforage","INDEXEDDB","WEBSQL","LOCALSTORAGE","storeName","react","useSuspense","RouteChangeListener","useLocation","sitemapBreadcrumbData","getBreadCrumbsForUrl","_","endsWith","partialPath","lastIndexOf","isEmpty","publicRoutes","evaluatePermissions","route","startsWith","r","allowAccess","breadcrumbObj","updateBreadcrumbData","_settingsData$setting","captureNavigationHistory","breadcrumbList","destinationValue","destinationUrl","trackNavigationHistory","updateNavigationHistory","Tracker","trackPageView","pushInstruction","useMatomo","includes","NewVisitID","visitID","AuthorizeRoute","Component","constructor","super","this","ready","authenticated","componentDidMount","subscription","subscribe","authenticationChanged","populateAuthenticationState","componentWillUnmount","unsubscribe","setState","isAuthenticated","render","link","createElement","returnUrl","protocol","redirectUrl","Login","QueryParameterNames","ReturnUrl","_this$props","RouteComponent","rest","_objectWithoutProperties","_excluded","Route","toggleVisibility","Redirect","LoginContainer","getReturnUrl","fromQuery","URLSearchParams","origin","redirectToApiAuthorizationPath","apiAuthorizationPath","navigateToReturnUrl","message","LoginActions","login","LoginCallback","processLoginCallback","signIn","status","AuthenticationResultStatus","Success","Fail","completeSignIn","isReady","LogoutActions","logout","LoggedOut","signOut","Home","lazy","CoreUI","ControlPanelConfigurationRoutes","GoalWorkspaceRoutes","ActivityBuilderRoutes","ActivityAssignments","ToDoListConfiguration","ReportingRoutes","MyToDoList","AccessDeniedPage","UserManagement","OfferRoutes","AllApplicants","PensSettings","MicrosoftTeamsSettings","ZoomSettings","IntegrationSettings","AccreditationRoutes","LateCompletionsListRoutes","AchievementTemplateRoutes","MarketComparisonRoutes","CredlyConfiguration","AssignmentApprovalsRoutes","QuestionBankRoutes","InitiaivesSettings","DashboardManagerRoutes","DashboardRoutes","ActivityQrAttendanceReport","contentConsumerLaunchSetting","ViltAttendanceSyncWizard","loginAction","AppRoutes","Switch","exact","logoutAction","getAnalyticsConfiguration","isinSite","MyGuideTracker","personguid","visitorId","myGuideEmail","analyticsData","myGuideEnabled","webAnalyticIsEnable","analyticUrl","webAnalyticSiteUrl","apiKey","webAnalyticSiteID","myGuideSourceScript","myGuideLoadScript","innerHTML","head","appendChild","renderMyGuide","invokeWebAnalytics","u","visitId","createInstance","urlBase","siteId","trackerUrl","srcUrl","TrackingProvider","instance","setInstance","newTracker","MatomoProvider","RouteLeavingConfirmationModal","handleModalAction","Modal","onClose","ModalContentWrapper","ModalActionWrapper","AppRouterComponent","navigationType","BrowserRouter","HashRouter","AppRouter","userAuthStatus","setUserAuthStatus","emulatorusername","propername","bootstrapApplication","isModalOpen","setIsModalOpen","modalCallback","setModalCallback","basename","appPrefix","getUserConfirmation","AppLayout","showStickyHeader","CorePillarFrame","CoreMessageListener","SecurityQuestions","flag","Suspense","fallback","defaultUserContext","userReducer","answerSecurityQuestions","getAndRemoveLocalStorageItem","UserContextProvider","useReducer","UserContext","Provider","defaultHeaderContext","HeaderContextProvider","HeaderContext","IntegrationContextProvider","defaultIntegrationContext","getIntegrationMode","parsedUrl","parseUrl","top","im","IntegrationMode","Normal","Teams","setIntegrationContext","IntegrationContext","App","store","SettingsContextProvider","ThemeContainer","LiveRegionContextProvider","MessageContextProvider","BreadcrumbContextProvider","configureServices","UserManager","signinSilentCallback","createRoot","integrationElement","integrationMode","RCORE_COOKIE","THEME_COOKIE","parseCookie","cookieName","delimiter","cookie","Cookies","keyValueMap","Map","pairs","pair","set","setCookieValue","v","k","join","getThemeCookieKeyValue","removeCookie","remove","createContext","loglevel","require","log","setLevel","Log","console","populateOIDCLogLevel","logLevel","toUpperCase","callbacks","nextSubscriptionId","isUserAuthenticated","loggedinUser","signoutUrl","createArguments","useReplaceToNavigate","success","redirect","getLoggedInUserId","userid","maskeduserid","ensureUserManagerInitialized","userManager","getAccessToken","removeUser","signinRedirect","redirectError","that","signinCallback","updateState","guestaccount","redirectSignOutError","notifySubscribers","subscriptionId","subscriptionIndex","found","brokerQueryParams","qs","BrokerParams","param","Object","keys","authority","client_id","redirect_uri","spaSiteDomain","post_logout_redirect_uri","LogoutCallback","response_type","scope","extraQueryParams","timeInsensitive","silent_redirect_uri","SilentRediectUri","events","addUserSignedOut","addAccessTokenExpired","setItem","getItem","localStorage","kvpConstants","kvp","removeLocalStorageItem","removeItem","nameProjectionFunc","substr","group","getLessVariables","themeVarsObj","json","vars","evaluateLessVariables","themeVariablesString","entries","castLessVarsToJson","VariblesData","lighten","requestHandler","request","defaults","baseURL","interceptors","exceptionMessage","reject","errorResponseHandler","accessToken","headers","getLMConfig","baseConfig","getUserSummaryConfig","getCoreConfig","getAssignmentConfig","getViltConfig","getVivaConfig","getPlatformConfig","getEMSIConfig","getReportConfig","MessageContext","BreadcrumbContext","home","useSampleData","api","userMocks","process","API_URL","getRcoreContainer","forwardMessage","arguments","sourceElementId","opensSlideout","hideCore","fromRcoreRoute","iFrameContainer","pillarKey","parameters","elementId","setIframe","isRcoreRoute","coreRedirectionQS","setCoreframeTitle","visible","showIframe","hideIframe","visibility","opacity","zIndex","removeAttribute","rcoreContainer","display","addRemoveListenerForFrames","parentContainer","canAccessIFrame","onclick","onmousedown","frames","contentDocument","getElementsByTagName","addListenerForCrossOriginFrame","frameContainer","myConfObj","iframeMouseOver","_blurHandler","_mouseOverHandler","_mouseOutHandler","iframe","warn","Message","prefix","AuthorizationPrefix","CookieNames","ApiSecurity","GlobalStyle","createGlobalStyle","fontFamilyBase","fontSizeBase","textColor","bodyBg","lineHeightBase","useMessageContext","getActivitiesAndTasksDomainSettings","getActivitiesAndTaskConfigurations","getUserLearningData","payload","isV2Enabled","trackUserPermission","Permission","getCalendarData","registerForActivity","getCertificate","activityId","attemptId","downloadCertificate","getLateCompletionDataByAttempt","saveLateComments","lateAttemptComments","cancelInterest","getDecertificationReasons","decertifyActivity","userTheme","setUserTheme","Theme","setPreviewLogoUrl","setFavIconUrl","curThemeKey","currUserIdHash","personpk","isRTL","isrtl","currentTheme","getUserTheme","useridhash","clientLogo","clientFavicon","varsJson","curTheme","themeData","CssBaseline","StyledThemeProvider","StyledEngineProvider","injectFirst","ThemeProvider","direction","StyleSheetManager","stylisPlugins","rtlPlugin","themeKey","reqObject","OverrideTheme","ThemeKey","rootReducer","activityBuilder","activityReducer","activityBuilderErrors","errorsReducer","defaultBreadcrumbContext","breadcrumbReducer","addBreadcrumb","removeBreadcrumb","saveActivitiesAndTaskConfigurations","getTranslationsForCard","cardId","saveTranslationsForCard","translatedProperty","IFrame","frameSource","setFrameSource","coreframe","getAttribute","coreUrl","currentUrl","frameBorder","allowFullScreen","UserSecurityQuestions","combineReducers","activityBuilderReducers","createStore","applyMiddleware","thunkMiddleware","defaultMessageContext","text","severity","messageContext","setMessageContext","getTranslationCategoryHash","refreshOutdatedTranslations","cachedHash","keysToUpdate","hashChanged","i18next","reloadResources","useGoToHome","parseJson","jsonString","_unused","setCurrentTheme","messageContextData","addRemoveBackdrop","backdropElements","classList","MessageHandler","match","safeOrigin","messageData","frameTitle","closeRCoreSlideout","themeVarsObject","previewTheme","clientFavIcon","isDeepLink","rc","stringifyUrl","considerRcorePage","replaceState","mustSetSecurityQuestions","nextRoute","onDomainChange","isMarketComparisonRoute","internalSkillData","isIdentified","skipItem","validateMessageString","destinationType","saveSettingDefinition","getCoreSettings","allowCache","initialState","handleActivityPropertyChange","section","sectionsData","getNewSectionData","setSectionData","sectionData","propertyValue","properties","outerProperty","prop","setData","setSectionsLoading","isLoading","sectionsLoading","isSectionsLoading","setSectionsLoaded","s","UPDATE_ACTIVITY_PROPERTY","UPDATE_ACTIVITY_PROPERTIES","latestState","SET_ACTIVITY_SECTION","newState","SET_LOADING","SET_ACTIVITY_INFO","activityType","SET_PICKER_DATA","pickersData","SET_SECTIONS_LOADING","SET_SECTIONS_LOADED","SET_TEMP_DATA","tempData","RESET_TEMP_DATA","subSectionsProperties","sectionsValidState","isValid","subSectionProperties","newSubSectionProperties","newSubSectionsPropertiesState","newSectionsValidState","getSubSectionValid","getAllSubsectionsValid","newErrors","validations","SET_ACTIVITY_PROPERTY_VALIDITY","SET_ACTIVITY_VALIDATIONS","ADD_ACTIVITY_VALIDATIONS","code","addCode","REMOVE_ACTIVITY_VALIDATIONS","removeCode","codesToRemove","some","newValidations","REPLACE_ACTIVITY_SECTIONS_VALIDITY","reduce","obj","sectionName","getSettings","FETCH_ACTIVITY_SECTION","LayoutGrid","IntegrationLayoutGrid","showLayout","info","Grid","containerExists","breadCrumbList","pageTitle","setPageTitle","tenantName","skipPrompt","None","HideHeader","LinkRedirect","HideMyActiviesHeader","HideDefaultHomeLink","RedirectToDetails"],"mappings":"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","file":"static/js/main.0a9f333d.chunk.js","sourcesContent":["import { useContext } from 'react';\nimport SettingsContext from '../../contexts/SettingsContext';\n\nconst useSettingsContext = () => {\n const context = useContext(SettingsContext);\n if (!context) {\n throw new Error('useSettingsContext must be used within SettingsContextProvider!');\n }\n return context;\n};\n\nexport default useSettingsContext;\n","import React, { useEffect } from 'react';\nimport { NavigationBreadcrumbs } from '@sumtotal/react-foundation';\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components';\nimport useSettingsContext from '../../hooks/useSettingsContext';\nimport useBreadcrumbContext from '../../hooks/useBreadcrumbContext';\nimport { setPageTitleWithBreadcrumbData } from '../../../utils/pageHelper';\nimport { IntegrationElement } from '../../../utils/IntegrationConstants';\nimport useIntegrationContext from '../../hooks/useIntegrationContext';\nimport CheckIntegrationSetting from '../../../utils/integrationHelper';\n\nconst StyledBreadcrumbs = styled(NavigationBreadcrumbs)`\n padding-top: 1rem;\n padding-left: 1rem;\n`;\n\nconst getSettingValueFromContext = (settingContext, settingKey) => {\n if (settingContext && settingContext.settings) {\n const settingObj = settingContext.settings.filter((setting) => setting.key === settingKey)[0];\n return settingObj.value;\n }\n return null;\n};\n\nfunction Breadcrumbs() {\n const { settingsData } = useSettingsContext();\n const { breadcrumbContext } = useBreadcrumbContext();\n const breadcrumbsEnabled = getSettingValueFromContext(\n settingsData,\n 'ELIXHRUI_GENERAL_SHOW_NAVIGATION_BREADCRUMBS'\n );\n const { t } = useTranslation(['TRANSLATIONS_RCORE_COMMON']);\n const { integrationContext } = useIntegrationContext();\n\n useEffect(() => {\n if (breadcrumbContext.breadcrumbData.length > 0)\n setPageTitleWithBreadcrumbData(breadcrumbContext.breadcrumbData);\n }, [breadcrumbContext.breadcrumbData]);\n\n if (\n breadcrumbsEnabled !== null &&\n breadcrumbsEnabled.toLowerCase() === 'true' &&\n breadcrumbContext.isRcoreNode &&\n CheckIntegrationSetting(IntegrationElement.HideBreadCrumb, integrationContext.mode) &&\n breadcrumbContext.breadcrumbData &&\n breadcrumbContext.breadcrumbData.length > 0\n ) {\n return (\n <>\n \n \n );\n }\n return null;\n}\n\nexport default Breadcrumbs;\n","import eachDeep from 'deepdash/eachDeep';\nimport { setIdbItem } from './clientStorage';\n\nconst authorizedRCoreRoutes = new Set();\nconst rcoreBreadcrumbData = [];\nlet rootBreadcrumb = {};\nconst allowedCoreBreadcrumbs = [\n { nodeKey: 'common_jobs' },\n { nodeKey: 'Administrator_MenuLearningActivies' }\n];\n\nconst ProcessTreeNodes = (nodes) => {\n eachDeep(\n nodes,\n (node) => {\n // eslint-disable-next-line no-param-reassign\n node.url = GetProcessedNodeUrl(node);\n if (node.level === 1) {\n if (node.nodeKey === 'admin_header') {\n rootBreadcrumb = {\n url: node.url.toLowerCase(),\n title: node.name,\n nodeKey: node.nodeKey,\n rpKey: node.rpKey\n };\n } else {\n rootBreadcrumb = undefined;\n }\n }\n const isAllowedCoreNode = allowedCoreBreadcrumbs.find((t) => t.nodeKey === node.nodeKey);\n if (node.isRcoreNode || isAllowedCoreNode !== undefined) {\n addToAuthorisedRCoreRoutes(node, rootBreadcrumb);\n }\n },\n { pathFormat: 'array', childrenPath: 'childNodes' }\n );\n setIdbItem('RCoreBreadCrumbData', rcoreBreadcrumbData);\n return authorizedRCoreRoutes;\n};\n\nconst GetProcessedNodeUrl = (node) => {\n let { url } = node;\n if (!node.isRcoreNode) {\n url = GetProcessedCoreUrl(node);\n }\n return url;\n};\n\nconst addToAuthorisedRCoreRoutes = (node, breadcrumb) => {\n const { url } = node;\n const pillarUrl = '/c/pillarredirect';\n if (\n (node.rpKey === 'ELIXHRUI' || node.rpKey === 'GAM' || node.rpKey === 'LM') &&\n url != null &&\n url !== ''\n ) {\n let nodeUrl = url.replace('#', '');\n if (nodeUrl.indexOf('?') > -1) nodeUrl = nodeUrl.substring(0, nodeUrl.indexOf('?'));\n if (!authorizedRCoreRoutes.has(nodeUrl)) {\n authorizedRCoreRoutes.add(nodeUrl.toLowerCase());\n\n const nodeBreadcrumbData = [];\n if (breadcrumb !== undefined) {\n nodeBreadcrumbData.push(breadcrumb);\n }\n nodeBreadcrumbData.push({\n url: nodeUrl.toLowerCase() !== pillarUrl ? nodeUrl.toLowerCase() : url.replace('#', ''),\n title: node.name,\n nodeKey: node.nodeKey,\n rpKey: node.rpKey\n });\n\n rcoreBreadcrumbData.push({\n routeUrl: nodeUrl.toLowerCase(),\n nodeKey: node.nodeKey,\n rpKey: node.rpKey,\n breadcrumbData: nodeBreadcrumbData\n });\n }\n }\n};\n\nconst GetProcessedCoreUrl = (node) => {\n const { rpKey, nodeKey, relyingPartyURL } = node;\n const urlPrefix = '/c';\n let { url } = node;\n // If the url is already processed then just return\n if (url && url.indexOf('/c/') > -1) {\n return url;\n }\n if (url) {\n if (url.charAt(0) === '#') {\n url = url.replace('#', '');\n }\n // encode the url to use it in qs\n const encodedUrl = encodeURIComponent(url);\n const urlSuffix = `nodeKey=${nodeKey}&nodeUrl=${encodedUrl}`;\n if (rpKey !== 'ELIXHRUI') {\n let relyingPartyUrl = relyingPartyURL;\n if (relyingPartyUrl && relyingPartyUrl.charAt(relyingPartyUrl.length - 1) !== '/') {\n relyingPartyUrl += '/';\n }\n const encodeRPUrl = encodeURIComponent(relyingPartyUrl);\n if (rpKey !== 'AdvancedReport') {\n url = `${urlPrefix}/pillarRedirect?relyingParty=${rpKey}&url=${encodeRPUrl}${encodedUrl}&${urlSuffix}`;\n } else {\n url = `${urlPrefix}/pillarRedirect?relyingParty=${rpKey}&url=${encodeRPUrl}&${urlSuffix}`;\n }\n } else if (url.indexOf('http') === 0) {\n url = url.replace('$HOST_NAME', window.location.host);\n } else {\n url = `${urlPrefix}${url}${\n url.indexOf('?') > 0 ? '&' : '?'\n }relyingParty=${rpKey}&${urlSuffix}`;\n }\n }\n return url;\n};\n\nexport { ProcessTreeNodes, GetProcessedNodeUrl };\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n MenuButton,\n Popper,\n Avatar,\n CloseOnEscape,\n CloseOnClickAway,\n ProfilePopoutBody,\n ActionsList,\n MenuList\n} from '@sumtotal/react-foundation';\nimport styled from 'styled-components';\nimport { useTranslation } from 'react-i18next';\nimport {\n postMessage,\n addIframeClickListeners,\n removeIframeClickListeners\n} from '../../../modules/core/services/coreIFrameHelper';\nimport { GetProcessedNodeUrl } from '../../../utils/urlHelper';\nimport Config from '../../../config/Config';\nimport { ApplicationPaths } from '../../../authentication/AuthorizationConstants';\nimport useUserContext from '../../hooks/useUserContext';\nimport authService from '../../../authentication/AuthorizeService';\nimport getLogger from '../../../utils/logger';\nimport useHeaderContext from '../../hooks/useHeaderContext';\nimport useSettingsContext from '../../hooks/useSettingsContext';\n\nconst StyledPopper = styled(Popper)`\n z-index: 10000;\n`;\n\nconst StyledMenuList = styled(MenuList)`\n width: 11.25rem;\n background-color: ${(props) => props.theme.variables.headerBarBackground};\n color: ${(props) => props.theme.variables.headerBarColor};\n padding-top: 0rem;\n li:nth-child(3) {\n margin-top: 0.5rem;\n }\n`;\n\nconst MenuContainer = styled.div`\n display: flex;\n`;\n\nconst ProfileMenuButton = styled(MenuButton)`\n &.Mui-disabled {\n background-color: transparent;\n color: ${(props) => props.theme.variables.headerBarColor};\n opacity: 0.5;\n }\n .avatar-border {\n border: 0.1875rem solid #f8b300;\n }\n &:hover {\n background-color: ${(props) =>\n props.ariaExpanded ? props.theme.variables.leftNavHeaderBackground : 'none'};\n }\n`;\n\nconst getSettingValueFromContext = (settingContext, settingKey) => {\n if (settingContext && settingContext.settings) {\n const settingObj = settingContext.settings.filter((setting) => setting.key === settingKey)[0];\n return settingObj.value;\n }\n return null;\n};\n\n/**\n * Profile Menu component for App Header.\n *\n */\nfunction PofileMenu({ userData, profileMenus }) {\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n const [popperAnchor, setPopperAnchor] = useState(null);\n const [isMenuOpen, setIsMenuOpen] = useState(false);\n const [isEmulation, setIsEmulation] = useState(false);\n const [isGuestUser, setIsGuestUser] = useState(false);\n const [userInfo, setUserInfo] = useState({});\n const [itemList, setItemList] = useState([]);\n const { user } = useUserContext();\n const disableProfileMenu = user.isEmulatedUser ? false : user.mustAnswerSecurityQuestions;\n const { settingsData } = useSettingsContext();\n let metricKey = '';\n const headerData = useHeaderContext();\n const open = Boolean(popperAnchor);\n let index;\n const directReportAriaLabel = t('RCORE_TOPNAV_PROFILE_DIRECT_REPORTS', {\n count: userData.directReporteesCount\n });\n metricKey = getSettingValueFromContext(settingsData, 'ELIXHRUI_METRIC_KEY_METRIC');\n\n const closeMenu = () => {\n setPopperAnchor(null);\n setIsMenuOpen(false);\n removeIframeClickListeners();\n };\n const menuButtonClick = (event) => {\n if (isMenuOpen) {\n closeMenu();\n } else {\n setPopperAnchor(event.currentTarget);\n setIsMenuOpen(true);\n if (headerData.headerContext.coreFrameLoaded) {\n setTimeout(() => {\n addIframeClickListeners(closeMenu);\n }, 100);\n }\n setTimeout(() => {\n const focusElement = document.getElementById('profileButton');\n if (focusElement) focusElement.focus();\n });\n }\n };\n\n const getEmulationFlag = async () => {\n setIsEmulation(await authService.isEmulationMode());\n };\n\n const getGuestUserFlag = async () => {\n setIsGuestUser(await authService.isGuestUser());\n };\n\n useEffect(() => {\n // Data required for actionlist\n const items = [];\n // Data required for ProfilePopoutBody\n const userDetails = {};\n\n if (userData != null) {\n if (userData.personInfo.imagePath === '') {\n userDetails.imagePath = '';\n } else {\n userDetails.imagePath = `${Config.domain}${userData.personInfo.imagePath}`;\n }\n userDetails.fullName = userData.personInfo.fullName;\n userDetails.jobTitle = userData.jobTitle;\n userDetails.showDonut = false;\n if (metricKey !== null && metricKey !== '') {\n userDetails.showDonut = true;\n }\n if (userData.keyMeasure) {\n userDetails.value = Math.round(userData.keyMeasure.value);\n userDetails.keyMeasureKey =\n userData.keyMeasure.options && userData.keyMeasure.options.key\n ? userData.keyMeasure.options.key\n : '';\n userDetails.keyMeasureLabel = userData.keyMeasure.label ? userData.keyMeasure.label : '';\n } else {\n userDetails.value = 0;\n userDetails.keyMeasureLabel = '';\n }\n userDetails.donutVariant = getDonutColor(userDetails.keyMeasureKey, userDetails.value);\n setUserInfo(userDetails);\n }\n\n if (profileMenus != null) {\n profileMenus.forEach((menu) => {\n if (menu.nodeKey === 'Profile') {\n userDetails.showLink = true;\n userDetails.url = GetProcessedNodeUrl(menu);\n setUserInfo(userDetails);\n } else {\n const item = {\n key: menu.nodeKey,\n name: menu.name,\n url: menu.url,\n iconType: 'MaterialIcon',\n rpKey: menu.rpKey\n };\n if (menu.nodeKey === 'orgchart') {\n if (!(userData != null && userData.directReporteesCount > 0)) return;\n item.name += ` ${userData.directReporteesCount}`;\n item.iconName = 'People';\n item.actionType = 'OPEN_MINI_PROFILE_ORGCHART';\n item.ariaLabel = directReportAriaLabel;\n } else if (menu.nodeKey === 'self_myteam') {\n if (!(userData != null && userData.openRequisitionsCount > 0)) return;\n item.name += ` ${userData.openRequisitionsCount}`;\n item.iconName = 'AssignmentInd';\n item.actionType = 'NAVIGATE';\n item.url = GetProcessedNodeUrl(menu);\n item.url += '?defaultMetricKey=openrequisitions';\n } else if (menu.nodeKey === 'self_personaldetails') {\n item.iconName = 'Settings';\n item.actionType = 'OPEN_PROFILE_DETAILS';\n } else if (menu.nodeKey === 'BADGES_LEVELS') {\n item.iconName = 'EmojiEvents';\n item.actionType = 'OPEN_BADGES_AND_LEVELS';\n } else if (menu.nodeKey === 'menu_signout') {\n if (menu.isEmulationEnabled) {\n return;\n }\n item.iconName = 'ExitToApp';\n item.actionType = 'NAVIGATE';\n item.url = ApplicationPaths.Logout;\n } else if (menu.nodeKey === 'self_signin') {\n item.iconName = 'ExitToApp';\n item.actionType = 'REDIRECT';\n item.url = menu.url.replace('$HOST_NAME', window.location.host);\n }\n items.push(item);\n }\n });\n }\n setItemList(items);\n }, [profileMenus, userData, directReportAriaLabel, metricKey]);\n\n useEffect(() => {\n getEmulationFlag();\n getGuestUserFlag();\n }, []);\n\n function getDonutColor(key, value) {\n if (key === 'performanceGoalMetrics') return 'Info';\n if (key !== 'positionFit') {\n if (value > 0 && value <= 25) return 'Danger';\n if (value > 25 && value <= 50) return 'Warning';\n if (value > 50 && value <= 75) return 'Info';\n if (value > 75) return 'Success';\n } else {\n if (value > 0 && value <= 50) return 'Danger';\n if (value > 50 && value <= 70) return 'Warning';\n if (value > 70 && value <= 89) return 'Info';\n if (value > 89) return 'Success';\n }\n }\n const handleAvatarClick = () => {\n const data = {\n type: 'mini',\n userId: window.staticData.userID\n };\n postMessage('SHOW_EMPLOYEE_PROFILE', data, null, 'profileMenu-button-id');\n closeMenu();\n };\n const handleItemClick = (key, action, url, rpKey) => {\n if (action !== 'NAVIGATE' && action !== 'REDIRECT') {\n const eventData = { nodeKey: key, action, url };\n postMessage(action, eventData, null, 'profileMenu-button-id');\n } else if (action === 'REDIRECT') {\n if (key === 'self_signin') {\n authService\n .removeAccessToken()\n .then(() => {\n window.location.assign(url);\n return null;\n })\n .catch((err) => {\n getLogger().error(err);\n });\n }\n }\n // Signout & Open Requisitions will be hanlded with Route component so skip any actions on it\n else if (key !== 'menu_signout' && key !== 'self_myteam') {\n const eventData = { nodeKey: key, rpKey, url };\n postMessage('RCORE_NAVIGATION', eventData);\n }\n closeMenu();\n };\n\n const handleUserNameClick = () => {\n closeMenu();\n };\n\n const handleMenuListKeyDown = (event) => {\n const menuItems = document.querySelectorAll('li');\n if (index === undefined) {\n index = 0;\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n closeMenu();\n const focusElement = document.getElementById('profileMenu-button-id');\n if (focusElement) focusElement.focus();\n } else {\n switch (event.keyCode) {\n case 40:\n if (index < menuItems.length - 1) {\n index++;\n } else if (index === menuItems.length - 1) {\n index = 0;\n }\n break;\n case 38:\n if (index > 0) {\n index--;\n } else if (index === 0) {\n index = menuItems.length - 1;\n }\n break;\n case 9:\n event.preventDefault();\n // Without event.preventDefault(), the browser's default tab behavior takes over\n if (event.shiftKey) {\n index = index > 0 ? index - 1 : menuItems.length - 1;\n } else {\n index = index < menuItems.length - 1 ? index + 1 : 0;\n }\n break;\n default:\n }\n if (menuItems[index].firstChild) {\n menuItems[index].firstChild.focus();\n }\n }\n };\n\n return (\n \n \n \n menuButtonClick(e)}\n disabled={disableProfileMenu}\n id=\"profileMenu-button-id\"\n ariaLabel={t('RCORE_TOPNAV_MY_PROFILE')}\n ariaExpanded={isMenuOpen}\n ariaHasPopUp\n disableFocusRipple\n >\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n// PropType check\nPofileMenu.propTypes = {\n /**\n * user data\n */\n userData: PropTypes.oneOfType([PropTypes.object]),\n /**\n * Profile Menus\n */\n profileMenus: PropTypes.arrayOf(PropTypes.shape({}))\n};\n\nPofileMenu.defaultProps = {\n userData: undefined,\n profileMenus: undefined\n};\n\nexport default PofileMenu;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { Icon, TransparentButton, RouteLink } from '@sumtotal/react-foundation';\nimport { useTranslation } from 'react-i18next';\n\nconst ActionButton = styled(TransparentButton)`\n color: ${(props) => props.theme.variables.leftNavParentColor};\n margin-right: 0.75rem;\n margin-left: 0.75rem;\n padding: 0.125rem 0.5rem;\n min-height: 1.25rem;\n min-width: 4.375rem;\n font-size: 0.625rem;\n font-weight: normal;\n text-transform: none;\n border-radius: 0.6875rem;\n border: 0.0625rem solid;\n &:hover,\n &:focus {\n border: 0.0625rem solid;\n background-color: ${(p) => p.theme.variables.topbarNavHoverStateBackground};\n color: ${(p) => p.theme.variables.topbarNavHoverStateTextColor};\n }\n &:active {\n color: ${(p) => p.theme.variables.topbarNavActiveStateTextColor};\n border: 0.0625rem solid;\n background-color: ${(p) => p.theme.variables.topbarNavActiveStateBackground};\n }\n\n .MuiButton-iconSizeSmall {\n margin-right: 0.25rem;\n margin-left: 0;\n > *:first-child {\n font-size: 0.625rem;\n }\n }\n`;\n\nconst DomainText = styled.span`\n font-weight: normal;\n font-size: 0.75rem;\n color: ${(props) => props.theme.variables.leftNavParentColor};\n padding-left: 0.25rem;\n max-width: 17.5rem;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n`;\n\nconst DomainLabel = styled(DomainText)`\n font-weight: 600;\n`;\n\n/**\n * Component for Domain Switcher.\n * It is used in the MegaMenuHeader\n */\nconst DomainSwitcher = ({ domainName, domainSwitchUrl, callbackEvent }) => {\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n\n const Link = React.forwardRef((props, ref) => (\n \n ));\n Link.displayName = 'domainChangeButton';\n\n return (\n <>\n {t('RCORE_TOPNAV_MENU_LABEL_DOMAIN')}:\n {domainName}\n }\n >\n {t('RCORE_TOPNAV_MENU_LABEL_CHANGE')}\n \n \n );\n};\n\nDomainSwitcher.propTypes = {\n /**\n * Domain Name\n */\n domainName: PropTypes.string,\n /**\n * Domain Switch Url\n */\n domainSwitchUrl: PropTypes.string,\n /**\n * Parent callback event\n */\n callbackEvent: PropTypes.func\n};\n\nDomainSwitcher.defaultProps = {\n domainName: '',\n domainSwitchUrl: '',\n callbackEvent: () => {}\n};\n\nexport default DomainSwitcher;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { IconButton, Icon } from '@sumtotal/react-foundation';\nimport styled from 'styled-components';\n\nconst MyGuideIconButton = styled(IconButton)`\n padding: 0.425rem 0.3rem;\n color: ${(props) => props.theme.variables.headerBarColor};\n`;\n\nconst MyGuide = ({ myGuideMenu }) => {\n const onMyGuideClick = () => {\n window.GmCXt.openAppPanel();\n };\n return (\n onMyGuideClick()}\n >\n \n \n );\n};\n\n// PropType check\nMyGuide.propTypes = {\n /**\n * MyGuide SitemapNode\n */\n myGuideMenu: PropTypes.oneOfType([PropTypes.object])\n};\n\nMyGuide.defaultProps = {\n myGuideMenu: {}\n};\n\nexport default MyGuide;\n","import styled from 'styled-components';\nimport {\n IconButton,\n Badge,\n Drawer,\n Card,\n IconMenu,\n MenuItem,\n CardActionArea,\n Link\n} from '@sumtotal/react-foundation';\n\n/* Notifications component styles */\nexport const NotificationsIconButton = styled(IconButton)`\n padding: 0.425rem 0.3rem;\n color: ${(props) => props.theme.variables.headerBarColor};\n`;\n\nexport const StyledBadge = styled(Badge)`\n & .MuiBadge-badge {\n height: 1.25rem;\n font-weight: 700;\n font-size: 0.688rem;\n line-height: 0.938rem;\n top: calc(50% - 0.938rem / 2 - 0.031rem);\n }\n & .MuiBadge-colorPrimary {\n color: ${(props) => props.theme.variables.headerBarColor};\n border-color: ${(props) => props.theme.variables.headerBarColor};\n }\n`;\n\nexport const StyledDrawer = styled(Drawer)`\n .MuiPaper-root {\n width: 30rem;\n height: calc(100% - 6.688rem);\n top: 3.25rem;\n left: calc(100% - 30rem);\n border-radius: 0.25rem;\n border: 0.063rem solid #fff;\n box-shadow: 0rem 0.063rem 0.188rem 0rem rgba(0, 0, 0, 0.16),\n 0rem 0rem 0.125rem 0rem rgba(0, 0, 0, 0.16), 0rem 0.125rem 0.125rem 0rem rgba(0, 0, 0, 0.16);\n }\n .MuiFormControlLabel-root {\n padding-left: 1rem;\n margin-top: 0.625rem;\n font-size: 0.875rem;\n font-weight: 400;\n }\n . MuiSwitch-root {\n width: 3.313rem;\n }\n .PrivateSwitchBase-root.MuiSwitch-switchBase.MuiSwitch-colorPrimary {\n padding: 0.375rem !important;\n }\n .MuiSwitch-thumb {\n width: 1rem;\n height: 1rem;\n }\n .MuiSwitch-track {\n margin-top: -0.25rem;\n margin-left: 0.15rem;\n width: 60%;\n height: 90%;\n }\n .MuiFormControlLabel-label {\n margin-top: -0.675rem;\n margin-left: -0.75rem;\n }\n .MuiSwitch-input {\n left: -15%;\n width: 160%;\n }\n .Mui-checked > .MuiSwitch-input {\n left: -70%;\n width: 160%;\n }\n`;\n\nexport const NotificationHeader = styled.h2`\n padding-left: 1rem;\n width: 30rem;\n`;\n\n/* Notification Card styles */\n\nexport const StyledCard = styled(Card)`\n width: 100% !important;\n height: auto !important;\n box-shadow: none !important;\n border-radius: 0 !important;\n position: relative;\n top: 0 !important;\n bottom: 0 !important;\n`;\n\nexport const CardContentDiv = styled.div`\n display: flex;\n flex-direction: row;\n`;\n\nexport const NotificationDot = styled.div`\n width: 1.5rem;\n padding-left: 0.5rem;\n padding-top: 1.69rem;\n div {\n width: 1rem;\n }\n .MuiSvgIcon-root {\n color: ${(props) => props.theme.variables.btnPrimaryBg};\n }\n`;\n\nexport const ContentDiv = styled.div`\n width: 100%;\n display: flex;\n flex-direction: column;\n padding-top: 1rem;\n padding-left: 1rem;\n padding-bottom: 2.7rem;\n padding-right: 1rem;\n`;\n\nexport const NameDiv = styled.div`\n font-size: 0.875rem;\n font-weight: 700;\n line-height: normal;\n`;\n\nexport const StyledSpan = styled.span`\n padding-left: 0.5rem;\n color: #555555;\n text-align: right;\n font-size: 0.75rem;\n font-weight: 400;\n line-height: normal;\n`;\n\nexport const DescriptionDiv = styled.div`\n padding-top: 0.25rem;\n font-size: 0.875rem;\n font-weight: 400;\n line-height: normal;\n word-break: break-word;\n`;\n\nexport const StyledLink = styled(Link)`\n position: absolute;\n width: max-content;\n font-size: 0.855rem;\n font-weight: 400;\n line-height: normal;\n padding: 0;\n text-transform: capitalize;\n left: 4.375rem;\n bottom: 1rem;\n`;\n\nexport const CardActionsDiv = styled.div`\n margin-top: 18px;\n`;\n\nexport const NotificationCardDivider = styled.div`\n height: 0.05rem;\n opacity: 0.5;\n background: #767676;\n`;\n\nexport const NotificationCardsDiv = styled.div`\n margin-top: 0.75rem;\n`;\n\nexport const NotificationList = styled.ul`\n list-style-type: none;\n width: 100%;\n padding-left: 0rem;\n margin-top: 0rem;\n`;\n\nexport const NotificationListItem = styled.li`\n width: 100%;\n`;\n\nexport const NotificationDateCategoryHeader = styled.span`\n margin-top: -0.25rem;\n margin-bottom: -0.875rem;\n padding-left: 1rem;\n color: #555;\n font-size: 0.875rem;\n font-style: normal;\n font-weight: 600;\n line-height: normal;\n`;\n\nexport const ScrollContainer = styled.div`\n overflow: auto;\n .ScrollbarsCustom-Wrapper {\n margin-top: 3rem;\n }\n .ScrollbarsCustom-Content {\n padding: 0rem !important;\n }\n .StyledCustomScroll {\n &[style] {\n & .ScrollbarsCustom-TrackY {\n height: calc(100% - 3.313rem) !important;\n top: 3.063rem !important;\n }\n }\n }\n`;\n\nexport const HeaderContainer = styled.div`\n position: sticky;\n top: 0;\n z-index: 1;\n`;\nexport const StyledIconMenu = styled(IconMenu)`\n width: 1.625rem;\n margin: 0.7rem 0.5rem 0.5rem 0.5rem;\n .MuiPopper-root {\n z-index: 9999;\n }\n .MuiPaper-root {\n width: auto !important;\n }\n`;\n\nexport const StyledMenuItem = styled(MenuItem)`\n height: 1.75rem;\n padding: 0.5rem 1rem 0.5rem 1rem;\n justify-content: center;\n color: ${(props) => props.theme.variables.btnPrimaryBg};\n`;\nexport const StyledDivider = styled.div`\n height: 0.1rem;\n opacity: 0.5;\n background: #767676;\n`;\nexport const MenuContainer = styled.div`\n display: flex;\n`;\n\nexport const ViewMoreButtonContainer = styled.div`\n justify-content: center;\n display: flex;\n padding-bottom: 1.5rem;\n`;\nexport const StyledDiv = styled.div`\n margin-top: 8.125rem;\n margin-left: 6.25rem;\n opacity: 50%;\n`;\nexport const StyledHeader = styled.div`\n display: flex;\n flex-direction: row;\n`;\nexport const StyledCardActionArea = styled(CardActionArea)`\n :hover .MuiCardActionArea-focusHighlight {\n opacity: 0.04 !important;\n }\n`;\nexport const IconContainer = styled.div`\n width: 1.875rem;\n padding-top: 1rem;\n`;\nexport const IconDiv = styled.div`\n width: 1.875rem;\n height: 1.875rem;\n border-radius: 50%;\n background-color: ${(props) => props.theme.variables.btnPrimaryBg};\n color: ${(props) => props.theme.variables.btnPrimaryColor};\n padding: 0.3rem 0.313rem 0.3rem 0.39rem;\n div {\n width: 1.25rem;\n }\n`;\nexport const ColoredActivityName = styled.span`\n color: ${(props) => props.theme.variables.btnPrimaryBg};\n`;\n","const decodeHtmlEntities = (html) => {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n return doc.body.textContent;\n};\nexport default decodeHtmlEntities;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Icon, Tooltip } from '@sumtotal/react-foundation';\nimport PropTypes from 'prop-types';\nimport { useHistory } from 'react-router';\nimport {\n StyledCard,\n StyledCardActionArea,\n CardContentDiv,\n NotificationDot,\n IconContainer,\n IconDiv,\n ContentDiv,\n NameDiv,\n StyledSpan,\n DescriptionDiv,\n NotificationListItem,\n NotificationCardDivider,\n ColoredActivityName,\n StyledLink\n} from './notificationStyles';\nimport useUserContext from '../../hooks/useUserContext';\nimport getLogger from '../../../utils/logger';\nimport { updateInappNotificationsReadStatus } from '../services/notificationService';\nimport authService from '../../../authentication/AuthorizeService';\nimport decodeHtmlEntities from '../../../utils/htmlHelper';\n\nconst NotificationCard = ({ notificationData, updateNotification, closeDrawer }) => {\n const { user } = useUserContext();\n const history = useHistory();\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n const [tenantKey, setTenantKey] = useState('');\n const { ActivityName, ActivityId, DueDate } = JSON.parse(notificationData.macroData);\n const formattedDate = DueDate ? new Date(DueDate).toLocaleDateString(user.culture) : undefined;\n const { Title, Description } = JSON.parse(notificationData.notificationMessage);\n const descriptionDecodedString = decodeHtmlEntities(Description);\n const description = descriptionDecodedString.replace(DueDate, formattedDate).split(ActivityName);\n const modifiedActivityName =\n ActivityName.length > 100 ? `${ActivityName.substring(0, 100)}...` : `${ActivityName}.`;\n const coloredActivityName = {modifiedActivityName};\n const displayActivityName =\n ActivityName.length > 100 ? (\n \n {coloredActivityName}\n \n ) : (\n {coloredActivityName}\n );\n const { isRead, time } = notificationData;\n\n useEffect(() => {\n (async () => {\n const userProfile = await authService.getUserProfile();\n setTenantKey(userProfile.tenant);\n })();\n }, []);\n\n const updateInappNotificationsStatus = (notificationId, isReadStatus, event) => {\n if (event) event.stopPropagation();\n updateInappNotificationsReadStatus(tenantKey, user.personPK, notificationId, isReadStatus)\n .then((results) => {\n if (results) {\n updateNotification(notificationId);\n }\n return null;\n })\n .catch((err) => {\n getLogger().error(err.response);\n });\n };\n\n const handleCardActionAreaClick = (notificationId, updateReadStatus, event) => {\n event.stopPropagation();\n if (updateReadStatus) updateInappNotificationsStatus(notificationId, true);\n closeDrawer();\n const url = `/learning/core/activitydetails/ViewActivityDetails?ActivityId=${ActivityId}&UserMode=0`;\n history.push(`/c/pillarRedirect?relyingParty=LM&url=${encodeURIComponent(url)}`);\n };\n\n const dot = isRead ? (\n
\n ) : (\n \n );\n\n return (\n \n \n \n handleCardActionAreaClick(notificationData.notificationId, !isRead, event)\n }\n >\n \n {dot}\n \n \n \n \n \n \n \n {Title}\n {time}\n \n \n
\n {description[0] && description[0]}\n {displayActivityName}\n
\n
\n
\n
\n \n \n updateInappNotificationsStatus(notificationData.notificationId, !isRead, event)\n }\n >\n {isRead\n ? t('RCORE_INAPP_NOTIFICATION_ACTION_MARK_AS_UNREAD')\n : t('INAPP_NOTIFICATION_MARK_AS_READ')}\n \n
\n \n
\n );\n};\n// PropType check\nNotificationCard.propTypes = {\n /**\n * Notification Data\n */\n notificationData: PropTypes.shape({\n time: PropTypes.string,\n isRead: PropTypes.bool,\n data: PropTypes.string,\n macroData: PropTypes.string,\n notificationId: PropTypes.string,\n notificationMessage: PropTypes.string\n }),\n /**\n * Notification read status change callback\n */\n updateNotification: PropTypes.func,\n /**\n * Callback to close the drawer\n */\n closeDrawer: PropTypes.func\n};\nNotificationCard.defaultProps = {\n notificationData: undefined,\n updateNotification: undefined,\n closeDrawer: undefined\n};\nexport default NotificationCard;\n","import axios from 'axios';\nimport { getNotificationConfig } from '../../../config/apiConfig';\nimport getLogger from '../../../utils/logger';\n\nexport const getNotifications = async (notificationRequest) => {\n // Get auth header config\n const config = await getNotificationConfig();\n\n const url = `api/notification/inapp/list`;\n\n return axios\n .post(url, notificationRequest, config)\n .then(async (resp) => {\n let response = {};\n if (resp.data) {\n response = resp.data;\n }\n return response;\n })\n .catch((err) => {\n getLogger().error(err);\n throw err.response;\n });\n};\n\nexport const getUnreadNotificationCount = async (tenantKey, personId) => {\n // Get auth header config\n const config = await getNotificationConfig();\n\n const url = `api/notification/inapp/unread/count?tenantKey=${tenantKey}&personId=${personId}`;\n\n return axios\n .get(url, config)\n .then(async (resp) => {\n let response = {};\n if (resp) {\n response = resp.data;\n }\n return response;\n })\n .catch((err) => {\n getLogger().error(err);\n throw err.response;\n });\n};\n\nexport const markAllNotificationsAsRead = async (tenantKey, personId) => {\n // Get auth header config\n const config = await getNotificationConfig();\n\n const url = `api/notification/inapp/markread/all?tenantKey=${tenantKey}&personId=${personId}`;\n\n return axios\n .post(url, {}, config)\n .then(async (resp) => {\n let response = {};\n if (resp.data) {\n response = resp.data;\n }\n return response;\n })\n .catch((err) => {\n getLogger().error(err);\n throw err.response;\n });\n};\nexport const updateInappNotificationsReadStatus = async (\n tenantKey,\n personId,\n notificationId,\n isRead\n) => {\n // Get auth header config\n const config = await getNotificationConfig();\n\n const url = `api/notification/inapp/updatereadstatus?tenantKey=${tenantKey}&personId=${personId}¬ificationId=${notificationId}&IsRead=${isRead}`;\n\n return axios\n .post(url, {}, config)\n .then(async (resp) => {\n let response = {};\n if (resp.data) {\n response = resp.data;\n }\n return response;\n })\n .catch((err) => {\n getLogger().error(err);\n throw err.response;\n });\n};\nexport const resetUnReadInAppNotificationsCount = async (tenantKey, personId) => {\n // Get auth header config\n const config = await getNotificationConfig();\n\n const url = `api/notification/inapp/unread/resetcount?tenantKey=${tenantKey}&personId=${personId}`;\n\n return axios\n .post(url, {}, config)\n .then(async (resp) => {\n let response = {};\n if (resp.data) {\n response = resp.data;\n }\n return response;\n })\n .catch((err) => {\n getLogger().error(err);\n throw err.response;\n });\n};\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { NotificationDateCategoryHeader, NotificationList } from './notificationStyles';\nimport NotificationCard from './NotificationCard';\n\nconst NotificationCategoryByTime = ({\n data,\n headerText,\n notificationReadStatusHandler,\n closeDrawer\n}) => {\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n const updateNotification = (notificationId) =>\n notificationReadStatusHandler(notificationId, headerText);\n return (\n <>\n {t(headerText)}\n \n {data.map((type) => (\n \n ))}\n \n \n );\n};\n\n// PropType check\nNotificationCategoryByTime.propTypes = {\n /**\n * Notification Data\n */\n data: PropTypes.arrayOf(PropTypes.shape({})),\n /**\n * header translation text\n */\n headerText: PropTypes.string,\n /**\n * Notification read status change callback\n */\n notificationReadStatusHandler: PropTypes.func,\n /**\n * Callback to close the drawer\n */\n closeDrawer: PropTypes.func\n};\n\nNotificationCategoryByTime.defaultProps = {\n data: {},\n headerText: '',\n notificationReadStatusHandler: undefined,\n closeDrawer: undefined\n};\n\nexport default NotificationCategoryByTime;\n","import React, { useRef, useEffect, useState } from 'react';\nimport { SwitchWithLabel, CustomScroll, Button } from '@sumtotal/react-foundation';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport {\n StyledDrawer,\n NotificationHeader,\n ScrollContainer,\n HeaderContainer,\n StyledIconMenu,\n StyledMenuItem,\n StyledDivider,\n NotificationCardsDiv,\n ViewMoreButtonContainer,\n StyledDiv,\n StyledHeader\n} from './notificationStyles';\nimport NotificationCategoryByTime from './NotificationCategoryByTime';\nimport { getIframeContainer } from '../../../modules/core/services/coreIFrameHelper';\nimport { getNotifications, markAllNotificationsAsRead } from '../services/notificationService';\nimport getLogger from '../../../utils/logger';\nimport useUserContext from '../../hooks/useUserContext';\nimport authService from '../../../authentication/AuthorizeService';\n\nfunction NotificationDrawer({ openConfig, closeDrawer }) {\n const [openDrawer, setOpenDrawer] = useState(false);\n const [isUnReadOnly, setIsUnReadOnly] = useState(false);\n const [tenantKey, setTenantKey] = useState('');\n const [totalNotificationsCount, setTotalNotificationsCount] = useState(0);\n\n const wrapperRef = useRef(null);\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n const [todayData, _setTodayData] = useState([]);\n const todayDataRef = useRef(todayData);\n const setTodayData = (data) => {\n _setTodayData(data);\n todayDataRef.current = data;\n };\n const [yesterdayData, _setYesterdayData] = useState([]);\n const yesterdayDataRef = useRef(yesterdayData);\n const setYesterdayData = (data) => {\n _setYesterdayData(data);\n yesterdayDataRef.current = data;\n };\n const [olderData, _setOlderData] = useState([]);\n const olderDataRef = useRef(olderData);\n const setOlderData = (data) => {\n _setOlderData(data);\n olderDataRef.current = data;\n };\n const [pageNum, setPageNum] = useState(0);\n const [pageState, setPageState] = useState(null);\n const { user } = useUserContext();\n\n function getNotificationData(query, appendData) {\n if (!appendData) {\n setTodayData([]);\n setYesterdayData([]);\n setOlderData([]);\n }\n getNotifications(query)\n .then((results) => {\n if (results) {\n setTotalNotificationsCount(results.totalCount);\n setPageState(results.pageState);\n const currentDateString = new Intl.DateTimeFormat('en-US', {\n timeZone: user.userTimeZoneId,\n dateStyle: 'short',\n timeStyle: 'long'\n }).format(new Date());\n const currentDate = new Date(currentDateString).getDate();\n const currentMonth = new Date(currentDateString).getMonth();\n const currentYear = new Date(currentDateString).getFullYear();\n results.notifications.forEach((key) => {\n const notif = key;\n const NotificationDateTime = new Intl.DateTimeFormat('en-US', {\n timeZone: user.userTimeZoneId,\n dateStyle: 'short',\n timeStyle: 'long'\n }).format(new Date(`${key.createDateTime}Z`));\n const NotificationDate = new Date(NotificationDateTime).getDate();\n const NotificationMonth = new Date(NotificationDateTime).getMonth();\n const NotificationYear = new Date(NotificationDateTime).getFullYear();\n const msDiff =\n new Date(currentDateString).getTime() - new Date(NotificationDateTime).getTime();\n const days = Math.floor(msDiff / (1000 * 60 * 60 * 24));\n if (days === 0) {\n const hours = Math.floor(msDiff / (1000 * 60 * 60));\n if (hours === 0) {\n const minutes = Math.floor(msDiff / (1000 * 60));\n const minutesTag =\n minutes === 1\n ? 'RCORE_INAPP_NOTIFICATION_MINUTE_TAG'\n : 'RCORE_INAPP_NOTIFICATION_MINUTES_TAG';\n notif.time = t(minutesTag, {\n minute: minutes\n });\n } else {\n const hoursTag =\n hours === 1\n ? 'RCORE_INAPP_NOTIFICATION_HOUR_TAG'\n : 'RCORE_INAPP_NOTIFICATION_HOURS_TAG';\n notif.time = t(hoursTag, {\n hour: hours\n });\n }\n } else {\n const daysTag =\n days === 1\n ? 'RCORE_INAPP_NOTIFICATION_DAY_TAG'\n : 'RCORE_INAPP_NOTIFICATION_DAYS_TAG';\n notif.time = t(daysTag, {\n day: days\n });\n }\n if (\n currentYear === NotificationYear &&\n currentDate === NotificationDate &&\n currentMonth === NotificationMonth\n ) {\n setTodayData([...todayDataRef.current, notif]);\n } else if (\n currentYear === NotificationYear &&\n currentMonth === NotificationMonth &&\n currentDate - 1 === NotificationDate\n ) {\n setYesterdayData([...yesterdayDataRef.current, notif]);\n } else {\n setOlderData([...olderDataRef.current, notif]);\n }\n });\n if (appendData) {\n setTimeout(() => {\n document.getElementById(`button-${results.notifications[0].notificationId}`).focus();\n }, 200);\n }\n }\n return null;\n })\n .catch((err) => {\n getLogger().error(err.response);\n });\n }\n\n const markAllNotificationsAsReadMenuClick = () => {\n markAllNotificationsAsRead(tenantKey, user.personPK)\n .then((results) => {\n if (results) {\n if (!isUnReadOnly) {\n setTodayData(\n todayDataRef.current.map((notif) => {\n return { ...notif, isRead: true };\n })\n );\n setYesterdayData(\n yesterdayDataRef.current.map((notif) => {\n return { ...notif, isRead: true };\n })\n );\n setOlderData(\n olderDataRef.current.map((notif) => {\n return { ...notif, isRead: true };\n })\n );\n } else {\n setTodayData([]);\n setYesterdayData([]);\n setOlderData([]);\n }\n }\n return null;\n })\n .catch((err) => {\n getLogger().error(err.response);\n });\n };\n\n useEffect(() => {\n (async () => {\n const userProfile = await authService.getUserProfile();\n setTenantKey(userProfile.tenant);\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (openDrawer) {\n const query = {\n personId: user.personPK,\n tenantKey,\n pageSize: 10,\n offSet: 0,\n isUnReadOnly: false,\n pageState: null\n };\n getNotificationData(query, false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [openDrawer]);\n\n useEffect(() => {\n if (openDrawer) {\n setTimeout(() => {\n document.getElementById('inapp-notification-actionMenu').focus();\n }, 200);\n const container = getIframeContainer();\n const pillarContainer = container.contentWindow.document.getElementById('productPillarFrame');\n document.addEventListener('click', handleClickOutside, false);\n container.contentWindow.document.addEventListener('click', handleClickOutside, false);\n if (pillarContainer)\n pillarContainer.contentWindow.document.addEventListener('click', handleClickOutside, false);\n return () => {\n document.removeEventListener('click', handleClickOutside, false);\n if (container.contentWindow.document)\n container.contentWindow.document.removeEventListener('click', handleClickOutside, false);\n if (pillarContainer && pillarContainer.contentWindow)\n pillarContainer.contentWindow.document.removeEventListener(\n 'click',\n handleClickOutside,\n false\n );\n };\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [openDrawer]);\n\n useEffect(() => {\n setOpenDrawer(openConfig);\n }, [openConfig]);\n\n const handleClickOutside = (event) => {\n if (wrapperRef.current && !wrapperRef.current.contains(event.target) && openDrawer) {\n cleanup();\n }\n };\n const cleanup = () => {\n setTodayData([]);\n setYesterdayData([]);\n setOlderData([]);\n setOpenDrawer(false);\n setPageNum(0);\n setPageState(null);\n closeDrawer();\n setIsUnReadOnly(false);\n };\n const handleUnreadOnlySwitchChange = (event) => {\n setPageNum(0);\n setIsUnReadOnly(event.target.checked);\n const query = {\n personId: user.personPK,\n tenantKey,\n pageSize: 10,\n offSet: 0,\n pageState: null,\n isUnReadOnly: event.target.checked\n };\n getNotificationData(query, false);\n };\n\n const ViewMoreButtonClick = () => {\n setPageNum(pageNum + 1);\n const query = {\n personId: user.personPK,\n tenantKey,\n pageSize: 10,\n offSet: pageNum + 1,\n isUnReadOnly,\n pageState\n };\n getNotificationData(query, true);\n };\n\n const findIdxHelper = (notificationId, data) => {\n for (let i = 0; i < data.length; i++) {\n if (data[i].notificationId === notificationId) {\n return i;\n }\n }\n };\n\n const notificationReadStatusHandler = (notificationId, bucket) => {\n if (bucket === 'RCORE_INAPP_NOTIFICATION_DRAWER_TODAY_HEADER') {\n const idx = findIdxHelper(notificationId, todayDataRef.current);\n if (isUnReadOnly) todayDataRef.current.splice(idx, 1);\n else todayDataRef.current[idx].isRead = !todayDataRef.current[idx].isRead;\n setTodayData([...todayDataRef.current]);\n } else if (bucket === 'RCORE_INAPP_NOTIFICATION_DRAWER_YESTERDAY_HEADER') {\n const idx = findIdxHelper(notificationId, yesterdayDataRef.current);\n if (isUnReadOnly) yesterdayDataRef.current.splice(idx, 1);\n else yesterdayDataRef.current[idx].isRead = !yesterdayDataRef.current[idx].isRead;\n setYesterdayData([...yesterdayDataRef.current]);\n } else if (bucket === 'RCORE_INAPP_NOTIFICATION_DRAWER_OLDER_HEADER') {\n const idx = findIdxHelper(notificationId, olderDataRef.current);\n if (isUnReadOnly) olderDataRef.current.splice(idx, 1);\n else olderDataRef.current[idx].isRead = !olderDataRef.current[idx].isRead;\n setOlderData([...olderDataRef.current]);\n }\n };\n\n return (\n
\n \n \n \n {t('RCORE_INAPP_NOTIFICATION_DRAWER_HEADER')}\n \n \n {t('RCORE_INAPP_NOTIFICATION_MARK_ALL_AS_READ')}\n \n \n \n \n \n \n \n {\n handleUnreadOnlySwitchChange(e);\n }}\n />\n {todayDataRef.current.length === 0 &&\n yesterdayDataRef.current.length === 0 &&\n olderDataRef.current.length === 0 ? (\n {t('RCORE_INAPP_NOTIFICATION_NO_UNREAD_TEXT')}\n ) : (\n <>\n \n {todayDataRef.current.length > 0 && (\n \n )}\n {yesterdayDataRef.current.length > 0 && (\n \n )}\n {olderDataRef.current.length > 0 && (\n \n )}\n \n {totalNotificationsCount -\n (todayDataRef.current.length +\n yesterdayDataRef.current.length +\n olderDataRef.current.length) >\n 0 && (\n \n \n \n )}\n \n )}\n \n \n \n
\n );\n}\n\n// PropType check\nNotificationDrawer.propTypes = {\n /**\n * open configuration drawer\n */\n openConfig: PropTypes.bool,\n /**\n * close configuration drawer callback function\n */\n closeDrawer: PropTypes.func\n};\n\nNotificationDrawer.defaultProps = {\n openConfig: false,\n closeDrawer: undefined\n};\n\nexport default NotificationDrawer;\n","import { useEffect, useRef } from 'react';\n\nconst useInterval = (callback, delay) => {\n const savedCallback = useRef();\n useEffect(() => {\n savedCallback.current = callback;\n }, [callback]);\n\n useEffect(() => {\n function tick() {\n savedCallback.current();\n }\n if (delay !== null) {\n const id = setInterval(tick, delay);\n return () => clearInterval(id);\n }\n }, [delay]);\n};\n\nexport default useInterval;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { Icon } from '@sumtotal/react-foundation';\nimport { useTranslation } from 'react-i18next';\nimport { NotificationsIconButton, StyledBadge } from './notificationStyles';\nimport {\n getUnreadNotificationCount,\n resetUnReadInAppNotificationsCount\n} from '../services/notificationService';\nimport NotificationDrawer from './NotificationDrawer';\nimport useUserContext from '../../hooks/useUserContext';\nimport useInterval from '../../hooks/useInterval';\nimport authService from '../../../authentication/AuthorizeService';\nimport getLogger from '../../../utils/logger';\nimport useSettingsContext from '../../hooks/useSettingsContext';\n\nconst getSettingValueFromContext = (settingContext, settingKey) => {\n if (settingContext && settingContext.settings) {\n const settingObj = settingContext.settings.filter((setting) => setting.key === settingKey);\n return settingObj && settingObj.length > 0 ? settingObj[0].value : 5;\n }\n return null;\n};\n\nconst Notifications = () => {\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n const [openDrawer, setOpenDrawer] = useState(false);\n const [notificationCount, setNotificationCount] = useState(0);\n const [label, setLabel] = useState(t('RCORE_TOPNAV_ALERTS', { notificationCount: 0 }));\n const { user } = useUserContext();\n const { settingsData } = useSettingsContext();\n const [tenantKey, _setTenantKey] = useState('');\n const tenantKeyRef = useRef(tenantKey);\n const setTenantKey = (data) => {\n _setTenantKey(data);\n tenantKeyRef.current = data;\n };\n const notificationPollingFrequency = getSettingValueFromContext(\n settingsData,\n 'INAPP_NOTIFICATION_POLLING_FREQUENCY'\n );\n const openNotificationDrawer = () => {\n setOpenDrawer(true);\n if (notificationCount !== 0) {\n resetUnReadInAppNotificationsCount(tenantKeyRef.current, user.personPK)\n .then((result) => {\n if (result) {\n setNotificationCount(0);\n setLabel(t('RCORE_TOPNAV_ALERTS', { notificationCount: 0 }));\n }\n return null;\n })\n .catch((err) => {\n getLogger().error(err.response);\n });\n }\n };\n const closeNotificationDrawer = () => {\n setOpenDrawer(false);\n };\n\n function fetchUnreadNotificationCount(tenant) {\n getUnreadNotificationCount(tenant, user.personPK)\n .then((results) => {\n if (results) {\n setNotificationCount(results);\n setLabel(\n results === 1\n ? t('RCORE_TOPNAV_ALERT', { notificationCount: results })\n : t('RCORE_TOPNAV_ALERTS', { notificationCount: results })\n );\n }\n return null;\n })\n .catch((err) => {\n getLogger().error(err.response);\n });\n }\n useInterval(() => {\n (async () => {\n fetchUnreadNotificationCount(tenantKeyRef.current);\n })();\n }, notificationPollingFrequency * 60 * 1000);\n\n useEffect(() => {\n (async () => {\n const userProfile = await authService.getUserProfile();\n setTenantKey(userProfile.tenant);\n fetchUnreadNotificationCount(userProfile.tenant);\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return (\n <>\n \n \n \n \n \n \n \n );\n};\n\nexport default Notifications;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { IconButton, Icon } from '@sumtotal/react-foundation';\nimport styled from 'styled-components';\nimport { postMessage } from '../../../modules/core/services/coreIFrameHelper';\nimport useUserContext from '../../hooks/useUserContext';\n\nconst HelpIconButton = styled(IconButton)`\n padding: 0.425rem 0.3rem;\n color: ${(props) => props.theme.variables.headerBarColor};\n &.Mui-disabled {\n color: ${(props) => props.theme.variables.headerBarColor};\n opacity: 0.5;\n }\n`;\n\nfunction Help({ helpMenu }) {\n const { user } = useUserContext();\n const disableHelpIcon = !user.isEmulatedUser ? user.mustAnswerSecurityQuestions : false;\n function onHelpClick() {\n postMessage('OPEN_HELP', null, false, null, false, true);\n }\n return (\n onHelpClick()}\n size=\"small\"\n color=\"inherit\"\n label={helpMenu.name}\n disableRipple={false}\n disableFocusRipple={false}\n disabled={disableHelpIcon}\n >\n \n \n );\n}\n\n// PropType check\nHelp.propTypes = {\n /**\n * Help SitemapNode\n */\n helpMenu: PropTypes.oneOfType([PropTypes.object])\n};\n\nHelp.defaultProps = {\n helpMenu: {}\n};\n\nexport default Help;\n","import axios from 'axios';\nimport { getConfig } from '../../../config/apiConfig';\nimport authService from '../../../authentication/AuthorizeService';\nimport getLogger from '../../../utils/logger';\n\nexport const getSearchTypes = async (userId) => {\n let targetUserId = userId;\n if (!targetUserId) {\n targetUserId = await authService.getMaskedUserId();\n }\n const logger = getLogger();\n // Get auth header config\n const config = await getConfig();\n config.cache = true;\n const requestUrl = `api/search/getenabledsearchtypes`;\n return axios\n .get(requestUrl, config)\n .then(async (response) => {\n return response.data;\n })\n .catch((err) => {\n logger.error(err.response);\n return null;\n });\n};\n\nexport const getSearchSuggestions = async (searchTerm, searchContext) => {\n if (\n searchTerm &&\n searchTerm.length >= 2 &&\n searchContext !== 'skillsoftcontent' &&\n searchContext !== 'kpointcontent'\n ) {\n const logger = getLogger();\n // Get auth header config\n const config = await getConfig();\n const requestUrl = `api/search/suggestions?searchTerm=${encodeURIComponent(\n searchTerm\n )}&contexts=${searchContext}`;\n return axios\n .get(requestUrl, config)\n .then(async (response) => {\n return response.data;\n })\n .catch((err) => {\n logger.error(err.response);\n return null;\n });\n }\n\n return null;\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport {\n ComboBox,\n MenuItem,\n AutoSuggest,\n Paper,\n Hightlighter,\n TextField,\n IconButton,\n Icon\n} from '@sumtotal/react-foundation';\nimport styled, { useTheme } from 'styled-components';\nimport { useTranslation } from 'react-i18next';\nimport { useHistory } from 'react-router-dom';\nimport useSettingsContext from '../../hooks/useSettingsContext';\nimport { getSearchSuggestions } from '../services/searchService';\nimport useHeaderContext from '../../hooks/useHeaderContext';\nimport { postMessage } from '../../../modules/core/services/coreIFrameHelper';\n\nconst Container = styled.div`\n display: grid;\n display: -ms-grid;\n grid-template-columns: auto 1fr;\n -ms-grid-columns: auto 1fr;\n padding-right: 0.25rem;\n .MuiInputBase-root.Mui-disabled {\n opacity: 0.5;\n }\n`;\nconst SrOnly = styled.div`\n position: absolute;\n width: 1px;\n height: 1px;\n margin: -1px;\n padding: 0;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n`;\n\nconst SearchComboBox = styled(ComboBox)`\n -ms-grid-column: 1;\n background-color: transparent;\n border: none;\n .MuiInputBase-root {\n margin-top: 0px;\n }\n\n .MuiInputBase-root:hover {\n .MuiSelect-icon {\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.headerBarColor\n : props.theme.variables.leftNavParentColor};\n }\n }\n\n .Mui-focused {\n .MuiSelect-icon {\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.headerBarColor\n : props.theme.variables.leftNavParentColor};\n }\n\n .MuiSelect-iconOpen {\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.headerBarColor\n : props.theme.variables.leftNavParentColor} !important;\n }\n }\n\n .MuiSelect-select {\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n font-size: 0.75rem;\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-left: 0.9rem;\n }\n .MuiSelect-icon {\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n right: 0.25rem;\n top: 0.5625rem;\n }\n .MuiSelect-select:focus {\n background-color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.headerBarBackground\n : props.theme.variables.leftNavHeaderBackground};\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.headerBarColor\n : props.theme.variables.leftNavParentColor};\n }\n .MuiSelect-select:hover {\n background-color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.headerBarBackground\n : props.theme.variables.leftNavHeaderBackground};\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.headerBarColor\n : props.theme.variables.leftNavParentColor};\n }\n .MuiSelect-select[aria-expanded='true'] {\n background-color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.headerBarBackground\n : props.theme.variables.leftNavHeaderBackground};\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.headerBarColor\n : props.theme.variables.leftNavParentColor};\n }\n .MuiOutlinedInput-notchedOutline {\n border-radius: 0.1875rem 0 0 0.1875rem;\n border-color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n border-right: none;\n }\n .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline {\n border-color: ${(props) => props.theme.variables.leftNavParentColor};\n border-radius: 0.1875rem 0 0 0.1875rem;\n border-right: none;\n }\n .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline {\n border-color: ${(props) => props.theme.variables.leftNavParentColor};\n border-radius: 0.1875rem 0 0 0.1875rem;\n border-width: 0.0625rem;\n border-right: none;\n }\n .MuiOutlinedInput-root.Mui-disabled .MuiOutlinedInput-notchedOutline {\n border-color: ${(props) => props.theme.variables.headerBarColor};\n color: ${(props) => props.theme.variables.headerBarColor};\n }\n .MuiInputBase-root.Mui-disabled {\n color: ${(props) => props.theme.variables.headerBarColor};\n }\n`;\n\nconst SearchMenuItem = styled(MenuItem)`\n border-radius: 0.25rem;\n padding: 0.375rem 1rem;\n font-weight: 500;\n background-color: ${(props) => props.theme.variables.leftNavHeaderBackground};\n color: ${(props) => props.theme.variables.leftNavParentColor};\n &:hover {\n background-color: ${(p) => p.theme.variables.topbarNavHoverStateBackground};\n color: ${(p) => p.theme.variables.topbarNavHoverStateTextColor};\n }\n &:active {\n background-color: ${(p) => p.theme.variables.topbarNavActiveStateBackground};\n color: ${(p) => p.theme.variables.topbarNavActiveStateTextColor};\n }\n &:focus {\n background-color: ${(p) => p.theme.variables.topbarNavHoverStateBackground};\n color: ${(p) => p.theme.variables.topbarNavHoverStateTextColor};\n }\n`;\n\nconst AutoSuggestContainer = styled.div`\n display: flex;\n -ms-grid-column: 2;\n & .MuiAutocomplete-root {\n display: contents;\n }\n .MuiAutocomplete-hasClearIcon {\n .MuiAutocomplete-inputRoot {\n padding-right: 0;\n }\n }\n`;\n\nconst ButtonContainer = styled.div`\n position: relative;\n right: 4rem;\n display: flex;\n width: 0rem;\n`;\n\nconst CustomTextField = styled(TextField)`\n border: none;\n input[type='text']::-ms-clear {\n display: none;\n }\n input[type='text']::placeholder {\n opacity: 1;\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n }\n .MuiInputBase-root {\n margin-top: 0;\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n }\n .MuiInputBase-fullWidth {\n min-width: 12.5rem;\n }\n .MuiInputBase-input {\n font-size: 0.75rem;\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n height: 1.25rem;\n }\n .MuiOutlinedInput-notchedOutline {\n border-color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n border-radius: 0 0.1875rem 0.1875rem 0;\n }\n .MuiOutlinedInput-root:hover .MuiOutlinedInput-notchedOutline {\n border-color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n border-radius: 0 0.1875rem 0.1875rem 0;\n }\n .MuiOutlinedInput-root.Mui-focused .MuiOutlinedInput-notchedOutline {\n border-color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n border-radius: 0 0.1875rem 0.1875rem 0;\n border-width: 0.0625rem;\n }\n .MuiInputLabel-outlined {\n font-size: 0.75rem;\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n margin-top: -0.875rem;\n }\n .MuiAutocomplete-inputRoot[class*='MuiOutlinedInput-root'] {\n .MuiAutocomplete-input {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n padding-right: 4.1rem;\n border-color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n }\n }\n .MuiOutlinedInput-root.Mui-disabled .MuiOutlinedInput-notchedOutline {\n border-color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n }\n .MuiFormLabel-root.Mui-disabled {\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n opacity: 0.5;\n }\n`;\n\nconst SearchIconContainer = styled.div`\n border-left: 0.0625rem solid\n ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n padding: 0.1875rem;\n margin-left: 0.1875rem;\n`;\n\nconst SearchIcon = styled(IconButton)`\n position: relative;\n padding: 0.425rem 0.3rem;\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n &.Mui-disabled {\n color: ${(props) => props.theme.variables.headerBarColor};\n }\n`;\n\nconst ClearIcon = styled(IconButton)`\n position: relative;\n padding: 0.425rem 0.3rem;\n visibility: ${(props) => (props.isVisible ? 'visible' : 'hidden')};\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n`;\n\nconst StyledPaper = styled(Paper)`\n min-width: 21.875rem;\n font-size: 0.75rem;\n background-color: ${(props) => props.theme.variables.leftNavHeaderBackground};\n color: ${(props) => props.theme.variables.leftNavParentColor};\n margin: 0;\n & .MuiAutocomplete-listbox {\n padding-bottom: 0rem;\n }\n & .MuiAutocomplete-option {\n padding: 0rem;\n &:hover {\n font-weight: 700;\n background-color: ${(p) => p.theme.variables.topbarNavHoverStateBackground};\n color: ${(p) => p.theme.variables.topbarNavHoverStateTextColor};\n }\n &:active {\n background-color: ${(p) => p.theme.variables.topbarNavActiveStateBackground};\n color: ${(p) => p.theme.variables.topbarNavActiveStateTextColor};\n font-weight: 600;\n }\n &:focus {\n background-color: ${(p) => p.theme.variables.topbarNavHoverStateBackground};\n color: ${(p) => p.theme.variables.topbarNavHoverStateTextColor};\n font-weight: 700;\n }\n &[data-focus='true'] {\n background-color: ${(p) => p.theme.variables.topbarNavHoverStateBackground};\n color: ${(p) => p.theme.variables.topbarNavHoverStateTextColor};\n }\n }\n`;\n\nconst FixedFooter = styled.span`\n font-weight: bold;\n border-top: ${(props) => (props.showBorder ? '0.0625rem solid #cecece' : 'none')};\n width: 100%;\n display: block;\n padding: 0.5rem 1rem 0.5rem 1rem;\n`;\n\nconst StyledHighlighter = styled(Hightlighter)`\n width: 100%;\n padding: 0.5rem 1rem 0.5rem 1rem;\n max-height: 2.9rem;\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n -webkit-line-clamp: 2;\n -webkit-box-orient: vertical;\n .markstyles {\n background-color: transparent;\n color: ${(props) => props.theme.variables.leftNavParentColor};\n text-decoration: none;\n font-style: normal;\n font-weight: bold;\n }\n`;\n\nconst getSettingValueFromContext = (settingContext, settingKey) => {\n if (settingContext && settingContext.settings) {\n const settingObj = settingContext.settings.filter((setting) => setting.key === settingKey)[0];\n return settingObj.value;\n }\n return null;\n};\n\nfunction EnterpriseSearch({ searchUrl, searchTypes, disableSearch, isFloatingSearch }) {\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV_SEARCH']);\n const [suggestionsCount, setSuggestionsCount] = useState();\n let autoSuggestEnabled = 'true';\n const { settingsData } = useSettingsContext();\n const theme = useTheme();\n const history = useHistory();\n autoSuggestEnabled = getSettingValueFromContext(\n settingsData,\n 'ENTERPRISE_SEARCH_ALLOW_AUTOCOMPLETE'\n );\n const [resultsView, setResultsView] = useState('List');\n\n const headerData = useHeaderContext();\n const { headerContext, setHeaderContext } = headerData;\n let defaultContext = getSettingValueFromContext(\n settingsData,\n 'ENTERPRISE_SEARCH_DEFAULT_CONTEXT'\n );\n\n const defaultContextNode = searchTypes.filter((node) => node.searchContextKey === defaultContext);\n if (defaultContextNode.length === 0) {\n defaultContext = searchTypes.length > 0 ? searchTypes[0].searchContextKey : '';\n }\n\n let newSearchContext = defaultContext;\n let newSearchTerm = '';\n if (\n getWindowLocation() === '/rcore/c/search' &&\n window.location.search !== '' &&\n window.location.search !== undefined\n ) {\n const qsList = window.location.search.replace('?', '').split('&');\n if (qsList.length > 0) {\n qsList.forEach((key) => {\n const keyValuePairs = key.split('=');\n if (keyValuePairs.length === 2) {\n if (\n keyValuePairs[0] === 'context' &&\n newSearchContext.toLowerCase() !== keyValuePairs[1].toLowerCase()\n ) {\n [, newSearchContext] = keyValuePairs;\n } else if (keyValuePairs[0] === 'searchTerm' && newSearchTerm !== keyValuePairs[1]) {\n newSearchTerm = decodeURIComponent(keyValuePairs[1]);\n }\n }\n });\n }\n }\n\n // State variables required for this component.\n const [searchContext, setSearchContext] = useState(newSearchContext.toLowerCase());\n const [suggestions, setSuggestions] = useState([]);\n const [searchTerm, setSearchTerm] = useState({\n term: headerContext.searchText !== undefined ? headerContext.searchText : newSearchTerm\n });\n\n const handleContextChange = (event) => {\n setSearchContext(event.target.value);\n setHeaderContext((state) => ({\n ...state,\n searchContext: event.target.value\n }));\n if (\n !(\n searchTerm.term &&\n searchTerm.term.length > 0 &&\n (getWindowLocation() === '/rcore/c/search' || getWindowLocation() === '/rcore/c/findtalent')\n )\n ) {\n return;\n }\n setResultsView('List');\n navigateToSearch(\n event.target.value,\n encodeURIComponent(searchTerm.term),\n encodeURIComponent(searchTerm.term),\n 0\n );\n };\n\n const getSuggestions = async (searchText, context) => {\n let optionList = [];\n setSuggestionsCount('');\n if (\n autoSuggestEnabled.toLowerCase() === 'true' &&\n context &&\n searchText &&\n searchText !== '' &&\n searchText.length >= 2\n ) {\n const response = await getSearchSuggestions(searchText, context);\n if (\n response &&\n response.suggestionResultSection &&\n response.suggestionResultSection.length > 0 &&\n response.suggestionResultSection[0].suggestions &&\n response.suggestionResultSection[0].suggestions.length > 0\n )\n optionList = response.suggestionResultSection[0].suggestions;\n // Fixed footer option\n optionList.push({\n name: t('RCORE_TOPNAV_SEARCH_AUTOSUGGEST_SEEALL', {\n searchtext: searchText,\n interpolation: { escapeValue: false }\n }),\n term: searchText,\n weight: 0,\n isFixed: true\n });\n }\n setSuggestions(optionList);\n setSuggestionsCount(\n t('RCORE_ENTERPRISE_SEARCH_SUGGESTIONS_COUNT', {\n SearchCount: optionList.length > 1 ? optionList.length - 1 : 0\n })\n );\n };\n\n const onSuggestionsSearch = (value) => {\n setSearchTerm({\n term: value\n });\n setHeaderContext((state) => ({\n ...state,\n searchText: value,\n searchContext\n }));\n getSuggestions(value, searchContext);\n };\n\n const navigateToSearch = (context, searchText, originalSearchText, isFromSuggestion) => {\n postMessage('CLOSE_CURRENT_SLIDEOUT');\n const setContext = context === '' ? searchContext : context;\n if (setContext.toLowerCase() === 'talent') {\n const eventData = { searchTerm: searchText };\n postMessage('RCORE_NAVIGATE_TO_TALENT_SEARCH', eventData);\n } else\n history.push(\n `${searchUrl}&searchTerm=${searchText}&context=${setContext}&originalSearchText=${originalSearchText}&isFromSuggestion=${isFromSuggestion}`\n );\n };\n\n const handleSearchClick = () => {\n if (!(searchTerm.term && searchTerm.term.length > 0)) {\n return;\n }\n setHeaderContext((state) => ({\n ...state,\n searchText: searchTerm.term,\n searchContext\n }));\n if (resultsView === 'Calendar') {\n postMessage('RCORE_ACTIVITY_CALENDER_SEARCH_EVENT', searchTerm.term);\n } else {\n navigateToSearch(\n '',\n encodeURIComponent(searchTerm.term),\n encodeURIComponent(searchTerm.term),\n 0\n );\n }\n };\n\n const handleSuggestion = (option, value) => {\n setHeaderContext((state) => ({\n ...state,\n searchText: value ? value.term : '',\n searchContext\n }));\n if (value && resultsView === 'List') {\n navigateToSearch('', encodeURIComponent(value.term), encodeURIComponent(searchTerm.term), 1);\n } else if (value && resultsView === 'Calendar') {\n postMessage('RCORE_ACTIVITY_CALENDER_SEARCH_EVENT', value.term);\n }\n };\n\n const handleClearClick = () => {\n setSearchTerm({\n term: ''\n });\n setTimeout(() => {\n document.getElementById('enterpriseSearch').focus();\n }, 100);\n };\n\n function getWindowLocation() {\n return window.location.pathname.toLowerCase();\n }\n\n useEffect(() => {\n if (\n headerContext &&\n headerContext.view !== undefined &&\n headerContext.view !== null &&\n headerContext.view !== resultsView &&\n headerContext.searchContext === 'activity'\n ) {\n setResultsView(headerContext.view);\n }\n if (\n getWindowLocation() !== '/rcore/c/search' &&\n getWindowLocation() !== '/rcore/c/findtalent' &&\n headerContext.resetSearchValues\n ) {\n setSearchContext(defaultContext);\n setSearchTerm({\n term: ''\n });\n setHeaderContext((state) => ({\n ...state,\n searchText: '',\n searchContext: defaultContext,\n view: 'List'\n }));\n setResultsView('List');\n }\n if (headerContext.resetSearchValues) {\n setHeaderContext((state) => ({\n ...state,\n resetSearchValues: false\n }));\n }\n if (\n headerContext &&\n headerContext.searchText !== null &&\n headerContext.searchContext !== undefined\n ) {\n setSearchContext(headerContext.searchContext);\n setSearchTerm({\n term: headerContext.searchText\n });\n }\n }, [\n headerContext.resetSearchValues,\n defaultContext,\n setHeaderContext,\n headerContext.searchText,\n headerContext,\n headerContext.view,\n resultsView\n ]);\n\n return (\n \n type.searchContextKey === searchContext)[0]?.name || ''\n }`\n }}\n menuProps={{\n anchorOrigin: {\n vertical: 'bottom',\n horizontal: 'right'\n },\n transformOrigin: {\n vertical: 'top',\n horizontal: 'right'\n },\n PaperProps: {\n style: { backgroundColor: theme.variables.leftNavHeaderBackground, overflow: 'hidden' }\n }\n }}\n >\n {searchTypes.map((type) => (\n \n {type.name}\n \n ))}\n \n \n (option.term ? option.term : '')}\n onChange={handleSuggestion}\n showIcon={false}\n value={searchTerm}\n freeSolo\n id=\"enterpriseSearch\"\n renderInput={(params) => (\n {\n if (e.keyCode === 13) {\n handleSearchClick();\n }\n }}\n inputProps={{\n 'aria-label': t('RCORE_TOPNAV_SEARCH_INPUT_LABEL'),\n ...params.inputProps\n }}\n />\n )}\n renderOption={(props, option, { inputValue }) => {\n return option.isFixed !== undefined && option.isFixed ? (\n
  • \n 1}>{option.name}\n
  • \n ) : (\n
  • \n \n
  • \n );\n }}\n />\n \n 0}\n onClick={handleClearClick}\n label={t('RCORE_TOPNAV_SEARCH_CLEAR_TEXT')}\n color=\"inherit\"\n >\n \n \n\n \n \n \n \n \n \n \n {suggestionsCount}\n \n
    \n
    \n );\n}\n\n// PropType check\nEnterpriseSearch.propTypes = {\n /**\n * Enabled search types\n */\n searchTypes: PropTypes.arrayOf(PropTypes.shape({ searchContextKey: PropTypes.string })),\n /**\n * Search Url\n */\n searchUrl: PropTypes.string,\n /**\n * disable Search\n */\n disableSearch: PropTypes.bool,\n /**\n * flag to check if the component is rendered in lower resolution\n */\n isFloatingSearch: PropTypes.bool\n};\n\nEnterpriseSearch.defaultProps = {\n searchTypes: [],\n searchUrl: '',\n disableSearch: false,\n isFloatingSearch: false\n};\n\nexport default EnterpriseSearch;\n","import axios from 'axios';\nimport { getConfig } from '../../../config/apiConfig';\nimport getLogger from '../../../utils/logger';\n\nconst getCartItemsCount = async () => {\n const logger = getLogger();\n // Get auth header config\n const config = await getConfig();\n const requestUrl = `api/rcore/shoppingCart/getCartItems`;\n return axios\n .get(requestUrl, config)\n .then(async (response) => {\n return response.data.totalItems;\n })\n .catch((err) => {\n logger.error(err.response);\n return null;\n });\n};\n\nexport default getCartItemsCount;\n","import React, { useEffect, useState } from 'react';\nimport { Badge, IconButton, Icon } from '@sumtotal/react-foundation';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport { useHistory } from 'react-router';\nimport { useTranslation } from 'react-i18next';\nimport getCartItemsCount from '../services/shoppingCartService';\nimport getLogger from '../../../utils/logger';\nimport useUserContext from '../../hooks/useUserContext';\nimport useHeaderContext from '../../hooks/useHeaderContext';\n\nconst ShoppingCartButton = styled(IconButton)`\n color: ${(props) => props.theme.variables.headerBarColor};\n &.Mui-disabled {\n color: ${(props) => props.theme.variables.headerBarColor};\n opacity: 0.5;\n }\n`;\n\nconst BadgeIcon = styled(Badge)`\n display: flex;\n justify-content: center;\n & .MuiBadge-badge {\n height: 1rem;\n width: 1.2rem;\n min-width: 1.2rem;\n font-size: 0.7rem;\n font-weight: bold;\n }\n & .MuiBadge-colorPrimary {\n color: ${(props) => props.theme.variables.headerBarColor};\n border-color: ${(props) => props.theme.variables.headerBarColor};\n }\n & .MuiBadge-anchorOriginTopRightCircle {\n right: 1%;\n top: 1%;\n }\n`;\n\nfunction ShoppingCart({ shoppingCartMenu }) {\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n const history = useHistory();\n const { user } = useUserContext();\n const disableShoppingCart = user.isEmulatedUser ? false : user.mustAnswerSecurityQuestions;\n const headerData = useHeaderContext();\n const { headerContext } = headerData;\n const [shoppingCartCount, setShoppingCartCount] = useState();\n useEffect(() => {\n if (shoppingCartMenu) {\n getCartItemsCount()\n .then((Count) => {\n setShoppingCartCount(Count);\n return Count;\n })\n .catch((err) => {\n getLogger().error(err);\n });\n }\n }, [shoppingCartMenu]);\n\n useEffect(() => {\n if (headerContext.cartItemsCount >= 0) {\n setShoppingCartCount(headerContext.cartItemsCount);\n }\n }, [headerContext.cartItemsCount]);\n\n const navigateToCart = () => {\n history.push(shoppingCartMenu.url);\n };\n\n if (shoppingCartMenu && shoppingCartCount > 0) {\n return (\n 1\n ? t('RCORE_TOPNAV_SHOPPING_CART_ITEMS', { itemCount: shoppingCartCount })\n : t('RCORE_TOPNAV_SHOPPING_CART_ITEM', { itemCount: shoppingCartCount })\n }\n disabled={disableShoppingCart}\n onClick={navigateToCart}\n >\n \n \n \n \n );\n }\n return null;\n}\n\n// PropType check\nShoppingCart.propTypes = {\n /**\n * ShoppingCart Menu\n */\n shoppingCartMenu: PropTypes.oneOfType([PropTypes.object])\n};\n\nShoppingCart.defaultProps = {\n shoppingCartMenu: undefined\n};\n\nexport default ShoppingCart;\n","import React, { useContext, useState, useEffect } from 'react';\nimport {\n AppHeader,\n IconButton,\n Icon,\n LiveRegion,\n useLiveRegionContext\n} from '@sumtotal/react-foundation';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components';\nimport Config from '../../../config/Config';\nimport ProfileMenu from './ProfileMenu';\nimport CurrentThemeContext from '../../../contexts/ThemeContext';\nimport DomainSwitcher from './DomainSwitcher';\nimport MyGuide from './MyGuide';\nimport Notifications from './Notifications';\nimport Help from './Help';\nimport EnterpriseSearch from './EnterpriseSearch';\nimport ShoppingCart from './ShoppingCart';\nimport useUserContext from '../../hooks/useUserContext';\nimport authService from '../../../authentication/AuthorizeService';\nimport getLogger from '../../../utils/logger';\nimport {\n addIframeClickListeners,\n removeIframeClickListeners\n} from '../../../modules/core/services/coreIFrameHelper';\nimport useHeaderContext from '../../hooks/useHeaderContext';\n\nconst SearchIcon = styled(IconButton)`\n color: ${(props) => props.theme.variables.headerBarColor};\n &.Mui-disabled {\n color: ${(props) => props.theme.variables.headerBarColor};\n opacity: 0.5;\n }\n`;\nconst CloseIcon = styled(IconButton)`\n padding: 0rem 0rem 0rem 0.5rem;\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n &.Mui-disabled {\n color: ${(props) =>\n props.isFloatingSearch\n ? props.theme.variables.leftNavParentColor\n : props.theme.variables.headerBarColor};\n opacity: 0.5;\n }\n`;\n\nconst SearchContainer = styled.div`\n display: ${(props) => (props.showGrid ? 'grid' : 'block')};\n display: ${(props) => (props.showGrid ? '-ms-grid' : 'block')};\n grid-template-columns: ${(props) => (props.showGrid ? '1fr auto' : '')};\n -ms-grid-columns: ${(props) => (props.showGrid ? '1fr auto' : '')};\n .gridColumn1 {\n -ms-grid-column: 1;\n }\n .gridColumn2 {\n -ms-grid-column: 2;\n }\n`;\n\nconst AppMenuHeader = ({\n menusData,\n userData,\n profileMenus,\n helpMenu,\n myGuideMenu,\n notificationsMenu,\n logoClickUrl,\n domainSwitchNode,\n searchTypes,\n searchUrl,\n shoppingCartMenu,\n onNavigationCallback\n}) => {\n const { t } = useTranslation([\n 'TRANSLATIONS_RCORE_TOPNAV',\n 'TRANSLATIONS_RCORE_COMMON',\n 'TRANSLATIONS_RCORE_TOPNAV_SEARCH'\n ]);\n const translationsData = {};\n // Pass all the translation keys required for AppHeader component\n const translationKeys = [\n 'RCORE_TOPNAV_MENU_QUICKFIND_SEARCH',\n 'RCORE_TOPNAV_MENU_LABEL_CLOSE_MENU',\n 'RCORE_TOPNAV_MENU_LABEL_SEARCH',\n 'TRANSLATIONS_RCORE_TOPNAV_SEARCH:RCORE_TOPNAV_SEARCH_CLEAR_TEXT',\n 'RCORE_TOPNAV_MY_TEAM_MENU_CLOSE',\n 'RCORE_TOPNAV_SELF_MENU_CLOSE',\n 'RCORE_TOPNAV_ADMINISTRATION_MENU_CLOSE',\n 'RCORE_TOPNAV_ADMINISTRATION_MENU_SECTION',\n 'RCORE_TOPNAV_MY_TEAM_MENU_SECTION',\n 'RCORE_TOPNAV_SELF_MENU_SECTION',\n 'RCORE_TOPNAV_MENU_AREAS',\n 'RCORE_TOPNAV_MENU_QUICKFIND_SEARCH_NODATA'\n ];\n translationKeys.forEach((key) => {\n translationsData[key] = t(key);\n });\n const screenResolution = window.matchMedia('(max-width: 1279px)');\n const [smallerResolution, setSmallerResolution] = useState(screenResolution.matches);\n const [searchIconSelected, setSearchIconSelected] = useState(false);\n function screenResize(e) {\n setSmallerResolution(e.matches);\n if (searchIconSelected) setSearchIconSelected(false);\n }\n const { setLiveRegionMessage } = useLiveRegionContext();\n const themeContext = useContext(CurrentThemeContext);\n const { user } = useUserContext();\n const disableAppHeader = user.isEmulatedUser ? false : user.mustAnswerSecurityQuestions;\n const { logoData, favIconData } = themeContext;\n const [previewLogoUrl] = logoData;\n const [favIconUrl] = favIconData;\n const headerData = useHeaderContext();\n\n let LogoSrc = `${Config.domain}//${Config.logo}`;\n if (previewLogoUrl && previewLogoUrl !== '') {\n LogoSrc = previewLogoUrl;\n }\n\n let favIconSrc = `${Config.domain}${Config.favicon}`;\n if (favIconUrl && favIconUrl !== '') {\n favIconSrc = favIconUrl;\n }\n const faviconElement = document.getElementById('favicon');\n if (faviconElement) {\n faviconElement.href = favIconSrc;\n }\n\n const userDetails = { ...userData };\n if (userDetails.personInfo.imagePath !== user.image) {\n userDetails.personInfo.imagePath = user.image;\n } else {\n if (userDetails.personInfo.fullName !== user.name) {\n userDetails.personInfo.fullName = user.name;\n }\n if (userDetails.jobTitle !== user.jobTitle) {\n userDetails.jobTitle = user.jobTitle;\n }\n }\n const handleSearchClick = () => {\n setLiveRegionMessage('');\n setSearchIconSelected(true);\n setTimeout(() => {\n const focusElement = document.getElementById('enterpriseSearchComboBox');\n if (focusElement) {\n focusElement.focus();\n }\n setLiveRegionMessage(t('RCORE_TOPNAV_NAVIGATION_MENUS'));\n }, 1000);\n };\n const handleSearchClose = () => {\n setSearchIconSelected(false);\n\n setTimeout(() => {\n const focusElement = document.getElementsByClassName('headerSearchIcon');\n if (focusElement) {\n focusElement[0].focus();\n }\n });\n };\n\n useEffect(() => {\n screenResolution.addListener(screenResize);\n return () => screenResolution.removeListener(screenResize);\n });\n\n const onMenuClick = (selectedNode) => {\n removeIframeClickListeners();\n onNavigationCallback(selectedNode);\n if (selectedNode && selectedNode.nodeKey === 'self_createaccount') {\n authService\n .removeAccessToken()\n .then(() => {\n window.location.assign(selectedNode.url);\n return null;\n })\n .catch((err) => {\n getLogger().error(err);\n });\n }\n };\n\n const onMenuOpen = (callbackForClose) => {\n if (headerData.headerContext.coreFrameLoaded) {\n setTimeout(() => {\n addIframeClickListeners(callbackForClose);\n }, 100);\n }\n };\n const onSkipLinkClick = () => {\n const contentElement = document.getElementsByClassName('content')[0];\n contentElement.setAttribute('tabindex', '-1');\n contentElement.focus();\n };\n\n const readResults = (count, searchText) => {\n setLiveRegionMessage('');\n setTimeout(() => {\n setLiveRegionMessage(\n t('TRANSLATIONS_RCORE_COMMON:RCORE_TOPNAV_SEARCH_RESULTS_ANNOUNCEMENT_TEXT', {\n SearchCount: count,\n SearchText: searchText\n })\n );\n }, 500);\n };\n\n return (\n <>\n \n
    \n 0 &&\n searchUrl &&\n (smallerResolution && !searchIconSelected ? (\n \n \n \n ) : (\n searchTypes &&\n searchTypes.length > 0 && (\n \n \n {searchIconSelected && (\n \n \n \n )}\n \n )\n ))\n }\n myGuideElement={myGuideMenu && }\n shoppingCartElement={\n shoppingCartMenu && \n }\n notificationsElement={notificationsMenu && }\n profileMenu={}\n helpElement={helpMenu && }\n adminHeaderCustomElement={\n domainSwitchNode && (\n \n )\n }\n />\n \n );\n};\n\nAppMenuHeader.propTypes = {\n /**\n * Menus data\n */\n menusData: PropTypes.arrayOf(PropTypes.shape({})),\n /**\n * user data\n */\n userData: PropTypes.oneOfType([PropTypes.object]),\n /**\n * Profile Menus\n */\n profileMenus: PropTypes.arrayOf(PropTypes.shape({})),\n /**\n * Help Menu\n */\n helpMenu: PropTypes.oneOfType([PropTypes.object]),\n /**\n * My Guide Menu\n */\n myGuideMenu: PropTypes.oneOfType([PropTypes.object]),\n /**\n * Notifications Menu\n */\n notificationsMenu: PropTypes.oneOfType([PropTypes.object]),\n /**\n * Home Logo click url\n */\n logoClickUrl: PropTypes.string,\n /**\n * Domain switch node\n */\n domainSwitchNode: PropTypes.oneOfType([PropTypes.object]),\n /**\n * Enabled search types\n */\n searchTypes: PropTypes.arrayOf(PropTypes.shape({})),\n /**\n * Search Url\n */\n searchUrl: PropTypes.string,\n /**\n * ShoppingCart Menu\n */\n shoppingCartMenu: PropTypes.oneOfType([PropTypes.object]),\n /**\n * Callback fired when menuItem is clicked.\n */\n onNavigationCallback: PropTypes.func\n};\n\nAppMenuHeader.defaultProps = {\n menusData: undefined,\n userData: undefined,\n profileMenus: undefined,\n helpMenu: undefined,\n myGuideMenu: undefined,\n notificationsMenu: undefined,\n logoClickUrl: undefined,\n domainSwitchNode: undefined,\n searchTypes: undefined,\n searchUrl: '',\n shoppingCartMenu: undefined,\n onNavigationCallback: undefined\n};\n\nexport default AppMenuHeader;\n","import axios from 'axios';\nimport {\n getIdbItem,\n getLocalStorageItem,\n setIdbItem,\n parseKeyValue,\n setLocalStorageItem,\n addUpdateKeyValue,\n StorageConstants\n} from '../../../utils/clientStorage';\nimport { getConfig } from '../../../config/apiConfig';\n\nconst getSitemap = async (foreceRefreshSitemap) => {\n const rcoreSitemapHash = getLocalStorageItem(StorageConstants.Keys.sitemap);\n let sitemapRequest = { sitemapHash: null, dashboardHash: null };\n let cachedRcoreSiteMap = {};\n\n if (foreceRefreshSitemap !== true) {\n let hashValues = null;\n // Get sitemap hash\n cachedRcoreSiteMap = await getIdbItem('RCoreSitemap');\n if (rcoreSitemapHash && cachedRcoreSiteMap) {\n hashValues = parseKeyValue(rcoreSitemapHash);\n }\n sitemapRequest = {\n sitemapHash: hashValues ? hashValues.get(StorageConstants.SitemapHash) : null,\n dashboardHash: hashValues ? hashValues.get(StorageConstants.DashboardHash) : null,\n rcoreDashboardHash: hashValues ? hashValues.get(StorageConstants.RcoreDashboardHash) : null\n };\n }\n // Get auth header config\n const config = await getConfig();\n return axios\n .post('api/rcore/sitemap', sitemapRequest, config)\n .then(async (resp) => {\n let response = resp;\n // Refresh client storage with updated data if received from server\n if (\n response.data &&\n response.data.sitemap &&\n response.data.sitemap.nodes &&\n response.data.sitemap.nodes.length > 0\n ) {\n // Update sitemap hash to local storage\n const updatedHash = addUpdateKeyValue(\n rcoreSitemapHash,\n StorageConstants.SitemapHash,\n response.data.sitemap.hash\n );\n setLocalStorageItem(StorageConstants.Keys.sitemap, updatedHash);\n\n // Add profile menus to sitemap in order to store single object in cache\n response.data.sitemap.profileMenus = response.data.profileMenus;\n // Store sitemap in indexed db\n await setIdbItem('RCoreSitemap', response.data.sitemap);\n } else if (response.data && response.data.sitemap) {\n // Get the data from client storage\n response.data.sitemap = cachedRcoreSiteMap;\n } else {\n response = { data: { sitemap: { nodes: [] } } };\n }\n const respObj = await includeDashboardSitemap(response.data);\n\n return respObj;\n })\n .catch((err) => {\n throw err.response;\n });\n};\n\nconst includeDashboardSitemap = async (response) => {\n // Get accessible dashboards of the user and add them to self menu of the sitemap response\n if (\n response.dashboardSitemap &&\n response.dashboardSitemap.nodes &&\n response.dashboardSitemap.nodes.length > 0\n ) {\n const dashboardParent = response.dashboardSitemap.nodes.filter(\n (t) => t.nodeKey === 'manage_dashboard_listmenu'\n )[0];\n if (dashboardParent && dashboardParent.childNodes && dashboardParent.childNodes.length > 0) {\n /* Select only dashboards with dashboardType = 0 representing dashboards,\n skip dashboardType = 1 representing workspaces */\n const dashboards = dashboardParent.childNodes.filter((t) => t.dashboardType === 0);\n dashboardParent.childNodes = dashboards;\n\n // Add Dashboard sitemap to the self menu\n const selfNode = response.sitemap.nodes.find((t) => t.nodeKey === 'self_header');\n if (selfNode) {\n // Remove dashboards node if it already exists in Self menu\n selfNode.childNodes = selfNode.childNodes.filter(\n (t) => t.nodeKey !== 'manage_dashboard_listmenu'\n );\n selfNode.childNodes.unshift(dashboardParent);\n }\n }\n // Update dashboard hash to local storage\n const rcoreSitemapHash = getLocalStorageItem(StorageConstants.Keys.sitemap);\n const updatedHash = addUpdateKeyValue(\n rcoreSitemapHash,\n StorageConstants.DashboardHash,\n response.dashboardSitemap.hash\n );\n setLocalStorageItem(StorageConstants.Keys.sitemap, updatedHash);\n\n // Store dashboard sitemap in indexed db\n await setIdbItem('RCoreDashboardSitemap', response.dashboardSitemap);\n } else if (response && response.dashboardSitemap) {\n // Get dashboard data from client storage indexed db\n response.dashboardSitemap = await getIdbItem('RCoreDashboardSitemap');\n } else {\n response.dashboardSitemap = { nodes: [] };\n }\n\n if (\n response.rcoreDashboardSitemap &&\n response.rcoreDashboardSitemap.nodes &&\n response.rcoreDashboardSitemap.nodes.length > 0\n ) {\n const dashboardParent = response.rcoreDashboardSitemap.nodes.filter(\n (t) => t.nodeKey === 'manage_rcore_dashboard_listmenu'\n )[0];\n if (dashboardParent && dashboardParent.childNodes && dashboardParent.childNodes.length > 0) {\n // Add Dashboard sitemap to the self menu\n const selfNode = response.sitemap.nodes.find((t) => t.nodeKey === 'self_header');\n if (selfNode) {\n // Remove dashboards node if it already exists in Self menu\n selfNode.childNodes = selfNode.childNodes.filter(\n (t) => t.nodeKey !== 'manage_rcore_dashboard_listmenu'\n );\n selfNode.childNodes.unshift(dashboardParent);\n }\n }\n // Update dashboard hash to local storage\n const rcoreSitemapHash = getLocalStorageItem(StorageConstants.Keys.sitemap);\n const updatedHash = addUpdateKeyValue(\n rcoreSitemapHash,\n StorageConstants.RcoreDashboardHash,\n response.rcoreDashboardSitemap.hash\n );\n setLocalStorageItem(StorageConstants.Keys.sitemap, updatedHash);\n\n // Store dashboard sitemap in indexed db\n await setIdbItem('LatestDashboardsSitemap', response.rcoreDashboardSitemap);\n } else if (response && response.rcoreDashboardSitemap) {\n // Get dashboard data from client storage indexed db\n response.rcoreDashboardSitemap = await getIdbItem('LatestDashboardsSitemap');\n } else {\n response.rcoreDashboardSitemap = { nodes: [] };\n }\n return response;\n};\n\nexport default getSitemap;\n","import axios from 'axios';\nimport { getConfig } from '../../../config/apiConfig';\nimport authService from '../../../authentication/AuthorizeService';\nimport getLogger from '../../../utils/logger';\n\nconst getNotificationCount = async (userId, refresh, countOverDue) => {\n let targetUserId = userId;\n let forceRefresh = refresh;\n let countOverDueOnly = countOverDue;\n\n if (!targetUserId) {\n targetUserId = await authService.getMaskedUserId();\n }\n if (!refresh) {\n forceRefresh = false;\n }\n if (!countOverDue) {\n countOverDueOnly = false;\n }\n // Get auth header config\n const config = await getConfig();\n const requestUrl = `api/timelineapi/LoadNotificationCount?targetUserId=${targetUserId}&forceRefresh=${forceRefresh}&countOverDueOnly=${countOverDueOnly}`;\n return axios\n .get(requestUrl, config)\n .then(async (response) => {\n return response.data;\n })\n .catch((err) => {\n getLogger().error(err.response);\n return 0;\n });\n};\n\nexport default getNotificationCount;\n","import React, { useCallback, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useHistory } from 'react-router';\nimport { useTranslation } from 'react-i18next';\nimport { ControlPanel, ControlPanelItem, RouteLink } from '@sumtotal/react-foundation';\nimport styled from 'styled-components';\nimport { postMessage } from '../../../modules/core/services/coreIFrameHelper';\nimport { GetProcessedNodeUrl } from '../../../utils/urlHelper';\nimport useHeaderContext from '../../hooks/useHeaderContext';\nimport useUserContext from '../../hooks/useUserContext';\nimport getNotificationCount from '../../topnav/services/timelineService';\nimport { getPastDueCount } from '../../../modules/onePlace/activitiesAndTasks/activities/services/myActivitiesService';\n\nimport getLogger from '../../../utils/logger';\n\nconst StyledControlPanelItem = styled(ControlPanelItem)`\n background-color: ${(props) => {\n if (\n props.highlightControlPanelItem &&\n (props.navigatioUrl === '' ||\n (props.navigatioUrl === '/' &&\n window.location.pathname === `/rcore${props.homePageUrl.split('?')[0]}`) ||\n window.location.pathname === `/rcore${props.navigatioUrl.split('?')[0]}`)\n )\n return props.theme.variables.topbarNavActiveStateBackground;\n return 'inherit';\n }};\n color: ${(props) => {\n if (\n props.highlightControlPanelItem &&\n (props.navigatioUrl === '' ||\n (props.navigatioUrl === '/' &&\n window.location.pathname === `/rcore${props.homePageUrl.split('?')[0]}`) ||\n window.location.pathname === `/rcore${props.navigatioUrl.split('?')[0]}`)\n )\n return props.theme.variables.topbarNavActiveStateTextColor;\n return props.theme.variables.leftNavParentColor;\n }};\n &:focus {\n background-color: ${(props) => {\n if (\n props.highlightControlPanelItem &&\n (props.navigatioUrl === '' ||\n (props.navigatioUrl === '/' &&\n window.location.pathname === `/rcore${props.homePageUrl.split('?')[0]}`) ||\n window.location.pathname === `/rcore${props.navigatioUrl.split('?')[0]}`)\n )\n return props.theme.variables.topbarNavActiveStateBackground;\n return props.theme.variables.topbarNavHoverStateBackground;\n }};\n }\n`;\n\nconst StyledControlPanel = styled(ControlPanel)`\n min-height: ${(props) => props.minh}px;\n display: flex;\n flex-direction: column;\n .MuiButton-outlined.Mui-disabled {\n border: none;\n }\n`;\n\nconst StyledRouteLink = styled(RouteLink)`\n bottom: 0.75rem;\n width: inherit;\n margin-top: 0.75rem;\n text-align: center;\n text-transform: none;\n font-size: 0.625rem;\n line-height: 0.75rem;\n text-decoration: none;\n font-weight: 500;\n padding: 0.0625rem;\n color: ${(props) => props.theme.variables.leftNavParentColor};\n &:focus,\n &:hover,\n &:active {\n text-decoration: underline;\n }\n`;\n\nconst EllipseControlPanelItem = styled(ControlPanelItem)`\n padding-top: 0rem;\n padding-bottom: 0rem;\n min-height: 1.25rem;\n`;\n\nconst DisabledLink = styled(StyledRouteLink)`\n pointer-events: none;\n`;\n/**\n * Component for Control Panel Container.\n *\n */\nfunction ControlPanelContainer({\n controlPanelItems,\n highlightControlPanelItem,\n setHighlightCPItem\n}) {\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n const history = useHistory();\n const [ControlPanelItemList, setControlPanelItemList] = useState([]);\n const [PageControlPanelItemList, setPageControlPanelItemList] = useState([]);\n const [ControlPanelFooter, setControlPanelFooter] = useState({});\n const nodes = controlPanelItems.Nodes;\n const footerNode = controlPanelItems.Footer;\n const headerData = useHeaderContext();\n const { headerContext, setHeaderContext } = headerData;\n const [timelineCount, setTimelineCount] = useState();\n const [mytodosOverDueCount, setMytodosOverDueCount] = useState();\n const { user } = useUserContext();\n const disableControlPanel = user.isEmulatedUser ? false : user.mustAnswerSecurityQuestions;\n const Link = disableControlPanel ? DisabledLink : StyledRouteLink;\n const [showUpperEllipse, setShowUpperEllipse] = useState(false);\n const [showLowerEllipse, setShowLowerEllipse] = useState(false);\n const [calcHeight, updateCalcHeight] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n const [firstPage, setFirstpage] = useState(0);\n const [lastPage, setLastPage] = useState(0);\n const [minHeight, setMinHeight] = useState(null);\n const logger = getLogger();\n\n const updateSize = () => {\n const clientheight = document.getElementById('modal-sidebar-controlpanel-items').clientHeight;\n updateCalcHeight(clientheight);\n if (clientheight > 220) {\n const first = Math.round((clientheight - 142) / 58);\n if (first >= ControlPanelItemList.length) {\n setCurrentPage(1);\n setShowLowerEllipse(false);\n setShowUpperEllipse(false);\n setFirstpage(ControlPanelItemList.length);\n setPageControlPanelItemList(ControlPanelItemList);\n } else {\n setFirstpage(first);\n setLastPage(ControlPanelItemList.length - first);\n if (currentPage === 2) {\n setPageControlPanelItemList(\n ControlPanelItemList.slice(\n ControlPanelItemList.length - lastPage,\n ControlPanelItemList.length\n )\n );\n setShowLowerEllipse(false);\n setShowUpperEllipse(true);\n const minh = 150 + (ControlPanelItemList.length - first) * 58;\n setMinHeight(minh);\n } else if (currentPage === 1) {\n setShowLowerEllipse(true);\n setShowUpperEllipse(false);\n setPageControlPanelItemList(ControlPanelItemList.slice(0, first));\n setMinHeight(null);\n }\n }\n }\n };\n\n function ChangeEllipsePosition(position) {\n if (position) {\n setShowUpperEllipse(false);\n setShowLowerEllipse(true);\n setPageControlPanelItemList(ControlPanelItemList.slice(0, firstPage));\n setCurrentPage(1);\n setMinHeight(null);\n setTimeout(() => {\n document.getElementById('sidebar-lower-ellipsis').focus();\n }, 200);\n } else if (!position) {\n setShowUpperEllipse(true);\n setShowLowerEllipse(false);\n setPageControlPanelItemList(\n ControlPanelItemList.slice(\n ControlPanelItemList.length - lastPage,\n ControlPanelItemList.length\n )\n );\n setCurrentPage(2);\n const minh = 150 + lastPage * 58;\n setMinHeight(minh);\n setTimeout(() => {\n document.getElementById('sidebar-upper-ellipsis').focus();\n }, 200);\n }\n }\n\n const timeLineBadgeAriaLable = useCallback((Count) => {\n if (Count > 1) {\n return t('RCORE_TOPNAV_TIMELINE_ITEMS', {\n Count\n });\n }\n return t('RCORE_TOPNAV_TIMELINE_ITEM', {\n Count\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n // Data required for Control Panel\n const ControlPanelData = [];\n if (nodes != null) {\n nodes.forEach((item) => {\n const node = item;\n if (node.nodeKey === 'home_header') {\n node.url = '/';\n } else if (\n node.nodeKey === 'alert_header' &&\n (headerContext.refreshTimeline === undefined || headerContext.refreshTimeline)\n ) {\n const forceRefresh =\n headerContext.refreshTimeline === undefined ? false : headerContext.refreshTimeline;\n getNotificationCount(null, forceRefresh, true)\n .then((Count) => {\n if (Count > 0) {\n node.showBadgeIcon = true;\n node.ariaLabel = timeLineBadgeAriaLable(Count);\n } else {\n node.showBadgeIcon = false;\n }\n setTimelineCount(Count);\n postMessage(\n 'REFRESH_TIMELINE_COUNT',\n { notificationCount: Count },\n false,\n null,\n false,\n true\n );\n if (headerContext.refreshTimeline) {\n setHeaderContext((state) => ({\n ...state,\n refreshTimeline: false\n }));\n }\n return Count;\n })\n .catch((err) => {\n logger.error(err);\n return 0;\n });\n } else if (node.nodeKey === 'my_activities') {\n const getMyTodosOverDueCount = async () => {\n try {\n const { data } = await getPastDueCount({});\n if (data) {\n const { pastDueTrainingCount } = data[0];\n if (pastDueTrainingCount) {\n node.showBadgeIcon = true;\n node.ariaLabel = timeLineBadgeAriaLable(pastDueTrainingCount);\n setMytodosOverDueCount(pastDueTrainingCount);\n } else {\n node.showBadgeIcon = false;\n node.ariaLabel = timeLineBadgeAriaLable(pastDueTrainingCount);\n setMytodosOverDueCount(pastDueTrainingCount);\n }\n }\n } catch (error) {\n logger.error(error);\n }\n };\n getMyTodosOverDueCount();\n }\n ControlPanelData.push(node);\n });\n }\n setControlPanelItemList(ControlPanelData);\n setPageControlPanelItemList(ControlPanelData);\n setFirstpage(ControlPanelData.length);\n if (footerNode != null) {\n footerNode.url = GetProcessedNodeUrl(footerNode);\n }\n setControlPanelFooter(footerNode);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [nodes, footerNode, headerContext.refreshTimeline, setHeaderContext, timeLineBadgeAriaLable]);\n\n useEffect(() => {\n window.addEventListener('resize', updateSize);\n return () => window.removeEventListener('resize', updateSize);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [calcHeight, ControlPanelItemList]);\n\n function handleItemClick(event, nodeKey, action) {\n setHighlightCPItem(nodeKey);\n if (action === 'OPEN_LIBRARY') {\n if (window.location.pathname.indexOf('/c/') > 0) {\n postMessage(action, null, null, event.currentTarget.id);\n return;\n }\n const libNode = ControlPanelItemList.find((item) => item.nodeKey === 'Learner_MenuTaxonomy');\n history.push(libNode.url);\n } else if (action !== 'NAVIGATE') {\n postMessage(action, null, null, event.currentTarget.id);\n } else return null;\n }\n\n function handleItemMouseClick(event, nodeKey, action, url) {\n if (\n action === 'NAVIGATE' &&\n (event.keyCode === 13 || event.button === 1 || event.button === 0)\n ) {\n setHighlightCPItem(nodeKey);\n history.push(url);\n }\n }\n\n const getBadgeCount = ({ nodeKey }) => {\n if (nodeKey === 'alert_header') return timelineCount;\n if (nodeKey === 'my_activities') return mytodosOverDueCount;\n return null;\n };\n return (\n {ControlPanelFooter.name}\n ) : null\n }\n minh={minHeight}\n >\n
    \n {showUpperEllipse && (\n ChangeEllipsePosition(true)}\n />\n )}\n {PageControlPanelItemList &&\n PageControlPanelItemList.map((item) => (\n \n ))}\n {showLowerEllipse && (\n ChangeEllipsePosition(false)}\n />\n )}\n \n );\n}\n// PropType check\nControlPanelContainer.propTypes = {\n /**\n * Control panel items\n */\n controlPanelItems: PropTypes.shape({\n Nodes: PropTypes.arrayOf(PropTypes.shape({})),\n Footer: PropTypes.shape({ url: PropTypes.string })\n }),\n /**\n * Highlight Control panel item\n */\n highlightControlPanelItem: PropTypes.string,\n /**\n * function highlight Control panel item\n */\n setHighlightCPItem: PropTypes.func\n};\n\nControlPanelContainer.defaultProps = {\n controlPanelItems: {},\n highlightControlPanelItem: '',\n setHighlightCPItem: undefined\n};\n\nexport default ControlPanelContainer;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Button, Icon } from '@sumtotal/react-foundation';\nimport styled from 'styled-components';\nimport { useTranslation } from 'react-i18next';\nimport authService from '../../../authentication/AuthorizeService';\nimport getLogger from '../../../utils/logger';\n\nconst Strip = styled.div`\n min-height: 2.1875rem;\n background-color: #f8b300;\n font-size: 0.875rem;\n color: #000;\n margin: 0.125rem;\n text-align: center;\n`;\n\nconst Text = styled.span`\n padding: 0.5rem 0;\n display: inline-block;\n width: 70%;\n font-weight: 600;\n`;\n\nconst ExitEmulationBtn = styled(Button)`\n color: #000;\n float: right;\n &:hover {\n background-color: transparent;\n color: #000;\n }\n &:active {\n color: #000;\n background-color: transparent;\n }\n &:focus {\n color: #000;\n background-color: transparent;\n }\n`;\n\nfunction EmulationStrip({ emulatedUser, exitEmulationUrl }) {\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n\n const handleExitEmulation = () => {\n authService\n .removeAccessToken()\n .then(() => {\n window.location.assign(exitEmulationUrl);\n return null;\n })\n .catch((err) => {\n getLogger().error(err);\n });\n };\n\n if (emulatedUser && emulatedUser !== '') {\n return (\n <>\n \n \n {t('RCORE_TOPNAV_EMULATION_TEXT', {\n username: emulatedUser,\n interpolation: { escapeValue: false }\n })}\n \n }\n variant=\"text\"\n onClick={handleExitEmulation}\n disableFocusRipple\n >\n {t('RCORE_TOPNAV_EXIT_EMULATION')}\n \n \n \n );\n }\n return null;\n}\n\n// PropType check\nEmulationStrip.propTypes = {\n /**\n * isEmulationMode flag to detect emulation mode\n */\n emulatedUser: PropTypes.string,\n /**\n * url for exit emulation\n */\n exitEmulationUrl: PropTypes.string\n};\n\nEmulationStrip.defaultProps = {\n emulatedUser: '',\n exitEmulationUrl: ''\n};\n\nexport default EmulationStrip;\n","import eachDeep from 'deepdash/eachDeep';\n\nconst getMaxDepthOfTree = (rootNode, property) => {\n let maxDepth = 0;\n eachDeep(\n rootNode,\n (child, i, parent, ctx) => {\n if (maxDepth < ctx.depth) {\n maxDepth = ctx.depth;\n }\n },\n { childrenPath: property }\n );\n return maxDepth;\n};\n\nexport default getMaxDepthOfTree;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport findValueDeep from 'deepdash/findValueDeep';\nimport { Button, PageLoader } from '@sumtotal/react-foundation';\nimport { useTranslation } from 'react-i18next';\nimport queryString from 'query-string';\nimport AppMenuHeader from '../../topnav/components/AppMenuHeader';\nimport getSitemap from '../../topnav/services/sitemapService';\nimport { GetProcessedNodeUrl, ProcessTreeNodes } from '../../../utils/urlHelper';\nimport getUserProfile from '../../topnav/services/personService';\nimport authService from '../../../authentication/AuthorizeService';\nimport { getSearchTypes } from '../../topnav/services/searchService';\nimport useUserContext from '../../hooks/useUserContext';\nimport ControlPanelContainer from '../../sidebar/components/ControlPanelContainer';\nimport EmulationStrip from './EmulationStrip';\nimport useHeaderContext from '../../hooks/useHeaderContext';\nimport { IntegrationElement } from '../../../utils/IntegrationConstants';\nimport CheckIntegrationSetting from '../../../utils/integrationHelper';\nimport useIntegrationContext from '../../hooks/useIntegrationContext';\nimport getMaxDepthOfTree from '../../../utils/treeHelper';\n\nconst HeaderSection = styled.div`\n height: '3.25rem';\n`;\n\nconst IntegrationHomeBtn = styled(Button)`\n float: left;\n`;\n\nconst coreNodes = ['self_personaldetails', 'Profile', 'menu_signout', 'self_signin'];\n\nfunction updateExitEmulationUrl(profileData) {\n const { url } = profileData.filter((node) => node.nodeKey === 'menu_signout')[0];\n return url.replace('$HOST_NAME', window.location.host);\n}\n\nfunction SitemapProvider({ emulatedUser }) {\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n\n const [menusData, setMenusData] = useState([]);\n const [isLoaded, setIsLoaded] = useState(false);\n const [errorMessage, setErrorMessage] = useState('');\n const [userData, setUserData] = useState({});\n const [profileMenus, setProfileMenus] = useState([]);\n const [helpMenu, setHelpMenu] = useState(null);\n const [myGuideMenu, setMyGuideMenu] = useState(null);\n const [notificationsMenu, setNotificationsMenu] = useState(null);\n const [shoppingCartMenu, setShoppingCartMenu] = useState(null);\n const [homeUrl, setHomeUrl] = useState(null);\n const { dispatch } = useUserContext();\n const [domainSwitchNode, setDomainSwitchNode] = useState(null);\n const [controlPanelItems, setcontrolPanelItems] = useState({});\n const [searchTypes, setSearchTypes] = useState([]);\n const [searchUrl, setSearchUrl] = useState(null);\n const [exitEmulationUrl, setExitEmulationUrl] = useState();\n const [coreReady, setCoreReady] = useState(false);\n const { headerContext } = useHeaderContext();\n const [selectedMenuKey, setSelectedMenuKey] = useState('');\n const { integrationContext } = useIntegrationContext();\n const { refreshSitemap } = queryString.parse(window.location.search, { parseBooleans: true });\n\n useEffect(() => {\n Promise.all([\n getSitemap(refreshSitemap),\n getUserProfile(),\n getSearchTypes(),\n authService.getUserProfile()\n ])\n .then((results) => {\n const data = results[0].sitemap;\n const termsForUse =\n results[0].termsAndConditionsLink && results[0].termsAndConditionsLink != null\n ? results[0].termsAndConditionsLink\n : null;\n const availableControlPanelNodes = updateControlPanelMenus(\n data.nodes,\n results[0].controlPanelMenuItems\n );\n const controlPanelNodes =\n availableControlPanelNodes != null ? availableControlPanelNodes : null;\n const controlPanelData = { Nodes: controlPanelNodes, Footer: termsForUse };\n setcontrolPanelItems(controlPanelData);\n // set exit emulation url\n if (emulatedUser && emulatedUser !== '') {\n const url = updateExitEmulationUrl(data.profileMenus);\n setExitEmulationUrl(url);\n }\n const userObject = results[1];\n if (userObject.mustAnswerSecurityQuestions) {\n userObject.UserJustAnsweredSecurityQuestion = !userObject.mustAnswerSecurityQuestions;\n } else {\n userObject.UserJustAnsweredSecurityQuestion = userObject.mustAnswerSecurityQuestions;\n }\n const landingDashBoardurl = GetProcessedNodeUrl(results[0].landingWebPart);\n setHomeUrl(landingDashBoardurl);\n setProfileMenus(data.profileMenus);\n setUserData(results[1]);\n if (results[2] && results[2].searchTypes) setSearchTypes(results[2].searchTypes);\n const accessibleRcoreRoutes = ProcessTreeNodes(data.nodes);\n setCurrentUser(\n results[1],\n landingDashBoardurl,\n results[3],\n accessibleRcoreRoutes,\n results[0].routeUrls\n );\n filterMenus(data, results[0].quickLinks);\n setErrorMessage('');\n setIsLoaded(true);\n return null;\n })\n .catch((errorResponse) => {\n setErrorMessage(errorResponse !== undefined ? errorResponse.data : '');\n setIsLoaded(true);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (isLoaded && emulatedUser && emulatedUser !== '') {\n const focusElement = document.getElementById('exitEmulationBtn');\n if (focusElement)\n setTimeout(() => {\n focusElement.focus();\n }, 1000);\n }\n }, [isLoaded, emulatedUser]);\n\n const isEmulatedUser = emulatedUser !== '' && emulatedUser;\n // setting user details in UserContext\n function setCurrentUser(\n userDetails,\n homePageUrl,\n userDetailsAuthService,\n accessibleRcoreRoutes,\n securedRoutes\n ) {\n dispatch({\n type: 'USER_INFO',\n user: {\n name: userDetails.personInfo.fullName,\n userId: userDetails.personInfo.personNumber,\n personPK: userDetails.personInfo.personPK,\n image: userDetails.personInfo.imagePath,\n jobTitle: userDetails.jobTitle,\n mustAnswerSecurityQuestions: userDetails.mustAnswerSecurityQuestions,\n culture: userDetailsAuthService.culture,\n dateFormat: userDetailsAuthService.dateformat,\n timeFormat: userDetailsAuthService.timeformat,\n userTimeZoneId: userDetailsAuthService.usertimezoneid,\n twoLetterISOLanguageName: userDetailsAuthService.twoLetterISOLanguageName,\n isEmulatedUser,\n currentDomainId: userDetails.personInfo.currentDomainId\n },\n accessibleRcoreRoutes,\n securedRoutes,\n homePageUrl\n });\n }\n // Filter menus from sitemap data\n function filterMenus(data, quickLinks) {\n const filteredMenus = data.nodes.filter(\n (node) =>\n node.nodeKey === 'self_header' ||\n node.nodeKey === 'team_header' ||\n node.nodeKey === 'admin_header'\n );\n filteredMenus.forEach((menu) => {\n const node = menu;\n if (node.nodeKey === 'admin_header') {\n if (quickLinks && quickLinks.administration) {\n setQuickLinks(node, quickLinks.administration, 'administration_quicklinks');\n }\n // Compute max depth for the administration sitemap node\n node.maxDepthLevel = getMaxDepthOfTree(node, 'childNodes');\n node.maxDepthLevel = node.maxDepthLevel < 4 ? 4 : node.maxDepthLevel;\n node.childNodes.unshift({\n nodeKey: node.nodeKey,\n url: node.url,\n name: t('RCORE_TOPNAV_MENU_ADMINISTRATION_OVERVIEW'),\n rpKey: node.rpKey,\n childNodes: []\n });\n } else {\n node.showAdditionalAction = false;\n node.actionName = '';\n if (node.nodeKey === 'team_header' && quickLinks && quickLinks.myTeam) {\n setQuickLinks(node, quickLinks.myTeam, 'myteam_quicklinks');\n } else if (quickLinks && quickLinks.self) {\n setQuickLinks(node, quickLinks.self, 'self_quicklinks');\n }\n\n // filter profile nodes from self menu\n if (node.nodeKey === 'self_header' && node.childNodes.length > 0) {\n coreNodes.forEach((key) => {\n const nodeIndex = node.childNodes.findIndex((n) => n.nodeKey === key);\n if (nodeIndex !== -1) {\n node.childNodes.splice(nodeIndex, 1);\n }\n });\n }\n // Compute max depth for each of the sitemap node\n node.maxDepthLevel = getMaxDepthOfTree(node, 'childNodes');\n node.maxDepthLevel = node.maxDepthLevel < 2 ? 2 : node.maxDepthLevel;\n }\n if (node.childNodes.length === 0) {\n filteredMenus.splice(filteredMenus.indexOf(node), 1);\n }\n });\n setMenusData(filteredMenus);\n const shoppingCartNode = data.nodes.filter((node) => node.nodeKey === 'cart_header');\n if (shoppingCartNode.length > 0) setShoppingCartMenu(shoppingCartNode[0]);\n\n const helpNodes = data.nodes.filter((node) => node.nodeKey === 'help_header');\n if (helpNodes.length > 0) setHelpMenu(helpNodes[0]);\n\n const myGuideNodes = data.nodes.filter((node) => node.nodeKey === 'Inapp_guide_header');\n if (myGuideNodes.length > 0) setMyGuideMenu(myGuideNodes[0]);\n\n const notificationsNodes = data.nodes.filter(\n (node) => node.nodeKey === 'Inapp_notification_header'\n );\n if (notificationsNodes.length > 0) setNotificationsMenu(notificationsNodes[0]);\n\n const domainNodes = data.nodes.filter((node) => node.nodeKey === 'Administrator_SwitchDomain');\n if (domainNodes.length > 0) setDomainSwitchNode(domainNodes[0]);\n\n const searchNodes = data.nodes.filter((node) => node.nodeKey === 'search_header');\n if (searchNodes.length > 0) {\n setSearchUrl(searchNodes[0].url);\n }\n }\n\n function setQuickLinks(menuNodeList, configuredQuickLinks, menuQuickLinksNodeKey) {\n const configuredQuickLinkNodes = [];\n if (configuredQuickLinks.menuItems && configuredQuickLinks.menuItems.length > 0) {\n configuredQuickLinks.menuItems.forEach((quickLink) => {\n configuredQuickLinkNodes.push(\n findValueDeep(\n menuNodeList,\n (child) => {\n if (child.id === quickLink.masterSitemapId) {\n return child;\n }\n },\n { childrenPath: 'childNodes' }\n )\n );\n });\n }\n const availableQuickLinkNodes = configuredQuickLinkNodes.filter((item) => item);\n\n if (availableQuickLinkNodes.length > 0) {\n const menuQuickLinksNode = {\n nodeKey: menuQuickLinksNodeKey,\n name: t('RCORE_TOPNAV_MENU_QUICKLINKS_MENUITEM'),\n childNodes: availableQuickLinkNodes,\n expandQuickLinksByDefault: configuredQuickLinks.expandQuickLinksByDefault\n };\n menuNodeList.childNodes.unshift(menuQuickLinksNode);\n // eslint-disable-next-line no-param-reassign\n menuNodeList.expandQuickLinksNodeKey = configuredQuickLinks.expandQuickLinksByDefault\n ? menuQuickLinksNodeKey\n : null;\n }\n }\n\n function updateControlPanelMenus(menuNodeList, controlPanelMenuItems) {\n const configuredControlPanelNodes = [];\n if (\n !(controlPanelMenuItems && controlPanelMenuItems.length > 0) ||\n !(menuNodeList && menuNodeList.length > 0)\n ) {\n return null;\n }\n controlPanelMenuItems.forEach((menuItem) => {\n for (let i = 0; i < menuNodeList.length; i++) {\n const node = menuNodeList[i];\n const ControlPanelitem = findValueDeep(\n node,\n (child) => {\n if (child.id === menuItem.definition.node.id) {\n return child;\n }\n },\n { childrenPath: 'childNodes' }\n );\n\n if (ControlPanelitem) {\n ControlPanelitem.iconName = menuItem.definition.iconName;\n ControlPanelitem.actionType = menuItem.definition.actionType;\n ControlPanelitem.url = GetProcessedNodeUrl(ControlPanelitem);\n if (menuItem.definition.iconSource === 1) {\n ControlPanelitem.iconType = 'MaterialIcon';\n } else if (menuItem.definition.iconSource === 2) {\n ControlPanelitem.iconType = 'IcomoonIcon';\n }\n configuredControlPanelNodes.push(ControlPanelitem);\n break;\n }\n }\n });\n return configuredControlPanelNodes;\n }\n\n const handleIntegrationHomeBtn = () => {\n window.location.assign('/rcore/mylearning?im=1');\n };\n\n const handleControlPanelItem = (SelectedNode) => {\n if (SelectedNode) {\n setSelectedMenuKey(SelectedNode.nodeKey);\n }\n };\n\n if (!isLoaded || !coreReady) {\n if (!coreReady && headerContext.coreFrameLoaded) setCoreReady(true);\n return ;\n }\n\n if (errorMessage !== '') {\n return
    {errorMessage}
    ;\n }\n\n return (\n <>\n {!CheckIntegrationSetting(IntegrationElement.ShowHomeButton, integrationContext.mode) && (\n
    \n \n {t('TRANSLATIONS_RCORE_COMMON:RCORE_HOME_TEXT')}\n \n
    \n )}\n {CheckIntegrationSetting(IntegrationElement.HideTopBar, integrationContext.mode) && (\n \n \n \n )}\n {emulatedUser && emulatedUser !== '' && exitEmulationUrl && exitEmulationUrl !== '' && (\n \n )}\n {CheckIntegrationSetting(IntegrationElement.HideControlPanel, integrationContext.mode) && (\n \n )}\n \n );\n}\n\nSitemapProvider.propTypes = {\n /**\n Emulated user name\n * */\n emulatedUser: PropTypes.string\n};\n\nSitemapProvider.defaultProps = {\n emulatedUser: ''\n};\n\nexport default SitemapProvider;\n","import i18n from 'i18next';\nimport Backend from 'i18next-chained-backend';\nimport Http from 'i18next-http-backend';\nimport LocalforageBackend from 'i18next-localforage-backend'; // primary use cache\nimport localforage from 'localforage';\nimport { initReactI18next } from 'react-i18next';\nimport BackendAdapter from 'i18next-multiload-backend-adapter';\nimport authService from '../authentication/AuthorizeService';\nimport config from './Config';\nimport getLogger from '../utils/logger';\n\nauthService\n .getUser()\n .then((user) => {\n if (user) {\n i18n\n // load translation using http -> see /public/locales\n // learn more: https://github.com/i18next/i18next-http-backend\n // pass the i18n instance to react-i18next.\n .use(Backend)\n .use(initReactI18next) // passes i18n down to react-i18next\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n fallbackLng: 'en-US',\n debug: false,\n ns: [\n 'TRANSLATIONS_RCORE_TOPNAV',\n 'TRANSLATIONS_RCORE_TOPNAV_SEARCH',\n 'TRANSLATIONS_RCORE_COMMON'\n ],\n defaultNS: 'TRANSLATIONS_RCORE_TOPNAV',\n lng: user && user.profile && user.profile.culture, // this needs to change as per user locale so the translations are saved in indexeddb with proper key for e.g. en-US_TRANSLATIONS_PORTAL\n // interpolation: {\n // escapeValue: false, // not needed for react as it escapes by default\n // },\n backend: {\n backends: [\n LocalforageBackend, // primary\n new BackendAdapter(null, {\n backend: new Http(null, {\n // // loadPath: \"http://ayjain11in.amr.smtf.ds/services/api/i18n/react?keys={{ns}}\",\n loadPath: `${config.domain}services/api/i18n/react?ns={{ns}}`,\n customHeaders: {\n Authorization: `Bearer ${user && user.access_token}`\n },\n allowMultiLoading: false\n })\n })\n ],\n backendOptions: [\n {\n // set expiration to 1 day\n expirationTime: 1 * 24 * 60 * 60 * 1000,\n\n /**\n * Localforage specific options\n */\n // database name (prefix is using localStorage as storage driver)\n name: 'ST',\n\n // The driver(s) to use, if multiple are provided, the first available is used\n driver: [localforage.INDEXEDDB, localforage.WEBSQL, localforage.LOCALSTORAGE],\n\n // when using IndexedDb is the dataStore name, when using WebSQL is the table name\n storeName: 'rcore',\n\n // description of the database, for developer usage\n description: ''\n },\n {}\n ]\n },\n react: {\n useSuspense: true\n }\n });\n }\n return null;\n })\n .catch((error) => {\n getLogger().error('Error in fetching translations', error);\n });\n","import { useEffect } from 'react';\nimport { useHistory, useLocation } from 'react-router';\nimport _ from 'lodash-es';\nimport useHeaderContext from './common/hooks/useHeaderContext';\nimport useUserContext from './common/hooks/useUserContext';\nimport useSettingsContext from './common/hooks/useSettingsContext';\nimport useBreadcrumbContext from './common/hooks/useBreadcrumbContext';\nimport { getIdbItem } from './utils/clientStorage';\nimport trackNavigationHistory from './modules/core/services/navigationService';\n\nfunction RouteChangeListener() {\n const location = useLocation();\n const headerData = useHeaderContext();\n const { setHeaderContext } = headerData;\n const { user } = useUserContext();\n const history = useHistory();\n const { dispatch } = useBreadcrumbContext();\n const { settingsData } = useSettingsContext();\n let sitemapBreadcrumbData;\n\n const getBreadCrumbsForUrl = (routeUrl) => {\n let path = routeUrl;\n if (_.endsWith(path, '/')) path = path.slice(0, path.length - 1);\n const data = sitemapBreadcrumbData.find((item) => item.routeUrl === path);\n if (!data) {\n const partialPath = path.slice(0, path.lastIndexOf('/'));\n if (!_.isEmpty(partialPath) && partialPath !== '/') {\n return getBreadCrumbsForUrl(partialPath);\n }\n }\n return data;\n };\n\n const updateBreadcrumbData = async (pathname) => {\n let routeUrl = pathname.replace('#', '');\n if (_.startsWith(routeUrl, '/c/')) {\n dispatch({\n type: 'CLEAR_BREADCRUMBS'\n });\n } else {\n sitemapBreadcrumbData = await getIdbItem('RCoreBreadCrumbData');\n if (sitemapBreadcrumbData != null && sitemapBreadcrumbData.length > 0) {\n if (routeUrl.indexOf('?') > -1) routeUrl = routeUrl.substring(0, routeUrl.indexOf('?'));\n const breadcrumbObj = getBreadCrumbsForUrl(routeUrl);\n if (breadcrumbObj)\n dispatch({\n type: 'POPULATE_BREADCRUMBS',\n data: {\n ...breadcrumbObj,\n isRcoreNode: true\n }\n });\n }\n }\n };\n // Track navigation history for rcore routes that are part of sitemap.\n const updateNavigationHistory = async (pathname) => {\n let routeUrl = pathname.replace('#', '');\n if (_.startsWith(routeUrl, '/c/')) return null;\n const captureNavigationHistory =\n settingsData && settingsData.settings\n ? settingsData.settings.filter((setting) => setting.key === 'CAPTURE_NAVIGATION_HISTORY')[0]\n ?.value\n : 'False';\n if (\n captureNavigationHistory !== null &&\n captureNavigationHistory.toLowerCase() === 'true' &&\n sitemapBreadcrumbData != null &&\n sitemapBreadcrumbData.length > 0\n ) {\n if (routeUrl.indexOf('?') > -1) routeUrl = routeUrl.substring(0, routeUrl.indexOf('?'));\n if (_.endsWith(routeUrl, '/')) routeUrl = routeUrl.slice(0, routeUrl.length - 1);\n const breadcrumbObj = sitemapBreadcrumbData.find((item) => item.routeUrl === routeUrl);\n if (breadcrumbObj) {\n const breadcrumbList = breadcrumbObj.breadcrumbData;\n const destinationValue = breadcrumbList[breadcrumbList.length - 1].nodeKey;\n const destinationUrl = breadcrumbList[breadcrumbList.length - 1].url;\n trackNavigationHistory('SiteMap', destinationValue, destinationUrl);\n }\n }\n };\n\n useEffect(() => {\n const pathname = location.pathname.toLowerCase();\n // Populate all the public routes which should skip permission check\n const publicRoutes = new Set(['/accessdenied']);\n\n const evaluatePermissions = (route) => {\n let path = route;\n\n if (user.accessibleRcoreRoutes.has(path)) {\n return true;\n }\n\n // check for accessing new dashboards\n if (user.accessibleRcoreRoutes.size !== 0 && path.startsWith('/dashboard/')) return false;\n\n const routeIndex = _.findIndex(user.securedRoutes, (r) => {\n return r === path;\n });\n\n if (routeIndex > -1) {\n return false;\n }\n if (_.endsWith(path, '/')) {\n path = path.slice(0, path.length - 1);\n }\n\n const partialPath = path.slice(0, path.lastIndexOf('/'));\n\n if (!_.isEmpty(partialPath) && partialPath !== '/') {\n return evaluatePermissions(partialPath);\n }\n return true;\n };\n\n /* Skip the checks in case of -\n * Public route - accessdenied\n * Base route - '/'\n * Invalid routes - 'rcore/usersecurity'\n * Core routes - '/c/'\n * Auth routes - '/authentication/'\n * User not having any accessible routes as the system would redirect the user to home page\n */\n\n const ignoreRouteCheck =\n publicRoutes.has(pathname) ||\n pathname === '/' ||\n _.startsWith(pathname, '/c/') ||\n _.startsWith(pathname, '/authentication') ||\n !user ||\n !user.accessibleRcoreRoutes;\n\n const allowAccess = ignoreRouteCheck ? true : evaluatePermissions(pathname);\n\n // Updating the headercontext resetSearchValues to true when there is change in location path\n setHeaderContext((state) => ({\n ...state,\n resetSearchValues: true\n }));\n\n if (!allowAccess) {\n history.push('/accessDenied');\n }\n }, [location.pathname, setHeaderContext, user, history]);\n\n useEffect(() => {\n (async () => {\n const pathname = location.pathname.toLowerCase();\n await updateBreadcrumbData(pathname);\n updateNavigationHistory(pathname);\n setTimeout(() => {\n const contentElement = document.getElementsByClassName('MuiBreadcrumbs-li')[0];\n if (contentElement !== undefined) {\n contentElement.firstChild.setAttribute('tabindex', '0');\n contentElement.firstChild.focus();\n }\n }, 500);\n })();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location.pathname]);\n\n return null;\n}\nexport default RouteChangeListener;\n","import { useMatomo } from '@datapunt/matomo-tracker-react';\nimport { useEffect } from 'react';\nimport { useLocation } from 'react-router';\nimport { setLocalStorageItem, getLocalStorageItem } from '../utils/clientStorage';\n\nconst Tracker = () => {\n const location = useLocation();\n const { trackPageView, pushInstruction } = useMatomo();\n useEffect(() => {\n if (location.search.includes('relyingParty') || location.pathname.indexOf('/c/') > -1) {\n return;\n }\n const NewVisitID = getLocalStorageItem('NewVisitID');\n const visitID = getLocalStorageItem('visitID');\n if (\n typeof visitID !== 'undefined' &&\n (typeof visitID === 'undefined' || (typeof visitID !== 'undefined' && visitID !== NewVisitID))\n ) {\n pushInstruction('appendToTrackingUrl', 'send_image=0&new_visit=1');\n } else {\n pushInstruction('appendToTrackingUrl', 'send_image=0');\n }\n\n trackPageView();\n if (\n typeof visitID !== 'undefined' &&\n (typeof visitID === 'undefined' || (typeof visitID !== 'undefined' && visitID !== NewVisitID))\n )\n setLocalStorageItem('visitID', NewVisitID);\n }, [location.pathname, location.search, trackPageView, pushInstruction]);\n return null;\n};\nexport default Tracker;\n","/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport { Route, Redirect } from 'react-router-dom';\nimport { PageLoader } from '@sumtotal/react-foundation';\nimport PropTypes from 'prop-types';\nimport authService from './AuthorizeService';\nimport { ApplicationPaths, QueryParameterNames } from './AuthorizationConstants';\nimport { toggleVisibility, postMessage } from '../modules/core/services/coreIFrameHelper';\n\nexport default class AuthorizeRoute extends Component {\n constructor(props) {\n super(props);\n this.state = {\n ready: false,\n authenticated: false\n };\n }\n\n async componentDidMount() {\n this.subscription = authService.subscribe(() => this.authenticationChanged());\n await this.populateAuthenticationState();\n }\n\n componentWillUnmount() {\n authService.unsubscribe(this.subscription);\n }\n\n async authenticationChanged() {\n this.setState({ ready: false, authenticated: false });\n await this.populateAuthenticationState();\n }\n\n async populateAuthenticationState() {\n const authenticated = await authService.isAuthenticated();\n this.setState({ ready: true, authenticated });\n }\n\n render() {\n const { ready, authenticated } = this.state;\n const link = document.createElement('a');\n const { path } = this.props;\n const { location } = window;\n const returnUrl = `${location.protocol}//${location.host}${location.pathname}${location.search}${location.hash}`;\n link.href = path;\n const redirectUrl = `${ApplicationPaths.Login}?${\n QueryParameterNames.ReturnUrl\n }=${encodeURIComponent(returnUrl)}`;\n if (!ready) {\n return ;\n }\n const { component: RouteComponent, ...rest } = this.props;\n return (\n {\n if (authenticated) {\n // If navigating to rcore route then hide the iframe\n if (location.pathname.toLowerCase() === '/rcore/c') {\n // Rerouting the /c to /c/\n location.assign('/rcore/c/');\n return;\n }\n if (rest.path !== '/' && rest.path !== '/c') {\n postMessage('CLOSE_CURRENT_SLIDEOUT');\n toggleVisibility(false);\n return (\n
    \n \n
    \n );\n }\n return ;\n }\n return ;\n }}\n />\n );\n }\n}\n\nAuthorizeRoute.propTypes = {\n path: PropTypes.string.isRequired,\n component: PropTypes.shape({}).isRequired\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport styled from 'styled-components';\nimport { PageLoader } from '@sumtotal/react-foundation';\nimport authService, { AuthenticationResultStatus } from './AuthorizeService';\nimport { LoginActions, QueryParameterNames } from './AuthorizationConstants';\n\nconst LoginContainer = styled.div`\n text-align: center;\n`;\n\nexport default class Login extends Component {\n constructor(props) {\n super(props);\n this.state = { message: undefined };\n }\n\n componentDidMount() {\n const { action } = this.props;\n switch (action) {\n case LoginActions.Login:\n this.login(this.getReturnUrl());\n break;\n case LoginActions.LoginCallback:\n this.processLoginCallback();\n break;\n default:\n throw new Error(`Invalid action '${action}'`);\n }\n }\n\n getReturnUrl = (state) => {\n const params = new URLSearchParams(window.location.search);\n const fromQuery = params.get(QueryParameterNames.ReturnUrl);\n if (fromQuery && !fromQuery.startsWith(`${window.location.origin}/`)) {\n // This is an extra check to prevent open redirects.\n throw new Error(\n 'Invalid return url. The return url needs to have the same origin as the current page.'\n );\n }\n return (state && state.returnUrl) || fromQuery || `${window.location.origin}/`;\n };\n\n redirectToApiAuthorizationPath = (apiAuthorizationPath) => {\n const redirectUrl = `${window.location.origin}${apiAuthorizationPath}`;\n // It's important that we do a replace here so that when the user hits the back arrow on the\n // browser he gets sent back to where it was on the app instead of to an endpoint on this\n // component.\n window.location.replace(redirectUrl);\n };\n\n navigateToReturnUrl = (returnUrl) => {\n // It's important that we do a replace here so that we remove the callback uri with the\n // fragment containing the tokens from the browser history.\n window.location.replace(returnUrl);\n };\n\n async login(returnUrl) {\n const state = { returnUrl };\n const result = await authService.signIn(state);\n switch (result.status) {\n case AuthenticationResultStatus.Redirect:\n break;\n case AuthenticationResultStatus.Success:\n await this.navigateToReturnUrl(returnUrl);\n break;\n case AuthenticationResultStatus.Fail:\n this.setState({ message: result.message });\n break;\n default:\n throw new Error(`Invalid status result '${result.status}'`);\n }\n }\n\n async processLoginCallback() {\n const url = window.location.href;\n const result = await authService.completeSignIn(url);\n\n switch (result.status) {\n case AuthenticationResultStatus.Redirect:\n throw new Error('Should not redirect.');\n case AuthenticationResultStatus.Success:\n await this.navigateToReturnUrl(this.getReturnUrl(result.state));\n break;\n case AuthenticationResultStatus.Fail:\n this.setState({ message: result.message });\n break;\n default:\n throw new Error(`Invalid authentication result status '${result.status}'.`);\n }\n }\n\n render() {\n const { action } = this.props;\n const { message } = this.state;\n\n if (message) {\n return {message};\n }\n switch (action) {\n case LoginActions.Login:\n return ;\n case LoginActions.LoginCallback:\n return ;\n default:\n throw new Error(`Invalid action '${action}'`);\n }\n }\n}\n\nLogin.propTypes = {\n action: PropTypes.string.isRequired\n};\n","import React, { Component } from 'react';\nimport PropTypes from 'prop-types';\n\nimport authService, { AuthenticationResultStatus } from './AuthorizeService';\n\nimport { LogoutActions } from './AuthorizationConstants';\n\n// The main responsibility of this component is to handle the user's logout process.\n// This is the starting point for the logout process, which is usually initiated when a\n// user clicks on the logout button on the LoginMenu component.\nexport default class Logout extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n message: undefined,\n isReady: false\n };\n }\n\n componentDidMount() {\n const { action } = this.props;\n switch (action) {\n case LogoutActions.Logout:\n this.logout();\n break;\n case LogoutActions.LoggedOut:\n this.setState({ isReady: true, message: 'You successfully logged out!' });\n break;\n default:\n throw new Error(`Invalid action '${action}'`);\n }\n }\n\n async logout() {\n const isauthenticated = await authService.isAuthenticated();\n if (isauthenticated) {\n const result = await authService.signOut();\n switch (result.status) {\n case AuthenticationResultStatus.Redirect:\n break;\n case AuthenticationResultStatus.Fail:\n this.setState({ message: result.message });\n break;\n default:\n throw new Error('Invalid authentication result status.');\n }\n } else {\n this.setState({ message: 'You successfully logged out!' });\n }\n }\n\n render() {\n const { isReady, message } = this.state;\n if (!isReady) {\n return
    ;\n }\n if (message) {\n return
    {message}
    ;\n }\n const { action } = this.props;\n switch (action) {\n case LogoutActions.Logout:\n return
    Processing logout
    ;\n case LogoutActions.LoggedOut:\n return
    {message}
    ;\n default:\n throw new Error(`Invalid action '${action}'`);\n }\n }\n}\n\nLogout.propTypes = {\n action: PropTypes.string.isRequired\n};\n","import React, { lazy } from 'react';\nimport { Route, Switch } from 'react-router-dom';\nimport AuthorizeRoute from './authentication/AuthorizeRoute';\nimport {\n ApplicationPaths,\n LoginActions,\n LogoutActions\n} from './authentication/AuthorizationConstants';\nimport Login from './authentication/Login';\nimport Logout from './authentication/Logout';\n// Lazy load the routes to support code splitting\nconst Home = lazy(() => import('./modules/home/components/Home'));\nconst CoreUI = lazy(() => import('./modules/core/components/CoreUI'));\nconst ControlPanelConfigurationRoutes = lazy(() =>\n import('./modules/configuration/controlpanel/components/ControlPanelConfigurationRoutes')\n);\nconst GoalWorkspaceRoutes = lazy(() => import('./modules/goals/components/GoalWorkspaceRoutes'));\nconst ActivityBuilderRoutes = lazy(() =>\n import('./modules/learning/activityBuilder/components/ActivityBuilderRoutes')\n);\nconst ActivityAssignments = lazy(() =>\n import('./modules/learning/activityAssignments/components/ActivityAssignments')\n);\nconst ToDoListConfiguration = lazy(() =>\n import('./modules/configuration/activitiesAndTasks/components/MyActivitiesAndTasksConfiguration')\n);\nconst ReportingRoutes = lazy(() => import('./modules/reporting/ReportingRoutes'));\n\nconst MyToDoList = lazy(() =>\n import('./modules/onePlace/activitiesAndTasks/activities/components/MyActivitiesRoutes')\n);\n\nconst AccessDeniedPage = lazy(() => import('./common/layout/components/AccessDeniedPage'));\n\nconst UserManagement = lazy(() =>\n import('./modules/administration/users/components/UserManagement')\n);\nconst OfferRoutes = lazy(() => import('./modules/recruiting/offer/components/route/OfferRoutes'));\nconst AllApplicants = lazy(() =>\n import('./modules/recruiting/allApplicants/components/AllApplicantsView')\n);\nconst PensSettings = lazy(() => import('./modules/learning/pens/components/settings'));\nconst MicrosoftTeamsSettings = lazy(() =>\n import('./modules/learning/vilt/msTeams/components/msTeamsSettings')\n);\nconst ZoomSettings = lazy(() => import('./modules/learning/vilt/zoom/components/zoomSettings'));\nconst IntegrationSettings = lazy(() =>\n import('./modules/learning/vivaLearning/components/integrationSettings')\n);\nconst AccreditationRoutes = lazy(() =>\n import('./modules/learning/accreditation/components/AccreditationRoutes')\n);\nconst LateCompletionsListRoutes = lazy(() =>\n import('./modules/learning/latecompletions/components/LateCompletionsListRoutes')\n);\n\nconst AchievementTemplateRoutes = lazy(() =>\n import(\n './modules/administration/development/developmentplan/achievement/components/AchievementTemplateRoutes'\n )\n);\nconst MarketComparisonRoutes = lazy(() =>\n import('./modules/marketComparison/components/MarketComparisonRoutes')\n);\n\nconst CredlyConfiguration = lazy(() =>\n import('./modules/configuration/backPackServer/credly/components/CredlyConfiguration')\n);\nconst AssignmentApprovalsRoutes = lazy(() =>\n import('./modules/learning/assignmentapprovals/components/AssignmentApprovalsList')\n);\nconst QuestionBankRoutes = lazy(() =>\n import('./modules/learning/questionBanks/components/QuestionBankRoutes')\n);\nconst InitiaivesSettings = lazy(() =>\n import('./modules/configuration/InitiativesSettings/components/initiativesSettings')\n);\nconst DashboardManagerRoutes = lazy(() =>\n import('./modules/dashboards/components/DashboardManagerRoutes')\n);\nconst DashboardRoutes = lazy(() => import('./modules/dashboards/components/DashboardRoutes'));\nconst ActivityQrAttendanceReport = lazy(() =>\n import('./modules/learning/activityQrAttendance/components/ActivityQrAttendanceReport')\n);\nconst contentConsumerLaunchSetting = lazy(() =>\n import('./modules/learning/contentIntegrationLaunchSettings/components/ContentConsumerSetting')\n);\nconst ViltAttendanceSyncWizard = lazy(() =>\n import('./modules/learning/vilt/attendanceSync/components/AttendanceSyncWizard')\n);\nfunction loginAction(name) {\n return ;\n}\n\nfunction logoutAction(name) {\n return ;\n}\n\nconst AppRoutes = () => {\n return (\n \n {/* BEGIN - routes required for oidc-client SSO */}\n {/* Don't add any new routes above this block */}\n loginAction(LoginActions.Login)} />\n loginAction(LoginActions.LoginCallback)}\n />\n logoutAction(LogoutActions.Logout)}\n />\n {/* END - oidc-client SSO routes */}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nexport default AppRoutes;\n","import axios from 'axios';\nimport { getConfig } from '../config/apiConfig';\n\nconst getAnalyticsConfiguration = async (isinSite) => {\n // Get auth header config\n const config = await getConfig();\n const url = `api/webanalytics/webanalyticsdetails/inSite/${isinSite}`;\n\n return axios\n .get(url, config)\n .then(async (resp) => {\n let response = {};\n if (resp.data) {\n response = resp.data;\n }\n return response;\n })\n .catch((err) => {\n throw err.response;\n });\n};\n\nexport default getAnalyticsConfiguration;\n","import { useEffect } from 'react';\nimport getAnalyticsConfiguration from './webAnalyticsService';\nimport authService from '../authentication/AuthorizeService';\n\nconst MyGuideTracker = () => {\n useEffect(() => {\n async function renderMyGuide() {\n const userProfile = await authService.getUserProfile();\n if (userProfile === null || userProfile.personguid === '') {\n return null;\n }\n const visitorId = userProfile.personguid;\n const emailExt = '@sumtotal.com';\n const myGuideEmail = visitorId + emailExt;\n const analyticsData = await getAnalyticsConfiguration(false);\n const myGuideEnabled = analyticsData.webAnalyticIsEnable === '1';\n const analyticUrl = analyticsData.webAnalyticSiteUrl;\n const apiKey = analyticsData.webAnalyticSiteID;\n\n // only load the MyGuide source and Initialization when MyGuide has been enabled for the tenant\n if (myGuideEnabled === true) {\n // script used to load the MyGuide resource\n // this script is not in a seperate file, as it's using some variables that must first be obtained via webanalytic service call\n const myGuideSourceScript = `if(!window.guideMe)window.guideMe={}; window.__MG__={}; window.__MG__.email='${myGuideEmail}'; window.__MG__.fullName='${visitorId}'; window.myGuideOrgKey='${apiKey}'; window.guideMe.baseUrl='${analyticUrl}'; var a=document.createElement('script');\n a.src='${analyticUrl}'+'guideme.js'; document.head.appendChild(a);`;\n const myGuideLoadScript = document.createElement('script');\n myGuideLoadScript.type = 'text/javascript';\n myGuideLoadScript.async = true;\n myGuideLoadScript.innerHTML = myGuideSourceScript;\n document.head.appendChild(myGuideLoadScript);\n }\n }\n renderMyGuide();\n }, []);\n return null;\n};\nexport default MyGuideTracker;\n","import axios from 'axios';\nimport { createInstance } from '@datapunt/matomo-tracker-react';\nimport { getConfig } from '../config/apiConfig';\nimport { setLocalStorageItem } from '../utils/clientStorage';\n\n/**\n *\n * @param {Boolean} isinSite\n * @returns {MatomoTracker}\n */\nconst invokeWebAnalytics = async (isinSite) => {\n // Get auth header config\n const config = await getConfig();\n const url = `api/webanalytics/webanalyticsdetails/inSite/${isinSite}`;\n const resp = await axios.get(url, config);\n if (!resp.data) {\n return null;\n }\n if (\n resp.data.webAnalyticIsEnable !== '1' ||\n !resp.data.webAnalyticSiteUrl ||\n !resp.data.webAnalyticSiteID\n ) {\n return null;\n }\n const u = `//${resp.data.webAnalyticSiteUrl}/`;\n setLocalStorageItem('NewVisitID', resp.data.visitId);\n return createInstance({\n urlBase: resp.data.webAnalyticSiteUrl,\n siteId: resp.data.webAnalyticSiteID,\n trackerUrl: `${u}matomo.php`, // optional, default value: `${urlBase}matomo.php`\n srcUrl: `${u}matomo.js` // optional, default value: `${urlBase}matomo.js`\n });\n};\nexport default invokeWebAnalytics;\n","import React, { useEffect, useState } from 'react';\nimport { MatomoProvider } from '@datapunt/matomo-tracker-react';\nimport PropTypes from 'prop-types';\nimport invokeWebAnalytics from './instance';\n\nconst TrackingProvider = ({ children, isinSite }) => {\n const [instance, setInstance] = useState(null);\n\n useEffect(() => {\n (async () => {\n const newTracker = await invokeWebAnalytics(isinSite);\n setInstance(newTracker);\n })();\n }, [isinSite]);\n\n return {children};\n};\n\nTrackingProvider.propTypes = {\n children: PropTypes.node.isRequired,\n\n isinSite: PropTypes.bool\n};\n\nTrackingProvider.defaultProps = {\n isinSite: true\n};\nexport default TrackingProvider;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Modal, ModalContentWrapper, ModalActionWrapper, Button } from '@sumtotal/react-foundation';\n\nfunction RouteLeavingConfirmationModal({ isOpen, handleModalAction }) {\n const { t } = useTranslation(['TRANSLATIONS_RCORE_COMMON']);\n return (\n handleModalAction(false)}\n >\n \n

    {t('RCORE_COMMON_CONFIRM_NAVIGATION_MESSAGE')}

    \n
    \n \n \n \n \n \n );\n}\n\nRouteLeavingConfirmationModal.propTypes = {\n isOpen: PropTypes.bool,\n handleModalAction: PropTypes.func\n};\n\nRouteLeavingConfirmationModal.defaultProps = {\n isOpen: false,\n handleModalAction: () => {}\n};\n\nexport default RouteLeavingConfirmationModal;\n","import React, { Suspense, useEffect, useState } from 'react';\nimport { HashRouter, BrowserRouter } from 'react-router-dom';\nimport { PageLoader } from '@sumtotal/react-foundation';\nimport AppLayout from './common/layout/components/AppLayout';\nimport Breadcrumbs from './common/layout/components/Breadcrumbs';\nimport Config from './config/Config';\nimport authService from './authentication/AuthorizeService';\nimport CorePillarFrame from './modules/core/components/CorePillarFrame';\nimport CoreMessageListener from './modules/core/components/CoreMessageListener';\nimport SitemapProvider from './common/layout/components/SitemapProvider';\nimport bootstrapApplication from './modules/core/services/bootstrapService';\nimport './config/i18n';\nimport RouteChangeListener from './RouteChangeListener';\nimport SecurityQuestions from './modules/core/components/SecurityQuestions';\nimport Tracker from './analytics/Tracker';\nimport AppRoutes from './AppRoutes';\nimport MyGuideTracker from './analytics/MyGuideTracker';\nimport TrackingProvider from './analytics/TrackingProvider';\nimport getLogger from './utils/logger';\nimport RouteLeavingConfirmationModal from './RouteLeavingConfirmationModal';\n\n// Use different router type depending on configuration\nconst AppRouterComponent = Config.navigationType === 'history' ? BrowserRouter : HashRouter;\n\nconst AppRouter = () => {\n const [userAuthStatus, setUserAuthStatus] = useState({\n isAuthenticated: false,\n emulatedUser: ''\n });\n\n useEffect(() => {\n authService\n .getUser()\n .then((user) => {\n if (user) {\n // To check if its emulation mode.\n if (\n user.profile &&\n user.profile.emulatorusername &&\n user.profile.emulatorusername !== ''\n ) {\n setUserAuthStatus({ isAuthenticated: true, emulatedUser: user.profile.propername });\n } else {\n setUserAuthStatus({ isAuthenticated: true, emulatedUser: '' });\n }\n }\n // bootstrap after successful auth\n if (user) {\n bootstrapApplication();\n }\n return null;\n })\n .catch((errorResponse) => {\n setUserAuthStatus({ isAuthenticated: false, emulatedUser: '' });\n getLogger().error(errorResponse);\n });\n }, []);\n\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [modalCallback, setModalCallback] = useState(null);\n\n const handleModalAction = (flag) => {\n setIsModalOpen(false);\n modalCallback(flag);\n };\n\n const getUserConfirmation = (message, callback) => {\n setIsModalOpen(true);\n setModalCallback(() => callback);\n };\n\n return (\n <>\n \n \n {userAuthStatus.isAuthenticated && (\n \n )}\n {/* This component identifies the change in location path */}\n \n
    \n {userAuthStatus.isAuthenticated && }\n \n {userAuthStatus.isAuthenticated && (\n \n \n \n )}\n \n {userAuthStatus.isAuthenticated && }\n \n {userAuthStatus.isAuthenticated && }\n {isModalOpen && (\n \n )}\n }>\n \n \n
    \n
    \n \n \n \n );\n};\n\nexport default AppRouter;\n","import React, { useReducer } from 'react';\nimport UserContext from './UserContext';\nimport { getAndRemoveLocalStorageItem } from '../utils/clientStorage';\n\nconst defaultUserContext = {\n name: '',\n userId: '',\n personPK: '',\n image: undefined,\n jobTitle: '',\n homePageUrl: '',\n mustAnswerSecurityQuestions: false,\n UserJustAnsweredSecurityQuestion: true,\n culture: '',\n dateFormat: '',\n timeFormat: '',\n userTimeZoneId: '',\n twoLetterISOLanguageName: '',\n accessibleRcoreRoutes: new Set(),\n securedRoutes: [],\n isEmulatedUser: false,\n currentDomainId: ''\n};\nconst UserContextProvider = (props) => {\n const [state, dispatch] = useReducer(userReducer, defaultUserContext);\n const value = { user: state, dispatch };\n return ;\n};\n\nconst userReducer = (state, action) => {\n switch (action.type) {\n case 'USER_INFO': {\n let answerSecurityQuestions = getAndRemoveLocalStorageItem('MustAnswerSecurityQuestions');\n if (typeof answerSecurityQuestions === 'undefined' || answerSecurityQuestions == null) {\n answerSecurityQuestions = action.user.mustAnswerSecurityQuestions;\n }\n return {\n ...state,\n name: action.user.name,\n userId: action.user.userId,\n personPK: action.user.personPK,\n image: action.user.image,\n jobTitle: action.user.jobTitle,\n homePageUrl: action.homePageUrl,\n mustAnswerSecurityQuestions: JSON.parse(answerSecurityQuestions),\n culture: action.user.culture,\n dateFormat: action.user.dateFormat,\n timeFormat: action.user.timeFormat,\n userTimeZoneId: action.user.userTimeZoneId,\n twoLetterISOLanguageName: action.user.twoLetterISOLanguageName,\n accessibleRcoreRoutes: action.accessibleRcoreRoutes,\n securedRoutes: action.securedRoutes,\n isEmulatedUser: action.user.isEmulatedUser,\n currentDomainId: action.user.currentDomainId\n };\n }\n case 'USER_SECURITY_QUESTIONS': {\n return {\n ...state,\n UserJustAnsweredSecurityQuestion: !action.mustAnswerSecurityQuestions,\n mustAnswerSecurityQuestions: action.mustAnswerSecurityQuestions\n };\n }\n case 'UPDATE_USER_DETAILS': {\n return {\n ...state,\n ...action.userData\n };\n }\n case 'USER_ANSWERED_SECURITY_QUESTIONS': {\n return {\n ...state,\n UserJustAnsweredSecurityQuestion: false\n };\n }\n default:\n throw new Error(`Unknon action type: ${action.type} for user update`);\n }\n};\n\nexport default UserContextProvider;\n","import React, { useState } from 'react';\nimport HeaderContext from './HeaderContext';\n\nconst defaultHeaderContext = {\n refreshTimeline: undefined,\n cartItemsCount: undefined\n};\nconst HeaderContextProvider = (props) => {\n const [headerContext, setHeaderContext] = useState(defaultHeaderContext);\n const value = { headerContext, setHeaderContext };\n return ;\n};\n\nexport default HeaderContextProvider;\n","import React, { useState } from 'react';\nimport queryString from 'query-string';\nimport IntegrationContext from './IntegrationContext';\nimport { IntegrationMode } from '../utils/IntegrationConstants';\n\nconst IntegrationContextProvider = (props) => {\n const getIntegrationMode = () => {\n const url = window.location.href;\n const parsedUrl = queryString.parseUrl(url);\n\n // If app is not in an iFrame, disable integration mode\n if (window.top === window.self || !parsedUrl.query.im) {\n return IntegrationMode.Normal;\n }\n\n switch (parsedUrl.query.im) {\n case 'teams':\n case '1':\n return IntegrationMode.Teams;\n\n default:\n return IntegrationMode.Normal;\n }\n };\n\n const defaultIntegrationContext = { mode: getIntegrationMode() };\n\n const [integrationContext, setIntegrationContext] = useState(defaultIntegrationContext);\n\n const value = { integrationContext, setIntegrationContext };\n return ;\n};\n\nexport default IntegrationContextProvider;\n","import React, { Suspense } from 'react';\nimport { Provider } from 'react-redux';\nimport { PageLoader, LiveRegionContextProvider } from '@sumtotal/react-foundation';\nimport AppRouter from './AppRouter';\nimport ThemeContainer from './theme/ThemeContainer';\nimport store from './state/store';\nimport UserContextProvider from './contexts/UserContextProvider';\nimport HeaderContextProvider from './contexts/HeaderContextProvider';\nimport SettingsContextProvider from './contexts/SettingsContextProvider';\nimport MessageContextProvider from './contexts/MessageContextProvider';\nimport BreadcrumbContextProvider from './contexts/BreadcrumbContextProvider';\nimport IntegrationContextProvider from './contexts/IntegrationContextProvider';\n\n// ----------------------------------------------------------------------\n\nfunction App() {\n return (\n \n \n \n \n \n \n \n \n \n }>\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\n\n// import ReactDOM from 'react-dom';\n\nimport './index.scss';\nimport { UserManager } from 'oidc-client';\nimport App from './App';\nimport { configureServices } from './config/apiConfig';\n// ----------------------------------------------------------------------\n\nconfigureServices();\n\nif (window.location.pathname === '/rcore/authentication/silent-renew') {\n new UserManager().signinSilentCallback();\n} else {\n const root = createRoot(document.getElementById('root'));\n root.render(\n // \n ,\n // ,\n document.getElementById('root')\n );\n}\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\n// serviceWorker.unregister();\n","/* eslint no-bitwise: [\"error\", { \"allow\": [\"&\"] }] */\n// using helper function to localize the linting rules\nfunction CheckIntegrationSetting(integrationElement, integrationMode) {\n return !(integrationElement & integrationMode);\n}\n\nexport default CheckIntegrationSetting;\n","import Cookies from 'js-cookie';\n\nexport const RCORE_COOKIE = 'rcore';\nexport const THEME_COOKIE = 'SumtTheme';\n\nconst parseCookie = (cookieName, delimiter) => {\n const cookie = Cookies.get(cookieName);\n const keyValueMap = new Map();\n if (cookie) {\n const pairs = cookie.split('&');\n if (pairs) {\n pairs.forEach((pair) => {\n const p = pair.split(delimiter);\n keyValueMap.set(p[0], p[1]);\n });\n }\n }\n return keyValueMap;\n};\n\nconst setCookieValue = (key, value) => {\n const keyValueMap = parseCookie(RCORE_COOKIE, ':');\n // updated the value\n keyValueMap.set(key, value);\n const cookie = [];\n keyValueMap.forEach((v, k) => {\n const pair = `${k}:${v}`;\n cookie.push(pair);\n });\n Cookies.set(RCORE_COOKIE, cookie.join('&'));\n};\n\nconst getCookieValue = (key) => {\n const keyValueMap = parseCookie(RCORE_COOKIE, ':');\n return keyValueMap.get(key);\n};\n\nconst getThemeCookieKeyValue = (key) => {\n const keyValueMap = parseCookie(THEME_COOKIE, '=');\n if (keyValueMap.size > 0) {\n return keyValueMap.get(key);\n }\n return null;\n};\n\nconst setKeyValueInThemeCookie = (key, value) => {\n const keyValueMap = parseCookie(THEME_COOKIE, '=');\n keyValueMap.set(key, value);\n const cookie = [];\n keyValueMap.forEach((v, k) => {\n const pair = `${k}=${v}`;\n cookie.push(pair);\n });\n Cookies.set(THEME_COOKIE, cookie.join('&'));\n};\n\nconst removeCookie = (name) => {\n Cookies.remove(name);\n};\n\nexport {\n parseCookie,\n setCookieValue,\n getCookieValue,\n getThemeCookieKeyValue,\n setKeyValueInThemeCookie,\n removeCookie\n};\n","import { createContext } from 'react';\n\nconst CurrentThemeContext = createContext({});\n\nexport default CurrentThemeContext;\n","import { useContext } from 'react';\nimport IntegrationContext from '../../contexts/IntegrationContext';\n\nconst useIntegrationContext = () => {\n const context = useContext(IntegrationContext);\n if (!context) {\n throw new Error('useIntegrationContext must be used within IntegrationContextProvider!');\n }\n return context;\n};\n\nexport default useIntegrationContext;\n","import { getLocalStorageItem } from './clientStorage';\n\nconst loglevel = require('loglevel');\n\n/**\n * Get the Logger Object\n * Usage: Import the getLogger & get the log object [ var log = getLogger();]\n * Use the appropriate below methods to log mesages\n * 1.log.trace(msg)\n * 2.log.debug(msg)\n * 3.log.info(msg)\n * 4.log.warn(msg)\n * 5.log.error(msg)\n */\nconst getLogger = () => {\n // Loglevel set to 'ERROR' by default\n const level = getLocalStorageItem('loglevel:rcore') || 'ERROR';\n // get the Logger object\n const log = loglevel.getLogger('rcore');\n // set the loglevel\n log.setLevel(level);\n return log;\n};\n\nexport default getLogger;\n","import { UserManager, Log } from 'oidc-client';\nimport queryString from 'query-string';\nimport config from '../config/Config';\nimport { ApplicationPaths, BrokerParams } from './AuthorizationConstants';\nimport getLogger from '../utils/logger';\nimport { getLocalStorageItem } from '../utils/clientStorage';\n\nconst log = getLogger();\n\nconst populateOIDCLogLevel = () => {\n const logLevel = getLocalStorageItem('loglevel:rcore') || 'ERROR';\n // Possible log levels for oidc logger\n // NONE: 0; ERROR: 1; WARN: 2; INFO: 3; DEBUG: 4;\n return Log[logLevel.toUpperCase()];\n};\n\nLog.logger = console;\nLog.level = populateOIDCLogLevel();\n\nexport class AuthorizeService {\n callbacks = [];\n\n nextSubscriptionId = 0;\n\n isUserAuthenticated = false;\n\n loggedinUser = null;\n\n async isAuthenticated() {\n const user = await this.getUser();\n return !!user;\n }\n\n async getLoggedInUserId() {\n const user = await this.getUserProfile();\n return user && user.userid;\n }\n\n async getMaskedUserId() {\n const user = await this.getUserProfile();\n return user && user.maskeduserid;\n }\n\n async getUserProfile() {\n const user = await this.getUser();\n return user && user.profile;\n }\n\n async getUser() {\n if (this.loggedinUser) {\n return this.loggedinUser;\n }\n\n await this.ensureUserManagerInitialized();\n const user = await this.userManager.getUser();\n return user;\n }\n\n async getAccessToken() {\n await this.ensureUserManagerInitialized();\n const user = await this.userManager.getUser();\n return user && user.access_token;\n }\n\n async removeAccessToken() {\n await this.userManager.removeUser();\n }\n\n async signIn(state) {\n await this.ensureUserManagerInitialized();\n try {\n await this.userManager.signinRedirect(this.createArguments(state));\n return this.redirect();\n } catch (redirectError) {\n return this.error(redirectError);\n }\n }\n\n async completeSignIn(url) {\n try {\n await this.ensureUserManagerInitialized();\n let user = null;\n const that = this;\n return this.userManager\n .signinCallback(url)\n .then((data) => {\n user = data;\n that.updateState(user);\n return that.success(user && user.state);\n })\n .catch((error) => {\n log.error(error);\n return that.error('There is an error signing in');\n });\n } catch (error) {\n log.error(error);\n return this.error('There is an error signing in');\n }\n }\n\n async isEmulationMode() {\n const user = await this.getUserProfile();\n return user && user.emulatorusername && user.emulatorusername !== '';\n }\n\n async isGuestUser() {\n const user = await this.getUserProfile();\n return user && user.guestaccount && user.guestaccount === '1';\n }\n\n async signOut() {\n await this.ensureUserManagerInitialized();\n try {\n if (!this.isAuthenticated()) {\n return this.success();\n }\n await this.userManager.removeUser();\n\n this.updateState(null);\n\n window.location.href = this.signoutUrl();\n return this.redirect();\n } catch (redirectSignOutError) {\n return this.error(redirectSignOutError);\n }\n }\n\n updateState(user) {\n this.loggedinUser = user;\n if (user == null) {\n this.isUserAuthenticated = false;\n } else {\n this.isUserAuthenticated = !!this.loggedinUser;\n }\n this.notifySubscribers();\n }\n\n subscribe(callback) {\n this.callbacks.push({ callback, subscription: this.nextSubscriptionId++ });\n return this.nextSubscriptionId - 1;\n }\n\n unsubscribe(subscriptionId) {\n const subscriptionIndex = this.callbacks\n .map((e, i) => (e.subscription === subscriptionId ? { found: true, i } : { found: false }))\n .filter((e) => e.found === true);\n if (subscriptionIndex.length !== 1) {\n console.log(`Found an invalid number of subscriptions ${subscriptionIndex.length}`);\n } else {\n this.callbacks.splice(subscriptionIndex[0].index, 1);\n }\n }\n\n notifySubscribers() {\n for (let i = 0; i < this.callbacks.length; i++) {\n const { callback } = this.callbacks[i];\n callback();\n }\n }\n\n signoutUrl = () => `${config.domain}apisecurity/account/signout`;\n\n createArguments = (state) => ({ useReplaceToNavigate: true, data: state });\n\n error = (message) => ({ status: AuthenticationResultStatus.Fail, message });\n\n success = (state) => ({ status: AuthenticationResultStatus.Success, state });\n\n redirect = () => ({ status: AuthenticationResultStatus.Redirect });\n\n async ensureUserManagerInitialized() {\n if (this.userManager !== undefined) {\n return;\n }\n\n // Parse and add any extra parameters that need to be passed on to broker\n const brokerQueryParams = {};\n const qs = queryString.parse(window.location.search);\n BrokerParams.forEach((param) => {\n if (Object.keys(qs).includes(param)) {\n brokerQueryParams[`broker_${param}`] = qs[param];\n }\n });\n\n const settings = {\n authority: `${config.domain}apisecurity`,\n client_id: 'sumtotal_rcore',\n redirect_uri: `${config.spaSiteDomain}${config.appPrefix}${ApplicationPaths.LoginCallback}`,\n post_logout_redirect_uri: `${config.spaSiteDomain}${config.appPrefix}${ApplicationPaths.LogoutCallback}`,\n response_type: 'code',\n scope: 'openid profile allapis all notifications:all notifications:read notifications:create',\n extraQueryParams: brokerQueryParams,\n timeInsensitive: true,\n silent_redirect_uri: `${config.spaSiteDomain}${config.appPrefix}${ApplicationPaths.SilentRediectUri}`\n };\n settings.automaticSilentRenew = true;\n settings.includeIdTokenInSilentRenew = false;\n\n this.userManager = new UserManager(settings);\n window.userManager = this.userManager;\n this.userManager.events.addUserSignedOut(async () => {\n await this.signOut();\n });\n this.userManager.events.addAccessTokenExpired(async () => {\n await this.signOut();\n });\n }\n\n static get instance() {\n return authService;\n }\n}\n\nconst authService = new AuthorizeService();\n\nexport default authService;\n\nexport const AuthenticationResultStatus = {\n Redirect: 'redirect',\n Success: 'success',\n Fail: 'fail'\n};\n","import localforage from 'localforage';\n\nlocalforage.config({ name: 'ST' });\n\nconst setIdbItem = async (key, value) => {\n // sets indexedDb item and returns promise\n const item = await localforage.setItem(key, value);\n return item;\n};\n\nconst getIdbItem = async (key) => {\n // gets indexedDb item and returns promise\n const item = await localforage.getItem(key);\n return item;\n};\n\nconst setLocalStorageItem = (key, value) => {\n // sets localStorage item\n localStorage.setItem(key, value);\n};\n\nconst getLocalStorageItem = (key) => {\n // gets localStorage item, returns string\n const item = localStorage.getItem(key);\n return item;\n};\n\nconst kvpConstants = {\n separator: '=',\n delimiter: '&'\n};\n\nconst parseKeyValue = (data) => {\n const keyValueMap = new Map();\n if (data) {\n const pairs = data.split(kvpConstants.delimiter);\n if (pairs) {\n pairs.forEach((pair) => {\n const p = pair.split(kvpConstants.separator);\n keyValueMap.set(p[0], p[1]);\n });\n }\n }\n return keyValueMap;\n};\n\nconst addUpdateKeyValue = (data, key, value) => {\n const map = parseKeyValue(data);\n // updated the value\n map.set(key, value);\n const kvp = [];\n map.forEach((v, k) => {\n const pair = `${k}${kvpConstants.separator}${v}`;\n kvp.push(pair);\n });\n return kvp.join(kvpConstants.delimiter);\n};\n\nconst removeLocalStorageItem = (key) => {\n // sets localStorage item\n localStorage.removeItem(key);\n};\n\nconst getAndRemoveLocalStorageItem = (key) => {\n // removes the localStorage item after reading and returning it.\n const item = localStorage.getItem(key);\n localStorage.removeItem(key);\n return item;\n};\n\nconst StorageConstants = {\n Keys: {\n sitemap: 'rcoreSitemapHash',\n theme: 'SumtTheme'\n },\n SitemapHash: 'sitemapHash',\n DashboardHash: 'dashboardHash',\n RcoreDashboardHash: 'rcoreDashboardHash'\n};\n\nexport {\n setIdbItem,\n getIdbItem,\n setLocalStorageItem,\n getLocalStorageItem,\n parseKeyValue,\n addUpdateKeyValue,\n removeLocalStorageItem,\n getAndRemoveLocalStorageItem,\n StorageConstants\n};\n","import castLessVarsToJson from 'cast-less-vars-to-json';\nimport { lighten } from 'polished';\n\nconst snakeToCamel = (str) =>\n str.replace(/([-][a-z])/g, (group) => group.toUpperCase().replace('-', ''));\n\nconst nameProjectionFunc = (name) => snakeToCamel(name.substr(1));\n\nconst getLessVariables = (theme) => {\n let themeVarsObj = {};\n if (theme.json) {\n // Extracting less variables object\n themeVarsObj = JSON.parse(theme.json).vars;\n }\n return themeVarsObj;\n};\n\nconst evaluateLessVariables = async (themeVarsObj) => {\n if (themeVarsObj) {\n let themeVariablesString = '';\n // Forming less variables string.\n\n Object.entries(themeVarsObj).forEach(([key, value]) => {\n themeVariablesString += `${key}: ${value};`;\n });\n // Evaluating less variables\n return castLessVarsToJson(themeVariablesString, { nameProjectionFunc }).then((data) => {\n const VariblesData = data;\n if (\n !(\n 'topbarNavActiveStateBackground' in VariblesData &&\n VariblesData.topbarNavActiveStateBackground\n )\n ) {\n VariblesData.topbarNavActiveStateBackground = lighten(\n 0.35,\n VariblesData.leftNavHeaderBackground\n );\n }\n if (\n !(\n 'topbarNavActiveStateTextColor' in VariblesData &&\n VariblesData.topbarNavActiveStateTextColor\n )\n ) {\n VariblesData.topbarNavActiveStateTextColor = VariblesData.leftNavParentColor;\n }\n if (\n !(\n 'topbarNavHoverStateBackground' in VariblesData &&\n VariblesData.topbarNavHoverStateBackground\n )\n ) {\n VariblesData.topbarNavHoverStateBackground = lighten(\n 0.15,\n VariblesData.leftNavHeaderBackground\n );\n }\n if (\n !(\n 'topbarNavHoverStateTextColor' in VariblesData &&\n VariblesData.topbarNavHoverStateTextColor\n )\n ) {\n VariblesData.topbarNavHoverStateTextColor = VariblesData.leftNavParentColor;\n }\n return VariblesData;\n });\n }\n return {};\n};\n\nexport { getLessVariables, evaluateLessVariables };\n","const requestHandler = (request) => {\n return request;\n};\n\nexport default requestHandler;\n","import authService from '../authentication/AuthorizeService';\n\nconst errorResponseHandler = (error) => {\n /*\n Errors can be user action too and response will be null. So removing this TODO code\n if (\n (error.response.status === 403 || error.response.status === 500) &&\n error.response.data &&\n error.response.data.exceptionMessage.toLowerCase().startsWith('invalid authorization token')\n ) {\n console.log(error.response);\n } */\n if (\n error.response.status === 401 &&\n error.response.data &&\n error.response.data.exceptionMessage &&\n error.response.data.exceptionMessage.toLowerCase().startsWith('invalid authorization token')\n ) {\n authService.signOut();\n }\n return Promise.reject(error);\n};\n\nconst successResponseHandler = (response) => response;\n\nexport { errorResponseHandler, successResponseHandler };\n","/* * Global configuration for axios * */\nimport axios from 'axios';\nimport authService from '../authentication/AuthorizeService';\nimport config from './Config';\nimport requestHandler from './apiRequestConfigHandler';\nimport { successResponseHandler, errorResponseHandler } from './apiResponseHandler';\n\nconst configureServices = () => {\n // Set the base url for api calls\n axios.defaults.baseURL = `${config.domain}Services/`;\n\n // Request interceptor\n axios.interceptors.request.use(\n (request) => requestHandler(request),\n (error) => {\n throw error;\n }\n );\n\n // Response interceptor\n axios.interceptors.response.use(\n (response) => successResponseHandler(response),\n (error) => errorResponseHandler(error)\n );\n};\n\n// Gets the api request configuration\nconst getConfig = async () => {\n const accessToken = await authService.getAccessToken();\n const conf = {\n headers: {\n Authorization: `Bearer ${accessToken}`\n }\n };\n return conf;\n};\n\nconst getLMConfig = async () => {\n const baseConfig = await getConfig();\n const conf = {\n baseURL: `${config.domain}learning/service/webapi/`,\n ...baseConfig\n };\n return conf;\n};\n\nconst getUserSummaryConfig = async () => {\n const baseConfig = await getConfig();\n // Set the usersummary (micro service) url for api calls\n const conf = {\n baseURL: `${config.domain}usersummary/`,\n ...baseConfig\n };\n return conf;\n};\n\nconst getCoreConfig = async () => {\n const baseConfig = await getConfig();\n // Set the core url for api calls\n const conf = {\n baseURL: `${config.domain}Core/Core/`,\n ...baseConfig\n };\n return conf;\n};\n\nconst getAssignmentConfig = async () => {\n const baseConfig = await getConfig();\n const conf = {\n baseURL: `${config.domain}assignments/`,\n ...baseConfig\n };\n return conf;\n};\n\nconst getViltConfig = async () => {\n const baseConfig = await getConfig();\n const conf = {\n baseURL: `${config.domain}vilt/`,\n ...baseConfig\n };\n return conf;\n};\n\nconst getVivaConfig = async () => {\n const baseConfig = await getConfig();\n const conf = {\n baseURL: `${config.domain}contentconnectors/api/v1/tenant/`,\n ...baseConfig\n };\n return conf;\n};\nconst getPlatformConfig = async () => {\n const baseConfig = await getConfig();\n const conf = {\n baseURL: `${config.domain}platform/`,\n ...baseConfig\n };\n return conf;\n};\n\nconst getEMSIConfig = async () => {\n const baseConfig = await getConfig();\n const conf = {\n baseURL: `${config.domain}emsibgconnector/api/v1/jobs/`,\n ...baseConfig\n };\n return conf;\n};\n\nconst getReportConfig = async () => {\n const baseConfig = await getConfig();\n const conf = {\n baseURL: `${config.domain}core/Reporting/`,\n ...baseConfig\n };\n return conf;\n};\n\nconst getNotificationConfig = async () => {\n const baseConfig = await getConfig();\n const conf = {\n baseURL: `${config.domain}notificationapi/`,\n ...baseConfig\n };\n return conf;\n};\n\nexport {\n configureServices,\n getConfig,\n getLMConfig,\n getUserSummaryConfig,\n getAssignmentConfig,\n getViltConfig,\n getVivaConfig,\n getPlatformConfig,\n getEMSIConfig,\n getReportConfig,\n getCoreConfig,\n getNotificationConfig\n};\n","import { createContext } from 'react';\n\nconst UserContext = createContext();\n\nexport default UserContext;\n","import { createContext } from 'react';\n\nconst settingContext = createContext({});\n\nexport default settingContext;\n","import { createContext } from 'react';\n\nconst MessageContext = createContext();\n\nexport default MessageContext;\n","import { useContext } from 'react';\nimport BreadcrumbContext from '../../contexts/BreadcrumbContext';\n\nconst useBreadcrumbContext = () => {\n const context = useContext(BreadcrumbContext);\n if (!context) {\n throw new Error('useBreadcrumbContext must be used within BreadcrumbContextProvider!');\n }\n return context;\n};\n\nexport default useBreadcrumbContext;\n","import { createContext } from 'react';\n\nconst BreadcrumbContext = createContext();\n\nexport default BreadcrumbContext;\n","import { createContext } from 'react';\n\nconst HeaderContext = createContext();\n\nexport default HeaderContext;\n","import { createContext } from 'react';\n\nconst IntegrationContext = createContext();\n\nexport default IntegrationContext;\n","export class ConfigService {\n navigationType = 'history';\n\n domain = null;\n\n home = 'core/dash/home';\n\n spaSiteDomain = null;\n\n appPrefix = '/rcore';\n\n useSampleData = true;\n\n logo = '/core/headerlogo.sumttheme';\n\n favicon = 'core/favicon.sumttheme';\n\n api = {\n userMocks: true,\n url: process.env.API_URL || '/api'\n };\n\n constructor() {\n const link = document.createElement('a');\n link.href = document.location.href;\n this.spaSiteDomain = `${link.protocol}//${link.host}`;\n\n const suiteDomain = process.env.REACT_APP_SUITE_DOMAIN;\n\n if (!suiteDomain || suiteDomain === 'null') {\n this.domain = `${link.protocol}//${link.host}/`;\n } else {\n this.domain = process.env.REACT_APP_SUITE_DOMAIN;\n }\n }\n\n static get instance() {\n return config;\n }\n}\n\nconst config = new ConfigService();\n\nexport default config;\n","import Config from '../../../config/Config';\nimport getLogger from '../../../utils/logger';\n\nconst getIframeContainer = () => document.getElementById('CoreIFrame');\nconst getRcoreContainer = () => document.getElementById('rcore-page-content');\nconst postMessage = (\n action,\n data,\n forwardMessage = false,\n sourceElementId = null,\n opensSlideout = false,\n hideCore = false\n) => {\n const fromRcoreRoute = window.location.pathname.toLowerCase().indexOf('/c/') < 0;\n if (!forwardMessage && !opensSlideout && !hideCore) {\n toggleVisibility(true, fromRcoreRoute);\n }\n const iFrameContainer = getIframeContainer();\n let message = null;\n if (forwardMessage) {\n message = data;\n } else if (sourceElementId) {\n message = { pillarKey: 'RCORE', action, parameters: data, elementId: sourceElementId };\n } else {\n message = { pillarKey: 'RCORE', action, parameters: data };\n }\n if (iFrameContainer !== null && iFrameContainer !== undefined) {\n iFrameContainer.contentWindow.postMessage(message, '*');\n }\n};\nconst setIframe = (url, title) => {\n const isRcoreRoute = window.location.pathname.toLowerCase().indexOf('/c/') < 0;\n toggleVisibility(!isRcoreRoute);\n const iFrameContainer = getIframeContainer();\n iFrameContainer.src = `${Config.domain + url}${\n url.indexOf('?') !== -1 ? '&' : '?'\n }${coreRedirectionQS}=1`;\n if (title && title.length > 0) iFrameContainer.title = title;\n};\nconst setCoreframeTitle = (title) => {\n const iFrameContainer = getIframeContainer();\n if (iFrameContainer !== null && iFrameContainer !== undefined) {\n iFrameContainer.title = title;\n }\n};\nconst toggleVisibility = (visible, fromRcoreRoute) => {\n if (visible) {\n if (fromRcoreRoute) showIframe(fromRcoreRoute);\n else {\n setTimeout(() => {\n showIframe(fromRcoreRoute);\n }, 500);\n }\n } else {\n hideIframe();\n }\n};\nconst showIframe = (fromRcoreRoute) => {\n const iFrameContainer = getIframeContainer();\n if (iFrameContainer !== null && iFrameContainer !== undefined) {\n iFrameContainer.style.visibility = 'visible';\n iFrameContainer.style.opacity = '1';\n iFrameContainer.style.position = null;\n iFrameContainer.style.zIndex = fromRcoreRoute ? '2' : 'inherit';\n iFrameContainer.removeAttribute('aria-hidden');\n }\n const rcoreContainer = getRcoreContainer();\n if (rcoreContainer !== null && rcoreContainer !== undefined) {\n rcoreContainer.style.overflow = fromRcoreRoute ? 'auto' : null;\n rcoreContainer.style.position = fromRcoreRoute ? 'relative' : null;\n rcoreContainer.style.height = fromRcoreRoute ? '100%' : null;\n rcoreContainer.style.display = fromRcoreRoute ? 'block' : 'none';\n }\n};\nconst hideIframe = () => {\n const iFrameContainer = getIframeContainer();\n if (iFrameContainer !== null && iFrameContainer !== undefined) {\n iFrameContainer.style.visibility = 'hidden';\n iFrameContainer.style.opacity = '0';\n iFrameContainer.style.position = 'absolute';\n iFrameContainer.style.zIndex = -2;\n iFrameContainer.setAttribute('aria-hidden', 'true');\n }\n const rcoreContainer = getRcoreContainer();\n if (rcoreContainer !== null && rcoreContainer !== undefined) {\n rcoreContainer.style.overflow = 'auto';\n rcoreContainer.style.position = 'relative';\n rcoreContainer.style.height = '100%';\n }\n};\nconst coreRedirectionQS = 'rc';\nconst removeIframeClickListeners = () => {\n const iFrameContainer = getIframeContainer();\n addRemoveListenerForFrames(iFrameContainer, 'REMOVE', null);\n};\nconst addIframeClickListeners = (callback) => {\n const iFrameContainer = getIframeContainer();\n addRemoveListenerForFrames(iFrameContainer, 'ADD', callback);\n};\nconst addRemoveListenerForFrames = (parentContainer, action, callback = null) => {\n const iFrameContainer = parentContainer;\n if (iFrameContainer) {\n if (\n canAccessIFrame(iFrameContainer) &&\n iFrameContainer.contentWindow &&\n iFrameContainer.contentWindow.document &&\n iFrameContainer.contentWindow.document.body\n ) {\n iFrameContainer.contentWindow.document.body.onclick = action === 'ADD' ? callback : null;\n iFrameContainer.contentWindow.document.body.onmousedown = action === 'ADD' ? callback : null;\n const frames = parentContainer.contentDocument.getElementsByTagName('iframe');\n if (frames.length > 0) {\n for (let i = 0; i < frames.length; i++) {\n addRemoveListenerForFrames(frames[i], action, callback);\n }\n }\n } else {\n addListenerForCrossOriginFrame(parentContainer, action, callback);\n }\n }\n};\nconst addListenerForCrossOriginFrame = (frameContainer, action, callback = null) => {\n if (action === 'ADD' && callback) {\n const myConfObj = {\n iframeMouseOver: false\n };\n window.addEventListener('blur', function _blurHandler() {\n if (myConfObj.iframeMouseOver) {\n callback();\n }\n window.removeEventListener('blur', _blurHandler);\n });\n frameContainer.addEventListener('mouseover', function _mouseOverHandler() {\n myConfObj.iframeMouseOver = true;\n frameContainer.removeEventListener('mouseover', _mouseOverHandler);\n });\n frameContainer.addEventListener('mouseout', function _mouseOutHandler() {\n myConfObj.iframeMouseOver = true;\n frameContainer.removeEventListener('mouseout', _mouseOutHandler);\n });\n }\n};\nconst canAccessIFrame = (iframe) => {\n let html = null;\n try {\n const doc = iframe.contentDocument || iframe.contentWindow.document;\n html = doc.body.innerHTML;\n } catch (err) {\n getLogger().warn(`Its a cross-origin frame!! id:${iframe.id}, src: ${iframe.src}`);\n }\n return html !== null;\n};\nexport {\n postMessage,\n toggleVisibility,\n setIframe,\n setCoreframeTitle,\n getIframeContainer,\n removeIframeClickListeners,\n addIframeClickListeners,\n addListenerForCrossOriginFrame\n};\n","export const QueryParameterNames = {\n ReturnUrl: 'returnUrl',\n Message: 'message'\n};\n\nexport const LoginActions = {\n Login: 'login',\n LoginCallback: 'login-callback',\n SilentRediectUri: 'silent-renew'\n};\n\nexport const LogoutActions = {\n Logout: 'logout',\n LoggedOut: 'logged-out'\n};\n\nconst prefix = '/authentication';\n\nexport const ApplicationPaths = {\n AuthorizationPrefix: `${prefix}`,\n Login: `${prefix}/${LoginActions.Login}`,\n LoginCallback: `${prefix}/${LoginActions.LoginCallback}`,\n Logout: `${prefix}/${LogoutActions.Logout}`,\n LoggedOut: `${prefix}/${LogoutActions.LoggedOut}`,\n LogoutCallback: `${prefix}/${LogoutActions.LoggedOut}`,\n SilentRediectUri: `${prefix}/${LoginActions.SilentRediectUri}`\n};\n\nexport const CookieNames = {\n ApiSecurity: 'SumTotal_ApiSecurity'\n};\n\nexport const BrokerParams = ['domain', 'lang', 'username', 'password'];\n","import { useContext } from 'react';\nimport UserContext from '../../contexts/UserContext';\n\nconst useUserContext = () => {\n const context = useContext(UserContext);\n if (!context) {\n throw new Error('useUserContext must be used within UserContextProvider!');\n }\n return context;\n};\n\nexport default useUserContext;\n","import { createGlobalStyle } from 'styled-components';\n\nconst GlobalStyle = createGlobalStyle`\nbody {\n font-family: ${(props) => props.theme.variables.fontFamilyBase};\n font-size: ${(props) => props.theme.variables.fontSizeBase};\n color: ${(props) => props.theme.variables.textColor};\n background-color: ${(props) => props.theme.variables.bodyBg};\n line-height: ${(props) => props.theme.variables.lineHeightBase};\n}\nh1 {\nfont-size: 1.25rem;\nfont-weight: bold;\ntext-transform: uppercase;\n}\nh2 {\nfont-size: 1.125rem;\nfont-weight: bold;\ntext-transform: uppercase;\n}\nh3 {\n font-size: 1rem;\n font-weight: bold;\n text-transform: uppercase;\n}\nh4 {\n font-size: 0.875rem;\n font-weight: bold;\n text-transform: uppercase;\n line-height:1.875rem;\n}\n.body1{\n font-size: 0.875rem;\n font-weight: normal;\n}\n.body2{\n font-size: 0.75rem;\n font-weight: normal;\n}\n@media print {\n .no-print { \n display: none; \n }\n .grid-print-class\n {grid-row-start: 1 !important;\n grid-column-start: 1 !important;\n grid-column-end: span 2 ;\n grid-row-end:span 2 !important; \n position: absolute;overflow: auto;\n }\n}\n\n`;\n\nexport default GlobalStyle;\n","import { useContext } from 'react';\nimport MessageContext from '../../contexts/MessageContext';\n\nconst useMessageContext = () => {\n const context = useContext(MessageContext);\n if (!context) {\n throw new Error('useMessageContext must be used within MessageContextProvider!');\n }\n return context;\n};\n\nexport default useMessageContext;\n","/* eslint-disable import/prefer-default-export */\nimport axios from 'axios';\nimport { getConfig, getUserSummaryConfig, getCoreConfig } from '../../../../../config/apiConfig';\nimport { getActivitiesAndTaskConfigurations } from '../../../../configuration/activitiesAndTasks/services/activitiesAndTaskConfigurationService';\nimport getLogger from '../../../../../utils/logger';\n\nconst getSettingValueFromContext = (settingContext, settingKey) => {\n if (settingContext && settingContext.settings) {\n const settingObj = settingContext.settings.filter((setting) => setting.key === settingKey)[0];\n return settingObj.value;\n }\n return false;\n};\n\nexport const getActivitiesAndTasksDomainSettings = getActivitiesAndTaskConfigurations;\n\nexport const getUserLearningData = async (payload, settingsData) => {\n const config = await getUserSummaryConfig();\n let isV2Enabled = 'false';\n isV2Enabled = getSettingValueFromContext(settingsData, 'ENABLE_EXPERIENCEHUB_VERSION_V2');\n const requestUrl =\n isV2Enabled.toLowerCase() === 'true' ? 'api/v2/experiencehub' : 'api/v1/experiencehub';\n return axios\n .post(requestUrl, payload, config)\n .then(async (response) => {\n return response.data;\n })\n .catch(() => {\n return null;\n });\n};\n\nexport const getPastDueCount = async (payload) => {\n const config = await getUserSummaryConfig();\n const requestUrl = 'api/v2/getmylearningpastduecount';\n return axios\n .post(requestUrl, payload, config)\n .then(async (response) => {\n return {\n data: response.data\n };\n })\n .catch(() => {\n return null;\n });\n};\n\nexport const trackUserPermission = async () => {\n const config = await getCoreConfig();\n const requestUrl = `api/profiledata/GetUserPermissions?securitySectionTM=&securitySectionLM=CanManageOthersRoster&useEmulatingUserId=true`;\n return axios\n .get(requestUrl, config)\n .then(async (response) => {\n if (\n response != null &&\n response.data.Permission.indexOf('DecertifyAcquiredCertification') !== -1\n ) {\n return true;\n }\n return false;\n })\n .catch((err) => {\n getLogger().error(err);\n return null;\n });\n};\n\nexport const getCalendarData = async () => {\n const config = await getUserSummaryConfig();\n const requestUrl = `api/v2/GetCalendarData`;\n return axios\n .get(requestUrl, config)\n .then(async (response) => {\n return response.data;\n })\n .catch(() => {\n return null;\n });\n};\n\nexport const registerForActivity = async (payload) => {\n const config = await getConfig();\n const requestUrl = `api/rcore/myActivities/register`;\n return axios\n .post(requestUrl, payload, config)\n .then(async (response) => {\n return response.data;\n })\n .catch(() => {\n return null;\n });\n};\n\nexport const getCertificate = async (activityId, attemptId) => {\n const config = await getConfig();\n const requestUrl = `api/ConfigurationApi/GetActivitiyCertificateDetails?activityId=${activityId}&attemptId=${attemptId}`;\n return axios\n .get(requestUrl, config)\n .then(async (response) => {\n return response.data;\n })\n .catch(() => {\n return null;\n });\n};\n\nexport const downloadCertificate = async (activityId, attemptId) => {\n const config = await getConfig();\n const requestUrl = `api/ConfigurationApi/GetExportCertificateToPDf?activityId=${activityId}&attemptId=${attemptId}`;\n return axios\n .get(requestUrl, config)\n .then(async (response) => {\n return response.data;\n })\n .catch(() => {\n return null;\n });\n};\n\n/**\n * Gets activity type details\n * @param {Number} attemptId\n *\n */\nexport const getLateCompletionDataByAttempt = async (attemptId) => {\n if (attemptId === undefined) {\n return null;\n }\n // Get auth header config\n const config = await getConfig();\n const url = `/api/tracklatecompletions/${attemptId}/`;\n return axios\n .get(url, config)\n .then(async (resp) => {\n return resp;\n })\n .catch((err) => {\n getLogger().error(err);\n return {};\n });\n};\n\nexport const saveLateComments = async (lateAttemptComments) => {\n // Get auth header config\n const config = await getConfig();\n try {\n const resp = await axios.post(\n `/api/tracklatecompletions/savelatecomments`,\n lateAttemptComments,\n config\n );\n return resp;\n } catch (err) {\n getLogger().error(err);\n return null;\n }\n};\n\nexport const cancelInterest = async (payload) => {\n const config = await getUserSummaryConfig();\n const requestUrl = `/api/v2/CancelInterest`;\n try {\n const resp = await axios.post(requestUrl, payload, config);\n return resp;\n } catch (err) {\n getLogger().error(err);\n return null;\n }\n};\n\nexport const getDecertificationReasons = async () => {\n const config = await getUserSummaryConfig();\n const requestUrl = `api/v2/GetDecertificationReasons`;\n return axios\n .get(requestUrl, config)\n .then(async (response) => {\n return response.data;\n })\n .catch((err) => {\n getLogger().error(err);\n return null;\n });\n};\n\nexport const decertifyActivity = async (payload) => {\n const config = await getUserSummaryConfig();\n const requestUrl = `/api/v2/DecertifyReason`;\n try {\n const resp = await axios.post(requestUrl, payload, config);\n return resp;\n } catch (err) {\n getLogger().error(err);\n return null;\n }\n};\n","import React, { useState, useEffect } from 'react';\nimport { Theme } from '@sumtotal/react-foundation';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport CssBaseline from '@mui/material/CssBaseline';\nimport { ThemeProvider as StyledThemeProvider, StyleSheetManager } from 'styled-components';\nimport rtlPlugin from 'stylis-plugin-rtl';\nimport PropTypes from 'prop-types';\nimport getUserTheme from './services/themeService';\nimport { getLessVariables, evaluateLessVariables } from './services/themeHelper';\nimport CurrentThemeContext from '../contexts/ThemeContext';\nimport { getThemeCookieKeyValue } from '../utils/cookieHelper';\nimport GlobalStyle from './GlobalStyle';\nimport authService from '../authentication/AuthorizeService';\nimport getLogger from '../utils/logger';\n\nfunction ThemeContainer({ children }) {\n const [userTheme, setUserTheme] = useState(Theme());\n const [previewLogoUrl, setPreviewLogoUrl] = useState('');\n const [favIconUrl, setFavIconUrl] = useState('');\n\n const THEME_COOKIE_KEY = 'k';\n const THEME_COOKIE_USER_KEY = 'u';\n\n const curThemeKey = getThemeCookieKeyValue(THEME_COOKIE_KEY);\n useEffect(() => {\n (async () => {\n try {\n let currUserIdHash = getThemeCookieKeyValue(THEME_COOKIE_USER_KEY);\n if (currUserIdHash === null || currUserIdHash === undefined) {\n currUserIdHash = 0;\n }\n const userProfile = await authService.getUserProfile();\n if (userProfile && userProfile.personpk) {\n const isRTL = userProfile.isrtl && userProfile.isrtl.toLowerCase() === 'true';\n const isEmulation = await authService.isEmulationMode();\n const { currentTheme } = await getUserTheme(\n !isEmulation && userProfile.useridhash === currUserIdHash ? curThemeKey : null\n );\n if (!currentTheme || !currentTheme.json) {\n setUserTheme(Theme(null, isRTL));\n document.body.setAttribute('dir', isRTL ? 'rtl' : 'ltr');\n return;\n }\n // Extracting less variables object\n const themeVarsObj = getLessVariables(currentTheme);\n // Setting HeaderLogo from Theme\n setPreviewLogoUrl(currentTheme.clientLogo);\n setFavIconUrl(currentTheme.clientFavicon);\n // Evaluating less variables\n const varsJson = await evaluateLessVariables(themeVarsObj);\n const curTheme = Theme(varsJson, isRTL);\n setUserTheme(curTheme);\n document.body.setAttribute('dir', isRTL ? 'rtl' : 'ltr');\n }\n } catch (errorResponse) {\n getLogger().error(errorResponse);\n setUserTheme(Theme());\n document.body.setAttribute('dir', 'ltr');\n }\n })();\n }, [curThemeKey]);\n\n return (\n \n \n \n \n \n \n {userTheme.direction === 'rtl' ? (\n {children}\n ) : (\n children\n )}\n \n \n \n \n );\n}\n\n// PropType check\nThemeContainer.propTypes = {\n children: PropTypes.node.isRequired\n};\n\nexport default ThemeContainer;\n","import axios from 'axios';\nimport { getConfig } from '../../config/apiConfig';\n\nconst getUserTheme = async (themeKey) => {\n // Get auth header config\n const config = await getConfig();\n const url = 'api/rcore/usertheme';\n if (themeKey != null) {\n const reqObject = { OverrideTheme: true, ThemeKey: themeKey };\n config.params = reqObject;\n }\n return axios\n .get(url, config)\n .then(async (resp) => {\n let response = {};\n if (resp.data) {\n response = resp.data;\n }\n return response;\n })\n .catch((err) => {\n throw err.response;\n });\n};\n\nexport default getUserTheme;\n","import activityReducer from './activityReducer';\nimport errorsReducer from './errorsReducer';\n\nconst rootReducer = {\n activityBuilder: activityReducer,\n activityBuilderErrors: errorsReducer\n};\n\nexport default rootReducer;\n","import React, { useReducer } from 'react';\nimport BreadcrumbContext from './BreadcrumbContext';\n\nconst defaultBreadcrumbContext = {\n routeUrl: '',\n rpKey: '',\n isRcoreNode: false,\n breadcrumbData: []\n};\nconst BreadcrumbContextProvider = (props) => {\n const [state, dispatch] = useReducer(breadcrumbReducer, defaultBreadcrumbContext);\n const value = { breadcrumbContext: state, dispatch };\n return ;\n};\n\nconst breadcrumbReducer = (state, action) => {\n switch (action.type) {\n case 'POPULATE_BREADCRUMBS': {\n return {\n ...state,\n ...action.data\n };\n }\n case 'CLEAR_BREADCRUMBS': {\n return defaultBreadcrumbContext;\n }\n case 'UPDATE_BREADCRUMB': {\n // Expects a breadcrumb object with title attribute as a mandatory\n if (\n action.addBreadcrumb !== undefined &&\n action.addBreadcrumb.title !== undefined &&\n action.addBreadcrumb.title !== null &&\n action.addBreadcrumb.title !== ''\n ) {\n return {\n ...state,\n breadcrumbData: [...state.breadcrumbData, action.addBreadcrumb]\n };\n }\n throw new Error(`Title for the breadcrumb data is mandatory`);\n }\n case 'REMOVE_BREADCRUMB_ITEM': {\n // Method to remove a breadcrumb. Has to send the breadcrumb object.\n const newState = {\n ...state,\n breadcrumbData: state.breadcrumbData.filter(\n (node) =>\n node.title !== action.removeBreadcrumb.title && node.url !== action.removeBreadcrumb.url\n )\n };\n return newState;\n }\n default:\n throw new Error(`Unknown action type: ${action.type} for breadcrumb update`);\n }\n};\n\nexport default BreadcrumbContextProvider;\n","/* eslint-disable import/prefer-default-export */\nimport axios from 'axios';\nimport { getUserSummaryConfig } from '../../../../config/apiConfig';\nimport getLogger from '../../../../utils/logger';\n\nexport const getActivitiesAndTaskConfigurations = async () => {\n // Get auth header config\n const config = await getUserSummaryConfig();\n const requestUrl = `api/v1/adminconfiguration`;\n return axios\n .get(requestUrl, config)\n .then(async (response) => {\n return response.data;\n })\n .catch(() => {\n return null;\n });\n};\n\nexport const saveActivitiesAndTaskConfigurations = async (data) => {\n // post auth header config\n const config = await getUserSummaryConfig();\n const requestUrl = `api/v1/saveadminconfiguration`;\n return axios\n .post(requestUrl, data, config)\n .then(async (response) => {\n return response;\n })\n .catch(() => {\n return null;\n });\n};\n\nexport const getTranslationsForCard = async (cardId) => {\n // Get auth header config\n const config = await getUserSummaryConfig();\n const requestUrl = `api/v2/GetTranslationsForCard?cardId=${cardId}`;\n return axios\n .get(requestUrl, config)\n .then(async (resp) => {\n let response = {};\n if (resp.data) {\n response = resp.data;\n }\n return response;\n })\n .catch((err) => {\n getLogger().error(err);\n return null;\n });\n};\n\nexport const saveTranslationsForCard = async (cardId, translatedProperty, translations) => {\n // post auth header config\n const data = { cardId, translatedProperty, translations };\n const config = await getUserSummaryConfig();\n const requestUrl = `api/v2/SaveTranslationsForCard`;\n return axios\n .post(requestUrl, data, config)\n .then(async (response) => {\n return response;\n })\n .catch((err) => {\n getLogger().error(err);\n return null;\n });\n};\n","import React, { useEffect, useState, useRef } from 'react';\nimport styled from 'styled-components';\nimport { useLocation } from 'react-router';\nimport useUserContext from '../../../common/hooks/useUserContext';\nimport config from '../../../config/Config';\nimport UserSecurityQuestions from '../../userSecurityQuestion/components/UserSecurityQuestions';\nimport { setIframe } from '../services/coreIFrameHelper';\n\nconst IFrame = styled.iframe`\n position: absolute;\n height: 100%;\n width: 100%;\n`;\n\nconst CorePillarFrame = () => {\n const { user } = useUserContext();\n const [frameSource, setFrameSource] = useState('');\n const coreframe = useRef(null);\n const location = useLocation();\n\n useEffect(() => {\n const container = document.getElementById('CoreIFrame');\n if (\n container &&\n container.getAttribute('src') === '' &&\n location.pathname.toLowerCase().indexOf('/c/') > -1\n ) {\n setIframe(`${location.pathname.replace(/\\/c/i, 'core')}${location.search}`);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const coreUrl = `${config.domain}core/?rc=1`;\n const homeUrl = user.homePageUrl ? user.homePageUrl.split('?')[0] : '';\n const currentUrl = window.location.pathname.toLowerCase().replace('/rcore/c', '/c');\n if (\n (currentUrl === '/rcore' ||\n currentUrl.indexOf('/c/') === -1 ||\n currentUrl === homeUrl.toLowerCase()) &&\n coreframe.current !== null &&\n coreframe.current.getAttribute('src') === ''\n ) {\n setFrameSource(coreUrl);\n }\n }, [user.homePageUrl]);\n\n return (\n <>\n \n {user.UserJustAnsweredSecurityQuestion === true && }\n \n );\n};\n\nexport default CorePillarFrame;\n","import axios from 'axios';\nimport { getConfig } from '../../../config/apiConfig';\nimport authService from '../../../authentication/AuthorizeService';\n\nconst getUserProfile = async (id) => {\n // Get auth header config\n const config = await getConfig();\n let userId = id;\n if (!userId) {\n userId = await authService.getMaskedUserId();\n }\n\n const url = `api/rcore/userprofile?userId=${userId}`;\n\n return axios\n .get(url, config)\n .then(async (resp) => {\n let response = {};\n if (resp.data) {\n response = resp.data;\n }\n return response;\n })\n .catch((err) => {\n throw err.response;\n });\n};\n\nexport default getUserProfile;\n","import { combineReducers } from 'redux';\nimport activityBuilderReducers from '../modules/learning/activityBuilder/state/reducers';\n\nconst rootReducer = combineReducers({\n ...activityBuilderReducers\n});\n\nexport default rootReducer;\n","import { applyMiddleware, createStore } from 'redux';\nimport thunkMiddleware from 'redux-thunk';\nimport rootReducer from './reducers';\n\nexport default createStore(rootReducer, applyMiddleware(thunkMiddleware));\n","import React, { useState } from 'react';\nimport MessageContext from './MessageContext';\n\nconst defaultMessageContext = {\n text: '',\n refresh: false,\n severity: 'info',\n data: {}\n};\nconst MessageContextProvider = (props) => {\n const [messageContext, setMessageContext] = useState(defaultMessageContext);\n const value = { messageContext, setMessageContext };\n return ;\n};\n\nexport default MessageContextProvider;\n","import axios from 'axios';\nimport i18next from 'i18next';\nimport localforage from 'localforage';\nimport { getConfig } from '../../../config/apiConfig';\nimport { getIdbItem, setIdbItem } from '../../../utils/clientStorage';\nimport getLogger from '../../../utils/logger';\n\nconst getTranslationCategoryHash = async () => {\n const config = await getConfig();\n return axios\n .get('api/i18n/categoryhash', config)\n .then((response) => {\n if (response && response.data) {\n return JSON.parse(response.data);\n }\n return [];\n })\n .catch((err) => {\n getLogger().error(err);\n return [];\n });\n};\n\nconst refreshOutdatedTranslations = async () => {\n const cachedHash = await getIdbItem('translationHash');\n const keysToUpdate = [];\n let hashChanged = false;\n let store;\n return getTranslationCategoryHash()\n .then(async (response) => {\n if (!cachedHash || cachedHash.length === 0) {\n // If translation category hash is not present then update the hash in indexedDB\n await setIdbItem('translationHash', response);\n return null;\n }\n\n const keys = Object.keys(response);\n\n // eslint-disable-next-line no-restricted-syntax\n for (const k of keys) {\n if (cachedHash[k] && cachedHash[k] !== response[k]) {\n if (!hashChanged) {\n hashChanged = true;\n store = localforage.createInstance({\n name: 'ST',\n storeName: 'rcore'\n });\n }\n // Below check is to ensure we reload only the categories that are already loaded by rcore.\n // using 'en-Us' language as it is configured to be the fallback language for i18n instance.\n // eslint-disable-next-line no-await-in-loop\n const category = await store.getItem(`en-US-${k}`);\n if (category) keysToUpdate.push(k);\n }\n }\n // Update the hash in indexedDB when there is a change in hash for atleast one category.\n if (hashChanged) await setIdbItem('translationHash', response);\n\n if (keysToUpdate.length > 0) {\n await i18next.reloadResources(null, keysToUpdate);\n }\n return null;\n })\n .catch((err) => {\n getLogger().error('Error in refreshing translations', err);\n });\n};\n\nexport { getTranslationCategoryHash, refreshOutdatedTranslations };\n","import useGoToHome from '../../../common/hooks/useGoToHome';\nimport useUserContext from '../../../common/hooks/useUserContext';\n\nfunction UserSecurityQuestions() {\n const { user, dispatch } = useUserContext();\n useGoToHome();\n if (user.UserJustAnsweredSecurityQuestion) {\n dispatch({ type: 'USER_ANSWERED_SECURITY_QUESTIONS' });\n }\n return null;\n}\n\nexport default UserSecurityQuestions;\n","import { useContext, useEffect } from 'react';\nimport { Theme } from '@sumtotal/react-foundation';\nimport { useHistory } from 'react-router-dom';\nimport queryString from 'query-string';\nimport getLogger from '../../../utils/logger';\nimport { postMessage, setCoreframeTitle, toggleVisibility } from '../services/coreIFrameHelper';\nimport CurrentThemeContext from '../../../contexts/ThemeContext';\nimport { evaluateLessVariables } from '../../../theme/services/themeHelper';\nimport { setCookieValue, removeCookie } from '../../../utils/cookieHelper';\nimport { ApplicationPaths, CookieNames } from '../../../authentication/AuthorizationConstants';\nimport useUserContext from '../../../common/hooks/useUserContext';\nimport useMessageContext from '../../../common/hooks/useMessageContext';\nimport useHeaderContext from '../../../common/hooks/useHeaderContext';\nimport authService from '../../../authentication/AuthorizeService';\nimport {\n removeLocalStorageItem,\n StorageConstants,\n setLocalStorageItem\n} from '../../../utils/clientStorage';\n\nfunction CoreMessageListener() {\n const { themeData, logoData, favIconData } = useContext(CurrentThemeContext);\n const [currentTheme, setCurrentTheme] = themeData;\n const setPreviewLogoUrl = logoData[1];\n const setFavIconUrl = favIconData[1];\n const { dispatch } = useUserContext();\n const headerData = useHeaderContext();\n const { setHeaderContext } = headerData;\n const messageContextData = useMessageContext();\n const { setMessageContext } = messageContextData;\n\n const history = useHistory();\n // On domain change clear rcore cookies, reload rcore & navigate to admin route.\n function onDomainChange(route) {\n let nextRoute = route;\n if (!nextRoute) {\n nextRoute = 'admindashboard';\n }\n // Clearing rcore cookies\n setCookieValue('sitemapHash', '');\n setCookieValue('dashboardHash', '');\n setCookieValue('rcoreDashboardHash', '');\n removeLocalStorageItem(StorageConstants.Keys.sitemap);\n\n // reload rcore\n window.location.assign(nextRoute);\n }\n\n function addRemoveBackdrop(action) {\n const backdropElements = document.getElementsByClassName('modal-backdrop');\n for (let index = 0; index < backdropElements.length; index++) {\n if (action === 'ADD') backdropElements[index].classList.add('modal-add-backdrop');\n else backdropElements[index].classList.remove('modal-add-backdrop');\n }\n }\n\n const validateMessageString = (message) => {\n const browserPluginMessagesToSkip = ['mgdata', 'nuanria_messaging'];\n if (typeof message !== 'string') {\n return true;\n }\n let isIdentified = false;\n browserPluginMessagesToSkip.forEach((skipItem) => {\n if (isIdentified) {\n return;\n }\n if (message.indexOf(skipItem) > -1) {\n isIdentified = true;\n }\n });\n return !isIdentified;\n };\n\n const MessageHandler = (e) => {\n if (e && e.data) {\n // check to make sure that we're not goiong to get some XSS by insuring that the script\n // is invoked by our origin.\n if (window.staticData && !e.origin.match(window.staticData.safeOrigin)) {\n getLogger().warn('Received a post from a window which did not have the same origin.');\n return;\n }\n\n let messageData = e.data;\n if (typeof messageData === 'string') {\n messageData = parseJson(messageData);\n }\n const { action, parameters } = messageData;\n switch (action) {\n // Update page title\n case 'RCORE_UPDATE_TITLE': {\n document.title = parameters.title;\n // Update core iframe title\n setCoreframeTitle(parameters.frameTitle);\n break;\n }\n case 'CORE_FRAME_LOADED': {\n setHeaderContext((state) => ({\n ...state,\n coreFrameLoaded: true\n }));\n break;\n }\n case 'CORE_SLIDEOUT_OPENED': {\n const isRcoreRoute = window.location.pathname.toLowerCase().indexOf('/c/') < 0;\n toggleVisibility(true, isRcoreRoute);\n if (window.location.pathname.indexOf('/dashboardManager/designer/') > -1) {\n setHeaderContext((state) => ({\n ...state,\n closeRCoreSlideout: true\n }));\n }\n break;\n }\n case 'CORE_SLIDEOUT_CLOSED': {\n if (window.location.pathname.toLowerCase().indexOf('/c/') < 0) {\n toggleVisibility(false);\n }\n if (e.data.parameters.elementId && e.data.parameters.elementId !== '') {\n document.getElementById(e.data.parameters.elementId).focus();\n }\n break;\n }\n // Update theme\n case 'RCORE_UPDATE_THEME': {\n if (currentTheme && currentTheme.variables) {\n evaluateLessVariables(parameters.themeVarsObject)\n .then((varsJson) => {\n const previewTheme = Theme(varsJson);\n setCurrentTheme(previewTheme);\n setPreviewLogoUrl(parameters.clientLogo);\n setFavIconUrl(parameters.clientFavIcon);\n return null;\n })\n .catch((errorResponse) => {\n getLogger().error(errorResponse);\n });\n }\n break;\n }\n // Update the url to handle deep link navigation\n case 'RCORE_UPDATE_NAVIGATION_URL': {\n const parsedUrl = queryString.parseUrl(parameters.url);\n if (parsedUrl.url === '/search') {\n return;\n }\n if (!parsedUrl.query.isDeepLink) {\n parsedUrl.query.isDeepLink = 1;\n }\n if (parsedUrl.query.rc) {\n delete parsedUrl.query.rc;\n }\n const prefix = parsedUrl.url.indexOf('/') === 0 ? '' : '/';\n const url = `/rcore/c${prefix}${queryString.stringifyUrl(parsedUrl)}`;\n // If next route is a core route and current route is rcore route, make sure that iframe is visible.\n if (\n url.toLowerCase().indexOf('/c/') > 0 &&\n window.location.pathname.toLowerCase().indexOf('/c/') < 0\n ) {\n setHeaderContext((state) => ({\n ...state,\n considerRcorePage: false\n }));\n toggleVisibility(true, true);\n }\n window.history.replaceState('', '', url);\n break;\n }\n // Navigate to RCore node URL without reloading\n case 'NAVIGATE_TO_RCORE': {\n history.push(parameters.url);\n break;\n }\n\n case 'RCORE_SECURITY_QUESTIONS_ANSWERED': {\n // Setting UserJustAnsweredSecurityQuestion value false for enable rcore components.\n const mustAnswerSecurityQuestions = parameters.mustSetSecurityQuestions;\n dispatch({ type: 'USER_SECURITY_QUESTIONS', mustAnswerSecurityQuestions });\n setLocalStorageItem('MustAnswerSecurityQuestions', mustAnswerSecurityQuestions);\n break;\n }\n // Event triggered on domain change.\n case 'RCORE_SWITCH_USER_DOMAIN': {\n setLocalStorageItem('MustAnswerSecurityQuestions', false);\n onDomainChange(parameters.route);\n break;\n }\n\n case 'RCORE_EMULATE_EMPLOYEE': {\n authService\n .removeAccessToken()\n .then(() => {\n window.location.assign(parameters.route);\n return null;\n })\n .catch((err) => {\n getLogger().error(err);\n });\n break;\n }\n case 'RCORE_SESSION_EXPIRED': {\n removeCookie(CookieNames.ApiSecurity);\n authService\n .removeAccessToken()\n .then(() => {\n window.location.assign(e.data.parameters.route);\n return null;\n })\n .catch((err) => {\n getLogger().error(err);\n });\n break;\n }\n case 'RCORE_SESSION_LOGOFF': {\n history.push(ApplicationPaths.Logout);\n break;\n }\n case 'RCORE_SEARCH_CONTEXT_UPDATE': {\n setHeaderContext((state) => ({\n ...state,\n searchText: parameters.text,\n searchContext: parameters.context,\n view: parameters.view\n }));\n break;\n }\n // Update user data\n case 'RCORE_UPDATE_USER_DATA': {\n const userData = {};\n if (parameters.imagePath !== undefined) {\n userData.image = parameters.imagePath;\n } else {\n if (parameters.fullName !== undefined) {\n userData.name = parameters.fullName;\n }\n if (parameters.jobTitle !== undefined) {\n userData.jobTitle = parameters.jobTitle;\n }\n }\n dispatch({ type: 'UPDATE_USER_DETAILS', userData });\n break;\n }\n case 'RCORE_GOAL_DETAIL_SLIDEOUT_CLOSE': {\n if (parameters.message !== undefined && parameters.message !== '') {\n setMessageContext((state) => ({\n ...state,\n text: parameters.message,\n refresh: true,\n severity: parameters.severity\n }));\n }\n break;\n }\n // current logic is very similar to RCORE_GOAL_DETAIL_SLIDEOUT_CLOSE, will add more logic later\n case 'RCORE_SKILL_SLIDEOUT_CLOSE': {\n const isMarketComparisonRoute =\n window.location.pathname.indexOf('/marketComparison/') >= 0;\n if (\n parameters.message !== undefined &&\n parameters.message !== '' &&\n isMarketComparisonRoute\n ) {\n setMessageContext((state) => ({\n ...state,\n text: parameters.message,\n refresh: true,\n severity: parameters.severity,\n data: parameters.internalSkillData\n }));\n }\n\n break;\n }\n // Refresh timeline count\n case 'RCORE_REFRESH_TIMELINE_COUNT': {\n setHeaderContext((state) => ({\n ...state,\n refreshTimeline: true\n }));\n break;\n }\n // Reset Search Term and Search values\n case 'RCORE_RESET_SEARCH_VALUES': {\n setHeaderContext((state) => ({\n ...state,\n resetSearchValues: true\n }));\n break;\n }\n case 'RCORE_UPDATE_CART': {\n setHeaderContext((state) => ({\n ...state,\n cartItemsCount: parameters.cartItemsCount\n }));\n break;\n }\n case 'CORE_MODAL_OPENED': {\n addRemoveBackdrop('ADD');\n break;\n }\n case 'CORE_MODAL_CLOSED': {\n addRemoveBackdrop('REMOVE');\n break;\n }\n /* Default case - redirect message to core as pillars post messages to top object\n * This listener wouldn't directly handle pillar messages as of now\n */\n default: {\n // Excluding the my guide messages.\n if (e.data && validateMessageString(e.data)) {\n postMessage(null, e.data, true);\n }\n }\n }\n }\n };\n\n useEffect(() => {\n window.addEventListener('message', MessageHandler);\n return () => window.removeEventListener('message', MessageHandler);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return null;\n}\n\n/**\n * Parse the string into json (if valid). returns same string if failed to convert\n * @param {String} jsonString\n * @returns {String | Object}\n */\nconst parseJson = (jsonString) => {\n try {\n return JSON.parse(jsonString);\n } catch {\n return jsonString;\n }\n};\n\nexport default CoreMessageListener;\n","import { refreshOutdatedTranslations } from './translationService';\n\nconst bootstrapApplication = async () => {\n Promise.all([refreshOutdatedTranslations()])\n .then(() => {\n return true;\n })\n .catch(() => {\n return false;\n });\n};\n\nexport default bootstrapApplication;\n","import axios from 'axios';\nimport { getConfig } from '../../../config/apiConfig';\nimport getLogger from '../../../utils/logger';\n\nconst trackNavigationHistory = async (destinationType, destinationValue, destinationUrl) => {\n const config = await getConfig();\n const requestUrl = `api/core/person/navigationHistory?destinationType=${destinationType}&destinationValue=${destinationValue}&destinationUrl=${destinationUrl}`;\n return axios\n .post(requestUrl, null, config)\n .then(async (response) => {\n return response.data;\n })\n .catch((err) => {\n getLogger().error(err);\n return null;\n });\n};\n\nexport default trackNavigationHistory;\n","import { useHistory, useLocation } from 'react-router';\nimport useUserContext from '../../../common/hooks/useUserContext';\n\nconst SecurityQuestions = () => {\n const { user } = useUserContext();\n const history = useHistory();\n const location = useLocation();\n\n if (\n location.pathname !== '/' &&\n !location.pathname.startsWith('/c/') &&\n user.mustAnswerSecurityQuestions\n ) {\n history.push(\n '/c/usersecurityquestion?relyingParty=ELIXHRUI&nodeKey=self_questions&nodeUrl=/usersecurityquestion'\n );\n }\n return null;\n};\n\nexport default SecurityQuestions;\n","import axios from 'axios';\nimport { getConfig } from '../../../config/apiConfig';\n\nconst getCoreSettings = async (allowCache) => {\n // Get auth header config\n const config = await getConfig();\n const url = `api/settingapi/GetSettingsForPreferenceScreen?allowCache=${allowCache}`;\n\n return axios\n .get(url, config)\n .then(async (resp) => {\n let response = {};\n if (resp.data) {\n response = resp.data;\n }\n return response;\n })\n .catch((err) => err.response);\n};\n\nexport const saveSettingDefinition = async (settings) => {\n // Get auth header config\n const config = await getConfig();\n const url = `api/settingapi/SaveSettingsForPreferenceScreen`;\n return axios\n .post(url, settings, config)\n .then(async (resp) => {\n return resp.data;\n })\n .catch((err) => err.response);\n};\n\nexport default getCoreSettings;\n","import {\n UPDATE_ACTIVITY_PROPERTY,\n SET_ACTIVITY_SECTION,\n SET_ACTIVITY_INFO,\n SET_PICKER_DATA,\n SET_LOADING,\n UPDATE_ACTIVITY_PROPERTIES,\n SET_SECTIONS_LOADED,\n SET_SECTIONS_LOADING,\n RESET_TEMP_DATA,\n SET_TEMP_DATA\n} from '../actions/actionTypes';\n\nconst initialState = {\n data: {}\n};\n\nconst activityReducer = (state = initialState, { type, payload } = {}) => {\n switch (type) {\n case UPDATE_ACTIVITY_PROPERTY: {\n const { section, property, value } = payload;\n return handleActivityPropertyChange(state, section, property, value);\n }\n case UPDATE_ACTIVITY_PROPERTIES: {\n const { properties } = payload;\n let latestState = state;\n properties.forEach(({ section, property, value }) => {\n latestState = handleActivityPropertyChange(latestState, section, property, value);\n });\n return latestState;\n }\n\n case SET_ACTIVITY_SECTION: {\n let newState = state;\n payload.forEach(({ section, data: sectionData }) => {\n newState = setSectionData(newState, section, sectionData);\n });\n return newState;\n }\n case SET_LOADING: {\n const { isLoading } = payload;\n return {\n ...state,\n isLoading\n };\n }\n case SET_ACTIVITY_INFO: {\n const { activityId, activityType, data } = payload;\n // Should reset data, so that pickers data is refereshed\n return {\n isLoading: state.isLoading,\n activityId,\n activityType,\n data\n };\n }\n case SET_PICKER_DATA: {\n const { property, value } = payload;\n return {\n ...state,\n pickersData: {\n ...state.pickersData,\n [property]: value\n }\n };\n }\n case SET_SECTIONS_LOADING:\n return setSectionsLoading(state, payload);\n case SET_SECTIONS_LOADED:\n return setSectionsLoaded(state, payload);\n case SET_TEMP_DATA: {\n const { property, value } = payload;\n return {\n ...state,\n tempData: {\n ...state.pickersData,\n [property]: value\n }\n };\n }\n case RESET_TEMP_DATA:\n return {\n ...state,\n tempData: undefined\n };\n default:\n return state;\n }\n};\n\nconst handleActivityPropertyChange = (state, section, property, value) => {\n const sectionsData = getNewSectionData(state, section, property, value);\n return setSectionData(state, section, sectionsData);\n};\n/**\n *\n * @param {Object} state\n * @param {String} section\n * @param {String} property\n * @param {*} value\n */\nconst getNewSectionData = (state, section, property, value) => {\n const { data } = state;\n const { [section]: sectionData } = data;\n let propertyValue = {\n [property]: value\n };\n if (section === property) {\n return value;\n }\n if (property && property.indexOf('.') !== -1) {\n const properties = property.split('.');\n let outerProperty = sectionData || {};\n propertyValue = outerProperty;\n properties.forEach((prop, index) => {\n outerProperty[prop] = outerProperty[prop] || {};\n if (index === properties.length - 1) {\n outerProperty[prop] = value;\n }\n outerProperty = outerProperty[prop];\n });\n }\n return {\n ...sectionData,\n ...propertyValue\n };\n};\nconst setSectionData = (state, section, data) => {\n if (state.data[section] === data) {\n return state;\n }\n return setData(state, {\n ...state.data,\n [section]: data\n });\n};\nconst setData = (state, data) => ({\n ...state,\n data\n});\n\n/**\n *\n * @param {*} state\n * @param {String[]} payload\n */\nconst setSectionsLoading = (state, payload) => {\n let isLoading = true;\n const { sectionsLoading = {} } = state;\n payload.forEach((section) => {\n isLoading = true;\n sectionsLoading[section] = true;\n });\n return {\n ...state,\n sectionsLoading: {\n ...sectionsLoading\n },\n isSectionsLoading: isLoading\n };\n};\n\n/**\n *\n * @param {*} state\n * @param {String[]} payload\n */\nconst setSectionsLoaded = (state, payload) => {\n let isLoading = false;\n const { sectionsLoading } = state;\n payload.forEach((section) => {\n sectionsLoading[section] = false;\n });\n Object.keys(sectionsLoading).forEach((s) => {\n if (sectionsLoading[s]) {\n isLoading = true;\n }\n });\n return {\n ...state,\n sectionsLoading: {\n ...sectionsLoading\n },\n isSectionsLoading: isLoading\n };\n};\nexport default activityReducer;\n","import {\n SET_ACTIVITY_PROPERTY_VALIDITY,\n SET_ACTIVITY_VALIDATIONS,\n ADD_ACTIVITY_VALIDATIONS,\n REMOVE_ACTIVITY_VALIDATIONS,\n REPLACE_ACTIVITY_SECTIONS_VALIDITY\n} from '../actions/actionTypes';\n\nconst initialState = {\n subSectionsProperties: {},\n sectionsValidState: {},\n isValid: false\n};\n\nconst errorsReducer = (state = initialState, { type, payload } = {}) => {\n const { validations = [] } = state;\n switch (type) {\n case SET_ACTIVITY_PROPERTY_VALIDITY: {\n const { section, property, isValid } = payload;\n return handleActivityPropertyChange(state, section, property, isValid);\n }\n case SET_ACTIVITY_VALIDATIONS:\n return {\n ...state,\n validations: payload\n };\n case ADD_ACTIVITY_VALIDATIONS: {\n const { code: addCode } = payload;\n /*\n const currentValidation = validations.find((v) => v.key === addCode);\n NOT REQUIRED AS OF NOW\n if (currentValidation) {\n return state;\n }\n */\n return {\n ...state,\n validations: [...validations, { key: addCode }]\n };\n }\n case REMOVE_ACTIVITY_VALIDATIONS: {\n const { code: removeCode } = payload;\n const codesToRemove = removeCode;\n if (!validations.some((v) => codesToRemove.includes(v.key))) {\n return state;\n }\n const newValidations = validations.filter((v) => !codesToRemove.includes(v.key));\n return {\n ...state,\n validations: newValidations\n };\n }\n case REPLACE_ACTIVITY_SECTIONS_VALIDITY: {\n return {\n ...state,\n sectionsValidState: payload.reduce((obj, sectionName) => {\n // Disabling as spread operater is expensive.\n // eslint-disable-next-line no-param-reassign\n obj[sectionName] = false;\n return obj;\n }, {})\n };\n }\n default:\n return state;\n }\n};\nconst handleActivityPropertyChange = (state, section, property, isValid) => {\n const { [section]: subSectionProperties } = state.subSectionsProperties || {};\n const newSubSectionProperties = {\n ...subSectionProperties,\n [property]: isValid\n };\n const newSubSectionsPropertiesState = {\n ...state.subSectionsProperties,\n [section]: newSubSectionProperties\n };\n const newSectionsValidState = {\n ...state.sectionsValidState,\n [section]: getSubSectionValid(newSubSectionsPropertiesState[section])\n };\n return {\n ...state,\n subSectionsProperties: newSubSectionsPropertiesState,\n sectionsValidState: newSectionsValidState,\n isValid: getAllSubsectionsValid(newSectionsValidState)\n };\n};\n\nconst getAllSubsectionsValid = (newErrors) => {\n let isValid = true;\n Object.keys(newErrors).forEach((key) => {\n isValid = isValid && newErrors[key];\n });\n return isValid;\n};\n/**\n * Checks if all the object values are true\n * @param {Object} newErrors\n * @returns {Boolean} if form is valid\n */\nexport const getSubSectionValid = (newErrors) => {\n let isValid = true;\n Object.keys(newErrors).forEach((key) => {\n isValid = isValid && newErrors[key];\n });\n return isValid;\n};\n\nexport default errorsReducer;\n","import React, { useState, useEffect } from 'react';\nimport SettingsContext from './SettingsContext';\nimport getCoreSettings from '../common/settings/services/settingService';\nimport authService from '../authentication/AuthorizeService';\n\nconst SettingsContextProvider = (props) => {\n const [settingsData, setData] = useState({});\n\n const getSettings = async () => {\n const status = await authService.isAuthenticated();\n if (status) {\n const settings = await getCoreSettings(true);\n setData(settings);\n }\n };\n useEffect(() => {\n getSettings();\n }, []);\n\n return ;\n};\n\nexport default SettingsContextProvider;\n","export const SET_ACTIVITY_INFO = 'SET_ACTIVITY_INFO';\nexport const UPDATE_ACTIVITY_PROPERTY = 'UPDATE_ACTIVITY_PROPERTY';\nexport const UPDATE_ACTIVITY_PROPERTIES = 'UPDATE_ACTIVITY_PROPERTIES';\nexport const SET_ACTIVITY_SECTION = 'SET_ACTIVITY_SECTION';\nexport const SET_ACTIVITY_VALIDATIONS = 'SET_ACTIVITY_VALIDATIONS';\nexport const SET_ACTIVITY_PROPERTY_VALIDITY = 'SET_ACTIVITY_PROPERTY_VALIDITY';\nexport const REPLACE_ACTIVITY_SECTIONS_VALIDITY = 'REPLACE_ACTIVITY_SECTIONS_VALIDITY';\nexport const FETCH_ACTIVITY_SECTION = 'FETCH_ACTIVITY_SECTION';\nexport const SET_PICKER_DATA = 'SET_PICKER_DATA';\nexport const SET_LOADING = 'SET_LOADING';\nexport const ADD_ACTIVITY_VALIDATIONS = 'ADD_ACTIVITY_VALIDATIONS';\nexport const REMOVE_ACTIVITY_VALIDATIONS = 'REMOVE_ACTIVITY_VALIDATIONS';\nexport const SET_SECTIONS_LOADING = 'SET_SECTIONS_LOADING';\nexport const SET_SECTIONS_LOADED = 'SET_SECTIONS_LOADED';\nexport const RESET_TEMP_DATA = 'RESET_TEMP_DATA';\nexport const SET_TEMP_DATA = 'SET_TEMP_DATA';\n","import React from 'react';\nimport styled from 'styled-components';\nimport PropTypes from 'prop-types';\nimport queryString from 'query-string';\nimport getLogger from '../../../utils/logger';\nimport { IntegrationMode } from '../../../utils/IntegrationConstants';\nimport useIntegrationContext from '../../hooks/useIntegrationContext';\nimport CheckIntegrationSetting from '../../../utils/integrationHelper';\n\nconst log = getLogger();\n\nconst LayoutGrid = styled.div`\n --header-height: 3.25rem;\n display: -ms-grid;\n display: grid;\n @supports (-webkit-touch-callout: none) {\n position: fixed;\n }\n -ms-grid-rows: ${(props) =>\n props.showStickyHeader\n ? '3.25rem 2.4375rem minmax(10rem, 100%)'\n : '3.25rem minmax(10rem, 100%)'};\n grid-template-rows: ${(props) =>\n props.showStickyHeader\n ? '3.25rem 2.4375rem minmax(10rem, auto)'\n : '3.25rem minmax(10rem, auto)'};\n -ms-grid-columns: 5.625rem 1fr;\n grid-template-columns: 5.625rem 1fr;\n width: 100%;\n height: 100vh;\n max-height: -webkit-fill-available;\n\n .header {\n -ms-grid-row: 1;\n grid-row-start: 1;\n -ms-grid-column: span 2;\n grid-column-start: 1;\n -ms-grid-column-span: 2;\n grid-column-end: span 2;\n }\n\n .side-bar {\n -ms-grid-column: 1;\n grid-column-start: 1;\n -ms-grid-row: 2;\n grid-row-start: 2;\n -ms-grid-row-span: ${(props) => (props.showStickyHeader ? '2' : '1')};\n grid-row-end: ${(props) => (props.showStickyHeader ? 'span 2' : 'span 1')};\n }\n .content {\n -ms-grid-column: 2;\n grid-column-start: 2;\n -ms-grid-row: ${(props) => (props.showStickyHeader ? '3' : '2')};\n grid-row-start: ${(props) => (props.showStickyHeader ? '3' : '2')};\n position: relative;\n overflow: auto;\n }\n .sticky-header {\n -ms-grid-column: 2;\n grid-column-start: 2;\n -ms-grid-row: 2;\n grid-row-start: 2;\n position: relative;\n overflow: auto;\n }\n .modal-backdrop {\n visibility: hidden;\n position: fixed;\n inset: 0;\n z-index: 0;\n }\n .header-backdrop {\n height: 3.25rem;\n }\n .sidebar-backdrop {\n width: 5.625rem;\n top: 3.25rem;\n }\n .modal-add-backdrop {\n visibility: visible;\n // This z-index should be more than the z-index value of header component(1100).\n z-index: 1200;\n background-color: #000;\n opacity: 0.5;\n transition: opacity 0.15s linear;\n }\n`;\n\nconst IntegrationLayoutGrid = styled(LayoutGrid)`\n -ms-grid-rows: ${(props) =>\n props.showStickyHeader ? '2rem 2.4375rem minmax(10rem, 100%)' : '2rem minmax(10rem, 100%)'};\n grid-template-rows: ${(props) =>\n props.showStickyHeader ? '2rem 2.4375rem minmax(10rem, auto)' : '2rem minmax(10rem, auto)'};\n -ms-grid-columns: 1fr;\n grid-template-columns: 1fr;\n\n .content {\n -ms-grid-column: 1;\n grid-column-start: 1;\n -ms-grid-row: ${(props) => (props.showStickyHeader ? '3' : '2')};\n grid-row-start: ${(props) => (props.showStickyHeader ? '3' : '2')};\n }\n`;\n\n/**\n AppLayout\n* */\nfunction AppLayout({ showStickyHeader, children }) {\n const { integrationContext } = useIntegrationContext();\n\n // only show layout if rcore is top\n let showLayout = true;\n // this checks if we are in our own domain and also if we are top\n if (window.top !== window.self) {\n try {\n // If our parent contains rcore, then we are in an rcore iFrame\n // else we are in an external iFrame and the current window is the top frame\n if (window.parent.location.href.toLowerCase().includes('rcore')) {\n showLayout = false;\n }\n } catch {\n log.info('Parent location is external');\n }\n }\n\n const Grid = CheckIntegrationSetting(IntegrationMode.Teams, integrationContext.mode)\n ? LayoutGrid\n : IntegrationLayoutGrid;\n\n if (showLayout) {\n return (\n <>\n \n {children}\n \n \n );\n }\n\n const containerExists = window.self.document.getElementById('CoreIFrame') == null ? 0 : 1;\n const container =\n containerExists === 1\n ? window.self.document.getElementById('CoreIFrame')\n : window.top.document.getElementById('CoreIFrame');\n\n if (container != null) {\n if (window.location.href.toLowerCase().indexOf('/rcore/c/') > -1) {\n const url = window.location.href.replace(/\\/rcore\\/c\\//i, '/core/');\n const parsedUrl = queryString.parseUrl(url);\n if (!parsedUrl.query.rc) {\n parsedUrl.query.rc = 1;\n }\n window.location.href = queryString.stringifyUrl(parsedUrl);\n } else if (window.location.href.toLowerCase().indexOf('/rcore') > -1) {\n const parsedUrl = queryString.parseUrl(window.location.href);\n if (parsedUrl.query.rc) {\n delete parsedUrl.query.rc;\n }\n if (containerExists === 1) window.parent.location.href = queryString.stringifyUrl(parsedUrl);\n else window.top.location.href = queryString.stringifyUrl(parsedUrl);\n }\n }\n return
    ;\n}\n\nAppLayout.propTypes = {\n /**\n Flag to show static emulation strip above the page content.\n * */\n showStickyHeader: PropTypes.bool,\n /**\n Children elements\n * */\n children: PropTypes.node\n};\n\nAppLayout.defaultProps = {\n showStickyHeader: false,\n children: null\n};\n\nexport default AppLayout;\n","const setPageTitleWithBreadcrumbData = (breadCrumbList) => {\n if (breadCrumbList.length > 0) {\n let pageTitle = '';\n breadCrumbList.forEach((item, index) => {\n if (index === 0) pageTitle = item.title;\n else pageTitle = `${item.title} - ${pageTitle}`;\n });\n setPageTitle(pageTitle);\n }\n};\n\nconst setPageTitle = (title) => {\n if (title)\n document.title =\n window.staticData && window.staticData.tenantName && window.staticData.tenantName !== ''\n ? `${title} - ${window.staticData.tenantName}`\n : `${title} - SumTotal`;\n};\n\nexport { setPageTitleWithBreadcrumbData, setPageTitle };\n","import { useHistory } from 'react-router-dom';\nimport useUserContext from './useUserContext';\n\nconst useGoToHome = () => {\n const history = useHistory();\n const { user } = useUserContext();\n if (user.homePageUrl && user.homePageUrl !== '') {\n history.push(user.homePageUrl, { skipPrompt: true });\n }\n};\n\nexport default useGoToHome;\n","import { useContext } from 'react';\nimport HeaderContext from '../../contexts/HeaderContext';\n\nconst useHeaderContext = () => {\n const context = useContext(HeaderContext);\n if (!context) {\n throw new Error('useHeaderContext must be used within HeaderContextProvider!');\n }\n return context;\n};\n\nexport default useHeaderContext;\n","/* eslint no-bitwise: [\"error\", { \"allow\": [\"<<\", \"|\"] }] */\nconst IntegrationElement = {\n None: 0,\n HideTopBar: 1 << 0,\n HideControlPanel: 1 << 1,\n HideBreadCrumb: 1 << 2,\n HideHeader: 1 << 3,\n LinkRedirect: 1 << 4,\n ShowHomeButton: 1 << 5,\n HideMyActiviesHeader: 1 << 6,\n HideDefaultHomeLink: 1 << 7,\n RedirectToDetails: 1 << 8\n};\n\nconst IntegrationMode = {\n Teams:\n IntegrationElement.HideTopBar |\n IntegrationElement.HideControlPanel |\n IntegrationElement.HideBreadCrumb |\n IntegrationElement.HideHeader |\n IntegrationElement.LinkRedirect |\n IntegrationElement.ShowHomeButton |\n IntegrationElement.HideMyActiviesHeader |\n IntegrationElement.HideDefaultHomeLink |\n IntegrationElement.RedirectToDetails,\n Normal: IntegrationElement.None\n};\n\nexport { IntegrationMode, IntegrationElement };\n"],"sourceRoot":""}