{"version":3,"sources":["utils/integrationHelper.js","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/AuthComponent.jsx","authentication/AuthorizeRoute.jsx","authentication/Login.jsx","authentication/Logout.jsx","AppRoutes.jsx","analytics/webAnalyticsService.js","analytics/MyGuideTracker.jsx","analytics/instance.js","analytics/TrackingProvider.jsx","common/topnav/components/mobileAppMenuHeaderStyles.js","common/topnav/components/MobileAppMenuHeader.jsx","AppRouter.jsx","contexts/UserContextProvider.jsx","contexts/HeaderContextProvider.jsx","contexts/IntegrationContextProvider.jsx","App.jsx","index.jsx","contexts/ThemeContext.jsx","common/hooks/useIntegrationContext.js","utils/cookieHelper.js","utils/logger.js","authentication/AuthorizeService.js","theme/services/themeHelper.js","contexts/UserContext.jsx","contexts/SettingsContext.jsx","contexts/MessageContext.jsx","common/hooks/useBreadcrumbContext.js","contexts/BreadcrumbContext.jsx","contexts/HeaderContext.jsx","utils/clientStorage.js","contexts/IntegrationContext.jsx","config/apiRequestConfigHandler.js","config/apiResponseHandler.js","config/apiConfig.js","config/Config.jsx","modules/core/services/coreIFrameHelper.js","authentication/AuthorizationConstants.js","common/layout/components/AppLayout.jsx","common/hooks/useUserContext.js","theme/GlobalStyle.jsx","common/hooks/useMessageContext.js","modules/onePlace/activitiesAndTasks/activities/services/myActivitiesService.js","theme/ThemeContainer.jsx","modules/dashboards/components/templates/templateStyles.js","modules/learning/activityBuilder/state/reducers/index.js","theme/services/themeService.js","modules/configuration/activitiesAndTasks/services/activitiesAndTaskConfigurationService.js","contexts/BreadcrumbContextProvider.jsx","modules/core/components/CorePillarFrame.jsx","common/topnav/services/personService.js","state/reducers.js","state/store.js","modules/core/services/translationService.js","contexts/MessageContextProvider.jsx","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","modules/learning/activityBuilder/state/reducers/activityReducer.js","modules/learning/activityBuilder/state/reducers/errorsReducer.js","common/settings/services/settingService.js","contexts/SettingsContextProvider.jsx","common/hooks/useCustomNavigation.js","modules/learning/activityBuilder/state/actions/actionTypes.js","utils/pageHelper.js","common/hooks/useGoToHome.js","utils/IntegrationConstants.js","common/hooks/useHeaderContext.js"],"names":["CheckIntegrationSetting","integrationElement","integrationMode","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","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","navigate","useCustomNavigation","tenantKey","setTenantKey","Title","Description","JSON","parse","notificationMessage","description","displayActivityName","notificationKey","ActivityName","DueDate","macroData","formattedDate","Date","toLocaleDateString","culture","split","modifiedActivityName","coloredActivityName","Tooltip","arrow","isRead","time","userProfile","getUserProfile","tenant","updateInappNotificationsStatus","notificationId","isReadStatus","stopPropagation","personId","config","getNotificationConfig","axios","post","response","resp","updateInappNotificationsReadStatus","personPK","results","dot","handleCardActionAreaClick","notifData","updateReadStatus","ActivityId","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","handleFocusKey","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","_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","AuthComponent","authenticated","RouteComponent","rest","redirectUrl","useParams","toggleVisibility","Navigate","AuthorizeRoute","Component","constructor","super","this","ready","componentDidMount","subscription","subscribe","authenticationChanged","populateAuthenticationState","componentWillUnmount","unsubscribe","setState","isAuthenticated","render","link","createElement","returnUrl","protocol","Login","QueryParameterNames","ReturnUrl","_this$props","_objectWithoutProperties","_excluded","LoginContainer","getReturnUrl","fromQuery","URLSearchParams","origin","redirectToApiAuthorizationPath","apiAuthorizationPath","navigateToReturnUrl","message","LoginActions","login","LoginCallback","processLoginCallback","signIn","status","AuthenticationResultStatus","Redirect","Success","Fail","completeSignIn","isReady","LogoutActions","logout","LoggedOut","signOut","Home","lazy","CoreUI","ControlPanelConfigurationRoutes","GoalWorkspaceRoutes","ActivityAssignments","ToDoListConfiguration","ReportingRoutes","DLQExceptions","MyToDoList","AccessDeniedPage","UserManagement","OfferRoutes","AllApplicants","PensSettings","MicrosoftTeamsSettings","ZoomSettings","IntegrationSettings","AccreditationRoutes","LateCompletionsListRoutes","AchievementTemplateRoutes","MarketComparisonRoutes","CredlyConfiguration","AssignmentApprovalsRoutes","QuestionBankRoutes","InitiaivesSettings","DashboardManagerRoutes","DashboardRoutes","ActivityQrAttendanceReport","UserActivityQrCodeAttendanceDetails","contentConsumerLaunchSetting","ViltAttendanceSyncWizard","ActivityDetailsRoutes","AppRoutes","Routes","Route","element","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","MobileAppPageContainer","MobileAppHeader","MobileAppMenu","Img","handleLogOut","AppRouterComponent","navigationType","BrowserRouter","HashRouter","webAppLayout","userAuthStatus","AppLayout","showStickyHeader","CorePillarFrame","CoreMessageListener","SecurityQuestions","Suspense","fallback","mobileAppLayout","AppRouter","setUserAuthStatus","isNotMobileIntegRationMode","setIsMobileIntegRationMode","ShowMobileAppHeader","emulatorusername","propername","bootstrapApplication","basename","appPrefix","defaultUserContext","userReducer","answerSecurityQuestions","getAndRemoveLocalStorageItem","UserContextProvider","useReducer","UserContext","Provider","defaultHeaderContext","HeaderContextProvider","HeaderContext","IntegrationContextProvider","defaultIntegrationContext","getIntegrationMode","parsedUrl","parseUrl","im","top","IntegrationMode","Normal","Teams","Mobile","setIntegrationContext","IntegrationContext","App","store","SettingsContextProvider","ThemeContainer","LiveRegionContextProvider","MessageContextProvider","BreadcrumbContextProvider","configureServices","UserManager","signinSilentCallback","createRoot","createContext","RCORE_COOKIE","THEME_COOKIE","parseCookie","cookieName","delimiter","cookie","Cookies","keyValueMap","Map","pairs","pair","set","setCookieValue","v","k","join","getThemeCookieKeyValue","removeCookie","remove","loglevel","require","getLogLevel","localStorage","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","nameProjectionFunc","substr","group","getLessVariables","themeVarsObj","json","vars","evaluateLessVariables","themeVariablesString","entries","castLessVarsToJson","VariblesData","lighten","MessageContext","BreadcrumbContext","setItem","getItem","kvpConstants","kvp","removeLocalStorageItem","removeItem","requestHandler","request","defaults","baseURL","interceptors","exceptionMessage","reject","errorResponseHandler","accessToken","headers","getLMConfig","baseConfig","getUserSummaryConfig","getCoreConfig","getAssignmentConfig","getViltConfig","getVivaConfig","getPlatformConfig","getEMSIConfig","getReportConfig","getDLQConfig","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","LayoutGrid","IntegrationLayoutGrid","showLayout","_unused","info","Grid","containerExists","rc","stringifyUrl","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","StyledGridList","GridList","img","CardContainer","ListItem","InfoContainer","ClickableCard","TemplateHeader","StyledList","List","WidgetItem","StyledModal","Modal","DropDownField","ErrorMsg","ErrorMsgFlexGrid","FlexGrid","rootReducer","activityBuilder","activityReducer","activityBuilderErrors","errorsReducer","themeKey","reqObject","OverrideTheme","ThemeKey","saveActivitiesAndTaskConfigurations","getTranslationsForCard","cardId","saveTranslationsForCard","translatedProperty","defaultBreadcrumbContext","breadcrumbReducer","addBreadcrumb","removeBreadcrumb","IFrame","frameSource","setFrameSource","coreframe","getAttribute","coreUrl","currentUrl","frameBorder","allowFullScreen","UserSecurityQuestions","combineReducers","activityBuilderReducers","createStore","applyMiddleware","thunkMiddleware","getTranslationCategoryHash","refreshOutdatedTranslations","cachedHash","keysToUpdate","hashChanged","i18next","reloadResources","defaultMessageContext","text","severity","messageContext","setMessageContext","useGoToHome","parseJson","jsonString","setCurrentTheme","messageContextData","addRemoveBackdrop","backdropElements","classList","MessageHandler","match","safeOrigin","messageData","frameTitle","closeRCoreSlideout","themeVarsObject","previewTheme","clientFavIcon","isDeepLink","considerRcorePage","history","replaceState","mustSetSecurityQuestions","nextRoute","onDomainChange","isMarketComparisonRoute","internalSkillData","isIdentified","skipItem","validateMessageString","destinationType","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","saveSettingDefinition","getCoreSettings","allowCache","getSettings","useNavigate","FETCH_ACTIVITY_SECTION","breadCrumbList","pageTitle","setPageTitle","tenantName","None","HideHeader","LinkRedirect","HideMyActiviesHeader","HideDefaultHomeLink","RedirectToDetails"],"mappings":"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","file":"static/js/main.d227ce4a.chunk.js","sourcesContent":["/* 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 { 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 useCustomNavigation from '../../hooks/useCustomNavigation';\nimport { postMessage } from '../../../modules/core/services/coreIFrameHelper';\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 navigate = useCustomNavigation();\n const { t } = useTranslation(['TRANSLATIONS_RCORE_TOPNAV']);\n const [tenantKey, setTenantKey] = useState('');\n const { Title, Description } = JSON.parse(notificationData.notificationMessage);\n let description = [decodeHtmlEntities(Description)];\n let displayActivityName = '';\n if (notificationData.notificationKey === 'LearningActivityAssignmentNotif') {\n const { ActivityName, DueDate } = JSON.parse(notificationData.macroData);\n const formattedDate = DueDate ? new Date(DueDate).toLocaleDateString(user.culture) : undefined;\n description = description[0].replace(DueDate, formattedDate).split(ActivityName);\n const modifiedActivityName =\n ActivityName.length > 100 ? `${ActivityName.substring(0, 100)}...` : `${ActivityName}.`;\n const coloredActivityName = {modifiedActivityName};\n displayActivityName =\n ActivityName.length > 100 ? (\n \n {coloredActivityName}\n \n ) : (\n {coloredActivityName}\n );\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 = (notifData, updateReadStatus, event) => {\n event.stopPropagation();\n if (updateReadStatus) updateInappNotificationsStatus(notifData.notificationId, true);\n closeDrawer();\n switch (notifData.notificationKey) {\n case 'LearningActivityAssignmentNotif':\n // eslint-disable-next-line no-case-declarations\n const data = JSON.parse(notifData.macroData);\n // eslint-disable-next-line no-case-declarations\n let url = `/learning/core/activitydetails/ViewActivityDetails?ActivityId=${JSON.parse(\n // eslint-disable-next-line no-case-declarations\n data.ActivityId\n )}&UserMode=0`;\n url = `/c/pillarRedirect?relyingParty=LM&url=${encodeURIComponent(url)}`;\n navigate(url);\n break;\n case 'LearnerGamificationNotif':\n postMessage('OPEN_BADGES_AND_LEVELS');\n break;\n default:\n throw new Error(`Not handled notification'${notifData.notificationKey}'`);\n }\n };\n const dot = isRead ? (\n
\n ) : (\n \n );\n\n return (\n \n \n handleCardActionAreaClick(notificationData, !isRead, event)}\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 notificationKey: 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 document.addEventListener('keydown', handleFocusKey, false);\n container.contentWindow.document.addEventListener('click', handleClickOutside, false);\n container.contentWindow.document.addEventListener('keydown', handleFocusKey, false);\n if (pillarContainer) {\n pillarContainer.contentWindow.document.addEventListener('click', handleClickOutside, false);\n pillarContainer.contentWindow.document.addEventListener('keydown', handleFocusKey, false);\n }\n return () => {\n document.removeEventListener('click', handleClickOutside, false);\n document.removeEventListener('keydown', handleFocusKey, false);\n if (container.contentWindow.document) {\n container.contentWindow.document.removeEventListener('click', handleClickOutside, false);\n container.contentWindow.document.removeEventListener('keydown', handleFocusKey, false);\n }\n if (pillarContainer && pillarContainer.contentWindow) {\n pillarContainer.contentWindow.document.removeEventListener(\n 'click',\n handleClickOutside,\n false\n );\n pillarContainer.contentWindow.document.removeEventListener(\n 'keydown',\n handleFocusKey,\n false\n );\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 handleFocusKey = (event) => {\n // Close the Drawer when focus moves out of the drawer component\n if (\n event.key === 'Tab' &&\n openDrawer &&\n wrapperRef.current &&\n !wrapperRef.current.contains(event.target)\n ) {\n cleanup();\n }\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 { 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 }\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 }\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 useCustomNavigation from '../../hooks/useCustomNavigation';\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 navigate = useCustomNavigation();\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 navigate(\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 { useTranslation } from 'react-i18next';\nimport useCustomNavigation from '../../hooks/useCustomNavigation';\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 navigate = useCustomNavigation();\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 navigate(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 { useTranslation } from 'react-i18next';\nimport { ControlPanel, ControlPanelItem, RouteLink } from '@sumtotal/react-foundation';\nimport styled from 'styled-components';\nimport useCustomNavigation from '../../hooks/useCustomNavigation';\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 navigate = useCustomNavigation();\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 navigate(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 navigate(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\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 { useLocation } from 'react-router-dom';\nimport _ from 'lodash-es';\nimport useCustomNavigation from './common/hooks/useCustomNavigation';\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 navigate = useCustomNavigation();\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 navigate('/accessDenied');\n }\n }, [location.pathname, setHeaderContext, user, navigate]);\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-dom';\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","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useParams, Navigate } from 'react-router-dom';\nimport { toggleVisibility, postMessage } from '../modules/core/services/coreIFrameHelper';\n\nconst AuthComponent = ({ authenticated, location, RouteComponent, rest, redirectUrl }) => {\n const params = useParams();\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\nAuthComponent.propTypes = {\n /**\n * specifies, if the route is authenticated\n */\n authenticated: PropTypes.bool,\n /**\n * window location object\n */\n location: PropTypes.shape({\n pathname: PropTypes.string,\n assign: PropTypes.func\n }),\n /**\n * Component to be rendered\n */\n RouteComponent: PropTypes.shape({}),\n /**\n * path\n */\n rest: PropTypes.shape({\n path: PropTypes.string\n }),\n /**\n * redirect url, if the route is not authenticated\n */\n redirectUrl: PropTypes.string\n};\n\nAuthComponent.defaultProps = {\n authenticated: false,\n location: {\n pathname: '/',\n assign: () => {}\n },\n RouteComponent: undefined,\n rest: {\n path: '/'\n },\n redirectUrl: '/'\n};\n\nexport default AuthComponent;\n","import React, { Component } from 'react';\nimport { PageLoader } from '@sumtotal/react-foundation';\nimport PropTypes from 'prop-types';\nimport authService from './AuthorizeService';\nimport AuthComponent from './AuthComponent';\nimport { ApplicationPaths, QueryParameterNames } from './AuthorizationConstants';\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 );\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, Routes } 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'));\n\n// Commenting the activity builder route as we are retiring activity builder pages.\n/*\nconst ActivityBuilderRoutes = lazy(() =>\n import('./modules/learning/activityBuilder/components/ActivityBuilderRoutes')\n);\n*/\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'));\nconst DLQExceptions = lazy(() => import('./modules/deadletterqueue/components/DLQExceptions'));\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 UserActivityQrCodeAttendanceDetails = lazy(() =>\n import('./modules/learning/activityQrAttendance/components/UserActivityQrCodeAttendanceDetails')\n);\nconst contentConsumerLaunchSetting = lazy(() =>\n import('./modules/learning/contentIntegrationLaunchSettings/components/ContentConsumerSetting')\n);\nconst ViltAttendanceSyncWizard = lazy(() =>\n import('./modules/learning/vilt/attendanceSync/components/AttendanceSyncWizard')\n);\nconst ActivityDetailsRoutes = lazy(() =>\n import('./modules/learning/activityDetails/components/ActivityDetailsRoutes')\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 {/* Note - add * in the Route component path if the route contains child routes. */}\n {/* Note - For the AuthorizeRoute component path pass only the base route. */}\n } />\n }\n />\n } />\n {/* END - oidc-client SSO routes */}\n }\n />\n }\n />\n {/* \n Commenting the below route as we are retiring Activity Builder pages\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 />\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 />\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 styled from 'styled-components';\n\nexport const MobileAppPageContainer = styled.div`\n text-align: center;\n width: 100%;\n`;\n\nexport const MobileAppHeader = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 1rem 2rem 1rem 2rem;\n .logo-image {\n width: 9.8125rem;\n height: 1.530625rem;\n display: inline-block;\n }\n button {\n font-weight: 700;\n font-size: 0.75rem;\n line-height: 1.02125rem;\n padding: 0;\n margin: 0;\n margin-left: auto;\n text-transform: uppercase;\n }\n`;\n","import React, { useContext } from 'react';\nimport { Button, Icon } from '@sumtotal/react-foundation';\nimport { useTranslation } from 'react-i18next';\nimport Config from '../../../config/Config';\nimport CurrentThemeContext from '../../../contexts/ThemeContext';\nimport { MobileAppHeader, MobileAppPageContainer } from './mobileAppMenuHeaderStyles';\nimport { Img } from '../../../modules/dashboards/components/templates/templateStyles';\nimport { ApplicationPaths } from '../../../authentication/AuthorizationConstants';\nimport useCustomNavigation from '../../hooks/useCustomNavigation';\n\nconst MobileAppMenu = () => {\n const navigate = useCustomNavigation();\n const themeContext = useContext(CurrentThemeContext);\n const { t } = useTranslation(['TRANSLATIONS_RCORE_ACTIVITY_QR_CODE_ATTENDANCE']);\n const { logoData } = themeContext;\n const [previewLogoUrl] = logoData;\n\n let LogoSrc = `${Config.domain}//${Config.logo}`;\n if (previewLogoUrl && previewLogoUrl !== '') {\n LogoSrc = previewLogoUrl;\n }\n const handleLogOut = () => {\n navigate(ApplicationPaths.Logout);\n };\n\n return (\n <>\n \n \n {/* If required we will add new Mobile App header component on react-foundation as part of UI changes for that we had separate story */}\n {LogoSrc !== '' && }\n }\n >\n {t('RCORE_QR_CODE_ATTENDANCE_LOGOUT')}\n \n \n \n \n );\n};\n\nexport default MobileAppMenu;\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 MobileAppMenu from './common/topnav/components/MobileAppMenuHeader';\nimport CheckIntegrationSetting from './utils/integrationHelper';\nimport { IntegrationElement } from './utils/IntegrationConstants';\nimport useIntegrationContext from './common/hooks/useIntegrationContext';\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 // isNotMobileIntegRationMode used to set the Application layout for Web and Mobile browsers.\n const [isNotMobileIntegRationMode, setIsMobileIntegRationMode] = useState(true);\n\n const { integrationContext } = useIntegrationContext();\n\n // Set the Integration context mode.\n useEffect(() => {\n setIsMobileIntegRationMode(\n CheckIntegrationSetting(IntegrationElement.ShowMobileAppHeader, integrationContext.mode)\n );\n }, [integrationContext.mode]);\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 return (\n <>\n \n {isNotMobileIntegRationMode && webAppLayout(userAuthStatus)}\n {!isNotMobileIntegRationMode && mobileAppLayout(userAuthStatus)}\n \n \n );\n};\n\n// This function used to set the web application layout for rcore pages by defualt.\nfunction webAppLayout(userAuthStatus) {\n return (\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 }>\n \n \n
    \n
    \n \n );\n}\n\n// This function used to set the mobile app layout for mobile specific rcore pages.\nfunction mobileAppLayout(userAuthStatus) {\n return (\n \n {userAuthStatus.isAuthenticated && }\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.toLowerCase();\n const parsedUrl = queryString.parseUrl(url);\n\n // If app is not in an iFrame , disable integration mode or if the user accessed qr code deeplink on tablet / iPad browser then the app layout should be default web application layout.\n if (!parsedUrl.query.im || (window.top === window.self && parsedUrl.query.im !== 'mobile')) {\n return IntegrationMode.Normal;\n }\n\n switch (parsedUrl.query.im) {\n case 'teams':\n case '1':\n return IntegrationMode.Teams;\n case 'mobile':\n return IntegrationMode.Mobile;\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","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 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 { 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 // get Log Level\n const level = getLogLevel();\n // get the Logger object\n const log = loglevel.getLogger('rcore');\n // set the loglevel\n log.setLevel(level);\n return log;\n};\n\n/**\n * Get the Log Level\n * Usage: Import the getLogLevel & get the log level object [ var loglevel = getLogLevel();]\n */\nexport const getLogLevel = () => {\n // Loglevel set to 'ERROR' by default\n let level = 'ERROR';\n if (localStorage !== null && localStorage.length > 0) {\n level = getLocalStorageItem('loglevel:rcore') || 'ERROR';\n }\n return level;\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, { getLogLevel } from '../utils/logger';\n\nconst log = getLogger();\n\nconst populateOIDCLogLevel = () => {\n // Get Log Level\n const logLevel = getLogLevel();\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 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","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 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 { createContext } from 'react';\n\nconst IntegrationContext = createContext();\n\nexport default IntegrationContext;\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\nconst getDLQConfig = async () => {\n const baseConfig = await getConfig();\n const conf = {\n baseURL: `${config.domain}deadletterqueue/`,\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 getDLQConfig\n};\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 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 =\n CheckIntegrationSetting(IntegrationMode.Teams, integrationContext.mode) ||\n CheckIntegrationSetting(IntegrationMode.Mobile, 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","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 styled from 'styled-components';\nimport { GridList, List, ListItem, Modal, ComboBox, FlexGrid } from '@sumtotal/react-foundation';\n\n/* DashboardTemplates Styles */\nexport const HeaderSection = styled.div`\n margin-top: -1rem;\n padding-left: 1rem;\n padding-top: 2rem;\n padding-bottom: 0.55rem;\n -webkit-box-shadow: 0rem 0.75rem 0.375rem -0.1rem rgba(84, 84, 84, 0.07);\n -moz-box-shadow: 0rem 0.75rem 0.375rem -0.1rem rgba(84, 84, 84, 0.07);\n box-shadow: 0rem 0.75rem 0.375rem -0.1rem rgba(84, 84, 84, 0.07);\n`;\n\nexport const StyledGridList = styled(GridList)`\n display: flex;\n flex-wrap: wrap;\n margin: 0rem;\n padding-left: 3rem;\n`;\n\n/* DashboardTemplateCard Styles */\n\nexport const Img = styled.img`\n height: 16.938rem;\n width: 23.813rem;\n`;\n\nexport const CardContainer = styled(ListItem)`\n margin-left: 1rem;\n width: 23.813rem;\n display: block;\n padding-top: 1rem;\n`;\n\nexport const InfoContainer = styled.div`\n width: 23.813rem;\n height: 11.938rem;\n padding-left: 1rem;\n`;\n\nexport const ClickableCard = styled.div`\n height: 30rem;\n padding-top: 1rem;\n`;\n\nexport const TemplateHeader = styled.div`\n padding-left: 0.6rem;\n font-size: 1rem;\n font-weight: 700;\n line-height: 1.362rem;\n`;\n\nexport const StyledList = styled(List)`\n padding-top: 0.5rem;\n margin-left: -0.5rem;\n`;\n\nexport const WidgetItem = styled.span`\n padding-left: 0.3rem;\n`;\n\n/* AddDashboardModal Styles */\nexport const StyledModal = styled(Modal)`\n & .MuiDialog-paper {\n height: auto;\n max-height: 35rem;\n width: 43.5rem;\n }\n`;\n\nexport const DropDownField = styled(ComboBox)`\n width: 100%;\n`;\n\nexport const Description = styled.span`\n font-size: 0.875rem;\n`;\n\nexport const ErrorMsg = styled.span`\n font-weight: 400;\n font-size: 0.75rem;\n line-height: 1rem;\n`;\n\nexport const ErrorMsgFlexGrid = styled(FlexGrid)`\n padding-top: 0rem !important;\n padding-bottom: 0rem !important;\n margin-top: 0rem;\n`;\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 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","/* 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, { 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","import React, { useEffect, useState, useRef } from 'react';\nimport styled from 'styled-components';\nimport { useLocation } from 'react-router-dom';\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 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 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 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 queryString from 'query-string';\nimport useCustomNavigation from '../../../common/hooks/useCustomNavigation';\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 navigate = useCustomNavigation();\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 navigate(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 navigate(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 { useLocation } from 'react-router-dom';\nimport useCustomNavigation from '../../../common/hooks/useCustomNavigation';\nimport useUserContext from '../../../common/hooks/useUserContext';\n\nconst SecurityQuestions = () => {\n const { user } = useUserContext();\n const navigate = useCustomNavigation();\n const location = useLocation();\n\n if (\n location.pathname !== '/' &&\n !location.pathname.startsWith('/c/') &&\n user.mustAnswerSecurityQuestions\n ) {\n navigate(\n '/c/usersecurityquestion?relyingParty=ELIXHRUI&nodeKey=self_questions&nodeUrl=/usersecurityquestion'\n );\n }\n return null;\n};\n\nexport default SecurityQuestions;\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 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 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","import { useCallback } from 'react';\nimport { useNavigate } from 'react-router-dom';\n\nconst useCustomNavigation = () => {\n const navigate = useNavigate();\n const performNavigation = useCallback(\n (to, options) => {\n if (typeof to === 'number') navigate(to);\n else navigate(to, options);\n },\n [navigate]\n );\n\n return performNavigation;\n};\n\nexport default useCustomNavigation;\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","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 { useEffect } from 'react';\nimport useCustomNavigation from './useCustomNavigation';\nimport useUserContext from './useUserContext';\n\nconst useGoToHome = () => {\n const navigate = useCustomNavigation();\n const { user } = useUserContext();\n useEffect(() => {\n if (user.homePageUrl && user.homePageUrl !== '') {\n navigate(user.homePageUrl);\n }\n }, [user.homePageUrl, navigate]);\n};\n\nexport default useGoToHome;\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 ShowMobileAppHeader: 1 << 9\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 Mobile:\n IntegrationElement.HideTopBar |\n IntegrationElement.HideControlPanel |\n IntegrationElement.HideBreadCrumb |\n IntegrationElement.HideHeader |\n IntegrationElement.LinkRedirect |\n IntegrationElement.HideMyActiviesHeader |\n IntegrationElement.HideDefaultHomeLink |\n IntegrationElement.RedirectToDetails |\n IntegrationElement.ShowMobileAppHeader,\n Normal: IntegrationElement.None\n};\n\nexport { IntegrationMode, IntegrationElement };\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"],"sourceRoot":""}