{"version":3,"sources":["lang/lang.ts","redux/domain/config.ts","utils/urls.tsx","redux/ui/toasts.ts","redux/ui/fundsList.ts","redux/ui/search.ts","utils/app.ts","redux/domain/auth.ts","utils/formats.ts","redux/ui/survey.ts","redux/domain/assetManagers.ts","redux/ui/app.ts","utils/survey.ts","redux/ui/assetManagerDetails.ts","utils/routing.tsx","redux/domain/funds/search.ts","utils/config.ts","redux/ui/comparisonModal.ts","redux/ui/premium.ts","redux/ui/fundCharts.ts","redux/ui/fundDetails.ts","redux/ui/fundsTable.ts","utils/funds.ts","redux/domain/survey.ts","redux/domain/conferences.ts","redux/domain/route.ts","redux/ui/register.ts","redux/ui/assetManagerCharts.ts","redux/domain/contact.ts","redux/domain/funds/filterSearch.ts","redux/domain/funds/aif.ts","utils/charts.ts","redux/domain/funds/watchlist.ts","redux/ui/news.ts","redux/domain/assetManagersCharts.ts","redux/domain/charts.ts","redux/ui/fundDocumentsModal.ts","redux/ui/assetManagerNewsModal.ts","redux/ui/conferenceDetails.ts","withBreadcrumbs.tsx","components/common/appBreadcrumbs.tsx","redux/domain/filters.ts","redux/domain/premium.ts","redux/ui/conferencesList.ts","redux/ui/home.ts","utils/styles.ts","redux/ui/login.ts","redux/domain/funds/common.ts","redux/domain/index.ts","redux/ui/index.ts","redux/ui/watchlist.ts","redux/ui/contactForm.ts","redux/index.ts","utils/sxAuth.ts","redux/ui/fundsInFocus.ts","redux/ui/purchaseModal.ts","redux/domain/news.ts","redux/domain/funds/details.ts","redux/domain/savedSearches.ts","redux/ui/savedSearches.ts","redux/domain/funds/fundsPremium.ts","redux/domain/home.ts","redux/ui/reports.ts","redux/domain/licenses.ts","redux/domain/reports.ts","redux/ui/header.ts","redux/ui/aifBenchmarksModal.ts","redux/domain/funds/fundDocuments.ts","redux/ui/reportDetails.ts","redux/ui/assetManagerList.ts","redux/domain/funds/fundsInFocus.ts","redux/domain/funds/ratingInFocus.ts","redux/ui/fundPhotoModal.ts","redux/ui/uploadArticle89Modal.ts","redux/ui/resetPassword.ts","redux/ui/conferenceInfoModal.ts","utils/assetManagers.ts","components/common/appLink.tsx","redux/ui/requestResetPassword.ts","redux/ui/portfolioManagerModal.ts","redux/ui/invoiceModal.ts","components/funds/aifFunds/config.ts","components/common/loadingIndicator.tsx","redux/ui/assetManagerDashboard.ts","redux/ui/conferenceModal.ts","redux/ui/confirmModal.ts","components/assetManagers/assetManagerDashboard/profile/config.ts","redux/ui/aifBenchmarks.ts","redux/ui/esgSurveyInfoModal.ts","redux/ui/surveySubmissionModal.ts","redux/ui/removeFundKeyFactsModal.ts","redux/ui/performanceModal.ts","index.tsx"],"names":["lang","LocalizedStrings","de","app","help","save","confirm","cancel","edit","remove","link","yes","no","uploadText1","uploadText2","uploadText3","and","dataFor","new","expandAll","collapseAll","routes","home","reset","unsubscribe","fundsInFocus","ratingInFocus","watchlist","news","newsDetails","reports","reportsDetails","oif","oifDetails","searchResults","filterSearchResults","advSearchResults","details","premium","methodology","methodologies","legalNotice","privacyPolicy","contact","savedSearches","rechtlicheHinweise","termsOfUse","termsAndConditions","conferencesListLoading","conferencesList","conferencesList2","conferenceDetails","assetManagerDashboard","fundRatings","teamRating","profileEdit","assetManagerStats","assetManagerConferences","surveyEquityFund","surveySovereignBondFund","surveyCorporateBondFund","surveyAggregateBondFund","surveyMultiAssetFund","surveyEsgCompany","surveyEsgFund","dekaSurvey","assetManagerDetails","assetManagers","assetManagerNews","editFund","userProfile","benchmarks","aifPage","wholesale","selectSurvey","scopeAwards","scopeInvestmentAwards","scopeAlternativeInvestmentAwards","scopeCertificateAwards","scopeAwardsCategories","scopeAwardsNominees","scopeAwardsWinners","nominationAltInvestmentRequirements","nominationInvestmentRequirements","nominationCertificateRequirements","portrait","meta","homeDesc","searchResultsDesc","fundsInFocusDesc","methodologyDesc","methodologiesDesc","privacy","newsDesc","scopeExplorer","notFound","fundDetails","fundDetailsDesc","assetManagerCharts","allMyProductsChart","myTop10FundsChart","myProductsInPeergroupChart","top10FundsInSeChart","top10PeergroupsInSeChart","listTitle","title","profile","profileSubtitle","subtitle","address_1","address_2","email","phone","founded","linkText","description_short","description","descriptionFixedQuestion","descriptionFixedText","list","employees","dateFrom","dateTo","topCompanyFunds","contactAssetManagerSuccess","contactAssetManagerError","investmentFocus","investmentRegion","volume","aum","companySize","scopeEvalutaion","scopeFundRating","topRated","esg","investorRating","amTeams","from","macroOverview","macroOverviewOf","selectedFunds","statistics","statisticsSubtitle","conferences","conferences2","moreStatistics","add","apply","selection","funds","text1","text2","requestSuccess","fields","image","language","pdfFile","first_name","last_name","position","department","summary","errors","default","400","401","fillInFields","newsSuccess","newsRemoved","portfolioManagerSuccess","portfolioManagerRemoved","documentSuccess","documentRemoved","fundSuccess","noDocuments","selectedFundsSuccess","success","docCategories","factsheet","macroOverviewOptions","veryNegative","negative","neutral","positive","veryPositive","volumeTooltip","investorRatingTooltip","investorRatingRequest","status","conferenceStatuses","pending","accepted","rejected","registerForConferenceSuccess","requestConferenceSuccess","requestError","macroOverviewDate","unsubscribedFromConference","assetManagerShareClassesTable","accordionButton","shareClass","isin","ogc","minInvestment","currency","header1","text3","header2","header3","text4","header4","text5","text6","header5","text7","header6","text8","text9","text10","retail","assetManager","subtitle2","esgQuestionnaire","esgQuestionnaires","esgFundQuestionnaire","esgCompanyQuestionnaire","dvmEsgQuestionnaire","downladQuestionnaires","downloadAMSummary","uploadMarkedAsArticle89","downloadEsgFundSummary","downloadEsgCompanySummary","footerText1","footerText2","dvmDescription","esgSurvey","filename","esgSurveyInfoModal","button1","button2","uploadArticle89Modal","newArticle89Uploaded","removeFundKeyFactsModal","eventsCaldendar","conferenceInfoModal","assetManagerInfoModal","listTitle2","listSubtitle","pastEventsTitle","pastEventsSubtitle","webinare","live","files","speakers","date","startTime","endTime","info","moreInfo2","additionalInfo","register","editSuccess","signOutConfirmText","signOutButtonText","furtherConferenceText1","furtherConferenceText2","furtherConferenceText3","furtherConferenceText4","conferencesFormModalTitle","addConference","goTo","addSuccess","addError","removeSuccess","removeError","overview","strategy","rating","category","team","reportDownload","requestTeamRating","name","cookieInfo","text","understand","menu","login","publications","logout","logoutSuccess","companies","services","aif","survey","scopeAwardsDetails","nominationInvestmentsRequirements","footer","copyright","Date","getFullYear","scopeAnalysis","validation","required","passwordsMatch","containLetter","uppercaseLetter","lowercaseLetter","containNumber","specialCharacter","maxValuePart1","maxValuePart2","minValuePart1","minValuePart2","uploadFile","of","return","header","noAccount","haveAccount","or","signIn","close","password","forgotPassword","logIn","loginWithFacebook","loginWithGoogle","logInHere","remember","repeatPassword","newPassword","signUp","registration","wholesaleRegistration","retailUsers","wholesaleUsers","accountType","firstName","lastName","companyName","unit","phoneNumber","videoTitle","homeBoxTitle1","homeBoxTitle2","homeBoxTitle3","homeBoxTitle4","homeBoxTitle5","homeBoxTitle6","homeBoxContent4","homeBoxContent5","homeBoxContent6","more","moreScopeAward","moreStudien","moreRatings","moreFacts","moreNews","homeNewsTitle","scopeAwardWinnersText","scopeAwardsNomineesText","search","subheader","placeholder","advancedSearch","simpleSearch","searchBox1","searchBox2","searchBox3","selectedItems","searchTitle1","searchText11","searchText12","searchTitle2","searchText21","searchText22","searchTitle3","searchText31","searchText32","selected","scopePeergroup","company","fundSize","universe","scopeRating","uncheckAll","fundsSelected","saveCustomFields","saveSearch","mainTranche","resetFormFilters","resetFormAutocomplete","filterSearch","step","step1","step2","step3","low","medium","high","found","northAmerica","europe","asia","emergingMarkets","germany","world","applyAgain","advancedFundsList","pleaseSelectFund","columnSelection","prev","next","requestRating","exportSelected","exportAll","downloadXls","selectFunds","selectFundsToCompare","selectFundsToRequest","selectFundsToExport","selectMax3Funds","peergroup","fundSelection","scopeRecommendation","requestCustomizedSolution","requestFullList","gid","checkYourFund","requestEsgPortfolioCheck","requestEsgTeamRating","sendRequest","recommendedListTooltip","esgTooltip","environment","social","governance","active","passive","fundSearch","fundSearchText","exclusion","exclusionShort","noSearchResults","contactUs","subscribeListSuccess","unsubscribeListSuccess","subscribeListError","aifBenchmarks","property_portfolio_short","sustainability_short","financial_structure_short","asset_management_short","fund_management_short","rating_total_short","property_portfolio","sustainability","financial_structure","asset_management","fund_management","rating_total","rating_total_2","ter","net_volume","real_volume","objects_number","liquidity_ratio","credit_ratio","geographical_german","geographical_european","geographical_non_european","sectoral_office","sectoral_retail","sectoral_living","sectoral_hotel","sectoral_logistics","performance_1y","performance_5y","volatility_5y","occupancy","rating_esg","wault","aifFunds","excellent","veryGood","good","balanced","modest","veryModest","poor","likelyCapitalLost","substantialCapitalLost","negativeTurn","benchmarksSubtitle","scopeCardParameters","yourParameters","exportToExcel","addParameters","modalStep1","modalStep2","selectAll","submit","sectoralAllocation","geographicalAllocation","sectoralOffice","sectoralRetail","sectoralLiving","sectoralHotel","sectoralLogistics","geographicalGerman","geographicalEuropean","geographicalNonEuropean","others","moreInformation","selectYourProduct","pleaseChoose","buy","bannerText","signUpText","paidDocuments","documents","views","clicks","registerNow","invoiceModal","payOnline","downloadInvoice","purchaseModal","yourOrder","selectedLicense","totalPrice","agreement1","agreement2","agreement3","selectProduct","billingAddress","street","postalCode","city","taxId","contactPerson","purchase","purchaseError","fundFields","logo","wkn","tranche","position_vs_peergroup","tranche_currency","primary","volume_currency","initialCharge","accumulating","firstRating","perf_1m","perf_3m","perf_6m","perf_1y","perf_3y","perf_5y","perf_since_inception","perf_last_year","volatility_3y","initial_charge","srri","rating_unchanged_since","prob_loss_month_3y","prob_profit_month_3y","max_loss_3y","max_profit_3y","rank","rating_points","risk_class","fee","return_fee","min_investment","issue_date","value_at_risk_3y","is_award_nominated","is_focus","is_selection","compareFunds","currentFund","compare","selectFundToCompare","fund","amDocuments","winners","nominee","dataFrom","ratingFrom","fundName","nav","photo","terTooltip","sfdr","sfdrTooltip","srriTooltip","srriTooltip2","price","positionInPeergroup","positionInRanking","positionInTheRanking","top","rankInPeergroup","performance","performancePercent","performanceRisk","performance_3y_long","fundPerformance","peergroupAverage","ratingHistory","ratingTooltip","aifRatingTooltip","fundRank","fundRating","fundRatingTooltip","fundPoints","risk","costBar","riskTooltip","riskPercent","volatility","volatilityPercent","fundRisk","safety","performanceRiskChart","riskClassification","maxLoss","moreInfo","back","ongoingCharge","ongoingChargeTooltip","performanceFee","fundFacts","manager","launchDate","quantitativeLabel","qualitativeLabel","quantitativeTooltip","qualitativeTooltip","period","returnInPeriod","noRatingAvailable","performance_3y","performance_10y","performance_since_inception","performance_current_year","max_drawdown_crash","crashDrawdownChart","crashDrawdownSubtitle","crashDrawdownTooltip","market","marketLong","max_drawdown_1y","max_drawdown_3y","max_drawdown_5y","max_drawdown_since_inception","volatility_1y","volatility_since_inception","volumeUnit","volumeUnitShort","ratingPoints","ratingPointsShort","ratingPointsTooltip","fundsInPeerGroup","topFundsTitle","topFundsSubtitle","ratingInFocusSubtitle","requestTeamRatingText","driver","content","newsSubtitle","readMore","proceedToPayment","noResults","fundNotFound","average","belowAverage","belowAverage2","legend","veryLow","mid","veryHigh","rowsPerPage","monthly_report","key_information","key_investor","fund_prospect","annual_report","semi_annual_report","fundBars","fundBarsTooltips","cost","investmentProcess","value","noInformation","showMoreDetails","hideMoreDetails","avg","print","watchlistSubtitle","watchlistTitle","watchlistAdded","watchlistRemoved","watchlistAddError","watchlistDeleteError","noWatchlist","actualRating","prevRating","upgrade","downgrade","same","showAvg","hideAvg","general","custom","costs","valueLong","scopeRanking","noRatingInfo","noRatingInfoShort","noFundBarsInfo","request","award","focus","theme","requestQualitativeRating","fundRequestSent","teamRequestSent","anonymous","noContent","requestInfo","compareWithPeergroup","worse","equal","better","pts","all","equity","multiasset","fixedIncome","other","ratio","ratioTooltip","ratioDesc","trancheRatingTooltip","institutional","recordDateText","recordDate1","recordDate2","recordDate3","fundsListHint","recordDate","professionalInfo","noRatingDriver","winnerLabel","winnerTooltip","upload","viewFunds","success_dependent_compensation","debt_ratio","currency2","rental_ratio","ratingScore","ratingJustification","ratingDriver","deleteDocumentConfirm","deleteNewsConfirm","deletePMConfirm","fundReport","fundCharts","showAll","hideAll","show","showRating","hide","year_1","year_3","year_5","export","numberOfFunds","ratingClasses","points","interpretation","noData","noChartData","performanceChart","index","indexPerformance","peergroupPerformance","peergroupComparisonChart","highchartTitle","highchartSubtitle","bestFundPerformance","worstFundPerformance","bestFund","worstFund","fundRatingChart","privateText","distributionChart","riskIndicator","performanceIndicator","bad","fundsInPeergroup","riskReturnChart","perf","fundVolatility","indexVolatility","peergroupVolatility","financialCrisis","creditCrisis","recessionFears","tradeConflicts","covid19","ukraineCrisis","classDistributionChart","evolutionOfRiskChart","bestFunds","bestFundRisk","worstFundRisk","message","send","error","managingDirectors","headquartersBerlin","frankfurtOffice","purposeOfPolicy","website","thisPrivacyPolicy","personalDataMeans","thisPolicySetsOut","pleaseReadTheFollowing","theProvisionsSetOut","forMoreInformation","whichData","theTypeOfData","clientsAndSubscribers","theDataController","nameAndSurname","emailAddress","telephoneNumber","companyAndBusiness","gender","websiteUsers","theDataControllersWebsite","whyScopeAnalysis","theCollectionOfPersonal","asAnExample","provideRegular","performAThorough","providingTechnical","sendClientsRelevant","dealWithClients","howScopeAnalysis","weCollectPerseonal","directlyFromTheData","fromThirdParties","fromTheDataController","whateverMethodIsUsed","howScopeAnalysisHandles","thePersonalDataCollected","minimization","onlyThosePersonal","integrity","theInformationCollected","limitedStorage","theDataControllerWill","security","theDataControllerIsCommited","transferability","whilePerforming","theDataControllerIsCommitedTo","theDataControllerIsAlso","theDataControllerOperates","confidentiality","theDataControllerIsCommitedToKeep","toEnsurePersonalData","personalDataAreHandled","theProcessingAndHandling","personalDataProcessing","scopeEmployees","inCaseABreach","specifically","theDPOMustBe","theDPOWillTakeCare","theDPOWillNotify","theDataControllerIsAlsoCommited","useOfCookies","theDataControllerUsesCookies","belowIsTheList","cookieName","function","_ga","_gat","_gid","socialMedia","scopeAnalysisWebsiteUses","whenYouClick","forMoreDetails","forTwitter","twitterPlugins","twitterPolicy","forLinkedIn","linkedInPlugins","linkedInPolicy","forBloomberg","bloombergPolicy","dataSubjectsRights","althoughSome","rightToAccess","dataSubjectsHaveTheRight","rightOfRevocation","atAnyTime","rightOfErasure","dataSubjectsHaveTheRightTo","rightOfDataPortability","peresonalDataCanBeTransferred","rightOfComplain","dataSubjectsHaveTheRightToObject","theDataControllerIsCommitedToKeepThePersonal","updateOfThePolicy","theDataControllerIsCommitedToPeriodically","forFutherInformation","additionalContacts","dataProtectionOfficer","dataController","managingDirector","commercialRegister","supervisoryAuthority","responsibleForTheContent","disputeSettlement","theEuropeanCommision","weAreNotWilling","disclaimer","allInformation","theLaws","ifTheClient","copyrightContent","scopeFundsRating","introduction","introductionText1","introductionText2","introductionText3","introductionText4","introductionText5","methodologyText1","methodologyText2","methodologyText3","methodologyText4","methodologyText5","methodologyText6","methodologyText7","methodologyText8","ratingProcess","ratingProcessText1","ratingProcessText2","ratingProcessLabel1","ratingProcessLabel2","ratingProcessLabel3","ratingProcessLabel4","ratingProcessLabel5","ratingProcessLabel6","ratingProcessLabel7","ratingProcessLabel8","ratingClassesText1","ratingClassesText2","ratingClassesText3","investmentTeamRating","intro","introText1","introText2","ratingProcess2","ratingProcess2Text1","ratingProcess2Text2","amr","ratingProcess2Text3","ratingProcess2Text4","ratingProcess2Text5","investmentProfessionals","investmentProfessionalsText1","investmentAndResearch","investmentAndResearchText1","marketAndPerformance","marketAndPerformanceText1","further","furtherText1","furtherText2","furtherText3","ratincScale","mutualFunds","realEstateFunds","closeEndFunds","amAndIssuersOfCert","previous","document","video","podcast","newsNotFound","noMachingNews","download","reportsNotFound","aifText1","aifText2","aifText3","link3","link3Text","link4","link4Text","404","409","500","finishRegistration","iam","sector","additinalSectorQuestion","division","registerSuccess","retailText1","retailText2","wholesaleText1","wholesaleText2","resetPassword","requestDefault","fundsListModal","subtitle1","subtitle3","subtitle4","subtitle5","listItem1","listItem2","listItem3","listItem4","listItem5","listItem6","ignore","dontShow","section1Title","section1Text","section2Title","section2Text1","section2Text4","section2Text5","section3Title","section3Text1","section3List1","section3List2","section3List3","section3Text2","section4Title","section4Text1","section4Text2","section4List1","section4List2","section4List3","section4List4","section4List5","section4List6","section4List7","section4List8","section4List9","section4Text3","section5Title","section5Text1","section5Text2","section5Text3","section5Text4","section5Text5","section5Text6","section5List1","section5List2","section5List3","section5List4","section5Text7","section5Text8","section5Text9","section5Text10","section5List5","section5List6","section5List7","section5List8","section5Text11","section5Text12","section5Text13","section5Text14","section5Text15","section5Text16","section5Link1","section5Text17","section5Link2","section5Text18","section5Link3","section5Text19","section5Text20","section5Text21","section5Text22a","section5Text22b","section5Text22c","section5Text22d","section5Text23","section6Title","section6Text1","section6Text2","section6Text3","section6Text4","section6Text5","section6Text6","section6Text7","section6Text8","section7Title","section7Text1","section7Text2","section7Text3","section7Link1","section7Text4","section7Text5","section7Text6","section7Link2","section7Text7","section7Link3","section8Title","section8Text1","section8List1","section8List2","section8Text2","section8List3","section8List4","section8List5","section8List6","section8Text3","section8Text4","section9Title","section9Text1","section9Text2","section9List1","section9List2","section9List3","section9List4","section9List5","section9Text3","section9Text4","section10Title","section10Text1","section10Text2","section10List1","section10List2","section10List3","section10List4","section11Title","section11Text1","section11Text2","section11List1","section11List2","section11List3","section11List4","section11Text3","section12Title","section12Text1","section12Text2","section12List1","section12List2","section13Title","section13Text1","section13Text2","section13Text3","section13Text4","section14Title","section14Text1","section15Title","section15Text1","section15List1","section15List2","section15List3","section15List4","section15List5","section15Text2","section16Title","section16Text1","section17Title","section17Text1","section17Text2","section17Text3","section17Text4","section17Text5","section17Text6","section17Text7","section1Text1","section1Text2","section1Text3","section1Text4","section1Text5","section1Text6","section1Text7","section1Text8","section1Text9","section1Text10","section2Text2","section2Text3","section3Text3","section3Text4","section3Text5","section3Text6","section4Text4","section4Text5","section4Text6","section10Text3","section10Text4","section10Text5","section10Text6","section10Text7","section10Text8","investmentAwards","alternativeInvestmentAwards","certificateAwards","findOutMore","scopeAward","scopeAwardText1","scopeAwardText2","scopeAwardText3","scopeAwardText4","scopeAwardText5","scopeAwardText6","awardSculpture","awardSculptureText1","awardSculptureText2","awardSculptureText3","awardSculptureText4","awardSculptureText5","awardSculptureText6","saveTheDate","saveTheDateHost","nominees","nomineesTextTooltip","videoBannerText","winner","winner2","winnerMoreBtn","winnerText","nominationAltInvestmentRequirementsText","categories","assetManagersFunds","categoriesInvestment","categoriesAlternativeInvestment","categoriesCertificate","showLess","mediaPartner","country","austria","switzerland","awards2022","subtitleAlternative","subtitleCertificate","investment","categoriesText","categoriesSubItem1","categoriesSubItem2","nomineesText","winnersText1","winnersText2","alternativeInvestment","categoriesSubItem3","categoriesSubItem4","certificate","requirements","awards2023","awards2024","nomineesInfo","winnersInfo","awards2025","categoriesSubItem5","categoriesSubItem6","categoriesSubItem7","institutionalRealEstate","retailRealEstate","realEstate","alternativeInvestments","specialAward","bestFundEquitiesGermany","bestEquitiesEurope","bestFundEquitiesNorthAmerica","bestFundEquitiesJapan","bestFundEquitiesGlobal","bestFundEquitiesEmergingMarkets","bestFundBalancedGlobalFlexible","bestFundBalancedGlobalDynamic","bestFundBalancedGlobalConservative","bestFundInnovations","innovationsDisclaimer","completeProductRangeIssuer","bestAmCompleteProductRanges","bestAmCompleteProductRange","bestAmBoutiques","bestAmBoutique","bestAmExchangeTradeFunds","bestAmEsgCompleteProductRanges","bestAmEsgBoutiques","bestAmEquities","bestAmEsgEquities","bestAmThematicFunds","bestAmBonds","bestAmEsgCompleteProductRange","bestAmEsgBoutique","bestFundBondsGlobalCurrency","bestFundBondsEur","bestFundBondsEurCorpHighYield","bestFundBondsUsdCorpHighYield","bestFundBondsGlobalCorpHighYield","bestBalancedGlobalBalanced","bestFundBondsEmergingMarketsHardCurrency","bestAmEsgFixedIncome","bestAmMultiStrategy","bestAmEquitiesEmergingMarkets","bestAmMultiAsset","bestAmEmergingMarketsBonds","bestAmEmergingMarketsEquities","bestAmConvertibleBonds","bestAmDividendEquities","bestAmEtf","bestAmSmallCaps","equitiesGermany","equitiesEurope","equitiesNorthAmerica","equitiesGlobal","equitiesThematicFunds","esgFunds","esgImpactFunds","equitiesEmergingMarkets","bondsEUR","bondsEURCorp","bondsUsCorp","bondsEmergingMarkets","bondsGlobalCurrency","balancedGlobalFlexible","fundInnovations","institutionalReGlobal","institutionalReEurope","institutionalReGermany","institutionalReResidential","institutionalReSpecialist","retailReGlobal","realEstateGlobal","retailReEurope","retailReGermany","retailReResidential","retailReSpecialist","realEstateSpecialist","realEstateLogistics","realEstateEssentialRetail","esgInfrastructure","esgRealEstate","esgCommercialRealEstate","esgResidentialRealEstate","privateDebt","privateEquity","infrastructureDebt","infrastructureEquity","infrastructureEquityRenewableEnergy","transportation","eltif","eltifPrivateMarketsPe","eltifPrivateMarketsPd","eltifPrivateMarketsInfrastructure","eltifPrivateMarketsMixed","eltifPrivateMarketsDiversified","innovation","innovationRealAssets","innovationAif","primaryMarket","secondaryMarket","trading","specialMentionFundInnovations","rentenUsCorpHighYield","commodity","balancedGlobalConservative","degussaBank","hanetfFundSpectrum","unionInvestment","investmentManagement","operationalAssetManagement","trackRecord","transparency","section3ButtonText","file","section2List1","section2List2","section2List3","section2List4","section2List5","section2List6","subscriptionRating","en","editProfile","section5Text22","API_URL","getReqOptions","Accept","withCredentials","chartsUrls","comparisonChart","getStatisticsHeader","state","domain","route","fundEntranceSrc","HOME","reg","breadcrumb","CONFIRM","RESET","UNSUBSCRIBE","FUNDS_IN_FOCUS","RATING_IN_FOCUS","WATCHLIST","NEWS","NEWS_DETAILS","NEWS_DETAILS_SHORT","REPORTS","REPORTS_DETAILS","REPORTS_DETAILS_SHORT","OIF","OIF_DETAILS","OIF_DETAILS_SHORT","SEARCH_RESULTS","FILTER_SEARCH_RESULTS","ADV_SEARCH_RESULTS","DETAILS","PREMIUM","METHODOLOGY","METHODOLOGIES","LEGAL_NOTICE","PRIVACY_POLICY","CONTACT","SAVED_SEARCHES","RECHTLICHE_HINWEISE","TERMS_OF_USE","TERMS_AND_CONDITIONS","NOT_FOUND","CONFERENCES_LIST_LOADING","CONFERENCES_LIST","CONFERENCES_LIST_2","CONFERENCE_DETAILS","ASSET_MANAGER_DASHBOARD","FUND_RATINGS","TEAM_RATING","PROFILE_EDIT","ASSET_MANAGER_STATS","ASSET_MANAGER_CONFERENCES","SELECT_SURVEY","SURVEY_ESG_COMPANY","SURVEY_ESG_FUND","SURVEY_EQUITY_FUND","SURVEY_SOVEREIGN_BOND_FUND","SURVEY_CORPORATE_BOND_FUND","SURVEY_AGGREGATE_BOND_FUND","SURVEY_MULTI_ASSET_FUND","DEKA_SURVEY","ASSET_MANAGER_DETAILS","ASSET_MANAGERS","ASSET_MANAGER_NEWS","EDIT_FUND","USER_PROFILE","BENCHMARKS","AIF_PAGE","WHOLESALE_LANDING_PAGE","SCOPE_AWARDS","SCOPE_INVESTMENT_AWARDS","SCOPE_ALTERNATIVE_INVESTMENT_AWARDS","SCOPE_CERTIFICATE_AWARDS","SCOPE_AWARDS_CATEGORIES","SCOPE_AWARDS_NOMINEES","SCOPE_AWARDS_WINNERS","NOMINATION_REQUIREMENTS","NOMINATION_INVESTMENT_REQUIREMENTS","NOMINATION_CERTIFICATE_REQUIREMENTS","PORTRAIT","id","createErrorToast","colors","white","color","red2","createSuccessToast","green2","addErrorToast","type","payload","toast","addSuccessToast","removeToast","filter","setFundsLoading","setFundsListActiveTab","setAdvancedFundsList","setFilterFundsList","setPerfPeriod","setFilterSearchPerfPeriod","setSelectedFundPerfPeriod","setDocumentsVisibility","setDocuments","setAifDocument","setRatingHistoryVisibility","setPerformanceVisibility","setSelectedFundLast","setFUndsListModalVisibility","setExportDropdownVisibility","setExportLoading","setExportLink","isLoading","isAdvancedFundsList","isFilterFundsList","fundsListActiveTab","perfPeriod","filterSearchPerfPeriod","selectedFundPerfPeriod","isDocumentsVisible","aifDocument","isRatingHistoryVisible","isPerformanceVisible","isSelectedFundLast","isFundsListModalVisible","isExportDropdownVisible","isExportLoading","exportLink","setAutocompleteValue","setAutocompleteVisibility","setSearchLoading","setAdvancedSearch","setFilterSearch","setResetting","setFilterSearchTab","setFilterSearchCountLoading","setFiltersLoading","setNextSearch","replace","autocompleteValue","isAutocompleteVisible","isAdvancedSearch","isFilterSearch","isResetting","filterSearchTab","isFilterSearchCountLoading","isFiltersLoading","nextSearch","getLangUrl","getLanguage","getUrl","getBaseUrl","BASE_URL","getCurrentPathname","window","location","pathname","getCurrentSearchParams","getCurrentUrl","getCurrentLocation","resize","dispatchEvent","CustomEvent","isProd","hostname","isHomepage","urls","test","isContactPage","isSearchResults","isAdvancedSearchResults","isSurveyPage","isSurveyPageAllowed","store","getState","auth","isDvmSurveyAllowed","isEsgCompanySurveyAllowed","isEsgFundSurveyAllowed","isEsgArticleUploadAllowed","isCompanyEsgAdmin","isHomeComponent","scrollToRef","ref","start","startingY","pageYOffset","diff","current","getBoundingClientRect","requestAnimationFrame","timestamp","time","percent","Math","min","scrollTo","isAnyModalVisible","props","Object","values","some","modalVisibility","gtmPushEvent","dataLayer","push","element","to","duration","perTick","scrollTop","setTimeout","getRedirectLocation","cookies","Cookies","cookiesOptions","path","secure","httpOnly","sameSite","loginSuccessful","token","isWholesaleUser","isAssetManager","assetManagerId","assetManagerName","isExternalUser","receive_email_notification","isSurveySummaryAllowed","user","jwt_decode","getLoggedInUser","wholesaleRegister","logoutRejected","refreshToken","refreshTokenSuccessful","refreshTokenRejected","confirmUser","confirmUserRejected","requestResetPassword","requestResetPasswordRejected","resetPasswordRejected","fetchUserWebinars","fetchUserWebinarsRejected","fetchLicense","setReceiveEmails","isAuthenticated","receiveEmailNotifications","webinars","license","data","logoutEpic","action$","pipe","ofType","mergeMap","ajax","post","clearSearchFunds","setLastRoute","catchError","loginEpic","resolve","reject","Md5","hashStr","userName","response","prevPathname","parseInt","substr","lastIndexOf","setLoginVisibility","is_wholesale","is_asset_manager","company_info_id","company_info_name","is_external_login","receive_email_notifications","is_esg_fund_survey_allowed","is_esg_company_survey_allowed","is_dvm_survey_allowed","is_company_esg_admin","is_esg_article_upload_allowed","is_survey_summary_allowed","fetchWatchlist","setDetailsLoading","fetchFund","loginRejected","getLoggedInUserEpic","get","getLoggedInUserSuccessful","is_test_user","getLoggedInUserRejected","registerEpic","protocol","host","portalHost","event","userType","registerLocation","ui","setRegisterLoading","setRegisterSuccess","registerRejected","wholesaleRegisterEpic","isWholesale","wholesaleRegisterRejected","rejectTokenEpic","setAppLoading","setLicenseLoading","setIsInitialized","refreshTokenEpic","switchMap","isAppLoading","fetchCustomFields","confirmUserEpic","requestResetPasswordEpic","map","resetPasswordEpic","fetchUserWebinarsEpic","fetchLicenseEpic","fetchLicenseRejected","setReceiveEmailsEpic","setReceiveEmailsRejected","getLocalNumber","digits","toLocaleString","minimumFractionDigits","maximumFractionDigits","getPercentValue","getPercentOneDigitValue","getIntValue","getFloatValue","getPriceValue","parseFloat","getMinInvestmentValue","getCalculatedPerf","getCalculatedRisk","getPerfValue","getPerfValueNa","getRiskValue","undefined","getRiskValueNa","getCostValueNa","getCrashDrawdownValue","getDrawdownValue","getIsinValue","length","getFormattedDate","d","getDate","slice","getMonth","getReversedDateFormat","getFormattedDateShort","getDashedDate","Intl","DateTimeFormat","format","addZeroBefore","n","getConferenceDateTime","moment","locale","formattedTime","d2","getApiDateFormat","getMacroOverviewDate","getYesNoValue","getVolumeValue","getLicensePriceValue","fieldsFormatters","getLongFloatValue","getInvestmentFocus","getInvestmentFocusLabels","setSurveyPage","setSurveyLoading","setSurveyExportLoading","setAssetManagerSummaryExportLoading","setEsgFundSummaryExportLoading","setEsgCompanySummaryExportLoading","setIsinsTableLoading","page","isSurveySaving","isAssetManagerSummaryExportLoading","isEsgFundSummaryExportLoading","isEsgCompanySummaryExportLoading","isIsinsTableLoading","fetchAssetManagers","fetchAssetManager","fetchAssetManagerFunds","fetchAssetManagerNews","fetchSingleAssetManagerNews","fetchTopAssetManagerFunds","fetchTopAssetManagerFundsRejected","saveAssetManager","saveAssetManagerRejected","addAssetManagerNews","addAssetManagerNewsRejected","editAssetManagerNews","editAssetManagerNewsRejected","removeAssetManagerNews","fetchMacroOverviews","assetManagersList","chartData","macroOverviewsList","macroOverviews","singleNews","topAssetManagerFunds","fetchAssetManagersEpic","setAssetManagersLoading","takeUntil","fetchAssetManagersRejected","fetchMacroOverviewsEpic","setMacroOverviewsLoading","fetchMacroOverviewsRejected","fetchAssetManagerEpic","pragma","setAssetManagerInfoLoading","fetchAssetManagerRejected","fetchAssetManagerFundsEpic","queryParams","getAssetManagerFundsQueryParams","form","indexOf","setFundsTableLoading","setFundsTableTotal","count","results","fetchAssetManagerFundsRejected","fetchAssetManagerNewsEpic","setAssetManagerNewsLoading","fetchAssetManagerNewsRejected","fetchSingleAssetManagerNewsEpic","fetchSingleAssetManagerNewsRejected","fetchTopAssetManagerFundsEpic","setTopAssetManagerFundsLoading","saveAssetManagerEpic","assetManagerProfile","macroOverviewForm","selectedFundsForm","changedValues","getChangedValues","updateEsg","updatePortfolioManagers","updateMacroOverview","patch","addAssetManagerNewsEpic","company_info","setAmNewsModalUploading","editAssetManagerNewsEpic","keys","forEach","key","base64_string","removeAssetManagerNewsEpic","delete","removeAssetManagerNewsRejected","setCurrentLang","setCookieInfoVisibility","fetchRecordDate","isLicenseLoading","isInitialized","isCookieInfoVisible","recordDateUTC","dateParts","split","UTC","fetchRecordDateEpic","result","fetchRecordDateRejected","scrollSurvey","surveyForm","getElementById","scrollIntoView","behavior","setSurveyValues","questions","sub_questions","dispatch","change","i","isSubquestionAnswered","isAnswered","item","setSurveyAnswers","super_question_id","setSurveyRequiredAnswersValues","q","getSurveyType","getIsinId","version","toString","URL","href","searchParams","setTopAssetManagerFundsVisibility","setTopAssetManagerFundId","isAssetManagerFundsLoading","isAssetManagerInfoLoading","isAssetManagerNewsLoading","isTopAssetManagerFundsVisible","isTopAssetManagerFundsLoading","topAssetManagerFundId","isMacroOverviewsLoading","getIdFromPathnae","includes","match","PrivateRoute","connect","router","lastRoute","onRouteRedirect","role","Component","component","rest","hasAccess","WITHOUT_LICENSE","WITH_LICENSE","USER","WHOLESALE","IS_SURVEY_ALLOWED","ASSET_MANAGER","redirectRoute","render","localStorage","setItem","updateURLParameter","url","param","paramVal","newAdditionalURL","tempArray","baseURL","additionalURL","temp","buildQueryParams","params","Array","x","join","queryFilters","getNewsQueryParams","newsParamsConfig","getReportsQueryParams","reportsParamsConfig","getSearchQueryParams","searchParamsConfig","fundsTableParamsConfig","fundsTable","getFilterSearchQueryParams","filterSearchParamsConfig","getField","field","getFiltersFromQueryParams","queryParamsConfig","filters","getAll","formName","getSingleQueryParams","getSelectQueryParams","getMultiQueryParams","getProps","args","prevSearch","selectedFund","searchResultsParams","uid","onRouteChange","URLSearchParams","setRegisterVisibility","setLoginLoading","setMobileNavVisibility","setRequestResetPasswordVisibility","setFundsInFocusLoading","setPremiumFormVisibility","setLangMenuVisibility","setAccountMenuVisibility","setPublicationsMenuVisibility","setComparisonVisibility","setFundsIds","setPrimaryCompareFund","setComparisonAutocompleteValue","setPremiumFundSearchVisibility","resetDetailsCharts","destroy","setFundsTableOrdering","setFilterSearchFundsCount","setAmNewsModalVisibility","setFundDocumentsVisibility","setPortfolioManagerModalVisibility","setAifModalStep","setConferenceInfoModalVisibility","setPurchaseModalVisibility","cleanSurvey","resetAppState","fetchSurvey","setHomeNewsLoading","setHomeFactsLoading","setNewsLoading","fetchHomeNews","fetchHomeFacts","fetchNewsList","setResetPasswordToken","setResetPasswordVisibility","fetchFundsInFocus","fetchRatingInFocus","newsHandler","reportsHandler","oifHandler","fetchSingleNews","setReportDetailsLoading","fetchSingleReport","searchResultsHandler","int","setInterval","regions","filterSearchResultsHandler","clearInterval","peergroups","advancedSearchResultsHandler","setFundAifNewsLoading","fetchFundAifNews","fetchPaidDocument","setEmpLoading","setEsgLoading","fetchEmpPeergroups","fetchEsgPeergroups","setSavedSearchesLoading","fetchSavedSearches","assetManagerDetailsHandler","setAssetManagerChartLoading","fetchAssetManagerStats","fundRatingsHandler","setConferencesListLoading","fetchConferencesList","setConferenceDetailsLoading","fetchSingleConference","setAifSelectedFundId","fetchAifFunds","setSelectedAifFunds","aifParams","setSelectedAifParams","yourAifParams","onSearchChange","fetchSelectedFund","fetchFilterSearchPerfRisk","fetchFilterSearchFunds","fetchAdvancedSearchFunds","perPage","setReportsLoading","fetchReportsList","assetManagerFundsHandler","fetchCompareFundsRejected","fetchSearchFunds","isCompare","fetchSearchFundsSuccessful","fetchSearchFundsCancelled","fetchNextSearchFunds","fetchAdvancedSearchFundsRejected","setSelectedFund","setSelectedTableFunds","isChecked","resetSelectedTableFunds","searchFunds","advancedSearchFunds","selectedTableFunds","fetchCompareFundsEpic","is_aif","res","fetchSearchFundsEpic","debounceTime","encodeURIComponent","setComparisonAutocompleteLoading","fetchSearchFundsRejected","fetchNextSearchFundsEpic","concat","fetchNextSearchFundsRejected","fetchAdvancedSearchFundsEpic","setSearchResultsParams","fetchAdvancedSearchFundsSuccessful","fetchSelectedFundEpic","fetchSelectedFundRejected","fetchFundsInPeergroupEpic","fetchFundsInPeergroupRejected","SCOPE_IMAGES_URL","HOME_VIDEO_URL","WHOLESALE_VIDEO_URL","searchPhrase","universes","fundSizeSign","ordering","advancedSearchFields","reportsTypes","setComparisonLoading","setComparisonAutocompleteVisibility","isErrorVisible","fundsIds","comparisonAutocomplete","isVisible","setExclusionsVisibility","setPremiumLoading","setExclusionsLoading","setPremiumPrintSection","setExclusionsId","setShowEtfFunds","isPremiumFormVisible","isPremiumFundSearchVisible","isExclusionsVisible","isExclusionsLoading","isEsgLoading","isEmpLoading","premiumPrintSection","exclusionsId","showEtfFunds","setPeriod","chart","setChartLoading","setChartTickInterval","tickInterval","setVolatilityPeriod","setChartVisibility","retailPerformanceRiskChart","getDateTickInterval","volatilityPeriod","setGeneratingPdf","isFundAifNewsLoading","isComparisonVisible","isGeneratingPdf","total","getCurrentFund","find","toLowerCase","filtersSubmit","forms","autocompleteSubmit","getCrashValue","reference_drawdown","getPerformanceClass","toFixed","getRiskClass","getPerfValueClass","getFundBarClass","getFundBarStyle","width","height","isOnWatchlist","getChartData","getChartXYValue","y","getUTCDate","hasData","hasNoData","every","getPeriod","getPerfRiskClass","calcVal","abs","getPerfRiskValueOffset","getShortName","substring","getPosition","instrument","isAif","slugify","a","p","RegExp","c","charAt","canHaveRating","sendSurveyVersion","fetchQuestionsCount","surveyExportRejected","assetManagerSummaryExportRejected","esgFundSummaryExportRejected","esgCompanySummaryExportRejected","uploadArticle89","setSurveyRequiredAnswers","surveyRootAnswers","surveyRequiredAnswers","surveyPageCount","questionsCount","surveyType","surveysVersions","wasNewVersionCreated","surveyOverviewPdfs","page_count","survey_type","overview_pdfs","was_new_version_created","fetchSurveyEpic","shouldLoadNextPage","actions","fetchSurveyRejected","fetchQuestionsCountEpic","questions_count","fetchQuestionsCountRejected","sendSurveyEpic","newValues","regex","newKey","sendSurveyRejected","sendSurveyVersionEpic","sendSurveyVersionRejected","surveyExportEpic","fetch","method","headers","arrayBuffer","blob","downloadLink","createElement","createObjectURL","Blob","body","appendChild","click","removeChild","assetManagerSummaryExportEpic","esgFundSummaryExportEpic","esgCompanySummaryExportEpic","uploadArticle89Epic","setUploadArticle89ModalUploading","uploadArticle89Rejected","fetchSurveysVersionsEpic","fetchSurveysVersionsRejected","conference","editConference","sendConferenceParticipationConfirmationRejected","singleConference","fetchConferencesListEpic","fetchConferencesListRejected","fetchSingleConferenceEpic","fetchSingleConferenceRejected","addConferenceEpic","addConferenceSuccessful","addConferenceRejected","editConferenceEpic","editConferenceRejected","registerForConferenceEpic","conferenceId","conferenceTitle","userEmail","userCompany","userPhone","setConferenceRegisterLoading","registerForConferenceRejected","unregisterFromConferenceEpic","unregisterFromConferenceRejected","sendConferenceParticipationConfirmationEpic","sendConferenceRequestEpic","conferenceStartDate","start_time","conferenceEndDate","end_time","conferenceDescription","conferenceAdditionalInfo","additional_information","setPrevPathname","setPrevSearch","setFundBackRoute","setNewsBackRoute","setReportsBackRoute","setFundEntranceSrc","fundBackRoute","newsBackRoute","reportsBackRoute","removeItem","setRegisterAccountType","setRegisterStep","setRegisterLocation","isRegisterVisible","isRegisterLoading","registerAccountType","registerStep","isRegisterSuccess","isMobileNavVisible","allMyProductsChartDashboard","topPeergroupsFund","sendPremiumMessage","sendFundRequest","sendTeamRequest","sendTeamRequestRejected","subscribeListRejected","unsubscribeListRejected","sendAmRequest","sendMessageEpic","sendMessageRejected","sendPremiumMessageEpic","sendPremiumMessageRejected","sendFundRequestEpic","request_type","sendFundRequestRejected","sendTeamRequestEpic","subscribeListEpic","unsubscribeListEpic","unsubscribeEpic","put","unsubscribeRejected","sendAmRequestEpic","asset_manager","sendAmRequestRejected","fetchFilterSearchCount","fetchFilterSearchCountRejected","fetchFilterSearchPerfRiskRejected","filterSearchFunds","filterSearchCount","perfRiskFunds","fetchFilterSearchFundsEpic","fetchFilterSearchFundsRejected","fetchFilterSearchCountEpic","fetchFilterSearchPerfRiskEpic","fetchFilterSearchPerfRiskSuccessful","saveFund","selectedAifFunds","fundAifNews","paidDocument","fetchFundAifNewsEpic","fetchFundAifNewsRejected","fetchAifFundsEpic","fetchAifFundsRejected","saveFundEpic","setFundPhotoModalUploading","saveFundRejected","fetchPaidDocumentEpic","fetchPaidDocumentSuccessful","fetchPaidDocumentRejected","getChartsLang","months","weekdays","shortMonths","getRank","lettersArray","circle","drawRatingHistoryChart","chartRef","xAxis","yAxis","v","removePlotLine","point","addPlotLine","zIndex","letter","renderer","label","toPixels","css","gray2","attr","fill","blue","monthInterval","getTickPositioner","max","positions","tick","floor","getMinDate","setFullYear","getLastDayOfMonth","year","month","getInitialFromDate","getInitialToDate","m","addFundToWatchlist","isLookupOnly","deleteFundFromWatchlist","watchlistFunds","addFundToWatchlistEpic","addFundToWatchlistRejected","deleteFundFromWatchlistEpic","action","deleteFundFromWatchlistRejected","fetchWatchlistFundsEpic","fetchWatchlistRejected","setNewsListTotal","setCardsView","isNewsLoading","isCardsView","fetchAssetManagerStatsRejected","fetchAssetManagerStatsEpic","dateRange","fetchAssetManagerStatsSuccessful","fetchChartData","fetchChartDataRejected","fetchComparisonChartData","fundId","secondFundId","thirdFundId","fetchComparisonChartDataRejected","resetComparisonChart","fetchActiveCharts","trancheId","peergroupId","distribution","second_fund","third_fund","fetchChartDataEpic","chartState","hasPeergroup","fetchChartDataSuccessful","fetchComparisonChartDataEpic","setChartsLoadingEpic","fetchActiveChartsEpic","setFundDocumentsLoading","setFundDocumentsUploading","setFundDocumentsFundId","setFundDocumentsEditIndex","isUploading","editIndex","setEditNewsId","editNewsId","getBreadcrumbs","matches","reduce","breadcrumbMatch","pathSection","matchPath","exact","getBreadcrumbsTitle","items","DetailsViewBreadcrumbs","withRouter","isNewsBreadcrumbs","breadcrumbs","withBreadcrumbs","className","fetchFilters","fetchFiltersSuccessful","saveCustomFieldsRejected","changeFiltersLang","customFields","investment_focus","fetchFiltersEpic","fetchFiltersRejected","saveCustomFieldsEpic","custom_fields","fetchCustomFieldsEpic","fetchCustomFieldsRejected","fetchExclusions","fetchPremiumSearchFunds","empPeergroups","esgPeergroups","premiumSearchFunds","exclusions","fetchEmpPeergroupsEpic","fetchEmpFunds","fetchEmpPeergroupsRejected","fetchEsgPeergroupsEpic","fetchEsgFunds","fetchEsgPeergroupsRejected","fetchExclusionsEpic","fetchExclusionsRejected","fetchPremiumSearchFundsEpic","fetchPremiumSearchFundsRejected","isHomeNewsLoading","isHomeFactsLoading","lightBlue","gray","lightGray","lightGray2","yellow","red","redTransparent","greenTransparent","yellowTransparent","isLoginVisible","isLoginLoading","setPerformanceModalFund","setHistoryModalFund","incrementStats","generateExportFile","generateExportFileRejected","primaryCompareFund","performanceModalFund","historyModalFund","generateExportFileEpic","JSON","stringify","incrementStatsEpic","fund_id","incrementStatsRejected","domainReducers","combineReducers","assetManagersCharts","common","fundDocuments","fundsPremium","charts","licenses","uiReducers","assetManagerNewsModal","assetManagerList","fundsList","reportDetails","performanceModal","contactForm","toasts","comparisonModal","portfolioManagerModal","fundDocumentsModal","fundPhotoModal","confirmModal","conferenceModal","aifBenchmarksModal","surveySubmissionModal","history","createBrowserHistory","basename","rootReducers","connectRouter","formReducer","epicMiddleware","createEpicMiddleware","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","epics","combineEpics","fetchFundEpic","fetchFundsInFocusEpic","fetchRatingInFocusEpic","fetchNewsListEpic","fetchReportsListEpic","fetchHomeNewsEpic","fetchHomeFactsEpic","fetchSingleNewsEpic","fetchSingleReportEpic","fetchEmpFundsEpic","fetchEsgFundsEpic","fetchSavedSearchesEpic","saveSearchEpic","removeSearchEpic","addFundDocumentEpic","fetchFundDocumentsEpic","editFundDocumentEpic","removeFundDocumentEpic","redirectToPaymentEpic","fetchLicensesEpic","cancelSubscriptionEpic","_createStore","applyMiddleware","routerMiddleware","handleRouteChange","listen","run","fetchLicenses","filterSearchSubmit","setFundsInFocusActiveCategory","setFundsInFocusStep","setPurchaseModalLoading","newsList","fetchNewsListRejected","fetchSingleNewsRejected","clearFundDetailsState","tranche_id","fetchFundRejected","removeSearch","searches","fetchSavedSearchesRejected","search_query","search_name","setSavedSearchesModalVisibility","saveSearchRejected","removeSearchRejected","isSavedSearchesModalVisible","empFunds","fetchEmpFundsRejected","fetchEsgFundsRejected","homeNews","homeFacts","fetchHomeNewsRejected","fetchHomeFactsRejected","setReportsListTotal","setReportsCardsView","isReportsLoading","isReportsCardsView","redirectToPayment","setSelectedPrice","invoice","selectedPrice","fetchLicensesRejected","success_url","origin","cancel_url","setInvoiceModalVisibility","redirectToPaymentRejected","cancelSubscriptionRejected","reportsList","reportData","singleReport","fetchReportsListRejected","fetchSingleReportRejected","setServicesMenuVisibility","setScopeAwardsMenuVisibility","isAccountMenuVisible","isLangMenuVisible","isPublicationsMenuVisible","isServicesMenuVisible","isScopeAwardsMenuVisible","setAifBenchmarksModalVisibility","selectedAifParams","addFundDocument","editFundDocuments","removeFundDocuments","fetchFundDocuments","addFundDocumentRejected","editFundDocumentRejected","removeFundDocumentRejected","fetchFundDocumentsRejected","isAssetManagersLoading","fetchFundsInFocusRejected","links","fetchRatingInFocusRejected","setFundPhotoModalVisibility","setFundPhotoModalFundId","setUploadArticle89ModalVisibility","isResetPasswordVisible","getExtension","initial","macro_overviews","selected_funds","portfolio_managers","l","getMacroOverviewFields","label_de","label_en","region","j","regions_en","regions_de","AppLink","size","variant","iconAlign","disabled","external","target","data-cy","rel","icon","children","onClick","isRequestResetPasswordVisible","setEditPortfolioManagerId","editPortfolioManagerId","isInstrument","formatter","LoadingIndicator","isSmall","setIsAssetManagerDashboardSaving","isAssetManagerDashboardChartLoading","isAssetManagerDashboardSaving","chartType","setConferenceModalVisibility","setConferenceId","setConfirmModalVisibility","setConfirmModalText","setConfirmModalConfirmAction","setConfirmModalCancelAction","getMacroOverviewOptions","setAifBenchmarksVisibility","setEsgSurveyInfoModalVisibility","setSurveySubmissionModalVisibility","setRemoveFundKeyFactsModalVisibility","sectionNumber","setPerformanceId","AppLazy","lazy","createStore","AOS","init","offset","objectFitImages","setLanguage","Highcharts","setOptions","rootElement","ReactDOM","fallback"],"mappings":"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BACE,mEACFC,wBACE,qeACFC,YAAa,0DACbC,eACE,sFACFC,iBACE,wLACFC,mBACE,uFACFC,oBACE,kFACFC,gBAAiB,sDACjBC,iBACE,iEACFC,mBACE,wFACFC,oBACE,sGACFC,iBACE,gJACFC,sBACE,2KACFC,qBACE,oOACFC,wBACE,oEACFC,yBACE,2KACFC,aAAc,oBACdC,kBACE,0SACFC,UAAW,mBACXC,wBACE,ybACFC,eAAgB,sBAChBC,sBACE,2aACFC,SAAU,mBACVC,4BACE,msBACFC,gBAAiB,qBACjBC,gBACE,0NACFC,8BACE,iQACFC,wBACE,qPACFC,0BACE,+MACFC,gBAAiB,yCACjBC,kCACE,qKACFC,qBACE,8JACFC,uBACE,4FACFC,yBACE,0FACFC,uBACE,oIACFC,eACE,0KACFC,cACE,wSACFC,aAAc,oDACdC,aACE,uJACFC,mBACE,wKACFC,iBACE,qHACFC,gCACE,iaACFC,aAAc,4BACdC,6BACE,6YACFC,eACE,uHACFC,WAAY,cACZC,SAAU,WACVC,IAAK,iJACLC,KAAM,gKACNC,KAAM,iJACNC,YAAa,0BACbC,yBACE,0KACFC,aACE,yIACFC,eACE,2JACFC,WAAY,kBACZC,eAAgB,UAChBC,cAAe,wBACfC,YAAa,mBACbC,gBAAiB,UACjBC,eAAgB,wBAChBC,aAAc,oBACdC,gBAAiB,wBACjBC,mBAAoB,0CACpBC,aACE,uNACFC,cAAe,iBACfC,yBACE,kTACFC,kBAAmB,qBACnBC,UACE,mhBACFC,eAAgB,yBAChBC,2BACE,iaACFC,uBAAwB,qCACxBC,8BACE,qRACFC,gBAAiB,mBACjBC,iCACE,2PACFC,6CACE,oYACFC,kBACE,iEACFC,0CACE,yiBACFC,qBACE,+KACFC,mBAAoB,8BACpBC,sBAAuB,4BACvBC,eAAgB,2CAChBC,iBAAkB,uDAClBC,mBAAoB,qCACpBC,qBAAsB,uBAExBz3B,YAAa,CACXgE,MAAO,YACPuzB,iBAAkB,uDAClBC,mBAAoB,kDACpBE,yBACE,6DACFC,kBAAmB,oBACnBC,qBACE,+FACFC,gBACE,8HACFC,WAAY,kBACZC,eACE,6zDACFC,QACE,mLACFC,YACE,wWACFhoB,UAAW,eACXioB,iBAAiB,aAAD,QAAe,IAAIhoB,MAAOC,cAA1B,qmCAElBrQ,YAAa,CACXkE,MAAO,WACPG,SACE,oLACFg0B,iBAAkB,+BAClBC,aAAc,aACdC,kBACE,sPACFC,kBAAmB,wBACnBC,kBACE,gRACFC,kBAAmB,wBACnBC,kBAAmB,aACnB34B,YAAa,WACb44B,iBACE,oMACFC,iBACE,ucACFC,iBAAkB,6BAClBC,iBACE,8eACFC,iBACE,6GACFC,iBACE,0LACFC,iBAAkB,uBAClBC,iBAAkB,aAClBC,cAAe,iBACfC,mBACE,g2BACFC,mBAAoB,kCACpBC,oBAAqB,sBACrBC,oBAAqB,gBACrBC,oBAAqB,uBACrBC,oBAAqB,4BACrBC,oBAAqB,kBACrBC,oBAAqB,gBACrBC,oBAAqB,mBACrBC,oBAAqB,gBACrBtL,cAAe,gBACfuL,mBACE,usBACFC,mBACE,0QACFC,mBACE,gRACFC,qBAAsB,6BACtBC,MAAO,oBACPC,WACE,whBACFC,WACE,0SACFC,eAAgB,oBAChBC,oBACE,oIACFC,oBAAqB,SACrBC,IAAK,MACLC,oBACE,4YACFC,oBACE,wZACFC,oBACE,wEACFC,wBAAyB,2BACzBC,6BACE,iQACFC,sBAAuB,iCACvBC,2BACE,2VACFC,qBAAsB,gCACtBC,0BACE,mTACFC,QAAS,yCACTC,aACE,miBACFC,aACE,kEACFC,aAAc,QACdC,YAAa,gDACbC,YAAa,0BACbC,gBAAiB,qBACjBC,cAAe,2BACfC,mBAAoB,0CAEtBn4B,SAAU,CACRU,MAAO,MACPG,SAAU,yBAEZhF,KAAM,CACJ6E,MAAO,8BACPG,SACE,8JACF2gB,KAAM,YACN4W,SAAU,YACVtkB,KAAM,SACNnD,OAAQ,QACRpF,SAAU,WACV8sB,SAAU,WACVC,MAAO,QACPC,QAAS,UACTroB,KAAM,OACNud,MACE,gGACF+K,aAAc,8BACdC,cAAe,yCAEjB18B,QAAS,CACP2E,MAAO,+BACPG,SACE,+JACF2gB,KAAM,YACN4W,SAAU,YACVtkB,KAAM,SACN5D,KAAM,OACNwoB,SAAU,kBACVjL,MACE,gGACFkL,gBAAiB,8BACjBF,cAAe,yCAEjBx8B,IAAK,CACHyE,MAAO,yBACPG,SACE,8JACF2gB,KAAM,YACN4W,SAAU,YACVtkB,KAAM,SACNnD,OAAQ,QACRpF,SAAU,WACV8sB,SAAU,WACVC,MAAO,QACPC,QAAS,UACTroB,KAAM,OACNud,MACE,gGACF+K,aAAc,8BACdC,cAAe,yCAEjBzsB,MAAO,CACLH,KAAM,0GACN+sB,SACE,+FACFC,SACE,+FACFC,SAAU,QACVv0B,aAAc,8BACdJ,OAAQ,CACNC,QAAS,gDACTE,IAAK,mEAEPW,QAAS,2BAEXoF,SAAU,CACRwB,KAAM,qIACNrI,MACE,uJACFuD,MACE,kSACFG,MACE,2LACFE,MACE,oWACFC,MAAO,mBACPE,MACE,mIACFwxB,MAAO,gBACPC,UAAW,uCACXC,MAAO,kBACPC,UAAW,QACX30B,aAAc,8BACdJ,OAAQ,CACNC,QAAS,wDACT+0B,IAAK,2CACLC,IAAK,mDACLC,IAAK,iBAEPp0B,QAAS,iCACTq0B,mBAAoB,+BACpBC,IAAK,iCACL3xB,OAAQ,gBACRlJ,UAAW,2BACX86B,OAAQ,qBACRC,wBAAyB,oCACzBC,SAAU,WAEZC,gBAAiB,CACfC,YACE,mRACFC,YACE,+HACFC,eACE,mRACFC,eACE,mUAEJx/B,QAAS,CACPmG,MAAO,6BACPuE,QAAS,6DACTwoB,MAAO,+CAETuM,cAAe,CACbt5B,MAAO,2BACP8sB,KAAM,2BACNrpB,OAAQ,CACN81B,eACE,gEACF71B,QAAS,+DAEXG,aAAc,8BACdd,eACE,oGACFwB,QAAS,2CAEXi1B,eAAgB,CACdx5B,MAAO,iDACPy5B,UAAW,OACXryB,UAAW,eACXsyB,UAAW,8BACXC,UAAW,aACXC,UAAW,UACXC,UAAW,6CACXC,UACE,yEACFC,UAAW,qDACXC,UAAW,iDACXC,UAAW,mCACXC,UAAW,mDACXC,OAAQ,aACRC,SAAU,wBACVzwB,SAAU,gBAEZ1N,cAAe,CACb+D,MAAO,sBACPG,SAAU,wBACVk6B,cAAe,kCACfC,aACE,iXACFC,cAAe,mBACfC,cACE,0QACFC,cAAe,mCACfC,cACE,kLACFC,cAAe,oBACfC,cACE,wTACFC,cAAe,uCACfC,cACE,mGACFC,cACE,0LACFC,cACE,gXACFC,cACE,kEACFC,cACE,qIACFC,cACE,yOACFC,cAAe,oDACfC,cAAe,6BACfC,cAAe,+BACfC,cAAe,4BACfC,cAAe,sCACfC,cACE,oEACFC,cAAe,eACfC,cAAe,uBACfC,cAAe,yBACfC,cACE,+aACFC,cAAe,gCACfC,cACE,iZACFC,cACE,qTACFC,cACE,geACFC,cAAe,+BACfC,cACE,+PACFC,cACE,gFACFC,cAAe,uBACfC,cAAe,uBACfC,cACE,kEACFC,cACE,uGACFC,cACE,4IACFC,cACE,iKACFC,cAAe,kBACfC,eACE,0gBACFC,cAAe,0DACfC,cAAe,0BACfC,cAAe,uDACfC,cAAe,oCACfC,eACE,yMACFC,eACE,8HACFC,eAAgB,mBAChBC,eACE,0oCACFC,eACE,oJACFC,eACE,4JACFC,cAAe,gDACfC,eACE,+lBACFC,cAAe,gDACfC,eACE,uNACFC,cAAe,qDACfC,eACE,0IACFC,eACE,4XACFC,eACE,8PACFC,gBACE,6OACFC,gBAAiB,gDACjBC,gBACE,yEACFC,gBAAiB,iDACjBC,eACE,4MACFC,cAAe,6CACfC,cACE,0VACFC,cACE,yTACFC,cACE,wHACFC,cACE,idACFC,cACE,2RACFC,cACE,mYACFC,cACE,gFACFC,cAAe,KACfC,cAAe,8CACfC,cACE,wYACFC,cAAe,UACfC,cACE,sEACFC,cAAe,yBACfC,cACE,gaACFC,cACE,oiCACFC,cACE,sRACFC,cAAe,iDACfC,cACE,uHACFC,cAAe,gDACfC,cACE,8FACFC,cACE,wcACFC,cAAe,oBACfC,cAAe,iBACfC,cACE,+FACFC,cAAe,4BACfC,cAAe,0BACfC,cAAe,6BACfC,cAAe,gCACfC,cACE,2KACFC,cACE,6GACFC,cACE,2EACFC,cACE,gUACFC,cACE,mLACFC,cAAe,aACfC,cAAe,oBACfC,cAAe,iBACfC,cAAe,UACfC,cAAe,0BACfC,cACE,oPACFC,cACE,4GACFC,eAAgB,mDAChBC,eACE,qSACFC,eACE,2MACFC,eACE,oHACFC,eACE,kGACFC,eAAgB,6DAChBC,eACE,0EACFC,eAAgB,gCAChBC,eACE,0IACFC,eAAgB,2DAChBC,eAAgB,oBAChBC,eAAgB,iBAChBC,eAAgB,cAChBC,eAAgB,WAChBC,eACE,iVACFC,eAAgB,sCAChBC,eACE,6JACFC,eACE,iRACFC,eACE,mIACFC,eACE,wPACFC,eACE,kGACFC,eACE,uRACFC,eAAgB,4CAChBC,eAAgB,SAChBC,eAAgB,2DAChBC,eACE,2EACFC,eACE,2TACFC,eACE,6EACFC,eACE,8GACFC,eAAgB,sBAChBC,eAAgB,2CAChBC,eAAgB,+CAChBC,eAAgB,qCAChBC,eAAgB,mDAChBC,eACE,6OACFC,eACE,gFACFC,eACE,6MACFC,eACE,gFACFC,eAAgB,8CAChBC,eACE,4eACFC,eACE,kWACFC,eACE,oFACFC,eACE,kVACFC,eACE,6JACFC,eACE,wJAEJrnC,mBAAoB,CAClB4D,MAAO,qDACPG,SACE,uNACFk6B,cAAe,2BACfqJ,cACE,8FACFnJ,cAAe,oBACfC,cACE,kOACFG,cAAe,kCACfC,cACE,mPACFK,cACE,kEACFC,cACE,ikBACFY,cAAe,yCACfC,cACE,2QACFqC,cAAe,2BACfC,cACE,wOACFQ,cAAe,0BACfC,cACE,ydAEJziC,WAAY,CACV2D,MAAO,sBACPG,SAAU,GACVk6B,cAAe,wBACfqJ,cACE,2NACFC,cAAe,8BACfC,cACE,mKACFC,cAAe,uBACfC,cAAe,KACfC,cACE,uGACFC,cAAe,oBACfC,cACE,gHACFC,cACE,mVACFC,eACE,kGACF5J,cAAe,mBACfC,cACE,gHACF4J,cACE,uMACFC,cACE,kMACF5J,cACE,wRACFC,cACE,iUACFC,cAAe,0BACfC,cACE,yQACFI,cACE,2NACFsJ,cACE,4RACFC,cACE,6UACFC,cACE,iPACFC,cACE,0JACFxJ,cAAe,mCACfC,cACE,qKACFC,cACE,uOACFU,cACE,wPACF6I,cACE,skBACFC,cACE,gRACFC,cACE,6dACF9I,cAAe,8CACfC,cACE,4SACFC,cACE,ueACFC,cACE,mwCACFmC,cAAe,sCACfC,cACE,+dACFQ,cAAe,iDACfC,cACE,oVACFC,cACE,sEACFC,cACE,4LACFE,cACE,gLACFM,cAAe,mBACfC,cACE,uVACFG,cACE,6OACFO,cAAe,6BACfC,cACE,qtBACFC,cACE,4TACFM,cACE,4MACFC,cACE,wKACFC,eAAgB,yCAChBE,eACE,oSACF8D,eACE,wdACFC,eACE,2UACFC,eACE,mVACFC,eACE,kSACFC,eACE,uLACFC,eACE,oQAEJ5oC,mBAAoB,CAClB0D,MAAO,gEACPG,SAAU,IAEZjC,YAAa,CACXA,YAAa,cACb8B,MAAO,cACPmlC,iBAAkB,0BAClBC,4BAA6B,sCAC7BC,kBAAmB,2BACnBC,YACE,oFACFC,WAAY,kBACZC,gBACE,uRACFC,gBACE,iNACFC,gBACE,4cACFC,gBACE,sLACFC,gBACE,kZACFC,gBACE,2YACFC,eAAgB,2BAChBC,oBACE,+IACFC,oBACE,qQACFC,oBACE,wNACFC,oBACE,+WACFC,oBACE,sNACFC,oBACE,6EACFC,YAAa,gBACbC,gBAAiB,6CACjBC,SAAU,gBACVC,oBACE,+EACFC,gBACE,oFACFC,OAAQ,WACRC,QAAS,eACTxoB,QAAS,WACTyoB,cAAe,OACfC,WACE,oKACFpoC,oCAAqC,qCACrCqoC,wCACE,8CACFC,WAAY,aACZC,mBAAoB,wBACpBC,qBAAsB,wBACtBC,gCAAiC,oCACjCC,sBAAuB,yBACvBC,SAAU,mBACVC,aAAc,iBACdC,QAAS,QACTz0B,QAAS,KACT00B,QAAS,KACTC,YAAa,KACbC,WAAY,CACVp+B,KAAM,8BACNlJ,SACE,kGACFunC,oBACE,kFACFC,oBACE,2FACFC,WAAY,CACVC,eACE,4EACFC,mBAAoB,8BACpBC,mBAAoB,sBACpBC,aACE,2LACFC,aACE,uEACFC,aACE,4GAEJC,sBAAuB,CACrBN,eACE,4FACFC,mBAAoB,qCACpBC,mBAAoB,MACpBK,mBAAoB,0BACpBC,mBAAoB,gBACpBL,aACE,mKACFC,aAAc,6DACdC,aACE,4GAEJI,YAAa,CACXT,eACE,yEACFG,aACE,qKACFC,aACE,mEACFC,aACE,4GAEJK,aAAc,CACZp9B,KAAM,0CAGVq9B,WAAY,CACVn/B,KAAM,8BACNlJ,SACE,uFACFunC,oBACE,uFACFC,oBACE,uFACFC,WAAY,CACVC,eACE,4EACFC,mBAAoB,8BACpBC,mBAAoB,sBACpBC,aACE,2LACFC,aACE,uEACFC,aACE,4GAEJC,sBAAuB,CACrBN,eACE,4FACFC,mBAAoB,qCACpBC,mBAAoB,MACpBK,mBAAoB,0BACpBC,mBAAoB,gBACpBL,aACE,mKACFC,aAAc,6DACdC,aACE,4GAEJI,YAAa,CACXT,eACE,yEACFG,aACE,qKACFC,aACE,mEACFC,aACE,4GAEJK,aAAc,CACZp9B,KAAM,iDAGVs9B,WAAY,CACVp/B,KAAM,6CACNlJ,SAAU,6CACVunC,oBAAqB,6CACrBC,oBAAqB,6CACrBC,WAAY,CACVC,eACE,4EACFC,mBAAoB,8BACpBC,mBAAoB,sBACpBK,mBAAoB,oCACpBJ,aACE,2LACFU,aACE,iEACFT,aACE,sEACFC,aACE,2GACFS,YACE,uGAEJR,sBAAuB,CACrBN,eACE,4FACFC,mBAAoB,cACpBC,mBAAoB,MACpBK,mBAAoB,0BACpBC,mBAAoB,gBACpBL,aACE,mKACFU,aACE,+DACFT,aAAc,4DACdC,aACE,2GACFS,YACE,uGAEJL,YAAa,CACXT,eACE,yEACFG,aACE,qKACFU,aACE,8DACFT,aACE,qEACFC,aACE,2GACFS,YACE,uGAEJJ,aAAc,CACZp9B,KAAM,iDAGVy9B,WAAY,CACVv/B,KAAM,GACNlJ,SAAU,GACVunC,oBAAqB,GACrBC,oBAAqB,GACrBC,WAAY,CACVC,eACE,4EACFC,mBAAoB,8BACpBC,mBAAoB,sBACpBK,mBAAoB,oCACpBJ,aACE,2LACFU,aACE,iEACFT,aACE,sEACFC,aACE,gHACFS,YACE,4DAEJR,sBAAuB,CA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V,aAAc,uCACdkpB,MAAO,2CACP3gB,cAAe,2BACf4gB,kBAAmB,qBACnBC,mBAAoB,sBACpBC,gBAAiB,oBAEnB/tB,QAAS,CACPa,MAAO,UACPmtB,gBAAiB,2BACjBC,QACE,0FACFC,kBACE,8JACFC,kBACE,sGACFC,kBACE,qPACFC,uBACE,uIACFC,oBACE,qKACFC,mBACE,8KACFC,UAAW,kDACXC,cACE,kHACFC,sBAAuB,2BACvBC,kBACE,8QACFC,eAAgB,mBAChBC,aAAc,gBACdC,gBAAiB,8BACjBC,mBAAoB,+BACpBxgB,SAAU,WACVygB,OAAQ,SACRC,aAAc,iBACdC,0BACE,uVACFC,iBACE,yDACFC,wBACE,kaACFC,YAAa,0DACbC,eACE,6DACFC,iBACE,+GACFC,mBACE,0EACFC,oBACE,8DACFC,gBAAiB,gDACjBC,iBACE,yDACFC,mBACE,wEACFC,oBACE,sGACFC,iBACE,wHACFC,sBACE,kHACFC,qBACE,2LACFC,wBACE,wDACFC,yBACE,sIACFC,aAAc,gBACdC,kBACE,iOACFC,UAAW,aACXC,wBACE,2bACFC,eAAgB,mBAChBC,sBACE,0YACFC,SAAU,WACVC,4BACE,6iBACFC,gBAAiB,qBACjBC,gBACE,6JACFC,8BACE,oOACFC,wBACE,oMACFC,0BACE,uJACFC,gBAAiB,kCACjBC,kCACE,kIACFC,qBACE,uGACFC,uBACE,wEACFC,yBACE,sEACFC,uBACE,iGACFC,eACE,6JACFC,cACE,+OACFC,aAAc,uDACdC,aACE,mFACFC,mBACE,yJACFC,iBACE,oGACFC,gCACE,sUACFC,aAAc,oBACdC,6BACE,uTACFC,eACE,kEACFC,WAAY,cACZC,SAAU,WACVC,IAAK,8IACLC,KAAM,kJACNC,KAAM,4IACNC,YAAa,2BACbC,yBACE,iKACFC,aACE,2JACFC,eACE,sGACFC,WAAY,eACZC,eAAgB,WAChBC,cAAe,iBACfC,YAAa,eACbC,gBAAiB,WACjBC,eAAgB,iBAChBC,aAAc,iBACdC,gBAAiB,iBACjBC,mBAAoB,sCACpBC,aACE,mLACFC,cAAe,4BACfC,yBACE,gQACFC,kBAAmB,uBACnBC,UACE,2VACFC,eAAgB,qBAChBC,2BACE,wSACFC,uBAAwB,6BACxBC,8BACE,sNACFC,gBAAiB,qBACjBC,iCACE,+LACFC,6CACE,+PACFC,kBAAmB,gDACnBC,0CACE,oZACFC,qBACE,mIACFC,mBAAoB,0BACpBC,sBAAuB,2BACvBC,eAAgB,mBAChBC,iBAAkB,kDAClBC,mBAAoB,0CACpBC,qBAAsB,yBAExBz3B,YAAa,CACXgE,MAAO,eACPuzB,iBAAkB,kDAClBC,mBAAoB,yCACpBE,yBACE,gEACFC,kBAAmB,qBACnBC,qBACE,mFACFC,gBACE,sHACFC,WAAY,aACZC,eACE,+tDACFC,QACE,6JACFC,YACE,uTACFhoB,UAAW,YACXioB,iBAAiB,kBAAD,QAAiB,IAAIhoB,MAAOC,cAA5B,8/BAElBrQ,YAAa,CACXkE,MAAO,cACPG,SACE,sLACFg0B,iBAAkB,YAClBC,aAAc,eACdC,kBACE,wMACFC,kBAAmB,uBACnBC,kBACE,qKACFC,kBAAmB,GACnBC,kBAAmB,IACnB34B,YAAa,cACb44B,iBACE,yIACFC,iBACE,mWACFC,iBAAkB,4BAClBC,iBACE,gZACFC,iBACE,kHACFC,iBACE,0MACFC,iBAAkB,GAClBC,iBAAkB,GAClBC,cAAe,qBACfC,mBACE,ytBACFC,mBAAoB,gCACpBC,oBAAqB,2BACrBC,oBAAqB,YACrBC,oBAAqB,uBACrBC,oBAAqB,2BACrBC,oBAAqB,oBACrBC,oBAAqB,cACrBC,oBAAqB,mBACrBC,oBAAqB,YACrBtL,cAAe,iBACfuL,mBACE,ohBACFC,mBACE,uIACFC,mBACE,+IACFC,qBAAsB,uBACtBC,MAAO,kBACPC,WACE,2fACFC,WACE,qPACFC,eAAgB,oBAChBC,oBACE,6GACFC,oBAAqB,QACrBC,IAAK,MACLC,oBACE,4TACFC,oBACE,6WACFC,oBACE,qEACFC,wBAAyB,2BACzBC,6BACE,uNACFC,sBAAuB,kCACvBC,2BACE,2PACFC,qBAAsB,kCACtBC,0BACE,qSACFC,QAAS,wCACTC,aACE,6WACFC,aACE,+DACFC,aAAc,QACdC,YAAa,2CACbC,YAAa,uBACbC,gBAAiB,qCACjBC,cAAe,yBACfC,mBAAoB,0CAEtBn4B,SAAU,CACRU,MAAO,MACPG,SAAU,mBAEZhF,KAAM,CACJ6E,MAAO,kCACPG,SACE,0HACF2gB,KAAM,OACN4W,SAAU,WACVtkB,KAAM,OACNnD,OAAQ,SACRpF,SAAU,WACV8sB,SAAU,WACVC,MAAO,QACPC,QAAS,UACTroB,KAAM,OACNud,MAAO,6DACP+K,aAAc,uBACdC,cAAe,2CAEjB18B,QAAS,CACP2E,MAAO,6BACPG,SACE,mJACF2gB,KAAM,OACN4W,SAAU,WACVtkB,KAAM,OACN5D,KAAM,OACNwoB,SAAU,kBACVjL,MAAO,6DACPkL,gBAAiB,uBACjBF,cAAe,2CAEjBx8B,IAAK,CACHyE,MAAO,yBACPG,SACE,8JACF2gB,KAAM,YACN4W,SAAU,YACVtkB,KAAM,SACNnD,OAAQ,QACRpF,SAAU,WACV8sB,SAAU,WACVC,MAAO,QACPC,QAAS,UACTroB,KAAM,OACNud,MACE,gGACF+K,aAAc,8BACdC,cAAe,yCAEjBzsB,MAAO,CACLH,KAAM,qEACN+sB,SACE,+FACFC,SACE,+FACFC,SAAU,QACVv0B,aAAc,uCACdJ,OAAQ,CACNC,QAAS,kCACTE,IAAK,sDAEPW,QAAS,qBAEXoF,SAAU,CACRwB,KAAM,qEACNrI,MACE,uJACFuD,MACE,kSACFG,MACE,2LACFE,MACE,oWACFC,MAAO,mBACPE,MACE,mIACFwxB,MAAO,gBACPC,UAAW,uCACXC,MAAO,kBACPC,UAAW,QACX30B,aAAc,uCACdJ,OAAQ,CACNC,QAAS,yCACT+0B,IAAK,sCACLC,IAAK,4DACLC,IAAK,iBAEPp0B,QAAS,6BACTq0B,mBAAoB,sBACpBC,IAAK,4BACL3xB,OAAQ,mBACRlJ,UAAW,wBACX86B,OAAQ,SACRC,wBAAyB,yBACzBC,SAAU,YAEZC,gBAAiB,CACfC,YACE,mRACFC,YACE,+HACFC,eACE,mRACFC,eACE,mUAEJx/B,QAAS,CACPmG,MAAO,eACPuE,QAAS,2CACTwoB,MAAO,4BAETuM,cAAe,CACbt5B,MAAO,iBACP8sB,KAAM,iBACNrpB,OAAQ,CACN81B,eAAgB,2CAChB71B,QAAS,gDAEXG,aAAc,uCACdd,eACE,0GACFwB,QAAS,mCAEXi1B,eAAgB,CACdx5B,MAAO,mCACPy5B,UAAW,OACXryB,UAAW,WACXsyB,UAAW,cACXC,UAAW,OACXC,UAAW,aACXC,UAAW,mCACXC,UACE,mEACFC,UAAW,iDACXC,UAAW,qCACXC,UAAW,sCACXC,UAAW,yCACXC,OAAQ,SACRC,SAAU,oBACVzwB,SAAU,YAEZ1N,cAAe,CACb+D,MAAO,sBACPG,SAAU,wBACVk6B,cAAe,kCACfC,aACE,iXACFC,cAAe,mBACfC,cACE,0QACFC,cAAe,mCACfC,cACE,kLACFC,cAAe,oBACfC,cACE,wTACFC,cAAe,uCACfC,cACE,mGACFC,cACE,0LACFC,cACE,gXACFC,cACE,kEACFC,cACE,qIACFC,cACE,yOACFC,cAAe,oDACfC,cAAe,6BACfC,cAAe,+BACfC,cAAe,4BACfC,cAAe,sCACfC,cACE,oEACFC,cAAe,eACfC,cAAe,uBACfC,cAAe,yBACfC,cACE,+aACFC,cAAe,gCACfC,cACE,iZACFC,cACE,qTACFC,cACE,geACFC,cAAe,+BACfC,cACE,+PACFC,cACE,gFACFC,cAAe,uBACfC,cAAe,uBACfC,cACE,kEACFC,cACE,uGACFC,cACE,4IACFC,cACE,iKACFC,cAAe,kBACfC,eACE,0gBACFC,cAAe,0DACfC,cAAe,0BACfC,cAAe,uDACfC,cAAe,oCACfC,eACE,yMACFC,eACE,8HACFC,eAAgB,mBAChBC,eACE,0oCACFC,eACE,oJACFC,eACE,4JACFC,cAAe,gDACfC,eACE,+lBACFC,cAAe,gDACfC,eACE,uNACFC,cAAe,qDACfC,eACE,0IACFC,eACE,4XACFC,eACE,8PACF0S,eACE,kZACFzS,gBACE,6OACFC,gBAAiB,gDACjBC,gBACE,yEACFC,gBAAiB,iDACjBC,eACE,4MACFC,cAAe,6CACfC,cACE,0VACFC,cACE,yTACFC,cACE,wHACFC,cACE,idACFC,cACE,2RACFC,cACE,mYACFC,cACE,gFACFC,cAAe,KACfC,cAAe,8CACfC,cACE,wYACFC,cAAe,UACfC,cACE,sEACFC,cAAe,yBACfC,cACE,gaACFC,cACE,oiCACFC,cACE,sRACFC,cAAe,iDACfC,cACE,uHACFC,cAAe,gDACfC,cACE,8FACFC,cACE,wcACFC,cAAe,oBACfC,cAAe,iBACfC,cACE,+FACFC,cAAe,4BACfC,cAAe,0BACfC,cAAe,6BACfC,cAAe,gCACfC,cACE,2KACFC,cACE,6GACFC,cACE,2EACFC,cACE,gUACFC,cACE,mLACFC,cAAe,aACfC,cAAe,oBACfC,cAAe,iBACfC,cAAe,UACfC,cAAe,0BACfC,cACE,oPACFC,cACE,4GACFC,eAAgB,mDAChBC,eACE,qSACFC,eACE,2MACFC,eACE,oHACFC,eACE,kGACFC,eAAgB,6DAChBC,eACE,0EACFC,eAAgB,gCAChBC,eACE,0IACFC,eAAgB,2DAChBC,eAAgB,oBAChBC,eAAgB,iBAChBC,eAAgB,cAChBC,eAAgB,WAChBC,eACE,iVACFC,eAAgB,sCAChBC,eACE,6JACFC,eACE,iRACFC,eACE,mIACFC,eACE,wPACFC,eACE,kGACFC,eACE,uRACFC,eAAgB,4CAChBC,eAAgB,SAChBC,eAAgB,2DAChBC,eACE,2EACFC,eACE,2TACFC,eACE,6EACFC,eACE,8GACFC,eAAgB,sBAChBC,eAAgB,2CAChBC,eAAgB,+CAChBC,eAAgB,qCAChBC,eAAgB,mDAChBC,eACE,6OACFC,eACE,gFACFC,eACE,6MACFC,eACE,gFACFC,eAAgB,8CAChBC,eACE,4eACFC,eACE,kWACFC,eACE,oFACFC,eACE,kVACFC,eACE,6JACFC,eACE,wJAEJrnC,mBAAoB,CAClB4D,MAAO,qDACPG,SACE,uNACFk6B,cAAe,2BACfqJ,cACE,8FACFnJ,cAAe,oBACfC,cACE,kOACFG,cAAe,kCACfC,cACE,mPACFK,cACE,kEACFC,cACE,ikBACFY,cAAe,yCACfC,cACE,2QACFqC,cAAe,2BACfC,cACE,wOACFQ,cAAe,0BACfC,cACE,ydAEJziC,WAAY,CACV2D,MAAO,sBACPG,SAAU,GACVk6B,cAAe,wBACfqJ,cACE,2NACFC,cAAe,8BACfC,cACE,mKACFC,cAAe,uBACfC,cAAe,KACfC,cACE,uGACFC,cAAe,oBACfC,cACE,gHACFC,cACE,mVACFC,eACE,kGACF5J,cAAe,mBACfC,cACE,gHACF4J,cACE,uMACFC,cACE,kMACF5J,cACE,wRACFC,cACE,iUACFC,cAAe,0BACfC,cACE,yQACFI,cACE,2NACFsJ,cACE,4RACFC,cACE,6UACFC,cACE,iPACFC,cACE,0JACFxJ,cAAe,mCACfC,cACE,qKACFC,cACE,uOACFU,cACE,wPACF6I,cACE,skBACFC,cACE,gRACFC,cACE,6dACF9I,cAAe,8CACfC,cACE,4SACFC,cACE,ueACFC,cACE,mwCACFmC,cAAe,sCACfC,cACE,+dACFQ,cAAe,iDACfC,cACE,oVACFC,cACE,sEACFC,cACE,4LACFE,cACE,gLACFM,cAAe,mBACfC,cACE,uVACFG,cACE,6OACFO,cAAe,6BACfC,cACE,stBACFC,cACE,4TACFM,cACE,4MACFC,cACE,wKACFC,eAAgB,yCAChBE,eACE,oSACF8D,eACE,wdACFC,eACE,2UACFC,eACE,mVACFC,eACE,kSACFC,eACE,uLACFC,eACE,oQAEJ5oC,mBAAoB,CAClB0D,MAAO,gEACPG,SAAU,IAEZjC,YAAa,CACXA,YAAa,cACb8B,MAAO,cACPmlC,iBAAkB,0BAClBC,4BAA6B,sCAC7BC,kBAAmB,2BACnBC,YACE,qEACFC,WAAY,kBACZC,gBACE,2PACFC,gBACE,6KACFC,gBACE,mcACFC,gBACE,mLACFC,gBACE,6VACFC,gBACE,8UACFC,eAAgB,sBAChBC,oBACE,6GACFC,oBACE,+NACFC,oBACE,sMACFC,oBACE,wSACFC,oBACE,0MACFC,oBACE,4DACFC,YAAa,gBACbC,gBAAiB,wCACjBC,SAAU,WACVC,oBACE,iFACFC,gBACE,sFACFC,OAAQ,SACRC,QAAS,SACTxoB,QAAS,UACTyoB,cAAe,OACfC,WACE,qJACFpoC,oCACE,0CACFqoC,wCACE,wGACFC,WAAY,aACZC,mBAAoB,wBACpBC,qBAAsB,wBACtBC,gCAAiC,oCACjCC,sBAAuB,yBACvBC,SAAU,YACVC,aAAc,iBACdC,QAAS,WACTz0B,QAAS,MACT00B,QAAS,MACTC,YAAa,MACbC,WAAY,CACVp+B,KAAM,kCACNlJ,SACE,4EACFunC,oBACE,kEACFC,oBACE,sEACFC,WAAY,CACVC,eACE,8EACFC,mBAAoB,8BACpBC,mBAAoB,qBACpBC,aACE,4KACFC,aACE,4DACFC,aACE,0GAEJC,sBAAuB,CACrBN,eACE,8EACFC,mBAAoB,qCACpBC,mBAAoB,MACpBK,mBAAoB,0BACpBC,mBAAoB,gBACpBL,aACE,yJACFC,aAAc,kDACdC,aACE,0GAEJI,YAAa,CACXT,eACE,iFACFG,aACE,sJACFC,aAAc,uDACdC,aACE,0GAEJK,aAAc,CACZp9B,KAAM,4CAGVq9B,WAAY,CACVn/B,KAAM,kCACNlJ,SACE,6EACFunC,oBACE,6EACFC,oBACE,6EACFC,WAAY,CACVC,eACE,8EACFC,mBAAoB,8BACpBC,mBAAoB,qBACpBC,aACE,4KACFC,aACE,4DACFC,aACE,0GAEJC,sBAAuB,CACrBN,eACE,0FACFC,mBAAoB,qCACpBC,mBAAoB,MACpBK,mBAAoB,0BACpBC,mBAAoB,gBACpBL,aACE,yJACFC,aAAc,kDACdC,aACE,0GAEJI,YAAa,CACXT,eACE,iFACFG,aACE,sJACFC,aAAc,uDACdC,aACE,0GAEJK,aAAc,CACZp9B,KAAM,4CAGVs9B,WAAY,CACVp/B,KAAM,6CACNlJ,SAAU,6CACVunC,oBAAqB,6CACrBC,oBAAqB,6CACrBC,WAAY,CACVC,eACE,8EACFC,mBAAoB,8BACpBC,mBAAoB,qBACpBK,mBAAoB,qCACpBJ,aACE,4KACFU,aACE,wEACFT,aACE,4DACFC,aACE,yGACFS,YACE,mGAEJR,sBAAuB,CACrBN,eACE,0FACFC,mBAAoB,cACpBC,mBAAoB,MACpBK,mBAAoB,0BACpBC,mBAAoB,gBAC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Da,WAKT,IAJJxkC,EAIG,uDAJuB,CACxB2G,WAAW,GAGV,yCADDvB,EACC,EADDA,KAAMC,EACL,EADKA,QAER,OAAQD,GACN,IAdwB,sBAetB,OAAO,6BACFpF,GADL,IAEE2G,UAAWtB,EAAQtxB,QAEvB,QACE,OAAOisB,IFmDXykC,YACAt5E,mBACAu5E,oBACAC,2BACAC,wBACAC,oBACAC,kBACAC,qBACAv5E,qBACAE,sBACAs5E,uBACAxgE,kBACA7M,wBACAP,uBACAG,yBACAgS,mBACAH,kBACAvO,YACApD,6BACAwtE,4BGmDWC,GAAUC,YAAqB,CAAEC,SAAU,MAE3CC,GAAe1B,YAAqB,CAC/CnxB,GAAI0xB,GACJjkC,OAAQyjC,EACRhkB,OAAQ4lB,YAAcJ,IACtB/qB,KAAMorB,MAGFC,GAAiBC,cAEjBC,GACc,kBAAXr8B,SACJS,eACAT,OAAes8B,qCACbt8B,OAAes8B,qCAAqC,IACrDC,IAEAC,GAAQC,YACZC,IACAvc,IACAwc,IACAC,IACAtc,IACAQ,IACA+b,IACAC,IACAC,IACAC,IACAC,IACAC,IACAv2B,IACAV,IACA2C,IACAW,IACAO,IACAI,IACAC,IACAE,IACA0jB,IACAE,IACAmJ,IACAnW,IACAvX,IACAypB,IACAE,IACAG,IACAwB,IACAM,IACA6H,IACAC,IACAjc,IACA6W,IACAG,IACAG,IACA+E,IACAC,IACAC,IACAjG,IACAE,IACApC,IACAjH,IACAG,IACAC,IACAC,IACAC,IACA+J,IACA7kB,IACA3D,IACAI,IACAO,IACAJ,IACAc,IACAK,IACAwoB,IACAtoB,IACAJ,IACA6d,IACAE,IACAwK,IACAnL,IACAY,IACAuE,IACAzhB,IACAG,IACAK,IACA0qB,IACAC,IACAC,IACAC,IACAzN,IACA3F,IACAE,IACAE,IACAG,IACAE,IACAU,IACAC,IACAiS,IACAtzB,IACAkhB,IACA7K,IACAkd,IACAC,IACAvzB,IACAulB,IACAE,IACAK,IACAgF,IACA5qB,IACA6d,IACAK,IACAZ,IACAI,IACA5f,IACAsgB,IACAiB,IACAH,I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","file":"static/js/main.8afcb801.chunk.js","sourcesContent":["import LocalizedStrings from \"react-localization\";\n\nexport const lang = new LocalizedStrings({\n de: {\n app: {\n help: \"Hilfe\",\n save: \"Speichern\",\n confirm: \"Bestätigen\",\n cancel: \"Abbrechen\",\n edit: \"Ändern\",\n remove: \"Entfernen\",\n link: \"Link\",\n yes: \"Ja\",\n no: \"Nein\",\n uploadText1:\n \"Klicken oder ziehen Sie eine Datei in diesen Bereich, um sie hochzuladen.\",\n uploadText2: \"Wir erlauben nur\",\n uploadText3: \"Formate mit einer max. Größe von \",\n and: \"und\",\n dataFor: \"Data as of \",\n new: \"Neu\",\n expandAll: \"Alle ausklappen\",\n collapseAll: \"Alle einklappen\",\n },\n routes: {\n home: \"/\",\n confirm: \"/confirm\",\n reset: \"/reset\",\n unsubscribe: \"/unsubscribe\",\n fundsInFocus: \"/funds-in-focus\",\n ratingInFocus: \"/rating-in-focus\",\n watchlist: \"/watchlist\",\n news: \"/news\",\n newsDetails: \"/news/:slug?/:id\",\n reports: \"/reports\",\n reportsDetails: \"/reports/:slug?/:id\",\n oif: \"/oif\",\n oifDetails: \"/oif/:slug?/:id\",\n searchResults: \"/search-results\",\n filterSearchResults: \"/filter-search-results\",\n advSearchResults: \"/advanced-search-results\",\n details: \"/details/:slug/:id\",\n premium: \"/premium\",\n methodology: \"/methodology\",\n methodologies: \"/methodologies\",\n legalNotice: \"/legal-notice\",\n privacyPolicy: \"/privacy-policy\",\n contact: \"/contact\",\n savedSearches: \"/saved-searches\",\n rechtlicheHinweise: \"/rechtliche-hinweise\",\n termsOfUse: \"/terms-of-use\",\n termsAndConditions: \"/terms-and-conditions\",\n conferencesListLoading: \"/conferences-loading\",\n conferencesList: \"/conferences\",\n conferencesList2: \"/conferences_list\",\n conferenceDetails: \"/conferences/:id\",\n assetManagerDashboard: \"/asset-manager-dashboard/:id\",\n fundRatings: \"/asset-manager-dashboard/:id/fund-ratings\",\n teamRating: \"/asset-manager-dashboard/:id/team-rating\",\n profileEdit: \"/asset-manager-dashboard/:id/profile\",\n assetManagerStats: \"/asset-manager-dashboard/:id/stats\",\n assetManagerConferences: \"/asset-manager-dashboard/:id/conferences\",\n surveyEquityFund: \"/survey/equity-fund\",\n surveySovereignBondFund: \"/survey/sovereign-bond-fund\",\n surveyCorporateBondFund: \"/survey/corporate-bond-fund\",\n surveyAggregateBondFund: \"/survey/aggregate-bond-fund\",\n surveyMultiAssetFund: \"/survey/multi-asset-fund\",\n surveyEsgCompany: \"/survey/company\",\n surveyEsgFund: \"/survey/fund\",\n dekaSurvey: \"/deka-survey\",\n assetManagerDetails: \"/asset-managers/:id\",\n assetManagers: \"/asset-managers\",\n assetManagerNews: \"/asset-manager-news/:slug/:id\",\n editFund: \"/edit-fund/:id\",\n userProfile: \"/profile\",\n benchmarks: \"/benchmarks/:id\",\n aifPage: \"/aif-page\",\n wholesale: \"/professional-investors\",\n selectSurvey: \"/select-survey\",\n scopeAwards: \"/scope-awards/:year([0-9]{4})\",\n scopeInvestmentAwards: \"/scope-awards/:year/investment\",\n scopeAlternativeInvestmentAwards:\n \"/scope-awards/:year/alternative-investment\",\n scopeCertificateAwards: \"/scope-awards/:year/certificate\",\n scopeAwardsCategories: \"/scope-awards/:year/:name/categories\",\n scopeAwardsNominees: \"/scope-awards/:year/:name/nominees\",\n scopeAwardsWinners: \"/scope-awards/:year/:name/winners\",\n nominationAltInvestmentRequirements:\n \"/nomination-alternative-investment-requirements\",\n nominationInvestmentRequirements: \"/nomination-investment-requirements\",\n nominationCertificateRequirements: \"/nomination-certificate-requirements\",\n portrait: \"/scope-fund-analysis\",\n },\n meta: {\n home: \"Fonds-Ratings, Rankings und Vergleiche | ScopeExplorer\",\n homeDesc:\n \"ScopeExplorer bietet einfache und unabhängige Entscheidungshilfen bei der Auswahl aus über 6000 Fonds mit Rating. Prüfen Sie jetzt Ihren Fonds!\",\n searchResults: \"Suchergebnisse | ScopeExplorer\",\n searchResultsDesc:\n \"Erfahren Sie, wo Ihr Fonds im Vergleichsranking steht. Auf Basis unseres unabhängigen Fondsratings die besten Fonds in der Vergleichsgruppe finden.\",\n fundsInFocus:\n \"Im Fokus: Auswahl innovativer, erfolgreicher Fonds | ScopeExplorer\",\n fundsInFocusDesc:\n \"Fondsauswahl unserer Rating Analysten mit herausragenden Ergebnissen oder innovativer Investmentideen und Managementansätze. Nutzen Sie unsere Erfahrung.\",\n ratingInFocus: \"Team Ratings | ScopeExplorer\",\n premium: \"Premium | ScopeExplorer\",\n contact: \"Kontakt | ScopeExplorer\",\n methodology: \"Unsere Bewertung Fonds Rating Methodik | ScopeExplorer\",\n methodologyDesc:\n \"Die Scope Fonds Rating Methodik, seit mehr als 20 Jahren etabliert. So bewerten wir Fonds transparent und nachvollziehbar für Ihre Investition.\",\n methodologiesDesc:\n \"In diesem Bereich finden Sie die vollständigen Dokumente zu den Methodiken und Ratingprozessen, nach denen Scope die Bewertung von Fonds, Asset Managern und Zertifikate-Anbietern vornimmt.\",\n legalNotice: \"Impressum | ScopeExplorer\",\n privacy: \"Datenschutzerklärung | Scope Explorer\",\n news: \"Aktuelle Nachrichten, Analysen und Veröffentlichungen | ScopeExplorer\",\n newsDesc:\n \"Aktuelle News, Analysen und Hintergründe zu Fonds und Investments der unabhängigen Ratingagentur Scope. Erfahren Sie, was den Markt bewegt!\",\n scopeExplorer: \"ScopeExplorer\",\n notFound: \"404 - Nicht gefunden | ScopeExplorer\",\n fundDetails: \"Fonds details\",\n fundDetailsDesc:\n \"Alle Fakten und Bewertungen zu Ihrem Fonds. Erfahren Sie im Detail wie sich der Fonds entwickelt und alle Faktoren für Ihre Anlageentscheidung.\",\n newsDetails: \"News details | ScopeExplorer\",\n watchlist: \"Watchlist | ScopeExplorer\",\n privacyPolicy: \"Datenschutzhinweise | ScopeExplorer\",\n rechtlicheHinweise: \"Rechtliche Hinweise | ScopeExplorer\",\n termsOfUse: \"Nutzungsbedingungen | ScopeExplorer\",\n termsAndConditions:\n \"Besondere Bestimmungen der Offene Immobilienfonds Studie 2020 | ScopeExplorer\",\n },\n assetManagerCharts: {\n allMyProductsChart: \"Views nach Produkten\",\n myTop10FundsChart: \"Meine Top 10 Fonds\",\n myProductsInPeergroupChart: \"Meine Produkte in Peergroups\",\n top10FundsInSeChart: \"Top 10 Fonds im ScopeExplorer\",\n top10PeergroupsInSeChart: \"Top 10 Peergroups im ScopeExplorer\",\n },\n assetManagers: {\n listTitle: \"Fondsanbieter\",\n title: \"Unternehmensprofil\",\n profile: \"Profil\",\n profileSubtitle:\n \"Hier können Sie Angaben zu Ihrem Unternehmensprofil erfassen und ändern. Diese Informationen werden Nutzern auf dem ScopeExplorer unter der Rubrik „Fondsanbieter“ präsentiert.\",\n subtitle:\n \"In diesem Bereich finden Sie ausführliche Asset Manager Portraits – unter anderem mit Scopes Einschätzung zur Qualität des Anbieters und mit den Bewertungen sämtlicher Fonds des jeweiligen Asset Managers.\",\n address_1: \"Adresszeile 1\",\n address_2: \"Adresszeile 2\",\n email: \"E-mail\",\n phone: \"Telefon\",\n founded: \"Gegründet\",\n link: \"Link\",\n linkText: \"Link text\",\n description_short: \"Kurzbeschreibung\",\n description: \"Beschreibung\",\n descriptionFixedQuestion:\n \"Ihre gesuchte Fondsgesellschaft ist noch nicht dabei?\",\n descriptionFixedText:\n \"Wir erweitern regelmäßig unsere Übersichten zu den Fondsanbietern. Über die Suche finden Sie heute bereits die Fonds aller Gesellschaften.\",\n list: \"Fondsliste des Unternehmens\",\n employees: \"Mitarbeiter des Unternehmens\",\n dateFrom: \"von:\",\n dateTo: \"bis: \",\n contact: \"Kontakt\",\n topCompanyFunds: \"Top 10 Fonds\",\n contactAssetManagerSuccess:\n \"Kontaktaufnahme mit Asset Manager beauftragt. \",\n contactAssetManagerError: \"Fehler beim Senden der Anfrage.\",\n investmentFocus: \"Anlageklasse\",\n investmentRegion: \"Investment Regionen\",\n volume: \"Anzahl der bewerteten Fonds\",\n aum: \"Verwaltetes Vermögen\",\n companySize: \"Anzahl Mitarbeiter\",\n scopeEvalutaion: \"Einschätzung von Scope\",\n scopeFundRating: \"Scope Fondsrating\",\n topRated: \"Top-Bewertungen\",\n news: \"Research des Fondsmanagers\",\n esg: \"Nachhaltigkeitsprofil\",\n investorRating: \"Einschätzungen von Investoren\",\n amTeams: \"Portfoliomanager\",\n from: \"Stand:\",\n macroOverview: \"Markteinschätzung\",\n macroOverviewOf: \"Markteinschätzung von\",\n selectedFunds: \"Fondsauswahl des Asset Manager\",\n statistics: \"Web-Statistiken\",\n statisticsSubtitle:\n \"Auf dieser Seite finden Sie verschiedene Auswertungen zur Nutzung der Produkte Ihres Hauses im ScopeExplorer. Sie sehen auf einen Blick, welche Ihrer Fonds in den letzten Monaten das größte Interesse gefunden haben.\",\n conferences: \"Portfolio-Manager-Konferenz\",\n conferences2: \"Portfolio-Manager-Konferenzen\",\n moreStatistics: \"Mehr Statistiken\",\n add: \"Hinzufügen\",\n remove: \"Löschen\",\n apply: \"Anwenden\",\n selection: \"Ihre Fondsauswahl\",\n funds: \"Fonds\",\n text1:\n \"Von der Gesamtzahl der zu Ihrer Auswahl passenden Fonds sind im Schaubild und in der Tabelle die\",\n text2: \"am besten bewerteten Fonds dargestellt.\",\n requestSuccess: \"Vielen Dank! Wir haben Ihre Anfrage erhalten.\",\n fields: {\n image: \"Bild\",\n title: \"Titel\",\n language: \"Sprache\",\n pdfFile: \"PDF Datei\",\n first_name: \"Vorname\",\n last_name: \"Nachname\",\n position: \"Position\",\n department: \"Abteilung\",\n summary: \"Summary (max. 500 Zeichen)\",\n },\n },\n assetManagerDashboard: {\n title: \"Asset Manager\",\n subtitle: \"\",\n errors: {\n default: \"Fehler beim Senden der Anfrage.\",\n 400: \"Wrong request data\",\n 401: \"Unauthorized\",\n fillInFields: \"Bitte sämtliche Pflichtfelder ausfüllen.\",\n },\n newsSuccess: \"News gespeichert.\",\n newsRemoved: \"News entfernt.\",\n portfolioManagerSuccess: \"Portfolio Manager gespeichert.\",\n portfolioManagerRemoved: \"Portfolio Manager entfernt.\",\n documentSuccess: \"Dokument gespeichert.\",\n documentRemoved: \"Dokument entfernt.\",\n fundSuccess: \"Fonds gespeichert.\",\n noDocuments: \"Aktuell keine Dokumente vorhanden.\",\n selectedFundsSuccess: \"Ausgewählte Fonds gespeichert.\",\n success: \"Fondsanbieter gespeichert.\",\n docCategories: {\n \"product-presentation\": \"Produktpräsentation\",\n \"product-flyer\": \"Produkt-Flyer\",\n factsheet: \"Factsheet\",\n \"product-research\": \"Produkt-Research\",\n \"product-analysis\": \"Produktanalyse\",\n },\n macroOverviewOptions: {\n veryNegative: \"Sehr negativ\",\n negative: \"Negativ\",\n neutral: \"Neutral\",\n positive: \"Positiv\",\n veryPositive: \"Sehr positiv\",\n },\n volumeTooltip: \"Diese Angabe wird von Scope eingetragen.\",\n investorRatingTooltip: \"Diese Angabe wird von Scope eingetragen.\",\n investorRatingRequest: \"Anfordern\",\n status: \"Status\",\n conferenceStatuses: {\n pending: \"In Bearbeitung\",\n accepted: \"Genehmigt\",\n rejected: \"Rejected\",\n },\n registerForConferenceSuccess: \"Ihre Anfrage wurde an Scope gesendet.\",\n requestConferenceSuccess:\n \"Die Verifizierungs-Email wurde an Scope gesendet.\",\n requestError: \"Fehler beim Senden der Anfrage.\",\n macroOverviewDate: \"Datum der Markteinschätzung\",\n unsubscribedFromConference: \"Unsubscribed from conference.\",\n },\n assetManagerShareClassesTable: {\n accordionButton: \"Anteilsklassen\",\n shareClass: \"Anteilsklasse\",\n isin: \"ISIN\",\n ogc: \"OGC\",\n minInvestment: \"Mindestanlage\",\n currency: \"Währung\",\n },\n wholesale: {\n title: \"Mit dem ScopeExplorer als professioneller Investor durchstarten\",\n header1:\n \"Professionelle Features der Scope Fondsselektion für Ihren Alltag\",\n text1:\n \"Mit dem ScopeExplorer haben Sie kostenlos Zugriff auf die gesamte Scope Fondsdatenbank.\",\n text2:\n \"Umfassende Selektionsfilter für über 160 Peergroups und individuelle Selektionslisten unterstützen Sie bei ihrem täglichen Research.\",\n text3:\n \"Nutzen Sie zusätzlich unsere qualitativen Analysen und Empfehlungslisten der Scope Fondsselektion.\",\n header2: \"Registrieren Sie sich jetzt für die kostenlose Nutzung\",\n header3: \"des ScopeExplorers als professioneller Anleger.\",\n text4: \"Kostenlos registrieren\",\n header4: \"Portfolio Manager Konferenzen\",\n text5:\n \"Mit den Portfolio Manager Konferenzen bieten wir Ihnen ein Online-Konferenzformat mit analytischem Tiefgang. Unsere Analysten aus der Scope Fondsselektion sprechen die Themen an, die in unserer Bewertung von Fonds relevant sind und widmen uns Ihren Fragen in der Diskussion mit dem Portfolio Manager.\",\n text6: \"Registrieren\",\n header5: \"COVID-19: Die Auswirkungen eingeordnet\",\n text7:\n \"Mit unseren Crash Drawdown wissen Sie auf einen Blick, wie sich Ihre Fonds historisch in der aktuellen Lage schlagen.\",\n header6: \"Wir zeigen was Fonds wirklich können\",\n text8:\n \"Nutzen Sie unsere Erfahrung aus über 20 Jahren in der Bewertung von Investmentfonds. Über 6.000 Fonds finden Sie mit Bewertung in unserer Datenbank, monatlich aktualisiert. Mit unserer etablierten Methodik fokussieren wir auf die konstante Wertentwicklung eines Fonds. In über 160 Peergroups zeigen wir Ihnen unser exklusives Ranking der besten Produkte in unserer Bewertung.\",\n text9:\n \"Profitieren Sie von unserer Erfahrung und nutzen Sie alle zusätzlichen Angebote für professionelle Investoren\",\n text10: \"mit Ihrer Registrierung.\",\n },\n profile: {\n title: \"Unternehmensprofil\",\n subtitle:\n \"Halten Sie die Basisinformationen zu Ihrer Gesellschaft immer auf dem aktuellen Stand\",\n retail: \"Privater Investor\",\n wholesale: \"Professioneller Investor\",\n assetManager: \"Asset Manager\",\n },\n fundRatings: {\n title: \"Fondsratings\",\n subtitle: \"Ratings für Ihre Fonds anzeigen oder anfordern.\",\n subtitle2:\n \"Auf dieser Seite sehen Sie sämtliche Fonds ihres Hauses, die auf dem ScopeExplorer derzeit verfügbar sind. Sie können zu jedem Fonds Dokumente hochladen und zu bestimmten Fonds Ratings anfordern.\",\n },\n teamRating: {\n title: \"Teamratings\",\n subtitle: \"Team Ratings anzeigen oder anfordern.\",\n },\n selectSurvey: {\n esgQuestionnaire: \"Scope ESG Fragebogen\",\n esgQuestionnaires: \"Scope ESG Fragebögen\",\n esgFundQuestionnaire: \"Scope ESG Fondsfragebogen\",\n esgCompanyQuestionnaire: \"Scope ESG Unternehmensfragebogen\",\n dvmEsgQuestionnaire: \"DVM ESG Fragebogen\",\n downladQuestionnaires: \"Download aller Fragebögen\",\n downloadAMSummary: \"Download aller Fragebögen Ihrer Company\",\n uploadMarkedAsArticle89: \"Kennzeichnung als Artikel 8/9 Produkt\",\n downloadEsgFundSummary: \"Alle ausgefüllten Fondsfragebögen herunterladen\",\n downloadEsgCompanySummary:\n \"Alle ausgefüllten Unternehmensfragebögen herunterladen\",\n footerText1:\n \"Für weitere Informationen oder bei Rückfragen können Sie uns unter folgender\",\n footerText2: \"Email-Adresse kontaktieren: \",\n dvmDescription: `Dieser Fragebogen ermittelt mit Hilfe von 16 Fragen die\n Ausrichtung von Asset Management Gesellschaften hinsichtlich der\n Ausrichtung aller drei E-, S- und G-Kriterien. Einzelne\n Produktstrategien und Filterkriterien werden hier nicht\n behandelt.`,\n },\n esgSurvey: {\n title: \"ESG-Fragebögen\",\n subtitle: \"\",\n filename: \"ESG Questionnaire \",\n },\n esgSurveyInfoModal: {\n title: \"Sehr geehrte(r) Umfrageteilnehmer/in,\",\n text1:\n \"Die im Wege dieser Umfrage erhobenen und nicht-personenbezogenen Daten werden für interne analytische Zwecke der Scope Fund Analysis GmbH, sowie zur Weitergabe an einen beschränken Kundenkreis der Scope Fund Analysis GmbH (darunter fallen ausschließlich institutionelle Investoren wie bspw. Dachfondsmanager, Pensionsfonds, etc.) verwendet.\",\n text2:\n \"Ihre Teilnahme an dieser Umfrage gilt als Einverständnis zur eingehend beschriebenen Verwendung der von Ihnen mitgeteilten Informationen.\",\n text3:\n \"Hinsichtlich personenbezogener Daten findet keine Verarbeitung dieser im Zusammenhang mit den sonstigen erhobenen Daten statt, sondern eine anonyme Auswertungen, die keinen Bezug zu Ihrer Person hat. Wir werden Ihre Antworten nicht zur Bewertung Ihrer Person nutzen und Ihre Antworten nicht zusammen mit den Sie identifizierenden Daten (z.B. Name, E-Mail Adresse) speichern. Selbstverständlich stehen Ihnen gegenüber der erhebenden Stelle (Scope Fund Analysis GmbH) das Recht auf Auskunft sowie der Löschung Ihrer personenbezogenen Daten unter Beachtung der gesetzlichen Vorgaben aus der DSGVO zu. Ihre personenbezogenen Daten werden für diese Umfrage aufgrund eines berechtigten Interesses nach Art. 6 Abs. 1 lit. 6 DSGVO erhoben.\",\n button1: \"Cancel\",\n button2: \"Ja, ich bin professioneller Anleger\",\n },\n uploadArticle89Modal: {\n errors: {\n default: \"Fehler beim Senden der Anfrage.\",\n 400: \"Wrong request data\",\n 401: \"Unauthorized\",\n fillInFields: \"Bitte sämtliche Pflichtfelder ausfüllen.\",\n },\n title: \"Article 8/9 upload\",\n text1:\n \"Bitte laden Sie hier eine Excel-Datei mit der Kennzeichnung Ihrer Fonds als Artikel 8 oder Artikel 9 Produkt hoch.\",\n newArticle89Uploaded: \"Upload erfolgreich\",\n },\n removeFundKeyFactsModal: {\n text1: \"Do you want to delete these fund key facts?\",\n button1: \"Yes\",\n button2: \"No\",\n },\n eventsCaldendar: {\n title: \"Eventkalender\",\n subtitle: \"Hier erwartet Sie bald neuer Inhalt\",\n },\n conferenceInfoModal: {\n title: \"Unser Konferenzangebot für professionelle Anleger\",\n text1:\n \"Diese Website richtet sich ausschließlich an Anleger, die professionelle Anleger im Sinne der Richtlinie 2014/65/EU (MiFID II) sind oder die Kriterien erfüllen, die nach der MiFID II Voraussetzung für eine Einstufung von Privatanlegern als professionelle Anleger sind, und an semiprofessionelle Anleger im Sinne des Kapitalanlagegesetzbuchs (KAGB). Die Website richtet sich nicht an Privatanleger, die die vorgenannten Voraussetzungen nicht erfüllen.\",\n text2:\n \"Bitte bestätigen Sie, dass Sie die o.g. Voraussetzungen für eine Einstufung als professioneller oder als semiprofessioneller Anleger erfüllen.\",\n text3:\n \"Scope Fund Analysis GmbH als Anbieter vom ScopeExplorer informiert lediglich über Produkte und Dienstleistungen und erteilt keine Anlageberatung unter Berücksichtigung individueller Umstände. Scope Fund Analysis GmbH übernimmt keine Haftung für die unberechtigte Nutzung der angebotenen Inhalte.\",\n button1: \"Zurück zur Startseite\",\n button2: \"Ja, ich bin professioneller Anleger\",\n },\n assetManagerInfoModal: {\n title: \"Für professionelle Anleger\",\n text1:\n \"Das Informationsmaterial von Comgest richtet sich ausschließlich an professionelle Anleger. Bitte bestätigen Sie, dass Sie professioneller Anleger sind um fortzufahren.\",\n text2:\n \"Scope übernimmt keine Haftung für Schäden, die aus der unberechtigten oder fehlerhaften Nutzung von Inhalten entstehen.\",\n button1: \"Zurück zur Startseite\",\n button2: \"Ja, ich bin professioneller Anleger\",\n },\n conferences: {\n title: \"Portfolio-Manager-Konferenz\",\n subtitle: \"Hier erwartet Sie bald neuer Inhalt\",\n listTitle: \"Portfolio Manager Konferenz\",\n listTitle2: \"Das Online-Eventformat mit analytischem Tiefgang.\",\n listSubtitle:\n \"Unsere Analysten aus der Scope Fondsselektion begrüßen ausgewählte Portfolio Manager zum Gespräch. Wir sprechen die Themen an, die in unserer Bewertung von Fonds relevant sind und widmen uns Ihren Fragen.\",\n pastEventsTitle: \"Video on Demand\",\n pastEventsSubtitle:\n \"Rufen Sie jetzt die Videoaufzeichnung ausgewählter Veranstaltungen jederzeit auf.\",\n webinare: \"Web-Konferenz\",\n live: \"Live\",\n files: \"Die angehangten Dateien\",\n speakers: \"Sprecher\",\n date: \"Datum\",\n startTime: \"Uhrzeit Beginn\",\n endTime: \"Uhrzeit Ende\",\n info: \"Informationen\",\n moreInfo2: \"Zur Aufzeichnung\",\n additionalInfo: \"Additional information\",\n register: \"Registrierung\",\n editSuccess: \"Die Konferenz wurde erfolgreich gespeichert.\",\n signOutConfirmText:\n \"Möchten Sie sich wirklich aus dieser Konferenz austragen?\",\n signOutButtonText: \"Austragen\",\n furtherConferenceText1:\n \"Das neue Online-Eventformat für den ScopeExplorer\",\n furtherConferenceText2:\n \"Wir ergänzen regelmäßig weitere Online-Events. Mit einer\",\n furtherConferenceText3: \"Registrierung\",\n furtherConferenceText4:\n \"als professioneller Investor erhalten Sie unsere Veranstaltung-Updates auch bequem per E-Mail.\",\n conferencesFormModalTitle: \"Hinzufügen einer Portfolio-Manager-Konferenz\",\n addConference: \"Eine neue Webinare hinzufugen\",\n },\n savedSearches: {\n date: \"Datum\",\n link: \"Link\",\n remove: \"Entfernen\",\n goTo: \"Zu den Suchergebnissen\",\n addSuccess: \"Suche erfolgreich gespeichert.\",\n addError: \"Fehler beim Speichern der Suche.\",\n removeSuccess: \"Suche erfolgreich entfernt.\",\n removeError: \"Fehler beim Entfernen der Suche.\",\n },\n ratingInFocus: {\n overview: \"Ausgewählte Teamratings\",\n strategy: \"Strategie:\",\n rating: \"Rating:\",\n category: \"Kategorie:\",\n aum: \"AuM:\",\n team: \"Teamleitung:\",\n reportDownload: \"Report Download\",\n requestTeamRating: \"Team Rating anfordern\",\n name: \"Name des Investment Teams\",\n },\n cookieInfo: {\n text: \"Diese Website verwendet Cookies, um die Nutzerfreundlichkeit zu verbessern. Durch die weitere Nutzung der Website stimmen Sie dem zu. Weitere Infos zu Cookies und deren Deaktivierung finden Sie \",\n link: \"hier.\",\n understand: \"Verstanden\",\n },\n menu: {\n home: \"Suche\",\n searchResults: \"Suchergebnisse\",\n login: \"Anmelden\",\n fundsInFocus: \"Fonds im Fokus\",\n ratingInFocus: \"Team Ratings\",\n publications: \"Publikationen\",\n news: \"News\",\n reports: \"Reports\",\n oif: \"Offene Immobilienfonds\",\n methodology: \"Methodik\",\n methodologies: \"Weitere Methodiken\",\n premium: \"Premium\",\n watchlist: \"Watchlist\",\n savedSearches: \"Gespeicherte Suchen\",\n logout: \"Logout\",\n logoutSuccess: \"Logout erfolgreich.\",\n register: \"Registrierung\",\n companies: \"Fondsanbieter\",\n assetManagers: \"Dashboard\",\n conferences: \"Konferenzen\",\n services: \"Services\",\n aif: \"OIF Studie 2022\",\n wholesale: \"Für professionelle Investoren\",\n survey: \"ESG-Fragebogen\",\n scopeAwards: \"Scope Awards\",\n scopeAwardsDetails: \"Scope Awards Details\",\n scopeAwardsCategories: \"Kategorien\",\n scopeAwardsNominees: \"Nominierungen\",\n scopeAwardsWinners: \"Gewinner\",\n nominationAltInvestmentRequirements: \"Nominierungsbedingungen\",\n nominationInvestmentsRequirements: \"Nominierungsbedingungen & Methodik\",\n nominationCertificateRequirements: \"Nominierungsbedingungen\",\n portrait: \"Scope Fund Analysis\",\n },\n footer: {\n privacyPolicy: \"Datenschutzhinweise\",\n rechtlicheHinweise: \"Rechtliche Hinweise\",\n termsOfUse: \"Nutzungsbedingungen\",\n legalNotice: \"Impressum\",\n methodology: \"Methodik\",\n methodologies: \"Weitere Methodiken\",\n contact: \"Kontakt\",\n copyright: `Copyright © ${new Date().getFullYear()}`,\n scopeAnalysis: \"Scope Fund Analysis GmbH\",\n },\n validation: {\n required: \"Erforderlich.\",\n email: \"Ungültige E-Mail-Adresse.\",\n passwordsMatch: \"Passwörter stimmen nicht überein.\",\n containLetter: \"Muss mind. einen buchstaben beinhalten.\",\n uppercaseLetter: \"Muss mind. ein großbuchstabe beinhalten.\",\n lowercaseLetter: \"Muss mind. ein kleiner buchstabe beinhalten.\",\n containNumber: \"Muss mind. eine ziffer beinhalten.\",\n specialCharacter: \"Muss mind. ein besonderer charakter beinhalten.\",\n maxValuePart1: \"Maximal\",\n maxValuePart2: \"Zeichen erlaubt.\",\n minValuePart1: \"Muss mind.\",\n minValuePart2: \"Zeichen beinhalten.\",\n uploadFile: \"Bitte laden Sie die richtige Datei hoch.\",\n },\n help: {\n of: \"von\",\n },\n unsubscribe: {\n title: \"Abmeldebestätigung\",\n subtitle: \"Newsletter / Watchlist\",\n text1:\n \"Sie haben sich erfolgreich von unseren E-Mail Services abgemeldet.\",\n text2:\n \"Danke, dass Sie die Newsletter und Watchlist-Benachrichtigungen des ScopeExplorer genutzt haben.\",\n return: \"Zurück zur Startseite\",\n },\n home: {\n header:\n \"Das Portal bietet eine innovative und zugleich einfache Entscheidungshilfe bei der Auswahl von Fonds\",\n noAccount: \"Noch nicht registriert?\",\n haveAccount: \"Bereits registriert?\",\n register: \"Jetzt kostenfrei registrieren.\",\n or: \"kostenfrei an.\",\n signIn: \"Anmelden.\",\n login: \"Anmelden\",\n close: \"Schließen\",\n email: \"E-Mail\",\n password: \"Passwort\",\n forgotPassword: \"Passwort vergessen\",\n logIn: \"Anmelden\",\n loginWithFacebook: \"Login with Facebook\",\n loginWithGoogle: \"Login with Google\",\n logInHere: \"Anmelden\",\n remember: \"Anmeldedaten speichern\",\n repeatPassword: \"Passwort wiederholen\",\n newPassword: \"Neues Passwort\",\n signUp: \"Registrieren\",\n registration: \"Registrierung\",\n wholesaleRegistration: \"Registrierung - Professioneller Investor\",\n retailUsers: \"Privatanleger\",\n wholesaleUsers: \"Professioneller Investor\",\n accountType: \"Nutzertyp\",\n name: \"Name\",\n firstName: \"Vorname\",\n lastName: \"Nachname\",\n companyName: \"Unternehmen\",\n unit: \"Funktion\",\n phoneNumber: \"Telefon / Mobil\",\n videoTitle:\n \"ScopeExplorer unterstützt Sie darin, bessere Investmententscheidungen zu treffen. Wie genau zeigt das Video.\",\n homeBoxTitle1: \"Aktuelle Studien\",\n homeBoxTitle2: \"Aktuelle Ratings\",\n homeBoxTitle3: \"Fakten zu Fonds\",\n homeBoxTitle4: \"Warum Fondsratings?\",\n homeBoxTitle5: \"Fondsanalyse\",\n homeBoxTitle6: \"Das Unternehmen\",\n homeBoxContent4:\n \"Das Scope Fondsrating reflektiert die relevantesten Rendite- und Risikoaspekte eines Fonds. Durch das Rating wird ein systematischer Vergleich von thematisch ähnlichen Fonds ermöglicht.\",\n homeBoxContent5:\n \"Die Analysten von Scope bewerten seit mehr als 20 Jahren Investmentfonds - in Deutschland derzeit mehr als 6.000. Die Analysten-Teams sitzen in Frankfurt a.M. und in Berlin.\",\n homeBoxContent6:\n \"Die Scope Group ist mit mehr als 200 Mitarbeitern der größte europäische Anbieter von Ratings, Research und Analysen – sowohl in der Bewertung von Investmentfonds und Asset Managern als auch Kreditrisiken.\",\n more: \"Mehr\",\n moreScopeAward: \"Informieren\",\n moreStudien: \"Alle Studien\",\n moreRatings: \"Mehr Ratings\",\n moreFacts: \"Mehr Fakten\",\n moreNews: \"Alle News\",\n homeNewsTitle: \"News und aktuelle Analysen\",\n scopeAwardWinnersText: \"Die Gewinner stehen fest!\",\n scopeAwardsNomineesText:\n \"Die Nominierungeng für die Scope Investment Awards stehen fest\",\n },\n search: {\n header: \"PRÜFEN\",\n subheader: \"Gehört Ihr Fonds zu den Top-Angeboten?\",\n search: \"Suche\",\n placeholder: \"Fondssuche nach Namen, WKN oder ISIN\",\n advancedSearch: \"Erweiterte Suche\",\n simpleSearch: \"Einfache Suche\",\n searchBox1: \"Größte europäische Ratingagentur\",\n searchBox2: \"Über 6.000 Fonds bewertet\",\n searchBox3: \"Mehr als 20 Jahre Erfahrung\",\n selectedItems: \"Ausgewählte Elemente\",\n searchTitle1: \"Auswählen\",\n searchText11: \"Finden Sie den passenden Fonds\",\n searchText12: \"entsprechend Ihren Prioritäten.\",\n searchTitle2: \"Entdecken\",\n searchText21: \"Vorstellungen von Top-Fonds\",\n searchText22: \"aus den unterschiedlichsten Märkten.\",\n searchTitle3: \"Rankings\",\n searchText31: \"Die besten Fonds auf einen Blick.\",\n searchText32: \"\",\n selected: \"ausgewählt\",\n },\n advancedSearch: {\n search: \"Suche\",\n reset: \"Zurücksetzen\",\n placeholder: \"Fondssuche nach Namen, WKN oder ISIN\",\n scopePeergroup: \"Scope Vergleichsgruppe\",\n investmentFocus: \"Investmentfokus\",\n company: \"Unternehmen\",\n fundSize: \"Fonds Volumen\",\n universe: \"Universum\",\n scopeRating: \"Scope Rating\",\n uncheckAll: \"Auswahl löschen\",\n fundsSelected: \"Ausgewählte Fonds\",\n searchResults: \"Suchergebnisse\",\n saveCustomFields: \"Benutzerdefinierte Suche speichern\",\n saveSearch: \"Suche speichern\",\n mainTranche: \"Nur Haupttranchen anzeigen\",\n addSuccess: \"Benutzerdefinierte Felder erfolgreich gespeichert.\",\n addError: \"Fehler beim Speichern der benutzerdefinierten Feldern.\",\n errors: {\n default:\n \"Abruf von Fonds derzeit nicht möglich. Bitte versuchen Sie es später noch einmal.\",\n },\n resetFormFilters: \"Zurücksetzen, um Filtereinstellungen auszuwählen.\",\n resetFormAutocomplete:\n \"Bitte klicken Sie zuerst auf ,,Zurücksetzen‘‘ um dieses Suchfeld zu verwenden.\",\n },\n filterSearch: {\n search: \"Jetzt finden\",\n step: \"Schritt\",\n step1: \"In welche Anlageklasse wollen Sie investieren?\",\n step2: \"In welchen Regionen möchten Sie investieren?\",\n step3: \"Wählen Sie die Risikoklassen\",\n low: \"Niedrig\",\n medium: \"Mittel\",\n high: \"Hoch\",\n found: \"Treffer\",\n apply: \"Fondsliste anzeigen\",\n reset: \"Filter zurücksetzen\",\n northAmerica: \"Nordamerika\",\n europe: \"Europa\",\n asia: \"Asien\",\n emergingMarkets: \"Schwellenlände\",\n germany: \"Deutschland\",\n world: \"Global\",\n applyAgain:\n \"Die Filterkriterien wurden geändert. Bitte führen Sie die Suche erneut aus.\",\n },\n advancedFundsList: {\n pleaseSelectFund:\n \"Keine passenden Fonds für ausgewählte Kriterien gefunden.\",\n filename: \"Scope Fonds Export.xlsx\",\n name: \"Name\",\n columnSelection: \"Spaltenauswahl:\",\n prev: \"Zurück\",\n next: \"Weiter\",\n of: \"von\",\n search: \"Suche\",\n requestRating: \"Rating anfordern\",\n exportSelected: \"Auswahl exportieren\",\n exportAll: \"komplette Liste exportieren\",\n downloadXls: \"Download XLS\",\n selectFunds: \"Fonds auswählen zum Export.\",\n selectFundsToCompare: \"Fonds zum Vergleich auswählen.\",\n selectFundsToRequest:\n \"Bitte wählen Sie Fonds aus, für die sie ein Rating anfordern möchten.\",\n selectFundsToExport: \"Fonds für den Export auswählen.\",\n selectMax3Funds: \"Wählen Sie maximal 3 Fonds zum Vergleich aus.\",\n },\n premium: {\n title: \"Fondsselektion und Nachhaltigkeit\",\n subtitle:\n \"Scope Fund Analysis bietet eine von Produktanbietern unabhängige und objektive Fondsselektion sowie eine Bewertung der Nachhaltigkeit ausgewählter Fonds an.\",\n peergroup: \"Vergleichsgruppe\",\n fundSelection: \"Scope Empfehlungsliste \",\n scopeRecommendation: \"Auszug - aktiv gemanagte Fonds\",\n requestCustomizedSolution: \"Anfrage: Individuelle Selektion\",\n requestFullList: \"Komplette Liste anfordern\",\n esg: \"Scope Nachhaltigkeitsanalyse\",\n gid: \"ESG - Greenness Indicator\",\n checkYourFund: \"Gehört Ihr Fonds zu den Top-Produkten?\",\n requestEsgPortfolioCheck: \"Request ESG Portfolio Check\",\n requestEsgTeamRating: \"ESG Team Rating anfordern\",\n sendRequest: \"Anfrage senden\",\n recommendedListTooltip:\n \"Scope Fund Analysis bietet eine unabhängige und objektive Fondsselektion. Dabei kommen quantitative und qualitative Bewertungskriterien zum Einsatz. Ziel ist es, Manager und Fonds zu identifizieren, die risikoadjustierte Überrenditen erzielen.\",\n esgTooltip:\n \"Der Scope ESG Greenness Indicator zeigt die jeweilige Ausprägung eines Fonds in Bezug auf sein Nachhaltigkeitsprofils. Dabei werden die Faktoren Environment = Umwelt, Social = Soziales und Governance = Unternehmensführung jeweils einzeln betrachtet.\",\n success: \"Anfrage erfolgreich gesendet\",\n environment: \"Umwelt\",\n social: \"Soziales\",\n governance: \"Unternehmensführung\",\n active: \"Aktiv\",\n passive: \"Passiv\",\n fundSearch: \"Fondssuche\",\n fundSearchText:\n \"Sie können hier sämtliche von Scope mit einer ESG-Bewertung versehene Fonds durchsuchen.\",\n exclusion: \"Ausschlusskriterien\",\n exclusionShort: \"Ausschluss\",\n noSearchResults: \"No results found. Please \",\n contactUs: \"contact us.\",\n fillInFields: \"Pflichtfelder ausfüllen\",\n subscribeListSuccess: \"Erfolgreich abonniert.\",\n unsubscribeListSuccess: \"Erfolgreich abgemeldet.\",\n subscribeListError: \"Fehler beim Senden der Anfrage.\",\n errors: {\n default: \"Fehler beim Senden der Anfrage.\",\n },\n },\n aifBenchmarks: {\n property_portfolio_short: \"Immobilienportfolio\",\n sustainability_short: \"Nachhaltigkeit\",\n financial_structure_short: \"Finanzstruktur\",\n asset_management_short: `Asset Management`,\n fund_management_short: \"Fondsmanagement\",\n rating_total_short: \"Risikoscore\",\n property_portfolio: \"Scope Bewertung des Immobilienportfolios\",\n sustainability: \"Scope Bewertung der Nachhaltigkeit\",\n financial_structure: \"Scope Bewertung der Finanzstruktur\",\n asset_management: \"Scope Bewertung des Asset Managements\",\n fund_management: \"Scope Bewertung des Fondsmanagements\",\n rating_total: \"Scope Bewertung des Risikos\",\n rating_total_2:\n \"(Hinweis: je höher die Bewertung, desto geringer das Risiko)\",\n ter: \"TER\",\n net_volume: \"Nettofondsvermögen (in Mio.)\",\n real_volume: \"Immobilienvermögen (in Mio.)\",\n objects_number: \"Objektanzahl\",\n liquidity_ratio: \"Liquiditätsquote\",\n credit_ratio: \"Kreditquote\",\n geographical_german: \"Anteil deutscher Immobilien\",\n geographical_european: \"Anteil europäischer Immobilien\",\n geographical_non_european: \"Anteil globaler Immobilien\",\n sectoral_office: \"Anteil Nutzungsart Büro\",\n sectoral_retail: \"Anteil Nutzungsart Handel\",\n sectoral_living: \"Anteil Nutzungsart Wohnen\",\n sectoral_hotel: \"Anteil Nutzungsart Hotel\",\n sectoral_logistics: \"Anteil Nutzungsart Logistik\",\n performance_1y: \"Performance 1 Jahr\",\n performance_5y: \"Performance 5 Jahre p.a.\",\n volatility_5y: \"Volatilität 5 Jahre p.a.\",\n occupancy: \"Vermietungsquote\",\n rating_esg: \"Scope Bewertung der Nachhaltigkeit\",\n wault: \"durchschn. gewichtete Mietvertragsrestlaufzeit (WAULT)\",\n },\n aifFunds: {\n excellent: \"Exzellent\",\n veryGood: \"Sehr gut\",\n good: \"Gut\",\n balanced: \"Ausgewogen\",\n modest: \"Mäßig\",\n veryModest: \"Sehr mäßig\",\n poor: \"Schwach\",\n likelyCapitalLost: \"Schwach\",\n substantialCapitalLost: \"Schwach\",\n negativeTurn: \"Negative Rendite\",\n benchmarks: \"Benchmark-Tool\",\n benchmarksSubtitle:\n \"Die offenen Immobilien-Publikumsfonds in Deutschland\",\n scopeCardParameters: \"Score Card Parameter\",\n yourParameters: \"Ihre Parameter\",\n exportToExcel: \"Export to Excel\",\n addParameters: \"Parameter wählen\",\n modalStep1:\n \"Wählen Sie die Fonds, die Sie vergleichen möchten (Schritt1 von 2)\",\n modalStep2:\n \"Wählen Sie die Parameter, nach denen Sie die Fonds vergleichen möchten (Schritt 2 von 2)\",\n selectAll: \"Alle auswählen\",\n next: \"Weiter\",\n submit: \"Anwenden\",\n selectFunds: \"Select funds to see scale\",\n sectoralAllocation: \"Nutzungsartenverteilung\",\n geographicalAllocation: \"Geografische Verteilung\",\n sectoralOffice: \"Büro\",\n sectoralRetail: \"Einzelhandel\",\n sectoralLiving: \"Wohnen\",\n sectoralHotel: \"Hotel\",\n sectoralLogistics: \"Logistik\",\n geographicalGerman: \"Deutsche Immobilien\",\n geographicalEuropean: \"Europäische Immobilien\",\n geographicalNonEuropean: \"Globale Immobilien\",\n others: \"Sonstige\",\n moreInformation: \"Informieren\",\n selectYourProduct: \"Vorab registrieren\",\n pleaseChoose: \"Bitte wählen Sie ein Paket aus\",\n buy: \"Zahlungspflichtig bestellen\",\n bannerText:\n \"Die Offene Immobilienfonds Studie 2024 – Ratings & Research mit einer einzigartigen Daten- und Analysetiefe\",\n signUpText: \"Sign up or Log in to view\",\n signUp: \"Sign up\",\n paidDocuments: \"Bezahlte Dokumente\",\n documents: \"Fondsdokumente\",\n views: \"Views\",\n clicks: \"Besucher\",\n register: \"Registerung\",\n registerNow:\n \"Registrieren Sie sich bereits jetzt als Professioneller Investor und erhalten Sie die Studie 2022 kostenfrei.\",\n },\n invoiceModal: {\n title: \"Vielen Dank für die Bestellung.\",\n text1: \"Wir haben Ihnen die Rechnung per Email zugesendet.\",\n text2:\n \"Sie können bequem zwischen den in der Rechnung genannten Zahlungsmethoden wählen.\",\n payOnline: \"Direkt online bezahlen\",\n downloadInvoice: \"Per Rechnung bezahlen\",\n },\n purchaseModal: {\n title: \"Bestellung abschließen\",\n yourOrder: \"Ihre Bestellung\",\n selectedLicense: \"Gewähltes Produkt:\",\n totalPrice: \"Gesamtpreis:\",\n agreement1:\n \"Durch Klicken der Schaltfläche „Zahlungspflichtig bestellen“ geben Sie ein verbindliches Kaufangebot gemäß der besonderen Bedingungen der Offenen Immobilienfonds Studie 2020 ab, die Sie\",\n agreement2: \"hier\",\n agreement3: \"einsehen können.\",\n selectProduct: \"Please select product.\",\n billingAddress: \"Rechnungsadresse\",\n company: \"Unternehmen\",\n street: \"Straße, Nr.\",\n postalCode: \"Postleitzahl\",\n city: \"Ort\",\n taxId: \"Umsatzsteuer ID\",\n contactPerson: \"Ansprechpartner\",\n purchase: \"Bestellen\",\n purchaseError: \"You need to be wholesale user to buy license.\",\n },\n fundFields: {\n logo: \"Logo\",\n wkn: \"WKN\",\n tranche: \"Tranche\",\n position_vs_peergroup: \"Rang\",\n tranche_currency: \"Währung der Tranche\",\n peergroup: \"Vergleichsgruppe\",\n primary: \"Haupttranche\",\n universe: \"Universum\",\n company: \"Unternehmen\",\n ter: \"Laufende Kosten\",\n volume: \"Fondsvolumen\",\n volume_currency: \"Währung\",\n initialCharge: \"Erstausgabeaufschlag\",\n accumulating: \"Thesaurierend\",\n firstRating: \"Erstrating\",\n perf_1m: \"Rendite 1 Mon.\",\n perf_3m: \"Rendite 3 Mon.\",\n perf_6m: \"Rendite 6 Mon.\",\n perf_1y: \"Rendite 1 J.\",\n perf_3y: \"Rendite 3 J.\",\n perf_5y: \"Rendite 5 J.\",\n perf_since_inception: \"Rendite seit Auflage\",\n perf_last_year: \"Rendite Vorjahr\",\n volatility_3y: \"Volatilität 3 Jahre\",\n initial_charge: \"Erstausgabeaufschlag\",\n isin: \"ISIN\",\n srri: \"SRRI\",\n rating_unchanged_since: \"Rating unverändert seit\",\n prob_loss_month_3y: \"Verlustwahrscheinlichkeit 3 J.\",\n prob_profit_month_3y: \"Gewinnwahrscheinlichkeit 3 J.\",\n max_loss_3y: \"Max. Verlust 3 Jahre\",\n max_profit_3y: \"Max. Gewinn 3 Jahre\",\n rank: \"Rating\",\n rating_points: \"Ratingpunkte\",\n risk_class: \"Risikoklasse\",\n fee: \"Gebühren\",\n documents: \"Unterlagen\",\n return_fee: \"Rückgabeaufschlag\",\n min_investment: \"Mindestanlage\",\n issue_date: \"Auflagedatum\",\n value_at_risk_3y: \"Value at Risk 3 Jahre\",\n is_award_nominated: \"Is award nominated\",\n is_focus: \"Auswahl des Fondsanbieters\",\n is_selection: \"Fondsselektion\",\n },\n compareFunds: {\n compareFunds: \"Vergleiche Fonds\",\n currentFund: \"Aktueller Fonds\",\n compare: \"Vergleiche\",\n selectFundToCompare: \"Fondssuche\",\n },\n fund: {\n amDocuments: \"Asset Manager Dokumente\",\n winners: \"Gewinner\",\n nominee: \"Nominiert\",\n dataFrom: \"Daten zum \",\n ratingFrom: \"Rating zum:\",\n paidDocuments: \"Bezahlte Dokumente\",\n name: \"Name\",\n fundName: \"Fondsname\",\n wkn: \"WKN\",\n isin: \"ISIN\",\n nav: \"NAV\",\n ter: \"Laufende Kosten\",\n photo: \"Photo\",\n terTooltip:\n \"Laufende Kosten: Summe der aus dem Fondsvermögen zu bestreitenden Kosten und Gebühren eines Fonds in Prozent des Fondsvermögens, inkl. der Kosten von Zielfonds im Fondsvermögen, ohne Transaktionskosten und erfolgsabhängige Vergütungen.\",\n srri: \"SRRI\",\n sfdr: \"SFDR\",\n sfdrTooltip:\n \"SFDR: Sustainable Finance Disclosure Regulation / EU Offenlegungsverordnung\",\n srriTooltip:\n \"Risikoklassifizierung auf Basis des “Synthetic Risk and Reward Indicator” (SRRI). Der SRRI reflektiert die Wertschwankungen eines Fonds und wird auf Basis EUweiter, einheitlicher Vorschriften ermittelt. Die Klassifizierung erfolgt auf einer Skala von 1 bis 7. Je höher der SRRI, desto höher das Risikoprofil eines Fonds\",\n srriTooltip2:\n \"Synthetischer Risiko-Rendite-Indikator. Einstufung des Risiko in eine von 7 Risikoklassen. Der Risikoindikator beruht auf der Volatilität des Fonds in den letzten fünf Jahren. Je höher die Risikoklasse ist, desto größeren Schwankungen unterliegt der Fonds.\",\n price: \"Kurs (NAV)\",\n positionInPeergroup: \"Position in Peergroup\",\n positionInRanking: \"Position im Rang: \",\n positionInTheRanking: \"Die\",\n position: \"Position in Scope Peergroup\",\n top: \"Top\",\n peergroup: \"Vergleichsgruppe\",\n rankInPeergroup: \"Rang in der Vergleichsgruppe\",\n performance: \"Rendite\",\n performancePercent: \"Rendite %\",\n performanceRisk: \"Rendite / Risiko\",\n performance_3y_long: \"Rendite 3 jahre\",\n fundPerformance: \"Fonds Rendite\",\n peergroupAverage: \"Durchschnitt der Vergleichsgruppe\",\n scopeFundRating: \"Scope Fondsrating\",\n ratingHistory: \"Ratinghistorie\",\n rating: \"Rating\",\n ratingTooltip:\n \"Bewertung des Fonds entweder auf Basis eines qualitativen oder quantitativen Ratings. Die Skala reicht von A (“sehr gut”) bis hin zu E (“schwach”).\",\n aifRatingTooltip:\n \"Die Skala reicht von aaa (“Exzellent”) bis hin zu d (“Negative Rendite”).\",\n rank: \"Rang\",\n fundRank: \"Fonds Rang\",\n fundRating: \"Fonds Rang\",\n fundRatingTooltip:\n \"Bewertung des Fonds entweder auf Basis eines qualitativen oder quantitativen Ratings. Die Skala reicht von A (“sehr gut”) bis hin zu E (“schwach”).\",\n fundPoints: \"Fonds punkte\",\n risk: \"Risiko\",\n costBar: \"Kosten\",\n riskTooltip: \"Risiko gemessen als Volatilität des Fonds.\",\n riskPercent: \"Risiko %\",\n volatility: \"Volatilität\",\n volatilityPercent: \"Volatilität %\",\n fundRisk: \"Fonds risiko\",\n safety: \"Risiko- bewertung\",\n performanceRiskChart: \"Rendite / Risiko\",\n riskClassification: \"Risikoklassifizierung\",\n maxLoss: \"Max loss (p.a.)\",\n moreInfo: \"Mehr Info\",\n back: \"Zurück\",\n fundsInFocus: \"Fonds im Fokus\",\n strategy: \"Strategie\",\n ongoingCharge: \"Laufende Kosten\",\n ongoingChargeTooltip:\n \"Laufende Kosten: Summe der aus dem Fondsvermögen zu bestreitenden Kosten und Gebühren eines Fonds in Prozent des Fondsvermögens, inkl. der Kosten von Zielfonds im Fondsvermögen, ohne Transaktionskosten und erfolgsabhängige Vergütungen.\",\n performanceFee: \"Erfolgsabhängige Vergütung\",\n fundFacts: \"Fondsdaten\",\n company: \"Unternehmen\",\n manager: \"Portfoliomanager\",\n launchDate: \"Auflagedatum\",\n accumulating: \"Thesaurierend\",\n quantitativeLabel: \"Quantitatives Rating\",\n qualitativeLabel: \"Qualitatives Rating\",\n quantitativeTooltip:\n \"Rating basierend auf quantitativen Ratingkriterien.\",\n qualitativeTooltip:\n \"Rating schließt sowohl quantitative als auch qualitative Kriterien ein.\",\n period: \"Kennzahl und Periode\",\n returnInPeriod: \"Berechnungszeitraum\",\n fund: \"Fonds\",\n noRatingAvailable: \"Kein Rating vorhanden.\",\n performance_1y: \"1 Jahr (p.a.)\",\n performance_3y: \"3 Jahre (p.a.)\",\n performance_5y: \"5 Jahre (p.a.)\",\n performance_10y: \"10 Jahre (p.a.)\",\n performance_since_inception: \"Seit Auflage (p.a.)\",\n performance_current_year: new Date().getFullYear(),\n max_drawdown_crash: \"Crash Drawdown\",\n crashDrawdownChart: \"Crash Drawdown\",\n crashDrawdownSubtitle:\n \"Wie hat sich der Fonds in vergangenen Stressphasen geschlagen?\",\n crashDrawdownTooltip:\n \"Für viele Anleger ist es weniger relevant, wie gut ein Fonds performt, wenn die Börsen steigen, sondern wie er sich in turbulenten Marktphasen schlägt. Eine Antwort auf diese Frage bietet die Grafik unten. Darin sind fünf Stressphasen aus den vergangenen zehn Jahren eingezeichnet (grau). Zu jeder dieser Stressphasen sehen Sie den maximalen Verlust des ausgewählten Fonds in diesem Zeitraum im Vergleich mit dem Durchschnitt der Vergleichsgruppe sowie dem Vergleichsindex.\",\n market: \"MSCI World\",\n marketLong: \"MSCI World Standard (Markt)\",\n max_drawdown_1y: \"Max Drawdown 1 Jahr\",\n max_drawdown_3y: \"Max Drawdown 3 Jahre\",\n max_drawdown_5y: \"Max Drawdown 5 Jahre\",\n max_drawdown_since_inception: \"Max Drawdown seit Auflage\",\n volatility_1y: \"Volatilität 1 Jahr (p.a.)\",\n volatility_3y: \"Volatilität 3 Jahre (p.a.)\",\n volatility_5y: \"Volatilität 5 Jahre (p.a.)\",\n volatility_since_inception: \"Volatilität seit Auflagejahr\",\n volume: \"Fondsvolumen\",\n volumeUnit: \"(in Mio. EUR)\",\n volumeUnitShort: \"Mio. EUR\",\n ratingPoints: \"Ratingpunkte\",\n ratingPointsShort: \"Rating-punkte\",\n ratingPointsTooltip:\n \"Scope vergibt für jeden Fonds Ratingpunkte auf einer Skala von 1 bis 100 . Die Ratingpunkte zeigen die relative Bewertung eines Fonds im Vergleich zu seiner Vergleichsgruppe an. Je höher die Punktzahl, desto besser wird der Fonds von Scope eingeschätzt.\",\n fundsInPeerGroup: \"Fonds der Vergleichsgruppe\",\n topFundsTitle: \"Fonds im Fokus\",\n topFundsSubtitle:\n \"Unsere Analysten bestimmen regelmäßig eine Auswahl an Fonds, die aktuell besondere Aufmerksamkeit verdienen – entweder aufgrund herausragender Ergebnisse oder aufgrund innovativer Investmentideen und Managementansätze.\",\n ratingInFocusSubtitle:\n \"Unsere Analysten bewerten nicht nur Fonds, sondern auch Investment Teams einzelner Asset Manager. Das Rating reflektiert zum einen die Kompetenz, Erfahrung und den Track Record und zum anderen die Prozessqualität und Ressourcenausstattung eines Investment Teams.\",\n requestTeamRatingText:\n \"Sie vermissen die Bewertung eines bestimmten Asset Managers bzw. eines Investment Teams? Kein Problem. Einfach Name des Investment Teams eingeben und Rating anfordern. Dies ist für Sie kostenlos und unverbindlich.\",\n driver: \"Rating Treiber\",\n content: \"Weitere Infos und Analysen\",\n news: \"News\",\n newsSubtitle: \"News und Infos zu Fonds\",\n readMore: \"Lesen\",\n proceedToPayment: \"Weiter zur Zahlung\",\n details: \"Details\",\n noResults: \"Keine Ergebnisse verfügbar.\",\n fundNotFound: \"Kein Treffer für den ausgewählten Fonds.\",\n notFound: \"Nicht gefunden\",\n pleaseSelectFund:\n \"Keine passenden Fonds für ausgewählte Kriterien gefunden.\",\n veryGood: \"Sehr gut\",\n good: \"Gut\",\n average: \"Durchschnittlich\",\n belowAverage: \"Unter-durchschnittlich\",\n belowAverage2: \"Unterdurchschnittlich\",\n poor: \"Schwach\",\n legend: \"Legende\",\n veryLow: \"Very low\",\n low: \"Gering\",\n mid: \"Mittel\",\n medium: \"Mittel\",\n high: \"Hoch\",\n veryHigh: \"Very high\",\n rowsPerPage: \"Zeilen pro Seite\",\n monthly_report: \"Monatsreport\",\n key_information: \"Basisinformationsblatt\",\n key_investor: \"KIID – Key Investor Information Document\",\n fund_prospect: \"Fondsprospekt\",\n annual_report: \"Jahresbericht\",\n semi_annual_report: \"Halbjahresbericht\",\n fundBars: \"Einzelbewertung | Scope Rating\",\n fundBarsTooltips: {\n performance:\n \"Bewertung der Performance-Indikatoren eines Fonds. Hierzu gehören etwa die relative Performance eines Fonds im Vergleich zu seiner Peergroup sowie die Stabilität der Fondsperformance.\",\n safety:\n \"Risikobewertung des Fonds: Je risikoärmer ein Fonds von Scope eingeschätzt wird, desto mehr Ratingpunkte erhält dieser für das Kriterium Risikobewertung.\",\n cost: 'Bewertung der laufenden Kosten (\"Ongoing Charges\") eines Fonds im Vergleich zu seiner Vergleichsgruppe. Eine hohe Bewertung für dieses Kriterium steht für niedrige Kosten.',\n esg: \"Result of evaluation by ESG aspects\",\n team: \"Bewertung des Investmentteams auf Basis qualitativer Faktoren wie Erfahrung und Ausbildung der Investmentprofis.\",\n investmentProcess:\n \"Qualitative Bewertung des Investmentprozesses hinsichtlich Disziplin und Robustheit. \",\n },\n value: \"Wert\",\n noInformation: \"Keine Information.\",\n showMoreDetails: \"Mehr Details anzeigen\",\n hideMoreDetails: \"Details ausblenden\",\n avg: \"Durchschnitt\",\n print: \"Drucken\",\n watchlistSubtitle:\n \"Sie möchten die Ratingveränderungen einzelner Fonds unkompliziert im Blick behalten? Dann setzen Sie die entsprechenden Fonds einfach auf Ihre 'Watchlist' – und wir informieren Sie über jede Ratingänderung per Email.\",\n watchlist: \"Watchlist\",\n watchlistTitle: \"Meine Fonds - Watchlist\",\n watchlistAdded: \"Fonds zur Watchlist hinzugefügt.\",\n watchlistRemoved: \"Fonds von Watchlist gelöscht.\",\n watchlistAddError: \"Fehler beim Hinzufügen zur Watchlist.\",\n watchlistDeleteError: \"Fehler beim Entfernen aus Watchlist.\",\n noWatchlist: \"Fonds zur Watchlist hinzufügen.\",\n actualRating: \"Aktuelles Rating\",\n prevRating: \"Letzte Ratingänderung\",\n upgrade: \"Upgrade\",\n downgrade: \"Downgrade\",\n same: \"Keine\",\n showAvg: \"Durchschnitt anzeigen\",\n hideAvg: \"Durchschnitt verbergen\",\n date: \"Datum\",\n cost: \"Kosten- bewertung\",\n esg: \"ESG Score\",\n general: \"Stammdaten\",\n custom: \"Angepasst\",\n costs: \"Gebühren\",\n valueLong: \"Wertentwicklung\",\n team: \"Team\",\n scopeRating: \"Scope Rating\",\n scopeRanking: \"Scope Ranking\",\n of: \"von\",\n investmentProcess: \"Investmentprozess\",\n noRatingInfo:\n 'Für diesen Fonds ist derzeit noch keine Bewertung verfügbar. Wenn Sie an einer qualitativen Bewertung interessiert sind, klicken Sie bitte auf \"Bewertung anfordern\". Dies ist kostenlos und unverbindlich.',\n noRatingInfoShort:\n \"Für diesen Fonds steht noch keine qualitative Bewertung zur Verfügung. Sollten Sie an einer qualitativen Bewertung interessiert sein, dann klicken Sie bitte einfach auf „Rating anfordern“. Dies ist für Sie kostenlos und unverbindlich.\",\n noFundBarsInfo:\n \"Für diesen Fonds steht noch keine qualitative Bewertung zur Verfügung.\",\n request: {\n rating: \"Rating anfordern\",\n award: \"Request award nomination\",\n focus: \"Request focus\",\n selection: \"Request selection\",\n teamRating: \"Request team rating\",\n sendRequest: \"Anfordern\",\n theme: \"Themen anfordern\",\n info: \"Informationen anfordern\",\n },\n requestQualitativeRating: \"Qualitatives Rating kostenfrei anfordern\",\n fundRequestSent:\n \"Vielen Dank! Wir haben Ihre Anfrage erhalten. Scope wird für Fonds, für die besonders häufig ein Rating angefordert wird, ein qualitatives Rating erstellen.\",\n teamRequestSent:\n \"Vielen Dank! Wir haben Ihre Anfrage erhalten. Scope wird für Investment Teams, für die besonders häufig eine Bewertung angefordert wird, ein qualitatives Rating erstellen.\",\n anonymous: \"Anonymous\",\n noContent:\n \"Für diesen Fonds liegen derzeit keine weiteren Informationen vor. Sind Sie an Details zum Fonds, seiner Anlagestrategie und den Einschätzungen des Fondsmanagements interessiert? Dann klicken Sie bitte einfach auf „Informationen anfordern“. Dies ist für Sie kostenlos und unverbindlich. \",\n requestInfo: \"Informationen anfordern\",\n compareWithPeergroup: \"Vergleich mit Peergroup Ø\",\n worse: \"Schlechter\",\n equal: \"Gleich\",\n better: \"Besser\",\n pts: \"Pkt.\",\n all: \"Alle\",\n equity: \"Aktien\",\n multiasset: \"Mischfonds\",\n fixedIncome: \"Anleihen\",\n other: \"Sonstige\",\n ratio: \"Ratio\",\n ratioTooltip:\n \"Diese Kennzahl drückt das einfache Verhältnis von Performance zu Risiko (gemessen an der Volatilität) eines Fonds aus. Je größer die Kennzahl ist, desto vorteilhafter ist das Verhältnis aus Rendite und Risiko aus Sicht eines Anlegers. In Abgrenzung zur „Sharpe Ratio“ wird bei dieser Kennzahl der risikolose Zins nicht berücksichtigt.\",\n ratioDesc: \"Verhältnis von Rendite zu Risiko\",\n trancheRatingTooltip:\n \"Der angezeigte Rang bezieht sich stets auf die Haupttranche eines Fonds. Die von Ihnen ausgewählte ISIN ist eine Nebentranche, für die kein separater Rang ermittelt wird.\",\n institutional:\n \"Die ausgewählte ISIN ist eine institutionelle Tranche des Fonds mit hohen Mindestanlagesummen. Sie steht institutionellen Investoren offen.\",\n recordDateText:\n \"Gegenstand der Bewertungen & Berechnungen sind Datenlieferungen der Kapitalverwaltungsgesellschaften & öffentlich zugängliche Daten.\",\n recordDate1:\n \"Das Rating sowie die Berechnung sämtlicher Kennzahlen basieren auf Daten zum \",\n recordDate2:\n \"Gegenstand der Bewertungen & Berechnungen ist das Fondsuniversum in Deutschland.\",\n recordDate3:\n \"Gegenstand der Berechnungen sind öffentlich zugängliche Daten.\",\n fundsListHint:\n \"Die unten aufgeführten Fonds sind nach Ratingpunkten sortiert. Bei gleicher Ratingpunktanzahl ist das Risiko-Rendite-Verhältnis ausschlaggebend.\",\n minInvestment: \"Mindestanlage\",\n recordDate: \"Daten zum\",\n currency: \"Währung\",\n professionalInfo: \"Nur für professionelle Anleger\",\n noRatingDriver:\n \"Für diesen Fonds steht noch keine qualitative Bewertung zur Verfügung. Sollten Sie an einer qualitativen Bewertung interessiert sein, dann klicken Sie bitte einfach auf „Rating anfordern“. Dies ist für Sie kostenlos und unverbindlich.\",\n winnerLabel: \"Scope Award 2020: Gewinner\",\n winnerTooltip:\n \"Dieser Fonds war Gewinner bei den Scope Investment Awards 2022\",\n views: \"views\",\n upload: \"Hochladen\",\n viewFunds: \"View fonds\",\n success_dependent_compensation: \"Success dependent compensation\",\n objects_number: \"Objektanzahl\",\n liquidity_ratio: \"Liquiditätsquote\",\n debt_ratio: \"Fremdkapitalquote\",\n currency2: \"Fondswährung\",\n rental_ratio: \"Vermietungsquote\",\n ratingScore: \"Rating Scores\",\n ratingJustification: \"Ratingbegründung\",\n ratingDriver: \"Ratingtreiber\",\n deleteDocumentConfirm:\n \"Sind Sie sicher, dass Sie dieses Dokument löschen möchten?\",\n deleteNewsConfirm:\n \"Sind Sie sicher, dass Sie diesen News-Artikel löschen möchten?\",\n deletePMConfirm:\n \"Sind Sie sicher, dass Sie diesen Portfolio Manager entfernen möchten?\",\n fundReport: \"Fonds Report\",\n },\n fundCharts: {\n showAll: \"Alle Tabellen anzeigen\",\n hideAll: \"Alle Tabellen ausblenden\",\n show: \"Anzeigen\",\n showRating: \"Rating anzeigen\",\n hide: \"Ausblenden\",\n year_1: \"1 Jahr\",\n year_3: \"3 Jahre\",\n year_5: \"5 Jahre\",\n volatility_1y: \"Volatilität 1 Jahr (p.a.)\",\n volatility_3y: \"Volatilität 3 Jahre (p.a.)\",\n volatility_5y: \"Volatilität 5 Jahre (p.a.)\",\n performance_1y: \"Rendite 1 Jahr (p.a.)\",\n performance_3y: \"Rendite 3 Jahre (p.a.)\",\n performance_5y: \"Rendite 5 Jahre (p.a.)\",\n perf_1y: \"Rendite 1 J.\",\n perf_3y: \"Rendite 3 J.\",\n perf_5y: \"Rendite 5 J.\",\n export: \"Exportieren\",\n numberOfFunds: \"Anzahl Fonds\",\n ratingClasses: \"Ratingklassen\",\n points: \"Punkte\",\n interpretation: \"Bewertung\",\n noData: \"Keine Daten vorhanden.\",\n noChartData: \"Keine Daten vorhanden.\",\n performanceChart: {\n title: \"Rendite in EUR\",\n date: \"Datum\",\n performance: \"Rendite\",\n fund: \"Fonds\",\n index: \"Index\",\n fundPerformance: \"Fonds Rendite in %\",\n indexPerformance: \"Index Rendite in %\",\n peergroupPerformance: \"Vergleichsgruppe Rendite in %\",\n peergroup: \"Vergleichsgruppe Ø\",\n },\n peergroupComparisonChart: {\n title: \"Peergroup-Vergleich\",\n highchartTitle: \"Performance der Peergroup in EUR\",\n highchartSubtitle: \"Gleitende 3-Monats-Performance\",\n date: \"Datum\",\n performance: \"Rendite \",\n fundPerformance: \"Fonds Rendite in %\",\n bestFundPerformance: \"Performance bester Fonds in %\",\n worstFundPerformance: \"Performance schlechtester Fonds in %\",\n fund: \"Fonds\",\n bestFund: \"Bester Fonds\",\n worstFund: \"Schlechtester Fonds\",\n },\n fundRatingChart: {\n title: \"Fondsrating-Historie\",\n date: \"Datum\",\n performance: \"Rendite %\",\n rank: \"Rang\",\n rating: \"Scope Fondsrating\",\n privateText:\n \"Für weitere Einzelheiten zum Rating, wenden Sie sich bitte an info@scopeanalysis.com\",\n },\n distributionChart: {\n title: \"Verteilung innerhalb der Peergroup\",\n riskIndicator: \"Risiko-Indikator\",\n performanceIndicator: \"Performance-Indikator\",\n good: \"Stark\",\n bad: \"Schwach\",\n fund: \"Fonds\",\n fundsInPeergroup: \"Fonds in der Peergroup\",\n },\n riskReturnChart: {\n title: \"Volatilität / Rendite Matrix\",\n volatility: \"Volatilität:\",\n perf: \"Rendite:\",\n fundVolatility: \"Fonds Volatilität\",\n fundPerformance: \"Fonds Rendite\",\n indexVolatility: \"Index Volatilität\",\n indexPerformance: \"Index Rendite\",\n peergroupVolatility: \"Vergleichsgruppe Volatilität\",\n peergroupPerformance: \"Vergleichsgruppe Rendite\",\n fund: \"Fonds\",\n index: \"Index\",\n peergroup: \"Vergleichsgruppe Ø\",\n },\n crashDrawdownChart: {\n date: \"Datum\",\n return: \"Rückgabe\",\n financialCrisis: \"Finanzkrise\",\n creditCrisis: \"Europäische Kreditkrise\",\n recessionFears: \"Weltweite Rezessionsängste\",\n tradeConflicts: \"Zinsängste & Handelskonflikt\",\n covid19: \"COVID-19\",\n ukraineCrisis: \"Russian invasion of Ukraine\",\n },\n classDistributionChart: {\n title: \"Verteilung der Ratingklassen\",\n },\n evolutionOfRiskChart: {\n title: \"Volatilitat im Zeitverlauf \",\n fund: \"Fonds\",\n bestFunds: \"Bester Fonds\",\n bestFund: \"Bester Fonds\",\n worstFund: \"Schlechtester Fonds\",\n date: \"Datum\",\n fundRisk: \"Fonds risiko in %\",\n bestFundRisk: \"Risiko bester Fonds in %\",\n worstFundRisk: \"Risiko schlechtester Fonds in %\",\n },\n },\n contact: {\n contact: \"Kontakt\",\n summary:\n \"Haben Sie Fragen oder Anregungen? Kein Problem: Füllen Sie unser Kontaktformular unten aus und wir melden uns schnellstmöglich bei Ihnen.\",\n name: \"Name\",\n email: \"E-Mail\",\n phone: \"Mobil\",\n message: \"Nachricht\",\n send: \"E-Mail senden\",\n success: \"E-Mail erfolgreich versendet.\",\n fillInFields: \"Bitte sämtliche Pflichtfelder ausfüllen.\",\n error: \"E-Mail senden fehlgeschlagen. Bitte erneut versuchen.\",\n scopeAnalysis: \"Scope Fund Analysis GmbH\",\n managingDirectors: \"Geschäftsführer\",\n headquartersBerlin: \"Berlin\",\n frankfurtOffice: \"Frankfurt am Main\",\n },\n privacy: {\n title: \"Datenschutzerklärung\",\n purposeOfPolicy: \"1. Ziel der Datenschutzbestimmungen\",\n website:\n \"Die Webseite („Scope Fund Analysis“) wird von Scope Fund Analysis GmbH betrieben.\",\n thisPrivacyPolicy:\n \"Die Datenschutzbestimmungen dienen Scope Fund Analysis GmbH („Wir“ oder „der für die Verarbeitung Verantwortliche“) als Grundlage für das Erfassen und die Verarbeitung personenbezogener Daten.\",\n personalDataMeans:\n \"Personenbezogene Daten sind Einzelangaben über persönliche oder sachliche Verhältnisse einer bestimmten Person („Personenbezogene Daten“).\",\n thisPolicySetsOut:\n \"Die Datenschutzbestimmungen schaffen notwendige Rahmenbedingungen für die Verarbeitung personenbezogener Daten von Internetnutzern, Kunden oder Interessenten der Scope Fund Analysis Webseite („Sie“ oder „Betroffene Personen“) durch den für die Verarbeitung Verantwortlichen.\",\n pleaseReadTheFollowing:\n \"Bitte lesen Sie die folgenden Informationen sorgfältig durch, um unsere Richtlinien und die Verarbeitung Ihrer personenbezogenen Daten zu verstehen.\",\n theProvisionsSetOut:\n \"Die in dieser Datenschutzerklärung aufgeführten Richtlinien sind durch das Bundesdatenschutzgesetz gesetzlich festgelegt und an die Datenschutzprinzipien angepasst - EU-Verordnung 2016/679 („DSGVO“).\",\n forMoreInformation:\n \"Für nähere Ausführungen über den bestehenden Rechtsrahmen, lesen Sie bitte den DSGVOText unter (https://ec.europa.eu/info/law/law-topic/data-protection/data-protection-eu_de).\",\n whichData: \"2. Datenerfassung durch Scope Fund Analysis GmbH\",\n theTypeOfData:\n \"Die Art der aufgezeichneten Daten, die wir erheben müssen, variieren je nach Geschäftsbeziehung mit der betroffenen Person:\",\n clientsAndSubscribers: \"Kunden und Interessenten:\",\n theDataController:\n \"Der Verantwortliche wird ausschließlich solche personenbezogene Daten verlangen, die für die Erfüllung des Vertrages zwischen einem Kunden und dem Verantwortlichen und die Erbringung seiner Leistungen unabdingbar sind; beispielsweise benötigt der für die Verarbeitung Verantwortliche folgende Informationen:\",\n nameAndSurname: \"Vor- und Nachname\",\n emailAddress: \"E-Mail-Adresse\",\n telephoneNumber: \"Telefonnummer/Faxnummer\",\n companyAndBusiness: \"Firmen- und Geschäftsadresse\",\n password: \"Passwort\",\n gender: \"Geschlecht\",\n websiteUsers: \"Webseiten-Nutzer:\",\n theDataControllersWebsite:\n \"Es werden einige Cookies auf der Webseite des Verantwortlichen eingesetzt, die in Einzelfällen die Besuchervorgänge des Nutzers verfolgen. Ziel ist es, dem Kunden beim Besuch der Scope Fund Analysis Plattformen ein besseres und reibungsloses Kundenerlebnis zu bieten; für weitere Einzelheiten zu Cookies, lesen Sie bitte den Abschnitt „Verwendung von Cookies“.\",\n whyScopeAnalysis:\n \"3. Warum Scope Fund Analysis GmbH personenbezogene Daten erfasst\",\n theCollectionOfPersonal:\n \"Die Erfassung von personenbezogenen Daten durch Scope Fund Analysis muss im Zusammenhang mit dem „Vertragszweck“ stehen: jegliche personenbezogene Angaben, die der für die Verarbeitung Verantwortliche von der betroffenen Person erfasst, sind für die Erfüllung der spezifischen, festgelegten und rechtmäßigen Anliegen notwendig. Diese wurden im Vorfeld im Vertrag zwischen dem für die Verarbeitung Verantwortlichen und dem Betroffenen deutlich festgelegt.\",\n asAnExample: \"Als Beispiel, bitten wir um personenbezogene Daten, um:\",\n provideRegular:\n \"Unseren Interessenten regelmäßige Informationen und Updates zu übermitteln\",\n performAThorough:\n \"Eine umfassende Analyse der Fördermittel und der Vermögensverwaltungsgesellschaften durchzuführen, so wie es im Vertrag mit der/ den betroffenen Person(en) festgelegt wurde\",\n providingTechnical:\n \"Auf den Scope Fund Analysis Onlineplattformen technische Unterstützung anzubieten\",\n sendClientsRelevant:\n \"Den Kunden relevante Marketingmaterialien (falls zutreffend) zukommen zu lassen\",\n dealWithClients: \"Auf Fragen von Kunden oder Interessenten einzugehen\",\n howScopeAnalysis:\n \"4. Wie Scope Fund Analysis GmbH personenbezogene Daten erfasst\",\n weCollectPerseonal:\n \"Wir erfassen personenbezogene Angaben von verschiedenen Quellen und hauptsächlich:\",\n directlyFromTheData:\n \"Unmittelbar vom Betroffenen durch Kontaktformulare, Vertragsanträge sowie Vertragserklärungen\",\n fromThirdParties:\n \"Von Dritten: zum Beispiel, wenn ein Kunde eine weitere Kontaktstelle für ein bestimmtes Anliegen oder eine bestimmte Dienstleistung angibt\",\n fromTheDataController:\n \"Von Plattformen des Verantwortlichen, entweder über Nutzeranmeldung oder der Überprüfung der Besuchervorgänge, die mit Hilfe von Cookies gespeichert werden.\",\n whateverMethodIsUsed:\n \"Unabhängig von der Verarbeitungsmethode, ist der für die Verarbeitung Verantwortliche dazu verpflichtet, immer genau und unverzüglich den Betroffenen zu informieren und seine ausdrückliche Einwilligung einzuholen.\",\n howScopeAnalysisHandles:\n \"5. Wie Scope Fund Analysis GmbH mit personenbezogene Daten umgeht\",\n thePersonalDataCollected:\n \"Die Verarbeitung und Nutzung von personenbezogenen Daten, die von Scope Fund Analysis Webseite erfasst wurden, sind nur unter den folgenden Grundprinzipien zulässig:\",\n minimization: \"Datensparsamkeit:\",\n onlyThosePersonal:\n \" Verarbeitet werden ausschließlich personenbezogene Daten, die mit einem Vertragszweck, welcher im Vorfeld eines Vertrages zwischen dem Verantwortlichen und dem Betroffenen festgelegt wurden, einhergehen; die Art der benötigten personenbezogenen Angaben werden von Fall zu Fall festgelegt.\",\n integrity: \"Vertraulichkeit:\",\n theInformationCollected:\n \" Personenbezogene Daten des Betroffenen werden vom Verantwortlichen jederzeit vertraulich behandelt; im Falle der Weitergabe von personenbezogenen Daten von einer Einheit zu einer anderen innerhalb der Scope Group, wird der Betroffene im Vorfeld eines Vertrages mit dem Verantwortlichen umgehend informiert (in Form einer Einwilligungserklärung) oder sobald die Weitergabe erforderlich ist; das Datengeheimnis bleibt weiterhin bestehen\",\n limitedStorage: \"Aufbewahrungsfrist:\",\n theDataControllerWill:\n \" Personenbezogene Daten der betroffenen Person werden nur so lange vom Verantwortlichen im Datenbestand gespeichert, bis alle geschäftsbezogenen Prozesse abgewickelt wurden, so wie im Vertrag zwischen den Parteien vorgesehen; nach Beendigung des Vertrages, werden personenbezogene Daten nach Ablauf der Aufbewahrungsfrist, die zwischen sechs Monaten und zehn Jahren je nach Fall variieren kann, vollständig gelöscht\",\n security: \"Datensicherheit:\",\n theDataControllerIsCommited:\n \" Der für die Verarbeitung Verantwortliche ist dazu verpflichtet, personenbezogene Daten jederzeit gegen interne und externe Bedrohungen zu schützen, einschließlich aber nicht begrenzt auf versehentlichen Verlust, unberechtigten Zugriff und unrechtmäßige Verarbeitung; Dennoch kann nicht gewährleistet werden, dass die Datenübertragung über das Internet oder anderen Netzwerken 100% sicher ist. Trotz unseres Bestrebens, Ihre personenbezogenen Angaben zu schützen, können und werden wir folglich keine Garantie für die Sicherheit jeglicher Angaben übernehmen, die Sie auf oder über die Plattformen oder Dienstleistungen weitergeben; so tun Sie dies auf eigene Gefahr\",\n transferability: \"6. Übermittlung\",\n whilePerforming:\n \"Bei der Durchführung von einzelnen Geschäftstätigkeiten kann der für die Verarbeitung Verantwortliche externe Dienstleister, die hauptsächlich für den technischen Bereich zuständig sind, nutzen.\",\n theDataControllerIsCommitedTo:\n \"Im Falle einer Datenübermittlung zu den genannten Dienstleistern, ist der Verantwortliche dazu verpflichtet, die betroffene Person darüber zu informieren und den Grund, den Zweck und die Dauer der Datenübermittlung ausführlich zu erklären.\",\n theDataControllerIsAlso:\n \"Der für die Verarbeitung Verantwortliche muss sicherstellen, dass externe Dienstleister ein zu dieser Datenschutzerklärung gleichwertiges Datenschutzniveau für die personenbezogenen Daten seiner Kunden/Anbieter gewährleisten kann.\",\n theDataControllerOperates:\n \"Der für die Verarbeitung Verantwortliche ist hauptsächlich in der EU und in den Mitgliedsstaaten des EWR tätig, was den Rechtsvorschriften der DSGVO zum Schutz personenbezogener Daten entspricht.\",\n confidentiality: \"7. Vertraulichkeit und Datensicherheit\",\n theDataControllerIsCommitedToKeep:\n \"Der für die Verarbeitung Verantwortliche ist dazu verpflichtet, personenbezogene Daten von Betroffenen zu sichern und diese jederzeit vertraulich zu behandeln.\",\n toEnsurePersonalData:\n \"Für die Sicherstellung der sorgfältigen Verarbeitung von personenbezogenen Daten, gewährleistet der für die Verarbeitung Verantwortliche, dass:\",\n personalDataAreHandled:\n \"Personenbezogene Daten von Mitarbeitern verarbeitet werden, die dafür ausgebildet sind\",\n theProcessingAndHandling:\n \"Die Verarbeitung und der Umgang mit personenbezogenen Daten angemessen überwacht ist\",\n personalDataProcessing:\n \"Die Verarbeitungsverfahren der personenbezogenen Daten des Verantwortlichen regelmäßig überprüft und begutachtet sind\",\n scopeEmployees:\n \"Scope Mitarbeiter über das Datenschutzgesetz unterrichtet und über Folgen und mögliche Auswirkungen bei einer Verletzung des Datenschutzes aufgeklärt sind.\",\n inCaseABreach:\n \"Im Falle einer Verletzung der Verordnung über die Verarbeitung der personenbezogenen Daten, muss der Verantwortliche die Betroffenen sofort benachrichtigen sowie effiziente und unverzügliche Maßnahmen ergreifen, die erforderlich sind, um die Auswirkungen der Verletzung zu verringern.\",\n specifically: \"Bei einer konkreten Verletzung des Datenschutzes:\",\n theDPOMustBe:\n \"Im Falle einer Verletzung des Datenschutzes muss der DSB binnen 24 Stunden, nachdem die Verletzung bekannt wurde, schriftlich benachrichtigt werden.\",\n theDPOWillTakeCare:\n \"Der DSB muss die Verletzung sowohl der zuständigen Aufsichtsbehörde als auch allen relevanten Anspruchspersonen melden und die Verletzung näher untersuchen.\",\n theDPOWillNotify:\n \"Der DSB informiert den Kunden und die zuständige Aufsichtsbehörde über die Ergebnisse der Untersuchungen.\",\n theDataControllerIsAlsoCommited:\n \"Darüber hinaus ist der für die Verarbeitung Verantwortliche verpflichtet, eine umfassende und gründliche, interne sowie externe Untersuchung zur Bestimmung der grundlegenden Ursache durchzuführen (falls nötig unter Beteiligung der zuständigen Aufsichtsbehörde). Erforderliche Maßnahmen muss der Verantwortliche zeitnah ergreifen, damit zukünftig Verletzungen verhindert werden können.\",\n useOfCookies: \"8. Verwendung von Cookies\",\n theDataControllerUsesCookies:\n \"Der für die Verarbeitung Verantwortliche verwendet Cookies beim Betreiben seiner Internetplattformen: Die Funktion solcher Cookies ist die Besuchervorgänge von Nutzern auf Plattformen/Webseiten teilweise zu verfolgen, mit dem Ziel, ein besseres Kundenerlebnis zu gewährleisten; in der Regel kann der Nutzer die Verwendung von Cookies an jedem PC über die Einstellungsseite anpassen.\",\n belowIsTheList:\n \"Im Folgenden finden Sie eine Liste der verwendeten Cookies, die von der Scope Fund Analysis Webseite genutzt werden:\",\n cookieName: \"Cookie name\",\n function: \"Funktion\",\n _ga: \"Cookie von Google Analytics, um Nutzer zu unterscheiden (https://developers.google.com/analytics/devguides/collection/analyticsjs/cookieusage)\",\n _gat: \"Cookie von Google Analytics, um die Anzahl der Beiträge zu drosseln (https://developers.google.com/analytics/devguides/collection/analyticsjs/cookieusage)\",\n _gid: \"Cookie von Google Analytics, um Nutzer zu unterscheiden (https://developers.google.com/analytics/devguides/collection/analyticsjs/cookieusage)\",\n socialMedia: \"9. Social Media Plugins\",\n scopeAnalysisWebsiteUses:\n \"Scope Fund Analysis verwendet Plugins von Social-Media-Plattformen, die Ihnen ermöglichen, Informationen zu teilen oder uns mit Ihrem Social-Media-Profil zu folgen.\",\n whenYouClick:\n \"Wenn Sie auf ein Plugin klicken, wird die Social Media über die Internetseite, die Sie besucht haben, und dessen Inhalt informiert.\",\n forMoreDetails:\n \"Für ausführlichere Informationen über die Datenschutzbestimmungen der einzelnen Social Media, gehen Sie bitte auf die folgenden Internetseiten:\",\n forTwitter: \"Für Twitter:\",\n twitterPlugins: \"Plugins\",\n twitterPolicy: \"Datenschutzbestimmung\",\n forLinkedIn: \"Für LinkedIn:\",\n linkedInPlugins: \"Plugins\",\n linkedInPolicy: \"Datenschutzbestimmung\",\n forBloomberg: \"Für Bloomberg:\",\n bloombergPolicy: \"Datenschutzbestimmung\",\n dataSubjectsRights: \"10. Rechte und Pflichten der Betroffene\",\n althoughSome:\n \"Betroffene sind und bleiben die Urheber der personenbezogenen Daten, auch wenn diese vom Verantwortlichen verarbeitet und gespeichert werden. Aus diesem Grund kann jeder Betroffene folgende Rechte geltend machen:\",\n rightToAccess: \"Zugriffsrecht:\",\n dataSubjectsHaveTheRight:\n \" Betroffene haben das Recht auf jegliche Informationen, die durch den Verantwortlichen gespeichert wurden, zuzugreifen; außerdem muss der für die Verarbeitung Verantwortliche alle ihm möglichen Schritte einleiten, um die Aktualität und Richtigkeit der personenbezogenen Daten sicherzustellen\",\n rightOfRevocation: \"Widerspruchsrecht:\",\n atAnyTime:\n \" Die betroffene Person hat das Recht jederzeit gegen die Verarbeitung seiner/ihrer gespeicherten personenbezogenen Daten durch den Verantwortlichen Widerspruch einzulegen; Die betroffene Person hat das Recht, von dem Verantwortlichen die Einschränkung der Verarbeitung zu verlangen, beispielsweise kann die Anwendbarkeit der Daten begrenzt werden, anstatt allen Bereichen zu widersprechen. Widerspruchsschreiben gegen die Verarbeitung von personenbezogenen Daten müssen per E-Mail an privacy@scopegroup.com gesendet werden\",\n rightOfErasure: \"Recht auf Löschung:\",\n dataSubjectsHaveTheRightTo:\n \" Die betroffene Person hat das Recht, von dem Verantwortlichen zu verlangen, dass betreffende personenbezogene Daten unverzüglich gelöscht werden: Anträge auf Löschung der personenbezogenen Daten müssen per E-Mail an privacy@scopegroup.com gesendet werden; Dieses Recht gilt nicht, wenn aus rechtlichen Gründen oder aus Gründen des öffentlichen Interesses eine Archivierung erforderlich ist\",\n rightOfDataPortability: \"Recht auf Datenübertragbarkeit:\",\n peresonalDataCanBeTransferred:\n \" Die betroffene Person hat das Recht eine Übertragung der personenbezogenen Daten direkt von einem Verantwortlichen an einen anderen Dienstleister zu erwirken; dieses Recht gilt ausschließlich, wenn die Verarbeitung auf einer Einwilligung der betroffenen Person beruht\",\n rightOfComplain: \"Beschwerderecht:\",\n dataSubjectsHaveTheRightToObject:\n \" Die betroffene Person hat das Recht die Art und Weise, wie seine/ihre personenbezogenen Daten durch den Verantwortlichen verarbeitet werden, zu beanstanden und das Recht eine Beschwerde direkt an die zuständige Aufsichtsbehörde einzureichen.\",\n theDataControllerIsCommitedToKeepThePersonal:\n \"Der für die Verarbeitung Verantwortliche ist verpflichtet gespeicherte personenbezogene Daten richtig, vollständig und auf dem neusten Stand zu speichern. Bei entsprechenden Änderungen der personenbezogenen Daten, die einen möglichen Einfluss auf die persönlichen Aufzeichnungen haben könnten, muss die betroffene Person den Verantwortlichen davon in Kenntnis setzen.\",\n updateOfThePolicy:\n \"11. Aktualität der Datenschutzbestimmungen und Anlaufstelle\",\n theDataControllerIsCommitedToPeriodically:\n \"Die Aktualität der Datenschutzbestimmungen muss in regelmäßigen Abständen vom für die Verarbeitung Verantwortlichen überprüft werden, mit dem Ziel, der betroffenen Person einen umfassenden und bestmöglichen Schutz zu gewährleisten: Auf der Webseite von Scope Fund Analysis wird, ohne Vorankündigung, die aktualisierte Version der Datenschutzbestimmungen hinterlegt. Den Nutzern wird daher dringend empfohlen, die offizielle Internetseite von Scope Fund Analysis regelmäßig auf aktualisierte Versionen zu prüfen.\",\n forFutherInformation:\n \"Für weitere Informationen oder Rückfragen bezüglich der Datenschutzbestimmungen von Scope Fund Analysis Webseite, kontaktieren Sie uns unter privacy@scopegroup.com\",\n additionalContacts: \"12. Weitere Ansprechpartner\",\n dataProtectionOfficer: \"Datenschutzbeauftragter: \",\n dataController: \"Verantwortliche für die Verarbeitung:\",\n managingDirector: \"Geschäftsführung: Lars Edler, Christian Werner\",\n commercialRegister: \"Handelsregister Berlin HRB 97933 B\",\n supervisoryAuthority: \"Aufsichtsbehörde\",\n },\n legalNotice: {\n title: \"Impressum\",\n managingDirector: \"Geschäftsführung: Lars Edler, Christian Werner\",\n commercialRegister: \"Handelsregister: Amtsgericht Berlin HRB 97933 B\",\n responsibleForTheContent:\n \"Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV:\",\n disputeSettlement: \"Streitschlichtung\",\n theEuropeanCommision:\n \"Die Europäische Kommission stellt eine Plattform zur Online-Streitbeilegung (OS) bereit: \",\n weAreNotWilling:\n \"Wir sind nicht bereit oder verpflichtet, an Streitbeilegungsverfahren vor einer Verbraucherschlichtungsstelle teilzunehmen.\",\n disclaimer: \"Haftungshinweis\",\n allInformation:\n \"Alle Angaben dieses Internetangebotes wurden sorgfältig geprüft. Wir bemühen uns, dieses Informationsangebot stetig zu erweitern und zu aktualisieren. Eine Garantie für die Vollständigkeit, Richtigkeit und letzte Aktualität kann jedoch nicht übernommen werden. Die Scope Fund Analysis GmbH stellt diese Informationen ohne jegliche Zusicherung oder Gewährleistung jedweder Art, sei sie ausdrücklich oder stillschweigend, zur Verfügung. Die Scope Fund Analysis GmbH schließt jegliche Haftung für Schäden, die direkt oder indirekt aus der Benutzung dieser Website entstehen, aus, soweit diese nicht auf Vorsatz oder grober Fahrlässigkeit von der Scope Fund Analysis GmbH beruhen. Die Scope Fund Analysis GmbH ist als Inhaltsanbieter nach § 7 Abs. 1 TMG für die eigenen Inhalte, die auf dieser Website zur Nutzung bereitgehalten werden, nach den allgemeinen Gesetzen verantwortlich. Von diesen eigenen Inhalten sind Querverweise („Links“) auf die von anderen Anbietern bereitgehaltenen Inhalte zu unterscheiden. Durch den Querverweis hält die Scope Fund Analysis GmbH insofern fremde Inhalte zur Nutzung bereit. Diese fremden Inhalte wurden bei der erstmaligen Link-Setzung daraufhin überprüft, ob durch sie eine mögliche zivilrechtliche oder strafrechtliche Verantwortlichkeit ausgelöst wird. Es ist jedoch nicht auszuschließen, dass die Inhalte im Nachhinein von den jeweiligen Anbietern verändert werden. Die Scope Fund Analysis GmbH überprüft die Inhalte, auf die sie in ihrem Angebot verweist, nicht ständig auf Veränderungen, die eine Verantwortlichkeit neu begründen könnten. Sollten Sie der Ansicht sein, dass die verlinkten externen Seiten gegen geltendes Recht verstoßen oder sonst unangemessene Inhalte haben, so teilen Sie uns dies bitte mit.\",\n theLaws:\n \"Es gilt das Recht der Bundesrepublik Deutschland unter Ausschluss des Übereinkommens der Vereinten Nationen über Verträge über den internationalen Warenkauf (CISG).\",\n ifTheClient:\n \"Ist der Kunde Kaufmann oder eine juristische Person des öffentlichen Rechts oder ein öffentlich-rechtliches Sondervermögen oder hat er keinen allgemeinen Gerichtsstand in Deutschland, ist ausschließlicher Gerichtsstand für alle Rechtsstreitigkeiten, die aus oder im Zusammenhang mit der Benutzung der Website resultieren, Berlin, Deutschland.\",\n copyright: \"Urheberrecht\",\n copyrightContent: `Copyright ${new Date().getFullYear()} / Unternehmensgruppe „Scope SE & Co. KGaA“ und die Tochtergesellschaften „Scope Ratings GmbH“, „Scope Ratings UK Ltd.“, „Scope Fund Analysis GmbH“, „Scope Innovation Lab GmbH“ und „Scope ESG Analysis GmbH“ (auch als „SCOPE“ oder „Scope Group“ bezeichnet). Alle Rechte vorbehalten. Alle Inhalte (Texte, Bilder, Grafiken, Ton-, Video- und Animationsdateien sowie deren Anordnung u. a.) auf dieser Website unterliegen dem Schutz des Marken- und/oder Urheberrechts sowie anderer Schutzgesetze. Der Rechtsschutz gilt auch gegenüber Datenbanken und ähnlichen Einrichtungen. Sofern nicht anderweitig ausdrücklich erlaubt, sind die Inhalte nur für den bestimmungsgemäßen Abruf im Internet frei nutzbar. Die Inhalte dieser Website dürfen außerhalb der Grenzen des Urheberrechts ohne schriftliche Genehmigung nicht in irgendeiner Form vervielfältigt, verbreitet, verändert oder Dritten zugänglich gemacht werden. Soweit nicht anders angegeben, sind alle Markenzeichen auf dieser Website markenrechtlich geschützt.`,\n },\n methodology: {\n title: \"Methodik\",\n subtitle:\n \"Hier finden Sie detaillierte Informationen zu den verwendeten Methodiken und Ratingprozessen. Die Scope Fondsrating Methodik ist seit mehr als 20 Jahren im Markt fest etabliert.\",\n scopeFundsRating: \"1.\tScope Mutual Fund Rating\",\n introduction: \"Einleitung\",\n introductionText1:\n \"Das Scope Mutual Fund Rating ist ein etabliertes Verfahren zur Bewertung der Managementqualität von offenen Investmentfonds hinsichtlich Performancebeitrag und Risikominderungsmaßnahmen gegenüber der Peergroup (Vergleichsgruppe). Ein \",\n introductionText2: \"qualitatives Rating, \",\n introductionText3:\n \"das eine tiefgehende Einsicht in die Arbeits-prozesse der Fondsgesellschaft voraussetzt, wird nur im Auftrag der jeweiligen Fondsgesellschaft vorgenommen. Für Fonds mit einer Historie von über 60 Monaten wird von Scope ohne Auftrag der Fondsgesellschaft ein rein \",\n introductionText4: \"quantitatives Rating \",\n introductionText5: \"ermittelt.\",\n methodology: \"Methodik\",\n methodologyText1:\n \"Grundsätzlich setzt sich das Scope Scope Mutual Fund Rating immer aus einem Performance- und einem Risiko-Indikator zusammen, welche die gewichtete Summe weiterer Sub-Indikatoren darstellen.\",\n methodologyText2:\n \"Bei jungen Fonds mit einer Historie von weniger als sechs Monaten erfolgt die Evaluierung der Indikatoren zunächst ausschließlich qualitativ mittels eines Kriterienkatalogs. Bei dem Scope Mutual Fund Rating handelt es sich um ein relatives Rating, d.h. der Fonds wird immer im Vergleich zu einer vorher festgelegten Peergroup bewertet. Eine Peergroup sollte aus mindestens 20 vergleichbaren und von Scope Analysten ausgewählten Fonds bestehen.\",\n methodologyText3: \"Die qualitative Bewertung \",\n methodologyText4:\n \"wird einmal jährlich durchgeführt. Ab einem Track-Record des Fonds von sechs Monaten werden die qualitativen Bewertungskriterien im Zeitablauf linear durch ein quantitatives Kennzahlensystem substituiert – bis zu einem Anteil der qualitativen Kriterien von 40% nach 60 Monaten. Ab einer Fondshistorie von über 60 Monaten beträgt der quantitative Anteil konstant 60%, während qualitative Bewertungskriterien zu einem Anteil von 40% in das Bewertungsergebnis einfließen.\",\n methodologyText5:\n \"Abbildung: Grafische Darstellung der qualitativen Rating-Methodik bei Auftrag durch die Fondsgesellschaft.\",\n methodologyText6:\n \"Sollte kein Auftrag der jeweiligen Fondsgesellschaft vorliegen, wird von Scope ohne Abstimmung mit der Gesellschaft für Fonds mit einer Historie von mindestens 60 Monaten ein rein \",\n methodologyText7: \"quantitatives Rating\",\n methodologyText8: \"ermittelt.\",\n ratingProcess: \"Rating-Prozess\",\n ratingProcessText1:\n \"Grundlage für die Bewertung der Fondsqualität ist ein mehrdimensionales Bewertungsmodell, in das sowohl Performance als auch Risiko-Indikatoren einfließen. Der Performance-Indikator (70% Gewichtung) berücksichtigt die relative Performance, die langfristige Ertragskraft und die Stabilität der Fondsperformance. Der Risiko-Indikator (30% Gewichtung) bewertet das Timing-Risiko, das Verlustrisiko und das Verhaltensrisiko des Fonds. Sowohl bei der quantitativen wie auch qualitativen Bewertung existieren Interdependenzen zwischen den Performance- und Risiko-Indikatoren. Üblicherweise geht eine hohe Outperformance mit einem hohen Tracking-Error einher. Dieser wirkt sich jedoch wiederum bewertungsschwächend auf das Verhaltensrisiko aus. Je aktiver der Manager agieren kann, umso schwächer ist in der Regel das Verhaltensrisiko bewertet.\",\n ratingProcessText2: \"Abbildung: Bewertungskategorien\",\n ratingProcessLabel1: \"Performance-Beitrag\",\n ratingProcessLabel2: \"Stabilität\",\n ratingProcessLabel3: \"Relative Performance\",\n ratingProcessLabel4: \"Langfristige Ertragskraft\",\n ratingProcessLabel5: \"Risikominderung\",\n ratingProcessLabel6: \"Timing-Risiko\",\n ratingProcessLabel7: \"Verhaltensrisiko\",\n ratingProcessLabel8: \"Verlustrisiko\",\n ratingClasses: \"Ratingklassen\",\n ratingClassesText1:\n \"Nach Zusammenfassung der Kriterien für die einzelnen Komponenten und einer Gesamtbewertung des Fonds wird die erreichte Punktzahl einer von fünf Bewertungsklassen zugeteilt, die von A („sehr gut“) bis E („schwach“) reichen. Für jede Kennzahl wird dem jeweiligen Fonds im Vergleich mit seinen Mitbewerbern (der gleichen Peergroup) je nach Schwäche bzw. Stärke eine Punktzahl von 1 bis 100 gegeben. Ein Fonds, dessen Ausprägung einer bestimmten Kennzahl dem Median des entsprechenden Segments entspricht, erhält für diese Kennzahl 50 Punkte. Die für das Gesamt-Rating relevante Gesamtpunktzahl ergibt sich aus den gewichteten Punktzahlen der einzelnen Kennzahlen.\",\n ratingClassesText2:\n \"Im Falle einer wesentlichen personellen Veränderung im Fondsmanagement wird das Scope Mutual Fund Rating für den entsprechenden Fonds mit dem Zusatz „ur“ für „under review“ – also „unter Beobachtung“ – dargestellt.\",\n ratingClassesText3:\n \"Ein sogenannter Top-Fonds, also ein mit „A“ oder „B“ bewerteter Fonds, zeigt dabei an, dass der entsprechende Fonds über einen mittleren Zeithorizont eine stabile überdurchschnittliche Performance mit relativ niedrigem Risiko aufweisen sollte.\",\n investmentTeamRating: \"2.\tInvestment Team Rating\",\n intro: \"1.\tEinführung\",\n introText1:\n \"Scope Fund Analysis (Scope) vergibt Ratings für die Qualität und die Kompetenz von Investment Teams, deren verwaltetes Vermögen überwiegend in liquide Anlageinstrumente investiert ist. Die Analyse greift einzelne Investmentteams mit eigenen Produkten und differenzierten Strategien aus dem Kontext des Unternehmens heraus und konzentriert sich bei der Bewertung auf wichtige Aspekte des Asset Managements, die direkt im Einflussbereich des Teams liegen und unmittelbar Auswirkung auf den Investmenterfolg des Teams haben.\",\n introText2:\n \"Das Rating bietet damit einen wesentlichen Beitrag für den Entscheidungsprozess von Investoren und gibt Investmentteams die Möglichkeit, die vielschichtigen Aspekte von Teamkompetenz und Track Record sowie der Prozessqualität und Ressourcenausstattung in einer Ratingnote zu verdichten.\",\n ratingProcess2: \"2.\tRatingprozess\",\n ratingProcess2Text1:\n \"Das Asset Management Rating (AMR) für Investment Teams – kurz: Investment Team Rating – wird auf einer Skala von AAA\",\n ratingProcess2Text2: \" bis C\",\n amr: \"AMR\",\n ratingProcess2Text3:\n \" abgebildet. Die Bewertung erfolgt anhand eines Scorecard-Ansatzes, mit Hilfe dessen eine Vielzahl von qualitativen und quantitativen Einzelkriterien geprüft werden. Entsprechend der Ausprägung der Qualität werden für jedes Kriterium ein bis vier Punkte vergeben, wobei ein Punkt dem institutionellen Mindeststandard entspricht und vier Punkte für exzellente Qualität stehen.\",\n ratingProcess2Text4:\n \"Die Bewertung erfolgt stets im Kontext der relevanten Peergroup, so dass eine hohe Konsistenz und Vergleichbarkeit über ein breites Spektrum von Investmentteams mit ähnlichem Investment-Fokus gewährleistet werden kann. Scope nimmt die Einordnung bei Einzelkriterien der Methodik stets im Sinne des Grundgedankens des jeweiligen Einzelkriteriums vor, um der Vielfalt der Branche gerecht zu werden.\",\n ratingProcess2Text5:\n \"Die Scorecard-Analyse umfasst folgende vier Bereiche, genannt Panels:\",\n investmentProfessionals: \"Investment Professionals\",\n investmentProfessionalsText1:\n \"Scope analysiert die Investmentkompetenzen der Teammitglieder, den für das Investmentgebiet einschlägigen Erfahrungsschatz des Führungspersonals sowie der Teammitglieder, die Teamorganisation sowie die Incentivierung der Investmentprofessionals.\",\n investmentAndResearch: \"Investmentprozess und Research\",\n investmentAndResearchText1:\n \"Scope bewertet die Stringenz und Plausibilität des Investmentprozesses. Der Stellenwert und die Qualität des zur Verfügung stehenden Researchs, das die Grundlage für angemessene Investmententscheidungen bilden sollte, wird von Scope ebenso beleuchtet wie die Einbettung und Umsetzung von Richtlinien des Investmentrisikomanagements.\",\n marketAndPerformance: \"Marktstellung und Performance\",\n marketAndPerformanceText1:\n \"In diesem Panel analysiert Scope die Alleinstellungsmerkmale des Produktportfolios und der Investmentstrategien. Die Entwicklung der Assets under Management sowie des Investment Track Records des Teams mit seinen Strategien wird ebenfalls bewertet, da sie vom Funktionieren des Investmentansatzes zeugen.\",\n further: \"Weitere interne und externe Ressourcen\",\n furtherText1:\n \"Wichtige Funktionsbereiche, die zwar außerhalb des unmittelbaren Teameinflusses liegen, sich aber stark auf den Investmenterfolg auswirken, sind daher aus Sicht von Scope ebenfalls relevant für eine Beurteilung von Qualität und Kompetenz des Investmentmanagements im Rahmen eines Investment Team Ratings. Daher beleuchtet Scope die Ausstattung des Investmentteams mit modernen IT-Systemen, den Auswahlprozess und die Leistungsüberprüfung etwaiger externer Dienstleister sowie weitere Aspekte des Risikomanagements im Unternehmen.\",\n furtherText2:\n \"Die vollständige Investment Team Rating-Methodik finden Sie \",\n furtherText3: \"hier.\",\n ratincScale: \"Bewertungskala für Investment Team Ratings\",\n mutualFunds: \"Investmentfonds (UCITS)\",\n realEstateFunds: \"Offene Fonds (AIF)\",\n closeEndFunds: \"Geschlossene Fonds (AIF)\",\n amAndIssuersOfCert: \"Asset Manager & Zertifikate-Emittenten\",\n },\n notFound: {\n title: \"404\",\n subtitle: \"Seite nicht gefunden.\",\n },\n news: {\n title: \"Fondsrating & Research News\",\n subtitle:\n \"Die Ratingagentur Scope veröffentlicht regelmäßig Analysen und Research zu einzelnen Fonds und zu Investmentthemen. Folgend eine aktuelle Auswahl.\",\n back: \"Zurück\",\n previous: \"Zurück\",\n next: \"Weiter\",\n search: \"Suche\",\n category: \"Category\",\n document: \"Document\",\n video: \"Video\",\n podcast: \"Podcast\",\n more: \"Mehr\",\n error:\n \"Abruf von Nachrichten derzeit nicht möglich. Bitte versuchen Sie es später noch einmal.\",\n newsNotFound: \"Nachrichten nicht gefunden.\",\n noMachingNews: \"Keine passenden Nachrichten gefunden.\",\n },\n reports: {\n title: \"Aktuelle Reports und Studien\",\n subtitle:\n \"Hier finden Sie die vollständigen Rating- und Research Reports. Sie enthalten sämtliche Grafiken, Daten der Ratingtabellen der jeweiligen Publikation.\",\n back: \"Zurück\",\n previous: \"Zurück\",\n next: \"Weiter\",\n more: \"Mehr\",\n download: \"Download Report\",\n error:\n \"Abruf von Nachrichten derzeit nicht möglich. Bitte versuchen Sie es später noch einmal.\",\n reportsNotFound: \"Nachrichten nicht gefunden.\",\n noMachingNews: \"Keine passenden Nachrichten gefunden.\",\n },\n oif: {\n title: \"Offene Immobilienfonds\",\n subtitle:\n \"Die Ratingagentur Scope veröffentlicht regelmäßig Analysen und Research zu einzelnen Fonds und zu Investmentthemen. Folgend eine aktuelle Auswahl.\",\n back: \"Zurück\",\n previous: \"Zurück\",\n next: \"Weiter\",\n search: \"Suche\",\n category: \"Category\",\n document: \"Document\",\n video: \"Video\",\n podcast: \"Podcast\",\n more: \"Mehr\",\n error:\n \"Abruf von Nachrichten derzeit nicht möglich. Bitte versuchen Sie es später noch einmal.\",\n newsNotFound: \"Nachrichten nicht gefunden.\",\n noMachingNews: \"Keine passenden Nachrichten gefunden.\",\n },\n login: {\n text: \"Melden Sie sich jetzt an und erhalten Sie vollen Zugriff auf sämtliche Fondsdaten und weitere Tools.\",\n aifText1:\n \"Sollten Sie noch keinen Zugang zu scopeexplorer.com haben, registrieren Sie sich bitte hier:\",\n aifText2:\n \"Sie möchten Zugang zur Studie erhalten, ohne sich zu registrieren? Dann klicken Sie bitte\",\n aifText3: \"hier.\",\n fillInFields: \"Pflichtfelder ausfüllen.\",\n errors: {\n default: \"Login fehlgeschlagen. Bitte erneut versuchen.\",\n 401: \"Login fehlgeschlagen. Benutzername oder Passwort stimmen nicht.\",\n },\n success: \"Erfolgreich eingeloggt.\",\n },\n register: {\n text: \"Mit Ihrer Registrierung erhalten Sie kostenlosen Zugriff auf umfassende Fondsdaten und Services wie Ihre persönliche Watchlist.\",\n text2:\n \"Im Anschluss senden wir Ihnen eine E-Mail mit dem Bestätigungslink. Mit Klick auf den Link in dieser Mail schließen Sie Ihre Registrierung ab.\",\n text3:\n \"Die Scope Fund Analysis GmbH wird an Ihre E-Mail-Adresse regelmäßig Informationen zu den im ScopeExplorer enthaltenen Produkten und Unternehmen senden („Newsletter“). Sie können der Verwendung jederzeit widersprechen. Am einfachsten geht dies über Ihr Nutzerprofil.\",\n text4:\n \"Zudem verwenden wir Ihre E-Mail-Adresse für unseren Benachrichtigungsservice, mit dem wir Sie über aktuelle Entwicklungen zu Produkten in Ihrer „Watchlist“ informieren.\",\n text5:\n \"Ich bin damit einverstanden, dass die Scope Fund Analysis GmbH den Empfang und meine Nutzung von Newsletter und Benachrichtigungsservice (z.B. Klick auf bestimmte Links) analysiert, um ihre Produkte zu verbessern. Hierzu werden auch sog. Tracking-Pixel eingesetzt. Die Einwilligung ist freiwillig und kann jederzeit für die Zukunft widerrufen werden.\",\n text6: \"Es gelten unsere\",\n text7:\n \"Bitte drücken Sie auf „Jetzt registrieren“ wenn Sie damit einverstanden sind. Unsere Datenschutzhinweise finden Sie\",\n link3: \"/terms-of-use\",\n link3Text: \"Allgemeinen Geschäftsbedingungen.\",\n link4: \"/privacy-policy\",\n link4Text: \"hier.\",\n fillInFields: \"Pflichtfelder ausfüllen.\",\n errors: {\n default: \"Registrierung fehlgeschlagen. Bitte erneut versuchen.\",\n 404: \"Eingabe eines Pflichtfelds erforderlich.\",\n 409: \"Diese Email ist bereits einem Nutzer zugeordnet.\",\n 500: \"Serverfehler.\",\n },\n success: \"Benutzer erfolgreich angelegt.\",\n finishRegistration: \"Registrierung abschließen\",\n iam: \"Wählen Sie Ihren Anlegertyp\",\n retail: \"Privatanleger\",\n wholesale: \"Professioneller Investor\",\n sector: \"Industrie/ Branche\",\n additinalSectorQuestion: \"Zusatzfragen zu Industrie/Branche\",\n division: \"Bereich\",\n },\n registerSuccess: {\n retailText1:\n \"Vielen Dank für Ihre Registrierung. Um die Registrierung abzuschließen, haben wir Ihnen eine E-Mail an die von Ihnen genannte Adresse geschickt. Bitte schauen Sie auch einmal in Ihrem Spam-Ordner nach, sollten Sie die E-Mail nicht direkt in Ihrem Posteingang finden.\",\n retailText2:\n \"Sobald Sie mit einem Klick auf den Link in dieser E-Mail Ihre Anmeldung bestätigen, ist Ihre Registrierung abgeschlossen.\",\n wholesaleText1:\n \"Vielen Dank für Ihre Registrierung. Um die Registrierung abzuschließen, haben wir Ihnen eine E-Mail an die von Ihnen genannte Adresse geschickt. Bitte schauen Sie auch einmal in Ihrem Spam-Ordner nach, sollten Sie die E-Mail nicht direkt in Ihrem Posteingang finden.\",\n wholesaleText2:\n \"Sobald Sie mit einem Klick auf den Link in dieser E-Mail Ihre Anmeldung bestätigen, können Sie sich beim ScopeExplorer anmelden. Nach einer Prüfung durch uns werden wir Ihren Zugang um die Funktionen für professionelle Investoren erweitern. Dazu senden wir Ihnen eine gesonderte Benachrichtigung per E-Mail.\",\n },\n confirm: {\n title: \"Benutzername bestätigen\",\n success: \"Benutzername wurde bestätigt. Login ist nun möglich.\",\n error: \"Erfassung konnte nicht bestätigt werden.\",\n },\n resetPassword: {\n title: \"Passwort zurücksetzen\",\n send: \"Passwort zurücksetzen\",\n errors: {\n requestDefault:\n \"E-Mail konnte nicht versendet werden. Bitte erneut versuchen.\",\n default: \"Passwortänderung fehlgeschlagen. Bitte erneut versuchen.\",\n },\n fillInFields: \"Pflichtfelder ausfüllen.\",\n requestSuccess:\n \"Sofern Sie bei uns registriert sind, erhalten Sie nun eine Email um Ihr Passwort neu zu vergeben.\",\n success: \"Passwort wurde erfolgreich geändert.\",\n },\n fundsListModal: {\n title: \"Übrigens: Sind Sie professioneller Anleger?\",\n subtitle1: \"Dann\",\n subtitle2: \"registrieren\",\n subtitle3: \"Sie sich jetzt und erhalten\",\n subtitle4: \"kostenfrei\",\n subtitle5: \"Zugang:\",\n listItem1: \"zur vollständigen Scope Fonds-Datenbank\",\n listItem2:\n \"zu umfangreichen Suchfunktionen zum Filtern und Auswählen von Fonds\",\n listItem3: \"zu langjährigen Zeitreihen inkl. Exportfunktion\",\n listItem4: \"zu vollständigen Vergleichsgruppen-Rankings\",\n listItem5: \"zu Scopes Fonds-Empfehlungsliste\",\n listItem6: \"zu Scopes Nachhaltigkeitsanalyse einzelner Fonds\",\n ignore: \"Ignorieren\",\n dontShow: \"Nicht wieder anzeigen\",\n register: \"Registrieren\",\n },\n privacyPolicy: {\n title: \"Datenschutzhinweise\",\n subtitle: \"für Scope Explorer\",\n section1Title: \"Datenschutz ist Vertrauenssache\",\n section1Text:\n \"Egal, ob Sie unser Kunde sind oder sich aus anderen Gründen für unsere Angebote interessieren: Der Schutz Ihrer Privatsphäre ist uns wichtig. Hier erfahren Sie, welche personenbezogenen Daten wir von Ihnen erheben, was wir damit machen und wie wir sie schützen. Außerdem informieren wir darüber, welche Rechte Ihnen zum Schutz Ihrer Daten zustehen.\",\n section2Title: \"1. Wer sind wir?\",\n section2Text1:\n \"Die Scope Fund Analysis GmbH ist ein deutsches Unternehmen mit Hauptsitz in Berlin und Verantwortlicher im Sinne des Datenschutzrechts für die Datenverarbeitung bei der Registrierung beim und die Nutzung des ScopeExplorer auf der Website www.scopeexplorer.com\",\n section2Text4: \"1.1\tUnsere Kontaktdaten lauten:\",\n section2Text5:\n \"1.2 Haben Sie Fragen zu dieser Datenschutzerklärung oder zum Schutz Ihrer Daten durch uns? Dann können Sie sich jederzeit auch an unseren Datenschutzbeauftragten wenden:\",\n section3Title: \"2. Worum geht es?\",\n section3Text1:\n \"2.1 Wenn wir personenbezogene Daten verarbeiten, bedeutet das, dass wir diese erheben, speichern, übermitteln, löschen oder in anderer Form nutzen. Mit personenbezogenen Daten meinen wir Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person beziehen, zum Beispiel zu\",\n section3List1: \"Kunden der Scope Fund Analysis GmbH,\",\n section3List2:\n \"Interessenten, die sich über unsere Scope Explorer-Website über unser Angebot informieren,\",\n section3List3:\n \"allen anderen Personen, die in Kontakt mit uns stehen, z.B. Vermittler, Bevollmächtigte, Boten sowie Vertreter oder Mitarbeiter juristischer Personen oder sonstiger Gesellschaften.\",\n section3Text2:\n \"2.2 Wir verarbeiten personenbezogene Daten, die wir durch den Kontakt mit Ihnen erhalten. Solche Daten entstehen insbesondere, wenn Sie sich online über unsere Dienste informieren, bei Scope Explorer registrieren und anmelden, online Kontaktformulare ausfüllen, sich schriftlich, per E-Mail oder telefonisch an uns wenden oder wenn Sie unsere Angebote nutzen.\",\n section4Title:\n \"3.\tWie verarbeiten wir Ihre Daten beim Besuch unserer Website?\",\n section4Text1:\n \"3.1 Bei der Nutzung unserer Website werden durch uns und durch Dritte automatisiert Daten erhoben, die Ihr Browser übermittelt.\",\n section4Text2:\n \"3.2 Bei der bloß informatorischen Nutzung der Website verarbeiten wir die folgenden Daten, die für uns technisch erforderlich sind, um Ihnen unsere Website anzuzeigen und die Stabilität und Sicherheit zu gewährleisten:\",\n section4List1: \"verkürzte IP-Adresse des zugreifenden Rechners\",\n section4List2: \"Name der abgerufenen Datei\",\n section4List3: \"Datum und Uhrzeit des Abrufs\",\n section4List4: \"übertragene Datenmenge\",\n section4List5: \"Meldung über erfolgreichen Abruf\",\n section4List6:\n \"Browsertyp nebst Version sowie das Betriebssystem, das Sie nutzen\",\n section4List7: \"Referrer URL\",\n section4List8: \"anfragender Provider\",\n section4List9: \"Bildschirmauflösung\",\n section4Text3:\n \"3.3 Die Protokolldaten werden von uns zudem für statistische Auswertungen im Rahmen des Betriebs unseres Angebots verwendet. Im Falle der rechtswidrigen Nutzung unseres Angebots dienen die Protokolldaten auch dazu, in Betracht kommende Rechtsverletzungen aufzuklären. Die Verarbeitung erfolgt auf Grundlage einer Interessenabwägung, die immer auch Ihre Interessen berücksichtigt (Art. 6 Abs. 1 UAbs. 1 lit. f DSGVO).\",\n section5Title: \"4. Cookies und Analysedienste\",\n section5Text1:\n \"4.1 Diese Website verwendet Cookies. Cookies dienen dazu, unser Angebot nutzerfreundlicher, effektiver und sicherer zu machen. Bei Cookies handelt es sich um Textdateien, die im Internetbrowser bzw. vom Internetbrowser auf Ihrem Computer gespeichert werden. Der Cookie enthält eine Zeichenfolge, die eine eindeutige Identifizierung Ihres Systems beim erneuten Aufrufen der Website ermöglicht.\",\n section5Text2:\n \"4.2 Die meisten der von uns verwendeten Cookies („Session-Cookies“) und die darin gespeicherten und übermittelten Daten werden nach Ende Ihres Besuchs automatisch gelöscht. Andere Cookies („Persistente Cookies“) bleiben auf Ihrem Endgerät gespeichert, bis Sie diese löschen.\",\n section5Text3:\n \"4.3 Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies informiert werden und Cookies nur im Einzelfall erlauben, die Annahme von Cookies für bestimmte Fälle oder generell ausschließen sowie das automatische Löschen der Cookies beim Schließen des Browsers aktivieren. Bereits gespeicherte Cookies können Sie jederzeit löschen. Bei der Deaktivierung von Cookies kann die Funktionalität dieser Website eingeschränkt sein.\",\n section5Text4: \"Technisch notwendige Cookies\",\n section5Text5:\n \"4.4 Einige Elemente unserer Website erfordern es, dass der aufrufende Browser auch nach einem Seitenwechsel identifiziert werden kann. Einige Cookies bleiben gespeichert und ermöglichen es uns, Ihren Browser beim nächsten Besuch wiederzuerkennen.\",\n section5Text6:\n \"4.5 In den Cookies werden die folgenden Daten gespeichert und übermittelt:\",\n section5List1: \"aktuelle Session-ID,\",\n section5List2: \"Spracheinstellungen,\",\n section5List3:\n \"Kenntnisnahme bestimmter Inhalte der Website, z.B. Fondratings,\",\n section5List4:\n \"Informationen dazu, ob Sie in die Verwendung technisch nicht notwendiger Cookies eingewilligt haben.\",\n section5Text7:\n \"4.6 Die mithilfe dieser technisch notwendigen Cookies von Ihnen erhobenen Daten werden nicht zur Erstellung von Nutzerprofilen verwendet.\",\n section5Text8:\n \"4.7 Die Verarbeitung erfolgt auf Grundlage einer Interessenabwägung, die immer auch Ihre Interessen berücksichtigt (Art. 6 Abs. 1 UAbs. 1 lit. f DSGVO).\",\n section5Text9: \"Analyse-Cookies\",\n section5Text10:\n \"4.8 Auf unserer Website verwenden wir außerdem Cookies zur pseudonymisierten Reichweitenmessung und Werbezwecken. Cookies werden hierzu entweder von unserem Server oder dem Server Dritter an Ihren Browser übertragen. In diesem Zusammenhang verarbeiten wir Ihre Daten zur Wahrung berechtigter Interessen auf Grundlage einer Interessenabwägung, die immer auch Ihre Interessen berücksichtigt (Art. 6 Abs. 1 UAbs. 1 lit. f DSGVO). Unser berechtigtes Interesse in der Verarbeitung liegt in den folgenden Zwecken:\",\n section5List5: \"Analyse und statistische Auswertung der Website-Nutzung\",\n section5List6: \"Optimierung der Website\",\n section5List7: \"Bereitstellung personalisierter Angebote und Inhalte\",\n section5List8: \"Erfolgsmessung von Werbekampagnen\",\n section5Text11:\n \"4.9 Sie können dem Einsatz von Analyse-Cookies widersprechen. Hinweise zu spezifischen Widerspruchsmöglichkeiten finden Sie in der entsprechenden Beschreibung in den nachfolgenden Absätzen.\",\n section5Text12:\n \"4.10\tSofern erforderlich, holen wir für die Verarbeitung Ihre Einwilligung nach Art. 6 Abs. 1 UAbs. 1 lit. a DSGVO ein.\",\n section5Text13: \"Google Analytics\",\n section5Text14:\n \"4.11\tDiese Website benutzt Google Analytics, einen Webanalysedienst der Google Inc. („Google“). Google Analytics verwendet ebenfalls sog. „Cookies“, die auf Ihrem Computer gespeichert werden und die eine Analyse der Benutzung der Website durch Sie ermöglichen. Die durch den Cookie erzeugten Informationen über Ihre Benutzung dieser Website werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert. Im Rahmen der für diese Website aktivierten IP-Anonymisierung wird Ihre IP-Adresse von Google jedoch innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum zuvor gekürzt. Nur in Ausnahmefällen wird die volle IP-Adresse an einen Server von Google in den USA übertragen und dort gekürzt. In unserem Auftrag wird Google diese Informationen benutzen, um Ihre Nutzung der Website auszuwerten, um Reports über die Website-Aktivitäten zusammenzustellen und um weitere mit der Website-Nutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Website-Betreiber zu erbringen.\",\n section5Text15:\n \"4.12\tDie im Rahmen von Google Analytics von Ihrem Browser übermittelte IP-Adresse wird nicht mit anderen Daten von Google zusammengeführt.\",\n section5Text16:\n \"4.13\tFür die Ausnahmefälle, in denen personenbezogene Daten in die USA übertragen werden, hat sich Google dem EU-US Privacy Shield unterworfen,\",\n section5Link1: \"https://www.privacyshield.gov/EU-US-Framework\",\n section5Text17:\n \"4.14\tSie können die Speicherung der Cookies durch eine entsprechende Einstellung Ihrer Browser-Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können. Sie können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf Ihre Nutzung der Website bezogenen Daten (inkl. Ihrer IP-Adresse) an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem sie das unter dem folgenden Link verfügbare Browser-Plug-in herunterladen und installieren: \",\n section5Link2: \"http://tools.google.com/dlpage/gaoptout?hl=de\",\n section5Text18:\n \"4.15\tAlternativ zum Browser-Add-On oder innerhalb von Browsern auf mobilen Geräten, klicken Sie bitte diesen Link, um die Erfassung durch Google Analytics innerhalb dieser Website zukünftig zu verhindern: \",\n section5Link3: \"https://tools.google.com/dlpage/gaoptout/eula.html\",\n section5Text19:\n \"4.16\tDabei wird ein Opt-Out-Cookie auf Ihrem Gerät abgelegt. Löschen Sie Ihre Cookies, müssen Sie diesen Link erneut klicken.\",\n section5Text20:\n \"4.17\tDiese Website verwendet Google Analytics mit der Erweiterung „_anonymizeIp()“. Dadurch werden IP-Adressen gekürzt weiterverarbeitet, eine Personenbeziehbarkeit kann damit ausgeschlossen werden. Soweit den über Sie erhobenen Daten ein Personenbezug zukommt, wird dieser also sofort ausgeschlossen und die personenbezogenen Daten damit umgehend gelöscht.\",\n section5Text21:\n \"4.18\tWir nutzen Google Analytics, um die Nutzung unserer Website analysieren und regelmäßig verbessern zu können. Über die gewonnenen Statistiken können wir unser Angebot verbessern und für Sie als Nutzer interessanter ausgestalten.\",\n section5Text22a:\n \"4.19\tInformationen des Anbieters von Google Analytics finden Sie hier: Google Dublin, Google Ireland Ltd., Gordon House, Barrow Street, Dublin 4, Ireland, Fax: +353 (1) 436 1001. Die Nutzerbedingungen können Sie hier einsehen\",\n section5Text22b: \"http://www.google.com/analytics/terms/de.html\",\n section5Text22c:\n \"Informationen zum Datenschutz bietet die Datenschutzerklärung unter\",\n section5Text22d: \"http://www.google.de/intl/de/policies/privacy.\",\n section5Text23:\n \"4.20\tSie können dem Einsatz von Google Analytics widersprechen. Hinweise zu spezifischen Widerspruchsmöglichkeiten finden Sie in der entsprechenden Beschreibung in den nachfolgenden Absätzen.\",\n section6Title: \"5. Newsletter und Benachrichtigungsservice\",\n section6Text1:\n \"5.1\tDie Scope Fund Analysis GmbH sendet an registrierte Kunden regelmäßig Informationen zu den im ScopeExplorer enthaltenen Produkten und Unternehmen („Newsletter). Diese Verarbeitung erfolgt auf Grundlage einer Interessenabwägung gemäß Art. 6 Abs. 1 UAbs. 1 lit. f DSGVO, die immer auch Ihre Interessen berücksichtigt.\",\n section6Text2:\n \"5.2\tZudem wird registrierten Kunden ein sog. Benachrichtigungsservice angeboten, mit dem per E-Mail über aktuelle Entwicklungen zu Produkten auf der „Watchlist“ des Kunden informiert wird. Diese Verarbeitung erfolgt zur Erfüllung eines Vertrages gemäß Art. 6 Abs. 1 UAbs. 1 lit. b DSGVO.\",\n section6Text3:\n \"5.3\tDer Empfang des Newsletters und der Benachrichtigungsservice können in Ihrem Nutzerprofil deaktiviert werden.\",\n section6Text4:\n \"5.4\tWir analysieren Daten zu Ihrem Empfang und Ihrer Nutzung von Newsletter und Benachrichtigungsservice, um unsere Produkte und unsere Werbung zu verbessern. So stellen wir mithilfe eines sog. Tracking-Pixels fest, ob unsere E-Mail geöffnet wurde und wir speichern, welche Links Sie in einer E-Mail geöffnet haben. Wir verarbeiten diese Daten ausschließlich aufgrund Ihrer ausdrücklichen Einwilligung gemäß Art. 6 Abs. 1 UAbs. 1 lit. a DSGVO.\",\n section6Text5:\n \"5.5\tWenn Sie nicht in die Analyse von Newsletter und Benachrichtigungsservice einwilligen bzw. Ihre Einwilligung widerrufen haben, kann es sein, dass wir Ihnen deswegen aus technischen Gründen keinen Newsletter und/oder keinen Benachrichtigungsservice mehr anbieten können.\",\n section6Text6:\n \"5.6\tFür den Versand und die Analyse von E-Mails greifen wir auf die Dienste von SendGrid, Inc. 1801 California Street, Suite 500, Denver, Colorado 80202, USA als Auftragsverarbeiter gemäß Art. 28 DSGVO zurück. Dabei werden Daten auch in den USA und damit in Drittländern im Sinne der DSGVO verarbeitet. Die SendGrid, Inc. ist nach dem EU-US-Privacy Shield verpflichtet\",\n section6Text7:\n \"https://www.privacyshield.gov/participant?id=a2zt0000000TRktAAG&status=Active\",\n section6Text8: \").\",\n section7Title: \"5. Informationsanwendungen anderer Anbieter\",\n section7Text1:\n \"6.1 Wir nutzen auf unsere Website Informationsanwendungen anderer Anbieter. Dadurch können wir Inhalte und Funktionen aus anderen Quellen (z.B. Videos) direkt in unsere Website einbinden. Sofern wir dabei personenbezogene Daten verarbeiten, erfolgt dies auf Grundlage einer Interessenabwägung, die immer auch Ihre Interessen mitberücksichtigt (Art. 6 Abs. 1 UAbs. 1 lit. f DSGVO).\",\n section7Text2: \"YouTube\",\n section7Text3:\n \"6.2 Wir haben YouTube-Videos in unsere Website eingebunden, die auf\",\n section7Link1: \"http://www.youtube.com\",\n section7Text4:\n \"gespeichert und von unserer Website aus direkt abspielbar sind. Diese sind alle im „erweiterten Datenschutz-Modus“ eingebunden, dies bedeutet, dass keine Daten über Sie als Nutzer an YouTube übertragen werden, wenn Sie die Videos nicht abspielen. Erst wenn Sie die Videos abspielen, werden die nachfolgend beschriebenen Daten übertragen. Auf diese Datenübertragung haben wir keinen Einfluss.\",\n section7Text5:\n \"6.3 Durch das Abspielen eines Videos auf der Website erhält YouTube die Information, dass Sie die entsprechende Unterseite unserer Website aufgerufen haben. Dies erfolgt unabhängig davon, ob YouTube ein Nutzerkonto bereitstellt, über das Sie eingeloggt sind, oder ob kein Nutzerkonto besteht. Wenn Sie bei YouTube eingeloggt sind, werden Ihre Daten direkt Ihrem Konto zugeordnet. Wenn Sie die Zuordnung mit Ihrem Profil bei YouTube nicht wünschen, müssen Sie sich vor Aktivierung des Buttons ausloggen. YouTube speichert Ihre Daten als Nutzungsprofile und nutzt sie für Zwecke der Werbung, Marktforschung und/oder bedarfsgerechten Gestaltung seiner Website. Eine solche Auswertung erfolgt insbesondere (selbst für nicht eingeloggte Nutzer) zur Erbringung von bedarfsgerechter Werbung und um andere Nutzer des sozialen Netzwerks über Ihre Aktivitäten auf unserer Website zu informieren. Ihnen steht ein Widerspruchsrecht zu gegen die Bildung dieser Nutzerprofile, wobei Sie sich zur Ausübung dessen an YouTube richten müssen.\",\n section7Text6:\n \"6.4 Weitere Informationen zu Zweck und Umfang der Datenerhebung und ihrer Verarbeitung durch YouTube erhalten Sie in der Datenschutzerklärung. Dort erhalten Sie auch weitere Informationen zu Ihren Rechten und Einstellungsmöglichkeiten zum Schutze Ihrer Privatsphäre:\",\n section7Link2: \"https://www.google.de/intl/de/policies/privacy\",\n section7Text7:\n \". Google verarbeitet Ihre personenbezogenen Daten auch in den USA und hat sich dem EU-US-Privacy-Shield unterworfen,\",\n section7Link3: \"https://www.privacyshield.gov/EU-US-Framework\",\n section8Title:\n \"7.\tWie verarbeiten wir Ihre Daten bei der Registrierung und Anmeldung auf unserer Website?\",\n section8Text1:\n \"7.1 Sie können sich, um gewisse Funktionen von Scope Explorer in Anspruch zu nehmen, bei uns registrieren. Die dabei angegebenen Daten werden für die Nutzung unseres Angebots verwendet. Die Verwendung erfolgt außerdem, um Sie über Ratingänderungen von den auf der von Ihnen erstellten Watchlist enthaltenen Fonds per E-Mail zu informieren und bei Bedarf Ihre Suchen zu speichern. Die Registrierung umfasst die Eingabe der folgenden Daten:\",\n section8List1: \"Vor- und Nachname\",\n section8List2: \"E-Mail-Adresse\",\n section8Text2:\n \"7.2 Handelt es sich um einen professionellen Investor benötigen wir zudem folgende Daten:\",\n section8List3: \"Telefon- oder Mobilnummer\",\n section8List4: \"Angaben zum Unternehmen\",\n section8List5: \"Daten des Ansprechpartners\",\n section8List6: \"Funktion des Ansprechpartners\",\n section8Text3:\n \"7.3 Hierüber hinaus werden die bei der Registrierung verwendete IP-Adresse und das Datum der Registrierung gespeichert, um einem Missbrauch der Funktion vorzubeugen.\",\n section8Text4:\n \"7.4 Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 UAbs. 1 lit. a und lit. f DSGVO.\",\n section9Title:\n \"8.\tWie verarbeiten wir Ihre Daten im Falle der Kontaktaufnahme mit uns?\",\n section9Text1:\n \"8.1 Unser Angebot ermöglicht es Ihnen, Kontakt zu uns aufzunehmen. Dies ist etwa telefonisch, anhand der zur Verfügung gestellten Telefonnummern oder durch den Versand einer E-Mail möglich. Daneben stellen wir auf unserer Website ein Kontaktformular für die elektronische Kontaktaufnahme zur Verfügung.\",\n section9Text2:\n \"8.2 Bei Absendung einer Nachricht über das Kontaktformular werden neben den von Ihnen eingegebenen Informationen zudem folgende Daten gespeichert, um Missbrauch vorzubeugen:\",\n section9List1: \"IP-Adresse\",\n section9List2: \"Datum und Uhrzeit\",\n section9List3: \"Betriebssystem\",\n section9List4: \"Browser\",\n section9List5: \"besuchte interne Seiten\",\n section9Text3:\n \"8.3 Bei einer Kontaktaufnahme über Telefon oder die bereitgestellten E-Mail-Adressen werden die übermittelten personenbezogenen Daten des Nutzers gespeichert, um die Anfrage und eine gegebenenfalls folgende Korrespondenz zu bearbeiten.\",\n section9Text4:\n \"8.4 Rechtsgrundlage für die Verarbeitung der Daten ist Art. 6 Abs. 1 UAbs. 1 lit. a oder lit. f DSGVO.\",\n section10Title: \"9.\tNutzen wir Ihre Daten zu Sicherheitszwecken?\",\n section10Text1:\n \"9.1 Wir nutzen Ihre Daten zudem, um Ihre Sicherheit sowie die Sicherheit unserer Leistungen und Geschäftsabläufe zu gewährleisten. Die in diesem Abschnitt beschriebene Verarbeitung erfolgt auf Grundlage einer Interessenabwägung, die immer auch Ihre Interessen berücksichtigt.\",\n section10Text2:\n \"9.2 Auf Grundlage einer Interessenabwägung verarbeiten wir Daten um Ihre Sicherheit sowie die Sicherheit unserer Geschäftsabläufe zu gewährleisten, insbesondere in den folgenden Fällen:\",\n section10List1:\n \"Um im Falle rechtlicher Auseinandersetzungen Sachverhalte prüfen und Ansprüche geltend machen zu können.\",\n section10List2:\n \"Um IT-Sicherheit und den IT-Betrieb der Scope Fund Analysis GmbH gewährleisten zu können.\",\n section10List3: \"Um Straftaten zu verhindern und aufklären zu können.\",\n section10List4:\n \"Um eine ordnungsgemäße Geschäftssteuerung zu gewährleisten.\",\n section11Title: \"10. Wer erhält Ihre Daten?\",\n section11Text1:\n \"10.1\tInformationen über Sie dürfen wir nur weitergeben, wenn gesetzliche Bestimmungen dies erlauben oder Sie eingewilligt haben.\",\n section11Text2: \"10.2\tZu den weitergegebenen Daten können gehören:\",\n section11List1: \"Vor- und Nachname\",\n section11List2: \"E-Mail-Adresse\",\n section11List3: \"Unternehmen\",\n section11List4: \"Funktion\",\n section11Text3:\n \"10.3\tAuch von uns eingesetzte Dienstleister können von uns Daten erhalten, wenn diese unsere besonderen Vertraulichkeitsanforderungen erfüllen. Dies können insbesondere Unternehmen in den Kategorien IT-Dienstleistungen, Logistik, Druckdienstleistungen, Telekommunikation, Inkasso, Beratung sowie Vertrieb und Marketing sein.\",\n section12Title: \"11. Wann löschen wir Ihre Daten?\",\n section12Text1:\n \"11.1\tWir verarbeiten und speichern Ihre personenbezogenen Daten grundsätzlich so lange, wie wir in einer geschäftlichen Beziehung zu Ihnen stehen. \",\n section12Text2:\n \"11.2\tBenötigen wir Ihre personenbezogenen Daten für den ursprünglichen Zweck nicht mehr, löschen wir diese. Etwas anderes gilt nur dann, wenn ihre – befristete – Weiterverarbeitung zu anderen Zwecken erforderlich ist. Solche Zwecke können sein:\",\n section12List1:\n \"Die Erfüllung von Aufbewahrungs- und Dokumentationspflichten, die sich unter anderem aus dem Handelsgesetzbuch (HGB) ergeben.\",\n section12List2:\n \"Die Erhaltung von Beweismitteln im Rahmen der Verjährungsvorschriften. Diese können nach den §§ 195 ff. des Bürgerlichen Gesetzbuches (BGB) in der Regel drei Jahre, in gewissen Fällen aber auch bis zu dreißig Jahre betragen.\",\n section13Title:\n \"12. Werden Ihre Daten in ein Drittland oder an eine internationale Organisation übermittelt?\",\n section13Text1:\n \"12.1\tEine Datenübermittlung an internationale Organisationen oder in Drittstaaten (Staaten außerhalb des Europäischen Wirtschaftsraums – EWR) findet grundsätzlich nicht statt. Zur Übermittlung pseudonymisierter Daten durch Analysedienste siehe oben unter \",\n section13Text2: \"„4. Cookies und Analysedienste“\",\n section13Text3: \"sowie \",\n section13Text4: \"„5. Informationsanwendungen anderer Anbieter“.\",\n section14Title:\n \"13. Sind Sie verpflichtet uns bestimmte personenbezogene Daten zu geben?\",\n section14Text1:\n \"13.1\tUnter Umständen ja. Im Rahmen unseres Online-Angebots benötigen wir Ihre personenbezogenen Daten zur Durchführung einer Registrierung und zur Kontaktierung im Falle einer Ratingveränderung der von Ihnen gespeicherten Fonds. Ohne diese Daten können wir zum Teil unser Angebot nicht erbringen.\",\n section15Title:\n \"14. Welche Rechte haben Sie, wenn es um die Verarbeitung Ihrer Daten geht?\",\n section15Text1:\n \"14.1\tSie haben uns gegenüber folgende Rechte hinsichtlich der Sie betreffenden personenbezogenen Daten:\",\n section15List1: \"Recht auf Auskunft,\",\n section15List2: \"Recht auf Berichtigung oder Löschung,\",\n section15List3: \"Recht auf Einschränkung der Verarbeitung,\",\n section15List4: \"Recht auf Datenübertragbarkeit,\",\n section15List5: \"Recht auf Widerruf von erteilten Einwilligungen.\",\n section15Text2:\n \"14.2\tIhnen steht im Zusammenhang mit der Verarbeitung Ihrer personenbezogenen Daten außerdem ein Beschwerderecht bei der folgenden, für uns in Bezug auf den Schutz personenbezogener Daten, zuständigen Aufsichtsbehörde zu:\",\n section16Title:\n \"15. Inwieweit gibt es eine automatisierte Entscheidungsfindung im Einzelfall?\",\n section16Text1:\n \"15.1\tIm Rahmen unserer Website sowie zur Begründung und Durchführung der Geschäftsbeziehung nutzen wir grundsätzlich keine vollautomatisierte Entscheidungsfindung gemäß Art. 22 DSGVO.\",\n section17Title:\n \"16. Ihr Widerspruchsrecht nach Artikel 21 Datenschutz-Grundverordnung (DSGVO)\",\n section17Text1: \"16.1\tEinzelfallbezogenes Widerspruchsrecht\",\n section17Text2:\n \"Sie haben das Recht, aus Gründen, die sich aus Ihrer besonderen Situation ergeben, jederzeit gegen die Verarbeitung Sie betreffender personenbezogener Daten, die aufgrund von Art. 6 Abs. 1 e DSGVO (Datenverarbeitung im öffentlichen Interesse) und Artikel Art. 6 Abs. 1 f DSGVO (Datenverarbeitung auf der Grundlage einer Interessenabwägung) erfolgt, Widerspruch einzulegen; dies gilt auch für ein auf diese Bestimmung gestütztes Profiling im Sinne von Artikel 4 Nr. 4 DSGVO. \",\n section17Text3:\n \"Legen Sie Widerspruch ein, werden wir Ihre personenbezogenen Daten nicht mehr verarbeiten, es sei denn, wir können zwingende schutzwürdige Gründe für die Verarbeitung nachweisen, die Ihre Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen.\",\n section17Text4:\n \"16.2\tWiderspruch gegen die Verarbeitung Ihrer Daten für unsere Direktwerbung \",\n section17Text5:\n \"In Einzelfällen verarbeiten wir Ihre personenbezogenen Daten für unsere Direktwerbung. Sie haben das Recht, jederzeit Widerspruch gegen die Verarbeitung Sie betreffender personenbezogener Daten zum Zwecke derartiger Werbung einzulegen; dies gilt auch für das Profiling, soweit es mit solcher Direktwerbung in Verbindung steht.\",\n section17Text6:\n \"Widersprechen Sie der Verarbeitung für Zwecke der Direktwerbung, so werden wir Ihre personenbezogenen Daten nicht mehr für diese Zwecke verarbeiten.\",\n section17Text7:\n \"Der Widerspruch kann formfrei erfolgen und sollte möglichst gerichtet werden an die unter Ziffer 1 genannten Kontaktdaten an uns gesendet werden.\",\n },\n rechtlicheHinweise: {\n title: \"Rechtliche Hinweise zur nutzung des Scope Explorer\",\n subtitle:\n \"Die Nutzung des über die Internetseite www.scopeexplorer.com erreichbaren Informationsportals „SCOPE EXPLORER“ darf ausschließlich nach Maßgabe der folgenden Bestimmungen und Hinweise erfolgen:\",\n section1Title: \"1. Angebot nur im Inland\",\n section1Text1:\n \"Der SCOPE EXPLORER richtet sich an Personen mit Wohnsitz in der Bundesrepublik Deutschland.\",\n section2Title: \"2. Keine Beratung\",\n section2Text1:\n \"SCOPE erbringt keine Rechtsberatungs-, Steuerberatungs-, Beratungs-, oder Unternehmensdienstleistungen und berät nicht bei der Strukturierung von Transaktionen, der Erstellung oder Verhandlung von Transaktionsdokumenten.\",\n section3Title: \"3. Keine Finanzdienstleistungen\",\n section3Text1:\n \"Über den SCOPE EXPLORER werden keine Finanzdienstleistungen erbracht. Das Portal dient ausschließlich der Bereitstellung von Informationen. SCOPE bietet keine Beratung bei der Vermittlung und/oder Verwaltung von Finanzinstrumenten an.\",\n section4Title:\n \"4. Keine Ratings nach der EU-Verordnung über Ratingagenturen\",\n section4Text1:\n \"Die auf dem SCOPE EXPLORER angebotenen Fondsratings stellen kein Rating im Sinne der Verordnung (EG) Nr. 1060/2009 über Ratingagenturen in der Fassung der Änderungsverordnungen (EU) Nr. 513/2011 und (EU) Nr. 462/2013 dar. Die von SCOPE zur Verfügung gestellten Fondsratings sind Anlagestrategieempfehlungen. Diese enthalten aber keine Anlageempfehlungen oder Anlageberatung, da sie keine Beurteilung des Wertes des Finanzinstruments enthalten und auch den Anlagehorizont, die individuellen Anlageziele oder die Finanzlage einzelner Anleger nicht berücksichtigen.\",\n section5Title: \"5. Kein Angebot von Finanzinstrumenten\",\n section5Text1:\n \"Der SCOPE EXPLORER enthält keine Kauf- und/oder Verkaufsangebote für Finanzinstrumente. Insbesondere sind alle Inhalte zu Fonds, Wertpapieren und/oder anderen Finanzinstrumenten nicht als individuelle Anlageempfehlungen für Finanzinstrumente zu verstehen.\",\n section6Title: \"6. Download von Inhalten\",\n section6Text1:\n \"Der Kunde ist nur dann zum Herunterladen und Ausdrucken von Inhalten berechtigt, wenn auf dem Portal eine Möglichkeit zum Herunterladen oder Ausdrucken als Funktion zur Verfügung steht (z. B. über einen Download-Button).\",\n section7Title: \"7. Haftung für Links\",\n section7Text1:\n \"Verweise und Links auf Websites Dritter bedeuten nicht, dass sich SCOPE die hinter dem Verweis oder Link stehenden Inhalte zu eigen macht. Die Inhalte begründen keine Verantwortung von SCOPE für die dort bereitgestellten Daten und Informationen. SCOPE hat keinen Einfluss auf die Inhalte hinter dem Link. Für illegale, fehlerhafte oder unvollständige Inhalte und für Schäden, die durch die Nutzung der verlinkten Inhalte entstehen, haftet SCOPE nicht.\",\n },\n termsOfUse: {\n title: \"Nutzungsbedingungen\",\n subtitle: \"\",\n section1Title: \"1.\tAnwendungsbereich\",\n section1Text1:\n \"1.1\tDiese Nutzungsbedingungen gelten für die Registrierung und die Nutzung des nur nach Registrierung zugänglichen Bereichs des über die Internetseite www.scopeexplorer.com erreichbaren Informationsportals \",\n section1Text2: \"„SCOPE EXPLORER“.\",\n section1Text3:\n \"1.2\tNutzer des SCOPE EXPLORER im Sinne dieser Nutzungsbedingungen sind private Nutzer und professionelle Nutzer, deren Registrierung bestätigt wurde (auch \",\n section1Text4: \",,Kunden‘‘\",\n section1Text5: \").\",\n section1Text6:\n \"1.3\tDer SCOPE EXPLORER wird durch die Scope Fund Analysis GmbH, Lennéstraße 5, 10785 Berlin (\",\n section1Text7: \"„SCOPE“\",\n section1Text8:\n \") betrieben. Diese ist erreichbar telefonisch unter +49 30 27891-0 oder per E-Mail an info@scopeanalysis.com.\",\n section1Text9:\n \"1.4\tAndere Geschäftsbedingungen finden keine Anwendung, auch wenn SCOPE ihrer Geltung im Einzelfall nicht gesondert widerspricht. Selbst wenn SCOPE auf ein Schreiben Bezug nimmt, das andere Geschäftsbedingungen enthält oder auf solche verweist, liegt darin kein Einverständnis mit der Geltung jener Geschäftsbedingungen.\",\n section1Text10:\n \"1.5 Der SCOPE EXPLORER richtet sich an Personen mit Wohnsitz in der Bundesrepublik Deutschland.\",\n section2Title: \"2. Registrierung\",\n section2Text1:\n \"2.1\tBei der Registrierung sind Vor- und Nachname, eine gültige E-Mail-Adresse und ein Passwort anzugeben.\",\n section2Text2:\n \"2.2\tRegistriert sich eine Person als professioneller Nutzer sind zudem eine Telefon- oder Mobilnummer, das Unternehmen sowie der Vor- und Nachname und die Funktion des Ansprechpartners anzugeben.\",\n section2Text3:\n \"2.3\tVoraussetzung für die erfolgreiche Registrierung ist die Verifikation der angegebenen E-Mail-Adresse durch Klick auf den entsprechenden Link in der versendeten Bestätigungs-E-Mail.\",\n section2Text4:\n \"2.4\tSCOPE ist berechtigt, die bereitgestellten Informationen auf Vollständigkeit und Plausibilität zu prüfen. Die Registrierung wird erst wirksam, wenn diese durch SCOPE bestätigt worden ist. Die Bestätigung der Registrierung steht im freien Ermessen von SCOPE.\",\n section2Text5:\n \"2.5\tDie Zugangsdaten einschließlich des Passworts sind vertraulich zu behandeln und dürfen unbefugten Dritten nicht zugänglich gemacht werden. Besteht Grund zur Annahme, dass Dritte unbefugt Kenntnis von den Zugangsdaten erhalten haben oder erlangen werden, ist SCOPE unverzüglich hierüber informieren.\",\n section3Title: \"3. Leistungen von SCOPE\",\n section3Text1:\n \"3.1\tKunden haben die Möglichkeit, sog. Fondsratings zum Rendite-Risiko-Profil von Investmentfonds (dazu gehören sowohl individuelle als auch alternative Investmentfonds oder ähnliche Konstruktionen in der Position eines Eigenkapitalgebers) einzusehen. \",\n section3Text2:\n \"3.2\tFerner erhalten Kunden Zugriff auf eine so genannte „Watchlist“. Durch die Watchlist kann der Kunde selbst ausgewählte Fonds in einer Liste speichern und sich über Ratingänderungen informieren\",\n section3Text3:\n \"3.3\tDem professionellen Nutzer stehen über die in 3.1 und 3.2 beschriebenen Leistungen hinaus Informationen zu Zeitreihen in grafischer und tabellarischer Darstellung, ein Auszug der von SCOPE ausgewählten Fonds und so genannte ESG-Analysen auf Fondsebene zur Verfügung.\",\n section3Text4:\n \"3.4\tSCOPE analysiert die Nutzung von SCOPE EXPLORER durch den Kunden und zeigt ihm auf dieser Grundlage insbesondere solche Informationen an, die besonders interessant für ihn sind. Voraussetzung für die Inanspruchnahme dieser Analyse ist, dass der Kunde in den Einsatz bestimmter Analyse-Cookies gegebenenfalls einwilligt.\",\n section3Text5:\n \"3.5\tSCOPE wird angemessene Anstrengungen unternehmen, um die Verfügbarkeit des Portals aufrechtzuerhalten. Der Kunde erkennt an, dass SCOPE keinen definierten Grad an Verfügbarkeit oder die Einhaltung eines Service Levels schuldet.\",\n section3Text6:\n \"3.6\tSCOPE garantiert nicht, dass das Portal fehlerfrei genutzt werden kann und/oder dass es frei von Viren und anderen schädlichen Komponenten ist.\",\n section4Title: \"4. Ausschlüsse und Disclaimer\",\n section4Text1:\n \"4.1\tEine Garantie für Richtigkeit, Aktualität, Eignung für einen bestimmten Zweck und Vollständigkeit der Inhalte wird von SCOPE nicht übernommen.\",\n section4Text2:\n \"4.2\tSCOPE erbringt keine Rechtsberatungs-, Steuerberatungs-, Beratungs-, oder Unternehmensdienstleistungen und berät nicht bei der Strukturierung von Transaktionen, der Erstellung oder Verhandlung von Transaktionsdokumenten.\",\n section4Text3:\n \"4.3\tÜber den SCOPE EXPLORER werden keine Finanzdienstleistungen erbracht. Das Portal dient ausschließlich der Bereitstellung von Informationen. SCOPE bietet keine Beratung bei der Vermittlung und/oder Verwaltung von Finanzinstrumenten an.\",\n section4Text4:\n \"4.4\tDie auf dem SCOPE EXPLORER angebotenen Fondsratings stellen kein Rating im Sinne der Verordnung (EG) Nr. 1060/2009 über Ratingagenturen in der Fassung der Änderungsverordnungen (EU) Nr. 513/2011 und (EU) Nr. 462/2013 dar. Die von SCOPE zur Verfügung gestellten Fondsratings sind Anlagestrategieempfehlungen. Diese enthalten aber keine Anlageempfehlungen oder Anlageberatung, da sie keine Beurteilung des Wertes des Finanzinstruments enthalten und auch den Anlagehorizont, die individuellen Anlageziele oder die Finanzlage einzelner Anleger nicht berücksichtigen.\",\n section4Text5:\n \"4.5\tDer SCOPE EXPLORER enthält keine Kauf- und/oder Verkaufsangebote für Finanzinstrumente. Insbesondere sind alle Inhalte zu Fonds, Wertpapieren und/oder anderen Finanzinstrumenten nicht als individuelle Anlageempfehlungen für Finanzinstrumente zu verstehen.\",\n section4Text6:\n \"4.6\tVerweise und Links auf Websites Dritter bedeuten nicht, dass sich SCOPE die hinter dem Verweis oder Link stehenden Inhalte zu eigen macht. Die Inhalte begründen keine Verantwortung von SCOPE für die dort bereitgestellten Daten und Informationen. SCOPE hat keinen Einfluss auf die Inhalte hinter dem Link. Für illegale, fehlerhafte oder unvollständige Inhalte und für Schäden, die durch die Nutzung der verlinkten Inhalte entstehen, haftet SCOPE nicht.\",\n section5Title: \"5. Änderungen dieser Nutzungsbedingungen\",\n section5Text1:\n \"5.1\tSCOPE kann von Zeit zu Zeit redaktionelle Änderungen an diesen Nutzungsbedingungen vornehmen, die das laufende Vertragsverhältnis mit SCOPE nicht betreffen. Zu diesen Änderungen gehören beispielsweise die Korrektur von Tippfehlern oder die Aktualisierung von Kontaktinformationen.\",\n section5Text2:\n \"5.2\tSCOPE ist darüber hinaus berechtigt, gelegentlich und nach eigenem Ermessen Änderungen an diesen Nutzungsbedingungen aus triftigen Gründen vorzunehmen, die das laufende Vertragsverhältnis betreffen, insbesondere aufgrund neuer technischer Entwicklungen, rechtlicher Änderungen, einer Anordnung oder eines Antrags einer Regulierungsbehörde, einer Gerichtsentscheidung oder anderer gleichwertiger Gründe wie Änderungen in der Vertriebs- oder Produktpolitik.\",\n section5Text3:\n \"5.3\tWill SCOPE solche Änderungen vornehmen, die das aktuelle Vertragsverhältnis mit dem Kunden betreffen, wird SCOPE den Kunden spätestens zwei Monate vor dem vorgeschlagenen Inkrafttreten in auffälliger und angemessener Weise informieren. Dies kann eine auffällige Meldung im Portal, d.h. beim nächsten Login, oder eine E-Mail sein. Diese Nachricht enthält Informationen über die von SCOPE gewünschten Änderungen, das Recht des Kunden, sie abzulehnen, und die Folgen, wenn der Kunde sie nicht vor Ablauf der Frist ablehnt. Die Änderungen gelten als genehmigt, wenn der Kunde entweder direkt zustimmt oder wenn er die Änderungen nicht vor Ablauf der Frist ablehnt. Wenn der Kunde dem Änderungsvorschlag widerspricht, kann jede Partei die von der mitgeteilten Änderung betroffene Vereinbarung vor dem vorgeschlagenen Inkrafttreten mit sofortiger Wirkung und ohne zusätzliche Kosten kündigen. In der Mitteilung wird SCOPE die von der vorgeschlagenen Änderung betroffene Vereinbarung identifizieren und den Kunden ausdrücklich auf dieses Kündigungsrecht hinweisen. Wird der Vertrag gekündigt, unterliegen Verträge mit SCOPE, die nicht von der vorgeschlagenen Änderung betroffen sind, nicht diesem Kündigungsrecht.\",\n section6Title: \"6. Sperrung des Zugangs zum Portal \",\n section6Text1:\n \"SCOPE kann den Zugang zum Portal vorübergehend oder dauerhaft sperren, wenn es konkrete Anhaltspunkte dafür gibt, dass der Kunde gegen diese Nutzungsbedingungen und/oder geltendes Recht verstoßen hat, oder wenn eine Sperrung erforderlich ist, um die IT-Sicherheit oder andere berechtigte Interessen von SCOPE zu wahren. SCOPE wird bei der Entscheidung über die Sperrung die berechtigten Interessen des Kunden so weit wie möglich und zumutbar berücksichtigen.\",\n section7Title: \"7. Kündigung und Verbraucher-Widerrufsrecht\",\n section7Text1:\n \"7.1\tDer Vertrag über die Nutzung des SCOPE EXPLORER unter Geltung dieser Nutzungsbedingungen wird auf unbestimmte Zeit geschlossen und ist durch beide Parteien mit einer Frist von vier Wochen zum jeweiligen Monatsende kündbar. Hiervon unberührt bleibt das Recht beider Parteien zur sofortigen Kündigung aus wichtigem Grund. \",\n section7Text2:\n \"7.2\tDie Erklärung der Kündigung hat in Textform zu erfolgen.\",\n section7Text3:\n \"7.3\tNur wenn der Kunde ein Verbraucher ist, steht ihm ein Verbraucher-Widerrufsrecht zu. Einzelheiten sind der diesen Nutzungsbedingungen angefügten Widerrufsbelehrung zu entnehmen.\",\n section7Text4:\n \"7.4\tDie Beendigung des Vertrages über die Nutzung des SCOPE EXPLORER berührt nicht bestehende sonstige Vereinbarungen über Dienstleistungen und Produkte mit SCOPE.\",\n section8Title: \"8. Nutzungsrecht\",\n section8Text1:\n \"8.1\tFür die Dauer des Vertrages über die Nutzung des SCOPE EXPLORER gewährt SCOPE dem Kunden ein nicht ausschließliches, geografisch unbegrenztes, nicht unterlizenzierbares und nicht übertragbares Recht, auf die auf dem SCOPE EXPLORER verfügbaren Inhalte zuzugreifen und diese nur für den eigenen Gebrauch anzuzeigen.\",\n section8Text2:\n \"8.2\tDer Kunde ist nur dann zum Herunterladen und Ausdrucken von Inhalten berechtigt, wenn auf dem Portal eine Möglichkeit zum Herunterladen oder Ausdrucken als Funktion zur Verfügung steht (z. B. über einen Download-Button).\",\n section9Title: \"9. Haftungsbeschränkung\",\n section9Text1:\n \"9.1\tSCOPE haftet unbeschränkt, wenn die Schadensursache auf Vorsatz oder grober Fahrlässigkeit beruht. Des Weiteren haftet Scope Fund Analysis für die leicht fahrlässige Verletzung wesentlicher Pflichten, deren Verletzung die Erreichung des Vertragszwecks gefährdet, oder für die Verletzung von Pflichten, deren Erfüllung die ordnungsgemäße Durchführung es Vertrages erst ermöglicht und auf deren Einhaltung sich die Vertragsparteien regelmäßig verlassen. In diesem Fall haftet SCOPE jedoch nur für den vorhersehbaren, vertragstypischen Schaden. SCOPE haftet nicht für leicht fahrlässige Verletzungen anderer als der in den vorstehenden Sätzen genannten Verpflichtungen.\",\n section9Text2:\n \"9.2\tDie vorstehenden Haftungsbeschränkungen gelten nicht für Verletzungen von Leben, Körper oder Gesundheit, für arglistig verschwiegene Mängel und für Mängel bezüglich derer eine Beschaffenheitsgarantie übernommen wurde. Die Haftung nach dem Produkthaftungsgesetz bleibt unberührt.\",\n section9Text3:\n \"9.3\tSoweit die Haftung von SCOPE ausgeschlossen oder beschränkt ist, gilt dies auch für die persönliche Haftung von Arbeitnehmern, gesetzlichen Vertretern und Erfüllungsgehilfen der SCOPE.\",\n section9Text4:\n \"9.4\tSollte dieser Vertrag ausnahmsweise eine Schutzwirkung zugunsten Dritter entfalten, gelten die vorstehenden Haftungsbeschränkungen auch gegenüber Dritten.\",\n section10Title: \"10. Richtlinien / Schlussbestimmungen \",\n section10Text2:\n \"10.2\tDiese Nutzungsbedingungen sind in deutscher Sprache verfasst. Übersetzungen dieser Nutzungsbedingungen in andere Sprachen dienen ausschließlich Informationszwecken. Im Falle von Widersprüchen zwischen der deutschen Version und Übersetzungen geht die deutsche Version vor.\",\n section10Text3:\n \"10.3\tEs gilt deutsches Recht unter Ausschluss des Übereinkommens der Vereinten Nationen über Verträge über den internationalen Warenkauf (CISG) und des deutschen Kollisionsrechts. Ist der Kunde Verbraucher und hat er seinen gewöhnlichen Aufenthalt in einem Mitgliedstaat der Europäischen Union, so gilt ebenfalls deutsches Recht, wobei zwingende Bestimmungen des Staates, in dem der Nutzer seinen gewöhnlichen Aufenthalt hat, unberührt bleiben.\",\n section10Text4:\n \"10.4\tIst der Kunde Kaufmann oder eine juristische Person des öffentlichen Rechts oder ein Sondervermögen des öffentlichen Rechts oder hat er keinen allgemeinen Gerichtsstand in Deutschland, ist ausschließlicher Gerichtsstand für alle Streitigkeiten aus oder im Zusammenhang mit diesen Nutzungsbedingungen Berlin.\",\n section10Text5:\n \"10.5\tDie Europäische Kommission bietet eine Plattform für die außergerichtliche Online-Streitbeilegung (OS-Plattform), die unter www.ec.europa.eu/consumers/odr zugänglich ist. Unsere E-Mail-Adresse finden Sie in unserem Impressum. Wir sind weder verpflichtet noch bereit, uns an dem Streitbeilegungsverfahren zu beteiligen.\",\n section10Text6:\n \"10.6\tDer Kunde ist nicht berechtigt, ohne vorherige schriftliche Zustimmung von SCOPE Rechte oder Ansprüche aus oder im Zusammenhang mit der Nutzung des SCOPE EXPLORER, eines über den SCOPE EXPLORER geschlossenen Vertrages und/oder dieser Nutzungsbedingungen an Dritte abzutreten.\",\n section10Text7:\n \"10.7\tSollte eine einzelne Bestimmung dieser Nutzungsbedingungen ganz oder teilweise unwirksam sein, so wird dadurch die Gültigkeit der übrigen Bestimmungen nicht berührt.\",\n section10Text8:\n \"10.8\tSofern in diesen Nutzungsbedingungen nichts anderes bestimmt ist, sind Änderungen oder Ergänzungen dieser Nutzungsbedingungen nur gültig, wenn sie in Textform erfolgen. Dies gilt auch für jede Änderung oder Aufhebung dieser Bestimmung.\",\n },\n termsAndConditions: {\n title: \"Besondere Bestimmungen der Offene Immobilienfonds Studie 2022\",\n subtitle: \"\",\n },\n scopeAwards: {\n scopeAwards: \"Scope Award\",\n title: \"Scope Award\",\n investmentAwards: \"Scope Investment Awards\",\n alternativeInvestmentAwards: \"Scope Alternative Investment Awards\",\n certificateAwards: \"Scope Zertifikate Awards\",\n findOutMore:\n \"Erfahren Sie mehr zu den Kategorien, den Nominierten und der Award Methodik\",\n scopeAward: \"Der Scope Award\",\n scopeAwardText1:\n \"Die Analysten der Scope Fund Analysis bewerten täglich die Risiko- und Renditeprofile von Investmentfonds und die Qualität von Asset Managern. Mit ihren Ratings, Rankings und Research-Reports unterstützen sie Investoren bei ihren Anlage- und Selektionsentscheidungen.\",\n scopeAwardText2:\n \"Einmal im Jahr lassen unsere Analysten ihre Arbeit Revue passieren und bestimmen herausragende Asset Management Leistungen und die überzeugendsten Fondskonzepte, um sie mit dem Scope Award auszuzeichnen.\",\n scopeAwardText3:\n \"Der Scope Award ist die traditionsreichste und bedeutendste Auszeichnung für Fonds- und Asset Manager im deutschsprachigen Raum – sowohl für Aktien-, Renten- und Mischfonds (Scope Investment Awards) als auch für Sachwerte und alternative Investments (Scope Alternative Investment Awards). Die Scope Investment Awards blicken auf eine Historie von mehr als 10 Jahren zurück. Die Scope Alternative Investment Awards werden seit 2005 vergeben.\",\n scopeAwardText4:\n \"Eines der Merkmale des Scope Awards ist die etablierte Medienpartnerschaft mit dem Handelsblatt. Bereits seit 2013 findet die Preisverleihung gemeinsam mit dem Handelsblatt statt.\",\n scopeAwardText5:\n \"Ein weiterer Aspekt: Während sämtliche Auszeichnungen am Markt ausschließlich auf quantitative Kriterien setzen, werden beim Scope Award auch qualitative Kriterien umfassend berücksichtigt. Die Verwendung qualitativer Aspekte erhöht den Aufwand für unsere Analysten deutlich, ermöglicht dafür jedoch auf die Zukunft gerichtete Aussagen zur Qualität von Fonds und Managern.\",\n scopeAwardText6:\n \"Was unterscheidet eigentlich den Scope Award von einem Scope Rating? Zwar geht es bei beiden darum, qualitativ hochwertige Fonds und Asset Manager aus der Masse herauszuheben, dennoch gibt es einen gravierenden Unterschied: Ein Rating können Fondsanbieter und Asset Manager erwerben, für einen Award müssen sie sich im Rahmen der Teilnahme- und Nominierungsbedingungen qualifizieren.\",\n awardSculpture: \"Die Award Skulptur\",\n awardSculptureText1:\n \"Der Scope Award gibt als Skulptur sowohl der Identität des Unternehmens als auch der Zielsetzung der Auszeichnung eine greifbare Gestalt.\",\n awardSculptureText2:\n \"Die Scope Group steht für Unabhängigkeit, Kompetenz, Transparenz und Kontinuität. Mit der Verleihung des Investment Awards zeichnet die deutsche Ratingagentur die Qualität von Asset Managern von Publikumsfonds und institutionellen Fonds aus.\",\n awardSculptureText3:\n \"Die Suche nach einer Skulptur, die als Auszeichnung die Leistungen der Preisträger würdigt und gleichzeitig die Grundsätze der Scope Group symbolisiert, führte zu einer Kombination aus Metall und Glas.\",\n awardSculptureText4:\n \"Durchdringung ist die gestalterische Grundidee. Der Scope Award setzt sich aus geometrischen Formen zusammen. Die Linien sind klar und eindeutig. In Anlehnung an das Logo der Scope Group durchdringt ein Metallzylinder eine Stele aus Glas. Beide Elemente fußen auf einem quadratischen Fundament aus Edelstahl, der dem Objekt Gewicht und Standfestigkeit verleiht.\",\n awardSculptureText5:\n \"Metall steht für Integrität und messbaren Wert. Glas verbindet Transparenz mit einem hohen Anspruch an Sorgfalt. Die Skulptur vereint so die Durchdringung des Marktes mit der Unabhängigkeit des Urteils.\",\n awardSculptureText6:\n \"Die Auszeichnung hebt als Ganzes die Leistung des Preisträgers hervor. \",\n saveTheDate: \"Save the date\",\n saveTheDateHost: \" Moderation: Barbara Schöneberger\",\n nominees: \"Nominierungen\",\n nomineesTextTooltip:\n \"Die Nominierungen werden von der Jury Anfang September bekannt gegeben\",\n videoBannerText:\n \"Impressionen vom Scope Award 2022 in Berlin // Moderation Barbara Schöneberger\",\n winner: \"Gewinner\",\n winner2: \"Die Gewinner\",\n winners: \"Gewinner\",\n winnerMoreBtn: \"Mehr\",\n winnerText:\n \"Die Gewinner werden im Rahmen der Award Verleihung am 18. November bekannt gegeben. Im Handelsblatt werden die Gewinner am Folgetag veröffentlicht\",\n nominationAltInvestmentRequirements: \"Nominierungsbedingungen & Methodik\",\n nominationAltInvestmentRequirementsText:\n \"Teilnahmekriterien und Auswahlprozess\",\n categories: \"Kategorien\",\n assetManagersFunds: \"Asset Manager / Fonds\",\n categoriesInvestment: \"Kategorien Investment\",\n categoriesAlternativeInvestment: \"Kategorien Alternative Investment\",\n categoriesCertificate: \"Kategorien Zertifikate\",\n showLess: \"Weniger anzeigen\",\n mediaPartner: \"Medienpartner:\",\n country: \"Land:\",\n germany: \"DE\",\n austria: \"AT\",\n switzerland: \"CH\",\n awards2022: {\n date: \"18. November 2021 in Berlin\",\n subtitle:\n \"Die traditionsreichste und bedeutendste Auszeichnung für Fonds und Asset Manager\",\n subtitleAlternative:\n \"Die traditionsreichste und bedeutendste Auszeichnung für Asset Manager\",\n subtitleCertificate:\n \"Die traditionsreichste und bedeutendste Auszeichnung für Zertifikate Emittenten\",\n investment: {\n categoriesText:\n \"In insgesamt 28 Kategorien werden Scope Investment Awards 2022 verliehen:\",\n categoriesSubItem1: \"16 Asset Manager Kategorien\",\n categoriesSubItem2: \"12 Fonds Kategorien\",\n nomineesText:\n \"In 28 Kategorien für Aktien-, Renten- und Mischfonds werden die überzeugendsten Fondskonzepte und besten Asset Management Leistungen des Jahres mit dem Scope Award ausgezeichnet.\",\n winnersText1:\n \"Scope Awards – Die besten Asset Manager und Fonds ausgezeichnet\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt hat die Ratingagentur Scope die 16. Scope Awards verliehen.\",\n },\n alternativeInvestment: {\n categoriesText:\n \"In insgesamt 20 Kategorien werden die Scope Alternative Investment Awards 2022 verliehen:\",\n categoriesSubItem1: \"Institutional & Retail Real Estate\",\n categoriesSubItem2: \"ESG\",\n categoriesSubItem3: \"Alternative Investments\",\n categoriesSubItem4: \"Special Award\",\n nomineesText:\n \"In 21 Kategorien für Real Estate, ESG und Alternative Investments werden die besten Asset Management Leistungen des Jahres mit dem Scope Award ausgezeichnet.\",\n winnersText1: \"Scope Awards – Die besten Asset Manager ausgezeichnet\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt hat die Ratingagentur Scope die 16. Scope Awards verliehen.\",\n },\n certificate: {\n categoriesText:\n \"In vier Kategorien werden die Scope Zertifikate Awards 2022 verliehen.\",\n nomineesText:\n \"In vier Kategorien für Primärmarkt, Sekundärmarkt, Trading und ESG werden die besten Zertifikate Emittenten des Jahres mit dem Scope Award ausgezeichnet.\",\n winnersText1:\n \"Scope Awards – Die besten Zertifikateanbieter ausgezeichnet\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt hat die Ratingagentur Scope die 16. Scope Awards verliehen.\",\n },\n requirements: {\n text: \"Teilnahmekriterien und Auswahlprozess\",\n },\n },\n awards2023: {\n date: \"17. November 2022 in Berlin\",\n subtitle:\n \"Die traditionsreichste und bedeutendste Auszeichnung für Fonds und Asset Manager.\",\n subtitleAlternative:\n \"Die traditionsreichste und bedeutendste Auszeichnung für Fonds und Asset Manager.\",\n subtitleCertificate:\n \"Die traditionsreichste und bedeutendste Auszeichnung für Fonds und Asset Manager.\",\n investment: {\n categoriesText:\n \"In insgesamt 30 Kategorien werden Scope Investment Awards 2023 verliehen:\",\n categoriesSubItem1: \"17 Asset Manager Kategorien\",\n categoriesSubItem2: \"13 Fonds Kategorien\",\n nomineesText:\n \"In 30 Kategorien für Aktien-, Renten- und Mischfonds werden die überzeugendsten Fondskonzepte und besten Asset Management Leistungen des Jahres mit dem Scope Award ausgezeichnet.\",\n winnersText1:\n \"Scope Awards – Die besten Asset Manager und Fonds ausgezeichnet\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt hat die Ratingagentur Scope die 17. Scope Awards verliehen.\",\n },\n alternativeInvestment: {\n categoriesText:\n \"In insgesamt 21 Kategorien werden die Scope Alternative Investment Awards 2023 verliehen:\",\n categoriesSubItem1: \"Institutional & Retail Real Estate\",\n categoriesSubItem2: \"ESG\",\n categoriesSubItem3: \"Alternative Investments\",\n categoriesSubItem4: \"Special Award\",\n nomineesText:\n \"In 21 Kategorien für Real Estate, ESG und Alternative Investments werden die besten Asset Management Leistungen des Jahres mit dem Scope Award ausgezeichnet.\",\n winnersText1: \"Scope Awards – Die besten Asset Manager ausgezeichnet\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt hat die Ratingagentur Scope die 17. Scope Awards verliehen.\",\n },\n certificate: {\n categoriesText:\n \"In vier Kategorien werden die Scope Zertifikate Awards 2023 verliehen.\",\n nomineesText:\n \"In vier Kategorien für Primärmarkt, Sekundärmarkt, Trading und ESG werden die besten Zertifikate Emittenten des Jahres mit dem Scope Award ausgezeichnet.\",\n winnersText1:\n \"Scope Awards – Die besten Zertifikateanbieter ausgezeichnet\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt hat die Ratingagentur Scope die 17. Scope Awards verliehen.\",\n },\n requirements: {\n text: \"Teilnahmekriterien und Auswahlprozess.\",\n },\n },\n awards2024: {\n date: \"16. November 2023, Frankfurt am Main\",\n subtitle: \"16. November 2023, Frankfurt am Main\",\n subtitleAlternative: \"16. November 2023, Frankfurt am Main\",\n subtitleCertificate: \"16. November 2023, Frankfurt am Main\",\n investment: {\n categoriesText:\n \"In insgesamt 30 Kategorien werden Scope Investment Awards 2024 verliehen:\",\n categoriesSubItem1: \"16 Asset Manager Kategorien\",\n categoriesSubItem2: \"13 Fonds Kategorien\",\n categoriesSubItem3: \"Sonderkategorie: Fund Innovations\",\n nomineesText:\n \"In 30 Kategorien für Aktien-, Renten- und Mischfonds werden die überzeugendsten Fondskonzepte und besten Asset Management Leistungen des Jahres mit dem Scope Award ausgezeichnet.\",\n nomineesInfo:\n \"Die Nominierungen werden Anfang September bekanntgegeben 2023.\",\n winnersText1:\n \"Scope Awards – Auszeichnung der besten Asset Manager und Fonds\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt hat die Ratingagentur Scope die 18. Scope Awards verliehen.\",\n winnersInfo:\n \"Die Gewinner werden beim Scope Award 2024 am 16. November 2023 in Frankfurt am Main bekanntgegeben.\",\n },\n alternativeInvestment: {\n categoriesText:\n \"In insgesamt 20 Kategorien werden die Scope Alternative Investment Awards 2024 verliehen:\",\n categoriesSubItem1: \"Real Estate\",\n categoriesSubItem2: \"ESG\",\n categoriesSubItem3: \"Alternative Investments\",\n categoriesSubItem4: \"Special Award\",\n nomineesText:\n \"In 20 Kategorien für Real Estate, ESG und Alternative Investments werden die besten Asset Management Leistungen des Jahres mit dem Scope Award ausgezeichnet.\",\n nomineesInfo:\n \"Die Nominierungen werden Anfang Oktober bekanntgegeben 2023.\",\n winnersText1: \"Scope Awards – Auszeichnung der besten Asset Manager\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt hat die Ratingagentur Scope die 18. Scope Awards verliehen.\",\n winnersInfo:\n \"Die Gewinner werden beim Scope Award 2024 am 16. November 2023 in Frankfurt am Main bekanntgegeben.\",\n },\n certificate: {\n categoriesText:\n \"In vier Kategorien werden die Scope Zertifikate Awards 2024 verliehen.\",\n nomineesText:\n \"In vier Kategorien für Primärmarkt, Sekundärmarkt, Trading und ESG werden die besten Zertifikate Emittenten des Jahres mit dem Scope Award ausgezeichnet.\",\n nomineesInfo:\n \"Die Nominierungen werden Mitte Oktober 2023 bekanntgegeben.\",\n winnersText1:\n \"Scope Awards – Auszeichnung der besten Zertifikate Emittenten\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt hat die Ratingagentur Scope die 18. Scope Awards verliehen.\",\n winnersInfo:\n \"Die Gewinner werden beim Scope Award 2024 am 16. November 2023 in Frankfurt am Main bekanntgegeben.\",\n },\n requirements: {\n text: \"Teilnahmekriterien und Auswahlprozess.\",\n },\n },\n awards2025: {\n date: \"\",\n subtitle: \"\",\n subtitleAlternative: \"\",\n subtitleCertificate: \"\",\n investment: {\n categoriesText:\n \"In insgesamt 30 Kategorien werden Scope Investment Awards 2025 verliehen:\",\n categoriesSubItem1: \"15 Asset Manager Kategorien\",\n categoriesSubItem2: \"15 Fonds Kategorien\",\n categoriesSubItem3: \"Sonderkategorie: Fund Innovations\",\n nomineesText:\n \"In 30 Kategorien für Aktien-, Renten- und Mischfonds werden die überzeugendsten Fondskonzepte und besten Asset Management Leistungen des Jahres mit dem Scope Award ausgezeichnet.\",\n nomineesInfo:\n \"Die Nominierungen werden Anfang September 2024 bekanntgegeben.\",\n winnersText1:\n \"Scope Awards – Auszeichnung der besten Asset Manager und Fonds\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt verleiht die Ratingagentur Scope die 19. Scope Awards verliehen.\",\n winnersInfo:\n \"Die Gewinner werden am 21. November 2024 bekanntgegeben.\",\n },\n alternativeInvestment: {\n categoriesText:\n \"In insgesamt 25 Kategorien werden die Scope Alternative Investment Awards 2025 verliehen:\",\n categoriesSubItem1: \"Institutional Real Estate\",\n categoriesSubItem2: \"Retail Real Estate\",\n categoriesSubItem3: \"Real Estate\",\n categoriesSubItem4: \"ESG\",\n categoriesSubItem5: \"Alternative Investments\",\n categoriesSubItem6: \"ELTIF\",\n categoriesSubItem7: \"Special Award\",\n nomineesText:\n \"In 25 Kategorien für Real Estate, ESG, Alternative Investments und ELTIF werden die besten Asset Management Leistungen des Jahres mit dem Scope Award ausgezeichnet.\",\n nomineesInfo:\n \"Die Nominierungen werden Anfang Oktober 2024 bekanntgegeben.\",\n winnersText1: \"Scope Awards – Auszeichnung der besten Asset Manager\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt verleiht die Ratingagentur Scope die 19. Scope Awards.\",\n winnersInfo:\n \"Die Gewinner werden am 21. November 2024 bekanntgegeben.\",\n },\n certificate: {\n categoriesText:\n \"In vier Kategorien werden die Scope Zertifikate Awards 2025 verliehen.\",\n nomineesText:\n \"In vier Kategorien für Primärmarkt, Sekundärmarkt, Trading und ESG werden die besten Zertifikate Emittenten des Jahres mit dem Scope Award ausgezeichnet.\",\n nomineesInfo:\n \"Die Nominierungen werden Mitte Oktober 2024 bekanntgegeben.\",\n winnersText1:\n \"Scope Awards – Auszeichnung der besten Zertifikate Emittenten\",\n winnersText2:\n \"Gemeinsam mit dem Medienpartner Handelsblatt hat die Ratingagentur Scope die 19. Scope Awards verliehen.\",\n winnersInfo:\n \"Die Gewinner werden am 21. November 2024 bekanntgegeben.\",\n },\n requirements: {\n text: \"Teilnahmekriterien und Auswahlprozess.\",\n },\n },\n },\n scopeAwardsCategories: {\n assetManager: \"Asset Manager\",\n funds: \"Fonds\",\n institutionalRealEstate: \"Institutional Real Estate\",\n retailRealEstate: \"Retail Real Estate\",\n realEstate: \"Real Estate\",\n alternativeInvestments: \"Alternative Investments\",\n specialAward: \"Special Award\",\n bestFundEquitiesGermany: \"Aktien Deutschland\",\n bestEquitiesEurope: \"Aktien Europa\",\n bestFundEquitiesNorthAmerica: \"Aktien Nordamerika\",\n bestFundEquitiesJapan: \"Aktien Japan\",\n bestFundEquitiesGlobal: \"Aktien Welt\",\n bestFundEquitiesEmergingMarkets: \"Aktien Emerging Markets (Fonds)\",\n bestFundBalancedGlobalFlexible: \"Mischfonds Global Flexibel\",\n bestFundBalancedGlobalDynamic: \"Mischfonds Global Dynamisch\",\n bestFundBalancedGlobalConservative: \"Mischfonds Global Konservativ\",\n bestFundInnovations: \"Innovations\",\n innovationsDisclaimer:\n \"In der Kategorie gibt es keine Nominierungen, der Gewinner wird am 16.11.2023 ausgezeichnet\",\n completeProductRangeIssuer: \"Universal-Emittent\",\n bestAmCompleteProductRanges: \"Universalanbieter\",\n bestAmCompleteProductRange: \"Universalanbieter\",\n bestAmBoutiques: \"Spezialanbieter\",\n bestAmBoutique: \"Spezialanbieter\",\n bestAmExchangeTradeFunds: \"Exchange Traded Funds (ETFs)\",\n bestAmEsgCompleteProductRanges: \"ESG Universalanbieter\",\n bestAmEsgBoutiques: \"ESG Spezialanbieter\",\n bestAmEquities: \"Aktienfonds\",\n bestAmEsgEquities: \"ESG Aktienfonds\",\n bestAmThematicFunds: \"Themenfonds Aktien\",\n bestAmBonds: \"Rentenfonds\",\n bestAmEsgCompleteProductRange: \"ESG Universalanbieter\",\n bestAmEsgBoutique: \"ESG Spezialanbieter\",\n bestFundBondsGlobalCurrency: \"Renten Globale Währungen\",\n bestFundBondsEur: \"Renten EURO\",\n bestFundBondsEurCorpHighYield: \"Renten EURO Corp. High Yield\",\n bestFundBondsUsdCorpHighYield: \"Renten USD Corp. High Yield\",\n bestFundBondsGlobalCorpHighYield: \"Renten Global Corp. High Yield\",\n bestBalancedGlobalBalanced: \"Mischfonds Global Ausgewogen\",\n bestFundBondsEmergingMarketsHardCurrency:\n \"Renten Emerging Markets Hard Currency\",\n bestAmEsgFixedIncome: \"ESG Rentenfonds\",\n bestAmMultiStrategy: \"Multi Strategie\",\n bestAmEquitiesEmergingMarkets: \"Aktien Emerging Markets (AM)\",\n bestAmMultiAsset: \"Multi Asset\",\n bestAmEmergingMarketsBonds: \"Renten Emerging Markets\",\n bestAmEmergingMarketsEquities: \"Aktien Emerging Markets\",\n bestAmConvertibleBonds: \"Wandelanleihen\",\n bestAmDividendEquities: \"Aktien Dividende\",\n bestAmEtf: \"Exchange Traded Funds (ETFs)\",\n bestAmSmallCaps: \"Aktien Nebenwerte\",\n equitiesGermany: \"Aktien Deutschland\",\n equitiesEurope: \"Aktien Europa\",\n equitiesNorthAmerica: \"Aktien Nordamerika\",\n equitiesGlobal: \"Aktien Welt\",\n equitiesThematicFunds: \"Aktien Themenfonds\",\n esgFunds: \"ESG Fonds\",\n esgImpactFunds: \"ESG Impact Fonds\",\n equitiesEmergingMarkets: \"Aktien Emerging Markets\",\n bondsEUR: \"Renten EURO\",\n bondsEURCorp: \"Renten EURO Corp. High Yield\",\n bondsUsCorp: \"Renten US Corp. High Yield\",\n bondsEmergingMarkets: \"Renten Emerging Markets Hard Currency\",\n bondsGlobalCurrency: \"Renten Globale Währungen\",\n balancedGlobalFlexible: \"Mischfonds Global Flexibel\",\n fundInnovations: \"Fund Innovations\",\n institutionalReGlobal: \"Institutional Real Estate Global\",\n institutionalReEurope: \"Institutional Real Estate Europe\",\n institutionalReGermany: \"Institutional Real Estate Germany\",\n institutionalReResidential: \"Institutional Real Estate Residential\",\n institutionalReSpecialist: \"Institutional Real Estate Specialist\",\n retailReGlobal: \"Retail Real Estate Global\",\n realEstateGlobal: \"Real Estate Global\",\n retailReEurope: \"Retail Real Estate Europe\",\n retailReGermany: \"Retail Real Estate Germany\",\n retailReResidential: \"Retail Real Estate Residential\",\n retailReSpecialist: \"Retail Real Estate Specialist\",\n realEstateSpecialist: \"Real Estate Specialist\",\n realEstateLogistics: \"Real Estate Logistics\",\n realEstateEssentialRetail: \"Real Estate Essential Retail\",\n esgInfrastructure: \"ESG Infrastructure\",\n esgRealEstate: \"ESG Real Estate\",\n esgCommercialRealEstate: \"ESG Commercial Real Estate\",\n esgResidentialRealEstate: \"ESG Residential Real Estate\",\n privateDebt: \"Private Debt\",\n privateEquity: \"Private Equity\",\n infrastructureDebt: \"Infrastructure Debt\",\n infrastructureEquity: \"Infrastructure Equity\",\n infrastructureEquityRenewableEnergy: \"Infrastructure Equity - New Energy\",\n transportation: \"Transportation\",\n eltif: \"ELTIF\",\n eltifPrivateMarketsPe: \"ELTIF - Private Markets PE\",\n eltifPrivateMarketsPd: \"ELTIF - Private Markets PD\",\n eltifPrivateMarketsInfrastructure:\n \"ELTIF - Private Markets Infrastructure\",\n eltifPrivateMarketsMixed: \"ELTIF - Private Markets Mixed\",\n eltifPrivateMarketsDiversified: \"ELTIF - Private Markets Diversified\",\n innovation: \"Innovation\",\n innovationRealAssets: \"Innovation – Real Assets\",\n innovationAif: \"Innovation – Alternative Investments\",\n primaryMarket: \"Primärmarkt\",\n secondaryMarket: \"Sekundärmarkt\",\n trading: \"Trading\",\n esg: \"ESG\",\n specialMentionFundInnovations: \"Sonderkategorie Fund Innovations\",\n rentenUsCorpHighYield: \"Renten US Corp. High Yield\",\n commodity: \"Rohstofffonds\",\n balancedGlobalConservative: \"Mischfonds Global Konservativ\",\n },\n scopeAwardsNominees: {\n degussaBank: \"Degussa Bank für Nachhaltigkeitfonds Akzentuiert\",\n hanetfFundSpectrum: \"HANetf für gesamtes Fondsspektrum\",\n unionInvestment: \"Union Investment für KinderZukunftsFonds\",\n },\n nominationAltInvestmentRequirements: {\n title: \"Nominierungsbedingungen\",\n subtitle: \"Alternative Investments\",\n section1Title: \"Teilnahmekriterien und Auswahlprozess\",\n section1Text1:\n \"Nominiert und ausgezeichnet werden die besten Asset Manager von Publikumsfonds und institutionellen Anlageprodukten im Bereich Alternative Investments.\",\n section1Text2:\n \"Eine Teilnahme am Award erfolgt unentgeltlich für das Universum der Anbieter von Alternativen Investments mit europäischer Zulassung auf Ansprache durch die Scope Fund Analysis GmbH oder aufgrund eigener Bewerbung.\",\n section2Title: \"Ihre Bewerbung\",\n section2Text1: \"Der Bewerbungsprozess beginnt Mitte Juli 2024.\",\n section3Title: \"Bewertungskriterien sind unter anderem:\",\n investmentManagement: \"Investment Management\",\n operationalAssetManagement: \"Operatives Asset Management\",\n trackRecord: \"Track Record\",\n esg: \"ESG\",\n eltif: \"ELTIF\",\n eltifPrivateMarketsPe: \"ELTIF - Private Markets PE\",\n eltifPrivateMarketsPd: \"ELTIF - Private Markets PD\",\n eltifPrivateMarketsInfrastructure:\n \"ELTIF - Private Markets Infrastructure\",\n eltifPrivateMarketsMixed: \"ELTIF - Private Markets Mixed\",\n innovation: \"Innovationskraft\",\n transparency: \"Transparenz\",\n section3Text1:\n \"Die vorgenannten Bewertungskriterien unterteilen sich in zahlreiche Unterkriterien, deren Einordnung in einer Scorecard durch die Analysten der Scope Fund Analysis vorgenommen wird. \",\n section3Text2:\n \"Die Bewertung basiert dabei auf der Beantwortung der Fragebögen und weiteren vom Asset Manager zur Verfügung gestellten sowie öffentlich zugänglichen Informationen.\",\n section3Text3: \"Die Bewerbungsunterlagen erhalten Sie auf Anfrage unter:\",\n email: \"alternative-investment-awards@scopeanalysis.com.\",\n section3ButtonText: \"Download der Methodik 2025\",\n file: \"/Methodik_Scope_Alternative Investment_Award 2025_DE.pdf\",\n },\n nominationInvestmentRequirements: {\n title: \"Nominierungsbedingungen & Methodik\",\n subtitle: \"Investment Fonds\",\n section1Title: \"Teilnahmekriterien und Auswahlprozess\",\n section1Text1:\n \"Nominiert und ausgezeichnet werden die besten Aktien-, Renten- und Mischfonds in 14 Kategorien plus die Sonderkategorie „Fund Innovations“ sowie Asset Manager in 15 Kategorien.\",\n section1Text2:\n \"Eine Teilnahme am Award erfolgt für die Anbieter unentgeltlich im jeweiligen Fonds-Universum (Deutschland, Österreich und die Schweiz) unter Berücksichtigung der jeweils zum öffentlichen Vertrieb zugelassenen Fonds.\",\n section1Text3: \"Download der Methodik 2025\",\n section2Title: \"Bewertungskriterien sind unter anderem:\",\n section2List1: \"Fondsmanagement\",\n section2List2: \"Managementumfeld\",\n section2List3: \"Gestaltung des Investment Prozesses\",\n section2List4: \"Implementierung des Investment Prozesses\",\n section2List5: \"Scope Fondsrating\",\n section2Text1:\n \"Die vorgenannten Bewertungskriterien unterteilen sich in zahlreiche Unterkriterien, deren Einordnung in einer Scorecard durch die Analysten der Scope Fund Analysis vorgenommen wird.\",\n section2Text2:\n \"Die Bewertung basiert dabei auf der Beantwortung der Fragebögen und weiteren vom Asset Manager zur Verfügung gestellten sowie öffentlich zugänglichen Informationen.\",\n section2Text3: \"Für Anfragen diesbezüglich wenden Sie sich bitte an:\",\n email: \"investment-awards@scopeanalysis.com.\",\n file: \"/Methodik Scope Investment Awards 2025.pdf\",\n },\n nominationCertificateRequirements: {\n title: \"Nominierungsbedingungen\",\n subtitle: \"Zertifikate-Emittenten\",\n section1Title: \"Teilnahmekriterien und Auswahlprozess\",\n section2Title: \"Bester Emittent Primärmarkt / Sekundärmarkt\",\n section2Text1:\n \"Nominiert und ausgezeichnet werden die besten Zertifikate-Emittenten der letzten zwölf Monate in den Kategorien Primärmarktemittenten und Sekundärmarktemittenten.\",\n section2Text2:\n \"Die Kriterien für die Nominierung setzen sich aus den folgenden Elementen zusammen:\",\n section2List1: \"Marktstellung\",\n section2List2: \"Innovationskraft\",\n section2List3: \"Produktangebot\",\n section2List4: \"Digitalisierungsstrategie\",\n section2List5: \"Alleinstellungsmerkmale\",\n section2List6: \"Kundenservice\",\n section2Text3:\n \"Die vorgenannten Bewertungskriterien unterteilen sich zum Teil in Unterkriterien, deren Einordnung in einer Scorecard durch die Analysten der Scope Fund Analysis vorgenommen wird.\",\n section3Title: \"Bester Emittent Trading\",\n section3Text1:\n \"Scope nominiert und zeichnet mit dem Trading Award Emittenten mit der besten Preisstellung und dem bestem Leistungsspektrum bei Hebelprodukten und Discountzertifikaten aus. Basis für die Nominierung von Scope ist zum einen eine quantitative Auswertung der Preisstellung der Emittenten im Monat September 2024. Zum anderen fließen in die Entscheidung weitere Faktoren wie Produktangebot, Marktanteile und Kundenservice ein.\",\n section4Title: \"Bester Emittent ESG\",\n section4Text1:\n \"Mit dem ESG Award nominiert und zeichnet Scope Emittenten aus, die im letzten Jahr unter ESG Gesichtspunkten am besten abgeschnitten haben. Basis für die Nominierung von Scope ist zum einen, wie nachhaltig der Emittent als Produktanbieter an sich ist. Zum anderen fließen in die Entscheidung weitere Faktoren wie die Erweiterung des Angebots um nachhaltige Produkte sowie die Bereitstellung von Informationen unter nachhaltigen Aspekten ein.\",\n section5Title: \"Teilnahmebedingungen\",\n section5Text1:\n \"Eine Teilnahme am Award erfolgt unentgeltlich für das Universum der im Bundesverband für strukturierte Wertpapiere (BSW) organisierten Emittenten auf Ansprache durch die Scope Fund Analysis GmbH. \",\n section5Text2: \"Für Anfragen wenden Sie sich bitte an:\",\n email: \"zertifikate-awards@scopeanalysis.com\",\n },\n portrait: {\n subtitle:\n \"Scope Fund Analysis ist Teil der Scope Gruppe und bewertet Investmentfonds, Asset Manager und Zertifikate-Anbieter. Die aktuell mehr als 10.000 analysierten Anlageprodukte verwalten ein Vermögen von rund 5,3 Billionen Euro. Der überwiegende Teil der Bewertungen ist auf dem ScopeExplorer frei zugänglich.\",\n subtitle2:\n \" Das Unternehmen hat mehr als 20 Jahre Erfahrung mit der Beurteilung von Investments und Asset Managern. Die mehr als 25 Analystinnen und Analysten verteilen sich auf die Standorte Frankfurt am Main und Berlin.\",\n section1Title: \"Die Analyse-Aktivitäten gruppieren sich in zwei Bereiche\",\n section2Title: \"Das Fonds Rating von Scope – zum Hintergrund\",\n section2Text1:\n \"Das Fonds Rating von Scope Fund Analysis ist ein objektives Gütesiegel, das Investoren bei der Einschätzung der Qualität eines Fonds unterstützt. Die meisten Fonds werden quantitativ beurteilt auf Grundlage ihrer bisher gezeigten Leistungen. Bei ausgewählten Fonds erfolgt zusätzlich eine qualitative Bewertung.\",\n section2Text2:\n \"Das Scope Fonds Rating hat einen prognostischen Charakter und trifft eine in die Zukunft gerichtete Aussage über die Qualität eines Produkts. Grundlage des Ratings ist ein mehrdimensionales Bewertungsmodell, das sowohl Performance- als auch Risiko-Aspekte reflektiert. Darüber hinaus können weitere Aspekte wie ESG oder die Qualität des Fondsmanagements in die Bewertung einfließen.\",\n methodologies: \"Methodiken\",\n },\n subscriptionRating: {\n text1:\n \"Ausführliche Informationen inklusive Ratingnoten und Ratingreport stehen angemeldeten Nutzern zur Verfügung. Bitte loggen Sie sich mit Ihren Nutzerdaten ein oder registrieren sich jetzt kostenfrei.\",\n },\n },\n en: {\n app: {\n help: \"Help\",\n save: \"Save\",\n confirm: \"Confirm\",\n cancel: \"Cancel\",\n edit: \"Edit\",\n remove: \"Remove\",\n link: \"Link\",\n yes: \"Yes\",\n no: \"No\",\n uploadText1: \"Click or drag image file to this area to upload.\",\n uploadText2: \"We only allow\",\n uploadText3: \"formats with a maximum size of \",\n and: \"and\",\n dataFor: \"Data as of \",\n new: \"New\",\n expandAll: \"Expand all\",\n collapseAll: \"Collapse all\",\n },\n routes: {\n home: \"/en/\",\n confirm: \"/en/confirm\",\n reset: \"/en/reset\",\n unsubscribe: \"/en/unsubscribe\",\n fundsInFocus: \"/en/funds-in-focus\",\n ratingInFocus: \"/en/rating-in-focus\",\n watchlist: \"/en/watchlist\",\n news: \"/en/news\",\n newsDetails: \"/en/news/:slug?/:id\",\n reports: \"/en/reports\",\n reportsDetails: \"/en/reports/:slug?/:id\",\n oif: \"/en/oif\",\n oifDetails: \"/en/oif/:slug?/:id\",\n searchResults: \"/en/search-results\",\n filterSearchResults: \"/en/filter-search-results\",\n advSearchResults: \"/en/advanced-search-results\",\n details: \"/en/details/:slug/:id\",\n premium: \"/en/premium\",\n methodology: \"/en/methodology\",\n methodologies: \"/en/methodologies\",\n legalNotice: \"/en/legal-notice\",\n privacyPolicy: \"/en/privacy-policy\",\n contact: \"/en/contact\",\n savedSearches: \"/en/saved-searches\",\n rechtlicheHinweise: \"/en/rechtliche-hinweise\",\n termsOfUse: \"/en/terms-of-use\",\n termsAndConditions: \"/en/terms-and-conditions\",\n conferencesListLoading: \"/en/conferences-loading\",\n conferencesList: \"/en/conferences\",\n conferencesList2: \"/en/conferences_list\",\n conferenceDetails: \"/en/conferences/:id\",\n assetManagerDashboard: \"/en/asset-manager-dashboard/:id/\",\n fundRatings: \"/en/asset-manager-dashboard/:id/fund-ratings\",\n teamRating: \"/en/asset-manager-dashboard/:id/team-rating\",\n profileEdit: \"/en/asset-manager-dashboard/:id/profile\",\n assetManagerStats: \"/en/asset-manager-dashboard/:id/stats\",\n assetManagerConferences: \"/en/asset-manager-dashboard/:id/conferences\",\n surveyEquityFund: \"/en/survey/equity-fund\",\n surveySovereignBondFund: \"/en/survey/sovereign-bond-fund\",\n surveyCorporateBondFund: \"/en/survey/corporate-bond-fund\",\n surveyAggregateBondFund: \"/en/survey/aggregate-bond-fund\",\n surveyMultiAssetFund: \"/en/survey/multi-asset-fund\",\n surveyEsgCompany: \"/en/survey/company\",\n surveyEsgFund: \"/en/survey/fund\",\n dekaSurvey: \"/en/deka-survey\",\n assetManagerDetails: \"/en/asset-managers/:id\",\n assetManagers: \"/en/asset-managers\",\n assetManagerNews: \"/en/asset-manager-news/:slug/:id\",\n editFund: \"/en/edit-fund/:id\",\n userProfile: \"/en/profile\",\n benchmarks: \"/en/benchmarks/:id\",\n aifPage: \"/en/aif-page\",\n wholesale: \"/en/professional-investors\",\n selectSurvey: \"/en/select-survey\",\n scopeAwards: \"/en/scope-awards/:year([0-9]{4})\",\n scopeInvestmentAwards: \"/en/scope-awards/:year/investment\",\n scopeAlternativeInvestmentAwards:\n \"/en/scope-awards/:year/alternative-investment\",\n scopeCertificateAwards: \"/en/scope-awards/:year/certificate\",\n scopeAwardsCategories: \"/en/scope-awards/:year/:name/categories\",\n scopeAwardsNominees: \"/en/scope-awards/:year/:name/nominees/:categoryId?\",\n scopeAwardsWinners: \"/en/scope-awards/:year/:name/winners\",\n nominationAltInvestmentRequirements:\n \"/en/nomination-alternative-investment-requirements\",\n nominationInvestmentRequirements:\n \"/en/nomination-investment-requirements\",\n nominationCertificateRequirements:\n \"/en/nomination-certificate-requirements\",\n portrait: \"/en/scope-fund-analysis\",\n },\n meta: {\n home: \"Fund ratings, rankings and comparisons | ScopeExplorer\",\n homeDesc:\n \"ScopeExplorer is a simple and independent tool to help you choose from over 6000 rated funds. Check your fund now!\",\n searchResults: \"Search results | ScopeExplorer\",\n searchResultsDesc:\n \"Find your fund's position in the comparative ranking. See which funds top their peer groups based on our independent fund rating.\",\n fundsInFocus:\n \"In focus: a selection of innovative, successful funds | ScopeExplorer | ScopeExplorer\",\n fundsInFocusDesc:\n \"Funds selected by our rating analysts due to their outstanding results or innovative investment ideas and management approaches. Benefit from our experience!\",\n ratingInFocus: \"Team Ratings | ScopeExplorer\",\n premium: \"Premium | ScopeExplorer\",\n contact: \"Contact | ScopeExplorer\",\n methodology: \"Our assessment: fund rating methodology | ScopeExplorer\",\n methodologyDesc:\n \"The Scope fund rating methodology, established for over 20 years, allows us to evaluate funds transparently for your investment needs\",\n methodologiesDesc:\n \"In this section you find full documents on methodologies and rating processes that Scope uses to evaluate funds, asset manager and issuers of certificates.\",\n legalNotice: \"Legal notice | ScopeExplorer\",\n privacy: \"Privacy | ScopeExplorer\",\n news: \"The latest news, analysis and publications | ScopeExplorer\",\n newsDesc:\n \"The latest news, analysis and background information on funds and investments from Scope, the independent rating agency. Discover what's driving the market!\",\n scopeExplorer: \"ScopeExplorer\",\n notFound: \"404 - Not found | ScopeExplorer\",\n fundDetails: \"Fund details\",\n fundDetailsDesc:\n \"All the facts and ratings about your fund. Detailed information on how the fund is performing and all the factors you need for your investment decision.\",\n newsDetails: \"News details | ScopeExplorer\",\n watchlist: \"Watchlist | ScopeExplorer\",\n privacyPolicy: \"Privacy policy | ScopeExplorer\",\n rechtlicheHinweise: \"Rechtliche Hinweise | ScopeExplorer\",\n termsOfUse: \"Terms of use | ScopeExplorer\",\n termsAndConditions:\n \"Besondere Bestimmungen der Offene Immobilienfonds Studie 2020 | ScopeExplorer\",\n },\n assetManagerCharts: {\n allMyProductsChart: \"All my products\",\n myTop10FundsChart: \"My Top 10 Funds\",\n myProductsInPeergroupChart: \"My Products in Peergroups\",\n top10FundsInSeChart: \"Top 10 Funds in SE\",\n top10PeergroupsInSeChart: \"Top 10 Peergroups in SE\",\n },\n assetManagers: {\n listTitle: \"Asset Manager\",\n title: \"Company profile\",\n profile: \"Profile\",\n profileSubtitle:\n \"Update your company profile here. Company profiles can be viewed by ScopeExplorer users under the 'Asset Manager' heading.\",\n subtitle:\n \"In this section you will find detailed portraits of asset managers - including Scope's assessment of their quality and the ratings of all funds of the asset manager.\",\n address_1: \"Address 1\",\n address_2: \"Address 2\",\n email: \"E-mail\",\n phone: \"Phone\",\n founded: \"Founded\",\n link: \"Link\",\n linkText: \"Link text\",\n description_short: \"Short description\",\n description: \"Description\",\n descriptionFixedQuestion:\n \"The asset manager you are looking for is not yet listed?\",\n descriptionFixedText:\n \"We regularly expand our overviews of asset manager. You can find the funds of all companies using our search function.\",\n editProfile: \"Edit profile\",\n list: \"Fund list of the asset manager\",\n employees: \"Company employees\",\n dateFrom: \"From:\",\n dateTo: \"To: \",\n contact: \"Contact\",\n topCompanyFunds: \"Top 10 Funds\",\n contactAssetManagerSuccess:\n \"Succesfully requested contact with Asset Manager.\",\n contactAssetManagerError: \"Error: unable to send your request.\",\n investmentFocus: \"Investment focus\",\n investmentRegion: \"Region\",\n volume: \"Number of rated funds\",\n aum: \"Assets under management\",\n companySize: \"Number of employees\",\n scopeEvalutaion: \"Scope assessment\",\n scopeFundRating: \"Scope Fund Rating\",\n topRated: \"Top Rated\",\n news: \"Research of Asset Manager\",\n esg: \"ESG sustainability analysis\",\n investorRating: \"Opinion of investors\",\n amTeams: \"Portfolio Manager\",\n from: \"From:\",\n macroOverview: \"Macro Overview\",\n macroOverviewOf: \"Macro Overview of\",\n selectedFunds: \"Selection of Asset Manager\",\n statistics: \"Statistics\",\n statisticsSubtitle:\n \"Auf dieser Seite finden Sie verschiedene Auswertungen zur Nutzung der Produkte Ihres Hauses im ScopeExplorer. Sie sehen auf einen Blick, welche Ihrer Fonds in den letzten Monaten das größte Interesse gefunden haben.\",\n conferences: \"Portfolio Manager Conferences\",\n conferences2: \"Portfolio Manager Conferences\",\n moreStatistics: \"More statistics\",\n add: \"Add\",\n remove: \"Remove\",\n apply: \"Apply\",\n selection: \"Your fund selection\",\n funds: \"funds\",\n text1: \"The chart and table show the\",\n text2:\n \"best-rated funds from the total number of funds matching your selection.\",\n requestSuccess: \"Thank you so much! We have received your request.\",\n fields: {\n image: \"Image\",\n title: \"Title\",\n language: \"Language\",\n pdfFile: \"PDF File\",\n first_name: \"First name\",\n last_name: \"Last name\",\n position: \"Position\",\n department: \"Department\",\n summary: \"Summary (max. 500 characters)\",\n },\n },\n assetManagerDashboard: {\n title: \"Asset Manager\",\n subtitle: \"\",\n errors: {\n default: \"Request failed. Please try again.\",\n 400: \"Wrong request data\",\n 401: \"Unauthorized\",\n fillInFields: \"Fill in required fields\",\n },\n newsSuccess: \"News saved.\",\n newsRemoved: \"News removed.\",\n fundSuccess: \"Fund saved.\",\n portfolioManagerSuccess: \"Portfolio Manager saved.\",\n portfolioManagerRemoved: \"Portfolio Manager removed.\",\n documentSuccess: \"Document saved.\",\n documentRemoved: \"Document removed.\",\n noDocuments: \"No documents yet.\",\n selectedFundsSuccess: \"Selected funds saved.\",\n success: \"Asset Manager saved.\",\n docCategories: {\n \"product-presentation\": \"Product presentation\",\n \"product-flyer\": \"Product flyer\",\n factsheet: \"Factsheet\",\n \"product-research\": \"Product research\",\n \"product-analysis\": \"Product analysis\",\n },\n macroOverviewOptions: {\n veryNegative: \"Very negative\",\n negative: \"Negative\",\n neutral: \"Neutral\",\n positive: \"Positive\",\n veryPositive: \"Very positive\",\n },\n volumeTooltip: \"This information is entered by Scope.\",\n investorRatingTooltip: \"This information is entered by Scope.\",\n investorRatingRequest: \"Request\",\n status: \"Status\",\n conferenceStatuses: {\n pending: \"Pending\",\n accepted: \"Accepted\",\n rejected: \"Rejected\",\n },\n registerForConferenceSuccess: \"Your request was sent to Scope.\",\n requestConferenceSuccess: \"Verification e-mail was sent to Scope.\",\n requestError: \"Error: unable to send your request.\",\n macroOverviewDate: \"Macro Overview date\",\n unsubscribedFromConference: \"Unsubscribed from conference.\",\n },\n assetManagerShareClassesTable: {\n accordionButton: \"Share classes\",\n shareClass: \"Share class\",\n isin: \"ISIN\",\n ogc: \"OGC\",\n minInvestment: \"Min. Investment\",\n currency: \"Currency\",\n },\n wholesale: {\n title: \"Get started as a professional investor with the ScopeExplorer\",\n header1:\n \"Professional features of Scope fund selection for your everyday life\",\n text1:\n \"The ScopeExplorer gives you free access to the entire Scope fund database.\",\n text2:\n \"Comprehensive selection filters for over 160 peer groups and individual selection lists support you in your daily research.\",\n text3:\n \"You can also use our qualitative analyses and recommendation lists for Scope fund selection.\",\n header2: \"Register now for free use\",\n header3: \"of ScopeExplorer as a professional investor.\",\n text4: \"Register for free\",\n header4: \"Portfolio Manager Conferences\",\n text5:\n \"With the Portfolio Manager Conferences we offer you an online conference format with analytical depth. Our analysts from the Scope fund selection address the topics that are relevant to our fund valuation and address your questions in discussions with the Portfolio Manager.\",\n text6: \"Register\",\n header5: \"COVID-19: The effects classified\",\n text7:\n \"With our Crash Drawdown you know at a glance how your funds are performing historically in the current situation.\",\n header6: \"We show what funds can really do\",\n text8:\n \"Benefit from our experience of over 20 years in the valuation of investment funds. You will find over 6,000 funds with valuation in our database, updated monthly. With our established methodology we focus on the constant performance of a fund. In over 160 peer groups we show you our exclusive ranking of the best products in our evaluation.\",\n text9:\n \"Benefit from our experience and take advantage of all additional offers for professional investors\",\n text10: \"with your registration.\",\n },\n profile: {\n title: \"Profile\",\n subtitle:\n \"Always keep the basic information about your company up to date\",\n retail: \"Private investor\",\n wholesale: \"Professional investor\",\n assetManager: \"Asset Manager\",\n },\n fundRatings: {\n title: \"Fund Ratings\",\n subtitle: \"Check or request company funds ratings\",\n subtitle2:\n \"On this page you can view all of your funds currently available on ScopeExplorer, upload fund documentation and request ratings for certain funds.\",\n },\n teamRating: {\n title: \"Team rating\",\n subtitle: \"Check or request team rating\",\n },\n selectSurvey: {\n esgQuestionnaire: \"Scope ESG questionnaire\",\n esgCompanyQuestionnaire: \"Scope ESG company questionnaire\",\n dvmEsgQuestionnaire: \"DVM ESG questionnaire\",\n downladQuestionnaires: \"Download of all questionnaires\",\n downloadAMSummary: \"Download all questionnaires of your Company\",\n uploadMarkedAsArticle89: \"Upload marked as article 8/9\",\n downloadEsgFundSummary: \"Alle ausgefüllten Fondsfragebögen herunterladen\",\n downloadEsgCompanySummary:\n \"Alle ausgefüllten Unternehmensfragebögen herunterladen\",\n footerText1:\n \"For further questions or in case of queries, please feel free to contact us at the following\",\n footerText2: \"e-mail address: \",\n dvmDescription: `This RfP asks with 16 questions the approach of an asset manager\n regarding all three E-, S- and G-criteria. Specific questions \n to single funds and their strategies and investment criteria are not included.`,\n },\n esgSurvey: {\n title: \"ESG-Fragebögen\",\n subtitle: \"\",\n filename: \"ESG Fragebögen \",\n },\n esgSurveyInfoModal: {\n title: \"Sehr geehrte(r) Umfrageteilnehmer/in,\",\n text1:\n \"Die im Wege dieser Umfrage erhobenen und nicht-personenbezogenen Daten werden für interne analytische Zwecke der Scope Fund Analysis GmbH, sowie zur Weitergabe an einen beschränken Kundenkreis der Scope Fund Analysis GmbH (darunter fallen ausschließlich institutionelle Investoren wie bspw. Dachfondsmanager, Pensionsfonds, etc.) verwendet.\",\n text2:\n \"Ihre Teilnahme an dieser Umfrage gilt als Einverständnis zur eingehend beschriebenen Verwendung der von Ihnen mitgeteilten Informationen.\",\n text3:\n \"Hinsichtlich personenbezogener Daten findet keine Verarbeitung dieser im Zusammenhang mit den sonstigen erhobenen Daten statt, sondern eine anonyme Auswertungen, die keinen Bezug zu Ihrer Person hat. Wir werden Ihre Antworten nicht zur Bewertung Ihrer Person nutzen und Ihre Antworten nicht zusammen mit den Sie identifizierenden Daten (z.B. Name, E-Mail Adresse) speichern. Selbstverständlich stehen Ihnen gegenüber der erhebenden Stelle (Scope Fund Analysis GmbH) das Recht auf Auskunft sowie der Löschung Ihrer personenbezogenen Daten unter Beachtung der gesetzlichen Vorgaben aus der DSGVO zu. Ihre personenbezogenen Daten werden für diese Umfrage aufgrund eines berechtigten Interesses nach Art. 6 Abs. 1 lit. 6 DSGVO erhoben.\",\n button1: \"Cancel\",\n button2: \"Ja, ich bin professioneller Anleger\",\n },\n uploadArticle89Modal: {\n errors: {\n default: \"Request failed. Please try again.\",\n 400: \"Wrong request data\",\n 401: \"Unauthorized\",\n fillInFields: \"Fill in required fields\",\n },\n title: \"Article 8/9 upload\",\n text1:\n \"Please upload here an Excel file identifying your funds as an Article 8 or Article 9 product.\",\n newArticle89Uploaded: \"File uploaded\",\n },\n removeFundKeyFactsModal: {\n text1: \"Do you want to delete these fund key facts?\",\n button1: \"Yes\",\n button2: \"No\",\n },\n eventsCaldendar: {\n title: \"Events calendar\",\n subtitle: \"Available soon\",\n },\n conferenceInfoModal: {\n title: \"Our conference offer for professional investors\",\n text1:\n \"This website is aimed exclusively at the following classes of investors: professional investors as defined by Directive 2014/65/EU (MiFID II); investors who meet the criteria under MiFID II for private investors to be classified as professional investors; semi-professional investors defined according to the German Investment Code (Kapitalanlagegesetzbuch - KAGB). The website is not aimed at private investors who fail to meet the aforementioned requirements.\",\n text2:\n \"Please confirm that you meet the above requirements for classification as a professional or semi-professional investor.\",\n text3:\n \"Scope Fund Analysis GmbH as the owner of ScopeExplorer provides only information on products and services. Scope Fund Analysis GmbH does not provide investment advice that takes into account individual investors’ circumstances. Scope Fund Analysis GmbH accepts no liability for the unauthorised use of the content provided.\",\n button1: \"Back to start page\",\n button2: \"Yes, I am a professional investor\",\n },\n assetManagerInfoModal: {\n title: \"For professional investors\",\n text1:\n \"Comgest's information material is aimed exclusively at professional investors. Please confirm that you are a professional investor to continue.\",\n text2:\n \"Scope assumes no liability for damages resulting from the unauthorized or incorrect use of content.\",\n button1: \"Back to start page\",\n button2: \"Yes, I am a professional investor\",\n },\n conferences: {\n title: \"Portfolio-Manager-Conferences\",\n subtitle: \"Available soon\",\n listTitle: \"Portfolio Manager Conference\",\n listTitle2: \"The online event format with analytical depth.\",\n listSubtitle:\n \"Our analysts from the Scope fund selection welcome selected portfolio managers for an interview. We address the topics that are relevant in our evaluation of funds and focus on your questions.\",\n pastEventsTitle: \"Video on Demand\",\n pastEventsSubtitle:\n \"View the video recordings of select live events at any time.\",\n webinare: \"Web conference\",\n live: \"Live\",\n files: \"Files\",\n speakers: \"Speakers\",\n date: \"Date\",\n startTime: \"Start time\",\n endTime: \"End time\",\n info: \"Information\",\n moreInfo2: \"View Recording\",\n additionalInfo: \"Additional information\",\n register: \"Register\",\n editSuccess: \"Conference saved successfully.\",\n signOutConfirmText:\n \"Do you really want to sign out from this conference?\",\n signOutButtonText: \"Sign out\",\n furtherConferenceText1: \"The new online event format for ScopeExplorer\",\n furtherConferenceText2: \"We regularly add further online events. If you\",\n furtherConferenceText3: \"register\",\n furtherConferenceText4:\n \"as a professional investor, you will also receive our event updates conveniently by e-mail.\",\n conferencesFormModalTitle: \"Hinzufügen einer Portfolio-Manager-Konferenz\",\n addConference: \"Add conference\",\n },\n savedSearches: {\n date: \"Date\",\n link: \"Link\",\n goTo: \"Go to search results\",\n remove: \"Delete\",\n addSuccess: \"Your search has been saved.\",\n addError: \"Error: unable to save search.\",\n removeSuccess: \"Your search has been deleted.\",\n removeError: \"Error: unable to delete search.\",\n },\n ratingInFocus: {\n overview: \"Selected team ratings\",\n strategy: \"Strategy:\",\n rating: \"Rating:\",\n category: \"Category:\",\n aum: \"AuM:\",\n team: \"Team management:\",\n reportDownload: \"Download report\",\n requestTeamRating: \"Request team rating\",\n name: \"Name of the Investment Team\",\n },\n cookieInfo: {\n text: \"This website uses cookies to improve user friendliness. By continuing to use the website, you consent to this. Further information on cookies and their deactivation can be found at \",\n link: \"here.\",\n understand: \"Understood\",\n },\n menu: {\n home: \"Search\",\n searchResults: \"Search results\",\n login: \"Login\",\n fundsInFocus: \"Funds in focus\",\n ratingInFocus: \"Team Ratings\",\n publications: \"Publications\",\n news: \"News\",\n reports: \"Reports\",\n oif: \"Offene Immobilienfonds\",\n methodology: \"Methodology\",\n methodologies: \"Methodologies\",\n premium: \"Premium\",\n watchlist: \"Watchlist\",\n savedSearches: \"Saved searches\",\n logout: \"Log out\",\n logoutSuccess: \"Logged out successfully.\",\n register: \"Register\",\n companies: \"Asset Manager\",\n assetManagers: \"Dashboard\",\n conferences: \"Conferences\",\n services: \"Services\",\n aif: \"OIF Studie 2022\",\n wholesale: \"For professional investors\",\n survey: \"Survey\",\n scopeAwards: \"Scope Awards\",\n scopeAwardsDetails: \"Scope Awards Details\",\n scopeAwardsCategories: \"Categories\",\n scopeAwardsNominees: \"Nominees\",\n scopeAwardsWinners: \"Winners\",\n nominationAltInvestmentRequirements: \"Nomination Requirements\",\n nominationInvestmentRequirements: \"Nomination Requirements & Methodology\",\n nominationCertificateRequirements: \"Nomination Requirements\",\n portrait: \"Scope Fund Analysis\",\n },\n footer: {\n privacyPolicy: \"Privacy policy\",\n rechtlicheHinweise: \"Rechtliche Hinweise\",\n termsOfUse: \"Terms of use\",\n legalNotice: \"Legal notice\",\n methodology: \"Methodology\",\n methodologies: \"Methodologies\",\n contact: \"Contact\",\n copyright: `Copyright © ${new Date().getFullYear()}`,\n scopeAnalysis: \"Scope Fund Analysis GmbH\",\n },\n validation: {\n required: \"Required.\",\n email: \"Invalid e-mail address.\",\n passwordsMatch: \"Passwords do not match.\",\n containLetter: \"Must contain at least one letter.\",\n uppercaseLetter: \"Must contain at least one uppercase letter.\",\n lowercaseLetter: \"Must contain at least one lowercase letter.\",\n containNumber: \"Must contain at least one digit.\",\n specialCharacter: \"Must contain at least one special character.\",\n maxValuePart1: \"Must contain maximum\",\n maxValuePart2: \"characters.\",\n minValuePart1: \"Must contain at least\",\n minValuePart2: \"characters.\",\n uploadFile: \"Please upload the correct file.\",\n },\n help: {\n of: \"of\",\n },\n unsubscribe: {\n title: \"Unsubscribe confirmation\",\n subtitle: \"Newsletter / Watchlist\",\n text1: \"You have successfully unsubscribed from our email services.\",\n text2:\n \"Thank you for using the ScopeExplorer newsletter and watchlist notifications.\",\n return: \"Return to homepage\",\n },\n home: {\n header:\n \"Scope Explorer: the quick, easy and innovative way to choose investment funds\",\n noAccount: \"Not registered yet?\",\n haveAccount: \"Already a member?\",\n register: \"Register now free of charge.\",\n or: \"or\",\n signIn: \"Log in.\",\n login: \"Log in\",\n close: \"Close\",\n email: \"E-mail\",\n password: \"Password\",\n forgotPassword: \"Forgot your password?\",\n logIn: \"Log in\",\n loginWithFacebook: \"Login with Facebook\",\n loginWithGoogle: \"Login with Google\",\n logInHere: \"Log in here\",\n remember: \"Save login details\",\n repeatPassword: \"Confirm password\",\n newPassword: \"New password\",\n signUp: \"Register\",\n registration: \"Registration\",\n wholesaleRegistration: \"Registration - professional investor\",\n retailUsers: \"Private investor\",\n wholesaleUsers: \"Professional investor\",\n accountType: \"Account type\",\n name: \"Name\",\n firstName: \"First name\",\n lastName: \"Surname\",\n companyName: \"Company name\",\n unit: \"Unit\",\n videoTitle:\n \"ScopeExplorer helps you make better investment decisions. This video will show you how.\",\n phoneNumber: \"Phone number\",\n homeBoxTitle1: \"Recent studies\",\n homeBoxTitle2: \"Current ratings\",\n homeBoxTitle3: \"Fund facts\",\n homeBoxTitle4: \"Why Fund Ratings?\",\n homeBoxTitle5: \"Fund Analysis\",\n homeBoxTitle6: \"The company\",\n homeBoxContent4:\n \"A Scope fund rating reflects the most relevant yield and risk aspects of a fund. Our ratings allow you to make a systematic comparison of funds with similar profiles.\",\n homeBoxContent5:\n \"Scope’s Frankfurt- and Berlin-based analysts have a more than 20-year track record in analysing investment funds – of which there are currently more than 6,000 in Germany.\",\n homeBoxContent6:\n \"Scope Group is the largest European provider of ratings, research and analysis - for investment funds and asset managers as well as credit risks – with a staff of more than 200.\",\n more: \"More\",\n moreScopeAward: \"More Information\",\n moreStudien: \"More studies\",\n moreRatings: \"More ratings\",\n moreFacts: \"More facts\",\n moreNews: \"All news\",\n homeNewsTitle: \"Latest news and analysis\",\n scopeAwardWinnersText: \"The winners have been determined!\",\n scopeAwardsNomineesText:\n \"The nominations for the Scope Investment Award have been determined\",\n },\n search: {\n header: \"CHECK\",\n subheader: \"Is your fund a top-ranked investment product?\",\n search: \"Search\",\n placeholder: \"Fund search using name, WKN or ISIN\",\n advancedSearch: \"Advanced Search\",\n simpleSearch: \"Basic Search\",\n searchBox1: \"Europe’s largest rating agency\",\n searchBox2: \"Over 6,000 funds rated\",\n searchBox3: \"More than 20 years of experience\",\n selectedItems: \"Selected items\",\n searchTitle1: \"Select\",\n searchText11: \"Search for and select funds\",\n searchText12: \"that meet your investment priorities\",\n searchTitle2: \"Discover\",\n searchText21: \"Seek out investment ideas\",\n searchText22: \"across different market segments\",\n searchTitle3: \"Rankings\",\n searchText31: \"The best funds at a glance.\",\n searchText32: \"\",\n selected: \"selected\",\n },\n advancedSearch: {\n search: \"Search\",\n reset: \"Reset\",\n placeholder: \"Fund search using name, WKN or ISIN\",\n scopePeergroup: \"Scope peergroup\",\n investmentFocus: \"Investment focus\",\n company: \"Company\",\n fundSize: \"Fund size\",\n universe: \"Universe\",\n scopeRating: \"Scope Rating\",\n uncheckAll: \"Uncheck all\",\n fundsSelected: \"funds selected.\",\n searchResults: \"Search results\",\n saveCustomFields: \"Save customised search\",\n saveSearch: \"Save search\",\n mainTranche: \"Show only primary tranches\",\n addSuccess: \"Your customised fields have been saved.\",\n addError: \"Error: unable to save customised fields.\",\n errors: {\n default: \"Currently unable to access funds. Please try again later.\",\n },\n resetFormFilters: \"Reset form to select filters.\",\n resetFormAutocomplete: \"Reset form to use autocomplete.\",\n },\n filterSearch: {\n search: \"Find now\",\n step: \"Step\",\n step1: \"Which asset class do you want to invest in?\",\n step2: \"Which regions would you like to invest in?\",\n step3: \"Choose your risk classes\",\n low: \"Low\",\n medium: \"Medium\",\n high: \"High\",\n found: \"results\",\n apply: \"Show fund list\",\n reset: \"Reset filters\",\n northAmerica: \"North America\",\n europe: \"Europe\",\n asia: \"Asia\",\n emergingMarkets: \"Emerging Markets\",\n germany: \"Germany\",\n world: \"Global\",\n applyAgain:\n \"The filter criteria have been changed. Please apply search again.\",\n },\n advancedFundsList: {\n pleaseSelectFund:\n \"Unable to find funds which match the selected criteria.\",\n filename: \"Scope funds export.xlsx\",\n name: \"Name\",\n columnSelection: \"Column selection:\",\n prev: \"Prev\",\n next: \"Next\",\n of: \"of\",\n search: \"Search\",\n requestRating: \"Request rating\",\n exportSelected: \"Export selection\",\n exportAll: \"Export all\",\n downloadXls: \"Download XLS\",\n selectFunds: \"Select funds to export.\",\n selectFundsToCompare: \"Select funds to compare.\",\n selectFundsToRequest: \"Select funds to send request.\",\n selectFundsToExport: \"Select funds to export.\",\n selectMax3Funds: \"Select 3 funds maximum to compare.\",\n },\n premium: {\n title: \"Fund selection and sustainability\",\n subtitle:\n \"Scope Fund Analysis offers objective fund selection, independent of product providers, as well as an evaluation of the sustainability of selected funds.\",\n peergroup: \"Peergroup\",\n fundSelection: \"Scope list of recommendations\",\n scopeRecommendation: \"Excerpt - actively managed funds\",\n requestCustomizedSolution: \"Request: individual selection\",\n requestFullList: \"Request complete list\",\n esg: \"Scope sustainability analysis\",\n gid: \"ESG - Greenness Indicator\",\n checkYourFund: \"Is your fund a top-ranked investment product?\",\n requestEsgPortfolioCheck: \"Request ESG portfolio check\",\n requestEsgTeamRating: \"Request ESG team rating\",\n sendRequest: \"Send request\",\n recommendedListTooltip:\n \"Scope Fund Analysis offers independent and objective fund selection using quantitative and qualitative evaluation criteria. Our analysis aims to identify managers and funds that generate risk-adjusted excess returns.\",\n esgTooltip:\n \"The Scope Greenness Indicator provides information on a fund's sustainability profile. ESG (= environmental, social and corporate governance) factors are considered individually.\",\n environment: \"Environmental factors\",\n social: \"Social factors\",\n governance: \"Corporate governance\",\n active: \"Active\",\n passive: \"Passive\",\n fundSearch: \"Fund search\",\n fundSearchText: \"You can browse all of Scope's ESG rated funds here.\",\n exclusion: \"Exclusion criteria\",\n exclusionShort: \"Exclusion\",\n success: \"Request sent successfully\",\n noSearchResults: \"No results found. Please \",\n contactUs: \"contact us.\",\n fillInFields: \"Fill in required fields\",\n subscribeListSuccess: \"Subscribed successfully.\",\n unsubscribeListSuccess: \"Unsubscribed successfully.\",\n subscribeListError: \"Error: unable to send your request.\",\n errors: {\n default: \"Error: unable to send your request.\",\n },\n },\n aifBenchmarks: {\n property_portfolio_short: \"Property portfolio\",\n sustainability_short: \"Sustainability\",\n financial_structure_short: \"Financial structure\",\n asset_management_short: `Asset Management`,\n fund_management_short: \"Fund Management\",\n rating_total_short: \"Rating total\",\n property_portfolio: \"Scope Bewertung Qualität des Immobilienportfolios\",\n sustainability: \"Scope Bewertung der Nachhaltigkeit\",\n financial_structure: \"Scope Bewertung der Finanzstruktur\",\n asset_management: \"Scope Bewertung des Asset Managements\",\n fund_management: \"Scope Bewertung des Fondsmanagements\",\n rating_total: \"Scope Bewertung des Risikos\",\n rating_total_2:\n \"(Hinweis: je höher die Bewertung, desto geringer das Risiko)\",\n ter: \"TER\",\n net_volume: \"Net fund volume\",\n real_volume: \"Real estate volume\",\n objects_number: \"Number of properties\",\n liquidity_ratio: \"Liquidity ratio\",\n credit_ratio: \"Debt ratio\",\n geographical_german: \"Share of german properties\",\n geographical_european: \"Share of european properties\",\n geographical_non_european: \"Share of global properties\",\n sectoral_office: \"Share of usage type office\",\n sectoral_retail: \"Share of usage type retail\",\n sectoral_living: \"Share of usage type residential\",\n sectoral_hotel: \"Share of usage type hotel\",\n sectoral_logistics: \"Share of usage type ligistics\",\n performance_1y: \"Performance 1y\",\n performance_5y: \"Performance 5y p.a.\",\n volatility_5y: \"Volatility 5y p.a.\",\n occupancy: \"Occupancy rate\",\n rating_esg: \"Scope Bewertung der Nachhaltigkeit\",\n wault: \"WAULT\",\n },\n aifFunds: {\n excellent: \"Excellent\",\n veryGood: \"Very good\",\n good: \"Good\",\n balanced: \"Balanced\",\n modest: \"Modest\",\n veryModest: \"Very modest\",\n poor: \"Poor\",\n likelyCapitalLost: \"Likely capital lost\",\n substantialCapitalLost: \"Substantial capital lost\",\n negativeTurn: \"Negative turn\",\n benchmarks: \"Benchmark-Tool\",\n benchmarksSubtitle:\n \"Die offenen Immobilien-Publikumsfonds in Deutschland\",\n scopeCardParameters: \"Score card parameters\",\n yourParameters: \"Your parameters\",\n exportToExcel: \"Export to Excel\",\n addParameters: \"Add parameters\",\n modalStep1: \"Select the funds to compare (Step 1 of 2)\",\n modalStep2: \"Choose your parameters to compare the Funds (Step 2 of 2)\",\n selectAll: \"Select all\",\n next: \"Next\",\n submit: \"Submit\",\n selectFunds: \"Select funds to see scale\",\n sectoralAllocation: \"Sectoral Allocation\",\n geographicalAllocation: \"Geographical Allocation\",\n sectoralOffice: \"Office\",\n sectoralRetail: \"Retail\",\n sectoralLiving: \"Living\",\n sectoralHotel: \"Hotel\",\n sectoralLogistics: \"Logistics/Industry\",\n geographicalGerman: \"German properties\",\n geographicalEuropean: \"European properties\",\n geographicalNonEuropean: \"Non-European properties\",\n others: \"Others\",\n moreInformation: \"More information\",\n selectYourProduct: \"Vorab registrieren\",\n pleaseChoose: \"Please choose a package\",\n buy: \"Zahlungspflichtig bestellen\",\n bannerText:\n \"The Alternative Investment Study 2024 - Ratings & Research with a Unique Depth of Data and Analysis\",\n signUpText: \"Sign up or Log in to view\",\n signUp: \"Sign up\",\n paidDocuments: \"Paid Documents\",\n documents: \"Documents\",\n views: \"Views\",\n clicks: \"Visitors\",\n register: \"Register\",\n registerNow:\n \"Register now as a Professional Investor and receive the 2022 study free of charge.\",\n },\n invoiceModal: {\n title: \"Invoice\",\n text1: \"Invoice was created and sent to your e-mail address.\",\n text2:\n \"You can pay using one of the payement methods given in the invoice or using bank transfer given in the invoice.\",\n payOnline: \"Pay online\",\n downloadInvoice: \"Download invoice\",\n },\n purchaseModal: {\n title: \"Get premium\",\n yourOrder: \"Your order:\",\n selectedLicense: \"Selected license:\",\n totalPrice: \"Total price:\",\n agreement1:\n \"Durch Klicken der Schaltfläche „Zahlungspflichtig bestellen“ geben Sie ein verbindliches Kaufangebot gemäß der besonderen Bedingungen der Offenen Immobilienfonds Studie 2020 ab, die Sie\",\n agreement2: \"hier\",\n agreement3: \"einsehen können.\",\n selectProduct: \"Please select product.\",\n billingAddress: \"Billing address\",\n company: \"Company\",\n street: \"Street\",\n postalCode: \"Postal code\",\n city: \"City\",\n taxId: \"Tax ID\",\n contactPerson: \"Contact person\",\n purchase: \"Purchase\",\n purchaseError: \"You need to be wholesale user to buy license.\",\n },\n fundFields: {\n logo: \"Logo\",\n wkn: \"WKN\",\n position_vs_peergroup: \"Rank\",\n tranche: \"Tranche\",\n tranche_currency: \"Tranche currency\",\n peergroup: \"Peergroup\",\n primary: \"Main tranche\",\n universe: \"Universe\",\n company: \"Company\",\n ter: \"Ongoing charges\",\n volume: \"Volume\",\n volume_currency: \"Volume currency\",\n initialCharge: \"Issue surcharge\",\n accumulating: \"Accumulating\",\n firstRating: \"First-time rating\",\n perf_1m: \"1 month return\",\n perf_3m: \"3 month return\",\n perf_6m: \"6 month return\",\n perf_1y: \"1 year return\",\n perf_3y: \"3 year return\",\n perf_5y: \"5 year return\",\n perf_since_inception: \"Return since inception\",\n perf_last_year: \"Return previous year\",\n volatility_3y: \"Volatility 3 Yr.\",\n initial_charge: \"Issue surcharge\",\n isin: \"ISIN\",\n srri: \"SRRI\",\n rating_unchanged_since: \"Rating unchanged since\",\n prob_loss_month_3y: \"Prob. Loss. Month 3 Yr.\",\n prob_profit_month_3y: \"Prob. Profit Month 3 yr.\",\n max_loss_3y: \"Max. loss 3 Yr.\",\n max_profit_3y: \"Max. Profit 3 Yr.\",\n rank: \"Rating\",\n rating_points: \"Rating points\",\n risk_class: \"Risk class\",\n fee: \"Fees\",\n documents: \"Documents\",\n return_fee: \"Redemption fee\",\n min_investment: \"Min. Investment\",\n issue_date: \"Date of launch\",\n value_at_risk_3y: \"Value at risk 3 Yr.\",\n is_award_nominated: \"Is award nominated\",\n is_focus: \"Selection of Asset Manager\",\n is_selection: \"Funds selection\",\n },\n compareFunds: {\n compareFunds: \"Compare funds\",\n currentFund: \"Current fund\",\n compare: \"Compare\",\n selectFundToCompare: \"Select fund to compare\",\n },\n fund: {\n amDocuments: \"Asset Manager Documents\",\n winner: \"Winner\",\n winners: \"Winners\",\n nominee: \"Nominee\",\n dataFrom: \"Data from \",\n ratingFrom: \"Rating from:\",\n paidDocuments: \"Paid documents\",\n name: \"Name\",\n fundName: \"Fund name\",\n wkn: \"WKN\",\n isin: \"ISIN\",\n nav: \"NAV\",\n ter: \"Ongoing charges\",\n photo: \"Photo\",\n terTooltip:\n \"Sum of expenses and fees of a fund in per cent of the assets, including expenses of target funds, not containing transaction costs and performance fees.\",\n srri: \"SRRI\",\n sfdr: \"SFDR\",\n sfdrTooltip: \"SFDR: Sustainable Finance Disclosure Regulation\",\n srriTooltip:\n \"Risk classification based on the Synthetic Risk and Reward Indicator (SRRI). The SRRI reflects the fluctuations in the value of a fund and is determined based on uniform EU-wide regulations. Classification uses a scale of 1 to 7. The higher the SRRI, the higher the risk profile of a fund.\",\n srriTooltip2:\n \"Risk classification based on the Synthetic Risk and Reward Indicator (SRRI). The SRRI reflects the fluctuations in the value of a fund and is determined based on uniform EU-wide regulations. Classification uses a scale of 1 to 7. The higher the SRRI, the higher the risk profile of a fund.\",\n price: \"Market value (NAV)\",\n positionInPeergroup: \"Position in Peergroup\",\n positionInRanking: \"Rank position: \",\n positionInTheRanking: \"Rank position and\",\n position: \"Position in Scope Peergroup\",\n top: \"Top\",\n peergroup: \"Peergroup\",\n rankInPeergroup: \"Rank in Peergroup\",\n performance: \"Return\",\n performancePercent: \"Return %\",\n performanceRisk: \"Return / Risk\",\n performance_3y_long: \"Performance 3 years\",\n fundPerformance: \"Fund performance\",\n peergroupAverage: \"Peergroup average\",\n rating: \"Rating\",\n ratingTooltip:\n \"Valuation of the fund on the basis of either a qualitative or quantitative rating. The scale ranges from A („very good“) to E („weak“).\",\n aifRatingTooltip:\n \"Die Skala reicht von aaa (“Exzellent”) bis hin zu d (“Negative Rendite”).\",\n rank: \"Rank\",\n fundRank: \"Fund rank\",\n scopeFundRating: \"Scope Fund Rating\",\n ratingHistory: \"Rating history\",\n fundRating: \"Fund rating\",\n fundRatingTooltip:\n \"Valuation of the fund on the basis of either a qualitative or quantitative rating. The scale ranges from A („very good“) to E („weak“).\",\n fundPoints: \"Fund points\",\n risk: \"Risk\",\n costBar: \"Cost\",\n riskTooltip: \"Risk measured as volatility of the fund.\",\n riskPercent: \"Risk %\",\n volatility: \"Volatility\",\n volatilityPercent: \"Volatility %\",\n fundRisk: \"Fund risk\",\n safety: \"Risk assessment\",\n performanceRiskChart: \"Performance / risk overview\",\n riskClassification: \"Risk classification\",\n maxLoss: \"Max loss (p.a.)\",\n moreInfo: \"More info\",\n back: \"Back\",\n fundsInFocus: \"Funds in focus\",\n strategy: \"Strategy\",\n ongoingCharge: \"Running costs\",\n ongoingChargeTooltip:\n \"Sum of expenses and fees of a fund in per cent of the assets, including expenses of target funds, not containing transaction costs and performance fees.\",\n performanceFee: \"Performance-based remuneration\",\n fundFacts: \"Fund facts\",\n company: \"Company\",\n manager: \"Fund Manager\",\n launchDate: \"Launch date\",\n accumulating: \"Accumulating\",\n quantitativeLabel: \"Quantitative rating\",\n qualitativeLabel: \"Qualitative rating\",\n quantitativeTooltip: \"Rating based on quantitative rating criteria.\",\n qualitativeTooltip:\n \"Rating includes both quantitative and qualitative criteria.\",\n period: \"Indicator and period\",\n returnInPeriod: \"Calculation period\",\n fund: \"Fund\",\n noRatingAvailable: \"No rating available\",\n performance_1y: \"1 year (p.a.)\",\n performance_3y: \"3 year (p.a.)\",\n performance_5y: \"5 year (p.a.)\",\n performance_10y: \"10 year. (p.a.)\",\n performance_since_inception: \"Since inception (p.a.)\",\n performance_current_year: new Date().getFullYear(),\n max_drawdown_crash: \"Crash drawdown\",\n crashDrawdownChart: \"Crash drawdown\",\n crashDrawdownSubtitle: \"How has the fund performed in the past crisis?\",\n crashDrawdownTooltip:\n \"Many investors are more interested in how well a fund performs in turbulent markets rather than when stock markets are rising. The chart below provides an answer to this question. It shows four stress phases from the past 10 years (grey). For each of these stress phases, you can see the maximum loss of the selected fund during the period compared with the peer group average and the benchmark.\",\n market: \"MSCI World\",\n marketLong: \"MSCI World Standard (Market)\",\n max_drawdown_1y: \"Max drawdown 1 year\",\n max_drawdown_3y: \"Max drawdown 3 year\",\n max_drawdown_5y: \"Max drawdown 5 year\",\n max_drawdown_since_inception: \"Max drawdown since inception\",\n volatility_1y: \"Volatility 1 year (p.a.)\",\n volatility_3y: \"Volatility 3 year (p.a.)\",\n volatility_5y: \"Volatility 5 year (p.a.)\",\n volatility_since_inception: \"Volatility since inception\",\n volume: \"Fund volume\",\n volumeUnit: \"(in M. EUR)\",\n volumeUnitShort: \"M. EUR\",\n ratingPoints: \"Rating points\",\n ratingPointsShort: \"Rating points\",\n ratingPointsTooltip:\n \"Scope awards rating points on a scale from 1 to 100 for each fund. The rating points indicate the relative rating of a fund compared to its peergroup. The higher the score, the better Scope considers the fund to be.\",\n fundsInPeerGroup: \"funds in peergroup\",\n topFundsTitle: \"Funds in focus\",\n topFundsSubtitle:\n \"Our analysts regularly select funds which stand out, based on performance, innovative investment ideas and distinctive strategies.\",\n ratingInFocusSubtitle:\n \"In addition to funds, our analysts evaluate asset managers' investment teams. The rating reflects an investment team's skill, experience and track record as well as their process quality and resources.\",\n requestTeamRatingText:\n \"Can't find a rating on a specific asset manager or investment team? No problem! Just enter the name of the investment team and request a rating. It's free of charge and without obligation.\",\n driver: \"Rating drivers\",\n content: \"Further details and analyses\",\n news: \"News\",\n newsSubtitle: \"News and fund information\",\n readMore: \"Read more\",\n proceedToPayment: \"Proceed to payment\",\n details: \"Details\",\n noResults: \"No results available.\",\n fundNotFound: \"No matches for the selected fund.\",\n notFound: \"Not found\",\n pleaseSelectFund:\n \"Unable to find funds which match the selected criteria.\",\n veryGood: \"Very good\",\n good: \"Good\",\n average: \"Average\",\n belowAverage: \"Below average\",\n belowAverage2: \"Below average\",\n poor: \"Weak\",\n legend: \"Legend\",\n veryLow: \"Very low\",\n low: \"Low\",\n mid: \"Mid\",\n medium: \"Medium\",\n high: \"High\",\n veryHigh: \"Very high\",\n rowsPerPage: \"Rows per page\",\n monthly_report: \"Monthly report\",\n key_information: \"PRIIPs KID\",\n key_investor: \"KIID – Key Investor Information Document\",\n fund_prospect: \"Fund prospectus\",\n annual_report: \"Annual report\",\n semi_annual_report: \"Semi annual report\",\n fundBars: \"Fund rating | Scope Rating\",\n fundBarsTooltips: {\n performance:\n \"The assessment of a fund's performance indicators. These include the relative performance of a fund compared with its peergroup and the stability of the fund's performance.\",\n safety:\n \"Risk assessment of the fund: The lower Scope considers the fund's risk to be, the more rating points it receives for the criterion of risk assessment.\",\n cost: \"Evaluation of a fund's running costs (Ongoing Charges) compared to its peergroup. A high rating for this criterion stands for low costs.\",\n esg: \"Result of evaluation by ESG aspects\",\n team: \"Evaluation of the investment team using qualitative factors such as the experience and qualifications of its investment professionals.\",\n investmentProcess:\n \"Qualitative assessment of the investment process in terms of discipline and robustness.\",\n },\n value: \"Value\",\n noInformation: \"No information.\",\n showMoreDetails: \"Show more details\",\n hideMoreDetails: \"Hide details\",\n avg: \"Avg\",\n print: \"Print\",\n watchlist: \"Watchlist\",\n watchlistTitle: \"My funds - watchlist\",\n watchlistSubtitle:\n \"Are you looking for a simple way of keeping an eye on changes to the ratings of individual funds? Then just add the relevant funds to your „watchlist“ - and we will inform you of any rating changes by email.\",\n watchlistAdded: \"Fund added to watchlist.\",\n watchlistRemoved: \"Fund deleted from watchlist.\",\n watchlistAddError: \"Error: unable to add to watchlist.\",\n watchlistDeleteError: \"Error: unable to delete from watchlist.\",\n noWatchlist: \"Add fund to watchlist.\",\n actualRating: \"Current rating\",\n prevRating: \"Last rating change\",\n upgrade: \"Upgrade\",\n downgrade: \"Downgrade\",\n same: \"None\",\n showAvg: \"Show average\",\n hideAvg: \"Hide average\",\n date: \"Date\",\n cost: \"Cost assessment\",\n esg: \"ESG Score\",\n general: \"General\",\n custom: \"Custom\",\n costs: \"Costs\",\n valueLong: \"Value\",\n team: \"Team\",\n scopeRating: \"Scope Rating\",\n scopeRanking: \"Scope Ranking\",\n of: \"of\",\n investmentProcess: \"Investment process\",\n noRatingInfo:\n \"No evaluation is available for this fund at present. If you are interested in a qualitative evaluation, please click on „Request rating“. This is free of charge and without obligation.\",\n noRatingInfoShort:\n \"A qualitative evaluation is not available for this fund. If you are interested in a qualitative rating, please click on „Request rating“. This is free of charge and without obligation.\",\n noFundBarsInfo:\n \"A qualitative evaluation is not available for this fund. If you are interested in a qualitative rating, please click on „Request rating“. This is free of charge and without obligation.\",\n request: {\n rating: \"Request rating\",\n award: \"Request award nomination\",\n focus: \"Request focus\",\n selection: \"Request selection\",\n teamRating: \"Request team rating\",\n sendRequest: \"Send request\",\n theme: \"Request themes\",\n info: \"Request information\",\n },\n requestQualitativeRating: \"Request rating\",\n fundRequestSent:\n \"Thank you so much! We have received your request. Scope will create a qualitative rating for funds for which a rating is requested most frequently.\",\n teamRequestSent:\n \"Thank you so much! We have received your request. Scope will provide a qualitative rating to investment teams for which a valuation is requested most frequently.\",\n anonymous: \"Anonymous\",\n noContent:\n \"No further information is available for this fund at present. Are you interested in details on the fund, its investment strategy and an assessment of the fund's management? Then simply click on „Request information. This is free of charge and without obligation.\",\n requestInfo: \"Request information\",\n compareWithPeergroup: \"Comparison with Peergroup Ø\",\n worse: \"Worse\",\n equal: \"Equal\",\n better: \"Better\",\n pts: \"Pts\",\n all: \"All\",\n equity: \"Equities\",\n multiasset: \"Multi Asset\",\n fixedIncome: \"Bonds\",\n other: \"Other\",\n ratio: \"Ratio\",\n ratioTooltip:\n \"This ratio expresses the ratio of performance to risk (measured by volatility) of a fund. The higher the ratio, the better from an investor's perspective. In contrast to the „Sharpe Ratio“, the risk-free interest rate is not taken into account in this ratio.\",\n ratioDesc: \"Risk / return ratio\",\n trancheRatingTooltip:\n \"The rank displayed always refers to the main tranche of a fund. The ISIN you select is a subtranche for which no separate rank is calculated.\",\n institutional:\n \"The ISIN selected is an institutional tranche of the fund with a high minimum investment. It is open to institutional investors.\",\n recordDateText:\n \"The subject of the valuations & calculations are data provided by the capital management companies & publicly available data.\",\n recordDate1:\n \"The rating and the calculation of all key figures are based on data as of \",\n recordDate2:\n \"The subject of ratings & calculations is the fund universe in Germany.\",\n recordDate3:\n \"The subject of the calculations are publicly available data.\",\n fundsListHint:\n \"The funds listed below are sorted by rating points. With the same number of rating points, the risk-return ratio is decisive.\",\n minInvestment: \"Minimum investment\",\n recordDate: \"Data as at\",\n currency: \"Currency\",\n professionalInfo: \"For professional investors only\",\n noRatingDriver:\n \"A qualitative evaluation is not available for this fund. If you are interested in a qualitative rating, please click on “Request rating”. This is free of charge and without obligation.\",\n winnerLabel: \"Scope Award 2020: Winner\",\n winnerTooltip: \"This fund was winner in Scope Investment Awards 2022\",\n views: \"views\",\n upload: \"Upload\",\n viewFunds: \"View funds\",\n success_dependent_compensation: \"Success dependent compensation\",\n objects_number: \"Objects number\",\n liquidity_ratio: \"Liquidity ratio\",\n debt_ratio: \"Debt ratio\",\n currency2: \"Currency\",\n rental_ratio: \"Rental ratio\",\n ratingScore: \"Rating Scores\",\n ratingJustification: \"Ratingbegründung\",\n ratingDriver: \"Rating Driver\",\n deleteDocumentConfirm: \"Are you sure to delete this document?\",\n deleteNewsConfirm: \"Are you sure to delete this news?\",\n deletePMConfirm: \"Are you sure to delete Portfolio Manager?\",\n fundReport: \"Fund Report\",\n },\n fundCharts: {\n showAll: \"Show all charts\",\n hideAll: \"Hide all charts\",\n show: \"Show\",\n showRating: \"Show rating\",\n hide: \"Hide\",\n year_1: \"1 year\",\n year_3: \"3 years\",\n year_5: \"5 years\",\n volatility_1y: \"Volatility 1 year (p.a.)\",\n volatility_3y: \"Volatility 3 years (p.a.)\",\n volatility_5y: \"Volatility 5 years (p.a.)\",\n performance_1y: \"Return 1 year (p.a.)\",\n performance_3y: \"Return 3 years (p.a.)\",\n performance_5y: \"Return 5 years (p.a.)\",\n perf_1y: \"Return 1 yr\",\n perf_3y: \"Return 3 yr\",\n perf_5y: \"Return 5 yr\",\n export: \"Export\",\n numberOfFunds: \"Number of funds\",\n ratingClasses: \"Rating classes\",\n points: \"Points\",\n interpretation: \"Assessment\",\n noData: \"No data available.\",\n noChartData: \"No chart data available.\",\n performanceChart: {\n title: \"Return in EUR\",\n date: \"Date\",\n performance: \"Return\",\n fund: \"Fund\",\n index: \"Index\",\n fundPerformance: \"Fund return in %\",\n indexPerformance: \"Index return in %\",\n peergroupPerformance: \"Peergroup return in %\",\n peergroup: \"Peergroup Ø\",\n },\n peergroupComparisonChart: {\n title: \"Peergroup comparison\",\n highchartTitle: \"Peergroup performance in EUR\",\n highchartSubtitle: \"Rolling 3-months performance\",\n date: \"Date\",\n performance: \"Performance\",\n fundPerformance: \"Fund performance in %\",\n bestFundPerformance: \"performance in %\",\n worstFundPerformance: \"Worst fund performance in %\",\n fund: \"Fund\",\n bestFund: \"Best fund\",\n worstFund: \"Worst fund\",\n },\n fundRatingChart: {\n title: \"Fund rating history\",\n date: \"Date\",\n performance: \"Performance %\",\n rank: \"Rating\",\n rating: \"Scope fund rating\",\n privateText:\n \"For futher rating detail, please contact info@scopeanalysis.com\",\n },\n distributionChart: {\n title: \"Distribution within peergroup\",\n riskIndicator: \"Risk indicator\",\n performanceIndicator: \"Performance indicator\",\n good: \"Strong\",\n bad: \"Weak\",\n fund: \"Fund\",\n fundsInPeergroup: \"Funds in the peergroup\",\n },\n riskReturnChart: {\n title: \"Volatility / Return Matrix\",\n volatility: \"Volatility:\",\n perf: \"Return:\",\n fundVolatility: \"Fund volatility\",\n fundPerformance: \"Fund return\",\n indexVolatility: \"Index volatility\",\n indexPerformance: \"Index return\",\n peergroupVolatility: \"Peergroup volatility\",\n peergroupPerformance: \"Peergroup return\",\n fund: \"Fund\",\n index: \"Index\",\n peergroup: \"Peergroup Ø\",\n },\n crashDrawdownChart: {\n date: \"Date\",\n return: \"Return\",\n financialCrisis: \"Great Financial Crisis\",\n creditCrisis: \"European Credit Crisis\",\n recessionFears: \"Global Recession Fears\",\n tradeConflicts: \"Fear of interest rate hikes & trade conflicts\",\n covid19: \"COVID-19\",\n ukraineCrisis: \"Russian invasion of Ukraine\",\n },\n classDistributionChart: {\n title: \"Distribution of rating classes\",\n },\n evolutionOfRiskChart: {\n title: \"Volatility over time\",\n fund: \"Fund\",\n bestFunds: \"Best funds\",\n bestFund: \"Best fund\",\n worstFund: \"Worst fund\",\n date: \"Date\",\n fundRisk: \"Fund risk in %\",\n bestFundRisk: \"risk in %\",\n worstFundRisk: \"Worst fund risk in %\",\n },\n },\n contact: {\n contact: \"Contact\",\n summary:\n \"Do you have any questions or suggestions? Just fill in our contact form below and we will get back to you as soon as possible.\",\n name: \"Name\",\n email: \"E-mail\",\n phone: \"Phone\",\n message: \"Message\",\n send: \"Send an e-mail\",\n success: \"Your e-mail has been sent\",\n fillInFields: \"Please fill in all mandatory fields.\",\n error: \"Unable to send e-mail. Please try again.\",\n scopeAnalysis: \"Scope Fund Analysis GmbH\",\n managingDirectors: \"Managing Directors\",\n headquartersBerlin: \"Headquarters Berlin\",\n frankfurtOffice: \"Frankfurt Office\",\n },\n privacy: {\n title: \"Privacy\",\n purposeOfPolicy: \"1. Purpose of the Policy\",\n website:\n \"This website (“Scope Fund Analysis”) is operated by Scope Fund Analysis GmbH.\",\n thisPrivacyPolicy:\n \"This Privacy Policy explains the basis upon which Scope Fund Analysis GmbH (“We” or “Data Controller”) collects and uses personal data.\",\n personalDataMeans:\n \"Personal data means any information which relates to a specific person (“Personal Data”).\",\n thisPolicySetsOut:\n \"This Policy sets out the basis on which any Personal Data collected from or provided by the users, clients or subscribers of Scope Fund Analysis website (“You” or “Data Subjects”), will be processed by the Data Controller.\",\n pleaseReadTheFollowing:\n \"Please read the following carefully to understand Our views and practices regarding Your personal data and how they will be treated.\",\n theProvisionsSetOut:\n \"The provisions set out in this Policy are regulated by and aligned with the General Data Protection Regulation – Regulation (EU) 2016/679 (“GDPR”).\",\n forMoreInformation:\n \"For more information on the legal framework of this policy please consult the GDPR text at (https://ec.europa.eu/info/law/law-topic/data-protection/data-protection-eu_en).\",\n whichData: \"2. Which data Scope Fund Analysis GmbH collects\",\n theTypeOfData:\n \"The type of data that We may need to collect vary according to the business relationship with the Data Subject:\",\n clientsAndSubscribers: \"Clients and Subscribers:\",\n theDataController:\n \"the Data Controller will request only information that is strictly necessary for the fulfillment of the contract that a client signs with the Data Controller and for the provision of its services; for example, some of the information the Data Controller may need are:\",\n nameAndSurname: \"Name and Surname\",\n emailAddress: \"Email address\",\n telephoneNumber: \"Telephone number/fax number\",\n companyAndBusiness: \"Company and business address\",\n password: \"Password\",\n gender: \"Gender\",\n websiteUsers: \"Website Users:\",\n theDataControllersWebsite:\n \"the Data Controller’s website uses few types of Cookies, which in some cases track Users activity with the aim to provide them with a better and smoother customer experience, whenever they are visiting Scope Fund Analysis platform; for further details on Cookies, please read the section on “Use of Cookies” under this Policy\",\n whyScopeAnalysis:\n \"3. Why Scope Fund Analysis GmbH collects personal data\",\n theCollectionOfPersonal:\n \"The collection of personal data through Scope Fund Analysis website is driven by the principle of “contractual necessity”: any personal information that the Data Controller collects from the Data Subjects is necessary and functional to achieve and fulfil the specific, defined and legitimate purposes which are determined and made explicit in the contract between the Data Controller and the Data Subject.\",\n asAnExample: \"As an example, We will request personal information to:\",\n provideRegular:\n \"Provide regular information and updates to its subscribers\",\n performAThorough:\n \"Perform a thorough analysis of funds and asset management companies as per contract with the Data Subject(s)\",\n providingTechnical:\n \"Providing technical support in the use of Scope Ratings online platform\",\n sendClientsRelevant:\n \"Send clients relevant marketing material (where applicable)\",\n dealWithClients: \"Deal with clients or suppliers’ queries.\",\n howScopeAnalysis:\n \"4. How Scope Fund Analysis GmbH collects personal data\",\n weCollectPerseonal:\n \"We collect personal information from a variety of sources and mainly:\",\n directlyFromTheData:\n \"Directly from the Data Subject through subscription forms and contract applications or declarations\",\n fromThirdParties:\n \"From third parties: for example, when a client provides an alternative point of contact for a specific matter/service\",\n fromTheDataController:\n \"From the Data Controller platforms either via subscription or by reviewing tracking activities made by Cookies.\",\n whateverMethodIsUsed:\n \"Whatever method is used to collect personal information, the Data Controller is committed to always accurately and promptly inform the Data Subject and to request his explicit consent.\",\n howScopeAnalysisHandles:\n \"5. How Scope Fund Analysis GmbH handles personal data\",\n thePersonalDataCollected:\n \"The personal data collected through Scope Ratings website are processed and handled following the key principles highlighted below:\",\n minimization: \"Minimization:\",\n onlyThosePersonal:\n \" only those personal data which fit the purpose of the contract between the Data Controller and the Data Subject will be collected; the type of personal data that will be required will be determined on a case by case basis\",\n integrity: \"Integrity:\",\n theInformationCollected:\n \" the information collected from the Data Subject will be kept confidential by the Data Controller at any time; in case of personal data being transferred from one entity to another within Scope Group, the Data Subject will be promptly informed when signing a contract with the Data Controller (through a Declaration of Consent) or as soon as the transfer becomes necessary; the standards of data confidentiality will be maintained unchanged\",\n limitedStorage: \"Limited storage:\",\n theDataControllerWill:\n \" the Data Controller will only keep personal data from the Data Subject as long as they are needed for the fulfilment of the business purpose as indicated in the contract between the parties; once the business purpose ceases, personal data will be permanently deleted after a retention period that varies from a minimum of six months to a maximum of ten years depending on each specific case\",\n security: \"Security\",\n theDataControllerIsCommited:\n \" the Data Controller is committed to keep personal data it stores secure at any time against internal and external threats such as, but not limited to, accidental loss, unauthorised access and use; however, no data transmission over the Internet or other network can be guaranteed to be 100% secure. As a result, while we strive to protect information transmitted on or through the Properties or services, we cannot and do not guarantee the security of any information you transmit on or through the Properties or services, and you do so at your own risk\",\n transferability: \"6. Transferability\",\n whilePerforming:\n \"While performing some of its business activities, the Data Controller may use external service providers who mostly operate in the technology environment.\",\n theDataControllerIsCommitedTo:\n \"The Data Controller is committed to promptly notify the Data Subject in case his/her personal data are transferred to any of these external providers and to accurately explain the nature, purpose and duration of the transfer.\",\n theDataControllerIsAlso:\n \"The Data Controller is also accountable for granting that the same standard of protection on personal data belonging to its clients/suppliers is also observed by its external service providers.\",\n theDataControllerOperates:\n \"The Data Controller operates in EU and EEA Member States, which are subject to the legal provisions set out in the GDPR on personal data protection.\",\n confidentiality: \"7. Confidentiality and security\",\n theDataControllerIsCommitedToKeep:\n \"The Data Controller is committed to keep personal data from Data Subjects secure and to treat them confidentially at all times.\",\n toEnsurePersonalData:\n \"To ensure personal data are handled accurately, the Data Controller is accountable of granting that:\",\n personalDataAreHandled:\n \"Personal data are handled by employees who are fully trained to do so\",\n theProcessingAndHandling:\n \"The processing and handling of personal data is properly supervised\",\n personalDataProcessing:\n \"Personal data processing practice within the Data Controller is regularly reviewed and audited\",\n scopeEmployees:\n \"Scope employees are aware of the policies regulating personal data processing and of the impact and consequences of potential breaches in data protection.\",\n inCaseABreach:\n \"In case a breach of personal data occurs, the Data Controller is responsible of notifying the Data Subject(s) affected promptly and efficiently and to swiftly take any necessary actions that could help reducing the impact of the breach.\",\n specifically: \"Specifically, in the event of a data privacy breach:\",\n theDPOMustBe:\n \"The DPO must be notified in writing within 24 hours from the data privacy breach\",\n theDPOWillTakeCare:\n \"The DPO will take care of notifying the Supervisory Authority as well as any relevant stakeholder and to investigate the breach further where required\",\n theDPOWillNotify:\n \"The DPO will notify the client and the Supervisory Authority of the outcome of the investigation.\",\n theDataControllerIsAlsoCommited:\n \"The Data Controller is also committed to perform an exhaustive and thorough investigation both internally and externally (with the involvement of the supervisory authority if needed) on the root cause of the breach and to take any corrective measure in a timely manner, to help preventing the breach to occur in the future.\",\n useOfCookies: \"8. Use of Cookies\",\n theDataControllerUsesCookies:\n \"The Data Controller uses Cookies while running its web platform: the function of these Cookies is to partially track the activities of platform/websites users with the aim of providing a better customer experience; usually, it is possible to customize the use of Cookies on each PC through the settings page.\",\n belowIsTheList:\n \"Below is the list of the Cookies used by Scope Ratings website:\",\n cookieName: \"Cookie name\",\n function: \"Function\",\n _ga: \"Cookie used by Google Analytics to distinguish users (https://developers.google.com/analytics/devguides/collection/analyticsjs/cookieusage)\",\n _gat: \"Cookie used by Google Analytics to throttle request rate (https://developers.google.com/analytics/devguides/collection/analyticsjs/cookieusage)\",\n _gid: \"Cookie used by Google Analytics to distinguish user(https://developers.google.com/analytics/devguides/collection/analyticsjs/cookieusage)\",\n socialMedia: \"9. Social Media Plug-Ins\",\n scopeAnalysisWebsiteUses:\n \"Scope Fund Analysis website uses plug-ins for social media platforms which allow You to share information or to follow Us on Your social media’s profile.\",\n whenYouClick:\n \"When You click on the plug-in button, the social media will automatically receive the information on the page You visited and on the content You viewed.\",\n forMoreDetails:\n \"For more details on data protection policy for each social media, please visit the following pages:\",\n forTwitter: \"For Twitter:\",\n twitterPlugins: \"Plug-Ins\",\n twitterPolicy: \"Privacy Policy\",\n forLinkedIn: \"For LinkedIn\",\n linkedInPlugins: \"Plug-Ins\",\n linkedInPolicy: \"Privacy Policy\",\n forBloomberg: \"For Bloomberg:\",\n bloombergPolicy: \"Privacy Policy\",\n dataSubjectsRights: \"10. Data Subjects rights and duties\",\n althoughSome:\n \"Although some of the personal data are held and handled by the Data Controller, Data Subjects remain the owner of this information and, as such, they keep the following rights:\",\n rightToAccess: \"Right to access the data:\",\n dataSubjectsHaveTheRight:\n \"Data Subjects have the right to access any information concerning them held by the Data Controller; additionally, the Data Controller takes any reasonable steps to ensure that the personal data it holds for its customers are kept up to date and accurate\",\n rightOfRevocation: \"Right of revocation:\",\n atAnyTime:\n \" at any time, the Data Subject can withdraw the consent for the handling and processing of his/her personal data by the Data Controller; the Data Subject can also change the level of consent, i.e. not withdrawing it entirely, but restricting its applicability; requests to revoke personal data should be sent via email to privacy@scopegroup.com\",\n rightOfErasure: \"Right of erasure: \",\n dataSubjectsHaveTheRightTo:\n \" Data Subjects have the right to request the complete deletion of their personal records held by the Data Controller: requests to delete personal data must be submitted via email to privacy@scopegroup.com; this right does not apply if there is a legal or official obligation to store this data\",\n rightOfDataPortability: \"Right of data portability:\",\n peresonalDataCanBeTransferred:\n \" personal data can be transferred to another service provider upon request from the Data Subject; this right is only applicable to information which the Data Subject he or she has provided to the Data Controller\",\n rightOfComplain: \"Right of complain:\",\n dataSubjectsHaveTheRightToObject:\n \" Data Subjects have the right to object the way personal data are processed by the Data Controller and they have the right to raise a complain directly with the local supervisory authority\",\n theDataControllerIsCommitedToKeepThePersonal:\n \"The Data Controller is committed to keep the personal data it stores up to date and accurate, nevertheless it is the Data Subject’s responsibility to promptly notify the Company of any relevant change that may affect the personal records it keeps.\",\n updateOfThePolicy: \"11. Update of the Policy and point of contact\",\n theDataControllerIsCommitedToPeriodically:\n \"The Data Controller is committed to periodically review its Privacy Policy with the aim of granting Data Subjects the best and more extensive level of protection: updates of the Policy will be automatically published on Scope Fund Analysis website without any previous notice, therefore users are strongly recommended to regularly check Scope Fund Analysis official online page for the latest version.\",\n forFutherInformation:\n \"For further information or questions regarding Scope Ratings website Privacy Policy, please contact us at privacy@scopegroup.com\",\n additionalContacts: \"12. Additional contacts\",\n dataProtectionOfficer: \"Data Protection Officer:\",\n dataController: \"Data controller:\",\n managingDirector: \"Managing Director: Lars Edler, Christian Werner\",\n commercialRegister: \"Commercial Register Berlin: HRB 97933 B\",\n supervisoryAuthority: \"Supervisory Authority\",\n },\n legalNotice: {\n title: \"Legal Notice\",\n managingDirector: \"Managing Director: Lars Edler, Christian Werner\",\n commercialRegister: \"Commercial Register Berlin HRB 97933 B\",\n responsibleForTheContent:\n \"Responsible for the content according to Section 55 (2) RStV:\",\n disputeSettlement: \"Dispute Settlement\",\n theEuropeanCommision:\n \"The European Commission provides a platform for online dispute resolution (OS): \",\n weAreNotWilling:\n \"We are not willing or obliged to participate in dispute resolution proceedings before a consumer arbitration board.\",\n disclaimer: \"Disclaimer\",\n allInformation:\n \"All information on this website has been carefully checked. We make every effort to continually expand and update the information it contains, but cannot guarantee its completeness, accuracy and complete up-to-dateness. Scope SE & Co. KGaA provides this information without any assurances or warranties of any kind, either express or implied. Scope SE & Co. KGaA excludes all liability for damages arising directly or indirectly from the use of this website, provided they are not based on intent or gross negligence on the part of Scope SE & Co. KGaA. Our websites contain links to other websites. These links serve a purely informational purpose. We have no control over the future development of the content on these linked websites. Therefore, the operators of the linked sites are solely responsible for their content. As a content provider within the meaning of § 7 (1) TMG, Scope SE & Co. KGaA is responsible in accordance with the general laws for its own content which is made available for use on this website. Cross-references (“links”) to content provided by other parties are to be distinguished from this “own” content. By providing such links, Scope SE & Co. KGaA makes third-party content available for use. This external content was checked for possible civil or criminal liability when the link was first created. However, it cannot be ruled out that the content is subsequently changed by its respective provider. Scope SE & Co. KGaA does not constantly review the content it refers to in its offer for changes that could re-establish accountability. If you believe that a linked external site violates applicable law or includes content that is otherwise inappropriate, please let us know.\",\n theLaws:\n \"The laws of the Federal Republic of Germany, excluding the United Nations Convention on Contracts for the International Sale of Goods (CISG), shall apply.\",\n ifTheClient:\n \" If the Client is a merchant (Kaufmann) or a legal person under public law or a separate estate (Sondervermögen) under public law or has no general venue in Germany, the exclusive place of jurisdiction for all disputes arising out of or in connection with the use of this website shall be Berlin, Germany.\",\n copyright: \"Copyright\",\n copyrightContent: `Copyright © ${new Date().getFullYear()} / Business Group “Scope SE & Co. KGaA” and its affiliates “Scope Ratings GmbH”, “Scope Ratings UK Ltd.”, “Scope Fund Analysis GmbH”, “Scope Innovation Lab GmbH” and “Scope ESG Analysis GmbH” (also referred to as “SCOPE” or “Scope Group”). All rights reserved. All content (text, images, graphics, sound, video and animation files as well as their grouping etc.) on this website is protected by trademark and/or copyright law as well as other protective laws. This legal protection also extends to databases and similar facilities. Unless otherwise expressly permitted, the contents are freely usable only for their intended purpose of being viewed on the Internet. Beyond the limits of copyright law, the content of this website may not be reproduced, disseminated, altered or made accessible to third parties in any form without written permission. Unless otherwise specified, all brand names and logos on this website are trademarked.`,\n },\n methodology: {\n title: \"Methodology\",\n subtitle:\n \"Detailed information on our rating methodologies and rating processes is available here. Scope’s fund rating methodology has been an industry standard for more than 20 years.\",\n scopeFundsRating: \"1.\tFunds\",\n introduction: \"Introduction\",\n introductionText1:\n \"Scope’s Mutual Fund Rating is an established method of evaluating the management quality of open-end funds and how this contributes to outperformance and risk minimisation compared to peers. A\",\n introductionText2: \"qualitative rating, \",\n introductionText3:\n \"which requires in-depth insight into the work processes of the investment company, is only provided if we receive a mandate from the respective investment company\",\n introductionText4: \"\",\n introductionText5: \".\",\n methodology: \"Methodology\",\n methodologyText1:\n \"The Scope fund rating always consists of a performance and a risk indicator, which represent the weighted sum of other sub-indicators.\",\n methodologyText2:\n \"In the case of young funds with a history of less than six months, the indicators are initially only evaluated qualitatively using a list of criteria. The Scope fund rating is a relative rating, i.e. the fund is always assessed by comparing it to a predefined peergroup. A peergroup consists of at least 20 comparable funds selected by Scope analysts. \",\n methodologyText3: \"A qualitative assessment \",\n methodologyText4:\n \"is performed once a year. If the fund has a track record of six months or more, the qualitative evaluation criteria are replaced linearly over time by a sytem of quantitative metrics -with up to 40% of the qualitative criteria replaced after 60 months. For funds with a history of over 60 months, the quantitative share is constant at 60%, while qualitative criteria make up 40% of our assessment.\",\n methodologyText5:\n \"Figure: Graphical representation of our qualitative rating methodology when mandated by the investment company.\",\n methodologyText6:\n \" If there is no mandate from the respective investment company, Scope will, without consultation with the company, provide a purely quantitative rating for funds with a history of at least 60 months.\",\n methodologyText7: \"\",\n methodologyText8: \"\",\n ratingProcess: \"The rating process\",\n ratingProcessText1:\n \"The assessment of a fund’s quality is based on a multi-dimensional model that uses both performance and risk indicators. The performance indicator has a 70 per cent weighting and comprises relative performance, long-term earning power and the stability of performance. The risk indicator (30 per cent weighting) assesses the timing risk, loss risk and behavioural risk of the fund. There are interdependencies between performance and risk indicators in both quantitative and qualitative valuations. High outperformance is usually accompanied by a high tracking error. However, this in turn has a negative effect on behavioural risk. In general, the more active a manager is, the weaker its behavioural risk assessment is.\",\n ratingProcessText2: \"Figure: Assessment categories\",\n ratingProcessLabel1: \"Performance contribution\",\n ratingProcessLabel2: \"Stability\",\n ratingProcessLabel3: \"Relative performance\",\n ratingProcessLabel4: \"Long-term earnings power\",\n ratingProcessLabel5: \"Risk minimisation\",\n ratingProcessLabel6: \"Timing risk\",\n ratingProcessLabel7: \"Behavioural risk\",\n ratingProcessLabel8: \"Loss risk\",\n ratingClasses: \"Rating classes\",\n ratingClassesText1:\n \"Following a summary of the criteria for the individual components and the overall evaluation of the funds, the score is allocated to one of the five rating classes, ranging from A (very good) to E (poor). For each criterion, the fund is assigned a score of 1-100 relative to its competitors (in the same peergroup). If a specific indicator for a fund is in line with the median for its segment, it scores 50 for this indicator. The total score of relevance for the rating comprises the weighted score for the individual criteria.\",\n ratingClassesText2:\n \"If there is a major change in the fund management team, the fund rating will be flagged “ur” for “under review”.\",\n ratingClassesText3:\n \"A highly rated fund, i.e. at A or B, is expected to achieve a stable, above-average performance with relatively low risk in the medium term.\",\n investmentTeamRating: \"2.\tInvestment teams\",\n intro: \"1. Introduction\",\n introText1:\n \"Scope Fund Analysis (Scope) assigns ratings which assess the quality and competence of investment teams whose managed assets are predominantly invested in liquid instruments. The analysis evaluates individual investment teams with their own products and differentiated strategies, compared with the rest of the asset management company. Scope examines important asset management aspects directly under the team’s influence as well as indirect aspects which impact the team’s investment success.\",\n introText2:\n \"The rating therefore makes a significant contribution to investors’ decision-making process and enables investment teams to summarise the complex aspects of team competence, track record, resources and quality of processes in one rating.\",\n ratingProcess2: \"2. Rating process\",\n ratingProcess2Text1:\n \"The asset management rating (AMR) for investment teams - or investment team rating - scale ranges from AAA\",\n ratingProcess2Text2: \" to C\",\n amr: \"AMR\",\n ratingProcess2Text3:\n \". For the evaluation, Scope uses a scorecard approach with a variety of qualitative and quantitative individual criteria. Depending on the level of quality, one to four points are awarded for each criterion. One point corresponds to the minimum institutional standard and four points represents excellent quality.\",\n ratingProcess2Text4:\n \"The evaluation is carried out in the context of the relevant peergroup to ensure a high level of consistency and comparability across a wide spectrum of investment teams with a similar investment focus. Scope classifies the individual criteria according to the core idea of each individual criterion in order to effectively represent the diversity of the sector.\",\n ratingProcess2Text5:\n \"The scorecard analysis covers the following four areas, or panels:\",\n investmentProfessionals: \"Investment professionals\",\n investmentProfessionalsText1:\n \"Scope analyses the investment skills of the team members, the experience of management personnel and relevant team members, the organisation of the team as well as the incentivisation of investment professionals.\",\n investmentAndResearch: \"Investment process and research\",\n investmentAndResearchText1:\n \"Scope evaluates the stringency and plausibility of the investment process. The value and quality of the research used to make investment decisions is assessed as well as the incorporation and implementation of investment risk management guidelines.\",\n marketAndPerformance: \"Market position and performance\",\n marketAndPerformanceText1:\n \"In this panel, Scope analyses the unique selling points of the product portfolio and the investment strategies. The development of assets under management as well as the team’s investment track record are also evaluated as they demonstrate the effectiveness of the investment approach.\",\n further: \"Other internal and external resources\",\n furtherText1:\n \"In Scope’s view, important functions which lie outside of the team’s direct influence, yet significantly impact its investment success, are also relevant to an Investment Team Rating. Scope therefore examines: IT resources; the selection process and performance review of external service providers; and other aspects of risk management in the company.\",\n furtherText2:\n \"The complete investment team rating methodology is provided \",\n furtherText3: \"here.\",\n ratincScale: \"Rating scale for investment team ratings\",\n mutualFunds: \"Mutual Funds (UCITS)\",\n realEstateFunds: \"Open-ended Real Estate Funds (AIF)\",\n closeEndFunds: \"Closed-end funds (AIF)\",\n amAndIssuersOfCert: \"Asset Manager & Issuer of Certificates\",\n },\n notFound: {\n title: \"404\",\n subtitle: \"Page not found.\",\n },\n news: {\n title: \"Ratings and research from Scope\",\n subtitle:\n \"We regularly publish analysis and research on individual funds, asset managers, investment trends and industry sectors.\",\n back: \"Back\",\n previous: \"Previous\",\n next: \"Next\",\n search: \"Search\",\n category: \"Category\",\n document: \"Document\",\n video: \"Video\",\n podcast: \"Podcast\",\n more: \"More\",\n error: \"Currently unable to retrieve news. Please try again later.\",\n newsNotFound: \"Unable to find news.\",\n noMachingNews: \"No matching news for selected criteria.\",\n },\n reports: {\n title: \"Latest reports and studies\",\n subtitle:\n \"Here you will find the complete rating and research reports. They contain all graphics, data of the rating tables of the respective publication.\",\n back: \"Back\",\n previous: \"Previous\",\n next: \"Next\",\n more: \"More\",\n download: \"Download as PDF\",\n error: \"Currently unable to retrieve news. Please try again later.\",\n reportsNotFound: \"Unable to find news.\",\n noMachingNews: \"No matching news for selected criteria.\",\n },\n oif: {\n title: \"Offene Immobilienfonds\",\n subtitle:\n \"Die Ratingagentur Scope veröffentlicht regelmäßig Analysen und Research zu einzelnen Fonds und zu Investmentthemen. Folgend eine aktuelle Auswahl.\",\n back: \"Zurück\",\n previous: \"Zurück\",\n next: \"Weiter\",\n search: \"Suche\",\n category: \"Category\",\n document: \"Document\",\n video: \"Video\",\n podcast: \"Podcast\",\n more: \"Mehr\",\n error:\n \"Abruf von Nachrichten derzeit nicht möglich. Bitte versuchen Sie es später noch einmal.\",\n newsNotFound: \"Nachrichten nicht gefunden.\",\n noMachingNews: \"Keine passenden Nachrichten gefunden.\",\n },\n login: {\n text: \"Register now and get full access to all fund data and other tools.\",\n aifText1:\n \"Sollten Sie noch keinen Zugang zu scopeexplorer.com haben, registrieren Sie sich bitte hier:\",\n aifText2:\n \"Sie möchten Zugang zur Studie erhalten, ohne sich zu registrieren? Dann klicken Sie bitte\",\n aifText3: \"hier.\",\n fillInFields: \"Please fill in all mandatory fields.\",\n errors: {\n default: \"Login failed. Please try again.\",\n 401: \"Login failed. User name or password are incorrect.\",\n },\n success: \"Login successful.\",\n },\n register: {\n text: \"Register now and get full access to all fund data and other tools.\",\n text2:\n \"Im Anschluss senden wir Ihnen eine E-Mail mit dem Bestätigungslink. Mit Klick auf den Link in dieser Mail schließen Sie Ihre Registrierung ab.\",\n text3:\n \"Die Scope Fund Analysis GmbH wird an Ihre E-Mail-Adresse regelmäßig Informationen zu den im ScopeExplorer enthaltenen Produkten und Unternehmen senden („Newsletter“). Sie können der Verwendung jederzeit widersprechen. Am einfachsten geht dies über Ihr Nutzerprofil.\",\n text4:\n \"Zudem verwenden wir Ihre E-Mail-Adresse für unseren Benachrichtigungsservice, mit dem wir Sie über aktuelle Entwicklungen zu Produkten in Ihrer „Watchlist“ informieren.\",\n text5:\n \"Ich bin damit einverstanden, dass die Scope Fund Analysis GmbH den Empfang und meine Nutzung von Newsletter und Benachrichtigungsservice (z.B. Klick auf bestimmte Links) analysiert, um ihre Produkte zu verbessern. Hierzu werden auch sog. Tracking-Pixel eingesetzt. Die Einwilligung ist freiwillig und kann jederzeit für die Zukunft widerrufen werden.\",\n text6: \"Es gelten unsere\",\n text7:\n \"Bitte drücken Sie auf „Jetzt registrieren“ wenn Sie damit einverstanden sind. Unsere Datenschutzhinweise finden Sie\",\n link3: \"/terms-of-use\",\n link3Text: \"Allgemeinen Geschäftsbedingungen.\",\n link4: \"/privacy-policy\",\n link4Text: \"here.\",\n fillInFields: \"Please fill in all mandatory fields.\",\n errors: {\n default: \"Registration failed. Please try again.\",\n 404: \"Missing mandatory field in request.\",\n 409: \"This e-mail address has already been assigned to a user..\",\n 500: \"Server error.\",\n },\n success: \"User successfully created.\",\n finishRegistration: \"Finish registration\",\n iam: \"Select your investor type\",\n retail: \"Private Investor\",\n wholesale: \"Professional Investor\",\n sector: \"Sector\",\n additinalSectorQuestion: \"Additional information\",\n division: \"Division\",\n },\n registerSuccess: {\n retailText1:\n \"Vielen Dank für Ihre Registrierung. Um die Registrierung abzuschließen, haben wir Ihnen eine E-Mail an die von Ihnen genannte Adresse geschickt. Bitte schauen Sie auch einmal in Ihrem Spam-Ordner nach, sollten Sie die E-Mail nicht direkt in Ihrem Posteingang finden.\",\n retailText2:\n \"Sobald Sie mit einem Klick auf den Link in dieser E-Mail Ihre Anmeldung bestätigen, ist Ihre Registrierung abgeschlossen.\",\n wholesaleText1:\n \"Vielen Dank für Ihre Registrierung. Um die Registrierung abzuschließen, haben wir Ihnen eine E-Mail an die von Ihnen genannte Adresse geschickt. Bitte schauen Sie auch einmal in Ihrem Spam-Ordner nach, sollten Sie die E-Mail nicht direkt in Ihrem Posteingang finden.\",\n wholesaleText2:\n \"Sobald Sie mit einem Klick auf den Link in dieser E-Mail Ihre Anmeldung bestätigen, können Sie sich beim ScopeExplorer anmelden. Nach einer Prüfung durch uns werden wir Ihren Zugang um die Funktionen für professionelle Investoren erweitern. Dazu senden wir Ihnen eine gesonderte Benachrichtigung per E-Mail.\",\n },\n confirm: {\n title: \"Confirm user\",\n success: \"User name confirmed. You can now log in.\",\n error: \"Unable to confirm entry.\",\n },\n resetPassword: {\n title: \"Reset password\",\n send: \"Reset password\",\n errors: {\n requestDefault: \"Unable to send e-mail. Please try again.\",\n default: \"Unable to change password. Please try again.\",\n },\n fillInFields: \"Please fill in all mandatory fields.\",\n requestSuccess:\n \"If you are already registered, you will receive now an email through which you can reset your password.\",\n success: \"Your password has been changed.\",\n },\n fundsListModal: {\n title: \"Are you a professional investor?\",\n subtitle1: \"Then\",\n subtitle2: \"register\",\n subtitle3: \"now and get\",\n subtitle4: \"free\",\n subtitle5: \"access to:\",\n listItem1: \"Scope's extensive funds database\",\n listItem2:\n \"Comprehensive search functions for filtering and selecting funds\",\n listItem3: \"Generating and exporting long-term time series\",\n listItem4: \"Comprehensive peerg group rankings\",\n listItem5: \"Scope's list of fund recommendation\",\n listItem6: \"Scope's ESG analysis of invidual funds\",\n ignore: \"Ignore\",\n dontShow: \"Do not show again\",\n register: \"Register\",\n },\n privacyPolicy: {\n title: \"Datenschutzhinweise\",\n subtitle: \"für Scope Explorer\",\n section1Title: \"Datenschutz ist Vertrauenssache\",\n section1Text:\n \"Egal, ob Sie unser Kunde sind oder sich aus anderen Gründen für unsere Angebote interessieren: Der Schutz Ihrer Privatsphäre ist uns wichtig. Hier erfahren Sie, welche personenbezogenen Daten wir von Ihnen erheben, was wir damit machen und wie wir sie schützen. Außerdem informieren wir darüber, welche Rechte Ihnen zum Schutz Ihrer Daten zustehen.\",\n section2Title: \"1. Wer sind wir?\",\n section2Text1:\n \"Die Scope Fund Analysis GmbH ist ein deutsches Unternehmen mit Hauptsitz in Berlin und Verantwortlicher im Sinne des Datenschutzrechts für die Datenverarbeitung bei der Registrierung beim und die Nutzung des ScopeExplorer auf der Website www.scopeexplorer.com\",\n section2Text4: \"1.1\tUnsere Kontaktdaten lauten:\",\n section2Text5:\n \"1.2 Haben Sie Fragen zu dieser Datenschutzerklärung oder zum Schutz Ihrer Daten durch uns? Dann können Sie sich jederzeit auch an unseren Datenschutzbeauftragten wenden:\",\n section3Title: \"2. Worum geht es?\",\n section3Text1:\n \"2.1 Wenn wir personenbezogene Daten verarbeiten, bedeutet das, dass wir diese erheben, speichern, übermitteln, löschen oder in anderer Form nutzen. Mit personenbezogenen Daten meinen wir Informationen, die sich auf eine identifizierte oder identifizierbare natürliche Person beziehen, zum Beispiel zu\",\n section3List1: \"Kunden der Scope Fund Analysis GmbH,\",\n section3List2:\n \"Interessenten, die sich über unsere Scope Explorer-Website über unser Angebot informieren,\",\n section3List3:\n \"allen anderen Personen, die in Kontakt mit uns stehen, z.B. Vermittler, Bevollmächtigte, Boten sowie Vertreter oder Mitarbeiter juristischer Personen oder sonstiger Gesellschaften.\",\n section3Text2:\n \"2.2 Wir verarbeiten personenbezogene Daten, die wir durch den Kontakt mit Ihnen erhalten. Solche Daten entstehen insbesondere, wenn Sie sich online über unsere Dienste informieren, bei Scope Explorer registrieren und anmelden, online Kontaktformulare ausfüllen, sich schriftlich, per E-Mail oder telefonisch an uns wenden oder wenn Sie unsere Angebote nutzen.\",\n section4Title:\n \"3.\tWie verarbeiten wir Ihre Daten beim Besuch unserer Website?\",\n section4Text1:\n \"3.1 Bei der Nutzung unserer Website werden durch uns und durch Dritte automatisiert Daten erhoben, die Ihr Browser übermittelt.\",\n section4Text2:\n \"3.2 Bei der bloß informatorischen Nutzung der Website verarbeiten wir die folgenden Daten, die für uns technisch erforderlich sind, um Ihnen unsere Website anzuzeigen und die Stabilität und Sicherheit zu gewährleisten:\",\n section4List1: \"verkürzte IP-Adresse des zugreifenden Rechners\",\n section4List2: \"Name der abgerufenen Datei\",\n section4List3: \"Datum und Uhrzeit des Abrufs\",\n section4List4: \"übertragene Datenmenge\",\n section4List5: \"Meldung über erfolgreichen Abruf\",\n section4List6:\n \"Browsertyp nebst Version sowie das Betriebssystem, das Sie nutzen\",\n section4List7: \"Referrer URL\",\n section4List8: \"anfragender Provider\",\n section4List9: \"Bildschirmauflösung\",\n section4Text3:\n \"3.3 Die Protokolldaten werden von uns zudem für statistische Auswertungen im Rahmen des Betriebs unseres Angebots verwendet. Im Falle der rechtswidrigen Nutzung unseres Angebots dienen die Protokolldaten auch dazu, in Betracht kommende Rechtsverletzungen aufzuklären. Die Verarbeitung erfolgt auf Grundlage einer Interessenabwägung, die immer auch Ihre Interessen berücksichtigt (Art. 6 Abs. 1 UAbs. 1 lit. f DSGVO).\",\n section5Title: \"4. Cookies und Analysedienste\",\n section5Text1:\n \"4.1 Diese Website verwendet Cookies. Cookies dienen dazu, unser Angebot nutzerfreundlicher, effektiver und sicherer zu machen. Bei Cookies handelt es sich um Textdateien, die im Internetbrowser bzw. vom Internetbrowser auf Ihrem Computer gespeichert werden. Der Cookie enthält eine Zeichenfolge, die eine eindeutige Identifizierung Ihres Systems beim erneuten Aufrufen der Website ermöglicht.\",\n section5Text2:\n \"4.2 Die meisten der von uns verwendeten Cookies („Session-Cookies“) und die darin gespeicherten und übermittelten Daten werden nach Ende Ihres Besuchs automatisch gelöscht. Andere Cookies („Persistente Cookies“) bleiben auf Ihrem Endgerät gespeichert, bis Sie diese löschen.\",\n section5Text3:\n \"4.3 Sie können Ihren Browser so einstellen, dass Sie über das Setzen von Cookies informiert werden und Cookies nur im Einzelfall erlauben, die Annahme von Cookies für bestimmte Fälle oder generell ausschließen sowie das automatische Löschen der Cookies beim Schließen des Browsers aktivieren. Bereits gespeicherte Cookies können Sie jederzeit löschen. Bei der Deaktivierung von Cookies kann die Funktionalität dieser Website eingeschränkt sein.\",\n section5Text4: \"Technisch notwendige Cookies\",\n section5Text5:\n \"4.4 Einige Elemente unserer Website erfordern es, dass der aufrufende Browser auch nach einem Seitenwechsel identifiziert werden kann. Einige Cookies bleiben gespeichert und ermöglichen es uns, Ihren Browser beim nächsten Besuch wiederzuerkennen.\",\n section5Text6:\n \"4.5 In den Cookies werden die folgenden Daten gespeichert und übermittelt:\",\n section5List1: \"aktuelle Session-ID,\",\n section5List2: \"Spracheinstellungen,\",\n section5List3:\n \"Kenntnisnahme bestimmter Inhalte der Website, z.B. Fondratings,\",\n section5List4:\n \"Informationen dazu, ob Sie in die Verwendung technisch nicht notwendiger Cookies eingewilligt haben.\",\n section5Text7:\n \"4.6 Die mithilfe dieser technisch notwendigen Cookies von Ihnen erhobenen Daten werden nicht zur Erstellung von Nutzerprofilen verwendet.\",\n section5Text8:\n \"4.7 Die Verarbeitung erfolgt auf Grundlage einer Interessenabwägung, die immer auch Ihre Interessen berücksichtigt (Art. 6 Abs. 1 UAbs. 1 lit. f DSGVO).\",\n section5Text9: \"Analyse-Cookies\",\n section5Text10:\n \"4.8 Auf unserer Website verwenden wir außerdem Cookies zur pseudonymisierten Reichweitenmessung und Werbezwecken. Cookies werden hierzu entweder von unserem Server oder dem Server Dritter an Ihren Browser übertragen. In diesem Zusammenhang verarbeiten wir Ihre Daten zur Wahrung berechtigter Interessen auf Grundlage einer Interessenabwägung, die immer auch Ihre Interessen berücksichtigt (Art. 6 Abs. 1 UAbs. 1 lit. f DSGVO). Unser berechtigtes Interesse in der Verarbeitung liegt in den folgenden Zwecken:\",\n section5List5: \"Analyse und statistische Auswertung der Website-Nutzung\",\n section5List6: \"Optimierung der Website\",\n section5List7: \"Bereitstellung personalisierter Angebote und Inhalte\",\n section5List8: \"Erfolgsmessung von Werbekampagnen\",\n section5Text11:\n \"4.9 Sie können dem Einsatz von Analyse-Cookies widersprechen. Hinweise zu spezifischen Widerspruchsmöglichkeiten finden Sie in der entsprechenden Beschreibung in den nachfolgenden Absätzen.\",\n section5Text12:\n \"4.10\tSofern erforderlich, holen wir für die Verarbeitung Ihre Einwilligung nach Art. 6 Abs. 1 UAbs. 1 lit. a DSGVO ein.\",\n section5Text13: \"Google Analytics\",\n section5Text14:\n \"4.11\tDiese Website benutzt Google Analytics, einen Webanalysedienst der Google Inc. („Google“). Google Analytics verwendet ebenfalls sog. „Cookies“, die auf Ihrem Computer gespeichert werden und die eine Analyse der Benutzung der Website durch Sie ermöglichen. Die durch den Cookie erzeugten Informationen über Ihre Benutzung dieser Website werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert. Im Rahmen der für diese Website aktivierten IP-Anonymisierung wird Ihre IP-Adresse von Google jedoch innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum zuvor gekürzt. Nur in Ausnahmefällen wird die volle IP-Adresse an einen Server von Google in den USA übertragen und dort gekürzt. In unserem Auftrag wird Google diese Informationen benutzen, um Ihre Nutzung der Website auszuwerten, um Reports über die Website-Aktivitäten zusammenzustellen und um weitere mit der Website-Nutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Website-Betreiber zu erbringen.\",\n section5Text15:\n \"4.12\tDie im Rahmen von Google Analytics von Ihrem Browser übermittelte IP-Adresse wird nicht mit anderen Daten von Google zusammengeführt.\",\n section5Text16:\n \"4.13\tFür die Ausnahmefälle, in denen personenbezogene Daten in die USA übertragen werden, hat sich Google dem EU-US Privacy Shield unterworfen,\",\n section5Link1: \"https://www.privacyshield.gov/EU-US-Framework\",\n section5Text17:\n \"4.14\tSie können die Speicherung der Cookies durch eine entsprechende Einstellung Ihrer Browser-Software verhindern; wir weisen Sie jedoch darauf hin, dass Sie in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich werden nutzen können. Sie können darüber hinaus die Erfassung der durch das Cookie erzeugten und auf Ihre Nutzung der Website bezogenen Daten (inkl. Ihrer IP-Adresse) an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem sie das unter dem folgenden Link verfügbare Browser-Plug-in herunterladen und installieren: \",\n section5Link2: \"http://tools.google.com/dlpage/gaoptout?hl=de\",\n section5Text18:\n \"4.15\tAlternativ zum Browser-Add-On oder innerhalb von Browsern auf mobilen Geräten, klicken Sie bitte diesen Link, um die Erfassung durch Google Analytics innerhalb dieser Website zukünftig zu verhindern: \",\n section5Link3: \"https://tools.google.com/dlpage/gaoptout/eula.html\",\n section5Text19:\n \"4.16\tDabei wird ein Opt-Out-Cookie auf Ihrem Gerät abgelegt. Löschen Sie Ihre Cookies, müssen Sie diesen Link erneut klicken.\",\n section5Text20:\n \"4.17\tDiese Website verwendet Google Analytics mit der Erweiterung „_anonymizeIp()“. Dadurch werden IP-Adressen gekürzt weiterverarbeitet, eine Personenbeziehbarkeit kann damit ausgeschlossen werden. Soweit den über Sie erhobenen Daten ein Personenbezug zukommt, wird dieser also sofort ausgeschlossen und die personenbezogenen Daten damit umgehend gelöscht.\",\n section5Text21:\n \"4.18\tWir nutzen Google Analytics, um die Nutzung unserer Website analysieren und regelmäßig verbessern zu können. Über die gewonnenen Statistiken können wir unser Angebot verbessern und für Sie als Nutzer interessanter ausgestalten.\",\n section5Text22:\n \"4.19\tInformationen des Anbieters von Google Analytics finden Sie hier: Google Dublin, Google Ireland Ltd., Gordon House, Barrow Street, Dublin 4, Ireland, Fax: +353 (1) 436 1001. Die Nutzerbedingungen können Sie hier einsehen http://www.google.com/analytics/terms/de.html. Informationen zum Datenschutz bietet die Datenschutzerklärung unter http://www.google.de/intl/de/policies/privacy.\",\n section5Text22a:\n \"4.19\tInformationen des Anbieters von Google Analytics finden Sie hier: Google Dublin, Google Ireland Ltd., Gordon House, Barrow Street, Dublin 4, Ireland, Fax: +353 (1) 436 1001. Die Nutzerbedingungen können Sie hier einsehen\",\n section5Text22b: \"http://www.google.com/analytics/terms/de.html\",\n section5Text22c:\n \"Informationen zum Datenschutz bietet die Datenschutzerklärung unter\",\n section5Text22d: \"http://www.google.de/intl/de/policies/privacy.\",\n section5Text23:\n \"4.20\tSie können dem Einsatz von Google Analytics widersprechen. Hinweise zu spezifischen Widerspruchsmöglichkeiten finden Sie in der entsprechenden Beschreibung in den nachfolgenden Absätzen.\",\n section6Title: \"5. Newsletter und Benachrichtigungsservice\",\n section6Text1:\n \"5.1\tDie Scope Fund Analysis GmbH sendet an registrierte Kunden regelmäßig Informationen zu den im ScopeExplorer enthaltenen Produkten und Unternehmen („Newsletter). Diese Verarbeitung erfolgt auf Grundlage einer Interessenabwägung gemäß Art. 6 Abs. 1 UAbs. 1 lit. f DSGVO, die immer auch Ihre Interessen berücksichtigt.\",\n section6Text2:\n \"5.2\tZudem wird registrierten Kunden ein sog. Benachrichtigungsservice angeboten, mit dem per E-Mail über aktuelle Entwicklungen zu Produkten auf der „Watchlist“ des Kunden informiert wird. Diese Verarbeitung erfolgt zur Erfüllung eines Vertrages gemäß Art. 6 Abs. 1 UAbs. 1 lit. b DSGVO.\",\n section6Text3:\n \"5.3\tDer Empfang des Newsletters und der Benachrichtigungsservice können in Ihrem Nutzerprofil deaktiviert werden.\",\n section6Text4:\n \"5.4\tWir analysieren Daten zu Ihrem Empfang und Ihrer Nutzung von Newsletter und Benachrichtigungsservice, um unsere Produkte und unsere Werbung zu verbessern. So stellen wir mithilfe eines sog. Tracking-Pixels fest, ob unsere E-Mail geöffnet wurde und wir speichern, welche Links Sie in einer E-Mail geöffnet haben. Wir verarbeiten diese Daten ausschließlich aufgrund Ihrer ausdrücklichen Einwilligung gemäß Art. 6 Abs. 1 UAbs. 1 lit. a DSGVO.\",\n section6Text5:\n \"5.5\tWenn Sie nicht in die Analyse von Newsletter und Benachrichtigungsservice einwilligen bzw. Ihre Einwilligung widerrufen haben, kann es sein, dass wir Ihnen deswegen aus technischen Gründen keinen Newsletter und/oder keinen Benachrichtigungsservice mehr anbieten können.\",\n section6Text6:\n \"5.6\tFür den Versand und die Analyse von E-Mails greifen wir auf die Dienste von SendGrid, Inc. 1801 California Street, Suite 500, Denver, Colorado 80202, USA als Auftragsverarbeiter gemäß Art. 28 DSGVO zurück. Dabei werden Daten auch in den USA und damit in Drittländern im Sinne der DSGVO verarbeitet. Die SendGrid, Inc. ist nach dem EU-US-Privacy Shield verpflichtet\",\n section6Text7:\n \"https://www.privacyshield.gov/participant?id=a2zt0000000TRktAAG&status=Active\",\n section6Text8: \").\",\n section7Title: \"5. Informationsanwendungen anderer Anbieter\",\n section7Text1:\n \"6.1 Wir nutzen auf unsere Website Informationsanwendungen anderer Anbieter. Dadurch können wir Inhalte und Funktionen aus anderen Quellen (z.B. Videos) direkt in unsere Website einbinden. Sofern wir dabei personenbezogene Daten verarbeiten, erfolgt dies auf Grundlage einer Interessenabwägung, die immer auch Ihre Interessen mitberücksichtigt (Art. 6 Abs. 1 UAbs. 1 lit. f DSGVO).\",\n section7Text2: \"YouTube\",\n section7Text3:\n \"6.2 Wir haben YouTube-Videos in unsere Website eingebunden, die auf\",\n section7Link1: \"http://www.youtube.com\",\n section7Text4:\n \"gespeichert und von unserer Website aus direkt abspielbar sind. Diese sind alle im „erweiterten Datenschutz-Modus“ eingebunden, dies bedeutet, dass keine Daten über Sie als Nutzer an YouTube übertragen werden, wenn Sie die Videos nicht abspielen. Erst wenn Sie die Videos abspielen, werden die nachfolgend beschriebenen Daten übertragen. Auf diese Datenübertragung haben wir keinen Einfluss.\",\n section7Text5:\n \"6.3 Durch das Abspielen eines Videos auf der Website erhält YouTube die Information, dass Sie die entsprechende Unterseite unserer Website aufgerufen haben. Dies erfolgt unabhängig davon, ob YouTube ein Nutzerkonto bereitstellt, über das Sie eingeloggt sind, oder ob kein Nutzerkonto besteht. Wenn Sie bei YouTube eingeloggt sind, werden Ihre Daten direkt Ihrem Konto zugeordnet. Wenn Sie die Zuordnung mit Ihrem Profil bei YouTube nicht wünschen, müssen Sie sich vor Aktivierung des Buttons ausloggen. YouTube speichert Ihre Daten als Nutzungsprofile und nutzt sie für Zwecke der Werbung, Marktforschung und/oder bedarfsgerechten Gestaltung seiner Website. Eine solche Auswertung erfolgt insbesondere (selbst für nicht eingeloggte Nutzer) zur Erbringung von bedarfsgerechter Werbung und um andere Nutzer des sozialen Netzwerks über Ihre Aktivitäten auf unserer Website zu informieren. Ihnen steht ein Widerspruchsrecht zu gegen die Bildung dieser Nutzerprofile, wobei Sie sich zur Ausübung dessen an YouTube richten müssen.\",\n section7Text6:\n \"6.4 Weitere Informationen zu Zweck und Umfang der Datenerhebung und ihrer Verarbeitung durch YouTube erhalten Sie in der Datenschutzerklärung. Dort erhalten Sie auch weitere Informationen zu Ihren Rechten und Einstellungsmöglichkeiten zum Schutze Ihrer Privatsphäre:\",\n section7Link2: \"https://www.google.de/intl/de/policies/privacy\",\n section7Text7:\n \". Google verarbeitet Ihre personenbezogenen Daten auch in den USA und hat sich dem EU-US-Privacy-Shield unterworfen,\",\n section7Link3: \"https://www.privacyshield.gov/EU-US-Framework\",\n section8Title:\n \"7.\tWie verarbeiten wir Ihre Daten bei der Registrierung und Anmeldung auf unserer Website?\",\n section8Text1:\n \"7.1 Sie können sich, um gewisse Funktionen von Scope Explorer in Anspruch zu nehmen, bei uns registrieren. Die dabei angegebenen Daten werden für die Nutzung unseres Angebots verwendet. Die Verwendung erfolgt außerdem, um Sie über Ratingänderungen von den auf der von Ihnen erstellten Watchlist enthaltenen Fonds per E-Mail zu informieren und bei Bedarf Ihre Suchen zu speichern. Die Registrierung umfasst die Eingabe der folgenden Daten:\",\n section8List1: \"Vor- und Nachname\",\n section8List2: \"E-Mail-Adresse\",\n section8Text2:\n \"7.2 Handelt es sich um einen professionellen Investor benötigen wir zudem folgende Daten:\",\n section8List3: \"Telefon- oder Mobilnummer\",\n section8List4: \"Angaben zum Unternehmen\",\n section8List5: \"Daten des Ansprechpartners\",\n section8List6: \"Funktion des Ansprechpartners\",\n section8Text3:\n \"7.3 Hierüber hinaus werden die bei der Registrierung verwendete IP-Adresse und das Datum der Registrierung gespeichert, um einem Missbrauch der Funktion vorzubeugen.\",\n section8Text4:\n \"7.4 Die Verarbeitung dieser Daten erfolgt auf Grundlage von Art. 6 Abs. 1 UAbs. 1 lit. a und lit. f DSGVO.\",\n section9Title:\n \"8.\tWie verarbeiten wir Ihre Daten im Falle der Kontaktaufnahme mit uns?\",\n section9Text1:\n \"8.1 Unser Angebot ermöglicht es Ihnen, Kontakt zu uns aufzunehmen. Dies ist etwa telefonisch, anhand der zur Verfügung gestellten Telefonnummern oder durch den Versand einer E-Mail möglich. Daneben stellen wir auf unserer Website ein Kontaktformular für die elektronische Kontaktaufnahme zur Verfügung.\",\n section9Text2:\n \"8.2 Bei Absendung einer Nachricht über das Kontaktformular werden neben den von Ihnen eingegebenen Informationen zudem folgende Daten gespeichert, um Missbrauch vorzubeugen:\",\n section9List1: \"IP-Adresse\",\n section9List2: \"Datum und Uhrzeit\",\n section9List3: \"Betriebssystem\",\n section9List4: \"Browser\",\n section9List5: \"besuchte interne Seiten\",\n section9Text3:\n \"8.3 Bei einer Kontaktaufnahme über Telefon oder die bereitgestellten E-Mail-Adressen werden die übermittelten personenbezogenen Daten des Nutzers gespeichert, um die Anfrage und eine gegebenenfalls folgende Korrespondenz zu bearbeiten.\",\n section9Text4:\n \"8.4 Rechtsgrundlage für die Verarbeitung der Daten ist Art. 6 Abs. 1 UAbs. 1 lit. a oder lit. f DSGVO.\",\n section10Title: \"9.\tNutzen wir Ihre Daten zu Sicherheitszwecken?\",\n section10Text1:\n \"9.1 Wir nutzen Ihre Daten zudem, um Ihre Sicherheit sowie die Sicherheit unserer Leistungen und Geschäftsabläufe zu gewährleisten. Die in diesem Abschnitt beschriebene Verarbeitung erfolgt auf Grundlage einer Interessenabwägung, die immer auch Ihre Interessen berücksichtigt.\",\n section10Text2:\n \"9.2 Auf Grundlage einer Interessenabwägung verarbeiten wir Daten um Ihre Sicherheit sowie die Sicherheit unserer Geschäftsabläufe zu gewährleisten, insbesondere in den folgenden Fällen:\",\n section10List1:\n \"Um im Falle rechtlicher Auseinandersetzungen Sachverhalte prüfen und Ansprüche geltend machen zu können.\",\n section10List2:\n \"Um IT-Sicherheit und den IT-Betrieb der Scope Fund Analysis GmbH gewährleisten zu können.\",\n section10List3: \"Um Straftaten zu verhindern und aufklären zu können.\",\n section10List4:\n \"Um eine ordnungsgemäße Geschäftssteuerung zu gewährleisten.\",\n section11Title: \"10. Wer erhält Ihre Daten?\",\n section11Text1:\n \"10.1\tInformationen über Sie dürfen wir nur weitergeben, wenn gesetzliche Bestimmungen dies erlauben oder Sie eingewilligt haben.\",\n section11Text2: \"10.2\tZu den weitergegebenen Daten können gehören:\",\n section11List1: \"Vor- und Nachname\",\n section11List2: \"E-Mail-Adresse\",\n section11List3: \"Unternehmen\",\n section11List4: \"Funktion\",\n section11Text3:\n \"10.3\tAuch von uns eingesetzte Dienstleister können von uns Daten erhalten, wenn diese unsere besonderen Vertraulichkeitsanforderungen erfüllen. Dies können insbesondere Unternehmen in den Kategorien IT-Dienstleistungen, Logistik, Druckdienstleistungen, Telekommunikation, Inkasso, Beratung sowie Vertrieb und Marketing sein.\",\n section12Title: \"11. Wann löschen wir Ihre Daten?\",\n section12Text1:\n \"11.1\tWir verarbeiten und speichern Ihre personenbezogenen Daten grundsätzlich so lange, wie wir in einer geschäftlichen Beziehung zu Ihnen stehen. \",\n section12Text2:\n \"11.2\tBenötigen wir Ihre personenbezogenen Daten für den ursprünglichen Zweck nicht mehr, löschen wir diese. Etwas anderes gilt nur dann, wenn ihre – befristete – Weiterverarbeitung zu anderen Zwecken erforderlich ist. Solche Zwecke können sein:\",\n section12List1:\n \"Die Erfüllung von Aufbewahrungs- und Dokumentationspflichten, die sich unter anderem aus dem Handelsgesetzbuch (HGB) ergeben.\",\n section12List2:\n \"Die Erhaltung von Beweismitteln im Rahmen der Verjährungsvorschriften. Diese können nach den §§ 195 ff. des Bürgerlichen Gesetzbuches (BGB) in der Regel drei Jahre, in gewissen Fällen aber auch bis zu dreißig Jahre betragen.\",\n section13Title:\n \"12. Werden Ihre Daten in ein Drittland oder an eine internationale Organisation übermittelt?\",\n section13Text1:\n \"12.1\tEine Datenübermittlung an internationale Organisationen oder in Drittstaaten (Staaten außerhalb des Europäischen Wirtschaftsraums – EWR) findet grundsätzlich nicht statt. Zur Übermittlung pseudonymisierter Daten durch Analysedienste siehe oben unter \",\n section13Text2: \"„4. Cookies und Analysedienste“\",\n section13Text3: \"sowie \",\n section13Text4: \"„5. Informationsanwendungen anderer Anbieter“.\",\n section14Title:\n \"13. Sind Sie verpflichtet uns bestimmte personenbezogene Daten zu geben?\",\n section14Text1:\n \"13.1\tUnter Umständen ja. Im Rahmen unseres Online-Angebots benötigen wir Ihre personenbezogenen Daten zur Durchführung einer Registrierung und zur Kontaktierung im Falle einer Ratingveränderung der von Ihnen gespeicherten Fonds. Ohne diese Daten können wir zum Teil unser Angebot nicht erbringen.\",\n section15Title:\n \"14. Welche Rechte haben Sie, wenn es um die Verarbeitung Ihrer Daten geht?\",\n section15Text1:\n \"14.1\tSie haben uns gegenüber folgende Rechte hinsichtlich der Sie betreffenden personenbezogenen Daten:\",\n section15List1: \"Recht auf Auskunft,\",\n section15List2: \"Recht auf Berichtigung oder Löschung,\",\n section15List3: \"Recht auf Einschränkung der Verarbeitung,\",\n section15List4: \"Recht auf Datenübertragbarkeit,\",\n section15List5: \"Recht auf Widerruf von erteilten Einwilligungen.\",\n section15Text2:\n \"14.2\tIhnen steht im Zusammenhang mit der Verarbeitung Ihrer personenbezogenen Daten außerdem ein Beschwerderecht bei der folgenden, für uns in Bezug auf den Schutz personenbezogener Daten, zuständigen Aufsichtsbehörde zu:\",\n section16Title:\n \"15. Inwieweit gibt es eine automatisierte Entscheidungsfindung im Einzelfall?\",\n section16Text1:\n \"15.1\tIm Rahmen unserer Website sowie zur Begründung und Durchführung der Geschäftsbeziehung nutzen wir grundsätzlich keine vollautomatisierte Entscheidungsfindung gemäß Art. 22 DSGVO.\",\n section17Title:\n \"16. Ihr Widerspruchsrecht nach Artikel 21 Datenschutz-Grundverordnung (DSGVO)\",\n section17Text1: \"16.1\tEinzelfallbezogenes Widerspruchsrecht\",\n section17Text2:\n \"Sie haben das Recht, aus Gründen, die sich aus Ihrer besonderen Situation ergeben, jederzeit gegen die Verarbeitung Sie betreffender personenbezogener Daten, die aufgrund von Art. 6 Abs. 1 e DSGVO (Datenverarbeitung im öffentlichen Interesse) und Artikel Art. 6 Abs. 1 f DSGVO (Datenverarbeitung auf der Grundlage einer Interessenabwägung) erfolgt, Widerspruch einzulegen; dies gilt auch für ein auf diese Bestimmung gestütztes Profiling im Sinne von Artikel 4 Nr. 4 DSGVO. \",\n section17Text3:\n \"Legen Sie Widerspruch ein, werden wir Ihre personenbezogenen Daten nicht mehr verarbeiten, es sei denn, wir können zwingende schutzwürdige Gründe für die Verarbeitung nachweisen, die Ihre Interessen, Rechte und Freiheiten überwiegen, oder die Verarbeitung dient der Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen.\",\n section17Text4:\n \"16.2\tWiderspruch gegen die Verarbeitung Ihrer Daten für unsere Direktwerbung \",\n section17Text5:\n \"In Einzelfällen verarbeiten wir Ihre personenbezogenen Daten für unsere Direktwerbung. Sie haben das Recht, jederzeit Widerspruch gegen die Verarbeitung Sie betreffender personenbezogener Daten zum Zwecke derartiger Werbung einzulegen; dies gilt auch für das Profiling, soweit es mit solcher Direktwerbung in Verbindung steht.\",\n section17Text6:\n \"Widersprechen Sie der Verarbeitung für Zwecke der Direktwerbung, so werden wir Ihre personenbezogenen Daten nicht mehr für diese Zwecke verarbeiten.\",\n section17Text7:\n \"Der Widerspruch kann formfrei erfolgen und sollte möglichst gerichtet werden an die unter Ziffer 1 genannten Kontaktdaten an uns gesendet werden.\",\n },\n rechtlicheHinweise: {\n title: \"Rechtliche Hinweise zur nutzung des Scope Explorer\",\n subtitle:\n \"Die Nutzung des über die Internetseite www.scopeexplorer.com erreichbaren Informationsportals „SCOPE EXPLORER“ darf ausschließlich nach Maßgabe der folgenden Bestimmungen und Hinweise erfolgen:\",\n section1Title: \"1. Angebot nur im Inland\",\n section1Text1:\n \"Der SCOPE EXPLORER richtet sich an Personen mit Wohnsitz in der Bundesrepublik Deutschland.\",\n section2Title: \"2. Keine Beratung\",\n section2Text1:\n \"SCOPE erbringt keine Rechtsberatungs-, Steuerberatungs-, Beratungs-, oder Unternehmensdienstleistungen und berät nicht bei der Strukturierung von Transaktionen, der Erstellung oder Verhandlung von Transaktionsdokumenten.\",\n section3Title: \"3. Keine Finanzdienstleistungen\",\n section3Text1:\n \"Über den SCOPE EXPLORER werden keine Finanzdienstleistungen erbracht. Das Portal dient ausschließlich der Bereitstellung von Informationen. SCOPE bietet keine Beratung bei der Vermittlung und/oder Verwaltung von Finanzinstrumenten an.\",\n section4Title:\n \"4. Keine Ratings nach der EU-Verordnung über Ratingagenturen\",\n section4Text1:\n \"Die auf dem SCOPE EXPLORER angebotenen Fondsratings stellen kein Rating im Sinne der Verordnung (EG) Nr. 1060/2009 über Ratingagenturen in der Fassung der Änderungsverordnungen (EU) Nr. 513/2011 und (EU) Nr. 462/2013 dar. Die von SCOPE zur Verfügung gestellten Fondsratings sind Anlagestrategieempfehlungen. Diese enthalten aber keine Anlageempfehlungen oder Anlageberatung, da sie keine Beurteilung des Wertes des Finanzinstruments enthalten und auch den Anlagehorizont, die individuellen Anlageziele oder die Finanzlage einzelner Anleger nicht berücksichtigen.\",\n section5Title: \"5. Kein Angebot von Finanzinstrumenten\",\n section5Text1:\n \"Der SCOPE EXPLORER enthält keine Kauf- und/oder Verkaufsangebote für Finanzinstrumente. Insbesondere sind alle Inhalte zu Fonds, Wertpapieren und/oder anderen Finanzinstrumenten nicht als individuelle Anlageempfehlungen für Finanzinstrumente zu verstehen.\",\n section6Title: \"6. Download von Inhalten\",\n section6Text1:\n \"Der Kunde ist nur dann zum Herunterladen und Ausdrucken von Inhalten berechtigt, wenn auf dem Portal eine Möglichkeit zum Herunterladen oder Ausdrucken als Funktion zur Verfügung steht (z. B. über einen Download-Button).\",\n section7Title: \"7. Haftung für Links\",\n section7Text1:\n \"Verweise und Links auf Websites Dritter bedeuten nicht, dass sich SCOPE die hinter dem Verweis oder Link stehenden Inhalte zu eigen macht. Die Inhalte begründen keine Verantwortung von SCOPE für die dort bereitgestellten Daten und Informationen. SCOPE hat keinen Einfluss auf die Inhalte hinter dem Link. Für illegale, fehlerhafte oder unvollständige Inhalte und für Schäden, die durch die Nutzung der verlinkten Inhalte entstehen, haftet SCOPE nicht.\",\n },\n termsOfUse: {\n title: \"Nutzungsbedingungen\",\n subtitle: \"\",\n section1Title: \"1.\tAnwendungsbereich\",\n section1Text1:\n \"1.1\tDiese Nutzungsbedingungen gelten für die Registrierung und die Nutzung des nur nach Registrierung zugänglichen Bereichs des über die Internetseite www.scopeexplorer.com erreichbaren Informationsportals \",\n section1Text2: \"„SCOPE EXPLORER“.\",\n section1Text3:\n \"1.2\tNutzer des SCOPE EXPLORER im Sinne dieser Nutzungsbedingungen sind private Nutzer und professionelle Nutzer, deren Registrierung bestätigt wurde (auch \",\n section1Text4: \",,Kunden‘‘\",\n section1Text5: \").\",\n section1Text6:\n \"1.3\tDer SCOPE EXPLORER wird durch die Scope Fund Analysis GmbH, Lennéstraße 5, 10785 Berlin (\",\n section1Text7: \"„SCOPE“\",\n section1Text8:\n \") betrieben. Diese ist erreichbar telefonisch unter +49 30 27891-0 oder per E-Mail an info@scopeanalysis.com.\",\n section1Text9:\n \"1.4\tAndere Geschäftsbedingungen finden keine Anwendung, auch wenn SCOPE ihrer Geltung im Einzelfall nicht gesondert widerspricht. Selbst wenn SCOPE auf ein Schreiben Bezug nimmt, das andere Geschäftsbedingungen enthält oder auf solche verweist, liegt darin kein Einverständnis mit der Geltung jener Geschäftsbedingungen.\",\n section1Text10:\n \"1.5 Der SCOPE EXPLORER richtet sich an Personen mit Wohnsitz in der Bundesrepublik Deutschland.\",\n section2Title: \"2. Registrierung\",\n section2Text1:\n \"2.1\tBei der Registrierung sind Vor- und Nachname, eine gültige E-Mail-Adresse und ein Passwort anzugeben.\",\n section2Text2:\n \"2.2\tRegistriert sich eine Person als professioneller Nutzer sind zudem eine Telefon- oder Mobilnummer, das Unternehmen sowie der Vor- und Nachname und die Funktion des Ansprechpartners anzugeben.\",\n section2Text3:\n \"2.3\tVoraussetzung für die erfolgreiche Registrierung ist die Verifikation der angegebenen E-Mail-Adresse durch Klick auf den entsprechenden Link in der versendeten Bestätigungs-E-Mail.\",\n section2Text4:\n \"2.4\tSCOPE ist berechtigt, die bereitgestellten Informationen auf Vollständigkeit und Plausibilität zu prüfen. Die Registrierung wird erst wirksam, wenn diese durch SCOPE bestätigt worden ist. Die Bestätigung der Registrierung steht im freien Ermessen von SCOPE.\",\n section2Text5:\n \"2.5\tDie Zugangsdaten einschließlich des Passworts sind vertraulich zu behandeln und dürfen unbefugten Dritten nicht zugänglich gemacht werden. Besteht Grund zur Annahme, dass Dritte unbefugt Kenntnis von den Zugangsdaten erhalten haben oder erlangen werden, ist SCOPE unverzüglich hierüber informieren.\",\n section3Title: \"3. Leistungen von SCOPE\",\n section3Text1:\n \"3.1\tKunden haben die Möglichkeit, sog. Fondsratings zum Rendite-Risiko-Profil von Investmentfonds (dazu gehören sowohl individuelle als auch alternative Investmentfonds oder ähnliche Konstruktionen in der Position eines Eigenkapitalgebers) einzusehen. \",\n section3Text2:\n \"3.2\tFerner erhalten Kunden Zugriff auf eine so genannte „Watchlist“. Durch die Watchlist kann der Kunde selbst ausgewählte Fonds in einer Liste speichern und sich über Ratingänderungen informieren\",\n section3Text3:\n \"3.3\tDem professionellen Nutzer stehen über die in 3.1 und 3.2 beschriebenen Leistungen hinaus Informationen zu Zeitreihen in grafischer und tabellarischer Darstellung, ein Auszug der von SCOPE ausgewählten Fonds und so genannte ESG-Analysen auf Fondsebene zur Verfügung.\",\n section3Text4:\n \"3.4\tSCOPE analysiert die Nutzung von SCOPE EXPLORER durch den Kunden und zeigt ihm auf dieser Grundlage insbesondere solche Informationen an, die besonders interessant für ihn sind. Voraussetzung für die Inanspruchnahme dieser Analyse ist, dass der Kunde in den Einsatz bestimmter Analyse-Cookies gegebenenfalls einwilligt.\",\n section3Text5:\n \"3.5\tSCOPE wird angemessene Anstrengungen unternehmen, um die Verfügbarkeit des Portals aufrechtzuerhalten. Der Kunde erkennt an, dass SCOPE keinen definierten Grad an Verfügbarkeit oder die Einhaltung eines Service Levels schuldet.\",\n section3Text6:\n \"3.6\tSCOPE garantiert nicht, dass das Portal fehlerfrei genutzt werden kann und/oder dass es frei von Viren und anderen schädlichen Komponenten ist.\",\n section4Title: \"4. Ausschlüsse und Disclaimer\",\n section4Text1:\n \"4.1\tEine Garantie für Richtigkeit, Aktualität, Eignung für einen bestimmten Zweck und Vollständigkeit der Inhalte wird von SCOPE nicht übernommen.\",\n section4Text2:\n \"4.2\tSCOPE erbringt keine Rechtsberatungs-, Steuerberatungs-, Beratungs-, oder Unternehmensdienstleistungen und berät nicht bei der Strukturierung von Transaktionen, der Erstellung oder Verhandlung von Transaktionsdokumenten.\",\n section4Text3:\n \"4.3\tÜber den SCOPE EXPLORER werden keine Finanzdienstleistungen erbracht. Das Portal dient ausschließlich der Bereitstellung von Informationen. SCOPE bietet keine Beratung bei der Vermittlung und/oder Verwaltung von Finanzinstrumenten an.\",\n section4Text4:\n \"4.4\tDie auf dem SCOPE EXPLORER angebotenen Fondsratings stellen kein Rating im Sinne der Verordnung (EG) Nr. 1060/2009 über Ratingagenturen in der Fassung der Änderungsverordnungen (EU) Nr. 513/2011 und (EU) Nr. 462/2013 dar. Die von SCOPE zur Verfügung gestellten Fondsratings sind Anlagestrategieempfehlungen. Diese enthalten aber keine Anlageempfehlungen oder Anlageberatung, da sie keine Beurteilung des Wertes des Finanzinstruments enthalten und auch den Anlagehorizont, die individuellen Anlageziele oder die Finanzlage einzelner Anleger nicht berücksichtigen.\",\n section4Text5:\n \"4.5\tDer SCOPE EXPLORER enthält keine Kauf- und/oder Verkaufsangebote für Finanzinstrumente. Insbesondere sind alle Inhalte zu Fonds, Wertpapieren und/oder anderen Finanzinstrumenten nicht als individuelle Anlageempfehlungen für Finanzinstrumente zu verstehen.\",\n section4Text6:\n \"4.6\tVerweise und Links auf Websites Dritter bedeuten nicht, dass sich SCOPE die hinter dem Verweis oder Link stehenden Inhalte zu eigen macht. Die Inhalte begründen keine Verantwortung von SCOPE für die dort bereitgestellten Daten und Informationen. SCOPE hat keinen Einfluss auf die Inhalte hinter dem Link. Für illegale, fehlerhafte oder unvollständige Inhalte und für Schäden, die durch die Nutzung der verlinkten Inhalte entstehen, haftet SCOPE nicht.\",\n section5Title: \"5. Änderungen dieser Nutzungsbedingungen\",\n section5Text1:\n \"5.1\tSCOPE kann von Zeit zu Zeit redaktionelle Änderungen an diesen Nutzungsbedingungen vornehmen, die das laufende Vertragsverhältnis mit SCOPE nicht betreffen. Zu diesen Änderungen gehören beispielsweise die Korrektur von Tippfehlern oder die Aktualisierung von Kontaktinformationen.\",\n section5Text2:\n \"5.2\tSCOPE ist darüber hinaus berechtigt, gelegentlich und nach eigenem Ermessen Änderungen an diesen Nutzungsbedingungen aus triftigen Gründen vorzunehmen, die das laufende Vertragsverhältnis betreffen, insbesondere aufgrund neuer technischer Entwicklungen, rechtlicher Änderungen, einer Anordnung oder eines Antrags einer Regulierungsbehörde, einer Gerichtsentscheidung oder anderer gleichwertiger Gründe wie Änderungen in der Vertriebs- oder Produktpolitik.\",\n section5Text3:\n \"5.3\tWill SCOPE solche Änderungen vornehmen, die das aktuelle Vertragsverhältnis mit dem Kunden betreffen, wird SCOPE den Kunden spätestens zwei Monate vor dem vorgeschlagenen Inkrafttreten in auffälliger und angemessener Weise informieren. Dies kann eine auffällige Meldung im Portal, d.h. beim nächsten Login, oder eine E-Mail sein. Diese Nachricht enthält Informationen über die von SCOPE gewünschten Änderungen, das Recht des Kunden, sie abzulehnen, und die Folgen, wenn der Kunde sie nicht vor Ablauf der Frist ablehnt. Die Änderungen gelten als genehmigt, wenn der Kunde entweder direkt zustimmt oder wenn er die Änderungen nicht vor Ablauf der Frist ablehnt. Wenn der Kunde dem Änderungsvorschlag widerspricht, kann jede Partei die von der mitgeteilten Änderung betroffene Vereinbarung vor dem vorgeschlagenen Inkrafttreten mit sofortiger Wirkung und ohne zusätzliche Kosten kündigen. In der Mitteilung wird SCOPE die von der vorgeschlagenen Änderung betroffene Vereinbarung identifizieren und den Kunden ausdrücklich auf dieses Kündigungsrecht hinweisen. Wird der Vertrag gekündigt, unterliegen Verträge mit SCOPE, die nicht von der vorgeschlagenen Änderung betroffen sind, nicht diesem Kündigungsrecht.\",\n section6Title: \"6. Sperrung des Zugangs zum Portal \",\n section6Text1:\n \"SCOPE kann den Zugang zum Portal vorübergehend oder dauerhaft sperren, wenn es konkrete Anhaltspunkte dafür gibt, dass der Kunde gegen diese Nutzungsbedingungen und/oder geltendes Recht verstoßen hat, oder wenn eine Sperrung erforderlich ist, um die IT-Sicherheit oder andere berechtigte Interessen von SCOPE zu wahren. SCOPE wird bei der Entscheidung über die Sperrung die berechtigten Interessen des Kunden so weit wie möglich und zumutbar berücksichtigen.\",\n section7Title: \"7. Kündigung und Verbraucher-Widerrufsrecht\",\n section7Text1:\n \"7.1\tDer Vertrag über die Nutzung des SCOPE EXPLORER unter Geltung dieser Nutzungsbedingungen wird auf unbestimmte Zeit geschlossen und ist durch beide Parteien mit einer Frist von vier Wochen zum jeweiligen Monatsende kündbar. Hiervon unberührt bleibt das Recht beider Parteien zur sofortigen Kündigung aus wichtigem Grund. \",\n section7Text2:\n \"7.2\tDie Erklärung der Kündigung hat in Textform zu erfolgen.\",\n section7Text3:\n \"7.3\tNur wenn der Kunde ein Verbraucher ist, steht ihm ein Verbraucher-Widerrufsrecht zu. Einzelheiten sind der diesen Nutzungsbedingungen angefügten Widerrufsbelehrung zu entnehmen.\",\n section7Text4:\n \"7.4\tDie Beendigung des Vertrages über die Nutzung des SCOPE EXPLORER berührt nicht bestehende sonstige Vereinbarungen über Dienstleistungen und Produkte mit SCOPE.\",\n section8Title: \"8. Nutzungsrecht\",\n section8Text1:\n \"8.1\tFür die Dauer des Vertrages über die Nutzung des SCOPE EXPLORER gewährt SCOPE dem Kunden ein nicht ausschließliches, geografisch unbegrenztes, nicht unterlizenzierbares und nicht übertragbares Recht, auf die auf dem SCOPE EXPLORER verfügbaren Inhalte zuzugreifen und diese nur für den eigenen Gebrauch anzuzeigen.\",\n section8Text2:\n \"8.2\tDer Kunde ist nur dann zum Herunterladen und Ausdrucken von Inhalten berechtigt, wenn auf dem Portal eine Möglichkeit zum Herunterladen oder Ausdrucken als Funktion zur Verfügung steht (z. B. über einen Download-Button).\",\n section9Title: \"9. Haftungsbeschränkung\",\n section9Text1:\n \"9.1\tSCOPE haftet unbeschränkt, wenn die Schadensursache auf Vorsatz oder grober Fahrlässigkeit beruht. Des Weiteren haftet Scope Fund Analysis für die leicht fahrlässige Verletzung wesentlicher Pflichten, deren Verletzung die Erreichung des Vertragszwecks gefährdet, oder für die Verletzung von Pflichten, deren Erfüllung die ordnungsgemäße Durchführung des Vertrages erst ermöglicht und auf deren Einhaltung sich die Vertragsparteien regelmäßig verlassen. In diesem Fall haftet SCOPE jedoch nur für den vorhersehbaren, vertragstypischen Schaden. SCOPE haftet nicht für leicht fahrlässige Verletzungen anderer als der in den vorstehenden Sätzen genannten Verpflichtungen.\",\n section9Text2:\n \"9.2\tDie vorstehenden Haftungsbeschränkungen gelten nicht für Verletzungen von Leben, Körper oder Gesundheit, für arglistig verschwiegene Mängel und für Mängel bezüglich derer eine Beschaffenheitsgarantie übernommen wurde. Die Haftung nach dem Produkthaftungsgesetz bleibt unberührt.\",\n section9Text3:\n \"9.3\tSoweit die Haftung von SCOPE ausgeschlossen oder beschränkt ist, gilt dies auch für die persönliche Haftung von Arbeitnehmern, gesetzlichen Vertretern und Erfüllungsgehilfen der SCOPE.\",\n section9Text4:\n \"9.4\tSollte dieser Vertrag ausnahmsweise eine Schutzwirkung zugunsten Dritter entfalten, gelten die vorstehenden Haftungsbeschränkungen auch gegenüber Dritten.\",\n section10Title: \"10. Richtlinien / Schlussbestimmungen \",\n section10Text2:\n \"10.2\tDiese Nutzungsbedingungen sind in deutscher Sprache verfasst. Übersetzungen dieser Nutzungsbedingungen in andere Sprachen dienen ausschließlich Informationszwecken. Im Falle von Widersprüchen zwischen der deutschen Version und Übersetzungen geht die deutsche Version vor.\",\n section10Text3:\n \"10.3\tEs gilt deutsches Recht unter Ausschluss des Übereinkommens der Vereinten Nationen über Verträge über den internationalen Warenkauf (CISG) und des deutschen Kollisionsrechts. Ist der Kunde Verbraucher und hat er seinen gewöhnlichen Aufenthalt in einem Mitgliedstaat der Europäischen Union, so gilt ebenfalls deutsches Recht, wobei zwingende Bestimmungen des Staates, in dem der Nutzer seinen gewöhnlichen Aufenthalt hat, unberührt bleiben.\",\n section10Text4:\n \"10.4\tIst der Kunde Kaufmann oder eine juristische Person des öffentlichen Rechts oder ein Sondervermögen des öffentlichen Rechts oder hat er keinen allgemeinen Gerichtsstand in Deutschland, ist ausschließlicher Gerichtsstand für alle Streitigkeiten aus oder im Zusammenhang mit diesen Nutzungsbedingungen Berlin.\",\n section10Text5:\n \"10.5\tDie Europäische Kommission bietet eine Plattform für die außergerichtliche Online-Streitbeilegung (OS-Plattform), die unter www.ec.europa.eu/consumers/odr zugänglich ist. Unsere E-Mail-Adresse finden Sie in unserem Impressum. Wir sind weder verpflichtet noch bereit, uns an dem Streitbeilegungsverfahren zu beteiligen.\",\n section10Text6:\n \"10.6\tDer Kunde ist nicht berechtigt, ohne vorherige schriftliche Zustimmung von SCOPE Rechte oder Ansprüche aus oder im Zusammenhang mit der Nutzung des SCOPE EXPLORER, eines über den SCOPE EXPLORER geschlossenen Vertrages und/oder dieser Nutzungsbedingungen an Dritte abzutreten.\",\n section10Text7:\n \"10.7\tSollte eine einzelne Bestimmung dieser Nutzungsbedingungen ganz oder teilweise unwirksam sein, so wird dadurch die Gültigkeit der übrigen Bestimmungen nicht berührt.\",\n section10Text8:\n \"10.8\tSofern in diesen Nutzungsbedingungen nichts anderes bestimmt ist, sind Änderungen oder Ergänzungen dieser Nutzungsbedingungen nur gültig, wenn sie in Textform erfolgen. Dies gilt auch für jede Änderung oder Aufhebung dieser Bestimmung.\",\n },\n termsAndConditions: {\n title: \"Besondere Bestimmungen der Offene Immobilienfonds Studie 2022\",\n subtitle: \"\",\n },\n scopeAwards: {\n scopeAwards: \"Scope Award\",\n title: \"Scope Award\",\n investmentAwards: \"Scope Investment Awards\",\n alternativeInvestmentAwards: \"Scope Alternative Investment Awards\",\n certificateAwards: \"Scope Certificate Awards\",\n findOutMore:\n \"Find out more about categories, nominees and the award methodology\",\n scopeAward: \"The Scope Award\",\n scopeAwardText1:\n \"Every day, the analysts at Scope Fund Analysis evaluate the risk/return profiles of investment funds and the quality of asset managers. Their ratings, rankings and research reports help investors to make informed investment and selection decisions.\",\n scopeAwardText2:\n \"Once a year, our analysts revue their work to select the most outstanding asset management achievements and strongest fund concepts which we honour with the Scope Awards.\",\n scopeAwardText3:\n \"The Scope Awards are the most established and distinguished awards presented to fund and asset managers in German-speaking countries – for equity, pension and mixed funds (the Scope Investment Awards) as well as for tangible assets and alternative investments (the Scope Alternative Investment Awards). We have been holding the Scope Alternative Investment Awards since 2005, while the Scope Investment Awards have a more than 10-year history.\",\n scopeAwardText4:\n \"Our media partnership with the Handelsblatt is a distinguishing feature of the Scope Awards. The award ceremony has been jointly held together with the Handelsblatt since 2013.\",\n scopeAwardText5:\n \"Moreover, while all other market awards focus exclusively on quantitative criteria, the Scope Awards also take qualitative criteria fully into consideration. Although attention to qualitative factors makes analysis considerably more time-consuming, it also allows forward-looking statements to be made regarding the quality of funds and managers.\",\n scopeAwardText6:\n \"So what distinguishes a Scope Award from a Scope rating? While both allow high-quality funds and asset managers to stand out from the crowd, there is one significant difference: fund providers and asset managers can acquire ratings, whereas they must qualify for an award in accordance with participation and nomination conditions.\",\n awardSculpture: \"The Award Sculpture\",\n awardSculptureText1:\n \"The sculpture gives tangible form to both the rating agency’s identity and the purpose of the awards.\",\n awardSculptureText2:\n \"The Scope Group stands for independence, expertise, transparency and continuity. The Investment Awards are presented by the German rating agency to honour the quality of retail fund and institutional fund asset managers.\",\n awardSculptureText3:\n \"The search for a sculpture which reflected the achievements of award holders while, at the same time, symbolising the Scope Group’s basic principles, led to a combination of metal and glass.\",\n awardSculptureText4:\n \"The underlying design concept was penetration. The Scope Award is made up of geometric forms with clear, defined lines. A metal cylinder penetrates a tablet of glass, in the style of the Scope Group logo. Both elements are set on a square, stainless-steel base, providing weight and stability.\",\n awardSculptureText5:\n \"Metal represents integrity and measurable value, while glass combines transparency with a high standard of diligence. The sculpture thus brings together market penetration with independent judgement.\",\n awardSculptureText6:\n \"The award honours the overall achievement of its inners. \",\n saveTheDate: \"Save the date\",\n saveTheDateHost: \"Evening host: Barbara Schöneberger\",\n nominees: \"Nominees\",\n nomineesTextTooltip:\n \"The nominees will be announced by the jury in the beginning of September\",\n videoBannerText:\n \"Impressions of the Scope Award 2022 in Berlin // Moderation Barbara Schöneberger\",\n winner: \"Winner\",\n winner2: \"Winner\",\n winners: \"Winners\",\n winnerMoreBtn: \"More\",\n winnerText:\n \"The winners will be announced at the award ceremony on 18th of November. On the following day the winners will be published in Handelsblatt \",\n nominationAltInvestmentRequirements:\n \"Nomination Requirements and Methodology\",\n nominationAltInvestmentRequirementsText:\n \"Get to know more about the participation criteria, the selection process and download the methodology\",\n categories: \"Categories\",\n assetManagersFunds: \"Asset Manager / Funds\",\n categoriesInvestment: \"Categories Investment\",\n categoriesAlternativeInvestment: \"Categories Alternative Investment\",\n categoriesCertificate: \"Categories Certificate\",\n showLess: \"Show less\",\n mediaPartner: \"Media partner:\",\n country: \"Country:\",\n germany: \"GER\",\n austria: \"AUT\",\n switzerland: \"SUI\",\n awards2022: {\n date: \"18th of November 2021 in Berlin\",\n subtitle:\n \"The most established and distinguished award for funds and asset managers\",\n subtitleAlternative:\n \"The most established and distinguished award for asset managers\",\n subtitleCertificate:\n \"The most established and distinguished award for certificate issuer\",\n investment: {\n categoriesText:\n \"Scope Investment Awards 2022 will be presented in a total of 28 categories:\",\n categoriesSubItem1: \"16 asset manager categories\",\n categoriesSubItem2: \"12 fund categories\",\n nomineesText:\n \"In 28 categories for equity, bond and mixed funds, the most convincing fund concepts and best asset management performances of the year are honored with the Scope Award.\",\n winnersText1:\n \"Scope Awards - The best asset managers and funds honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presented the 16th Scope Awards.\",\n },\n alternativeInvestment: {\n categoriesText:\n \"Scope Investment Awards 2022 will be presented in a total of 28 categories:\",\n categoriesSubItem1: \"Institutional & Retail Real Estate\",\n categoriesSubItem2: \"ESG\",\n categoriesSubItem3: \"Alternative Investments\",\n categoriesSubItem4: \"Special Award\",\n nomineesText:\n \"In 21 categories for real estate, ESG and alternative investments the best asset management performances of the year are honored with the Scope Award.\",\n winnersText1: \"Scope Awards - The best asset managers honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presented the 16th Scope Awards.\",\n },\n certificate: {\n categoriesText:\n \"Scope Certificate Awards 2022 will be presented in a total of four categories.\",\n nomineesText:\n \"In four categories for primary market, secondary market, trading and ESG the best certificate issuers of the year are honored with the Scope Award.\",\n winnersText1: \"Scope Awards - The best certificate issuers honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presented the 16th Scope Awards.\",\n },\n requirements: {\n text: \"Nomination Requirements and Methodology\",\n },\n },\n awards2023: {\n date: \"17th of November 2022 in Berlin\",\n subtitle:\n \"The most established and distinguished award for funds and asset managers.\",\n subtitleAlternative:\n \"The most established and distinguished award for funds and asset managers.\",\n subtitleCertificate:\n \"The most established and distinguished award for funds and asset managers.\",\n investment: {\n categoriesText:\n \"Scope Investment Awards 2023 will be presented in a total of 30 categories:\",\n categoriesSubItem1: \"17 asset manager categories\",\n categoriesSubItem2: \"13 fund categories\",\n nomineesText:\n \"In 30 categories for equity, bond and mixed funds, the most convincing fund concepts and best asset management performances of the year are honored with the Scope Award.\",\n winnersText1:\n \"Scope Awards - The best asset managers and funds honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presented the 17th Scope Awards.\",\n },\n alternativeInvestment: {\n categoriesText:\n \"Scope Alternative Investment Awards 2023 will be presented in a total of 21 categories:\",\n categoriesSubItem1: \"Institutional & Retail Real Estate\",\n categoriesSubItem2: \"ESG\",\n categoriesSubItem3: \"Alternative Investments\",\n categoriesSubItem4: \"Special Award\",\n nomineesText:\n \"In 21 categories for real estate, ESG and alternative investments the best asset management performances of the year are honored with the Scope Award.\",\n winnersText1: \"Scope Awards - The best asset managers honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presented the 17th Scope Awards.\",\n },\n certificate: {\n categoriesText:\n \"Scope Certificate Awards 2023 will be presented in a total of four categories.\",\n nomineesText:\n \"In four categories for primary market, secondary market, trading and ESG the best certificate issuers of the year are honored with the Scope Award.\",\n winnersText1: \"Scope Awards - The best certificate issuers honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presented the 17th Scope Awards.\",\n },\n requirements: {\n text: \"Nomination Requirements and Methodology\",\n },\n },\n awards2024: {\n date: \"16. November 2023, Frankfurt am Main\",\n subtitle: \"16. November 2023, Frankfurt am Main\",\n subtitleAlternative: \"16. November 2023, Frankfurt am Main\",\n subtitleCertificate: \"16. November 2023, Frankfurt am Main\",\n investment: {\n categoriesText:\n \"Scope Investment Awards 2024 will be presented in a total of 30 categories:\",\n categoriesSubItem1: \"16 asset manager categories\",\n categoriesSubItem2: \"13 fund categories\",\n categoriesSubItem3: \"Special category: Fund Innovations\",\n nomineesText:\n \"In 30 categories for equity, bond and mixed funds, the most convincing fund concepts and best asset management performances of the year are honored with the Scope Award.\",\n nomineesInfo:\n \"The nominations will be announced at the beginning of September 2023.\",\n winnersText1:\n \"Scope Awards - The best asset managers and funds honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presented the 18th Scope Awards.\",\n winnersInfo:\n \"The winners will be announced at the Scope Award 2024 on 16 November 2023 in Frankfurt am Main.\",\n },\n alternativeInvestment: {\n categoriesText:\n \"Scope Alternative Investment Awards 2024 will be presented in a total of 20 categories:\",\n categoriesSubItem1: \"Real Estate\",\n categoriesSubItem2: \"ESG\",\n categoriesSubItem3: \"Alternative Investments\",\n categoriesSubItem4: \"Special Award\",\n nomineesText:\n \"In 20 categories for real estate, ESG and alternative investments the best asset management performances of the year are honored with the Scope Award.\",\n nomineesInfo:\n \"The nominations will be announced at the beginning of October 2023.\",\n winnersText1: \"Scope Awards - The best asset managers honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presented the 18th Scope Awards.\",\n winnersInfo:\n \"The winners will be announced at the Scope Award 2024 on 16 November 2023 in Frankfurt am Main.\",\n },\n certificate: {\n categoriesText:\n \"Scope Certificate Awards 2024 will be presented in a total of four categories.\",\n nomineesText:\n \"In four categories for primary market, secondary market, trading and ESG the best certificate issuers of the year are honored with the Scope Award.\",\n nomineesInfo:\n \"The nominations will be announced in the middle of October 2023.\",\n winnersText1: \"Scope Awards - The best certificate issuers honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presented the 18th Scope Awards.\",\n winnersInfo:\n \"The winners will be announced at the Scope Award 2024 on 16 November 2023 in Frankfurt am Main.\",\n },\n requirements: {\n text: \"Nomination Requirements and Methodology\",\n },\n },\n awards2025: {\n date: \"\",\n subtitle: \"\",\n subtitleAlternative: \"\",\n subtitleCertificate: \"\",\n investment: {\n categoriesText:\n \"Scope Investment Awards 2025 will be presented in a total of 30 categories:\",\n categoriesSubItem1: \"15 asset manager categories\",\n categoriesSubItem2: \"15 fund categories\",\n categoriesSubItem3: \"Special category: Fund Innovations\",\n nomineesText:\n \"In 30 categories for equity, bond and mixed funds, the most convincing fund concepts and best asset management performances of the year are honored with the Scope Award.\",\n nomineesInfo:\n \"The nominations will be announced at the beginning of September 2024\",\n winnersText1:\n \"Scope Awards - The best asset managers and funds honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presents the 19th Scope Awards.\",\n winnersInfo: \"The winners will be announced on 21. November 2024.\",\n },\n alternativeInvestment: {\n categoriesText:\n \"Scope Alternative Investment Awards 2025 will be presented in a total of 25 categories:\",\n categoriesSubItem1: \"Institutional Real Estate\",\n categoriesSubItem2: \"Retail Real Estate\",\n categoriesSubItem3: \"Real Estate\",\n categoriesSubItem4: \"ESG\",\n categoriesSubItem5: \"Alternative Investments\",\n categoriesSubItem6: \"ELTIF\",\n categoriesSubItem7: \"Special Award\",\n nomineesText:\n \"In 25 categories for real estate, ESG, alternative investments and ELTIF the best asset management performances of the year are honored with the Scope Award.\",\n nomineesInfo:\n \"The nominations will be announced at the beginning of October 2024.\",\n winnersText1: \"Scope Awards - The best asset managers honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presents the 19th Scope Awards.\",\n winnersInfo: \"The winners will be announced on 21 November 2024.\",\n },\n certificate: {\n categoriesText:\n \"Scope Certificate Awards 2025 will be presented in a total of four categories.\",\n nomineesText:\n \"In four categories for primary market, secondary market, trading and ESG the best certificate issuers of the year are honored with the Scope Award.\",\n nomineesInfo:\n \"The nominations will be announced in the middle of October 2024.\",\n winnersText1: \"Scope Awards - The best certificate issuers honoured\",\n winnersText2:\n \"Together with the media partner Handelsblatt, the rating agency Scope presented the 19th Scope Awards.\",\n winnersInfo: \"The winners will be announced on 21 November 2024.\",\n },\n requirements: {\n text: \"Nomination Requirements and Methodology\",\n },\n },\n },\n scopeAwardsCategories: {\n assetManager: \"Asset Manager\",\n funds: \"Funds\",\n institutionalRealEstate: \"Institutional Real Estate\",\n retailRealEstate: \"Retail Real Estate\",\n realEstate: \"Real Estate\",\n alternativeInvestments: \"Alternative Investments\",\n specialAward: \"Special Award\",\n completeProductRangeIssuer: \"Complete Product Range Issuer\",\n bestAmCompleteProductRanges: \"Complete Product Ranges\",\n bestAmCompleteProductRange: \"Complete Product Range\",\n bestAmBoutiques: \"Boutiques\",\n bestAmBoutique: \"Boutique\",\n bestAmEsgCompleteProductRanges: \"ESG Complete Product Ranges\",\n bestFundEquitiesGermany: \"Equities Germany\",\n bestFundEquitiesNorthAmerica: \"Equities North America\",\n bestFundEquitiesJapan: \"Equities Japan\",\n bestEquitiesEurope: \"Equities Europe\",\n bestFundEquitiesGlobal: \"Equities Global\",\n bestFundEquitiesEmergingMarkets: \"Equities Emerging Markets (Funds)\",\n bestFundBalancedGlobalFlexible: \"Balanced Global Flexible\",\n bestFundBalancedGlobalDynamic: \"Balanced Global Dynamic\",\n bestFundBalancedGlobalConservative: \"Balanced Global Conservative\",\n bestAmEsgBoutiques: \"ESG Boutique\",\n bestAmEquities: \"Equities\",\n bestAmEsgEquities: \"ESG Equities\",\n bestAmThematicFunds: \"Thematic Funds Equity\",\n bestAmExchangeTradeFunds: \"Exchange Traded Funds (ETFs)\",\n bestFundBondsGlobalCurrency: \"Bonds Global Currency\",\n bestFundBondsEmergingMarketsHardCurrency:\n \"Bonds Emerging Markets Hard Currency\",\n bestAmBonds: \"Bonds\",\n bestAmEsgCompleteProductRange: \"ESG Complete Product Range\",\n bestAmEsgBoutique: \"ESG Boutique\",\n bestFundBondsEur: \"Bonds EUR\",\n bestFundInnovations: \"Innovations\",\n innovationsDisclaimer:\n \"There are no nominations in the category, the winner will be awarded on 16.11.2023\",\n bestFundBondsEurCorpHighYield: \"Bonds EUR Corp. High Yield\",\n bestFundBondsUsdCorpHighYield: \"Bonds USD Corp. High Yield\",\n bestFundBondsGlobalCorpHighYield: \"Bond global Corp. High Yield\",\n bestBalancedGlobalBalanced: \"Balanced Global Balanced\",\n bestAmEsgFixedIncome: \"ESG Fixed Income\",\n bestAmMultiStrategy: \"Multi Strategy\",\n bestAmEquitiesEmergingMarkets: \"Equities Emerging Markets (AM)\",\n bestAmMultiAsset: \"Multi Asset\",\n bestAmEmergingMarketsBonds: \"Emerging Markets Bonds\",\n bestAmEmergingMarketsEquities: \"Emerging Markets Equities\",\n bestAmConvertibleBonds: \"Convertible Bonds\",\n bestAmDividendEquities: \"Dividend Equities\",\n bestAmEtf: \"Exchange Traded Funds (ETFs)\",\n bestAmSmallCaps: \"Small Caps\",\n equitiesGermany: \"Equities Germany\",\n equitiesEurope: \"Equities Europe\",\n equitiesNorthAmerica: \"Equities North America\",\n equitiesGlobal: \"Equities Global\",\n equitiesThematicFunds: \"Equities Thematic Funds\",\n esgFunds: \"ESG Funds\",\n esgImpactFunds: \"ESG Impact Funds\",\n equitiesEmergingMarkets: \"Equities Emerging Markets\",\n bondsEUR: \"Bonds EUR\",\n bondsEURCorp: \"Bonds EUR Corp. High Yield\",\n bondsUsCorp: \"Renten US Corp. High Yield\",\n bondsEmergingMarkets: \"Bonds Emerging Markets Hard Currency\",\n bondsGlobalCurrency: \"Bonds Global Currency\",\n balancedGlobalFlexible: \"Balanced Global Flexible\",\n fundInnovations: \"Fund Innovations\",\n institutionalReGlobal: \"Institutional Real Estate Global\",\n institutionalReEurope: \"Institutional Real Estate Europe\",\n institutionalReGermany: \"Institutional Real Estate Germany\",\n institutionalReResidential: \"Institutional Real Estate Residential\",\n institutionalReSpecialist: \"Institutional Real Estate Specialist\",\n retailReGlobal: \"Retail Real Estate Global\",\n realEstateGlobal: \"Real Estate Global\",\n retailReEurope: \"Retail Real Estate Europe\",\n retailReGermany: \"Retail Real Estate Germany\",\n retailReResidential: \"Retail Real Estate Residential\",\n retailReSpecialist: \"Retail Real Estate Specialist\",\n realEstateSpecialist: \"Real Estate Specialist\",\n realEstateLogistics: \"Real Estate Logistics\",\n realEstateEssentialRetail: \"Real Estate Essential Retail\",\n esgInfrastructure: \"ESG Infrastructure\",\n esgRealEstate: \"ESG Real Estate\",\n esgCommercialRealEstate: \"ESG Commercial Real Estate\",\n esgResidentialRealEstate: \"ESG Residential Real Estate\",\n privateDebt: \"Private Debt\",\n privateEquity: \"Private Equity\",\n infrastructureDebt: \"Infrastructure Debt\",\n infrastructureEquity: \"Infrastructure Equity\",\n infrastructureEquityRenewableEnergy: \"Infrastructure Equity - New Energy\",\n transportation: \"Transportation\",\n eltif: \"ELTIF\",\n eltifPrivateMarketsPe: \"ELTIF - Private Markets PE\",\n eltifPrivateMarketsPd: \"ELTIF - Private Markets PD\",\n eltifPrivateMarketsInfrastructure:\n \"ELTIF - Private Markets Infrastructure\",\n eltifPrivateMarketsMixed: \"ELTIF - Private Markets Mixed\",\n eltifPrivateMarketsDiversified: \"ELTIF - Private Markets Diversified\",\n innovation: \"Innovation\",\n innovationRealAssets: \"Innovation – Real Assets\",\n innovationAif: \"Innovation – Alternative Investments\",\n primaryMarket: \"Primary Market\",\n secondaryMarket: \"Secondary Market\",\n trading: \"Trading\",\n esg: \"ESG\",\n specialMentionFundInnovations: \"Special Mention Fund Innovations\",\n rentenUsCorpHighYield: \"Renten US Corp. High Yield\",\n commodity: \"Commodity\",\n balancedGlobalConservative: \"Balanced Global Conservative\",\n },\n scopeAwardsNominees: {\n degussaBank: \"Degussa Bank for Nachhaltigkeitfonds Akzentuiert\",\n hanetfFundSpectrum: \"HANetf for entire fund spectrum\",\n unionInvestment: \"Union Investment for KinderZukunftsFonds\",\n },\n nominationAltInvestmentRequirements: {\n title: \"Nomination Requirements\",\n subtitle: \"Alternative Investments\",\n section1Title: \"Participation criteria and selection process\",\n section1Text1:\n \"The best asset managers of retail and institutional investments in the alternative investments sector will be nominated and awarded\",\n section1Text2:\n \"Participation in the award is free of charge for the universe of alternative investments providers with European approval, either by invitation from Scope Fund Analysis GmbH or via their own application.\",\n section2Title: \"Your application\",\n section2Text1:\n \"The application process starts in the middle of July 2024.\",\n section3Title: \"The assessment criteria are as follows:\",\n investmentManagement: \"Investment Management\",\n operationalAssetManagement: \"Operational Asset Management\",\n trackRecord: \"Track Record\",\n esg: \"ESG\",\n innovation: \"Innovation\",\n transparency: \"Transparency\",\n section3Text1:\n \"The above evaluation criteria are subdivided into numerous sub-criteria, which are classified in a scorecard by the analysts of Scope Fund Analysis.\",\n section3Text2:\n \"The information is based on the answers to the questionnaires and other information provided by the asset manager as well as publicly available information.\",\n section3Text3: \"The application documents are available on request at:\",\n email: \"alternative-investment-awards@scopeanalysis.com.\",\n section3ButtonText: \"Download of Methodology 2025\",\n file: \"/Methodik_Scope_Alternative Investment_Award 2025_EN.pdf\",\n },\n nominationInvestmentRequirements: {\n title: \"Nomination Requirements & Methodology\",\n subtitle: \"Investment Fonds\",\n section1Title: \"Participation criteria and selection process\",\n section1Text1:\n \"The best equity, bonds and mixed funds are nominated and awarded in 14 categories plus the category “Fund Innovations” as well as asset managers in 15 categories.\",\n section1Text2:\n \"Participation in the award is free of charge for the providers in the respective fund universe (Germany, Austria and Switzerland), taking into account the funds approved for public sale.\",\n section1Text3: \"Download of Methodology 2025\",\n section2Title: \"The assessment criteria are among others:\",\n section2List1: \"Fund Management\",\n section2List2: \"Management Environment\",\n section2List3: \"Development of Investment Process\",\n section2List4: \"Implementation of Investment Process\",\n section2List5: \"Scope Fund Rating\",\n section2Text1:\n \"The above evaluation criteria are subdivided into numerous sup-criteria, which are classified in a scorecard by the analysts of Scope Fund Analysis.\",\n section2Text2:\n \"The assessment is based on the answers to the questionnaires and other information provided by the asset manager as well as publicly available information.\",\n section2Text3: \"For enquiries please contact:\",\n email: \"investment-awards@scopeanalysis.com.\",\n file: \"/Methodology Scope Investment Awards 2025.pdf\",\n },\n nominationCertificateRequirements: {\n title: \"Nomination Requirements\",\n subtitle: \"Certificate Fonds\",\n section1Title: \"Participation criteria and selection process\",\n section2Title: \"Best supplier Primary Market / Secondary Market\",\n section2Text1:\n \"The best issuers of the last twelve months are nominated and awarded in the categories primary market issuer and secondary market issuer.\",\n section2Text2:\n \"The nominations criteria are composed of the following elements:\",\n section2List1: \"Market positioning\",\n section2List2: \"Innovation\",\n section2List3: \"Product offers\",\n section2List4: \"Digitalisation strategy\",\n section2List5: \"Unique selling points\",\n section2List6: \"Customer service\",\n section2Text3:\n \"The above evaluation criteria are subdivided into sup-criteria, which are clasified in a scorecard by the analysts of Scope Fund Analysis.\",\n section3Title: \"Best Issuer Trading\",\n section3Text1:\n \"Scope nominates and awards issuers with the best pricing and the best range of services for leverage products and discount certificates with the Trading Award. Scope's nomination is based on a quantitative evaluation of the issuers' pricing in September 2024 and on other factors such as product range, market share and customer service.\",\n section4Title: \"Best Issuer ESG\",\n section4Text1:\n \"With the ESG Award Scope nominates and awards issuers that have performed best from an ESG perspective in the past year. The basis for Scope's nomination is, on the one hand, how sustainable the issuer is as a product provider. On the other hand, the decision is based on other factors such as the expansion of the product range to include sustainable products as well as the provision of information under sustainable aspects.\",\n section5Title: \"Participation Criteria\",\n section5Text1:\n \"Participation in the Award is free of charge for the universe of those registered in the “Bundesverband für strukturierte Wertpapiere (BSW)” on the address of Scope Fund Analysis GmbH.\",\n section5Text2: \"For enquiries please contact:\",\n email: \"zertifikate-awards@scopeanalysis.com\",\n },\n portrait: {\n subtitle:\n \"Scope Fund Analysis ist Teil der Scope Gruppe und bewertet Investmentfonds, Asset Manager und Zertifikate-Anbieter. Die aktuell mehr als 10.000 analysierten Anlageprodukte verwalten ein Vermögen von rund 5,3 Billionen Euro. Der überwiegende Teil der Bewertungen ist auf dem ScopeExplorer frei zugänglich.\",\n subtitle2:\n \" Das Unternehmen hat mehr als 20 Jahre Erfahrung mit der Beurteilung von Investments und Asset Managern. Die mehr als 25 Analystinnen und Analysten verteilen sich auf die Standorte Frankfurt am Main und Berlin.\",\n section1Title: \"Die Analyse-Aktivitäten gruppieren sich in zwei Bereiche\",\n section2Title: \"Das Fonds Rating von Scope – zum Hintergrund\",\n section2Text1:\n \"Das Fonds Rating von Scope Fund Analysis ist ein objektives Gütesiegel, das Investoren bei der Einschätzung der Qualität eines Fonds unterstützt. Die meisten Fonds werden quantitativ beurteilt auf Grundlage ihrer bisher gezeigten Leistungen. Bei ausgewählten Fonds erfolgt zusätzlich eine qualitative Bewertung.\",\n section2Text2:\n \"Das Scope Fonds Rating hat einen prognostischen Charakter und trifft eine in die Zukunft gerichtete Aussage über die Qualität eines Produkts. Grundlage des Ratings ist ein mehrdimensionales Bewertungsmodell, das sowohl Performance- als auch Risiko-Aspekte reflektiert. Darüber hinaus können weitere Aspekte wie ESG oder die Qualität des Fondsmanagements in die Bewertung einfließen.\",\n methodologies: \"Methodologies\",\n },\n subscriptionRating: {\n text1:\n \"Ausführliche Informationen inklusive Ratingnoten und Ratingreport stehen angemeldeten Nutzern zur Verfügung. Bitte loggen Sie sich mit Ihren Nutzerdaten ein oder registrieren sich jetzt kostenfrei.\",\n },\n },\n});\n","import { StateValue } from \"../types\";\n\nexport const API_URL = \"/api/v1\";\n\nexport const getReqOptions = () => ({\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n withCredentials: true,\n});\n\nexport const chartsUrls = {\n performanceChart: \"detail_performance_chart\",\n peergroupComparisonChart: \"detail_peergroup_comparison_chart\",\n crashDrawdownChart: \"crash_drawdown_index_performance_chart\",\n riskReturnChart: \"detail_risk_return_chart\",\n fundRatingChart: \"detail_fund_rating_chart\",\n classDistributionChart: \"detail_class_distribution_chart\",\n distributionChart: \"detail_distribution_chart\",\n evolutionOfRiskChart: \"detail_evolution_of_risk_chart\",\n comparisonChart: \"comparison_chart\",\n};\n\nexport const getStatisticsHeader = (state: StateValue) => ({\n \"Statistics-Fund-Details-Source\": state.value.domain.route.fundEntranceSrc,\n});\n","import { DetailsViewBreadcrumbs } from \"../components/common/appBreadcrumbs\";\nimport React from \"react\";\nimport { lang } from \"../lang/lang\";\n\nexport default {\n HOME: {\n route: () => lang.routes.home,\n reg: /^\\/?(en(\\/)?)?($|\\/$)/,\n breadcrumb: () => \"\",\n },\n CONFIRM: {\n route: () => lang.routes.confirm,\n reg: /^\\/?(en\\/)?confirm($|\\/)/,\n breadcrumb: () => \"\",\n },\n RESET: {\n route: () => lang.routes.reset,\n reg: /^\\/?(en\\/)?reset($|\\/)/,\n breadcrumb: () => \"\",\n },\n UNSUBSCRIBE: {\n route: () => lang.routes.unsubscribe,\n reg: /^\\/?(en\\/)?unsubscribe($|\\/)/,\n breadcrumb: () => lang.unsubscribe.title,\n },\n FUNDS_IN_FOCUS: {\n route: () => lang.routes.fundsInFocus,\n reg: /^\\/?(en\\/)?funds-in-focus($|\\/)/,\n breadcrumb: () => lang.menu.fundsInFocus,\n },\n RATING_IN_FOCUS: {\n route: () => lang.routes.ratingInFocus,\n reg: /^\\/?(en\\/)?rating-in-focus$/,\n breadcrumb: () => lang.menu.ratingInFocus,\n },\n WATCHLIST: {\n route: () => lang.routes.watchlist,\n reg: /^\\/?(en\\/)?watchlist($|\\/)/,\n breadcrumb: () => lang.menu.watchlist,\n },\n NEWS: {\n route: () => lang.routes.news,\n reg: /^\\/?(en\\/)?news($|\\/$)/,\n breadcrumb: () => lang.menu.news,\n },\n NEWS_DETAILS: {\n route: () => lang.routes.newsDetails,\n reg: /^\\/?(en\\/)?news(\\/[\\d-\\w_]+)?\\/[\\d-\\w_]+/,\n breadcrumb: () => ,\n },\n NEWS_DETAILS_SHORT: {\n route: () => lang.routes.newsDetails,\n reg: /^\\/ ?(en\\/)?news\\/\\d+/,\n breadcrumb: () => ,\n },\n REPORTS: {\n route: () => lang.routes.reports,\n reg: /^\\/?(en\\/)?reports($|\\/$)/,\n breadcrumb: () => lang.menu.reports,\n },\n REPORTS_DETAILS: {\n route: () => lang.routes.reportsDetails,\n reg: /^\\/?(en\\/)?reports(\\/[\\d-\\w]+)?\\/\\d+/,\n breadcrumb: () => ,\n },\n REPORTS_DETAILS_SHORT: {\n route: () => lang.routes.reportsDetails,\n reg: /^\\/?(en\\/)?reports\\/\\d+/,\n breadcrumb: () => ,\n },\n OIF: {\n route: () => lang.routes.oif,\n reg: /^\\/?(en\\/)?oif($|\\/$)/,\n breadcrumb: () => lang.menu.oif,\n },\n OIF_DETAILS: {\n route: () => lang.routes.oifDetails,\n reg: /^\\/?(en\\/)?oif(\\/[\\d-\\w]+)?\\/\\d+/,\n breadcrumb: () => ,\n },\n OIF_DETAILS_SHORT: {\n route: () => lang.routes.oifDetails,\n reg: /^\\/ ?(en\\/)?oif\\/\\d+/,\n breadcrumb: () => ,\n },\n SEARCH_RESULTS: {\n route: () => lang.routes.searchResults,\n reg: /^\\/?(en\\/)?search-results($|\\/)/,\n breadcrumb: () => lang.menu.searchResults,\n },\n FILTER_SEARCH_RESULTS: {\n route: () => lang.routes.filterSearchResults,\n reg: /^\\/?(en\\/)?filter-search-results($|\\/)/,\n breadcrumb: () => lang.menu.searchResults,\n },\n ADV_SEARCH_RESULTS: {\n route: () => lang.routes.advSearchResults,\n reg: /^\\/?(en\\/)?advanced-search-results($|\\/)/,\n breadcrumb: () => lang.menu.searchResults,\n },\n DETAILS: {\n route: () => lang.routes.details,\n reg: /^\\/?(en\\/)?details(\\/[\\d-\\w]+)\\/[\\d-\\w]+/,\n breadcrumb: () => ,\n },\n PREMIUM: {\n route: () => lang.routes.premium,\n reg: /^\\/?(en\\/)?premium($|\\/)/,\n breadcrumb: () => lang.menu.premium,\n },\n METHODOLOGY: {\n route: () => lang.routes.methodology,\n reg: /^\\/?(en\\/)?methodology($|\\/)/,\n breadcrumb: () => lang.menu.methodology,\n },\n METHODOLOGIES: {\n route: () => lang.routes.methodologies,\n reg: /^\\/?(en\\/)?methodologies($|\\/)/,\n breadcrumb: () => lang.menu.methodologies,\n },\n LEGAL_NOTICE: {\n route: () => lang.routes.legalNotice,\n reg: /^\\/?(en\\/)?legal-notice($|\\/)/,\n breadcrumb: () => lang.legalNotice.title,\n },\n PRIVACY_POLICY: {\n route: () => lang.routes.privacyPolicy,\n reg: /^\\/?(en\\/)?privacy-policy($|\\/)/,\n breadcrumb: () => lang.privacyPolicy.title,\n },\n CONTACT: {\n route: () => lang.routes.contact,\n reg: /^\\/?(en\\/)?contact($|\\/)/,\n breadcrumb: () => lang.contact.contact,\n },\n SAVED_SEARCHES: {\n route: () => lang.routes.savedSearches,\n reg: /^\\/?(en\\/)?saved-searches($|\\/)/,\n breadcrumb: () => lang.menu.savedSearches,\n },\n RECHTLICHE_HINWEISE: {\n route: () => lang.routes.rechtlicheHinweise,\n reg: /^\\/?(en\\/)?rechtliche-hinweise($|\\/)/,\n breadcrumb: () => lang.rechtlicheHinweise.title,\n },\n TERMS_OF_USE: {\n route: () => lang.routes.termsOfUse,\n reg: /^\\/?(en\\/)?terms-of-use($|\\/)/,\n breadcrumb: () => lang.termsOfUse.title,\n },\n TERMS_AND_CONDITIONS: {\n route: () => lang.routes.termsAndConditions,\n reg: /^\\/?(en\\/)?terms-and-conditions($|\\/)/,\n breadcrumb: () => lang.termsAndConditions.title,\n },\n NOT_FOUND: {\n reg: /^\\/?(en\\/)?404\\.html($|\\/)/,\n breadcrumb: () => \"\",\n },\n CONFERENCES_LIST_LOADING: {\n route: () => lang.routes.conferencesListLoading,\n reg: /^\\/?(en\\/)?conferences-loading($|\\/$)/,\n breadcrumb: () => lang.assetManagers.conferences2,\n },\n CONFERENCES_LIST: {\n route: () => lang.routes.conferencesList,\n reg: /^\\/?(en\\/)?conferences($|\\/$)/,\n breadcrumb: () => lang.assetManagers.conferences2,\n },\n CONFERENCES_LIST_2: {\n route: () => lang.routes.conferencesList2,\n reg: /^\\/?(en\\/)?conferences_list($|\\/$)/,\n breadcrumb: () => lang.assetManagers.conferences2,\n },\n CONFERENCE_DETAILS: {\n route: () => lang.routes.conferenceDetails,\n reg: /^\\/?(en\\/)?conferences\\/[\\d-\\w]+($|\\/)/,\n breadcrumb: () => ,\n },\n ASSET_MANAGER_DASHBOARD: {\n route: () => lang.routes.assetManagerDashboard,\n reg: /^\\/?(en\\/)?asset-manager-dashboard\\/[\\d-\\w]+($|\\/)/,\n breadcrumb: () => lang.menu.assetManagers,\n },\n FUND_RATINGS: {\n route: () => lang.routes.fundRatings,\n reg: /^\\/?(en\\/)?asset-manager-dashboard\\/[\\d-\\w]+\\/fund-ratings($|\\/)/,\n breadcrumb: () => lang.fundRatings.title,\n },\n TEAM_RATING: {\n route: () => lang.routes.teamRating,\n reg: /^\\/?(en\\/)?asset-manager-dashboard\\/[\\d-\\w]+\\/team-rating($|\\/)/,\n breadcrumb: () => lang.teamRating.title,\n },\n PROFILE_EDIT: {\n route: () => lang.routes.profileEdit,\n reg: /^\\/?(en\\/)?asset-manager-dashboard\\/[\\d-\\w]+\\/profile($|\\/)/,\n breadcrumb: () => lang.assetManagers.title,\n },\n ASSET_MANAGER_STATS: {\n route: () => lang.routes.assetManagerStats,\n reg: /^\\/?(en\\/)?asset-manager-dashboard\\/[\\d-\\w]+\\/stats($|\\/)/,\n breadcrumb: () => lang.assetManagers.statistics,\n },\n ASSET_MANAGER_CONFERENCES: {\n route: () => lang.routes.assetManagerConferences,\n reg: /^\\/?(en\\/)?asset-manager-dashboard\\/[\\d-\\w]+\\/conferences($|\\/)/,\n breadcrumb: () => lang.assetManagers.conferences,\n },\n SELECT_SURVEY: {\n route: () => lang.routes.selectSurvey,\n reg: /^\\/?(en\\/)?select-survey($|\\/)/,\n breadcrumb: () => lang.menu.wholesale,\n },\n SURVEY_ESG_COMPANY: {\n route: () => lang.routes.surveyEsgCompany,\n reg: /^\\/?(en\\/)?survey\\/company($|\\/$)/,\n breadcrumb: () => lang.menu.wholesale,\n },\n SURVEY_ESG_FUND: {\n route: () => lang.routes.surveyEsgFund,\n reg: /^\\/?(en\\/)?survey\\/fund($|\\/$)/,\n breadcrumb: () => lang.menu.wholesale,\n },\n SURVEY_EQUITY_FUND: {\n route: () => lang.routes.surveyEquityFund,\n reg: /^\\/?(en\\/)?survey\\/equity-fund($|\\/$)/,\n breadcrumb: () => lang.menu.wholesale,\n },\n SURVEY_SOVEREIGN_BOND_FUND: {\n route: () => lang.routes.surveySovereignBondFund,\n reg: /^\\/?(en\\/)?survey\\/sovereign-bond-fund($|\\/$)/,\n breadcrumb: () => lang.menu.wholesale,\n },\n SURVEY_CORPORATE_BOND_FUND: {\n route: () => lang.routes.surveyCorporateBondFund,\n reg: /^\\/?(en\\/)?survey\\/corporate-bond-fund($|\\/$)/,\n breadcrumb: () => lang.menu.wholesale,\n },\n SURVEY_AGGREGATE_BOND_FUND: {\n route: () => lang.routes.surveyAggregateBondFund,\n reg: /^\\/?(en\\/)?survey\\/aggregate-bond-fund($|\\/$)/,\n breadcrumb: () => lang.menu.wholesale,\n },\n SURVEY_MULTI_ASSET_FUND: {\n route: () => lang.routes.surveyMultiAssetFund,\n reg: /^\\/?(en\\/)?survey\\/multi-asset-fund($|\\/$)/,\n breadcrumb: () => lang.menu.wholesale,\n },\n DEKA_SURVEY: {\n route: () => lang.routes.dekaSurvey,\n reg: /^\\/?(en\\/)?deka-survey($|\\/$)/,\n breadcrumb: () => lang.menu.wholesale,\n },\n ASSET_MANAGER_DETAILS: {\n route: () => lang.routes.assetManagerDetails,\n reg: /^\\/?(en\\/)?asset-managers\\/[\\d-\\w]+($|\\/)/,\n breadcrumb: () => lang.assetManagers.title,\n },\n ASSET_MANAGERS: {\n route: () => lang.routes.assetManagers,\n reg: /^\\/?(en\\/)?asset-managers($|\\/)/,\n breadcrumb: () => lang.assetManagers.listTitle,\n },\n ASSET_MANAGER_NEWS: {\n route: () => lang.routes.assetManagerNews,\n reg: /^\\/?(en\\/)?asset-manager-news(\\/[\\d-\\w]+)\\/[\\d-\\w]+/,\n breadcrumb: () => ,\n },\n EDIT_FUND: {\n route: () => lang.routes.editFund,\n reg: /^\\/?(en\\/)?edit-fund\\/[\\d-\\w]+/,\n breadcrumb: () => lang.assetManagers.title,\n },\n USER_PROFILE: {\n route: () => lang.routes.userProfile,\n reg: /^\\/?(en\\/)?profile($|\\/)/,\n breadcrumb: () => \"Profile\",\n },\n BENCHMARKS: {\n route: () => lang.routes.benchmarks,\n reg: /^\\/?(en\\/)?benchmarks\\/[\\d-\\w]+/,\n breadcrumb: () => \"Benchmarks\",\n },\n AIF_PAGE: {\n route: () => lang.routes.aifPage,\n reg: /^\\/?(en\\/)?aif-page($|\\/)/,\n breadcrumb: () => \"AIF page\",\n },\n WHOLESALE_LANDING_PAGE: {\n route: () => lang.routes.wholesale,\n reg: /^\\/?(en\\/)?professional-investors($|\\/)/,\n breadcrumb: () => lang.menu.wholesale,\n },\n SCOPE_AWARDS: {\n route: () => lang.routes.scopeAwards,\n reg: /^\\/?(en\\/)?scope-awards\\/[0-9]{4}($|\\/$)/,\n breadcrumb: () => lang.menu.scopeAwards,\n },\n SCOPE_INVESTMENT_AWARDS: {\n route: () => lang.routes.scopeInvestmentAwards,\n reg: /^\\/?(en\\/)?scope-awards\\/[0-9]{4}\\/investment($|\\/$)/,\n breadcrumb: () => lang.scopeAwards.investmentAwards,\n },\n SCOPE_ALTERNATIVE_INVESTMENT_AWARDS: {\n route: () => lang.routes.scopeAlternativeInvestmentAwards,\n reg: /^\\/?(en\\/)?scope-awards\\/[0-9]{4}\\/alternative-investment($|\\/$)/,\n breadcrumb: () => lang.scopeAwards.alternativeInvestmentAwards,\n },\n SCOPE_CERTIFICATE_AWARDS: {\n route: () => lang.routes.scopeCertificateAwards,\n reg: /^\\/?(en\\/)?scope-awards\\/[0-9]{4}\\/certificate($|\\/$)/,\n breadcrumb: () => lang.scopeAwards.certificateAwards,\n },\n SCOPE_AWARDS_CATEGORIES: {\n route: () => lang.routes.scopeAwardsCategories,\n reg: /^\\/?(en\\/)?scope-awards\\/[0-9]{4}\\/[\\d-\\w]+\\/categories($|\\/$)/,\n breadcrumb: () => lang.menu.scopeAwardsCategories,\n },\n SCOPE_AWARDS_NOMINEES: {\n route: () => lang.routes.scopeAwardsNominees,\n reg: /^\\/?(en\\/)?scope-awards\\/[0-9]{4}\\/nominees($|\\/$)/,\n breadcrumb: () => lang.menu.scopeAwardsNominees,\n },\n SCOPE_AWARDS_WINNERS: {\n route: () => lang.routes.scopeAwardsWinners,\n reg: /^\\/?(en\\/)?scope-awards\\/[0-9]{4}\\/winners($|\\/$)/,\n breadcrumb: () => lang.menu.scopeAwardsWinners,\n },\n NOMINATION_REQUIREMENTS: {\n route: () => lang.routes.nominationAltInvestmentRequirements,\n reg: /^\\/?(en\\/)?nomination-alternative-investment-requirements($|\\/$)/,\n breadcrumb: () => lang.menu.nominationAltInvestmentRequirements,\n },\n NOMINATION_INVESTMENT_REQUIREMENTS: {\n route: () => lang.routes.nominationInvestmentRequirements,\n reg: /^\\/?(en\\/)?nomination-investment-requirements($|\\/$)/,\n breadcrumb: () => lang.menu.nominationInvestmentRequirements,\n },\n NOMINATION_CERTIFICATE_REQUIREMENTS: {\n route: () => lang.routes.nominationCertificateRequirements,\n reg: /^\\/?(en\\/)?nomination-certificate-requirements($|\\/$)/,\n breadcrumb: () => lang.menu.nominationCertificateRequirements,\n },\n PORTRAIT: {\n route: () => lang.routes.portrait,\n reg: /^\\/?(en\\/)?scope-fund-analysis($|\\/$)/,\n breadcrumb: () => lang.menu.portrait,\n },\n};\n","import { lang } from \"../../lang/lang\";\nimport { colors } from \"../../utils/styles\";\n\nconst ADD_TOAST = \"ADD_TOAST\";\nconst REMOVE_TOAST = \"REMOVE_TOAST\";\nconst CLEAR_TOASTS = \"CLEAR_TOASTS\";\n\nlet id = 0;\n\nconst defaultOptions = {\n color: colors.white\n};\n\nconst createToast = options => ({\n ...defaultOptions,\n ...options,\n id: id++\n});\n\nconst createInfoToast = text => ({\n color: colors.blue,\n id: id++,\n text\n});\n\nconst createErrorToast = text => ({\n color: colors.red2,\n id: id++,\n text\n});\n\nconst createSuccessToast = text => ({\n color: colors.green2,\n id: id++,\n text\n});\n\nexport const addToast = (options = {}) => ({\n type: ADD_TOAST,\n payload: {\n toast: createToast(options)\n }\n});\n\nexport const addInfoToast = text => ({\n type: ADD_TOAST,\n payload: {\n toast: createInfoToast(text)\n }\n});\n\nexport const addErrorToast = error => ({\n type: ADD_TOAST,\n payload: {\n toast: createErrorToast(error)\n }\n});\n\nexport const addSuccessToast = text => ({\n type: ADD_TOAST,\n payload: {\n toast: createSuccessToast(text)\n }\n});\n\nexport const removeToast = id => ({\n type: REMOVE_TOAST,\n payload: {\n id\n }\n});\n\nexport const clearToasts = () => ({\n type: CLEAR_TOASTS\n});\n\nexport default (state = [], { type, payload }) => {\n switch (type) {\n case ADD_TOAST:\n return [payload.toast, ...state];\n case REMOVE_TOAST:\n return state.filter(toast => toast.id !== payload.id);\n case CLEAR_TOASTS:\n return [];\n case \"CONFIRM_USER_REJECTED\":\n return [createErrorToast(lang.confirm.error), ...state];\n case \"CONFIRM_USER_SUCCESSFUL\":\n return [createSuccessToast(lang.confirm.success), ...state];\n default:\n return state;\n }\n};\n","import { FundsListAction, FundsListState } from \"./types\";\n\nimport { FundDocument } from \"../domain/types\";\n\nconst SET_FUNDS_LOADING = \"SET_FUNDS_LOADING\";\nconst SET_FUNDS_LIST_ACTIVE_TAB = \"SET_FUNDS_LIST_ACTIVE_TAB\";\nconst SET_ADVANCED_FUNDS_LIST = \"SET_ADVANCED_FUNDS_LIST\";\nconst SET_FILTER_FUNDS_LIST = \"SET_FILTER_FUNDS_LIST\";\nconst SET_PERF_PERIOD = \"SET_PERF_PERIOD\";\nconst SET_FILTER_SEARCH_PERF_PERIOD = \"SET_FILTER_SEARCH_PERF_PERIOD\";\nconst SET_SELECTED_FUND_PERF_PERIOD = \"SET_SELECTED_FUND_PERF_PERIOD\";\nconst SET_DOCUMENTS_VISIBILITY = \"SET_DOCUMENTS_VISIBILITY\";\nconst SET_DOCUMENTS = \"SET_DOCUMENTS\";\nconst SET_AIF_DOCUMENT = \"SET_AIF_DOCUMENT\";\nconst SET_RATING_HISTORY_VISIBILITY = \"SET_RATING_HISTORY_VISIBILITY\";\nconst SET_PERFORMANCE_VISIBILITY = \"SET_PERFORMANCE_VISIBILITY\";\nconst SET_SELECTED_FUND_LAST = \"SET_SELECTED_FUND_LAST\";\nconst SET_FUNDS_LIST_MODAL_VISIBILITY = \"SET_FUNDS_LIST_MODAL_VISIBILITY\";\nconst SET_EXPORT_DROPDOWN_VISIBILITY = \"SET_EXPORT_DROPDOWN_VISIBILITY\";\nconst SET_EXPORT_LOADING = \"SET_EXPORT_LOADING\";\nconst SET_EXPORT_LINK = \"SET_EXPORT_LINK\";\n\nexport const setFundsLoading = (value: boolean): FundsListAction => ({\n type: SET_FUNDS_LOADING,\n payload: { value }\n});\n\nexport const setFundsListActiveTab = (value: number): FundsListAction => ({\n type: SET_FUNDS_LIST_ACTIVE_TAB,\n payload: { value }\n});\n\nexport const setAdvancedFundsList = (value: boolean): FundsListAction => ({\n type: SET_ADVANCED_FUNDS_LIST,\n payload: { value }\n});\n\nexport const setFilterFundsList = (value: boolean): FundsListAction => ({\n type: SET_FILTER_FUNDS_LIST,\n payload: { value }\n});\n\nexport const setPerfPeriod = (value: number): FundsListAction => ({\n type: SET_PERF_PERIOD,\n payload: { value }\n});\n\nexport const setFilterSearchPerfPeriod = (value: number): FundsListAction => ({\n type: SET_FILTER_SEARCH_PERF_PERIOD,\n payload: { value }\n});\n\nexport const setSelectedFundPerfPeriod = (value: number): FundsListAction => ({\n type: SET_SELECTED_FUND_PERF_PERIOD,\n payload: { value }\n});\n\nexport const setDocumentsVisibility = (value: boolean): FundsListAction => ({\n type: SET_DOCUMENTS_VISIBILITY,\n payload: { value }\n});\n\nexport const setDocuments = (documents: FundDocument[]): FundsListAction => ({\n type: SET_DOCUMENTS,\n payload: { documents }\n});\n\nexport const setAifDocument = (document: FundDocument): FundsListAction => ({\n type: SET_AIF_DOCUMENT,\n payload: { document }\n});\n\nexport const setRatingHistoryVisibility = (\n value: boolean\n): FundsListAction => ({\n type: SET_RATING_HISTORY_VISIBILITY,\n payload: { value }\n});\n\nexport const setPerformanceVisibility = (value: boolean): FundsListAction => ({\n type: SET_PERFORMANCE_VISIBILITY,\n payload: { value }\n});\n\nexport const setSelectedFundLast = (value: boolean): FundsListAction => ({\n type: SET_SELECTED_FUND_LAST,\n payload: { value }\n});\n\nexport const setFUndsListModalVisibility = (\n value: boolean\n): FundsListAction => ({\n type: SET_FUNDS_LIST_MODAL_VISIBILITY,\n payload: { value }\n});\n\nexport const setExportDropdownVisibility = (\n value: boolean\n): FundsListAction => ({\n type: SET_EXPORT_DROPDOWN_VISIBILITY,\n payload: { value }\n});\n\nexport const setExportLoading = (value: boolean): FundsListAction => ({\n type: SET_EXPORT_LOADING,\n payload: { value }\n});\n\nexport const setExportLink = (value: string | null): FundsListAction => ({\n type: SET_EXPORT_LINK,\n payload: { value }\n});\n\nexport default (\n state: FundsListState = {\n isLoading: false,\n isAdvancedFundsList: false,\n isFilterFundsList: false,\n fundsListActiveTab: 0,\n perfPeriod: 3,\n filterSearchPerfPeriod: 5,\n selectedFundPerfPeriod: 3,\n isDocumentsVisible: false,\n documents: [],\n aifDocument: null,\n isRatingHistoryVisible: false,\n isPerformanceVisible: false,\n isSelectedFundLast: false,\n isFundsListModalVisible: true,\n isExportDropdownVisible: false,\n isExportLoading: false,\n exportLink: null\n },\n { type, payload }: FundsListAction\n) => {\n switch (type) {\n case SET_FUNDS_LOADING:\n return {\n ...state,\n isLoading: payload.value\n };\n case SET_FUNDS_LIST_ACTIVE_TAB:\n return {\n ...state,\n fundsListActiveTab: payload.value\n };\n case SET_ADVANCED_FUNDS_LIST:\n return {\n ...state,\n isAdvancedFundsList: payload.value,\n isFilterFundsList:\n payload.value === true ? false : state.isFilterFundsList\n };\n case SET_FILTER_FUNDS_LIST:\n return {\n ...state,\n isFilterFundsList: payload.value,\n isAdvancedFundsList:\n payload.value === true ? false : state.isAdvancedFundsList\n };\n case SET_PERF_PERIOD:\n return {\n ...state,\n perfPeriod: payload.value\n };\n case SET_FILTER_SEARCH_PERF_PERIOD:\n return {\n ...state,\n filterSearchPerfPeriod: payload.value\n };\n case SET_SELECTED_FUND_PERF_PERIOD:\n return {\n ...state,\n selectedFundPerfPeriod: payload.value\n };\n case SET_DOCUMENTS_VISIBILITY:\n return {\n ...state,\n isDocumentsVisible: payload.value\n };\n case SET_DOCUMENTS:\n return {\n ...state,\n documents: payload.documents\n };\n case SET_AIF_DOCUMENT:\n return {\n ...state,\n aifDocument: payload.document\n };\n case SET_RATING_HISTORY_VISIBILITY:\n return {\n ...state,\n isRatingHistoryVisible: payload.value\n };\n case SET_PERFORMANCE_VISIBILITY:\n return {\n ...state,\n isPerformanceVisible: payload.value\n };\n case SET_SELECTED_FUND_LAST:\n return {\n ...state,\n isSelectedFundLast: payload.value\n };\n case SET_FUNDS_LIST_MODAL_VISIBILITY:\n return {\n ...state,\n isFundsListModalVisible: payload.value\n };\n case SET_EXPORT_DROPDOWN_VISIBILITY:\n return {\n ...state,\n isExportDropdownVisible: payload.value\n };\n case SET_EXPORT_LOADING:\n return {\n ...state,\n isExportLoading: payload.value\n };\n case SET_EXPORT_LINK:\n return {\n ...state,\n exportLink: payload.value\n };\n default:\n return state;\n }\n};\n","import { SearchAction, SearchState } from \"./types\";\n\nconst SET_AUTOCOMPLETE_VISIBILITY = \"SET_AUTOCOMPLETE_VISIBILITY\";\nconst SET_AUTOCOMPLETE_VALUE = \"SET_AUTOCOMPLETE_VALUE\";\nconst SET_SEARCH_LOADING = \"SET_SEARCH_LOADING\";\nconst SET_ADVANCED_SEARCH = \"SET_ADVANCED_SEARCH\";\nconst SET_FILTER_SEARCH = \"SET_FILTER_SEARCH\";\nconst SET_RESETTING = \"SET_RESETTING\";\nconst SET_FILTER_SEARCH_TAB = \"SET_FILTER_SEARCH_TAB\";\nconst SET_FILTER_SEARCH_COUNT_LOADING = \"SET_FILTER_SEARCH_COUNT_LOADING\";\nconst SET_FILTERS_LOADING = \"SET_FILTERS_LOADING\";\nconst SET_NEXT_SEARCH = \"SET_NEXT_SEARCH\";\n\nexport const setAutocompleteValue = (value: string): SearchAction => ({\n type: SET_AUTOCOMPLETE_VALUE,\n payload: { value },\n});\n\nexport const setAutocompleteVisibility = (value: boolean): SearchAction => ({\n type: SET_AUTOCOMPLETE_VISIBILITY,\n payload: { value },\n});\n\nexport const setSearchLoading = (value: boolean): SearchAction => ({\n type: SET_SEARCH_LOADING,\n payload: { value },\n});\n\nexport const setAdvancedSearch = (value: boolean): SearchAction => ({\n type: SET_ADVANCED_SEARCH,\n payload: { value },\n});\n\nexport const setFilterSearch = (value: boolean): SearchAction => ({\n type: SET_FILTER_SEARCH,\n payload: { value },\n});\n\nexport const setResetting = (value: boolean): SearchAction => ({\n type: SET_RESETTING,\n payload: { value },\n});\n\nexport const setFilterSearchTab = (value: number): SearchAction => ({\n type: SET_FILTER_SEARCH_TAB,\n payload: { value },\n});\n\nexport const setFilterSearchCountLoading = (value: boolean): SearchAction => ({\n type: SET_FILTER_SEARCH_COUNT_LOADING,\n payload: { value },\n});\n\nexport const setFiltersLoading = (value: boolean): SearchAction => ({\n type: SET_FILTERS_LOADING,\n payload: { value },\n});\n\nexport const setNextSearch = (value: string): SearchAction => ({\n type: SET_NEXT_SEARCH,\n payload: { value: value?.replace(\"http://api/api/v1\", \"\") || null },\n});\n\nexport default (\n state: SearchState = {\n autocompleteValue: \"\",\n isAutocompleteVisible: false,\n isLoading: false,\n isAdvancedSearch: false,\n isFilterSearch: false,\n isResetting: false,\n filterSearchTab: 0,\n isFilterSearchCountLoading: false,\n isFiltersLoading: true,\n nextSearch: null,\n },\n { type, payload }: SearchAction\n) => {\n switch (type) {\n case SET_AUTOCOMPLETE_VALUE:\n return {\n ...state,\n autocompleteValue: payload.value,\n };\n case SET_AUTOCOMPLETE_VISIBILITY:\n return {\n ...state,\n isAutocompleteVisible: payload.value,\n };\n case SET_SEARCH_LOADING:\n return {\n ...state,\n isLoading: payload.value,\n };\n case SET_ADVANCED_SEARCH:\n return {\n ...state,\n isAdvancedSearch: payload.value,\n };\n case SET_FILTER_SEARCH:\n return {\n ...state,\n isFilterSearch: payload.value,\n };\n case SET_RESETTING:\n return {\n ...state,\n isResetting: payload.value,\n };\n case \"LOGOUT\":\n return {\n ...state,\n isAdvancedSearch: false,\n };\n case SET_FILTER_SEARCH_TAB:\n return {\n ...state,\n filterSearchTab: payload.value,\n };\n case SET_FILTER_SEARCH_COUNT_LOADING:\n return {\n ...state,\n isFilterSearchCountLoading: payload.value,\n };\n case SET_FILTERS_LOADING:\n return {\n ...state,\n isFiltersLoading: payload.value,\n };\n case SET_NEXT_SEARCH:\n return {\n ...state,\n nextSearch: payload.value,\n };\n default:\n return state;\n }\n};\n","import { BASE_URL } from \"./config\";\r\nimport { lang } from \"../lang/lang\";\r\nimport urls from \"./urls\";\r\nimport { store } from \"../redux\";\r\n\r\nexport const getLangUrl = () => (lang.getLanguage() === \"en\" ? \"/en\" : \"\");\r\n\r\nexport const getUrl = () => getLangUrl();\r\n\r\nexport const getBaseUrl = () => `${BASE_URL}${getLangUrl()}`;\r\n\r\nexport const getCurrentPathname = () => window.location.pathname;\r\n\r\nexport const getCurrentSearchParams = () => window.location.search;\r\n\r\nexport const getCurrentUrl = () => `${getCurrentPathname()}`;\r\n\r\nexport const getCurrentLocation = () =>\r\n `${getCurrentPathname()}${getCurrentSearchParams()}`;\r\n\r\nexport const resize = () =>\r\n window.dispatchEvent(new window.CustomEvent(\"resize\"));\r\n\r\nexport const isProd = () => window.location.hostname === \"www.scopeexplorer.com\" || window.location.hostname === 'app.scope-one.com';\r\n\r\n// Check if location matches route regex\r\nexport const isHomepage = () => urls.HOME.reg.test(window.location.pathname);\r\n\r\nexport const isContactPage = () =>\r\n urls.CONTACT.reg.test(window.location.pathname);\r\n\r\nexport const isSearchResults = () =>\r\n urls.SEARCH_RESULTS.reg.test(window.location.pathname);\r\n\r\nexport const isAdvancedSearchResults = () =>\r\n urls.ADV_SEARCH_RESULTS.reg.test(window.location.pathname);\r\n\r\nexport const isFilterSearch = () =>\r\n urls.FILTER_SEARCH_RESULTS.reg.test(window.location.pathname);\r\n\r\nexport const isSurveyPage = () =>\r\n urls.SURVEY_ESG_FUND.reg.test(window.location.pathname) ||\r\n urls.SURVEY_ESG_COMPANY.reg.test(window.location.pathname) ||\r\n urls.SURVEY_EQUITY_FUND.reg.test(window.location.pathname) ||\r\n urls.SURVEY_SOVEREIGN_BOND_FUND.reg.test(window.location.pathname) ||\r\n urls.SURVEY_CORPORATE_BOND_FUND.reg.test(window.location.pathname) ||\r\n urls.SURVEY_AGGREGATE_BOND_FUND.reg.test(window.location.pathname) ||\r\n urls.SURVEY_MULTI_ASSET_FUND.reg.test(window.location.pathname) ||\r\n urls.DEKA_SURVEY.reg.test(window.location.pathname);\r\n\r\nexport const isEsgSurveyPage = () => urls.SURVEY_ESG_FUND.reg.test(window.location.pathname);\r\n\r\nexport const isSurveyPageAllowed = () => {\r\n const { isDvmSurveyAllowed,\r\n isEsgCompanySurveyAllowed,\r\n isEsgFundSurveyAllowed,\r\n isEsgArticleUploadAllowed,\r\n isCompanyEsgAdmin } = store.getState().domain?.auth;\r\n return isDvmSurveyAllowed\r\n || isEsgCompanySurveyAllowed\r\n || isEsgFundSurveyAllowed\r\n || isEsgArticleUploadAllowed\r\n || isCompanyEsgAdmin;\r\n};\r\n\r\nexport const isHomeComponent = () =>\r\n urls.HOME.reg.test(window.location.pathname) ||\r\n urls.CONFIRM.reg.test(window.location.pathname) ||\r\n urls.RESET.reg.test(window.location.pathname);\r\n\r\nexport const scrollToRef = ref => {\r\n const startingY = window.pageYOffset;\r\n const diff = ref.current.getBoundingClientRect().top - 80;\r\n const duration = 250;\r\n let start;\r\n\r\n window.requestAnimationFrame(function step(timestamp) {\r\n if (!start) start = timestamp;\r\n const time = timestamp - start;\r\n const percent = Math.min(time / duration, 1);\r\n\r\n window.scrollTo(0, startingY + diff * percent);\r\n\r\n if (time < duration) {\r\n window.requestAnimationFrame(step);\r\n }\r\n });\r\n};\r\n\r\nexport const isAnyModalVisible = props =>\r\n Object.values(props).some(modalVisibility => modalVisibility === true);\r\n\r\nexport const gtmPushEvent = props => {\r\n const win = window as any;\r\n win.dataLayer.push(props);\r\n};\r\n\r\nexport const scrollTo = (element, to, duration) => {\r\n if (duration <= 0) return;\r\n const difference = to - element.scrollTop;\r\n const perTick = (difference / duration) * 10;\r\n\r\n setTimeout(function () {\r\n element.scrollTop = element.scrollTop + perTick;\r\n if (element.scrollTop === to) return;\r\n scrollTo(element, to, duration - 10);\r\n }, 10);\r\n};\r\n\r\nexport const getLocation = (link: string) =>\r\n link.replace(/\\/en(\\/|$)/, \"/\").replace(/\\/de(\\/|$)/, \"/\");\r\n\r\nexport const getRedirectLocation = (route: string) =>\r\n `${lang.getLanguage() === \"en\" ? \"/en\" : \"\"}${getLocation(route)}`;\r\n","import { API_URL, getReqOptions } from \"./config\";\nimport {\n Action,\n AuthAction,\n AuthState,\n ErrorAction,\n License,\n LoginValues,\n Meta,\n RegisterValues,\n ResetPasswordValues,\n UserConference,\n WholesaleRegisterValues,\n} from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { addErrorToast, addSuccessToast } from \"../ui/toasts\";\nimport { catchError, map, mergeMap, switchMap } from \"rxjs/operators\";\nimport {\n getCurrentLocation,\n getCurrentSearchParams,\n getLangUrl,\n gtmPushEvent,\n} from \"../../utils/app\";\nimport { setIsInitialized, setLicenseLoading } from \"./../ui/app\";\nimport { setRegisterLoading, setRegisterSuccess } from \"../ui/register\";\n\nimport Cookies from \"universal-cookie\";\nimport { Md5 } from \"ts-md5/dist/md5\";\nimport { StateValue } from \"../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { clearSearchFunds } from \"./funds/search\";\nimport { fetchCustomFields } from \"./filters\";\nimport { fetchFund } from \"./funds/details\";\nimport { fetchWatchlist } from \"./funds/watchlist\";\nimport jwt_decode from \"jwt-decode\";\nimport { lang } from \"../../lang/lang\";\nimport { ofType } from \"redux-observable\";\nimport { push } from \"connected-react-router\";\nimport { reset } from \"redux-form\";\nimport { setAdvancedFundsList } from \"../ui/fundsList\";\nimport { setAdvancedSearch } from \"../ui/search\";\nimport { setAppLoading } from \"../ui/app\";\nimport { setDetailsLoading } from \"../ui/fundDetails\";\nimport { setLoginVisibility } from \"../ui/login\";\nimport urls from \"../../utils/urls\";\nimport { setLastRoute } from \"./route\";\n\nexport const cookies = new Cookies();\nexport const cookiesOptions = {\n path: \"/\",\n secure: false,\n httpOnly: false,\n sameSite: true,\n};\n\nconst LOGIN_REQUESTED = \"LOGIN_REQUESTED\";\nconst LOGIN_SUCCESSFUL = \"LOGIN_SUCCESSFUL\";\nconst LOGIN_REJECTED = \"LOGIN_REJECTED\";\nconst GET_LOGGED_IN_USER_REQUESTED = \"GET_LOGGED_IN_USER_REQUESTED\";\nconst GET_LOGGED_IN_USER_SUCCESSFUL = \"GET_LOGGED_IN_USER_SUCCESSFUL\";\nconst GET_LOGGED_IN_USER_REJECTED = \"GET_LOGGED_IN_USER_REJECTED\";\nconst REGISTER_REQUESTED = \"REGISTER_REQUESTED\";\nconst REGISTER_SUCCESSFUL = \"REGISTER_SUCCESSFUL\";\nconst REGISTER_REJECTED = \"REGISTER_REJECTED\";\nconst WHOLESALE_REGISTER_REQUESTED = \"WHOLESALE_REGISTER_REQUESTED\";\nconst WHOLESALE_REGISTER_SUCCESSFUL = \"WHOLESALE_REGISTER_SUCCESSFUL\";\nconst WHOLESALE_REGISTER_REJECTED = \"WHOLESALE_REGISTER_REJECTED\";\nconst LOGOUT_REQUESTED = \"LOGOUT_REQUESTED\";\nconst LOGOUT_SUCCESSFUL = \"LOGOUT_SUCCESSFUL\";\nconst LOGOUT_REJECTED = \"LOGOUT_REJECTED\";\nexport const REFRESH_TOKEN_REQUESTED = \"REFRESH_TOKEN\";\nexport const REFRESH_TOKEN_SUCCESSFUL = \"REFRESH_TOKEN_SUCCESSFUL\";\nexport const REFRESH_TOKEN_REJECTED = \"REFRESH_TOKEN_REJECTED\";\nconst CONFIRM_USER_REQUESTED = \"CONFIRM_USER_REQUESTED\";\nconst CONFIRM_USER_SUCCESSFUL = \"CONFIRM_USER_SUCCESSFUL\";\nconst CONFIRM_USER_REJECTED = \"CONFIRM_USER_REJECTED\";\nconst REQUEST_RESET_PASSWORD_REQUESTED = \"REQUEST_RESET_PASSWORD_REQUESTED\";\nconst REQUEST_RESET_PASSWORD_SUCCESSFUL = \"REQUEST_RESET_PASSWORD_SUCCESSFUL\";\nconst REQUEST_RESET_PASSWORD_REJECTED = \"REQUEST_RESET_PASSWORD_REJECTED\";\nconst RESET_PASSWORD_REQUESTED = \"RESET_PASSWORD_REQUESTED\";\nconst RESET_PASSWORD_SUCCESSFUL = \"RESET_PASSWORD_SUCCESSFUL\";\nconst RESET_PASSWORD_REJECTED = \"RESET_PASSWORD_REJECTED\";\nconst FETCH_USER_WEBINARS_REQUESTED = \"FETCH_USER_WEBINARS_REQUESTED\";\nconst FETCH_USER_WEBINARS_SUCCESSFUL = \"FETCH_USER_WEBINARS_SUCCESSFUL\";\nconst FETCH_USER_WEBINARS_REJECTED = \"FETCH_USER_WEBINARS_REJECTED\";\nconst FETCH_LICENSE_REQUESTED = \"FETCH_LICENSE_REQUESTED\";\nconst FETCH_LICENSE_SUCCESSFUL = \"FETCH_LICENSE_SUCCESSFUL\";\nconst FETCH_LICENSE_REJECTED = \"FETCH_LICENSE_REJECTED\";\nconst RESET_AUTH = \"RESET_AUTH\";\nconst SET_RECEIVE_EMAILS_REQUESTED = \"SET_RECEIVE_EMAILS_REQUESTED\";\nconst SET_RECEIVE_EMAILS_SUCCESSFUL = \"SET_RECEIVE_EMAILS_SUCCESSFUL\";\nconst SET_RECEIVE_EMAILS_REJECTED = \"SET_RECEIVE_EMAILS_REJECTED\";\n\nexport const login = (values: LoginValues, meta: Meta): AuthAction => ({\n type: LOGIN_REQUESTED,\n payload: { values, meta },\n});\n\nexport const loginSuccessful = (\n token: string,\n isWholesaleUser: boolean,\n isAssetManager: boolean,\n assetManagerId: number | null,\n assetManagerName: string | null,\n company: string | null,\n phone: number | null,\n isExternalUser: boolean,\n receive_email_notification: boolean,\n isEsgFundSurveyAllowed: boolean = false,\n isEsgCompanySurveyAllowed: boolean = false,\n isDvmSurveyAllowed: boolean = false,\n isCompanyEsgAdmin: boolean = false,\n isEsgArticleUploadAllowed: boolean = false,\n isSurveySummaryAllowed: boolean = false\n): AuthAction => ({\n type: LOGIN_SUCCESSFUL,\n payload: {\n user: jwt_decode(token),\n isWholesaleUser,\n isAssetManager,\n assetManagerId,\n assetManagerName,\n isExternalUser,\n receive_email_notification,\n company,\n phone,\n isEsgFundSurveyAllowed,\n isEsgCompanySurveyAllowed,\n isDvmSurveyAllowed,\n isCompanyEsgAdmin,\n isEsgArticleUploadAllowed,\n isSurveySummaryAllowed,\n },\n});\n\nconst loginRejected = (error?: TypeError): ErrorAction => ({\n type: LOGIN_REJECTED,\n error,\n});\n\nexport const getLoggedInUser = (): AuthAction => ({\n type: GET_LOGGED_IN_USER_REQUESTED,\n payload: {},\n});\n\nexport const getLoggedInUserSuccessful = (\n isWholesaleUser: boolean,\n isAssetManager: boolean,\n assetManagerId: number | null,\n assetManagerName: string | null,\n company: string | null,\n phone: number | null,\n isExternalUser: boolean,\n receive_email_notification: boolean,\n isEsgFundSurveyAllowed: boolean = false,\n isEsgCompanySurveyAllowed: boolean = false,\n isDvmSurveyAllowed: boolean = false,\n isCompanyEsgAdmin: boolean = false,\n isEsgArticleUploadAllowed: boolean = false,\n isSurveySummaryAllowed: boolean = false\n): AuthAction => ({\n type: GET_LOGGED_IN_USER_SUCCESSFUL,\n payload: {\n isWholesaleUser,\n isAssetManager,\n assetManagerId,\n assetManagerName,\n company,\n phone,\n isExternalUser,\n receive_email_notification,\n isEsgFundSurveyAllowed,\n isEsgCompanySurveyAllowed,\n isDvmSurveyAllowed,\n isCompanyEsgAdmin,\n isEsgArticleUploadAllowed,\n isSurveySummaryAllowed,\n },\n});\n\nconst getLoggedInUserRejected = (error?: TypeError): ErrorAction => ({\n type: GET_LOGGED_IN_USER_REJECTED,\n error,\n});\n\nexport const wholesaleRegister = (\n values: WholesaleRegisterValues\n): AuthAction => ({\n type: WHOLESALE_REGISTER_REQUESTED,\n payload: { values },\n});\n\nconst wholesaleRegisterSuccessful = (): Action => ({\n type: WHOLESALE_REGISTER_SUCCESSFUL,\n});\n\nconst wholesaleRegisterRejected = (error?: TypeError): ErrorAction => ({\n type: WHOLESALE_REGISTER_REJECTED,\n error,\n});\n\nexport const register = (values: RegisterValues): AuthAction => ({\n type: REGISTER_REQUESTED,\n payload: { values },\n});\n\nconst registerSuccessful = (): Action => ({\n type: REGISTER_SUCCESSFUL,\n});\n\nconst registerRejected = (error?: TypeError): ErrorAction => ({\n type: REGISTER_REJECTED,\n error,\n});\n\nexport const logout = (): Action => ({\n type: LOGOUT_REQUESTED,\n});\n\nexport const logoutSuccessful = (): Action => ({\n type: LOGOUT_SUCCESSFUL,\n});\n\nconst logoutRejected = (error?: TypeError): ErrorAction => ({\n type: LOGOUT_REJECTED,\n error,\n});\n\nexport const refreshToken = (): Action => ({\n type: REFRESH_TOKEN_REQUESTED,\n});\n\nexport const refreshTokenSuccessful = (\n token: string,\n isWholesaleUser: boolean,\n isAssetManager: boolean,\n isEsgFundSurveyAllowed: boolean,\n isEsgCompanySurveyAllowed: boolean,\n isDvmSurveyAllowed: boolean,\n assetManagerId: number | null,\n assetManagerName: string | null,\n company: string | null,\n phone: number | null,\n isCompanyEsgAdmin: boolean,\n isEsgArticleUploadAllowed: boolean,\n isSurveySummaryAllowed: boolean\n): AuthAction => ({\n type: REFRESH_TOKEN_SUCCESSFUL,\n payload: {\n user: jwt_decode(token),\n token,\n isWholesaleUser,\n isAssetManager,\n assetManagerId,\n assetManagerName,\n isEsgFundSurveyAllowed,\n isEsgCompanySurveyAllowed,\n isDvmSurveyAllowed,\n company,\n phone,\n isCompanyEsgAdmin,\n isEsgArticleUploadAllowed,\n isSurveySummaryAllowed,\n },\n});\n\nexport const refreshTokenRejected = (error?: TypeError): ErrorAction => ({\n type: REFRESH_TOKEN_REJECTED,\n error,\n});\n\nexport const confirmUser = (token: string): AuthAction => ({\n type: CONFIRM_USER_REQUESTED,\n payload: { token },\n});\n\nconst confirmUserSuccessful = (): Action => ({\n type: CONFIRM_USER_SUCCESSFUL,\n});\n\nconst confirmUserRejected = (error?: TypeError): ErrorAction => ({\n type: CONFIRM_USER_REJECTED,\n error,\n});\n\nexport const requestResetPassword = (\n values: ResetPasswordValues,\n meta: Meta\n): AuthAction => ({\n type: REQUEST_RESET_PASSWORD_REQUESTED,\n payload: { values, meta },\n});\n\nconst requestResetPasswordSuccessful = (): Action => ({\n type: REQUEST_RESET_PASSWORD_SUCCESSFUL,\n});\n\nconst requestResetPasswordRejected = (error?: TypeError): ErrorAction => ({\n type: REQUEST_RESET_PASSWORD_REJECTED,\n error,\n});\n\nexport const resetPassword = (\n values: ResetPasswordValues,\n meta: Meta\n): AuthAction => ({\n type: RESET_PASSWORD_REQUESTED,\n payload: { values, meta },\n});\n\nconst resetPasswordSuccessful = (): Action => ({\n type: RESET_PASSWORD_SUCCESSFUL,\n});\n\nconst resetPasswordRejected = (error?: TypeError): ErrorAction => ({\n type: RESET_PASSWORD_REJECTED,\n error,\n});\n\nexport const fetchUserWebinars = (): Action => ({\n type: FETCH_USER_WEBINARS_REQUESTED,\n});\n\nconst fetchUserWebinarsSuccessful = (\n webinars: UserConference[]\n): AuthAction => ({\n type: FETCH_USER_WEBINARS_SUCCESSFUL,\n payload: { webinars },\n});\n\nconst fetchUserWebinarsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_USER_WEBINARS_REJECTED,\n error,\n});\n\nexport const fetchLicense = (): Action => ({\n type: FETCH_LICENSE_REQUESTED,\n});\n\nconst fetchLicenseSuccessful = (license: License): AuthAction => ({\n type: FETCH_LICENSE_SUCCESSFUL,\n payload: { license },\n});\n\nconst fetchLicenseRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_LICENSE_REJECTED,\n error,\n});\n\nexport const resetAuth = (): Action => ({\n type: RESET_AUTH,\n});\n\nexport const setReceiveEmails = (value: boolean): AuthAction => ({\n type: SET_RECEIVE_EMAILS_REQUESTED,\n payload: { value },\n});\n\nconst setReceiveEmailsSuccessful = (value: boolean): AuthAction => ({\n type: SET_RECEIVE_EMAILS_SUCCESSFUL,\n payload: { value },\n});\n\nconst setReceiveEmailsRejected = (error?: TypeError): ErrorAction => ({\n type: SET_RECEIVE_EMAILS_REJECTED,\n error,\n});\n\nexport default (\n state: AuthState = {\n isAuthenticated: false,\n isWholesaleUser: false,\n isAssetManager: false,\n assetManagerId: null,\n assetManagerName: null,\n isExternalUser: false,\n receiveEmailNotifications: false,\n isEsgFundSurveyAllowed: false,\n isEsgCompanySurveyAllowed: false,\n isDvmSurveyAllowed: false,\n company: null,\n phone: null,\n user: null,\n webinars: [],\n license: null,\n data: null,\n isCompanyEsgAdmin: false,\n isEsgArticleUploadAllowed: false,\n isSurveySummaryAllowed: false,\n },\n { type, payload }: AuthAction\n) => {\n switch (type) {\n case REFRESH_TOKEN_SUCCESSFUL:\n case LOGIN_SUCCESSFUL:\n return {\n ...state,\n user: payload.user,\n isAuthenticated: true,\n isWholesaleUser: payload.isWholesaleUser,\n isAssetManager: payload.isAssetManager,\n assetManagerId: payload.assetManagerId,\n assetManagerName: payload.assetManagerName,\n isExternalUser: payload.isExternalUser,\n receiveEmailNotifications: payload.receive_email_notification,\n isEsgFundSurveyAllowed: payload.isEsgFundSurveyAllowed,\n isEsgCompanySurveyAllowed: payload.isEsgCompanySurveyAllowed,\n isDvmSurveyAllowed: payload.isDvmSurveyAllowed,\n company: payload.company,\n phone: payload.phone,\n isCompanyEsgAdmin: payload.isCompanyEsgAdmin,\n isEsgArticleUploadAllowed: payload.isEsgArticleUploadAllowed,\n isSurveySummaryAllowed: payload.isSurveySummaryAllowed,\n };\n case GET_LOGGED_IN_USER_SUCCESSFUL:\n return {\n ...state,\n isAuthenticated: true,\n isWholesaleUser: payload.isWholesaleUser,\n isAssetManager: payload.isAssetManager,\n assetManagerId: payload.assetManagerId,\n assetManagerName: payload.assetManagerName,\n isExternalUser: payload.isExternalUser,\n receiveEmailNotifications: payload.receive_email_notification,\n isEsgFundSurveyAllowed: payload.isEsgFundSurveyAllowed,\n isEsgCompanySurveyAllowed: payload.isEsgCompanySurveyAllowed,\n isDvmSurveyAllowed: payload.isDvmSurveyAllowed,\n company: payload.company,\n phone: payload.phone,\n isCompanyEsgAdmin: payload.isCompanyEsgAdmin,\n isEsgArticleUploadAllowed: payload.isEsgArticleUploadAllowed,\n isSurveySummaryAllowed: payload.isSurveySummaryAllowed,\n };\n case REFRESH_TOKEN_REJECTED:\n case LOGIN_REJECTED:\n case LOGOUT_SUCCESSFUL:\n case RESET_AUTH:\n return {\n ...state,\n isAuthenticated: false,\n isWholesaleUser: false,\n isAssetManager: false,\n isExternalUser: false,\n receiveEmailNotifications: false,\n isEsgFundSurveyAllowed: false,\n isEsgCompanySurveyAllowed: false,\n isDvmSurveyAllowed: false,\n assetManagerId: null,\n assetManagerName: null,\n company: null,\n phone: null,\n user: null,\n from: null,\n webinars: [],\n license: null,\n isEsgArticleUploadAllowed: false,\n isSurveySummaryAllowed: false,\n };\n case SET_RECEIVE_EMAILS_SUCCESSFUL:\n return {\n ...state,\n receiveEmailNotifications: payload.value,\n };\n case FETCH_USER_WEBINARS_SUCCESSFUL:\n return {\n ...state,\n webinars: payload.webinars,\n };\n case FETCH_LICENSE_SUCCESSFUL:\n case \"CANCEL_SUBSCRIPTION_SUCCESSFUL\":\n return {\n ...state,\n license: payload.license,\n };\n default:\n return state;\n }\n};\n\nexport const logoutEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(LOGOUT_REQUESTED),\n mergeMap(() =>\n ajax.post(`${API_URL}/logout/`, {}, { withCredentials: true }).pipe(\n mergeMap(() =>\n of(\n reset(\"advancedSearch\"),\n reset(\"advancedFundsList\"),\n setAdvancedSearch(false),\n setAdvancedFundsList(false),\n clearSearchFunds(),\n addSuccessToast(lang.menu.logoutSuccess),\n logoutSuccessful(),\n setLastRoute(null),\n push(`${getLangUrl()}${getCurrentSearchParams()}`)\n )\n ),\n catchError(error => of(logoutRejected(error)))\n )\n ),\n catchError(error => of(logoutRejected(error)))\n );\n\nexport const loginEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(LOGIN_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n return ajax\n .post(\n `${API_URL}/login/?id=${Md5.hashStr(payload.values.email)}`,\n {\n userName: payload.values.email,\n password: payload.values.password,\n },\n {\n \"Content-Type\": \"application/json\",\n withCredentials: true,\n }\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n const pathname = state.value.domain.route.prevPathname;\n const id = parseInt(\n pathname.substr(pathname.lastIndexOf(\"/\") + 1),\n 10\n );\n\n if (urls.DETAILS.reg.test(pathname)) {\n return of(\n setLoginVisibility(false),\n fetchLicense(),\n loginSuccessful(\n response.token,\n response.is_wholesale,\n response.is_asset_manager,\n response.company_info_id,\n response.company_info_name,\n response.company,\n response.phone,\n response.is_external_login,\n response.receive_email_notifications,\n response.is_esg_fund_survey_allowed,\n response.is_esg_company_survey_allowed,\n response.is_dvm_survey_allowed,\n response.is_company_esg_admin,\n response.is_esg_article_upload_allowed,\n response.is_survey_summary_allowed\n ),\n setAdvancedSearch(response.is_wholesale),\n fetchUserWebinars(),\n fetchWatchlist(true),\n setDetailsLoading(true),\n fetchFund(id)\n );\n } else {\n return of(\n setLoginVisibility(false),\n fetchLicense(),\n loginSuccessful(\n response.token,\n response.is_wholesale,\n response.is_asset_manager,\n response.company_info_id,\n response.company_info_name,\n response.company,\n response.phone,\n response.is_external_login,\n response.receive_email_notifications,\n response.is_esg_fund_survey_allowed,\n response.is_esg_company_survey_allowed,\n response.is_dvm_survey_allowed,\n response.is_company_esg_admin,\n response.is_esg_article_upload_allowed,\n response.is_survey_summary_allowed\n ),\n setAdvancedSearch(response.is_wholesale),\n fetchUserWebinars(),\n fetchWatchlist(true)\n );\n }\n }),\n catchError(error => {\n if (reject) reject(error);\n return of(loginRejected(error));\n })\n );\n })\n );\n\nexport const getLoggedInUserEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(GET_LOGGED_IN_USER_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/user_info/`, getReqOptions()).pipe(\n mergeMap(({ response }) => {\n return of(\n getLoggedInUserSuccessful(\n response.is_wholesale,\n response.is_asset_manager,\n response.company_info_id,\n response.company_info_name,\n response.company,\n response.phone,\n response.is_test_user,\n response.receive_email_notifications,\n response.is_esg_fund_survey_allowed,\n response.is_esg_company_survey_allowed,\n response.is_dvm_survey_allowed,\n response.is_company_esg_admin,\n response.is_esg_article_upload_allowed,\n response.is_survey_summary_allowed\n )\n );\n }),\n catchError(error => {\n if (error.status === 404) {\n return of(push(`/404`));\n }\n return of(getLoggedInUserRejected(error));\n })\n )\n )\n );\n\nexport const registerEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(REGISTER_REQUESTED),\n mergeMap(({ payload }) => {\n const { protocol, host } = window.location;\n const portalHost = `${protocol}//${host}/confirm/{code}`;\n\n return ajax\n .post(\n `${API_URL}/register/`,\n {\n firstName: payload.values.firstName,\n name: payload.values.lastName,\n email: payload.values.email,\n password: payload.values.password,\n },\n {\n \"Content-Type\": \"application/json\",\n \"Portal-Host\": portalHost,\n }\n )\n .pipe(\n mergeMap(() => {\n gtmPushEvent({\n event: \"registerFormSubmit\",\n userType: \"retail\",\n registerLocation: state.value.ui.register.registerLocation,\n });\n return of(\n setRegisterLoading(false),\n reset(\"register\"),\n addSuccessToast(lang.register.success),\n setRegisterSuccess(true),\n registerSuccessful()\n );\n }),\n catchError(error =>\n of(\n setRegisterLoading(false),\n addErrorToast(\n lang.register.errors[error.status] ||\n lang.register.errors.default ||\n lang.register.fillInFields\n ),\n registerRejected(error)\n )\n )\n );\n })\n );\n\nexport const wholesaleRegisterEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(WHOLESALE_REGISTER_REQUESTED),\n mergeMap(({ payload }) => {\n const { protocol, host } = window.location;\n const portalHost = `${protocol}//${host}/confirm/{code}`;\n\n return ajax\n .post(\n `${API_URL}/register/`,\n {\n firstName: payload.values.firstName,\n name: payload.values.lastName,\n email: payload.values.email,\n password: payload.values.password,\n company: payload.values.company,\n phone: payload.values.phone,\n sector: payload.values.sector.value,\n additinalSectorQuestion: payload.values.additinalSectorQuestion\n ? payload.values.additinalSectorQuestion.value\n : null,\n division: payload.values.division.value,\n isWholesale: true,\n },\n {\n \"Content-Type\": \"application/json\",\n \"Portal-Host\": portalHost,\n }\n )\n .pipe(\n mergeMap(() => {\n gtmPushEvent({\n event: \"registerFormSubmit\",\n userType: \"wholesale\",\n registerLocation: state.value.ui.register.registerLocation,\n });\n return of(\n reset(\"wholesaleRegister\"),\n addSuccessToast(lang.register.success),\n setRegisterLoading(false),\n setRegisterSuccess(true),\n wholesaleRegisterSuccessful()\n );\n }),\n catchError(error =>\n of(\n addErrorToast(\n lang.register.errors[error.status] ||\n lang.register.errors.default ||\n lang.register.fillInFields\n ),\n setRegisterLoading(false),\n wholesaleRegisterRejected(error)\n )\n )\n );\n })\n );\n\nexport const rejectTokenEpic = (\n action$: Observable\n): Observable | {} =>\n action$.pipe(\n ofType(REFRESH_TOKEN_REJECTED),\n mergeMap(() =>\n of(\n setAppLoading(false),\n setLicenseLoading(false),\n setAdvancedSearch(false),\n setIsInitialized(true),\n clearSearchFunds(),\n push(getCurrentLocation())\n )\n ),\n catchError(() =>\n of(setAppLoading(false), setIsInitialized(true), setAdvancedSearch(false))\n )\n );\n\nexport const refreshTokenEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(REFRESH_TOKEN_REQUESTED),\n switchMap(() =>\n ajax\n .post(\n `${API_URL}/refresh-token/`,\n {},\n { \"Content-Type\": \"application/json\", withCredentials: true }\n )\n .pipe(\n mergeMap(({ response }) => {\n if (response.status === 204) {\n return of(setAppLoading(false), setIsInitialized(true));\n } else if (state.value.ui.app.isAppLoading) {\n return of(\n refreshTokenSuccessful(\n response.token,\n response.is_wholesale,\n response.is_asset_manager,\n response.is_esg_fund_survey_allowed === \"True\" ? true : false,\n response.is_esg_company_survey_allowed === \"True\"\n ? true\n : false,\n response.is_dvm_survey_allowed === \"True\" ? true : false,\n response.company_info_id,\n response.company_info_name,\n response.company,\n response.phone,\n response.is_company_esg_admin === \"True\" ? true : false,\n response.is_esg_article_upload_allowed,\n response.is_survey_summary_allowed === \"True\" ? true : false\n ),\n fetchCustomFields(),\n fetchUserWebinars(),\n fetchLicense(),\n fetchWatchlist(true),\n setAppLoading(false),\n setIsInitialized(true)\n );\n } else {\n return of(\n setIsInitialized(true),\n refreshTokenSuccessful(\n response.token,\n response.is_wholesale,\n response.is_asset_manager,\n response.is_esg_fund_survey_allowed === \"True\" ? true : false,\n response.is_esg_company_survey_allowed === \"True\"\n ? true\n : false,\n response.is_dvm_survey_allowed === \"True\" ? true : false,\n response.company_info_id,\n response.company_info_name,\n response.company,\n response.phone,\n response.is_company_esg_admin === \"True\" ? true : false,\n response.is_esg_article_upload_allowed === \"True\"\n ? true\n : false,\n response.is_survey_summary_allowed === \"True\" ? true : false\n )\n );\n }\n }),\n catchError(error =>\n of(clearSearchFunds(), refreshTokenRejected(error))\n )\n )\n ),\n catchError(error => of(refreshTokenRejected(error)))\n );\n\nexport const confirmUserEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(CONFIRM_USER_REQUESTED),\n switchMap(({ payload }) => {\n const { token } = payload;\n if (token) {\n return ajax\n .post(\n `${API_URL}/confirm/${token}/`,\n {},\n { \"Content-Type\": \"application/json\" }\n )\n .pipe(\n mergeMap(() => of(confirmUserSuccessful(), push(\"/\"))),\n catchError(error => of(confirmUserRejected(error), push(\"/\")))\n );\n } else {\n return of(confirmUserRejected(), push(\"/\"));\n }\n }),\n catchError(error => of(confirmUserRejected(error), push(\"/\")))\n );\n\nexport const requestResetPasswordEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(REQUEST_RESET_PASSWORD_REQUESTED),\n switchMap(({ payload }) => {\n const { email } = payload.values;\n const { resolve, reject } = payload.meta;\n const { protocol, host } = window.location;\n const portalHost = `${protocol}//${host}/reset/{code}`;\n\n if (email) {\n return ajax\n .post(\n `${API_URL}/request-reset-password/`,\n { email },\n {\n \"Content-Type\": \"application/json\",\n \"Portal-Host\": portalHost,\n }\n )\n .pipe(\n map(({ response }) => {\n if (resolve) resolve(response);\n return requestResetPasswordSuccessful();\n }),\n catchError(error => {\n if (error) reject(error);\n return of(requestResetPasswordRejected(error));\n })\n );\n } else {\n reject();\n return of(requestResetPasswordRejected());\n }\n }),\n catchError(error => of(requestResetPasswordRejected(error)))\n );\n\nexport const resetPasswordEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(RESET_PASSWORD_REQUESTED),\n switchMap(({ payload }) => {\n const { token } = state.value.ui.resetPassword;\n const { password } = payload.values;\n const { resolve, reject } = payload.meta;\n if (token && password) {\n return ajax\n .post(\n `${API_URL}/reset-password/`,\n { token, password },\n { \"Content-Type\": \"application/json\" }\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(resetPasswordSuccessful());\n }),\n catchError(error => {\n if (error) reject(error);\n return of(resetPasswordRejected(error));\n })\n );\n } else {\n reject();\n return of(resetPasswordRejected());\n }\n }),\n catchError(error => of(resetPasswordRejected(error)))\n );\n\nexport const fetchUserWebinarsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_USER_WEBINARS_REQUESTED),\n switchMap(() =>\n ajax.get(`${API_URL}/profile/webinars/`, getReqOptions()).pipe(\n mergeMap(({ response }) => of(fetchUserWebinarsSuccessful(response))),\n catchError(error => of(fetchUserWebinarsRejected(error)))\n )\n ),\n catchError(error => of(fetchUserWebinarsRejected(error)))\n );\n\nexport const fetchLicenseEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_LICENSE_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/profile/subscription/`, getReqOptions()).pipe(\n mergeMap(({ response }) =>\n of(\n push(getCurrentLocation()),\n fetchLicenseSuccessful(response),\n setLicenseLoading(false)\n )\n ),\n catchError(error =>\n of(\n setLicenseLoading(false),\n push(getCurrentLocation()),\n fetchLicenseRejected(error)\n )\n )\n )\n )\n );\n\nexport const setReceiveEmailsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(SET_RECEIVE_EMAILS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax.post(`${API_URL}/profile/change_email_subscription/`).pipe(\n mergeMap(() =>\n of(\n addSuccessToast(\"Settings saved.\"),\n setReceiveEmailsSuccessful(payload.value)\n )\n ),\n catchError(error =>\n of(\n addErrorToast(\"Request failed. Please try again.\"),\n setReceiveEmailsRejected(error)\n )\n )\n )\n )\n );\n","import \"moment/locale/de\";\n\nimport { getInvestmentFocusLabels } from \"./config\";\nimport { lang } from \"./../lang/lang\";\nimport moment from \"moment\";\n\nexport const getLocalNumber = (value: number, digits: number) =>\n value.toLocaleString(lang.getLanguage(), {\n minimumFractionDigits: digits,\n maximumFractionDigits: digits,\n });\n\nexport const getPercentValue = (value: number) =>\n (value !== null && `${getLocalNumber(value, 2)}%`) || \"-\";\n\nexport const getPercentOneDigitValue = (value: number) =>\n (value !== null && `${getLocalNumber(value, 1)}%`) || \"-\";\n\nexport const getIntValue = (value: number) =>\n (value !== null && getLocalNumber(value, 0)) || \"-\";\n\nexport const getFloatValue = (value: number) =>\n (value !== null && getLocalNumber(value, 2)) || \"-\";\n\nexport const getLongFloatValue = (value: number) =>\n (value !== null && getLocalNumber(value, 5)) || \"-\";\n\nexport const getPriceValue = (value: string) =>\n (value !== null && getLocalNumber(parseFloat(value), 2)) || \"-\";\n\nexport const getMinInvestmentValue = (value: number) =>\n (value !== null && (value === 1 ? \"n.a.\" : getLocalNumber(value, 0))) ||\n \"n.a.\";\n\nexport const getCalculatedPerf = (value: number) => (value - 1) * 100;\n\nexport const getCalculatedRisk = (value: number) => value * 100;\n\nexport const getPerfValue = (value: number) =>\n (value !== null && getPercentValue(getCalculatedPerf(value))) || \"-\";\n\nexport const getPerfValueNa = (value: number) =>\n (value !== null && getPercentValue(getCalculatedPerf(value))) || \"n.a.\";\n\nexport const getRiskValue = (value: number) =>\n (value !== undefined &&\n value !== null &&\n getPercentValue(getCalculatedRisk(value))) ||\n \"-\";\n\nexport const getRiskValueNa = (value: number) =>\n (value !== undefined &&\n value !== null &&\n getPercentValue(getCalculatedRisk(value))) ||\n \"n.a.\";\n\nexport const getCostValueNa = (value: number) =>\n (value !== undefined && value !== null && getPercentValue(value)) || \"n.a.\";\n\nexport const getCrashDrawdownValue = (value: number) =>\n (value && getPercentValue(getCalculatedRisk(value))) || \"-\";\n\nexport const getDrawdownValue = (value: number) =>\n (value !== null && getPercentValue(getCalculatedRisk(value))) || \"0\";\n\nexport const getIsinValue = (value: string) =>\n value !== null && value.length === 12 ? value : \"-\";\n\nexport const getFormattedDate = (date: string | number) => {\n const d = new Date(date);\n return (\n (\"0\" + d.getDate()).slice(-2) +\n \".\" +\n (\"0\" + (d.getMonth() + 1)).slice(-2) +\n \".\" +\n d.getFullYear()\n );\n};\n\nexport const getReversedDateFormat = (d: Date) =>\n d.getFullYear() +\n \"-\" +\n (\"0\" + (d.getMonth() + 1)).slice(-2) +\n \"-\" +\n (\"0\" + d.getDate()).slice(-2);\n\nexport const getFormattedDateShort = (date: string | number) => {\n const d = new Date(date);\n return (\"0\" + (d.getMonth() + 1)).slice(-2) + \".\" + d.getFullYear();\n};\n\nexport const getDashedDate = (d: Date = new Date()) =>\n new Intl.DateTimeFormat(\"en-GB\").format(d).replace(/([/]|[.])/g, \"-\");\n\nexport const addZeroBefore = n => (n < 10 ? \"0\" : \"\") + n;\n\nexport const getConferenceDateTime = (\n date: string | number,\n startTime: string\n) => {\n const d = moment(date).locale(lang.getLanguage()).format(\"DD MMMM YYYY\");\n const formattedTime = moment(startTime, \"hh:mm:ss\").format(\"HH:mm\");\n const d2 = lang.getLanguage() === \"de\" ? \"Uhr\" : \"(CEST)\";\n return `${d} ${formattedTime} ${d2}`;\n};\n\nexport const getApiDateFormat = (date: Date) => {\n return `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`;\n};\n\nexport const getMacroOverviewDate = (date: string) =>\n moment(date).locale(lang.getLanguage()).format(\"DD. MMMM YYYY\");\n\nexport const getYesNoValue = (value: boolean) =>\n value ? lang.app.yes : lang.app.no;\n\nexport const getVolumeValue = (value: number) =>\n (value !== null && `${getLocalNumber(value, 1)} Mio. EUR`) || \"-\";\n\nexport const getInvestmentFocus = (value: number) =>\n getInvestmentFocusLabels()[value];\n\nexport const getLicensePriceValue = (value: number) =>\n (value !== null && `${getLocalNumber(value / 100, 2)}`) || \"-\";\n\nexport const fieldsFormatters = {\n getPercentValue: getPercentValue,\n getPercentOneDigitValue: getPercentOneDigitValue,\n getFloatValue: getFloatValue,\n getIntValue: getIntValue,\n getLongFloatValue: getLongFloatValue,\n getPriceValue: getPriceValue,\n getPerfValue: getPerfValue,\n getRiskValue: getRiskValue,\n getDrawdownValue: getDrawdownValue,\n getIsinValue: getIsinValue,\n getFormattedDate: getFormattedDate,\n getYesNoValue: getYesNoValue,\n getInvestmentFocus: getInvestmentFocus,\n getVolumeValue: getVolumeValue,\n};\n","import { SurveyAction, SurveyState } from \"./types\";\n\nconst SET_SURVEY_PAGE = \"SET_SURVEY_PAGE\";\nconst SET_SURVEY_LOADING = \"SET_SURVEY_LOADING\";\nconst SET_SURVEY_SAVING = \"SET_SURVEY_SAVING\";\nconst SET_SURVEY_EXPORT_LOADING = \"SET_SURVEY_EXPORT_LOADING\";\nconst SET_ASSET_MANAGER_SUMMARY_EXPORT_LOADING = \"SET_ASSET_MANAGER_SUMMARY_EXPORT_LOADING\";\nconst SET_ESG_FUND_SUMMARY_EXPORT_LOADING = \"SET_ESG_FUND_SUMMARY_EXPORT_LOADING\";\nconst SET_ESG_COMPANY_SUMMARY_EXPORT_LOADING = \"SET_ESG_COMPANY_SUMMARY_EXPORT_LOADING\";\nconst SET_ISINS_TABLE_LOADING = \"SET_ISINS_TABLE_LOADING\";\n\nexport const setSurveyPage = (value: number): SurveyAction => ({\n type: SET_SURVEY_PAGE,\n payload: { value },\n});\n\nexport const setSurveyLoading = (value: boolean): SurveyAction => ({\n type: SET_SURVEY_LOADING,\n payload: { value },\n});\n\nexport const setSurveySaving = (value: boolean): SurveyAction => ({\n type: SET_SURVEY_SAVING,\n payload: { value },\n});\n\nexport const setSurveyExportLoading = (value: boolean): SurveyAction => ({\n type: SET_SURVEY_EXPORT_LOADING,\n payload: { value }\n})\n\nexport const setAssetManagerSummaryExportLoading = (value: boolean): SurveyAction => ({\n type: SET_ASSET_MANAGER_SUMMARY_EXPORT_LOADING,\n payload: { value }\n})\n\nexport const setEsgFundSummaryExportLoading = (value: boolean): SurveyAction => ({\n type: SET_ESG_FUND_SUMMARY_EXPORT_LOADING,\n payload: { value }\n})\n\nexport const setEsgCompanySummaryExportLoading = (value: boolean): SurveyAction => ({\n type: SET_ESG_COMPANY_SUMMARY_EXPORT_LOADING,\n payload: { value }\n})\n\nexport const setIsinsTableLoading = (value: boolean): SurveyAction => ({\n type: SET_ISINS_TABLE_LOADING,\n payload: { value },\n})\n\nexport default (\n state: SurveyState = {\n page: 1,\n isLoading: true,\n isExportLoading: false,\n isSurveySaving: false,\n isAssetManagerSummaryExportLoading: false,\n isEsgFundSummaryExportLoading: false,\n isEsgCompanySummaryExportLoading: false,\n isIsinsTableLoading: true,\n },\n { type, payload }: SurveyAction\n) => {\n switch (type) {\n case SET_SURVEY_PAGE:\n return {\n ...state,\n page: payload.value,\n };\n case SET_SURVEY_LOADING:\n return {\n ...state,\n isLoading: payload.value,\n };\n case SET_SURVEY_SAVING:\n return {\n ...state,\n isSurveySaving: payload.value,\n };\n case SET_SURVEY_EXPORT_LOADING:\n return {\n ...state,\n isExportLoading: payload.value,\n };\n case SET_ASSET_MANAGER_SUMMARY_EXPORT_LOADING:\n return {\n ...state,\n isAssetManagerSummaryExportLoading: payload.value,\n }\n case SET_ESG_FUND_SUMMARY_EXPORT_LOADING:\n return {\n ...state,\n isEsgFundSummaryExportLoading: payload.value,\n }\n case SET_ESG_COMPANY_SUMMARY_EXPORT_LOADING:\n return {\n ...state,\n isEsgCompanySummaryExportLoading: payload.value,\n }\n case SET_ISINS_TABLE_LOADING:\n return {\n ...state,\n isIsinsTableLoading: payload.value,\n }\n default:\n return state;\n }\n};\n","import { API_URL, getReqOptions } from \"./config\";\nimport {\n Action,\n AssetManager,\n AssetManagerFund,\n AssetManagerList,\n AssetManagersAction,\n AssetManagersState,\n ErrorAction,\n MacroOverviewsList,\n Meta,\n News,\n} from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { addErrorToast, addSuccessToast } from \"./../ui/toasts\";\nimport { catchError, filter, mergeMap, takeUntil } from \"rxjs/operators\";\nimport {\n getChangedValues,\n updateEsg,\n updateMacroOverview,\n updatePortfolioManagers,\n} from \"../../utils/assetManagers\";\nimport {\n setAssetManagerInfoLoading,\n setAssetManagerNewsLoading,\n setMacroOverviewsLoading,\n setTopAssetManagerFundsLoading,\n} from \"../ui/assetManagerDetails\";\nimport { setFundsTableLoading, setFundsTableTotal } from \"../ui/fundsTable\";\n\nimport { StateValue } from \"../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { getAssetManagerFundsQueryParams } from \"../../utils/routing\";\nimport { lang } from \"../../lang/lang\";\nimport { ofType } from \"redux-observable\";\nimport { setAmNewsModalUploading } from \"./../ui/assetManagerNewsModal\";\nimport { setAssetManagersLoading } from \"../ui/assetManagerList\";\n\nconst FETCH_ASSET_MANAGERS_REQUESTED = \"FETCH_ASSET_MANAGERS_REQUESTED\";\nconst FETCH_ASSET_MANAGERS_SUCCESSFUL = \"FETCH_ASSET_MANAGERS_SUCCESSFUL\";\nconst FETCH_ASSET_MANAGERS_REJECTED = \"FETCH_ASSET_MANAGERS_REJECTED\";\nconst FETCH_ASSET_MANAGER_REQUESTED = \"FETCH_ASSET_MANAGER_REQUESTED\";\nconst FETCH_ASSET_MANAGER_SUCCESSFUL = \"FETCH_ASSET_MANAGER_SUCCESSFUL\";\nconst FETCH_ASSET_MANAGER_REJECTED = \"FETCH_ASSET_MANAGER_REJECTED\";\nconst FETCH_ASSET_MANAGER_FUNDS_REQUESTED =\n \"FETCH_ASSET_MANAGER_FUNDS_REQUESTED\";\nconst FETCH_ASSET_MANAGER_FUNDS_SUCCESSFUL =\n \"FETCH_ASSET_MANAGER_FUNDS_SUCCESSFUL\";\nconst FETCH_ASSET_MANAGER_FUNDS_REJECTED = \"FETCH_ASSET_MANAGER_FUNDS_REJECTED\";\nconst FETCH_ASSET_MANAGER_NEWS_REQUESTED = \"FETCH_ASSET_MANAGER_NEWS_REQUESTED\";\nconst FETCH_ASSET_MANAGER_NEWS_SUCCESSFUL =\n \"FETCH_ASSET_MANAGER_NEWS_SUCCESSFUL\";\nconst FETCH_ASSET_MANAGER_NEWS_REJECTED = \"FETCH_ASSET_MANAGER_NEWS_REJECTED\";\nconst FETCH_SINGLE_ASSET_MANAGER_NEWS_REQUESTED =\n \"FETCH_SINGLE_ASSET_MANAGER_NEWS_REQUESTED\";\nconst FETCH_SINGLE_ASSET_MANAGER_NEWS_SUCCESSFUL =\n \"FETCH_SINGLE_ASSET_MANAGER_NEWS_SUCCESSFUL\";\nconst FETCH_SINGLE_ASSET_MANAGER_NEWS_REJECTED =\n \"FETCH_SINGLE_ASSET_MANAGER_NEWS_REJECTED\";\nconst FETCH_TOP_ASSET_MANAGER_FUNDS_REQUESTED =\n \"FETCH_TOP_ASSET_MANAGER_FUNDS_REQUESTED\";\nconst FETCH_TOP_ASSET_MANAGER_FUNDS_SUCCESSFUL =\n \"FETCH_TOP_ASSET_MANAGER_FUNDS_SUCCESSFUL\";\nconst FETCH_TOP_ASSET_MANAGER_FUNDS_REJECTED =\n \"FETCH_TOP_ASSET_MANAGER_FUNDS_REJECTED\";\nconst SAVE_ASSET_MANAGER_REQUESTED = \"SAVE_ASSET_MANAGER_REQUESTED\";\nconst SAVE_ASSET_MANAGER_SUCCESSFUL = \"SAVE_ASSET_MANAGER_SUCCESSFUL\";\nconst SAVE_ASSET_MANAGER_REJECTED = \"SAVE_ASSET_MANAGER_REJECTED\";\n\nconst ADD_ASSET_MANAGER_NEWS_REQUESTED = \"ADD_ASSET_MANAGER_NEWS_REQUESTED\";\nconst ADD_ASSET_MANAGER_NEWS_SUCCESSFUL = \"ADD_ASSET_MANAGER_NEWS_SUCCESSFUL\";\nconst ADD_ASSET_MANAGER_NEWS_REJECTED = \"ADD_ASSET_MANAGER_NEWS_REJECTED\";\nconst EDIT_ASSET_MANAGER_NEWS_REQUESTED = \"EDIT_ASSET_MANAGER_NEWS_REQUESTED\";\nconst EDIT_ASSET_MANAGER_NEWS_SUCCESSFUL = \"EDIT_ASSET_MANAGER_NEWS_SUCCESSFUL\";\nconst EDIT_ASSET_MANAGER_NEWS_REJECTED = \"EDIT_ASSET_MANAGER_NEWS_REJECTED\";\nconst REMOVE_ASSET_MANAGER_NEWS_REQUESTED =\n \"REMOVE_ASSET_MANAGER_NEWS_REQUESTED\";\nconst REMOVE_ASSET_MANAGER_NEWS_SUCCESSFUL =\n \"REMOVE_ASSET_MANAGER_NEWS_SUCCESSFUL\";\nconst REMOVE_ASSET_MANAGER_NEWS_REJECTED = \"REMOVE_ASSET_MANAGER_NEWS_REJECTED\";\n\nconst FETCH_MACRO_OVERVIEWS_REQUESTED = \"FETCH_MACRO_OVERVIEWS_REQUESTED\";\nconst FETCH_MACRO_OVERVIEWS_SUCCESSFUL = \"FETCH_MACRO_OVERVIEWS_SUCCESSFUL\";\nconst FETCH_MACRO_OVERVIEWS_REJECTED = \"FETCH_MACRO_OVERVIEWS_REJECTED\";\n\nexport const fetchAssetManagers = (): Action => ({\n type: FETCH_ASSET_MANAGERS_REQUESTED,\n});\n\nexport const fetchAssetManagersSuccessful = (\n assetManagers: AssetManagerList[]\n): AssetManagersAction => ({\n type: FETCH_ASSET_MANAGERS_SUCCESSFUL,\n payload: { assetManagers },\n});\n\nexport const fetchAssetManagersRejected = (error: TypeError): ErrorAction => ({\n type: FETCH_ASSET_MANAGERS_REJECTED,\n error,\n});\n\nexport const fetchAssetManager = (id: number): AssetManagersAction => ({\n type: FETCH_ASSET_MANAGER_REQUESTED,\n payload: { id },\n});\n\nexport const fetchAssetManagerSuccessful = (\n assetManager: AssetManager\n): AssetManagersAction => ({\n type: FETCH_ASSET_MANAGER_SUCCESSFUL,\n payload: { assetManager },\n});\n\nexport const fetchAssetManagerRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_ASSET_MANAGER_REJECTED,\n error,\n});\n\nexport const fetchAssetManagerFunds = (id: number): AssetManagersAction => ({\n type: FETCH_ASSET_MANAGER_FUNDS_REQUESTED,\n payload: { id },\n});\n\nexport const fetchAssetManagerFundsSuccessful = (\n funds: AssetManagerFund[],\n id: number\n): AssetManagersAction => ({\n type: FETCH_ASSET_MANAGER_FUNDS_SUCCESSFUL,\n payload: { funds, id },\n});\n\nexport const fetchAssetManagerFundsRejected = (\n error?: TypeError\n): ErrorAction => ({\n type: FETCH_ASSET_MANAGER_FUNDS_REJECTED,\n error,\n});\n\nexport const fetchAssetManagerNews = (id: number): AssetManagersAction => ({\n type: FETCH_ASSET_MANAGER_NEWS_REQUESTED,\n payload: { id },\n});\n\nexport const fetchAssetManagerNewsSuccessful = (\n news: News[],\n id: number\n): AssetManagersAction => ({\n type: FETCH_ASSET_MANAGER_NEWS_SUCCESSFUL,\n payload: { news, id },\n});\n\nexport const fetchAssetManagerNewsRejected = (\n error?: TypeError\n): ErrorAction => ({\n type: FETCH_ASSET_MANAGER_NEWS_REJECTED,\n error,\n});\n\nexport const fetchSingleAssetManagerNews = (\n id: number\n): AssetManagersAction => ({\n type: FETCH_SINGLE_ASSET_MANAGER_NEWS_REQUESTED,\n payload: { id },\n});\n\nexport const fetchSingleAssetManagerNewsSuccessful = (\n singleNews: News\n): AssetManagersAction => ({\n type: FETCH_SINGLE_ASSET_MANAGER_NEWS_SUCCESSFUL,\n payload: { singleNews },\n});\n\nexport const fetchSingleAssetManagerNewsRejected = (\n error: TypeError\n): ErrorAction => ({\n type: FETCH_SINGLE_ASSET_MANAGER_NEWS_REJECTED,\n error,\n});\n\nexport const fetchTopAssetManagerFunds = (id: number): AssetManagersAction => ({\n type: FETCH_TOP_ASSET_MANAGER_FUNDS_REQUESTED,\n payload: { id },\n});\n\nexport const fetchTopAssetManagerFundsSuccessful = (\n funds: AssetManagerFund[],\n id: number\n): AssetManagersAction => ({\n type: FETCH_TOP_ASSET_MANAGER_FUNDS_SUCCESSFUL,\n payload: { funds, id },\n});\n\nexport const fetchTopAssetManagerFundsRejected = (\n error?: TypeError\n): ErrorAction => ({\n type: FETCH_TOP_ASSET_MANAGER_FUNDS_REJECTED,\n error,\n});\n\nexport const saveAssetManager = (\n values: AssetManager,\n meta?: Meta\n): AssetManagersAction => ({\n type: SAVE_ASSET_MANAGER_REQUESTED,\n payload: { values, meta },\n});\n\nexport const saveAssetManagerSuccessful = (): Action => ({\n type: SAVE_ASSET_MANAGER_SUCCESSFUL,\n});\n\nexport const saveAssetManagerRejected = (error?: TypeError): ErrorAction => ({\n type: SAVE_ASSET_MANAGER_REJECTED,\n error,\n});\n\nexport const addAssetManagerNews = (\n values: News,\n meta: Meta\n): AssetManagersAction => ({\n type: ADD_ASSET_MANAGER_NEWS_REQUESTED,\n payload: { values, meta },\n});\n\nexport const addAssetManagerNewsSuccessful = (): Action => ({\n type: ADD_ASSET_MANAGER_NEWS_SUCCESSFUL,\n});\n\nexport const addAssetManagerNewsRejected = (\n error?: TypeError\n): ErrorAction => ({\n type: ADD_ASSET_MANAGER_NEWS_REJECTED,\n error,\n});\n\nexport const editAssetManagerNews = (\n values: News,\n meta: Meta\n): AssetManagersAction => ({\n type: EDIT_ASSET_MANAGER_NEWS_REQUESTED,\n payload: { values, meta },\n});\n\nexport const editAssetManagerNewsSuccessful = (): Action => ({\n type: EDIT_ASSET_MANAGER_NEWS_SUCCESSFUL,\n});\n\nexport const editAssetManagerNewsRejected = (\n error?: TypeError\n): ErrorAction => ({\n type: EDIT_ASSET_MANAGER_NEWS_REJECTED,\n error,\n});\n\nexport const removeAssetManagerNews = (id: number): AssetManagersAction => ({\n type: REMOVE_ASSET_MANAGER_NEWS_REQUESTED,\n payload: { id },\n});\n\nexport const removeAssetManagerNewsSuccessful = (): Action => ({\n type: REMOVE_ASSET_MANAGER_NEWS_SUCCESSFUL,\n});\n\nexport const removeAssetManagerNewsRejected = (\n error?: TypeError\n): ErrorAction => ({\n type: REMOVE_ASSET_MANAGER_NEWS_REJECTED,\n error,\n});\n\nexport const fetchMacroOverviews = (): Action => ({\n type: FETCH_MACRO_OVERVIEWS_REQUESTED,\n});\n\nexport const fetchMacroOverviewsSuccessful = (\n macroOverviews: MacroOverviewsList[]\n): AssetManagersAction => ({\n type: FETCH_MACRO_OVERVIEWS_SUCCESSFUL,\n payload: { macroOverviews },\n});\n\nexport const fetchMacroOverviewsRejected = (error: TypeError): ErrorAction => ({\n type: FETCH_MACRO_OVERVIEWS_REJECTED,\n error,\n});\n\nexport default (\n state: AssetManagersState = {\n assetManagers: {},\n assetManagersList: [],\n news: {},\n chartData: {},\n macroOverviewsList: [],\n },\n { type, payload }: AssetManagersAction\n) => {\n switch (type) {\n case FETCH_ASSET_MANAGERS_SUCCESSFUL:\n return {\n ...state,\n assetManagersList: payload.assetManagers,\n };\n case FETCH_MACRO_OVERVIEWS_SUCCESSFUL:\n return {\n ...state,\n macroOverviewsList: payload.macroOverviews,\n };\n case FETCH_ASSET_MANAGER_SUCCESSFUL:\n if (payload.assetManager) {\n return {\n ...state,\n assetManagers: {\n ...state.assetManagers,\n [payload.assetManager.id]: {\n ...state.assetManagers[payload.assetManager.id],\n ...payload.assetManager,\n },\n },\n };\n } else {\n return state;\n }\n case FETCH_ASSET_MANAGER_FUNDS_SUCCESSFUL:\n if (payload.funds && payload.id) {\n return {\n ...state,\n assetManagers: {\n ...state.assetManagers,\n [payload.id]: {\n ...state.assetManagers[payload.id],\n funds: payload.funds,\n },\n },\n };\n } else {\n return state;\n }\n case FETCH_ASSET_MANAGER_NEWS_SUCCESSFUL:\n if (payload.news && payload.id) {\n return {\n ...state,\n assetManagers: {\n ...state.assetManagers,\n [payload.id]: {\n ...state.assetManagers[payload.id],\n news: payload.news,\n },\n },\n };\n } else {\n return state;\n }\n case FETCH_SINGLE_ASSET_MANAGER_NEWS_SUCCESSFUL:\n if (payload.singleNews) {\n return {\n ...state,\n news: {\n ...state.news,\n [payload.singleNews.id]: payload.singleNews,\n },\n };\n } else {\n return state;\n }\n case FETCH_TOP_ASSET_MANAGER_FUNDS_SUCCESSFUL:\n if (payload.funds && payload.id) {\n return {\n ...state,\n assetManagers: {\n ...state.assetManagers,\n [payload.id]: {\n ...state.assetManagers[payload.id],\n topAssetManagerFunds: payload.funds,\n },\n },\n };\n } else {\n return state;\n }\n default:\n return state;\n }\n};\n\nexport const fetchAssetManagersEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_ASSET_MANAGERS_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/company_info/?lang=${lang.getLanguage()}`).pipe(\n mergeMap(({ response }) =>\n of(\n setAssetManagersLoading(false),\n fetchAssetManagersSuccessful(response)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_ASSET_MANAGERS_REQUESTED)\n )\n ),\n catchError(error =>\n of(setAssetManagersLoading(false), fetchAssetManagersRejected(error))\n )\n )\n )\n );\n\nexport const fetchMacroOverviewsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_MACRO_OVERVIEWS_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/macro_overviews/?lang=${lang.getLanguage()}`).pipe(\n mergeMap(({ response }) =>\n of(\n setMacroOverviewsLoading(false),\n fetchMacroOverviewsSuccessful(response)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_MACRO_OVERVIEWS_REQUESTED)\n )\n ),\n catchError(error =>\n of(setMacroOverviewsLoading(false), fetchMacroOverviewsRejected(error))\n )\n )\n )\n );\n\nexport const fetchAssetManagerEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_ASSET_MANAGER_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(\n `${API_URL}/company_info/${payload.id}/?lang=${lang.getLanguage()}`,\n {\n pragma: \"no-cache\",\n }\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n fetchAssetManagerSuccessful(response),\n setAssetManagerInfoLoading(false)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_ASSET_MANAGER_REQUESTED)\n )\n ),\n catchError(error =>\n of(\n setAssetManagerInfoLoading(false),\n fetchAssetManagerRejected(error)\n )\n )\n )\n )\n );\n\nexport const fetchAssetManagerFundsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_ASSET_MANAGER_FUNDS_REQUESTED),\n mergeMap(({ payload }) => {\n let queryParams = getAssetManagerFundsQueryParams(state.value.form);\n if (queryParams.indexOf(\"ordering\") === -1) {\n queryParams += \"&ordering=-ranking_points\";\n }\n\n return ajax\n .get(`${API_URL}/company_funds/${payload.id}/${queryParams}`)\n .pipe(\n mergeMap(({ response }) =>\n of(\n setFundsTableLoading(false),\n setFundsTableTotal(response.count),\n fetchAssetManagerFundsSuccessful(response.results, payload.id)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_ASSET_MANAGER_FUNDS_REQUESTED)\n )\n ),\n catchError(error =>\n of(\n setFundsTableLoading(false),\n fetchAssetManagerFundsRejected(error)\n )\n )\n );\n })\n );\n\nexport const fetchAssetManagerNewsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_ASSET_MANAGER_NEWS_REQUESTED),\n mergeMap(({ payload }) => {\n return ajax\n .get(\n `${API_URL}/company_news/?company_info=${\n payload.id\n }&lang=${lang.getLanguage()}`\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n setAssetManagerNewsLoading(false),\n fetchAssetManagerNewsSuccessful(response.results, payload.id)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_ASSET_MANAGER_NEWS_REQUESTED)\n )\n ),\n catchError(error =>\n of(\n setAssetManagerNewsLoading(false),\n fetchAssetManagerNewsRejected(error)\n )\n )\n );\n })\n );\n\nexport const fetchSingleAssetManagerNewsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_SINGLE_ASSET_MANAGER_NEWS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax.get(`${API_URL}/company_news/${payload.id}/`).pipe(\n mergeMap(({ response }) =>\n of(\n setAssetManagerNewsLoading(false),\n fetchSingleAssetManagerNewsSuccessful(response)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(\n ({ type }) => type === FETCH_SINGLE_ASSET_MANAGER_NEWS_REQUESTED\n )\n )\n ),\n catchError(error =>\n of(\n setAssetManagerNewsLoading(false),\n fetchSingleAssetManagerNewsRejected(error)\n )\n )\n )\n )\n );\n\nexport const fetchTopAssetManagerFundsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_TOP_ASSET_MANAGER_FUNDS_REQUESTED),\n mergeMap(({ payload }) => {\n if (payload.id) {\n return ajax.get(`${API_URL}/top_company_funds/${payload.id}/`).pipe(\n mergeMap(({ response }) =>\n of(\n setTopAssetManagerFundsLoading(false),\n fetchTopAssetManagerFundsSuccessful(response.results, payload.id)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(\n ({ type }) => type === FETCH_TOP_ASSET_MANAGER_FUNDS_REQUESTED\n )\n )\n ),\n catchError(error =>\n of(\n setTopAssetManagerFundsLoading(false),\n fetchTopAssetManagerFundsRejected(error)\n )\n )\n );\n } else {\n return of(\n setTopAssetManagerFundsLoading(false),\n fetchTopAssetManagerFundsRejected()\n );\n }\n })\n );\n\nexport const saveAssetManagerEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SAVE_ASSET_MANAGER_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta | any = payload.meta || {};\n if (payload.values) {\n const form = state.value.form.assetManagerProfile;\n const macroOverviewForm = state.value.form.macroOverview;\n const selectedFundsForm = state.value.form.selectedFunds;\n const changedValues = getChangedValues(\n payload.values,\n form,\n macroOverviewForm,\n selectedFundsForm\n );\n\n updateEsg(changedValues);\n updatePortfolioManagers(changedValues);\n updateMacroOverview(changedValues);\n\n return ajax\n .patch(\n `${API_URL}/company_info/${\n state.value.domain.auth.assetManagerId\n }/?lang=${lang.getLanguage()}`,\n { ...changedValues },\n { ...getReqOptions(), pragma: \"no-cache\" }\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(\n saveAssetManagerSuccessful(),\n fetchAssetManager(state.value.domain.auth.assetManagerId)\n );\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === SAVE_ASSET_MANAGER_REQUESTED)\n )\n ),\n catchError(error => {\n if (reject) reject(error);\n return of(saveAssetManagerRejected(error));\n })\n );\n } else {\n if (reject) reject();\n return of(saveAssetManagerRejected());\n }\n })\n );\n\nexport const addAssetManagerNewsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(ADD_ASSET_MANAGER_NEWS_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n const { values } = payload;\n if (state.value.domain.auth.assetManagerId) {\n const data = {\n ...values,\n company_info: state.value.domain.auth.assetManagerId,\n ...(values.date ? { date: values.date } : {}),\n ...(values.lang ? { lang: values.lang.value } : {}),\n };\n\n return ajax\n .post(\n `${API_URL}/company_news/?lang=${lang.getLanguage()}`,\n data,\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(\n setAmNewsModalUploading(false),\n addAssetManagerNewsSuccessful()\n );\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === ADD_ASSET_MANAGER_NEWS_REQUESTED)\n )\n ),\n catchError(error => {\n if (reject) reject(error);\n return of(\n setAmNewsModalUploading(false),\n addAssetManagerNewsRejected(error)\n );\n })\n );\n } else {\n if (reject) reject();\n return of(\n setAmNewsModalUploading(false),\n addAssetManagerNewsRejected()\n );\n }\n })\n );\n\nexport const editAssetManagerNewsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(EDIT_ASSET_MANAGER_NEWS_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n const { values } = payload;\n if (state.value.domain.auth.assetManagerId) {\n Object.keys(values).forEach(key => {\n if (\n values[key] === null ||\n (key === \"image\" && !values[key].base64_string) ||\n (key === \"pdf_file\" && !values[key].base64_string)\n ) {\n delete values[key];\n }\n });\n\n const data = {\n ...values,\n company_info: state.value.domain.auth.assetManagerId,\n ...(values.lang ? { lang: values.lang.value } : {}),\n };\n\n return ajax\n .patch(`${API_URL}/company_news/${values.id}/`, data, getReqOptions())\n .pipe(\n mergeMap(() => {\n if (resolve) resolve();\n return of(\n setAmNewsModalUploading(false),\n editAssetManagerNewsSuccessful()\n );\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === EDIT_ASSET_MANAGER_NEWS_REQUESTED)\n )\n ),\n catchError(error => {\n if (reject) reject(error);\n return of(\n setAmNewsModalUploading(false),\n editAssetManagerNewsRejected(error)\n );\n })\n );\n } else {\n if (reject) reject();\n return of(\n setAmNewsModalUploading(false),\n editAssetManagerNewsRejected()\n );\n }\n })\n );\n\nexport const removeAssetManagerNewsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(REMOVE_ASSET_MANAGER_NEWS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .delete(`${API_URL}/company_news/${payload.id}/`, getReqOptions())\n .pipe(\n mergeMap(() =>\n of(\n addSuccessToast(lang.assetManagerDashboard.newsRemoved),\n fetchAssetManagerNews(state.value.domain.auth.assetManagerId),\n removeAssetManagerNewsSuccessful()\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === REMOVE_ASSET_MANAGER_NEWS_REQUESTED)\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.assetManagerDashboard.errors.default),\n removeAssetManagerNewsRejected(error)\n )\n )\n )\n )\n );\n","import { Action, ErrorAction } from \"../domain/types\";\nimport { AppAction, AppState } from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, mergeMap } from \"rxjs/operators\";\n\nimport { API_URL } from \"./../domain/config\";\nimport { ajax } from \"rxjs/ajax\";\nimport { getFormattedDate } from \"../../utils/formats\";\nimport { lang } from \"../../lang/lang\";\nimport { ofType } from \"redux-observable\";\n\nconst SET_APP_LOADING = \"SET_APP_LOADING\";\nconst SET_LICENSE_LOADING = \"SET_LICENSE_LOADING\";\nconst SET_IS_INITIALIZED = \"SET_IS_INITIALIZED\";\nconst SET_CURRENT_LANG = \"SET_CURRENT_LANG\";\nconst SET_COOKIE_INFO_VISIBILITY = \"SET_COOKIE_INFO_VISIBILITY\";\nconst FETCH_RECORD_DATE_REQUESTED = \"FETCH_RECORD_DATE_REQUESTED\";\nconst FETCH_RECORD_DATE_SUCCESSFUL = \"FETCH_RECORD_DATE_SUCCESSFUL\";\nconst FETCH_RECORD_DATE_REJECTED = \"FETCH_RECORD_DATE_REJECTED\";\n\nexport const setAppLoading = (value: boolean): AppAction => ({\n type: SET_APP_LOADING,\n payload: { value },\n});\n\nexport const setLicenseLoading = (value: boolean): AppAction => ({\n type: SET_LICENSE_LOADING,\n payload: { value },\n});\n\nexport const setIsInitialized = (value: boolean): AppAction => ({\n type: SET_IS_INITIALIZED,\n payload: { value },\n});\n\nexport const setCurrentLang = (value: string): AppAction => ({\n type: SET_CURRENT_LANG,\n payload: { value },\n});\n\nexport const setCookieInfoVisibility = (value: boolean): AppAction => ({\n type: SET_COOKIE_INFO_VISIBILITY,\n payload: { value },\n});\n\nexport const fetchRecordDate = (): Action => ({\n type: FETCH_RECORD_DATE_REQUESTED,\n});\n\nconst fetchRecordDateSuccessful = (date: string): AppAction => ({\n type: FETCH_RECORD_DATE_SUCCESSFUL,\n payload: { date },\n});\n\nconst fetchRecordDateRejected = (error: TypeError): ErrorAction => ({\n type: FETCH_RECORD_DATE_REJECTED,\n error,\n});\n\nexport default (\n state: AppState = {\n isAppLoading: true,\n isLicenseLoading: true,\n isInitialized: false,\n lang: lang.getLanguage(),\n isCookieInfoVisible: true,\n recordDate: \"31.10.2019\",\n recordDateUTC: 1569888000000,\n },\n { type, payload }: AppAction\n) => {\n switch (type) {\n case SET_APP_LOADING:\n return {\n ...state,\n isAppLoading: payload.value,\n };\n case SET_LICENSE_LOADING:\n return {\n ...state,\n isLicenseLoading: payload.value,\n };\n case SET_IS_INITIALIZED:\n return {\n ...state,\n isInitialized: payload.value,\n };\n case SET_CURRENT_LANG:\n return {\n ...state,\n lang: payload.value,\n };\n case SET_COOKIE_INFO_VISIBILITY:\n return {\n ...state,\n isCookieInfoVisible: payload.value,\n };\n case FETCH_RECORD_DATE_SUCCESSFUL:\n const dateParts = payload.date.split(\".\");\n return {\n ...state,\n recordDate: payload.date,\n recordDateUTC: Date.UTC(\n parseInt(dateParts[2]),\n parseInt(dateParts[1]) - 1,\n parseInt(dateParts[0])\n ),\n };\n default:\n return state;\n }\n};\n\nexport const fetchRecordDateEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_RECORD_DATE_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/record_date/`).pipe(\n mergeMap(({ response }) =>\n of(fetchRecordDateSuccessful(getFormattedDate(response.result)))\n ),\n catchError(error => of(fetchRecordDateRejected(error)))\n )\n )\n );\n","import { change } from \"redux-form\";\nimport { isSurveyPage } from \"./app\";\nimport { store } from \"../redux\";\nimport urls from \"./urls\";\nimport { StateValue } from \"../redux/types\";\n\nexport const scrollSurvey = () => {\n const surveyForm = document.getElementById(\"survey\");\n if (surveyForm) {\n surveyForm.scrollIntoView({ behavior: \"smooth\" });\n }\n};\n\nexport const setSurveyValues = questions => {\n questions?.forEach(({ id, type, value, sub_questions }) => {\n if (type !== \"table\" && type !== \"row\" && type !== \"list\") {\n if (type === \"radio\") {\n store.dispatch(change(\"survey\", `answer-${id}`, value?.value || value));\n } else if (type === \"text-list-element\") {\n for (let i = 0; i < 4; i++) {\n store.dispatch(change(\"survey\", `answer-${id}-${i}`, value[i]));\n }\n } else {\n store.dispatch(change(\"survey\", `answer-${id}`, value));\n }\n }\n if (sub_questions.length > 0) {\n setSurveyValues(sub_questions);\n }\n });\n};\n\nconst isSubquestionAnswered = (sub_questions, values) => {\n let isAnswered = false;\n let index = 0;\n\n while (isAnswered === false && index < sub_questions.length) {\n const item = sub_questions[index];\n const length = item.sub_questions.length;\n\n if (length > 0) {\n isAnswered = isSubquestionAnswered(item.sub_questions, values);\n } else if (length === 0 && values && values[`answer-${item.id}`]) {\n isAnswered = true;\n }\n index++;\n }\n\n return isAnswered;\n};\n\nexport const setSurveyAnswers = (questions, form) => {\n const values = {};\n questions?.forEach(({ id, super_question_id, sub_questions }) => {\n if (super_question_id === null && form) {\n values[id] =\n sub_questions.length > 0\n ? isSubquestionAnswered(sub_questions, form)\n : form[`answer-${id}`];\n }\n });\n return values;\n};\n\nexport const setSurveyRequiredAnswersValues = (questions, form) => {\n const values = {};\n questions?.filter(q => q.required).forEach(({ id, super_question_id, sub_questions }) => {\n if (super_question_id === null && form) {\n values[id] =\n sub_questions.length > 0\n ? isSubquestionAnswered(sub_questions, form)\n : true;\n }\n });\n return values;\n};\n\nexport const getAllPages = (survey, maxPage) => {\n let allPages = true;\n for (let i = 1; i < maxPage; i++) {\n if (!survey[i]) allPages = false;\n }\n return allPages;\n};\n\nexport const getAllQuestions = (survey, maxPage) => {\n const questions = [];\n for (let i = 1; i <= maxPage; i++) {\n if (survey[i]) questions.push(...survey[i].questions);\n }\n return questions;\n};\n\nexport const getSurveyLink = values =>\n isSurveyPage() && values[\"answer-15\"] ? values[\"answer-15\"] : \"\";\n\nexport const getSurveyType = () => {\n const path = window.location.pathname;\n let type = \"esg-fund\";\n\n if (urls.SURVEY_ESG_COMPANY.reg.test(path)) {\n type = \"esg-company\"\n }\n if (urls.SURVEY_ESG_FUND.reg.test(path)) {\n type = \"esg-fund\"\n }\n if (urls.SURVEY_EQUITY_FUND.reg.test(path)) {\n type = \"esg-equity-fund\";\n }\n if (urls.SURVEY_SOVEREIGN_BOND_FUND.reg.test(path)) {\n type = \"esg-sovereign-bond-fund\";\n }\n if (urls.SURVEY_CORPORATE_BOND_FUND.reg.test(path)) {\n type = \"esg-corporate-bond-fund\";\n }\n if (urls.SURVEY_AGGREGATE_BOND_FUND.reg.test(path)) {\n type = \"esg-aggregate-bond-fund\";\n }\n if (urls.SURVEY_MULTI_ASSET_FUND.reg.test(path)) {\n type = \"esg-multi-asset-fund\";\n }\n if (urls.DEKA_SURVEY.reg.test(path)) {\n type = \"deka-esg\";\n }\n\n return type;\n};\n\nexport const getIsinId = ({ value }: StateValue) => {\n const { version } = value?.domain?.survey;\n let isinId = \"\";\n // eslint-disable-next-line no-restricted-globals\n isinId = version?.toString() || new URL(location.href).searchParams.get('isins_versions');\n\n return isinId;\n}\n\nexport const getAnsweredCount = values => {\n let counter = 0;\n Object.keys(values).forEach(key => values[key] && counter++);\n return counter;\n};\n","import { AssetManagerDetailsAction, AssetManagerDetailsState } from \"./types\";\n\nconst SET_TOP_ASSET_MANAGER_FUNDS_VISIBILITY = \"SET_TOP_ASSET_MANAGER_FUNDS_VISIBILITY\";\nconst SET_ASSET_MANAGER_INFO_LOADING = \"SET_ASSET_MANAGER_INFO_LOADING\";\nconst SET_ASSET_MANAGER_NEWS_LOADING = \"SET_ASSET_MANAGER_NEWS_LOADING\";\nconst SET_TOP_ASSET_MANAGER_FUNDS_LOADING = \"SET_TOP_ASSET_MANAGER_FUNDS_LOADING\";\nconst SET_TOP_ASSET_MANAGER_FUND_ID = \"SET_TOP_ASSET_MANAGER_FUND_ID\";\nconst SET_MACRO_OVERVIEWS_LOADING = \"SET_MACRO_OVERVIEWS_LOADING\";\n\nexport const setTopAssetManagerFundsVisibility = (\n value: boolean\n): AssetManagerDetailsAction => ({\n type: SET_TOP_ASSET_MANAGER_FUNDS_VISIBILITY,\n payload: { value }\n});\n\nexport const setAssetManagerInfoLoading = (\n value: boolean\n): AssetManagerDetailsAction => ({\n type: SET_ASSET_MANAGER_INFO_LOADING,\n payload: { value }\n});\n\nexport const setAssetManagerNewsLoading = (\n value: boolean\n): AssetManagerDetailsAction => ({\n type: SET_ASSET_MANAGER_NEWS_LOADING,\n payload: { value }\n});\n\nexport const setTopAssetManagerFundsLoading = (\n value: boolean\n): AssetManagerDetailsAction => ({\n type: SET_TOP_ASSET_MANAGER_FUNDS_LOADING,\n payload: { value }\n});\n\nexport const setTopAssetManagerFundId = (\n value: number\n): AssetManagerDetailsAction => ({\n type: SET_TOP_ASSET_MANAGER_FUND_ID,\n payload: { value }\n});\n\nexport const setMacroOverviewsLoading = (\n value: boolean\n): AssetManagerDetailsAction => ({\n type: SET_MACRO_OVERVIEWS_LOADING,\n payload: { value }\n});\n\nexport default (\n state: AssetManagerDetailsState = {\n isAssetManagerFundsLoading: true,\n isAssetManagerInfoLoading: true,\n isAssetManagerNewsLoading: true,\n isTopAssetManagerFundsVisible: false,\n isTopAssetManagerFundsLoading: true,\n topAssetManagerFundId: null,\n isMacroOverviewsLoading: true,\n },\n { type, payload }: AssetManagerDetailsAction\n) => {\n switch (type) {\n case SET_TOP_ASSET_MANAGER_FUNDS_VISIBILITY:\n return {\n ...state,\n isTopAssetManagerFundsVisible: payload.value\n };\n case SET_ASSET_MANAGER_INFO_LOADING:\n return {\n ...state,\n isAssetManagerInfoLoading: payload.value\n };\n case SET_ASSET_MANAGER_NEWS_LOADING:\n return {\n ...state,\n isAssetManagerNewsLoading: payload.value\n };\n case SET_TOP_ASSET_MANAGER_FUNDS_LOADING:\n return {\n ...state,\n isTopAssetManagerFundsLoading: payload.value\n };\n case SET_TOP_ASSET_MANAGER_FUND_ID:\n return {\n ...state,\n topAssetManagerFundId: payload.value\n };\n case SET_MACRO_OVERVIEWS_LOADING:\n return {\n ...state,\n isMacroOverviewsLoading: payload.value\n };\n default:\n return state;\n }\n};\n","import { Redirect, Route } from \"react-router-dom\";\nimport { aifParams, yourAifParams } from \"../components/funds/aifFunds/config\";\nimport { change, destroy, reset } from \"redux-form\";\nimport { cleanSurvey, fetchSurvey } from \"../redux/domain/survey\";\nimport { confirmUser, cookies, getLoggedInUser } from \"../redux/domain/auth\";\nimport {\n fetchAdvancedSearchFunds,\n fetchSelectedFund,\n} from \"../redux/domain/funds/search\";\nimport {\n fetchAifFunds,\n fetchFundAifNews,\n fetchPaidDocument,\n setSelectedAifFunds,\n} from \"../redux/domain/funds/aif\";\nimport {\n fetchAssetManager,\n fetchAssetManagerFunds,\n fetchAssetManagerNews,\n fetchAssetManagers,\n fetchMacroOverviews,\n fetchSingleAssetManagerNews,\n} from \"../redux/domain/assetManagers\";\nimport {\n fetchConferencesList,\n fetchSingleConference,\n} from \"../redux/domain/conferences\";\nimport {\n fetchEmpPeergroups,\n fetchEsgPeergroups,\n} from \"../redux/domain/premium\";\nimport {\n fetchFilterSearchFunds,\n fetchFilterSearchPerfRisk,\n setFilterSearchFundsCount,\n} from \"../redux/domain/funds/filterSearch\";\nimport { fetchHomeFacts, fetchHomeNews } from \"../redux/domain/home\";\nimport { fetchNewsList, fetchSingleNews } from \"../redux/domain/news\";\nimport { fetchReportsList, fetchSingleReport } from \"../redux/domain/reports\";\nimport {\n filterSearchParamsConfig,\n fundsTableParamsConfig,\n newsParamsConfig,\n queryFilters,\n reportsParamsConfig,\n searchParamsConfig,\n} from \"./config\";\nimport {\n getCurrentSearchParams,\n getLangUrl,\n getRedirectLocation,\n isSurveyPage,\n isSurveyPageAllowed,\n} from \"./app\";\nimport {\n setAccountMenuVisibility,\n setLangMenuVisibility,\n setMobileNavVisibility,\n setPublicationsMenuVisibility,\n} from \"../redux/ui/header\";\nimport {\n setAdvancedFundsList,\n setExportDropdownVisibility,\n setExportLoading,\n setFilterFundsList,\n setFilterSearchPerfPeriod,\n setFundsLoading,\n setPerfPeriod,\n} from \"../redux/ui/fundsList\";\nimport {\n setAdvancedSearch,\n setFilterSearch,\n setFilterSearchCountLoading,\n setFilterSearchTab,\n setSearchLoading,\n} from \"../redux/ui/search\";\nimport {\n setAifModalStep,\n setAifSelectedFundId,\n setSelectedAifParams,\n} from \"../redux/ui/aifBenchmarksModal\";\nimport {\n setAssetManagerInfoLoading,\n setAssetManagerNewsLoading,\n setMacroOverviewsLoading,\n setTopAssetManagerFundsVisibility,\n} from \"../redux/ui/assetManagerDetails\";\nimport {\n setComparisonAutocompleteValue,\n setFundsIds,\n} from \"../redux/ui/comparisonModal\";\nimport {\n setComparisonVisibility,\n setDetailsLoading,\n setFundAifNewsLoading,\n} from \"../redux/ui/fundDetails\";\nimport {\n setEmpLoading,\n setEsgLoading,\n setPremiumFormVisibility,\n setPremiumFundSearchVisibility,\n} from \"../redux/ui/premium\";\nimport {\n setFundsTableLoading,\n setFundsTableOrdering,\n setFundsTableTotal,\n} from \"../redux/ui/fundsTable\";\nimport { setHomeFactsLoading, setHomeNewsLoading } from \"../redux/ui/home\";\nimport { setLoginLoading, setLoginVisibility } from \"../redux/ui/login\";\nimport {\n setRegisterLoading,\n setRegisterSuccess,\n setRegisterVisibility,\n} from \"../redux/ui/register\";\nimport {\n setResetPasswordToken,\n setResetPasswordVisibility,\n} from \"../redux/ui/resetPassword\";\nimport { setSurveyLoading, setSurveyPage } from \"../redux/ui/survey\";\n\nimport React from \"react\";\nimport { State } from \"../types\";\nimport { Dispatch, Store } from \"redux\";\nimport { connect } from \"react-redux\";\nimport { fetchAssetManagerStats } from \"../redux/domain/assetManagersCharts\";\nimport { fetchFund } from \"../redux/domain/funds/details\";\nimport { fetchFundsInFocus } from \"../redux/domain/funds/fundsInFocus\";\nimport { fetchRatingInFocus } from \"../redux/domain/funds/ratingInFocus\";\nimport { fetchSavedSearches } from \"../redux/domain/savedSearches\";\nimport { fetchWatchlist } from \"../redux/domain/funds/watchlist\";\nimport { lang } from \"../lang/lang\";\nimport { push } from \"connected-react-router\";\nimport { resetDetailsCharts } from \"../redux/domain/charts\";\nimport { setAmNewsModalVisibility } from \"../redux/ui/assetManagerNewsModal\";\nimport { setAssetManagerChartLoading } from \"../redux/ui/assetManagerCharts\";\nimport { setAssetManagersLoading } from \"../redux/ui/assetManagerList\";\nimport { setConferenceDetailsLoading } from \"../redux/ui/conferenceDetails\";\nimport { setConferenceInfoModalVisibility } from \"../redux/ui/conferenceInfoModal\";\nimport { setConferencesListLoading } from \"../redux/ui/conferencesList\";\nimport { setFundDocumentsVisibility } from \"../redux/ui/fundDocumentsModal\";\nimport { setFundsInFocusLoading } from \"../redux/ui/fundsInFocus\";\nimport { setNewsLoading } from \"../redux/ui/news\";\nimport { setPortfolioManagerModalVisibility } from \"../redux/ui/portfolioManagerModal\";\nimport { setPrimaryCompareFund } from \"../redux/domain/funds/common\";\nimport { setPurchaseModalVisibility } from \"../redux/ui/purchaseModal\";\nimport { setReportDetailsLoading } from \"../redux/ui/reportDetails\";\nimport { setReportsLoading } from \"../redux/ui/reports\";\nimport { setRequestResetPasswordVisibility } from \"../redux/ui/requestResetPassword\";\nimport { setSavedSearchesLoading } from \"../redux/ui/savedSearches\";\nimport { unsubscribe } from \"../redux/domain/contact\";\nimport urls from \"../utils/urls\";\nimport { setLastRoute } from \"../redux/domain/route\";\n\nexport const getIdFromPathnae = pathname =>\n pathname.includes(\"asset-manager-dashboard\")\n ? pathname.match(/\\/\\d+(\\/|$)/) &&\n parseInt(pathname.match(/\\/\\d+(\\/|$)/)[0].replace(\"/\", \"\"), 10)\n : parseInt(pathname.substr(pathname.lastIndexOf(\"/\") + 1), 10);\n\nexport const getUidFromPathname = pathname =>\n pathname.substr(pathname.lastIndexOf(\"/\") + 1);\n\nconst mapStateToProps = ({ domain, router }: State) => ({\n pathname: router.location.pathname,\n isAuthenticated: domain.auth.isAuthenticated,\n isWholesaleUser: domain.auth.isWholesaleUser,\n isAssetManager: domain.auth.isAssetManager,\n assetManagerId: domain.auth.assetManagerId,\n isSurveyPageAllowed: isSurveyPageAllowed(),\n license: domain.auth.license,\n lastRoute: domain.route.lastRoute,\n});\n\nconst mapDispatchToProps = (dispatch: Dispatch) => ({\n onRouteRedirect: () => dispatch(setLastRoute()),\n});\n\nconst PrivateRouteComponent = ({\n onRouteRedirect,\n lastRoute,\n assetManagerId,\n isAuthenticated,\n isWholesaleUser,\n isAssetManager,\n isSurveyPageAllowed,\n license,\n role,\n location = window.location,\n component: Component,\n ...rest\n}) => {\n const id = getIdFromPathnae(location.pathname);\n\n const hasAccess = {\n WITHOUT_LICENSE: isAuthenticated && !license ? true : false,\n WITH_LICENSE: isAuthenticated && license ? true : false,\n USER: isAuthenticated,\n WHOLESALE: isAuthenticated && isWholesaleUser,\n IS_SURVEY_ALLOWED: isAuthenticated && isSurveyPageAllowed,\n ASSET_MANAGER:\n isAuthenticated &&\n isAssetManager &&\n (id !== null && id !== undefined ? assetManagerId === id : false),\n };\n\n let redirectRoute = \"/\";\n if (urls.BENCHMARKS.reg.test(window.location.pathname)) {\n redirectRoute = \"/aif-page\";\n }\n\n const setLastRoute = () => {\n onRouteRedirect();\n };\n\n return (\n \n hasAccess[role] ? (\n \n ) : (\n <>\n \n {setLastRoute()}\n {lastRoute && localStorage.setItem(\"loginModalVisibility\", \"true\")}\n >\n )\n }\n />\n );\n};\n\nexport const PrivateRoute = connect(\n mapStateToProps,\n mapDispatchToProps\n)(PrivateRouteComponent);\n\nexport const updateURLParameter = (url, param, paramVal) => {\n let newAdditionalURL = \"\";\n let tempArray = url.split(\"?\");\n const baseURL = tempArray[0];\n const additionalURL = tempArray[1];\n let temp = \"\";\n if (additionalURL) {\n tempArray = additionalURL.split(\"&\");\n for (var i = 0; i < tempArray.length; i++) {\n if (tempArray[i].split(\"=\")[0] !== param) {\n newAdditionalURL += temp + tempArray[i];\n temp = \"&\";\n }\n }\n }\n\n const rows_txt = temp + \"\" + param + \"=\" + paramVal;\n return baseURL + \"?\" + newAdditionalURL + rows_txt;\n};\n\nconst buildQueryParams = (params, form) => {\n let data = {};\n let queryParams = \"\";\n\n if (form && form.values) {\n params.forEach(({ name, type }) => {\n const value = form.values[name];\n type === \"single\" || type === \"select\"\n ? value &&\n (data[name] =\n name === \"lang\" ? lang.getLanguage() : value[\"value\"] || value)\n : value &&\n (data[name] = Array.from(value, x => x[\"value\"] || x).join(\n `&${queryFilters[name]}=`\n ));\n });\n }\n\n Object.keys(data).forEach(filter => {\n if (data[filter] !== undefined && data[filter] !== \"\") {\n queryParams += `${queryParams === \"\" ? \"?\" : \"&\"}`;\n queryParams += `${queryFilters[filter]}=${data[filter]}`;\n }\n });\n return queryParams;\n};\n\nexport const getNewsQueryParams = (form): string =>\n buildQueryParams(newsParamsConfig.fields, form.news);\n\nexport const getReportsQueryParams = (form): string =>\n buildQueryParams(reportsParamsConfig.fields, form.reports);\n\nexport const getSearchQueryParams = (form): string =>\n buildQueryParams(searchParamsConfig.fields, form.advancedSearch);\n\nexport const getAssetManagerFundsQueryParams = (form): string =>\n buildQueryParams(fundsTableParamsConfig.fields, form.fundsTable);\n\nexport const getFilterSearchQueryParams = (form): string =>\n buildQueryParams(filterSearchParamsConfig.fields, form.filterSearch);\n\nconst getField = (field: string) => parseInt(field, 10) || field;\n\nconst getSingleQueryParams = (name, params, queryParamsConfig, store) => {\n if (params[name]) {\n store.dispatch(\n change(queryParamsConfig.formName, name, getField(params[name]))\n );\n }\n};\n\nconst getSelectQueryParams = (\n name,\n params,\n filters,\n queryParamsConfig,\n store\n) => {\n if (params[name] && filters[name]) {\n filters[name].forEach(filter => {\n if (filter.value === getField(params[name])) {\n store.dispatch(change(queryParamsConfig.formName, name, filter));\n }\n });\n }\n};\n\nconst getMultiQueryParams = (\n name,\n params,\n filters,\n queryParamsConfig,\n store\n) => {\n if (params[name] && filters[name]) {\n let values = [];\n filters[name].forEach(filter =>\n params[name].forEach(\n value =>\n (filter === value || filter.value === getField(value)) &&\n values.push(filter)\n )\n );\n store.dispatch(change(queryParamsConfig.formName, name, values));\n }\n};\n\nconst getFiltersFromQueryParams = (\n searchParams: URLSearchParams,\n queryParamsConfig: any,\n store: Store\n) => {\n const { filters } = store.getState().domain;\n const params = {};\n\n queryParamsConfig.fields.forEach(\n ({ name, type }) =>\n (params[name] =\n type === \"single\" || type === \"select\"\n ? searchParams.get(queryFilters[name])\n : searchParams.getAll(queryFilters[name]))\n );\n\n queryParamsConfig.fields.forEach(({ name, type }) => {\n if (type === \"single\") {\n getSingleQueryParams(name, params, queryParamsConfig, store);\n } else if (type === \"select\") {\n getSelectQueryParams(name, params, filters, queryParamsConfig, store);\n } else if (type === \"multi\") {\n getMultiQueryParams(name, params, filters, queryParamsConfig, store);\n }\n });\n};\n\nexport const getSearchFiltersFromQueryParams = (searchParams, store) =>\n getFiltersFromQueryParams(searchParams, searchParamsConfig, store);\n\nexport const getNewsFiltersFromQueryParams = (searchParams, store) =>\n getFiltersFromQueryParams(searchParams, newsParamsConfig, store);\n\nexport const getReportsFiltersFromQueryParams = (searchParams, store) =>\n getFiltersFromQueryParams(searchParams, reportsParamsConfig, store);\n\nexport const getAssetManagerFundsFromQueryParams = (searchParams, store) =>\n getFiltersFromQueryParams(searchParams, fundsTableParamsConfig, store);\n\nexport const getFilterSearchFromQueryParams = (searchParams, store) =>\n getFiltersFromQueryParams(searchParams, filterSearchParamsConfig, store);\n\nexport const resetAppState = (store: Store) => {\n store.dispatch(setLoginVisibility(false));\n store.dispatch(setRegisterVisibility(false));\n\n window.scrollTo(0, 0);\n store.dispatch(setRegisterLoading(false));\n store.dispatch(setRegisterSuccess(false));\n store.dispatch(setLoginLoading(false));\n store.dispatch(setMobileNavVisibility(false));\n store.dispatch(setRequestResetPasswordVisibility(false));\n store.dispatch(setSearchLoading(false));\n store.dispatch(setDetailsLoading(false));\n store.dispatch(setFundsInFocusLoading(false));\n store.dispatch(setPremiumFormVisibility(false));\n store.dispatch(setFundsTableLoading(false));\n store.dispatch(setPerfPeriod(3));\n store.dispatch(setFilterSearchPerfPeriod(5));\n store.dispatch(setLangMenuVisibility(false));\n store.dispatch(setAccountMenuVisibility(false));\n store.dispatch(setPublicationsMenuVisibility(false));\n store.dispatch(setComparisonVisibility(false));\n store.dispatch(setFundsIds(-1, 0));\n store.dispatch(setFundsIds(-1, 1));\n store.dispatch(setFundsIds(-1, 2));\n store.dispatch(setPrimaryCompareFund(null));\n store.dispatch(setComparisonAutocompleteValue(\"\", 0));\n store.dispatch(setComparisonAutocompleteValue(\"\", 1));\n store.dispatch(setPremiumFundSearchVisibility(false));\n store.dispatch(setTopAssetManagerFundsVisibility(false));\n store.dispatch(setExportDropdownVisibility(false));\n store.dispatch(setExportLoading(false));\n store.dispatch(resetDetailsCharts());\n store.dispatch(reset(\"advancedSearch\"));\n store.dispatch(reset(\"fundsTable\"));\n store.dispatch(reset(\"survey\"));\n store.dispatch(destroy(\"filterSearch\"));\n store.dispatch(setFundsTableTotal(0));\n store.dispatch(setFundsTableOrdering(\"id\"));\n store.dispatch(setFilterSearch(false));\n store.dispatch(setFilterSearchTab(0));\n store.dispatch(setFilterSearchFundsCount(0));\n store.dispatch(setAmNewsModalVisibility(false));\n store.dispatch(setFundDocumentsVisibility(false));\n store.dispatch(setPortfolioManagerModalVisibility(false));\n store.dispatch(setAifModalStep(0));\n store.dispatch(setConferenceInfoModalVisibility(false));\n store.dispatch(setPurchaseModalVisibility(false));\n store.dispatch(setSurveyLoading(true));\n store.dispatch(cleanSurvey());\n store.dispatch(setSurveyPage(1));\n\n if (urls.FILTER_SEARCH_RESULTS.reg.test(window.location.pathname)) {\n store.dispatch(setFilterSearchFundsCount(0));\n }\n};\n\nconst getProps = ({ ...args }) => ({\n store: args.store,\n searchParams: args.searchParams,\n search: args.search,\n prevSearch: args.prevSearch,\n pathname: args.pathname,\n prevPathname: args.prevPathname,\n dispatch: args.store.dispatch,\n funds: args.store.getState().domain.funds,\n selectedFund: args.searchParams.get(\"selectedFund\"),\n isAuthenticated: args.store.getState().domain.auth.isAuthenticated,\n isWholesaleUser: args.store.getState().domain.auth.isWholesaleUser,\n isFilterSearch: args.store.getState().ui.search.isFilterSearch,\n filters: args.store.getState().domain.filters,\n searchResultsParams: args.store.getState().domain.route.searchResultsParams,\n id: getIdFromPathnae(args.pathname),\n uid: getUidFromPathname(args.pathname),\n token: args.pathname.substr(args.pathname.lastIndexOf(\"/\") + 1),\n isInitialized: args.store.getState().ui.app.isInitialized,\n});\n\nexport const onRouteChange = (\n pathname: string,\n search: string,\n store: Store\n): void => {\n const { prevSearch, prevPathname } = store.getState().domain.route;\n const searchParams = new URLSearchParams(search);\n\n resetAppState(store);\n\n const props = getProps({\n store,\n pathname,\n search,\n prevSearch,\n prevPathname,\n searchParams,\n });\n\n props.dispatch(getLoggedInUser());\n\n if (isSurveyPage()) {\n props.dispatch(setSurveyLoading(true));\n props.dispatch(fetchSurvey(1));\n }\n if (urls.HOME.reg.test(pathname)) {\n getCurrentSearchParams().includes(\"lo=1\") &&\n props.dispatch(setLoginVisibility(true));\n getCurrentSearchParams().includes(\"ro=1\") &&\n props.dispatch(setRegisterVisibility(true));\n props.dispatch(setHomeNewsLoading(true));\n props.dispatch(setHomeFactsLoading(true));\n props.dispatch(setNewsLoading(true));\n props.dispatch(fetchHomeNews());\n props.dispatch(fetchHomeFacts());\n props.dispatch(fetchNewsList());\n }\n if (urls.CONFIRM.reg.test(pathname)) {\n props.dispatch(confirmUser(props.token));\n }\n if (urls.UNSUBSCRIBE.reg.test(pathname)) {\n if (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,4}$/i.test(props.token)) {\n props.dispatch(unsubscribe(props.token));\n } else {\n props.dispatch(push(\"/\"));\n }\n }\n if (urls.RESET.reg.test(pathname)) {\n if (props.token) {\n props.dispatch(setResetPasswordToken(props.token));\n props.dispatch(setResetPasswordVisibility(true));\n }\n }\n if (urls.FUNDS_IN_FOCUS.reg.test(pathname)) {\n if (props.funds.fundsInFocus.fundsInFocus.length === 0) {\n props.dispatch(setFundsInFocusLoading(true));\n props.dispatch(fetchFundsInFocus());\n }\n }\n if (urls.RATING_IN_FOCUS.reg.test(pathname)) {\n props.dispatch(fetchRatingInFocus());\n }\n if (urls.WATCHLIST.reg.test(pathname)) {\n props.dispatch(setFundsInFocusLoading(true));\n props.dispatch(fetchWatchlist(false));\n }\n if (urls.NEWS.reg.test(pathname)) {\n newsHandler(props);\n }\n if (urls.REPORTS.reg.test(pathname)) {\n reportsHandler(props);\n }\n if (urls.OIF.reg.test(pathname)) {\n oifHandler(props);\n }\n if (urls.NEWS_DETAILS.reg.test(pathname)) {\n props.dispatch(setNewsLoading(true));\n props.dispatch(fetchSingleNews(props.uid));\n }\n if (urls.REPORTS_DETAILS.reg.test(pathname)) {\n props.dispatch(setReportDetailsLoading(true));\n props.dispatch(fetchSingleReport(props.id));\n }\n if (urls.SEARCH_RESULTS.reg.test(pathname)) {\n searchResultsHandler(props);\n }\n if (urls.FILTER_SEARCH_RESULTS.reg.test(pathname)) {\n props.dispatch(setFilterFundsList(true));\n const int = setInterval(() => {\n if (store.getState().domain.filters.regions.length > 0) {\n filterSearchResultsHandler(props);\n clearInterval(int);\n }\n }, 100);\n }\n if (urls.ADV_SEARCH_RESULTS.reg.test(pathname)) {\n const int = setInterval(() => {\n if (store.getState().domain.filters.peergroups.length > 0) {\n advancedSearchResultsHandler(props);\n clearInterval(int);\n }\n }, 100);\n }\n if (urls.DETAILS.reg.test(pathname)) {\n props.dispatch(setDetailsLoading(true));\n props.dispatch(setFundAifNewsLoading(true));\n props.dispatch(fetchFund(props.id));\n props.dispatch(fetchFundAifNews(props.id));\n props.dispatch(fetchPaidDocument());\n }\n if (urls.PREMIUM.reg.test(pathname)) {\n props.dispatch(setEmpLoading(true));\n props.dispatch(setEsgLoading(true));\n props.dispatch(fetchEmpPeergroups());\n props.dispatch(fetchEsgPeergroups());\n }\n if (urls.SAVED_SEARCHES.reg.test(pathname)) {\n props.dispatch(setSavedSearchesLoading(true));\n props.dispatch(fetchSavedSearches());\n }\n if (urls.ASSET_MANAGERS.reg.test(pathname)) {\n props.dispatch(setAssetManagersLoading(true));\n props.dispatch(setMacroOverviewsLoading(true));\n props.dispatch(fetchAssetManagers());\n props.dispatch(fetchMacroOverviews());\n }\n if (urls.ASSET_MANAGER_DETAILS.reg.test(pathname)) {\n assetManagerDetailsHandler(props);\n }\n if (urls.ASSET_MANAGER_NEWS.reg.test(pathname)) {\n props.dispatch(setAssetManagerNewsLoading(true));\n props.dispatch(fetchSingleAssetManagerNews(props.id));\n }\n if (urls.ASSET_MANAGER_DASHBOARD.reg.test(pathname)) {\n props.dispatch(\n setAssetManagerChartLoading(true, \"allMyProductsChartDashboard\")\n );\n props.dispatch(fetchAssetManagerStats(\"allMyProductsChartDashboard\"));\n }\n if (urls.PROFILE_EDIT.reg.test(pathname)) {\n props.dispatch(setAssetManagerInfoLoading(true));\n props.dispatch(setAssetManagerNewsLoading(true));\n props.dispatch(fetchAssetManager(props.id));\n props.dispatch(fetchAssetManagerNews(props.id));\n }\n if (urls.FUND_RATINGS.reg.test(pathname)) {\n props.dispatch(setAssetManagerInfoLoading(true));\n props.dispatch(fetchAssetManager(props.id));\n fundRatingsHandler(props);\n }\n if (urls.ASSET_MANAGER_STATS.reg.test(pathname)) {\n if (props.isInitialized) {\n props.dispatch(setAssetManagerChartLoading(true, \"allMyProductsChart\"));\n props.dispatch(setAssetManagerChartLoading(true, \"myTop10FundsChart\"));\n props.dispatch(\n setAssetManagerChartLoading(true, \"myProductsInPeergroupChart\")\n );\n props.dispatch(setAssetManagerChartLoading(true, \"top10FundsInSeChart\"));\n props.dispatch(\n setAssetManagerChartLoading(true, \"top10PeergroupsInSeChart\")\n );\n props.dispatch(setAssetManagerChartLoading(true, \"topPeergroupsFund\"));\n props.dispatch(fetchAssetManagerStats(\"allMyProductsChart\"));\n props.dispatch(fetchAssetManagerStats(\"myTop10FundsChart\"));\n props.dispatch(fetchAssetManagerStats(\"myProductsInPeergroupChart\"));\n props.dispatch(fetchAssetManagerStats(\"top10FundsInSeChart\"));\n props.dispatch(fetchAssetManagerStats(\"top10PeergroupsInSeChart\"));\n props.dispatch(fetchAssetManagerStats(\"topPeergroupsFund\"));\n }\n }\n if (urls.ASSET_MANAGER_CONFERENCES.reg.test(pathname)) {\n props.dispatch(setConferencesListLoading(true));\n props.dispatch(fetchConferencesList());\n }\n if (urls.CONFERENCES_LIST_LOADING.reg.test(pathname)) {\n props.dispatch(setConferencesListLoading(true));\n }\n if (urls.CONFERENCES_LIST.reg.test(pathname)) {\n props.dispatch(\n setConferenceInfoModalVisibility(\n cookies.get(\"dont_show_conference_modal\") || true\n )\n );\n props.dispatch(setConferencesListLoading(true));\n props.dispatch(fetchConferencesList());\n }\n if (urls.CONFERENCES_LIST_2.reg.test(pathname)) {\n props.dispatch(setConferencesListLoading(true));\n props.dispatch(fetchConferencesList());\n }\n if (urls.CONFERENCE_DETAILS.reg.test(pathname)) {\n props.dispatch(setConferenceDetailsLoading(true));\n props.dispatch(fetchSingleConference(props.id));\n }\n if (urls.BENCHMARKS.reg.test(pathname)) {\n props.dispatch(setFundsLoading(true));\n props.dispatch(setAdvancedFundsList(false));\n props.dispatch(setAifSelectedFundId(props.id));\n props.dispatch(fetchAifFunds(props.id));\n const int = setInterval(() => {\n const funds = store.getState().domain.funds;\n if (funds.aif.aifFunds.length > 0) {\n funds.aif.aifFunds.map(fund =>\n props.dispatch(setSelectedAifFunds(fund, true))\n );\n aifParams.map(param =>\n props.dispatch(setSelectedAifParams(param, true))\n );\n yourAifParams.map(param =>\n props.dispatch(setSelectedAifParams(param, true))\n );\n clearInterval(int);\n }\n }, 100);\n }\n};\n\nexport const onSearchChange = (\n pathname: string,\n search: string,\n store: Store\n) => {\n const { prevSearch, prevPathname } = store.getState().domain.route;\n const searchParams = new URLSearchParams(search);\n\n const props = getProps({\n store,\n pathname,\n search,\n prevSearch,\n prevPathname,\n searchParams,\n });\n\n if (urls.NEWS.reg.test(pathname)) {\n newsHandler(props);\n } else if (urls.REPORTS.reg.test(pathname)) {\n reportsHandler(props);\n } else if (urls.OIF.reg.test(pathname)) {\n oifHandler(props);\n } else if (urls.SEARCH_RESULTS.reg.test(pathname)) {\n searchResultsHandler(props);\n } else if (urls.FILTER_SEARCH_RESULTS.reg.test(pathname)) {\n props.dispatch(setFilterFundsList(true));\n const int = setInterval(() => {\n if (store.getState().domain.filters.regions.length > 0) {\n filterSearchResultsHandler(props);\n clearInterval(int);\n }\n }, 100);\n } else if (urls.ADV_SEARCH_RESULTS.reg.test(pathname)) {\n const int = setInterval(() => {\n if (store.getState().domain.filters.peergroups.length > 0) {\n advancedSearchResultsHandler(props);\n clearInterval(int);\n }\n }, 100);\n } else if (urls.ASSET_MANAGER_DETAILS.reg.test(pathname)) {\n assetManagerDetailsHandler(props);\n } else if (urls.FUND_RATINGS.reg.test(pathname)) {\n fundRatingsHandler(props);\n }\n};\n\nconst searchResultsHandler = props => {\n if (window.location.search.indexOf(\"?selectedFund=\") !== -1) {\n props.dispatch(setFundsLoading(true));\n props.dispatch(setAdvancedFundsList(false));\n props.dispatch(fetchSelectedFund(parseInt(props.selectedFund, 10)));\n } else {\n props.dispatch(push(`${getLangUrl()}/search-results`));\n }\n};\n\nconst filterSearchResultsHandler = props => {\n getFilterSearchFromQueryParams(props.searchParams, props.store);\n props.dispatch(setFilterSearchCountLoading(true));\n props.dispatch(fetchFilterSearchPerfRisk());\n props.dispatch(setFundsLoading(true));\n props.dispatch(fetchFilterSearchFunds());\n};\n\nconst advancedSearchResultsHandler = props => {\n if (props.isAuthenticated) {\n props.dispatch(setAdvancedFundsList(true));\n props.dispatch(setAdvancedSearch(true));\n getSearchFiltersFromQueryParams(props.searchParams, props.store);\n props.dispatch(setFundsTableLoading(true));\n props.dispatch(fetchAdvancedSearchFunds());\n } else {\n props.dispatch(push(`${getLangUrl()}/search-results`));\n }\n};\n\nconst newsHandler = props => {\n if (props.search === \"\") {\n props.dispatch(push(`${getLangUrl()}/news?page=1&per_page=15`));\n } else {\n const page = props.searchParams.get(\"page\");\n const perPage = props.searchParams.get(\"per_page\");\n getNewsFiltersFromQueryParams(props.searchParams, props.store);\n\n page && props.dispatch(change(\"news\", \"page\", parseInt(page, 10)));\n perPage && props.dispatch(change(\"news\", \"perPage\", parseInt(perPage, 10)));\n props.dispatch(setNewsLoading(true));\n props.dispatch(fetchNewsList());\n }\n};\n\nconst reportsHandler = props => {\n if (props.search === \"\") {\n props.dispatch(push(`${getLangUrl()}/reports?page=1&per_page=15`));\n } else {\n const page = props.searchParams.get(\"page\");\n const perPage = props.searchParams.get(\"per_page\");\n getReportsFiltersFromQueryParams(props.searchParams, props.store);\n\n page && props.dispatch(change(\"reports\", \"page\", parseInt(page, 10)));\n perPage &&\n props.dispatch(change(\"reports\", \"perPage\", parseInt(perPage, 10)));\n props.dispatch(setReportsLoading(true));\n props.dispatch(fetchReportsList());\n }\n};\n\nconst oifHandler = props => {\n props.dispatch(setFundsLoading(true));\n props.dispatch(fetchAifFunds());\n};\n\nconst assetManagerFundsHandler = props => {\n const page = props.searchParams.get(\"page\");\n const perPage = props.searchParams.get(\"per_page\");\n getAssetManagerFundsFromQueryParams(props.searchParams, props.store);\n page && props.dispatch(change(\"fundsTable\", \"page\", parseInt(page, 10)));\n perPage &&\n props.dispatch(change(\"fundsTable\", \"perPage\", parseInt(perPage, 10)));\n props.dispatch(setFundsTableLoading(true));\n props.dispatch(fetchAssetManagerFunds(props.id));\n};\n\nconst assetManagerDetailsHandler = props => {\n if (props.search === \"\") {\n props.dispatch(\n push(`${getLangUrl()}/asset-managers/${props.id}?page=1&per_page=15`)\n );\n } else {\n props.dispatch(setAssetManagerInfoLoading(true));\n props.dispatch(setAssetManagerNewsLoading(true));\n props.dispatch(fetchAssetManager(props.id));\n props.dispatch(fetchAssetManagerNews(props.id));\n\n assetManagerFundsHandler(props);\n }\n};\n\nconst fundRatingsHandler = props => {\n props.search === \"\"\n ? props.dispatch(\n push(\n `${getLangUrl()}/asset-manager-dashboard/${\n props.id\n }/fund-ratings?page=1&per_page=15`\n )\n )\n : assetManagerFundsHandler(props);\n};\n","import { API_URL, getReqOptions } from \"../config\";\nimport {\n Action,\n CompareFund,\n ErrorAction,\n Fund,\n FundsAction,\n FundsSearchState,\n SearchFund,\n} from \"../types\";\nimport { Observable, of } from \"rxjs\";\nimport {\n catchError,\n debounceTime,\n filter,\n mergeMap,\n takeUntil,\n} from \"rxjs/operators\";\nimport { setAutocompleteValue, setSearchLoading } from \"../../ui/search\";\nimport {\n setFUndsListModalVisibility,\n setFundsLoading,\n setSelectedFundLast,\n} from \"../../ui/fundsList\";\nimport { setFundsTableLoading, setFundsTableTotal } from \"../../ui/fundsTable\";\n\nimport { StateValue } from \"../../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { getSearchQueryParams } from \"../../../utils/routing\";\nimport { lang } from \"../../../lang/lang\";\nimport { ofType } from \"redux-observable\";\nimport { setAutocompleteVisibility } from \"../../ui/search\";\nimport { setComparisonAutocompleteLoading } from \"../../ui/comparisonModal\";\nimport { setNextSearch } from \"./../../ui/search\";\nimport { setSearchResultsParams } from \"../route\";\nimport { setSelectedFundPerfPeriod } from \"./../../ui/fundsList\";\n\nconst FETCH_COMPARE_FUNDS_REQUESTED = \"FETCH_COMPARE_FUNDS_REQUESTED\";\nconst FETCH_COMPARE_FUNDS_SUCCESSFUL = \"FETCH_COMPARE_FUNDS_SUCCESSFUL\";\nconst FETCH_COMPARE_FUNDS_REJECTED = \"FETCH_COMPARE_FUNDS_REJECTED\";\n\nconst FETCH_SEARCH_FUNDS_REQUESTED = \"FETCH_SEARCH_FUNDS_REQUESTED\";\nconst FETCH_SEARCH_FUNDS_SUCCESSFUL = \"FETCH_SEARCH_FUNDS_SUCCESSFUL\";\nconst FETCH_SEARCH_FUNDS_REJECTED = \"FETCH_SEARCH_FUNDS_REJECTED\";\n\nconst FETCH_NEXT_SEARCH_FUNDS_REQUESTED = \"FETCH_NEXT_SEARCH_FUNDS_REQUESTED\";\nconst FETCH_NEXT_SEARCH_FUNDS_SUCCESSFUL = \"FETCH_NEXT_SEARCH_FUNDS_SUCCESSFUL\";\nconst FETCH_NEXT_SEARCH_FUNDS_REJECTED = \"FETCH_NEXT_SEARCH_FUNDS_REJECTED\";\n\nconst FETCH_SEARCH_FUNDS_CANCELLED = \"FETCH_SEARCH_FUNDS_CANCELLED\";\n\nconst FETCH_ADVANCED_SEARCH_FUNDS_REQUESTED =\n \"FETCH_ADVANCED_SEARCH_FUNDS_REQUESTED\";\nconst FETCH_ADVANCED_SEARCH_FUNDS_SUCCESSFUL =\n \"FETCH_ADVANCED_SEARCH_FUNDS_SUCCESSFUL\";\nconst FETCH_ADVANCED_SEARCH_FUNDS_REJECTED =\n \"FETCH_ADVANCED_SEARCH_FUNDS_REJECTED\";\n\nconst CLEAR_SEARCH_FUNDS = \"CLEAR_SEARCH_FUNDS\";\nconst SET_SELECTED_FUND = \"SET_SELECTED_FUND\";\nconst SET_ADVANCED_SEARCH_FUNDS = \"SET_ADVANCED_SEARCH_FUNDS\";\nconst SET_SELECTED_TABLE_FUNDS = \"SET_SELECTED_TABLE_FUNDS\";\nconst RESET_SELECTED_TABLE_FUNDS = \"RESET_SELECTED_TABLE_FUNDS\";\n\nconst FETCH_SELECTED_FUND_REQUESTED = \"FETCH_SELECTED_FUND_REQUESTED\";\nconst FETCH_SELECTED_FUND_SUCCESSFUL = \"FETCH_SELECTED_FUND_SUCCESSFUL\";\nconst FETCH_SELECTED_FUND_REJECTED = \"FETCH_SELECTED_FUND_REJECTED\";\n\nconst FETCH_FUNDS_IN_PEERGROUP_REQUESTED = \"FETCH_FUNDS_IN_PEERGROUP_REQUESTED\";\nconst FETCH_FUNDS_IN_PEERGROUP_SUCCESSFUL =\n \"FETCH_FUNDS_IN_PEERGROUP_SUCCESSFUL\";\nconst FETCH_FUNDS_IN_PEERGROUP_REJECTED = \"FETCH_FUNDS_IN_PEERGROUP_REJECTED\";\n\nexport const fetchCompareFunds = (): Action => ({\n type: FETCH_COMPARE_FUNDS_REQUESTED,\n});\n\nexport const fetchCompareFundsSuccessful = (\n funds: CompareFund[]\n): FundsAction => ({\n type: FETCH_COMPARE_FUNDS_SUCCESSFUL,\n payload: { funds },\n});\n\nexport const fetchCompareFundsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_COMPARE_FUNDS_REJECTED,\n error,\n});\n\nexport const fetchSearchFunds = (\n name: string,\n isCompare: boolean\n): FundsAction => ({\n type: FETCH_SEARCH_FUNDS_REQUESTED,\n payload: { name, isCompare },\n});\n\nconst fetchSearchFundsSuccessful = (funds: SearchFund[]): FundsAction => ({\n type: FETCH_SEARCH_FUNDS_SUCCESSFUL,\n payload: { funds },\n});\n\nexport const fetchSearchFundsCancelled = (): Action => ({\n type: FETCH_SEARCH_FUNDS_CANCELLED,\n});\n\nexport const fetchNextSearchFunds = (next: string): FundsAction => ({\n type: FETCH_NEXT_SEARCH_FUNDS_REQUESTED,\n payload: { next },\n});\n\nconst fetchNextSearchFundsSuccessful = (funds: SearchFund[]): FundsAction => ({\n type: FETCH_NEXT_SEARCH_FUNDS_SUCCESSFUL,\n payload: { funds },\n});\n\nconst fetchNextSearchFundsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_NEXT_SEARCH_FUNDS_REJECTED,\n error,\n});\n\nconst fetchSearchFundsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_SEARCH_FUNDS_REJECTED,\n error,\n});\n\nexport const fetchAdvancedSearchFunds = (): Action => ({\n type: FETCH_ADVANCED_SEARCH_FUNDS_REQUESTED,\n});\n\nconst fetchAdvancedSearchFundsSuccessful = (funds: Fund[]): FundsAction => ({\n type: FETCH_ADVANCED_SEARCH_FUNDS_SUCCESSFUL,\n payload: { funds },\n});\n\nconst fetchAdvancedSearchFundsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_ADVANCED_SEARCH_FUNDS_REJECTED,\n error,\n});\n\nexport const clearSearchFunds = (): Action => ({\n type: CLEAR_SEARCH_FUNDS,\n});\n\nexport const setSelectedFund = (fund: SearchFund): FundsAction => ({\n type: SET_SELECTED_FUND,\n payload: { fund },\n});\n\nexport const setAdvancedSearchFunds = (funds: Fund[]): FundsAction => ({\n type: SET_ADVANCED_SEARCH_FUNDS,\n payload: { funds },\n});\n\nexport const setSelectedTableFunds = (\n fund: Fund,\n isChecked: boolean\n): FundsAction => ({\n type: SET_SELECTED_TABLE_FUNDS,\n payload: { fund, isChecked },\n});\n\nexport const resetSelectedTableFunds = (): Action => ({\n type: RESET_SELECTED_TABLE_FUNDS,\n});\n\nexport const fetchSelectedFund = (id: number): FundsAction => ({\n type: FETCH_SELECTED_FUND_REQUESTED,\n payload: { id },\n});\n\nexport const fetchSelectedFundSuccessful = (fund: Fund): FundsAction => ({\n type: FETCH_SELECTED_FUND_SUCCESSFUL,\n payload: { fund },\n});\n\nexport const fetchSelectedFundRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_SELECTED_FUND_REJECTED,\n error,\n});\n\nexport const fetchFundsInPeergroup = (id: number): FundsAction => ({\n type: FETCH_FUNDS_IN_PEERGROUP_REQUESTED,\n payload: { id },\n});\n\nconst fetchFundsInPeergroupSuccessful = (value: number): FundsAction => ({\n type: FETCH_FUNDS_IN_PEERGROUP_SUCCESSFUL,\n payload: { value },\n});\n\nconst fetchFundsInPeergroupRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_FUNDS_IN_PEERGROUP_REJECTED,\n error,\n});\n\nexport default (\n state: FundsSearchState = {\n compareFunds: [],\n searchFunds: [],\n advancedSearchFunds: [],\n selectedTableFunds: {},\n selectedFund: null,\n fundsInPeergroup: null,\n },\n { type, payload }: FundsAction\n) => {\n switch (type) {\n case FETCH_COMPARE_FUNDS_SUCCESSFUL:\n return {\n ...state,\n compareFunds: payload.funds,\n };\n case FETCH_SEARCH_FUNDS_SUCCESSFUL:\n case FETCH_NEXT_SEARCH_FUNDS_SUCCESSFUL:\n return {\n ...state,\n searchFunds: payload.funds,\n };\n case CLEAR_SEARCH_FUNDS:\n return {\n ...state,\n searchFunds: [],\n advancedSearchFunds: [],\n };\n case SET_SELECTED_FUND:\n return {\n ...state,\n selectedFund: payload.fund,\n };\n case SET_ADVANCED_SEARCH_FUNDS:\n return {\n ...state,\n advancedSearchFunds: payload.funds,\n };\n case SET_SELECTED_TABLE_FUNDS:\n if (payload.isChecked) {\n return {\n ...state,\n selectedTableFunds: {\n ...state.selectedTableFunds,\n [payload.fund.id]: payload.fund,\n },\n };\n } else {\n const selectedTableFunds = state.selectedTableFunds;\n if (selectedTableFunds[payload.fund.id]) {\n delete selectedTableFunds[payload.fund.id];\n }\n\n return {\n ...state,\n selectedTableFunds: {\n ...selectedTableFunds,\n },\n };\n }\n case RESET_SELECTED_TABLE_FUNDS:\n return {\n ...state,\n selectedTableFunds: {},\n };\n case FETCH_FUNDS_IN_PEERGROUP_REQUESTED:\n return {\n ...state,\n fundsInPeergroup: null,\n };\n case FETCH_FUNDS_IN_PEERGROUP_SUCCESSFUL:\n return {\n ...state,\n fundsInPeergroup: payload.value,\n };\n default:\n return state;\n }\n};\n\nexport const fetchCompareFundsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_COMPARE_FUNDS_REQUESTED),\n mergeMap(() => {\n const { selectedFund } = state.value.domain.funds.search;\n if (selectedFund !== null) {\n return ajax\n .get(\n `${API_URL}${\n selectedFund.is_aif\n ? \"/aif/funds/\"\n : `/top_funds_for_search/${selectedFund.id}/`\n }`,\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) => {\n const res = selectedFund.is_aif ? response : response.results;\n return of(\n setFundsLoading(false),\n setSelectedFundLast(\n selectedFund.position_vs_peergroup > res.length\n ),\n setSelectedFundPerfPeriod(selectedFund.performance_3y ? 3 : 1),\n setFUndsListModalVisibility(true),\n fetchCompareFundsSuccessful(res)\n );\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_COMPARE_FUNDS_REQUESTED)\n )\n ),\n catchError(error =>\n of(setFundsLoading(false), fetchCompareFundsRejected(error))\n )\n );\n } else {\n return of(setFundsLoading(false), fetchCompareFundsRejected());\n }\n })\n );\n\nexport const fetchSearchFundsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_SEARCH_FUNDS_REQUESTED),\n debounceTime(500),\n mergeMap(({ payload }) =>\n ajax\n .get(\n `${API_URL}/paginated_simple_search/?page=1&search=${encodeURIComponent(\n payload.name\n )}`\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n setNextSearch(response.next),\n setSearchLoading(false),\n setComparisonAutocompleteLoading(false, 0),\n setComparisonAutocompleteLoading(false, 1),\n setAutocompleteVisibility(!payload.isCompare),\n fetchSearchFundsSuccessful([]),\n fetchSearchFundsSuccessful(response.results)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_SEARCH_FUNDS_CANCELLED)\n )\n ),\n catchError(error =>\n of(setSearchLoading(false), fetchSearchFundsRejected(error))\n )\n )\n )\n );\n\nexport const fetchNextSearchFundsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_NEXT_SEARCH_FUNDS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax.get(`${API_URL}${payload.next}`).pipe(\n mergeMap(({ response }) =>\n of(\n setNextSearch(response.next),\n setSearchLoading(false),\n fetchNextSearchFundsSuccessful(\n state.value.domain.funds.search.searchFunds.concat(\n response.results\n )\n )\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_SEARCH_FUNDS_CANCELLED)\n )\n ),\n catchError(error =>\n of(setSearchLoading(false), fetchNextSearchFundsRejected(error))\n )\n )\n )\n );\n\nexport const fetchAdvancedSearchFundsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_ADVANCED_SEARCH_FUNDS_REQUESTED),\n mergeMap(() => {\n const queryParams = getSearchQueryParams(state.value.form);\n\n return ajax\n .get(`${API_URL}/advanced_search/${queryParams}`, getReqOptions())\n .pipe(\n mergeMap(({ response }) =>\n of(\n setSearchLoading(false),\n setFundsTableLoading(false),\n setFundsTableTotal(response.count),\n setAdvancedSearchFunds(response.results),\n setSearchResultsParams(queryParams),\n fetchAdvancedSearchFundsSuccessful(response.results)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(\n ({ type }) => type === FETCH_ADVANCED_SEARCH_FUNDS_REQUESTED\n )\n )\n ),\n catchError(error =>\n of(\n setSearchLoading(false),\n setFundsTableLoading(false),\n fetchAdvancedSearchFundsRejected(error)\n )\n )\n );\n }),\n catchError(error =>\n of(\n setSearchLoading(false),\n setFundsTableLoading(false),\n fetchAdvancedSearchFundsRejected(error)\n )\n )\n );\n\nexport const fetchSelectedFundEpic = (\n action$: Observable\n): Observable | {} =>\n action$.pipe(\n ofType(FETCH_SELECTED_FUND_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(\n `${API_URL}/simple_search/${payload.id}/?lang=${lang.getLanguage()}`\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n setSelectedFund(response),\n setSearchResultsParams(`?selectedFund=${response.id}`),\n setAutocompleteValue(response.name),\n fetchSelectedFundSuccessful(response),\n fetchFundsInPeergroup(response.peergroup),\n fetchCompareFunds()\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_SELECTED_FUND_REQUESTED)\n )\n ),\n catchError(error =>\n of(setFundsLoading(false), fetchSelectedFundRejected(error))\n )\n )\n )\n );\n\nexport const fetchFundsInPeergroupEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_FUNDS_IN_PEERGROUP_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(`${API_URL}/funds_in_peergroup/${payload.id}/`, getReqOptions())\n .pipe(\n mergeMap(({ response }) =>\n of(fetchFundsInPeergroupSuccessful(response.result))\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_FUNDS_IN_PEERGROUP_REQUESTED)\n )\n ),\n catchError(error => of(fetchFundsInPeergroupRejected(error)))\n )\n )\n );\n","import { lang } from \"../lang/lang\";\r\n\r\nexport const BASE_URL = \"https://www.scopeexplorer.com\";\r\nexport const SCOPE_IMAGES_URL =\r\n \"https://www.scopegroup.com/ScopeGroupApi/api/announcement-img?imageName=\";\r\nexport const HOME_VIDEO_URL =\r\n \"https://www.youtube-nocookie.com/embed/toSzVEO5AM8?rel=0&showinfo=0&modestbranding=1&color=white&autoplay=0&controls=1\";\r\nexport const WHOLESALE_VIDEO_URL =\r\n \"https://www.youtube-nocookie.com/embed/oTx53yrC1cE?rel=0&showinfo=0&modestbranding=1&color=white&autoplay=0&controls=1\";\r\n\r\nexport const MAGNOLIA_IMAGES_URL =\r\n window.location.hostname === \"www.scopeexplorer.com\"\r\n ? \"https://scopegroup.com\"\r\n : \"https://staging.scoperatings.com\";\r\n\r\nexport const searchParamsConfig = {\r\n formName: \"advancedSearch\",\r\n fields: [\r\n { name: \"searchPhrase\", type: \"single\" },\r\n { name: \"peergroups\", type: \"multi\" },\r\n { name: \"companies\", type: \"multi\" },\r\n { name: \"universes\", type: \"select\" },\r\n { name: \"rating\", type: \"multi\" },\r\n { name: \"fundSize\", type: \"single\" },\r\n { name: \"fundSizeSign\", type: \"single\" },\r\n { name: \"investmentFocus\", type: \"select\" },\r\n { name: \"mainTranche\", type: \"single\" },\r\n { name: \"page\", type: \"single\" },\r\n { name: \"perPage\", type: \"single\" },\r\n { name: \"ordering\", type: \"single\" },\r\n ],\r\n};\r\n\r\nexport const newsParamsConfig = {\r\n formName: \"news\",\r\n fields: [\r\n { name: \"searchPhrase\", type: \"single\" },\r\n { name: \"lang\", type: \"single\" },\r\n { name: \"page\", type: \"single\" },\r\n { name: \"perPage\", type: \"single\" },\r\n ],\r\n};\r\n\r\nexport const reportsParamsConfig = {\r\n formName: \"reports\",\r\n fields: [\r\n { name: \"lang\", type: \"single\" },\r\n { name: \"page\", type: \"single\" },\r\n { name: \"perPage\", type: \"single\" },\r\n ],\r\n};\r\n\r\nexport const fundsTableParamsConfig = {\r\n formName: \"fundsTable\",\r\n fields: [\r\n { name: \"searchPhrase\", type: \"single\" },\r\n { name: \"page\", type: \"single\" },\r\n { name: \"perPage\", type: \"single\" },\r\n { name: \"ordering\", type: \"single\" },\r\n ],\r\n};\r\n\r\nexport const filterSearchParamsConfig = {\r\n formName: \"filterSearch\",\r\n fields: [\r\n { name: \"regions\", type: \"multi\" },\r\n { name: \"investmentFocus\", type: \"multi\" },\r\n { name: \"srri\", type: \"multi\" },\r\n ],\r\n};\r\n\r\nexport const queryFilters = {\r\n searchPhrase: \"q\",\r\n peergroups: \"p\",\r\n companies: \"c\",\r\n lang: \"lang\",\r\n universes: \"u\",\r\n rating: \"r\",\r\n fundSize: \"s\",\r\n fundSizeSign: \"fs\",\r\n investmentFocus: \"i\",\r\n srri: \"srri\",\r\n regions: \"region\",\r\n mainTranche: \"m\",\r\n page: \"page\",\r\n perPage: \"per_page\",\r\n ordering: \"ordering\",\r\n};\r\n\r\nexport const advancedSearchFields = [\r\n \"peergroups\",\r\n \"investmentFocus\",\r\n \"companies\",\r\n \"fundSize\",\r\n \"fundSizeSign\",\r\n \"universes\",\r\n \"rating\",\r\n \"mainTranche\",\r\n];\r\n\r\nexport const reportsTypes = [\r\n \"monthly_report\",\r\n \"annual_report\",\r\n \"key_information\",\r\n \"fund_prospect\",\r\n \"semi_annual_report\",\r\n \"key_investor\"\r\n];\r\n\r\nexport const getInvestmentFocusLabels = () => [\r\n lang.fund.all,\r\n lang.fund.equity,\r\n lang.fund.fixedIncome,\r\n lang.fund.other,\r\n];\r\n","import { ComparisonModalAction, ComparisonModalState } from \"./types\";\r\n\r\nconst SET_FUNDS_IDS = \"SET_FUNDS_ID\";\r\nconst SET_COMPARISON_LOADING = \"SET_COMPARISON_LOADING\";\r\nconst SET_COMPARISON_AUTOCOMPLETE_VALUE = \"SET_COMPARISON_AUTOCOMPLETE_VALUE\";\r\nconst SET_COMPARISON_AUTOCOMPLETE_LOADING =\r\n \"SET_COMPARISON_AUTOCOMPLETE_LOADING\";\r\nconst SET_COMPARISON_AUTOCOMPLETE_VISIBILITY =\r\n \"SET_COMPARISON_AUTOCOMPLETE_VISIBILITY\";\r\nconst SET_COMPARISON_ERROR_VISIBILITY = \"SET_COMPARISON_ERROR_VISIBILITY\";\r\n\r\nexport const setFundsIds = (\r\n id: number | null,\r\n index: number\r\n): ComparisonModalAction => ({\r\n type: SET_FUNDS_IDS,\r\n payload: { id, index }\r\n});\r\n\r\nexport const setComparisonLoading = (\r\n value: boolean\r\n): ComparisonModalAction => ({\r\n type: SET_COMPARISON_LOADING,\r\n payload: { value }\r\n});\r\n\r\nexport const setComparisonAutocompleteValue = (\r\n value: string,\r\n index: number\r\n): ComparisonModalAction => ({\r\n type: SET_COMPARISON_AUTOCOMPLETE_VALUE,\r\n payload: { value, index }\r\n});\r\n\r\nexport const setComparisonAutocompleteLoading = (\r\n value: boolean,\r\n index: number\r\n): ComparisonModalAction => ({\r\n type: SET_COMPARISON_AUTOCOMPLETE_LOADING,\r\n payload: { value, index }\r\n});\r\n\r\nexport const setComparisonAutocompleteVisibility = (\r\n value: boolean,\r\n index: number\r\n): ComparisonModalAction => ({\r\n type: SET_COMPARISON_AUTOCOMPLETE_VISIBILITY,\r\n payload: { value, index }\r\n});\r\n\r\nexport const setComparisonErrorVisibility = (\r\n value: boolean\r\n): ComparisonModalAction => ({\r\n type: SET_COMPARISON_ERROR_VISIBILITY,\r\n payload: { value }\r\n});\r\n\r\nexport default (\r\n state: ComparisonModalState = {\r\n isLoading: false,\r\n isErrorVisible: false,\r\n fundsIds: [-1, -1, -1],\r\n comparisonAutocomplete: [\r\n {\r\n value: \"\",\r\n isLoading: false,\r\n isVisible: false\r\n },\r\n {\r\n value: \"\",\r\n isLoading: false,\r\n isVisible: false\r\n }\r\n ]\r\n },\r\n { type, payload }: ComparisonModalAction\r\n) => {\r\n switch (type) {\r\n case SET_FUNDS_IDS:\r\n return {\r\n ...state,\r\n fundsIds: state.fundsIds.map((item, index) => {\r\n if (index !== payload.index) return item;\r\n return payload.id;\r\n })\r\n };\r\n case SET_COMPARISON_LOADING:\r\n return {\r\n ...state,\r\n isLoading: payload.value\r\n };\r\n case SET_COMPARISON_AUTOCOMPLETE_VALUE:\r\n return {\r\n ...state,\r\n comparisonAutocomplete: state.comparisonAutocomplete.map(\r\n (item, index) => {\r\n if (index !== payload.index) {\r\n return item;\r\n }\r\n\r\n return {\r\n ...item,\r\n value: payload.value\r\n };\r\n }\r\n )\r\n };\r\n case SET_COMPARISON_AUTOCOMPLETE_LOADING:\r\n return {\r\n ...state,\r\n comparisonAutocomplete: state.comparisonAutocomplete.map(\r\n (item, index) => {\r\n if (index !== payload.index) {\r\n return item;\r\n }\r\n\r\n return {\r\n ...item,\r\n isLoading: payload.value\r\n };\r\n }\r\n )\r\n };\r\n case SET_COMPARISON_AUTOCOMPLETE_VISIBILITY:\r\n return {\r\n ...state,\r\n comparisonAutocomplete: state.comparisonAutocomplete.map(\r\n (item, index) => {\r\n if (index !== payload.index) {\r\n return item;\r\n }\r\n\r\n return {\r\n ...item,\r\n isVisible: payload.value\r\n };\r\n }\r\n )\r\n };\r\n case SET_COMPARISON_ERROR_VISIBILITY:\r\n return {\r\n ...state,\r\n isErrorVisible: payload.value\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { PremiumAction, PremiumState } from \"./types\";\n\nconst SET_PREMIUM_FORM_VISIBILITY = \"SET_PREMIUM_FORM_VISIBILITY\";\nconst SET_EXCLUSIONS_VISIBILITY = \"SET_EXCLUSIONS_VISIBILITY\";\nconst SET_PREMIUM_LOADING = \"SET_PREMIUM_LOADING\";\nconst SET_EXCLUSIONS_LOADING = \"SET_EXCLUSIONS_LOADING\";\nconst SET_ESG_LOADING = \"SET_ESG_LOADING\";\nconst SET_EMP_LOADING = \"SET_EMP_LOADING\";\nconst SET_PREMIUM_PRINT_SECTION = \"SET_PREMIUM_PRINT_SECTION\";\nconst SET_EXCLUSIONS_ID = \"SET_EXCLUSIONS_ID\";\nconst SET_PREMIUM_FUND_SEARCH_VISIBILITY = \"SET_PREMIUM_FUND_SEARCH_VISIBILITY\";\nconst SET_SHOW_ETF_FUNDS = \"SET_SHOW_ETF_FUNDS\";\n\nexport const setPremiumFormVisibility = (value: boolean): PremiumAction => ({\n type: SET_PREMIUM_FORM_VISIBILITY,\n payload: { value },\n});\n\nexport const setExclusionsVisibility = (value: boolean): PremiumAction => ({\n type: SET_EXCLUSIONS_VISIBILITY,\n payload: { value },\n});\n\nexport const setPremiumLoading = (value: boolean): PremiumAction => ({\n type: SET_PREMIUM_LOADING,\n payload: { value },\n});\n\nexport const setExclusionsLoading = (value: boolean): PremiumAction => ({\n type: SET_EXCLUSIONS_LOADING,\n payload: { value },\n});\n\nexport const setEsgLoading = (value: boolean): PremiumAction => ({\n type: SET_ESG_LOADING,\n payload: { value },\n});\n\nexport const setEmpLoading = (value: boolean): PremiumAction => ({\n type: SET_EMP_LOADING,\n payload: { value },\n});\n\nexport const setPremiumPrintSection = (value: number): PremiumAction => ({\n type: SET_PREMIUM_PRINT_SECTION,\n payload: { value },\n});\n\nexport const setExclusionsId = (value: number): PremiumAction => ({\n type: SET_EXCLUSIONS_ID,\n payload: { value },\n});\n\nexport const setPremiumFundSearchVisibility = (\n value: boolean\n): PremiumAction => ({\n type: SET_PREMIUM_FUND_SEARCH_VISIBILITY,\n payload: { value },\n});\n\nexport const setShowEtfFunds = (value: boolean): PremiumAction => ({\n type: SET_SHOW_ETF_FUNDS,\n payload: { value },\n});\n\nexport default (\n state: PremiumState = {\n isPremiumFormVisible: false,\n isPremiumFundSearchVisible: false,\n isExclusionsVisible: false,\n isLoading: false,\n isExclusionsLoading: false,\n isEsgLoading: true,\n isEmpLoading: true,\n premiumPrintSection: 0,\n exclusionsId: null,\n showEtfFunds: false,\n },\n { type, payload }: PremiumAction\n) => {\n switch (type) {\n case SET_PREMIUM_FORM_VISIBILITY:\n return {\n ...state,\n isPremiumFormVisible: payload.value,\n };\n case SET_EXCLUSIONS_VISIBILITY:\n return {\n ...state,\n isExclusionsVisible: payload.value,\n };\n case SET_PREMIUM_LOADING:\n return {\n ...state,\n isLoading: payload.value,\n };\n case SET_EXCLUSIONS_LOADING:\n return {\n ...state,\n isExclusionsLoading: payload.value,\n };\n case SET_ESG_LOADING:\n return {\n ...state,\n isEsgLoading: payload.value,\n };\n case SET_EMP_LOADING:\n return {\n ...state,\n isEmpLoading: payload.value,\n };\n case SET_PREMIUM_PRINT_SECTION:\n return {\n ...state,\n premiumPrintSection: payload.value,\n };\n case SET_EXCLUSIONS_ID:\n return {\n ...state,\n exclusionsId: payload.value,\n };\n case SET_PREMIUM_FUND_SEARCH_VISIBILITY:\n return {\n ...state,\n isPremiumFundSearchVisible: payload.value,\n };\n case SET_SHOW_ETF_FUNDS:\n return {\n ...state,\n showEtfFunds: payload.value,\n };\n default:\n return state;\n }\n};\n","import { FundChartsAction, FundChartsState } from \"./types\";\n\nimport { getDateTickInterval } from \"../../utils/charts\";\n\nconst SET_CHART_PERIOD = \"SET_CHART_PERIOD\";\nconst SET_CHART_VOLATILITY_PERIOD = \"SET_CHART_VOLATILITY_PERIOD\";\nconst SET_CHART_VISIBILITY = \"SET_CHART_VISIBILITY\";\nconst SET_CHART_LOADING = \"SET_CHART_LOADING\";\nconst SET_CHART_TICK_INTERVAL = \"SET_CHART_TICK_INTERVAL\";\n\nexport const calculateDate = (\n input: Date,\n days: number,\n months: number,\n years: number\n): number => {\n var date = new Date(input);\n date.setDate(date.getDate() + days);\n date.setMonth(date.getMonth() + months);\n date.setFullYear(date.getFullYear() + years);\n return Date.UTC(date.getFullYear(), date.getMonth());\n};\n\nexport const setPeriod = (value: number, chart: string): FundChartsAction => ({\n type: SET_CHART_PERIOD,\n payload: { value, chart },\n});\n\nexport const setChartLoading = (\n isLoading: boolean,\n chart: string\n): FundChartsAction => ({\n type: SET_CHART_LOADING,\n payload: { isLoading, chart },\n});\n\nexport const setChartTickInterval = (\n tickInterval: number,\n chart: string\n): FundChartsAction => ({\n type: SET_CHART_TICK_INTERVAL,\n payload: { tickInterval, chart },\n});\n\nexport const setVolatilityPeriod = (\n value: number,\n chart: string\n): FundChartsAction => ({\n type: SET_CHART_VOLATILITY_PERIOD,\n payload: { value, chart },\n});\n\nexport const setChartVisibility = (\n isVisible: boolean,\n chart: string\n): FundChartsAction => ({\n type: SET_CHART_VISIBILITY,\n payload: { isVisible, chart },\n});\n\nexport default (\n state: FundChartsState = {\n retailPerformanceRiskChart: {\n isVisible: true,\n isLoading: false,\n period: 3,\n tickInterval: getDateTickInterval(),\n },\n performanceChart: {\n isVisible: true,\n isLoading: false,\n period: 3,\n tickInterval: getDateTickInterval(),\n },\n crashDrawdownChart: {\n isVisible: true,\n isLoading: false,\n period: 3,\n tickInterval: getDateTickInterval(),\n },\n peergroupComparisonChart: {\n isVisible: true,\n isLoading: false,\n period: 3,\n tickInterval: getDateTickInterval(),\n },\n riskReturnChart: {\n isVisible: true,\n isLoading: false,\n period: 3,\n volatilityPeriod: 3,\n },\n fundRatingChart: {\n isVisible: true,\n isLoading: false,\n period: 3,\n tickInterval: getDateTickInterval(),\n },\n classDistributionChart: {\n isVisible: true,\n isLoading: false,\n },\n distributionChart: {\n isVisible: true,\n isLoading: false,\n },\n evolutionOfRiskChart: {\n isVisible: true,\n isLoading: false,\n period: 3,\n tickInterval: getDateTickInterval(),\n },\n comparisonChart: {\n isVisible: true,\n isLoading: false,\n period: 3,\n tickInterval: getDateTickInterval(),\n },\n },\n { type, payload }: FundChartsAction\n) => {\n switch (type) {\n case SET_CHART_PERIOD:\n return {\n ...state,\n [payload.chart]: {\n ...state[payload.chart],\n period: payload.value,\n },\n };\n case SET_CHART_VOLATILITY_PERIOD:\n return {\n ...state,\n [payload.chart]: {\n ...state[payload.chart],\n volatilityPeriod: payload.value,\n },\n };\n case SET_CHART_VISIBILITY:\n return {\n ...state,\n [payload.chart]: {\n ...state[payload.chart],\n isVisible: payload.isVisible,\n },\n };\n case SET_CHART_LOADING:\n return {\n ...state,\n [payload.chart]: {\n ...state[payload.chart],\n isLoading: payload.isLoading,\n },\n };\n case SET_CHART_TICK_INTERVAL:\n return {\n ...state,\n [payload.chart]: {\n ...state[payload.chart],\n tickInterval: payload.tickInterval,\n },\n };\n default:\n return state;\n }\n};\n","import { FundDetailsAction, FundDetailsState } from \"./types\";\n\nconst SET_DETAILS_LOADING = \"SET_DETAILS_LOADING\";\nconst SET_FUND_AIF_NEWS_LOADING = \"SET_FUND_AIF_NEWS_LOADING\";\nconst SET_COMPARISON_VISIBILITY = \"SET_COMPARISON_VISIBILITY\";\nconst SET_GENERATING_PDF = \"SET_GENERATING_PDF\";\n\nexport const setDetailsLoading = (value: boolean): FundDetailsAction => ({\n type: SET_DETAILS_LOADING,\n payload: { value },\n});\n\nexport const setFundAifNewsLoading = (value: boolean): FundDetailsAction => ({\n type: SET_FUND_AIF_NEWS_LOADING,\n payload: { value },\n});\n\nexport const setComparisonVisibility = (value: boolean): FundDetailsAction => ({\n type: SET_COMPARISON_VISIBILITY,\n payload: { value },\n});\n\nexport const setGeneratingPdf = (value: boolean): FundDetailsAction => ({\n type: SET_GENERATING_PDF,\n payload: { value },\n});\n\nexport default (\n state: FundDetailsState = {\n isLoading: true,\n isFundAifNewsLoading: false,\n isComparisonVisible: false,\n isGeneratingPdf: false,\n },\n { type, payload }: FundDetailsAction\n) => {\n switch (type) {\n case SET_DETAILS_LOADING:\n return {\n ...state,\n isLoading: payload.value,\n };\n case SET_FUND_AIF_NEWS_LOADING:\n return {\n ...state,\n isFundAifNewsLoading: payload.value,\n };\n case SET_COMPARISON_VISIBILITY:\n return {\n ...state,\n isComparisonVisible: payload.value,\n };\n case SET_GENERATING_PDF:\n return {\n ...state,\n isGeneratingPdf: payload.value,\n };\n default:\n return state;\n }\n};","import { FundsTableAction, FundsTableState } from \"./types\";\n\nconst SET_FUNDS_TABLE_LOADING = \"SET_FUNDS_TABLE_LOADING\";\nconst SET_FUNDS_TABLE_TOTAL = \"SET_FUNDS_TABLE_TOTAL\";\nconst SET_FUNDS_TABLE_ORDERING = \"SET_FUNDS_TABLE_ORDERING\";\n\nexport const setFundsTableLoading = (value: boolean): FundsTableAction => ({\n type: SET_FUNDS_TABLE_LOADING,\n payload: { value }\n});\n\nexport const setFundsTableTotal = (value: number): FundsTableAction => ({\n type: SET_FUNDS_TABLE_TOTAL,\n payload: { value }\n});\n\nexport const setFundsTableOrdering = (value: string): FundsTableAction => ({\n type: SET_FUNDS_TABLE_ORDERING,\n payload: { value }\n});\n\nexport default (\n state: FundsTableState = {\n isLoading: false,\n ordering: \"id\",\n total: 0\n },\n { type, payload }: FundsTableAction\n) => {\n switch (type) {\n case SET_FUNDS_TABLE_LOADING:\n return {\n ...state,\n isLoading: payload.value\n };\n case SET_FUNDS_TABLE_TOTAL:\n return {\n ...state,\n total: payload.value\n };\n case SET_FUNDS_TABLE_ORDERING:\n return {\n ...state,\n ordering: payload.value\n };\n default:\n return state;\n }\n};\n","import {\n AnyChartData,\n AnyFund,\n ChartSingleData,\n ChartXYData,\n Fund,\n SearchFund,\n Watchlist,\n} from \"../redux/domain/types\";\nimport { getCalculatedPerf, getCalculatedRisk } from \"./formats\";\nimport { getLangUrl, isFilterSearch } from \"./app\";\n\nimport { Dispatch } from \"redux\";\nimport { FormState } from \"../redux/types\";\nimport { FundReports } from \"./../redux/domain/types\";\nimport { getSearchQueryParams } from \"./routing\";\nimport { lang } from \"../lang/lang\";\nimport { push } from \"connected-react-router\";\nimport { resetSelectedTableFunds } from \"../redux/domain/funds/search\";\n\nexport const getCurrentFund = (\n searchFunds: SearchFund[],\n autocompleteValue: string\n) =>\n searchFunds.find(\n fund =>\n fund.name === autocompleteValue ||\n fund.isin.toLowerCase() === autocompleteValue.toLowerCase()\n ) || null;\n\nexport const filtersSubmit = (forms: FormState, dispatch: Dispatch) => {\n if (forms.advancedSearch && forms.advancedSearch.values) {\n const queryParams = getSearchQueryParams(forms);\n dispatch(resetSelectedTableFunds());\n dispatch(push(`${getLangUrl()}/advanced-search-results${queryParams}`));\n }\n};\n\nexport const autocompleteSubmit = (\n searchFunds: SearchFund[],\n autocompleteValue: string,\n selectedFund: SearchFund,\n dispatch: Dispatch\n) => {\n const currentFund =\n getCurrentFund(searchFunds, autocompleteValue) || selectedFund;\n if (currentFund) {\n dispatch(\n push(`${getLangUrl()}/search-results?selectedFund=${currentFund.id}`)\n );\n }\n};\n\nexport const getCrashValue = (fund: Fund, value: string) =>\n fund.reference_drawdown\n ? [\n fund.reference_drawdown[`index_${value}`],\n fund.reference_drawdown[`avarage_${value}`],\n fund[value],\n ]\n : [null, null, null];\n\nexport const getPerformanceClass = (fund: AnyFund, name: string) => {\n if (fund[name] && fund[`avg_${name}`]) {\n const value = parseFloat(getCalculatedPerf(fund[name]).toFixed(2));\n const avg = parseFloat(getCalculatedPerf(fund[`avg_${name}`]).toFixed(2));\n\n return value > avg ? \"text--green\" : value < avg ? \"text--red\" : \"\";\n } else {\n return \"\";\n }\n};\n\nexport const getRiskClass = (fund: AnyFund, name: string) => {\n if (fund[name] && fund[`avg_${name}`]) {\n const value = parseFloat(getCalculatedRisk(fund[name]).toFixed(2));\n const avg = parseFloat(getCalculatedRisk(fund[`avg_${name}`]).toFixed(2));\n\n return value < avg ? \"text--green\" : value > avg ? \"text--red\" : \"\";\n } else {\n return \"\";\n }\n};\n\nexport const getPerfValueClass = (value: number) =>\n value ? (getCalculatedPerf(value) > 0 ? \"text--green\" : \"text--red\") : \"\";\n\nexport const getFundBarClass = (value: number) =>\n `value--${value < 40 ? \"negative\" : value < 70 ? \"medium\" : \"positive\"}`;\n\nexport const getFundBarStyle = (width: number, value: number) =>\n width > 768 ? { height: `${value * 3 || 0}px` } : { width: `${value || 0}%` };\n\nexport const isOnWatchlist = (list: Watchlist[], id: number) =>\n list.map(({ fund }) => fund && fund.id).includes(id);\n\nexport const getChartData = (data: ChartSingleData, name: string) => ({\n name: data[name].name,\n data: getChartXYValue(name, data),\n});\n\nexport const getChartXYValue = (\n name: string,\n data: ChartSingleData | ChartXYData | ChartXYData[]\n) => {\n const list = (name === \"\" ? data : data[name] && data[name].data) || [];\n return list.map(({ x, y }) => {\n const d = new Date(x);\n return { x: Date.UTC(d.getFullYear(), d.getMonth(), d.getUTCDate()), y };\n });\n};\n\nexport const getAssetManagerChartXYValue = (\n name: string,\n data: ChartSingleData | ChartXYData | ChartXYData[]\n) => {\n const list = (name === \"\" ? data : data[name] && data[name].data) || [];\n return list.map(({ x, y }) => {\n const d = new Date(x);\n return {\n x: Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()),\n y,\n };\n });\n};\n\nexport const hasData = (data: AnyChartData) =>\n data &&\n Object.values(data).some(\n (item: any) => item.length > 0 || (item.data && item.data.length > 0)\n );\n\nexport const hasNoData = (data: AnyChartData, state) =>\n data &&\n Object.values(data).every(data => data.length === 0) &&\n !state.isLoading;\n\nexport const getPeriod = (period: number) =>\n period === 1 ? 0 : period === 3 ? 1 : 2;\n\nexport const getPerfRiskClass = (value: string) => {\n if (value !== \"-\") {\n const calcVal = (Math.abs(parseFloat(value)) / 30) * 150 + 5;\n return calcVal > 100 ? \"110px\" : `${calcVal}px`;\n } else {\n return \"0\";\n }\n};\n\nexport const getPerfRiskValueOffset = (value: string) => {\n if (value !== \"-\") {\n const calcVal = (Math.abs(parseFloat(value)) / 30) * 150 + 5;\n return calcVal > 100 ? \"110px\" : `${calcVal}px`;\n } else {\n return \"0\";\n }\n};\n\nexport const getCostClass = (value: string) => {\n if (value === \"-\") {\n return \"0\";\n }\n\n const calcVal = 150 * (Math.abs(parseFloat(value)) / 100);\n\n if (calcVal < 15) return \"15px\";\n if (calcVal > 100) return \"110px\";\n\n return `${calcVal}px`;\n};\n\nexport const getCostValueOffset = (value: string) => {\n if (value === \"-\") {\n return \"0\";\n }\n\n const calcVal = 150 * (Math.abs(parseFloat(value)) / 100);\n\n if (calcVal < 15) return \"15px\";\n if (calcVal > 100) return \"110px\";\n\n return `${calcVal}px`;\n};\n\nexport const getShortName = (name: string) =>\n name.length > 36 ? `${name.substring(0, 35)}...` : name;\n\nexport const isAif = fund => fund.is_aif && fund.instrument?.rank;\n\nexport const getPosition = (fund, index) => {\n if (isFilterSearch()) return index + 1;\n if (isAif(fund)) return fund.instrument?.rank;\n if (fund.position_vs_peergroup) return fund.position_vs_peergroup;\n\n return \"-\";\n};\n\nexport const slugify = (value: string) => {\n const a = \"àáäâãåăæçèéëêǵḧìíïîḿńǹñòóöôœøṕŕßśșțùúüûǘẃẍÿź·/_,:;\";\n const b = \"aaaaaaaaceeeeghiiiimnnnooooooprssstuuuuuwxyz------\";\n const p = new RegExp(a.split(\"\").join(\"|\"), \"g\");\n return value\n .toString()\n .toLowerCase()\n .replace(/\\s+/g, \"-\") // Replace spaces with -\n .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters\n .replace(/&/g, \"-and-\") // Replace & with ‘and’\n .replace(/[^\\w-]+/g, \"\") // Remove all non-word characters\n .replace(/-+/g, \"-\") // Replace multiple - with single -\n .replace(/^-+/, \"\") // Trim - from start of text\n .replace(/-+$/, \"\"); // Trim - from end of text\n};\n\nexport const canHaveRating = (fund: Fund) => {\n // Ignores qual vs quan logic\n // https://jira.scopegroup.com/browse/SCI-6524\n\n // return fund?.qualitative_rated || fund?.is_quantitative_license;\n\n return true;\n};\n","import { API_URL, getReqOptions } from \"./config\";\nimport { Action, ErrorAction, Meta, SurveyAction, SurveyState } from \"./types\";\nimport { from, Observable, of } from \"rxjs\";\nimport { catchError, filter, mergeMap, switchMap, takeUntil } from \"rxjs/operators\";\nimport {\n getIsinId,\n getSurveyType,\n setSurveyAnswers,\n setSurveyValues,\n setSurveyRequiredAnswersValues,\n} from \"./../../utils/survey\";\n\nimport { StateValue } from \"../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { ofType } from \"redux-observable\";\nimport { setAssetManagerSummaryExportLoading, setEsgCompanySummaryExportLoading, setEsgFundSummaryExportLoading, setIsinsTableLoading, setSurveyExportLoading, setSurveyLoading } from \"../ui/survey\";\nimport { addErrorToast, addSuccessToast } from \"../ui/toasts\";\nimport { lang } from \"../../lang/lang\";\nimport { setUploadArticle89ModalUploading } from \"../ui/uploadArticle89Modal\";\nimport { getDashedDate } from \"../../utils/formats\";\n\nconst FETCH_SURVEY_REQUESTED = \"FETCH_SURVEY_REQUESTED\";\nconst FETCH_SURVEY_SUCCESSFUL = \"FETCH_SURVEY_SUCCESSFUL\";\nconst FETCH_SURVEY_REJECTED = \"FETCH_SURVEY_REJECTED\";\n\nconst SEND_SURVEY_REQUESTED = \"SEND_SURVEY_REQUESTED\";\nconst SEND_SURVEY_SUCCESSFUL = \"SEND_SURVEY_SUCCESSFUL\";\nconst SEND_SURVEY_REJECTED = \"SEND_SURVEY_REJECTED\";\n\nconst SEND_SURVEY_VERSION_REQUESTED = \"SEND_SURVEY_VERSION_REQUESTED\";\nconst SEND_SURVEY_VERSION_SUCCESSFUL = \"SEND_SURVEY_VERSION_SUCCESSFUL\";\nconst SEND_SURVEY_VERSION_REJECTED = \"SEND_SURVEY_VERSION_REJECTED\";\n\nconst FETCH_QUESTIONS_COUNT_REQUESTED = \"FETCH_QUESTIONS_COUNT_REQUESTED\";\nconst FETCH_QUESTIONS_COUNT_SUCCESSFUL = \"FETCH_QUESTIONS_COUNT_SUCCESSFUL\";\nconst FETCH_QUESTIONS_COUNT_REJECTED = \"FETCH_QUESTIONS_COUNT_REJECTED\";\n\nconst SURVEY_EXPORT_REQUESTED = \"SURVEY_EXPORT_REQUESTED\";\nconst SURVEY_EXPORT_SUCCESSFUL = \"SURVEY_EXPORT_SUCCESSFUL\";\nconst SURVEY_EXPORT_REJECTED = \"SURVEY_EXPORT_REJECTED\";\n\nconst ASSET_MANAGER_SUMMARY_EXPORT_REQUESTED = \"ASSET_MANAGER_SUMMARY_EXPORT_REQUESTED\"\nconst ASSET_MANAGER_SUMMARY_EXPORT_SUCCESSFUL = \"ASSET_MANAGER_SUMMARY_EXPORT_SUCCESSFUL\"\nconst ASSET_MANAGER_SUMMARY_EXPORT_REJECTED = \"ASSET_MANAGER_SUMMARY_EXPORT_REJECTED\"\n\nconst ESG_FUND_SUMMARY_EXPORT_REQUESTED = \"ESG_FUND_SUMMARY_EXPORT_REQUESTED\"\nconst ESG_FUND_SUMMARY_EXPORT_SUCCESSFUL = \"ESG_FUND_SUMMARY_EXPORT_SUCCESSFUL\"\nconst ESG_FUND_SUMMARY_EXPORT_REJECTED = \"ESG_FUND_SUMMARY_EXPORT_REJECTED\"\n\nconst ESG_COMPANY_SUMMARY_EXPORT_REQUESTED = \"ESG_COMPANY_SUMMARY_EXPORT_REQUESTED\"\nconst ESG_COMPANY_SUMMARY_EXPORT_SUCCESSFUL = \"ESG_COMPANY_SUMMARY_EXPORT_SUCCESSFUL\"\nconst ESG_COMPANY_SUMMARY_EXPORT_REJECTED = \"ESG_COMPANY_SUMMARY_EXPORT_REJECTED\"\n\nconst UPLOAD_ARTICLE89_REQUESTED = \"UPLOAD_ARTICLE89_REQUESTED\";\nconst UPLOAD_ARTICLE89_SUCCESSFUL = \"UPLOAD_ARTICLE89_SUCCESSFUL\";\nconst UPLOAD_ARTICLE89_REJECTED = \"UPLOAD_ARTICLE89_REJECTED\";\n\nconst FETCH_SURVEYS_VERSIONS_REQUESTED = \"FETCH_SURVEYS_VERSIONS_REQUESTED\";\nconst FETCH_SURVEYS_VERSIONS_SUCCESSFUL = \"FETCH_SURVEYS_VERSIONS_SUCCESSFUL\";\nconst FETCH_SURVEYS_VERSIONS_REJECTED = \"FETCH_SURVEYS_VERSIONS_REJECTED\";\n\nconst CLEAN_SURVEY = \"CLEAN_SURVEY\";\nconst SET_SURVEY_ROOT_ANSWERS = \"SET_SURVEY_ROOT_ANSWERS\";\nconst SET_SURVEY_REQUIRED_ANSWERS = \"SET_SURVEY_REQUIRED_ANSWERS\"\n\nexport const sendSurvey = (values: any, meta?: Meta): SurveyAction => ({\n type: SEND_SURVEY_REQUESTED,\n payload: { values, meta },\n});\nconst sendSurveySuccessful = (values: any): SurveyAction => ({\n type: SEND_SURVEY_SUCCESSFUL,\n payload: values\n});\nconst sendSurveyRejected = (error?: TypeError): ErrorAction => ({\n type: SEND_SURVEY_REJECTED,\n error,\n});\n\nexport const sendSurveyVersion = (values: any, meta?: Meta): SurveyAction => ({\n type: SEND_SURVEY_VERSION_REQUESTED,\n payload: { values, meta },\n});\nconst sendSurveyVersionSuccessful = (): Action => ({\n type: SEND_SURVEY_VERSION_SUCCESSFUL,\n});\nconst sendSurveyVersionRejected = (error?: TypeError): ErrorAction => ({\n type: SEND_SURVEY_VERSION_REJECTED,\n error,\n});\n\nexport const fetchSurvey = (page: number, meta?: Meta): SurveyAction => ({\n type: FETCH_SURVEY_REQUESTED,\n payload: { page, meta },\n});\nconst fetchSurveySuccessful = (survey: any): SurveyAction => ({\n type: FETCH_SURVEY_SUCCESSFUL,\n payload: { survey },\n});\nconst fetchSurveyRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_SURVEY_REJECTED,\n error,\n});\n\nexport const fetchQuestionsCount = (form: string): SurveyAction => ({\n type: FETCH_QUESTIONS_COUNT_REQUESTED,\n payload: { form },\n});\nconst fetchQuestionsCountSuccessful = (value: number): SurveyAction => ({\n type: FETCH_QUESTIONS_COUNT_SUCCESSFUL,\n payload: { value },\n});\nconst fetchQuestionsCountRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_QUESTIONS_COUNT_REJECTED,\n error,\n});\n\n\nexport const surveyExport = (): SurveyAction => ({\n type: SURVEY_EXPORT_REQUESTED,\n payload: {},\n});\nconst surveyExportSuccessful = (): Action => ({\n type: SURVEY_EXPORT_SUCCESSFUL,\n});\nconst surveyExportRejected = (error?: TypeError): ErrorAction => ({\n type: SURVEY_EXPORT_REJECTED,\n error,\n});\n\nexport const assetManagerSummaryExport = (): SurveyAction => ({\n type: ASSET_MANAGER_SUMMARY_EXPORT_REQUESTED,\n payload: {},\n});\nconst assetManagerSummaryExportSuccessful = (): Action => ({\n type: ASSET_MANAGER_SUMMARY_EXPORT_SUCCESSFUL,\n});\nconst assetManagerSummaryExportRejected = (error?: TypeError): ErrorAction => ({\n type: ASSET_MANAGER_SUMMARY_EXPORT_REJECTED,\n error,\n});\n\n\nexport const esgFundSummaryExport = (): SurveyAction => ({\n type: ESG_FUND_SUMMARY_EXPORT_REQUESTED,\n payload: {},\n});\nconst esgFundSummaryExportSuccessful = (): Action => ({\n type: ESG_FUND_SUMMARY_EXPORT_SUCCESSFUL,\n});\nconst esgFundSummaryExportRejected = (error?: TypeError): ErrorAction => ({\n type: ESG_FUND_SUMMARY_EXPORT_REJECTED,\n error,\n});\n\n\nexport const esgCompanySummaryExport = (): SurveyAction => ({\n type: ESG_COMPANY_SUMMARY_EXPORT_REQUESTED,\n payload: {},\n});\nconst esgCompanySummaryExportSuccessful = (): Action => ({\n type: ESG_COMPANY_SUMMARY_EXPORT_SUCCESSFUL,\n});\nconst esgCompanySummaryExportRejected = (error?: TypeError): ErrorAction => ({\n type: ESG_COMPANY_SUMMARY_EXPORT_REJECTED,\n error,\n});\n\nexport const uploadArticle89 = (\n // TODO: add proper type for article 8/9 upload (type, file)\n values: any, meta: Meta\n): SurveyAction => ({\n type: UPLOAD_ARTICLE89_REQUESTED,\n payload: { values, meta },\n});\nconst uploadArticle89Successful = (): Action => ({\n type: UPLOAD_ARTICLE89_SUCCESSFUL,\n});\nconst uploadArticle89Rejected = (error?: TypeError): ErrorAction => ({\n type: UPLOAD_ARTICLE89_REJECTED,\n error,\n});\n\nexport const fetchSurveysVersions = (): SurveyAction => ({\n type: FETCH_SURVEYS_VERSIONS_REQUESTED,\n payload: {},\n});\nconst fetchSurveysVersionsSuccessful = (surveysVersions: any): SurveyAction => ({\n type: FETCH_SURVEYS_VERSIONS_SUCCESSFUL,\n payload: { surveysVersions },\n});\nconst fetchSurveysVersionsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_SURVEYS_VERSIONS_REJECTED,\n error,\n});\n\nexport const cleanSurvey = (): Action => ({\n type: CLEAN_SURVEY,\n});\n\nexport const setSurveyRootAnswers = (values): SurveyAction => ({\n type: SET_SURVEY_ROOT_ANSWERS,\n payload: { values },\n});\n\nexport const setSurveyRequiredAnswers = (values): SurveyAction => ({\n type: SET_SURVEY_REQUIRED_ANSWERS,\n payload: { values },\n});\n\nexport default (\n state: SurveyState = {\n survey: {},\n surveyRootAnswers: [],\n surveyRequiredAnswers: [],\n surveyPageCount: 0,\n questionsCount: 0,\n surveyType: null,\n surveysVersions: null,\n wasNewVersionCreated: null,\n version: null,\n surveyOverviewPdfs: [],\n },\n { type, payload }: SurveyAction\n) => {\n switch (type) {\n case FETCH_SURVEY_SUCCESSFUL:\n return {\n ...state,\n survey: {\n ...state.survey,\n [payload.survey.page]: payload.survey,\n },\n surveyPageCount: payload.survey.page_count,\n surveyType: payload.survey.survey_type,\n surveyOverviewPdfs: payload.survey.overview_pdfs,\n };\n case FETCH_QUESTIONS_COUNT_SUCCESSFUL:\n return {\n ...state,\n questionsCount: payload.value,\n };\n case CLEAN_SURVEY:\n return {\n survey: {},\n surveyRootAnswers: [],\n surveyPageCount: 0,\n questionsCount: 0,\n surveyType: null,\n };\n case SET_SURVEY_ROOT_ANSWERS:\n return {\n ...state,\n surveyRootAnswers: {\n ...state.surveyRootAnswers,\n ...payload.values,\n },\n };\n case SET_SURVEY_REQUIRED_ANSWERS:\n return {\n ...state,\n surveyRequiredAnswers: {\n ...state.surveyRequiredAnswers,\n ...payload.values,\n },\n };\n case FETCH_SURVEYS_VERSIONS_SUCCESSFUL:\n return {\n ...state,\n surveysVersions: payload.surveysVersions\n }\n case SEND_SURVEY_SUCCESSFUL:\n return {\n ...state,\n wasNewVersionCreated: payload.was_new_version_created,\n version: payload.version\n }\n default:\n return state;\n }\n};\n\nexport const fetchSurveyEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_SURVEY_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(\n `${API_URL}/surveys/am_survey/?page=${payload.page\n }&form=${getSurveyType()\n }${(getSurveyType() === 'esg-fund'\n || getSurveyType() === 'esg-company'\n || getSurveyType() === 'deka-esg'\n || getIsinId(state) === null\n ? \"\"\n : `&isins_version=${getIsinId(state)}`)}`\n )\n .pipe(\n mergeMap(({ response }) => {\n const shouldLoadNextPage = payload.page + 1 <= response.page_count;\n\n setSurveyValues(response.questions);\n\n const actions = [\n fetchSurveySuccessful(response),\n setSurveyRootAnswers(\n setSurveyAnswers(\n response.questions,\n state.value.form?.survey?.values\n )\n ),\n setSurveyRequiredAnswers(\n setSurveyRequiredAnswersValues(\n response.questions,\n state.value.form?.survey?.values\n )\n ),\n fetchQuestionsCount(getSurveyType()),\n setSurveyLoading(false),\n ];\n\n if (shouldLoadNextPage) {\n actions.push(fetchSurvey(payload.page + 1));\n }\n return of(...actions);\n }),\n catchError(error => {\n return of(setSurveyLoading(false), fetchSurveyRejected(error));\n })\n )\n )\n );\n\nexport const fetchQuestionsCountEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_QUESTIONS_COUNT_REQUESTED),\n mergeMap(() =>\n ajax\n .get(\n `${API_URL}/surveys/am_survey/questions_count/?form=${getSurveyType()}`\n )\n .pipe(\n mergeMap(({ response }) =>\n of(fetchQuestionsCountSuccessful(response.questions_count))\n ),\n catchError(error => of(fetchQuestionsCountRejected(error)))\n )\n )\n );\n\nexport const sendSurveyEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SEND_SURVEY_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n let newValues = {};\n const regex = /^answer-[0-9]+-[0-9]+/;\n Object.keys(payload.values).forEach(key => {\n if (regex.test(key)) {\n const newKey = key.replace(\"answer-\", \"\").slice(0, -2);\n newValues[newKey]\n ? newValues[newKey].push(payload.values[key])\n : (newValues[newKey] = [payload.values[key]]);\n } else {\n const newKey = key.replace(\"answer-\", \"\");\n newValues[newKey] = payload.values[key];\n }\n });\n newValues[\"fund_names\"] = newValues[\"113\"];\n newValues[\"isins\"] = newValues[\"114\"];\n newValues[\"isins_version\"] = getIsinId(state);\n\n return ajax\n .post(\n `${API_URL}/surveys/am_survey/?survey_type=${getSurveyType()\n }${(getSurveyType() === 'esg-fund'\n || getSurveyType() === 'esg-company'\n || getSurveyType() === 'deka-esg'\n ? \"\"\n : `&isins_version=${getIsinId(state)}`)}`,\n { ...newValues },\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve();\n return of(sendSurveySuccessful(response));\n }),\n catchError(error => {\n if (reject) reject(error);\n return of(sendSurveyRejected(error));\n })\n );\n })\n );\n\nexport const sendSurveyVersionEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SEND_SURVEY_VERSION_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n let newValues = {};\n const regex = /^answer-[0-9]+-[0-9]+/;\n Object.keys(payload.values).forEach(key => {\n if (regex.test(key)) {\n const newKey = key.replace(\"answer-\", \"\").slice(0, -2);\n newValues[newKey]\n ? newValues[newKey].push(payload.values[key])\n : (newValues[newKey] = [payload.values[key]]);\n } else {\n const newKey = key.replace(\"answer-\", \"\");\n newValues[newKey] = payload.values[key];\n }\n });\n newValues[\"fund_names\"] = newValues[\"113\"];\n newValues[\"isins\"] = newValues[\"114\"];\n newValues[\"isins_version\"] = getIsinId(state);\n return ajax\n .post(\n `${API_URL}/surveys/am_survey/?survey_type=${getSurveyType()\n }&version_answers=true${(getSurveyType() === 'esg-fund'\n || getSurveyType() === 'esg-company'\n || getSurveyType() === 'deka-esg'\n ? \"\"\n : `&isins_version=${getIsinId(state)}`)}`,\n { ...newValues },\n getReqOptions()\n )\n .pipe(\n mergeMap(() => {\n if (resolve) resolve();\n return of(\n addSuccessToast(\"Survey saved.\"),\n sendSurveyVersionSuccessful());\n }),\n catchError(error => {\n if (reject) reject(error);\n return of(sendSurveyVersionRejected(error));\n })\n );\n })\n );\n\nexport const surveyExportEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SURVEY_EXPORT_REQUESTED),\n mergeMap(() => {\n const fetchObservable = from(\n // TODO: ?form=deka-esg hardcoded for now\n fetch(`${API_URL}/surveys/am_survey/dvm/complete_summary/?form=deka-esg\n `, {\n method: \"get\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n })\n );\n return fetchObservable.pipe(\n switchMap(response =>\n response.status === 200 ? response.arrayBuffer() : \"error\"\n ),\n mergeMap(response => {\n if (response !== \"error\") {\n const blob = response;\n const downloadLink = window.document.createElement(\"a\");\n downloadLink.href = window.URL.createObjectURL(\n new Blob([blob], {\n type:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n })\n );\n downloadLink.download =\n `${lang.esgSurvey.filename}${getDashedDate()}`;\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n return of(setSurveyExportLoading(false), surveyExportSuccessful());\n } else {\n return of(\n setSurveyExportLoading(false),\n addErrorToast(\"Error: unable to export questionnaires.\")\n );\n }\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === SURVEY_EXPORT_REQUESTED)\n )\n ),\n catchError(error =>\n of(setSurveyExportLoading(false), surveyExportRejected(error))\n )\n );\n }),\n catchError(error =>\n of(setSurveyExportLoading(false), surveyExportRejected(error))\n )\n );\n\nexport const assetManagerSummaryExportEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(ASSET_MANAGER_SUMMARY_EXPORT_REQUESTED),\n mergeMap(() => {\n const fetchObservable = from(\n // TODO: ?form=deka-esg hardcoded for now\n fetch(`${API_URL}/surveys/am_survey/dvm/asset_manager_summary/?form=deka-esg\n `, {\n method: \"get\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n })\n );\n return fetchObservable.pipe(\n switchMap(response =>\n response.status === 200 ? response.arrayBuffer() : \"error\"\n ),\n mergeMap(response => {\n if (response !== \"error\") {\n const blob = response;\n const downloadLink = window.document.createElement(\"a\");\n downloadLink.href = window.URL.createObjectURL(\n new Blob([blob], {\n type:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n })\n );\n downloadLink.download =\n `AM ${getDashedDate()}`;\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n return of(setAssetManagerSummaryExportLoading(false), assetManagerSummaryExportSuccessful());\n } else {\n return of(\n setAssetManagerSummaryExportLoading(false),\n addErrorToast(\"Error: unable to export questionnaires.\")\n );\n }\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === ASSET_MANAGER_SUMMARY_EXPORT_REQUESTED)\n )\n ),\n catchError(error =>\n of(setAssetManagerSummaryExportLoading(false), assetManagerSummaryExportRejected(error))\n )\n );\n }),\n catchError(error =>\n of(setAssetManagerSummaryExportLoading(false), assetManagerSummaryExportRejected(error))\n )\n );\n\nexport const esgFundSummaryExportEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(ESG_FUND_SUMMARY_EXPORT_REQUESTED),\n mergeMap(() => {\n const fetchObservable = from(\n fetch(`${API_URL}/surveys/am_survey/esg/complete_summary/?form=esg-fund`, {\n method: \"get\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n })\n );\n return fetchObservable.pipe(\n switchMap(response =>\n response.status === 200 ? response.arrayBuffer() : \"error\"\n ),\n mergeMap(response => {\n if (response !== \"error\") {\n const blob = response;\n const downloadLink = window.document.createElement(\"a\");\n downloadLink.href = window.URL.createObjectURL(\n new Blob([blob], {\n type:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n })\n );\n downloadLink.download =\n `ESG FUND ${getDashedDate()}`;\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n return of(setEsgFundSummaryExportLoading(false), esgFundSummaryExportSuccessful());\n } else {\n return of(\n setEsgFundSummaryExportLoading(false),\n addErrorToast(\"Error: unable to export questionnaires.\")\n );\n }\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === ESG_FUND_SUMMARY_EXPORT_REQUESTED)\n )\n ),\n catchError(error =>\n of(setEsgFundSummaryExportLoading(false), esgFundSummaryExportRejected(error))\n )\n );\n }),\n catchError(error =>\n of(setEsgFundSummaryExportLoading(false), esgFundSummaryExportRejected(error))\n )\n );\n\nexport const esgCompanySummaryExportEpic = (\n action$: Observable,\n): Observable =>\n action$.pipe(\n ofType(ESG_COMPANY_SUMMARY_EXPORT_REQUESTED),\n mergeMap(() => {\n const fetchObservable = from(\n fetch(`${API_URL}/surveys/am_survey/esg/complete_summary/?form=esg-company`, {\n method: \"get\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n })\n );\n return fetchObservable.pipe(\n switchMap(response =>\n response.status === 200 ? response.arrayBuffer() : \"error\"\n ),\n mergeMap(response => {\n if (response !== \"error\") {\n const blob = response;\n const downloadLink = window.document.createElement(\"a\");\n downloadLink.href = window.URL.createObjectURL(\n new Blob([blob], {\n type:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n })\n );\n downloadLink.download =\n `ESG COMPANY ${getDashedDate()}`;\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n return of(setEsgCompanySummaryExportLoading(false), esgCompanySummaryExportSuccessful());\n } else {\n return of(\n setEsgCompanySummaryExportLoading(false),\n addErrorToast(\"Error: unable to export questionnaires.\")\n );\n }\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === ESG_COMPANY_SUMMARY_EXPORT_REQUESTED)\n )\n ),\n catchError(error =>\n of(setEsgCompanySummaryExportLoading(false), esgCompanySummaryExportRejected(error))\n )\n );\n }),\n catchError(error =>\n of(setEsgCompanySummaryExportLoading(false), esgCompanySummaryExportRejected(error))\n )\n );\n\nexport const uploadArticle89Epic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(UPLOAD_ARTICLE89_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n const { values } = payload;\n return ajax\n .post(\n `${API_URL}/company_info/esg/articles/`,\n {\n file: values?.file\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(\n setUploadArticle89ModalUploading(false),\n uploadArticle89Successful()\n );\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === UPLOAD_ARTICLE89_REQUESTED)\n )\n ),\n catchError(error => {\n if (reject) reject(error);\n return of(\n setUploadArticle89ModalUploading(false),\n uploadArticle89Rejected(error)\n );\n })\n );\n\n })\n );\n\nexport const fetchSurveysVersionsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_SURVEYS_VERSIONS_REQUESTED),\n mergeMap(() => {\n return ajax\n .get(\n `${API_URL}/surveys/am_survey/isin_versions/`,\n getReqOptions(),\n )\n .pipe(\n mergeMap(({ response }) => {\n return of(\n fetchSurveysVersionsSuccessful(response),\n setIsinsTableLoading(false),\n );\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_SURVEYS_VERSIONS_REQUESTED)\n )\n ),\n catchError(error => {\n return of(\n fetchSurveysVersionsRejected(error),\n setIsinsTableLoading(false),\n );\n })\n );\n })\n );\n","import { API_URL, getReqOptions } from \"./config\";\nimport {\n Action,\n Conference,\n ConferencesAction,\n ConferencesState,\n ErrorAction,\n Meta,\n} from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { addErrorToast, addSuccessToast } from \"./../ui/toasts\";\nimport { catchError, filter, mergeMap, takeUntil } from \"rxjs/operators\";\nimport {\n setConferenceDetailsLoading,\n setConferenceRegisterLoading,\n} from \"./../ui/conferenceDetails\";\n\nimport { StateValue } from \"../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { fetchUserWebinars } from \"./auth\";\nimport { getFormattedDate } from \"../../utils/formats\";\nimport { lang } from \"../../lang/lang\";\nimport { ofType } from \"redux-observable\";\nimport { push } from \"connected-react-router\";\nimport { setConferencesListLoading } from \"../ui/conferencesList\";\n\nconst FETCH_CONFERENCES_LIST_REQUESTED = \"FETCH_CONFERENCES_LIST_REQUESTED\";\nconst FETCH_CONFERENCES_LIST_SUCCESSFUL = \"FETCH_CONFERENCES_LIST_SUCCESSFUL\";\nconst FETCH_CONFERENCES_LIST_REJECTED = \"FETCH_CONFERENCES_LIST_REJECTED\";\nconst FETCH_SINGLE_CONFERENCE_REQUESTED = \"FETCH_SINGLE_CONFERENCE_REQUESTED\";\nconst FETCH_SINGLE_CONFERENCE_SUCCESSFUL = \"FETCH_SINGLE_CONFERENCE_SUCCESSFUL\";\nconst FETCH_SINGLE_CONFERENCE_REJECTED = \"FETCH_SINGLE_CONFERENCE_REJECTED\";\nconst ADD_CONFERENCE_REQUESTED = \"ADD_CONFERENCE_REQUESTED\";\nconst ADD_CONFERENCE_SUCCESSFUL = \"ADD_CONFERENCE_SUCCESSFUL\";\nconst ADD_CONFERENCE_REJECTED = \"ADD_CONFERENCE_REJECTED\";\nconst EDIT_CONFERENCE_REQUESTED = \"EDIT_CONFERENCE_REQUESTED\";\nconst EDIT_CONFERENCE_SUCCESSFUL = \"EDIT_CONFERENCE_SUCCESSFUL\";\nconst EDIT_CONFERENCE_REJECTED = \"EDIT_CONFERENCE_REJECTED\";\nconst REGISTER_FOR_CONFERENCE_REQUESTED = \"REGISTER_FOR_CONFERENCE_REQUESTED\";\nconst REGISTER_FOR_CONFERENCE_SUCCESSFUL = \"REGISTER_FOR_CONFERENCE_SUCCESSFUL\";\nconst REGISTER_FOR_CONFERENCE_REJECTED = \"REGISTER_FOR_CONFERENCE_REJECTED\";\nconst UNREGISTER_FROM_CONFERENCE_REQUESTED =\n \"UNREGISTER_FROM_CONFERENCE_REQUESTED\";\nconst UNREGISTER_FROM_CONFERENCE_SUCCESSFUL =\n \"UNREGISTER_FROM_CONFERENCE_SUCCESSFUL\";\nconst UNREGISTER_FROM_CONFERENCE_REJECTED =\n \"UNREGISTER_FROM_CONFERENCE_REJECTED\";\nconst SEND_CONFERENCE_PARTICIPATION_CONFIRMATION_REQUESTED =\n \"SEND_CONFERENCE_PARTICIPATION_CONFIRMATION_REQUESTED\";\nconst SEND_CONFERENCE_PARTICIPATION_CONFIRMATION_SUCCESSFUL =\n \"SEND_CONFERENCE_PARTICIPATION_CONFIRMATION_SUCCESSFUL\";\nconst SEND_CONFERENCE_PARTICIPATION_CONFIRMATION_REJECTED =\n \"SEND_CONFERENCE_PARTICIPATION_CONFIRMATION_REJECTED\";\nconst SEND_CONFERENCE_REQUEST_REQUESTED = \"SEND_CONFERENCE_REQUEST_REQUESTED\";\nconst SEND_CONFERENCE_REQUEST_SUCCESSFUL = \"SEND_CONFERENCE_REQUEST_SUCCESSFUL\";\nconst SEND_CONFERENCE_REQUEST_REJECTED = \"SEND_CONFERENCE_REQUEST_REJECTED\";\n\nexport const fetchConferencesList = (meta?: Meta): ConferencesAction => ({\n type: FETCH_CONFERENCES_LIST_REQUESTED,\n payload: { meta },\n});\n\nexport const fetchConferencesListSuccessful = (\n conferences: Conference[]\n): ConferencesAction => ({\n type: FETCH_CONFERENCES_LIST_SUCCESSFUL,\n payload: { conferences },\n});\n\nexport const fetchConferencesListRejected = (\n error: TypeError\n): ErrorAction => ({\n type: FETCH_CONFERENCES_LIST_REJECTED,\n error,\n});\n\nexport const fetchSingleConference = (id: number): ConferencesAction => ({\n type: FETCH_SINGLE_CONFERENCE_REQUESTED,\n payload: { id },\n});\n\nexport const fetchSingleConferenceSuccessful = (\n singleConference: Conference\n): ConferencesAction => ({\n type: FETCH_SINGLE_CONFERENCE_SUCCESSFUL,\n payload: { singleConference },\n});\n\nexport const fetchSingleConferenceRejected = (\n error: TypeError\n): ErrorAction => ({\n type: FETCH_SINGLE_CONFERENCE_REJECTED,\n error,\n});\n\nexport const addConference = (\n conference: Conference,\n meta?: Meta\n): ConferencesAction => ({\n type: ADD_CONFERENCE_REQUESTED,\n payload: { conference, meta },\n});\n\nexport const addConferenceSuccessful = (\n conference: Conference\n): ConferencesAction => ({\n type: ADD_CONFERENCE_SUCCESSFUL,\n payload: { conference },\n});\n\nexport const addConferenceRejected = (error: TypeError): ErrorAction => ({\n type: ADD_CONFERENCE_REJECTED,\n error,\n});\n\nexport const editConference = (\n values: any,\n meta?: Meta\n): ConferencesAction => ({\n type: EDIT_CONFERENCE_REQUESTED,\n payload: { values, meta },\n});\n\nexport const editConferenceSuccessful = (\n conference: Conference\n): ConferencesAction => ({\n type: EDIT_CONFERENCE_SUCCESSFUL,\n payload: { conference },\n});\n\nexport const editConferenceRejected = (error: TypeError): ErrorAction => ({\n type: EDIT_CONFERENCE_REJECTED,\n error,\n});\n\nexport const registerForConference = (\n conferenceId: number,\n conferenceTitle: string\n): ConferencesAction => ({\n type: REGISTER_FOR_CONFERENCE_REQUESTED,\n payload: { conferenceId, conferenceTitle },\n});\n\nexport const registerForConferenceSuccessful = (): Action => ({\n type: REGISTER_FOR_CONFERENCE_SUCCESSFUL,\n});\n\nexport const registerForConferenceRejected = (\n error: TypeError\n): ErrorAction => ({\n type: REGISTER_FOR_CONFERENCE_REJECTED,\n error,\n});\n\nexport const unregisterFromConference = (\n conferenceId: number\n): ConferencesAction => ({\n type: UNREGISTER_FROM_CONFERENCE_REQUESTED,\n payload: { conferenceId },\n});\n\nexport const unregisterFromConferenceSuccessful = (): Action => ({\n type: UNREGISTER_FROM_CONFERENCE_SUCCESSFUL,\n});\n\nexport const unregisterFromConferenceRejected = (\n error: TypeError\n): ErrorAction => ({\n type: UNREGISTER_FROM_CONFERENCE_REJECTED,\n error,\n});\n\nexport const sendConferenceParticipationConfirmation = (\n conferenceTitle: string\n): ConferencesAction => ({\n type: SEND_CONFERENCE_PARTICIPATION_CONFIRMATION_REQUESTED,\n payload: { conferenceTitle },\n});\n\nexport const sendConferenceParticipationConfirmationSuccessful = (): Action => ({\n type: SEND_CONFERENCE_PARTICIPATION_CONFIRMATION_SUCCESSFUL,\n});\n\nexport const sendConferenceParticipationConfirmationRejected = (\n error: TypeError\n): ErrorAction => ({\n type: SEND_CONFERENCE_PARTICIPATION_CONFIRMATION_REJECTED,\n error,\n});\n\nexport const sendConferenceRequest = (\n conference: Conference\n): ConferencesAction => ({\n type: SEND_CONFERENCE_REQUEST_REQUESTED,\n payload: { conference },\n});\n\nexport const sendConferenceRequestSuccessful = (): Action => ({\n type: SEND_CONFERENCE_REQUEST_SUCCESSFUL,\n});\n\nexport const sendConferenceRequestRejected = (\n error: TypeError\n): ErrorAction => ({\n type: SEND_CONFERENCE_REQUEST_REJECTED,\n error,\n});\n\nexport default (\n state: ConferencesState = {\n conferencesList: [],\n conferences: {},\n },\n { type, payload }: ConferencesAction\n) => {\n switch (type) {\n case FETCH_CONFERENCES_LIST_SUCCESSFUL:\n return {\n ...state,\n conferencesList: payload.conferences,\n };\n case FETCH_SINGLE_CONFERENCE_SUCCESSFUL:\n if (payload.singleConference) {\n return {\n ...state,\n conferences: {\n ...state.conferences,\n [payload.singleConference.id]: payload.singleConference,\n },\n };\n } else {\n return state;\n }\n default:\n return state;\n }\n};\n\nexport const fetchConferencesListEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_CONFERENCES_LIST_REQUESTED),\n mergeMap(() => {\n const status =\n window.location.pathname.indexOf(\"asset-manager\") !== -1\n ? \"\"\n : \"&status=ACCEPTED\";\n\n return ajax\n .get(\n `${API_URL}/portfolio_manager/webinars/?lang=${lang.getLanguage()}${status}`\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n setConferencesListLoading(false),\n fetchConferencesListSuccessful(response)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_CONFERENCES_LIST_REQUESTED)\n )\n ),\n catchError(error =>\n of(\n setConferencesListLoading(false),\n fetchConferencesListRejected(error)\n )\n )\n );\n })\n );\n\nexport const fetchSingleConferenceEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_SINGLE_CONFERENCE_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(\n `${API_URL}/portfolio_manager/webinars/${\n payload.id\n }/?lang=${lang.getLanguage()}`\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n setConferenceDetailsLoading(false),\n fetchSingleConferenceSuccessful(response)\n )\n ),\n catchError(error => {\n if (error.status === 404) {\n return of(push(`/404`));\n }\n return of(\n setConferenceDetailsLoading(false),\n fetchSingleConferenceRejected(error)\n );\n })\n )\n )\n );\n\nexport const addConferenceEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(ADD_CONFERENCE_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta | any = payload.meta || {};\n return ajax\n .post(\n `${API_URL}/portfolio_manager/webinars/`,\n payload.conference,\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(\n sendConferenceRequest(response),\n fetchConferencesList(),\n addConferenceSuccessful(response)\n );\n }),\n catchError(error => {\n if (reject) reject(error);\n return of(addConferenceRejected(error));\n })\n );\n })\n );\n\nexport const editConferenceEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(EDIT_CONFERENCE_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta | any = payload.meta || {};\n return ajax\n .patch(\n `${API_URL}/portfolio_manager/webinars/${payload.values.id}/`,\n payload.values,\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(\n fetchConferencesList(),\n addSuccessToast(lang.conferences.editSuccess),\n editConferenceSuccessful(response)\n );\n }),\n catchError(error => {\n if (reject) reject(error);\n return of(editConferenceRejected(error));\n })\n );\n })\n );\n\nexport const registerForConferenceEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(REGISTER_FOR_CONFERENCE_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .post(\n `${API_URL}/register_for_conference/`,\n {\n conferenceId: payload.conferenceId,\n conferenceTitle: payload.conferenceTitle,\n userEmail: state.value.domain.auth.user.email,\n userName: state.value.domain.auth.user.name,\n userCompany: state.value.domain.auth.company || \"-\",\n userPhone: state.value.domain.auth.phone || \"-\",\n date: getFormattedDate(new Date().toString()),\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(() =>\n of(\n addSuccessToast(\n lang.assetManagerDashboard.registerForConferenceSuccess\n ),\n fetchUserWebinars(),\n setConferenceRegisterLoading(false),\n registerForConferenceSuccessful()\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.assetManagerDashboard.requestError),\n setConferenceRegisterLoading(false),\n registerForConferenceRejected(error)\n )\n )\n )\n )\n );\n\nexport const unregisterFromConferenceEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(UNREGISTER_FROM_CONFERENCE_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .delete(\n `${API_URL}/profile/webinars/${payload.conferenceId}/unsubscribe/`\n )\n .pipe(\n mergeMap(() =>\n of(\n addSuccessToast(\n lang.assetManagerDashboard.unsubscribedFromConference\n ),\n fetchUserWebinars(),\n setConferenceRegisterLoading(false),\n unregisterFromConferenceSuccessful()\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.assetManagerDashboard.requestError),\n setConferenceRegisterLoading(false),\n unregisterFromConferenceRejected(error)\n )\n )\n )\n )\n );\n\nexport const sendConferenceParticipationConfirmationEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SEND_CONFERENCE_PARTICIPATION_CONFIRMATION_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .post(\n `${API_URL}/conference_participation_confirmation/`,\n {\n conferenceTitle: payload.conferenceTitle,\n userEmail: state.value.domain.auth.user.email,\n userName: state.value.domain.auth.user.name,\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(() =>\n of(sendConferenceParticipationConfirmationSuccessful())\n ),\n catchError(error =>\n of(\n addErrorToast(lang.assetManagerDashboard.requestError),\n sendConferenceParticipationConfirmationRejected(error)\n )\n )\n )\n )\n );\n\nexport const sendConferenceRequestEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SEND_CONFERENCE_REQUEST_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .post(\n `${API_URL}/request_conference/`,\n {\n conferenceId: payload.conference.id,\n conferenceTitle: payload.conference.title,\n conferenceStartDate: `${payload.conference.date} ${payload.conference.start_time}`,\n conferenceEndDate: `${payload.conference.date} ${payload.conference.end_time}`,\n conferenceDescription: payload.conference.description,\n conferenceAdditionalInfo: payload.conference.additional_information,\n userEmail: state.value.domain.auth.user.email,\n userName: state.value.domain.auth.user.name,\n userCompany: state.value.domain.auth.company || \"-\",\n userPhone: state.value.domain.auth.phone || \"-\",\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(() =>\n of(\n addSuccessToast(\n lang.assetManagerDashboard.requestConferenceSuccess\n ),\n sendConferenceParticipationConfirmationSuccessful()\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.assetManagerDashboard.requestError),\n sendConferenceParticipationConfirmationRejected(error)\n )\n )\n )\n )\n );\n","import { getCurrentLocation } from \"../../utils/app\";\nimport { RouteAction, RouteState } from \"./types\";\n\nconst SET_PREV_PATHNAME = \"SET_PREV_PATHNAME\";\nconst SET_PREV_SEARCH = \"SET_PREV_SEARCH\";\nconst SET_SEARCH_RESULTS_PARAMS = \"SET_SEARCH_RESULTS_PARAMS\";\nconst SET_FUND_BACK_ROUTE = \"SET_FUND_BACK_ROUTE\";\nconst SET_NEWS_BACK_ROUTE = \"SET_NEWS_BACK_ROUTE\";\nconst SET_REPORTS_BACK_ROUTE = \"SET_REPORTS_BACK_ROUTE\";\nconst SET_LAST_ROUTE = \"SET_LAST_ROUTE\";\nconst SET_FUND_ENTRANCE_SRC = \"SET_FUND_ENTRANCE_SRC\";\n\nexport const setPrevPathname = (pathname: string): RouteAction => ({\n type: SET_PREV_PATHNAME,\n payload: { pathname }\n});\n\nexport const setPrevSearch = (search: string): RouteAction => ({\n type: SET_PREV_SEARCH,\n payload: { search }\n});\n\nexport const setSearchResultsParams = (search: string): RouteAction => ({\n type: SET_SEARCH_RESULTS_PARAMS,\n payload: { search }\n});\n\nexport const setFundBackRoute = (): RouteAction => ({\n type: SET_FUND_BACK_ROUTE,\n payload: { pathname: getCurrentLocation() }\n});\n\nexport const setNewsBackRoute = (): RouteAction => ({\n type: SET_NEWS_BACK_ROUTE,\n payload: { pathname: getCurrentLocation() }\n});\n\nexport const setReportsBackRoute = (): RouteAction => ({\n type: SET_REPORTS_BACK_ROUTE,\n payload: { pathname: getCurrentLocation() }\n});\n\nexport const setLastRoute = (path = getCurrentLocation()): RouteAction => ({\n type: SET_LAST_ROUTE,\n payload: { pathname: path }\n});\n\nexport const setFundEntranceSrc = (pathname: string): RouteAction => ({\n type: SET_FUND_ENTRANCE_SRC,\n payload: { pathname }\n});\n\nexport default (\n state: RouteState = {\n prevPathname: \"\",\n prevSearch: \"\",\n searchResultsParams: \"\",\n fundBackRoute: \"\",\n newsBackRoute: \"\",\n reportsBackRoute: \"\",\n lastRoute: \"\",\n fundEntranceSrc: \"\"\n },\n { type, payload }: RouteAction\n) => {\n switch (type) {\n case SET_PREV_PATHNAME:\n return {\n ...state,\n prevPathname: payload.pathname\n };\n case SET_PREV_SEARCH:\n return {\n ...state,\n prevSearch: payload.search\n };\n case SET_SEARCH_RESULTS_PARAMS:\n return {\n ...state,\n searchResultsParams: payload.search\n };\n case SET_FUND_BACK_ROUTE:\n return {\n ...state,\n fundBackRoute: payload.pathname\n };\n case SET_NEWS_BACK_ROUTE:\n return {\n ...state,\n newsBackRoute: payload.pathname\n };\n case SET_REPORTS_BACK_ROUTE:\n return {\n ...state,\n reportsBackRoute: payload.pathname\n };\n case SET_LAST_ROUTE:\n return {\n ...state,\n lastRoute: payload.pathname\n };\n case SET_FUND_ENTRANCE_SRC:\n return {\n ...state,\n fundEntranceSrc: payload.pathname\n };\n default:\n return state;\n }\n};\n","import { RegisterAction, RegisterState } from \"./types\";\n\nconst SET_REGISTER_VISIBILITY = \"SET_REGISTER_VISIBILITY\";\nconst SET_REGISTER_LOADING = \"SET_REGISTER_LOADING\";\nconst SET_REGISTER_SUCCESS = \"SET_REGISTER_SUCCESS\";\nconst SET_REGISTER_ACCOUNT_TYPE = \"SET_REGISTER_ACCOUNT_TYPE\";\nconst SET_REGISTER_STEP = \"SET_REGISTER_STEP\";\nconst SET_REGISTER_LOCATION = \"SET_REGISTER_LOCATION\";\n\nexport const setRegisterVisibility = (value: boolean): RegisterAction => {\n if (!value)\n localStorage.removeItem('registrationModalVisibility')\n\n return ({\n type: SET_REGISTER_VISIBILITY,\n payload: { value },\n });\n}\n\nexport const setRegisterLoading = (value: boolean): RegisterAction => ({\n type: SET_REGISTER_LOADING,\n payload: { value },\n});\n\nexport const setRegisterSuccess = (value: boolean): RegisterAction => ({\n type: SET_REGISTER_SUCCESS,\n payload: { value },\n});\n\nexport const setRegisterAccountType = (value: string): RegisterAction => ({\n type: SET_REGISTER_ACCOUNT_TYPE,\n payload: { value },\n});\n\nexport const setRegisterStep = (value: number): RegisterAction => ({\n type: SET_REGISTER_STEP,\n payload: { value },\n});\n\nexport const setRegisterLocation = (value: string): RegisterAction => ({\n type: SET_REGISTER_LOCATION,\n payload: { value },\n});\n\nexport default (\n state: RegisterState = {\n isRegisterVisible: false,\n isRegisterLoading: false,\n registerAccountType: \"\",\n registerLocation: \"\",\n registerStep: 0,\n isRegisterSuccess: false,\n },\n { type, payload }: RegisterAction\n) => {\n switch (type) {\n case SET_REGISTER_VISIBILITY:\n return {\n ...state,\n isRegisterVisible: payload.value,\n registerStep: 0,\n registerAccountType: \"\",\n isMobileNavVisible: false,\n };\n case SET_REGISTER_LOADING:\n return {\n ...state,\n isRegisterLoading: payload.value,\n };\n case SET_REGISTER_SUCCESS:\n return {\n ...state,\n isRegisterSuccess: payload.value,\n };\n case SET_REGISTER_ACCOUNT_TYPE:\n return {\n ...state,\n registerAccountType: payload.value,\n };\n case SET_REGISTER_STEP:\n return {\n ...state,\n registerStep: payload.value,\n };\n case SET_REGISTER_LOCATION:\n return {\n ...state,\n registerLocation: payload.value,\n };\n default:\n return state;\n }\n};\n","import { AssetManagerChartsAction, AssetManagerChartsState } from \"./types\";\n\nconst SET_ASSET_MANAGER_CHART_LOADING = \"SET_ASSET_MANAGER_CHART_LOADING\";\n\nexport const setAssetManagerChartLoading = (\n isLoading: boolean,\n chart: string\n): AssetManagerChartsAction => ({\n type: SET_ASSET_MANAGER_CHART_LOADING,\n payload: { isLoading, chart },\n});\n\nexport default (\n state: AssetManagerChartsState = {\n allMyProductsChartDashboard: { isLoading: false },\n allMyProductsChart: { isLoading: false },\n myProductsInPeergroupChart: { isLoading: false },\n myTop10FundsChart: { isLoading: false },\n top10FundsInSeChart: { isLoading: false },\n top10PeergroupsInSeChart: { isLoading: false },\n topPeergroupsFund: { isLoading: false },\n },\n { type, payload }: AssetManagerChartsAction\n) => {\n switch (type) {\n case SET_ASSET_MANAGER_CHART_LOADING:\n return {\n ...state,\n [payload.chart]: {\n ...state[payload.chart],\n isLoading: payload.isLoading,\n },\n };\n default:\n return state;\n }\n};\n","import { API_URL, getReqOptions } from \"./config\";\nimport {\n Action,\n ContactAction,\n ContactState,\n ContactValues,\n ErrorAction,\n Meta,\n} from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { addErrorToast, addSuccessToast } from \"../ui/toasts\";\nimport { catchError, mergeMap } from \"rxjs/operators\";\n\nimport { StateValue } from \"../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { getFormattedDate } from \"../../utils/formats\";\nimport { lang } from \"../../lang/lang\";\nimport { ofType } from \"redux-observable\";\n\nconst SEND_MESSAGE_REQUESTED = \"SEND_MESSAGE_REQUESTED\";\nconst SEND_MESSAGE_SUCCESSFUL = \"SEND_MESSAGE_SUCCESSFUL\";\nconst SEND_MESSAGE_REJECTED = \"SEND_MESSAGE_REJECTED\";\nconst SEND_PREMIUM_MESSAGE_REQUESTED = \"SEND_PREMIUM_MESSAGE_REQUESTED\";\nconst SEND_PREMIUM_MESSAGE_SUCCESSFUL = \"SEND_PREMIUM_MESSAGE_SUCCESSFUL\";\nconst SEND_PREMIUM_MESSAGE_REJECTED = \"SEND_PREMIUM_MESSAGE_REJECTED\";\nconst SEND_FUND_REQUEST_REQUESTED = \"SEND_FUND_REQUEST_REQUESTED\";\nconst SEND_FUND_REQUEST_SUCCESSFUL = \"SEND_FUND_REQUEST_SUCCESSFUL\";\nconst SEND_FUND_REQUEST_REJECTED = \"SEND_FUND_REQUEST_REJECTED\";\nconst SEND_TEAM_REQUEST_REQUESTED = \"SEND_TEAM_REQUEST_REQUESTED\";\nconst SEND_TEAM_REQUEST_SUCCESSFUL = \"SEND_TEAM_REQUEST_SUCCESSFUL\";\nconst SEND_TEAM_REQUEST_REJECTED = \"SEND_TEAM_REQUEST_REJECTED\";\nconst SUBSCRIBE_LIST_REQUEST_REQUESTED = \"SUBSCRIBE_LIST_REQUEST_REQUESTED\";\nconst SUBSCRIBE_LIST_REQUEST_SUCCESSFUL = \"SUBSCRIBE_LIST_REQUEST_SUCCESSFUL\";\nconst SUBSCRIBE_LIST_REQUEST_REJECTED = \"SUBSCRIBE_LIST_REQUEST_REJECTED\";\nconst UNSUBSCRIBE_LIST_REQUEST_REQUESTED = \"UNSUBSCRIBE_LIST_REQUEST_REQUESTED\";\nconst UNSUBSCRIBE_LIST_REQUEST_SUCCESSFUL =\n \"UNSUBSCRIBE_LIST_REQUEST_SUCCESSFUL\";\nconst UNSUBSCRIBE_LIST_REQUEST_REJECTED = \"UNSUBSCRIBE_LIST_REQUEST_REJECTED\";\nconst UNSUBSCRIBE_REQUESTED = \"UNSUBSCRIBE_REQUESTED\";\nconst UNSUBSCRIBE_SUCCESSFUL = \"UNSUBSCRIBE_SUCCESSFUL\";\nconst UNSUBSCRIBE_REJECTED = \"UNSUBSCRIBE_REJECTED\";\nconst SEND_AM_REQUEST_REQUESTED = \"SEND_AM_REQUEST_REQUESTED\";\nconst SEND_AM_REQUEST_SUCCESSFUL = \"SEND_AM_REQUEST_SUCCESSFUL\";\nconst SEND_AM_REQUEST_REJECTED = \"SEND_AM_REQUEST_REJECTED\";\n\nexport const sendMessage = (\n values: ContactValues,\n meta: Meta\n): ContactAction => ({\n type: SEND_MESSAGE_REQUESTED,\n payload: { values, meta },\n});\n\nconst sendMessageSuccessful = (): Action => ({\n type: SEND_MESSAGE_SUCCESSFUL,\n});\n\nconst sendMessageRejected = (error: TypeError): ErrorAction => ({\n type: SEND_MESSAGE_REJECTED,\n error,\n});\n\nexport const sendPremiumMessage = (\n values: ContactValues,\n meta: Meta\n): ContactAction => ({\n type: SEND_PREMIUM_MESSAGE_REQUESTED,\n payload: { values, meta },\n});\n\nconst sendPremiumMessageSuccessful = (): Action => ({\n type: SEND_PREMIUM_MESSAGE_SUCCESSFUL,\n});\n\nconst sendPremiumMessageRejected = (error: TypeError): ErrorAction => ({\n type: SEND_PREMIUM_MESSAGE_REJECTED,\n error,\n});\n\nexport const sendFundRequest = (\n fundsIds: number[],\n type: string,\n meta?: Meta\n): ContactAction => ({\n type: SEND_FUND_REQUEST_REQUESTED,\n payload: { fundsIds, type, meta },\n});\n\nconst sendFundRequestSuccessful = (): Action => ({\n type: SEND_FUND_REQUEST_SUCCESSFUL,\n});\n\nconst sendFundRequestRejected = (error: TypeError): ErrorAction => ({\n type: SEND_FUND_REQUEST_REJECTED,\n error,\n});\n\nexport const sendTeamRequest = (name: string, meta?: Meta): ContactAction => ({\n type: SEND_TEAM_REQUEST_REQUESTED,\n payload: { name, meta },\n});\n\nconst sendTeamRequestSuccessful = (): Action => ({\n type: SEND_TEAM_REQUEST_SUCCESSFUL,\n});\n\nconst sendTeamRequestRejected = (error?: TypeError): ErrorAction => ({\n type: SEND_TEAM_REQUEST_REJECTED,\n error,\n});\n\nexport const subscribeList = (): Action => ({\n type: SUBSCRIBE_LIST_REQUEST_REQUESTED,\n});\n\nconst subscribeListSuccessful = (): Action => ({\n type: SUBSCRIBE_LIST_REQUEST_SUCCESSFUL,\n});\n\nconst subscribeListRejected = (error?: TypeError): ErrorAction => ({\n type: SUBSCRIBE_LIST_REQUEST_REJECTED,\n error,\n});\n\nexport const unsubscribeList = (): Action => ({\n type: UNSUBSCRIBE_LIST_REQUEST_REQUESTED,\n});\n\nconst unsubscribeListSuccessful = (): Action => ({\n type: UNSUBSCRIBE_LIST_REQUEST_SUCCESSFUL,\n});\n\nconst unsubscribeListRejected = (error?: TypeError): ErrorAction => ({\n type: UNSUBSCRIBE_LIST_REQUEST_REJECTED,\n error,\n});\n\nexport const unsubscribe = (email: string): ContactAction => ({\n type: UNSUBSCRIBE_REQUESTED,\n payload: { email },\n});\n\nconst unsubscribeSuccessful = (): Action => ({\n type: UNSUBSCRIBE_SUCCESSFUL,\n});\n\nconst unsubscribeRejected = (error?: TypeError): ErrorAction => ({\n type: UNSUBSCRIBE_REJECTED,\n error,\n});\n\nexport const sendAmRequest = (\n name: string,\n type: string,\n meta?: Meta\n): ContactAction => ({\n type: SEND_AM_REQUEST_REQUESTED,\n payload: { name, type, meta },\n});\n\nconst sendAmRequestSuccessful = (): Action => ({\n type: SEND_AM_REQUEST_SUCCESSFUL,\n});\n\nconst sendAmRequestRejected = (error: TypeError): ErrorAction => ({\n type: SEND_AM_REQUEST_REJECTED,\n error,\n});\n\nexport default (state: ContactState = {}, { type }: ContactAction) => {\n switch (type) {\n default:\n return state;\n }\n};\n\nexport const sendMessageEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(SEND_MESSAGE_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n return ajax\n .post(\n `${API_URL}/send_message/`,\n {\n name: payload.values.name,\n email: payload.values.email,\n phone: payload.values.phone || \"-\",\n message: payload.values.message,\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(sendMessageSuccessful());\n }),\n catchError(error => {\n if (reject) reject(error);\n return of(sendMessageRejected(error));\n })\n );\n })\n );\n\nexport const sendPremiumMessageEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(SEND_PREMIUM_MESSAGE_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n return ajax\n .post(\n `${API_URL}/send_premium_message/`,\n {\n name: payload.values.name,\n email: payload.values.email,\n phone: payload.values.phone || \"-\",\n message: payload.values.message,\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(sendPremiumMessageSuccessful());\n }),\n catchError(error => {\n if (reject) reject(error);\n return of(sendPremiumMessageRejected(error));\n })\n );\n })\n );\n\nexport const sendFundRequestEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SEND_FUND_REQUEST_REQUESTED),\n mergeMap(({ payload }) => {\n const date = new Date();\n const url = state.value.domain.auth.isAssetManager\n ? \"send_asset_manager_request\"\n : \"send_fund_request\";\n\n return ajax\n .post(\n `${API_URL}/${url}/`,\n {\n funds: payload.fundsIds,\n email: state.value.domain.auth.user\n ? state.value.domain.auth.user.email\n : lang.fund.anonymous,\n request_type: payload.type,\n date: getFormattedDate(date.toString()),\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(() =>\n of(\n addSuccessToast(lang.fund.fundRequestSent),\n sendFundRequestSuccessful()\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.assetManagerDashboard.errors.default),\n sendFundRequestRejected(error)\n )\n )\n );\n })\n );\n\nexport const sendTeamRequestEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SEND_TEAM_REQUEST_REQUESTED),\n mergeMap(({ payload }) => {\n const date = new Date();\n const { resolve, reject }: Meta = payload.meta;\n if (payload.name) {\n return ajax\n .post(\n `${API_URL}/send_team_request/`,\n {\n name: payload.name,\n is_asset_manager: state.value.domain.auth.isAssetManager,\n email: state.value.domain.auth.user\n ? state.value.domain.auth.user.email\n : lang.fund.anonymous,\n date: getFormattedDate(date.toString()),\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(sendTeamRequestSuccessful());\n }),\n catchError(error => {\n if (reject) reject(error);\n return of(sendTeamRequestRejected(error));\n })\n );\n } else {\n return of(sendTeamRequestRejected());\n }\n })\n );\n\nexport const subscribeListEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SUBSCRIBE_LIST_REQUEST_REQUESTED),\n mergeMap(() => {\n const date = new Date();\n const { user } = state.value.domain.auth;\n\n if (user) {\n return ajax\n .post(\n `${API_URL}/subscribe_list/`,\n {\n name: user.name,\n email: user.email,\n date: getFormattedDate(date.toString()),\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(() =>\n of(\n addSuccessToast(lang.premium.subscribeListSuccess),\n subscribeListSuccessful()\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.premium.subscribeListError),\n subscribeListRejected(error)\n )\n )\n );\n } else {\n return of(\n addErrorToast(lang.premium.subscribeListError),\n subscribeListRejected()\n );\n }\n })\n );\n\nexport const unsubscribeListEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(UNSUBSCRIBE_LIST_REQUEST_REQUESTED),\n mergeMap(() => {\n const date = new Date();\n const { user } = state.value.domain.auth;\n\n if (user) {\n return ajax\n .post(\n `${API_URL}/unsubscribe_list/`,\n {\n name: user.name,\n email: user.email,\n date: getFormattedDate(date.toString()),\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(() =>\n of(\n addSuccessToast(lang.premium.unsubscribeListSuccess),\n unsubscribeListSuccessful()\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.premium.subscribeListError),\n unsubscribeListRejected(error)\n )\n )\n );\n } else {\n return of(\n addErrorToast(lang.premium.subscribeListError),\n unsubscribeListRejected()\n );\n }\n })\n );\n\nexport const unsubscribeEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(UNSUBSCRIBE_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .put(\n `${API_URL}/unsubscribe`,\n {\n email: payload.email,\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(() => of(unsubscribeSuccessful())),\n catchError(error => of(unsubscribeRejected(error)))\n )\n )\n );\n\nexport const sendAmRequestEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SEND_AM_REQUEST_REQUESTED),\n mergeMap(({ payload }) => {\n const date = new Date();\n\n return ajax\n .post(\n `${API_URL}/send_asset_manager_box_request/`,\n {\n asset_manager: payload.name,\n email: state.value.domain.auth.user\n ? state.value.domain.auth.user.email\n : lang.fund.anonymous,\n request_type: payload.type,\n date: getFormattedDate(date.toString()),\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(() =>\n of(\n addSuccessToast(lang.assetManagers.requestSuccess),\n sendAmRequestSuccessful()\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.assetManagerDashboard.errors.default),\n sendAmRequestRejected(error)\n )\n )\n );\n })\n );\n","import { ofType } from \"redux-observable\";\nimport { Observable, of } from \"rxjs\";\nimport { ajax } from \"rxjs/ajax\";\nimport {\n catchError,\n filter,\n mergeMap,\n takeUntil\n} from \"rxjs/operators\";\n\nimport { getFilterSearchQueryParams } from \"./../../../utils/routing\";\nimport { setFilterSearchCountLoading } from \"./../../ui/search\";\nimport { StateValue } from \"../../types\";\nimport {\n setFUndsListModalVisibility,\n setFundsLoading\n} from \"../../ui/fundsList\";\nimport { API_URL } from \"../config\";\nimport {\n Action,\n CompareFund,\n ErrorAction,\n FundsAction,\n FundsFilterSearchState\n} from \"../types\";\n\nconst FETCH_FILTER_SEARCH_FUNDS_REJECTED = \"FETCH_FILTER_SEARCH_FUNDS_REJECTED\";\nconst FETCH_FILTER_SEARCH_FUNDS_REQUESTED =\n \"FETCH_FILTER_SEARCH_FUNDS_REQUESTED\";\nconst FETCH_FILTER_SEARCH_FUNDS_SUCCESSFUL =\n \"FETCH_FILTER_SEARCH_FUNDS_SUCCESSFUL\";\nconst FETCH_FILTER_SEARCH_COUNT_REQUESTED =\n \"FETCH_FILTER_SEARCH_COUNT_REQUESTED\";\nconst FETCH_FILTER_SEARCH_COUNT_REJECTED = \"FETCH_FILTER_SEARCH_COUNT_REJECTED\";\nconst FETCH_FILTER_SEARCH_COUNT_SUCCESSFUL =\n \"FETCH_FILTER_SEARCH_COUNT_SUCCESSFUL\";\nconst FETCH_FILTER_SEARCH_PERF_RISK_REQUESTED =\n \"FETCH_FILTER_SEARCH_PERF_RISK_REQUESTED\";\nconst FETCH_FILTER_SEARCH_PERF_RISK_REJECTED =\n \"FETCH_FILTER_SEARCH_PERF_RISK_REJECTED\";\nconst FETCH_FILTER_SEARCH_PERF_RISK_SUCCESSFUL =\n \"FETCH_FILTER_SEARCH_PERF_RISK_SUCCESSFUL\";\nconst SET_FILTER_SEARCH_FUNDS_COUNT = \"SET_FILTER_SEARCH_FUNDS_COUNT\";\nconst SET_FILTER_SEARCH_FUNDS = \"SET_FILTER_SEARCH_FUNDS\";\n\nexport const fetchFilterSearchFunds = (): Action => ({\n type: FETCH_FILTER_SEARCH_FUNDS_REQUESTED\n});\n\nexport const fetchFilterSearchFundsSuccessful = (\n funds: CompareFund[]\n): FundsAction => ({\n type: FETCH_FILTER_SEARCH_FUNDS_SUCCESSFUL,\n payload: { funds }\n});\n\nexport const fetchFilterSearchFundsRejected = (\n error?: TypeError\n): ErrorAction => ({\n type: FETCH_FILTER_SEARCH_FUNDS_REJECTED,\n error\n});\n\nexport const setFilterSearchFundsCount = (count: any): FundsAction => ({\n type: SET_FILTER_SEARCH_FUNDS_COUNT,\n payload: { count }\n});\n\nexport const fetchFilterSearchCount = (): Action => ({\n type: FETCH_FILTER_SEARCH_COUNT_REQUESTED\n});\n\nconst fetchFilterSearchCountSuccessful = (count: number): FundsAction => ({\n type: FETCH_FILTER_SEARCH_COUNT_SUCCESSFUL,\n payload: { count }\n});\n\nconst fetchFilterSearchCountRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_FILTER_SEARCH_COUNT_REJECTED,\n error\n});\n\nexport const fetchFilterSearchPerfRisk = (): Action => ({\n type: FETCH_FILTER_SEARCH_PERF_RISK_REQUESTED\n});\n\nconst fetchFilterSearchPerfRiskSuccessful = ({\n results,\n count\n}: any): FundsAction => ({\n type: FETCH_FILTER_SEARCH_PERF_RISK_SUCCESSFUL,\n payload: { count, results }\n});\n\nconst fetchFilterSearchPerfRiskRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_FILTER_SEARCH_PERF_RISK_REJECTED,\n error\n});\n\nexport default (\n state: FundsFilterSearchState = {\n filterSearchFunds: [],\n filterSearchCount: 0,\n perfRiskFunds: []\n },\n { type, payload }: FundsAction\n) => {\n switch (type) {\n case FETCH_FILTER_SEARCH_FUNDS_SUCCESSFUL:\n return {\n ...state,\n filterSearchFunds: payload.funds\n };\n case SET_FILTER_SEARCH_FUNDS_COUNT:\n return {\n ...state,\n filterSearchCount: payload.count\n };\n case FETCH_FILTER_SEARCH_COUNT_SUCCESSFUL:\n return {\n ...state,\n filterSearchCount: payload.count\n };\n case FETCH_FILTER_SEARCH_PERF_RISK_SUCCESSFUL:\n return {\n ...state,\n filterSearchCount: payload.count,\n perfRiskFunds: payload.results\n };\n case SET_FILTER_SEARCH_FUNDS:\n return {\n ...state,\n filterSearchFunds: payload.funds\n };\n default:\n return state;\n }\n};\n\nexport const fetchFilterSearchFundsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_FILTER_SEARCH_FUNDS_REQUESTED),\n mergeMap(() => {\n const queryParams = getFilterSearchQueryParams(state.value.form);\n const params =\n queryParams === \"\" ? \"?m=true&per_page=100\" : \"&m=true&per_page=100\";\n\n return ajax.get(`${API_URL}/filter_search/${queryParams}${params}`).pipe(\n mergeMap(({ response }) =>\n of(\n setFundsLoading(false),\n setFUndsListModalVisibility(true),\n setFilterSearchFundsCount(response.count),\n fetchFilterSearchFundsSuccessful(response.results)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_FILTER_SEARCH_FUNDS_REQUESTED)\n )\n ),\n catchError(error =>\n of(setFundsLoading(false), fetchFilterSearchFundsRejected(error))\n )\n );\n })\n );\n\nexport const fetchFilterSearchCountEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_FILTER_SEARCH_COUNT_REQUESTED),\n mergeMap(() => {\n const queryParams = getFilterSearchQueryParams(state.value.form);\n const params = queryParams === \"\" ? \"?m=true\" : \"&m=true\";\n\n return ajax\n .get(`${API_URL}/filter_search_count/${queryParams}${params}`)\n .pipe(\n mergeMap(({ response }) =>\n of(\n setFilterSearchCountLoading(false),\n fetchFilterSearchCountSuccessful(response.count)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_FILTER_SEARCH_COUNT_REQUESTED)\n )\n ),\n catchError(error =>\n of(\n setFilterSearchCountLoading(false),\n fetchFilterSearchCountRejected(error)\n )\n )\n );\n }),\n catchError(error =>\n of(\n setFilterSearchCountLoading(false),\n fetchFilterSearchCountRejected(error)\n )\n )\n );\n\nexport const fetchFilterSearchPerfRiskEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_FILTER_SEARCH_PERF_RISK_REQUESTED),\n mergeMap(() => {\n const queryParams = getFilterSearchQueryParams(state.value.form);\n const params =\n queryParams === \"\" ? \"?m=true&per_page=100\" : \"&m=true&per_page=100\";\n\n return ajax\n .get(`${API_URL}/filter_search_perf_risk/${queryParams}${params}`)\n .pipe(\n mergeMap(({ response }) =>\n of(\n setFilterSearchCountLoading(false),\n fetchFilterSearchPerfRiskSuccessful(response)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(\n ({ type }) => type === FETCH_FILTER_SEARCH_PERF_RISK_REQUESTED\n )\n )\n ),\n catchError(error =>\n of(\n setFilterSearchCountLoading(false),\n fetchFilterSearchPerfRiskRejected(error)\n )\n )\n );\n }),\n catchError(error =>\n of(\n setFilterSearchCountLoading(false),\n fetchFilterSearchPerfRiskRejected(error)\n )\n )\n );\n","import {\n Action,\n CompareFund,\n ErrorAction,\n Fund,\n FundsAction,\n FundsAifState,\n Meta,\n News,\n PaidDocument,\n} from \"../types\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, filter, mergeMap, takeUntil } from \"rxjs/operators\";\nimport { setFundsLoading, setSelectedFundLast } from \"../../ui/fundsList\";\n\nimport { API_URL } from \"../config\";\nimport { ajax } from \"rxjs/ajax\";\nimport { getReqOptions } from \"./../config\";\nimport { lang } from \"../../../lang/lang\";\nimport { ofType } from \"redux-observable\";\nimport { setFundAifNewsLoading } from \"../../ui/fundDetails\";\nimport { setFundPhotoModalUploading } from \"./../../ui/fundPhotoModal\";\nimport { setSelectedFund } from \"./search\";\n\nconst FETCH_FUND_AIF_NEWS_REQUESTED = \"FETCH_FUND_AIF_NEWS_REQUESTED\";\nconst FETCH_FUND_AIF_NEWS_SUCCESSFUL = \"FETCH_FUND_AIF_NEWS_SUCCESSFUL\";\nconst FETCH_FUND_AIF_NEWS_REJECTED = \"FETCH_FUND_AIF_NEWS_REJECTED\";\nconst FETCH_AIF_FUNDS_REQUESTED = \"FETCH_AIF_FUNDS_REQUESTED\";\nconst FETCH_AIF_FUNDS_SUCCESSFUL = \"FETCH_AIF_FUNDS_SUCCESSFUL\";\nconst FETCH_AIF_FUNDS_REJECTED = \"FETCH_AIF_FUNDS_REJECTED\";\nconst SAVE_FUND_REQUESTED = \"SAVE_FUND_REQUESTED\";\nconst SAVE_FUND_SUCCESSFUL = \"SAVE_FUND_SUCCESSFUL\";\nconst SAVE_FUND_REJECTED = \"SAVE_FUND_REJECTED\";\nconst FETCH_PAID_DOCUMENT_REQUESTED = \"FETCH_PAID_DOCUMENT_REQUESTED\";\nconst FETCH_PAID_DOCUMENT_SUCCESSFUL = \"FETCH_PAID_DOCUMENT_SUCCESSFUL\";\nconst FETCH_PAID_DOCUMENT_REJECTED = \"FETCH_PAID_DOCUMENT_REJECTED\";\nconst SET_SELECTED_AIF_FUNDS = \"SET_SELECTED_AIF_FUNDS\";\n\nexport const fetchFundAifNews = (id: number): FundsAction => ({\n type: FETCH_FUND_AIF_NEWS_REQUESTED,\n payload: { id },\n});\n\nconst fetchFundAifNewsSuccessful = (news: News[], id: number): FundsAction => ({\n type: FETCH_FUND_AIF_NEWS_SUCCESSFUL,\n payload: { news, id },\n});\n\nconst fetchFundAifNewsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_FUND_AIF_NEWS_REJECTED,\n error,\n});\n\nexport const fetchAifFunds = (id?: number): FundsAction => ({\n type: FETCH_AIF_FUNDS_REQUESTED,\n payload: { id },\n});\n\nconst fetchAifFundsSuccessful = (funds: CompareFund[]): FundsAction => ({\n type: FETCH_AIF_FUNDS_SUCCESSFUL,\n payload: { funds },\n});\n\nconst fetchAifFundsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_AIF_FUNDS_REJECTED,\n error,\n});\n\nexport const saveFund = (fund: Fund, meta: Meta): FundsAction => ({\n type: SAVE_FUND_REQUESTED,\n payload: { fund, meta },\n});\n\nexport const saveFundSuccessful = (fund: Fund): FundsAction => ({\n type: SAVE_FUND_SUCCESSFUL,\n payload: { fund },\n});\n\nexport const saveFundRejected = (error?: TypeError): ErrorAction => ({\n type: SAVE_FUND_REJECTED,\n error,\n});\n\nexport const fetchPaidDocument = (): Action => ({\n type: FETCH_PAID_DOCUMENT_REQUESTED,\n});\n\nconst fetchPaidDocumentSuccessful = (document: PaidDocument): FundsAction => ({\n type: FETCH_PAID_DOCUMENT_SUCCESSFUL,\n payload: { document },\n});\n\nconst fetchPaidDocumentRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_PAID_DOCUMENT_REJECTED,\n error,\n});\n\nexport const setSelectedAifFunds = (\n fund: Fund,\n isChecked: boolean\n): FundsAction => ({\n type: SET_SELECTED_AIF_FUNDS,\n payload: { fund, isChecked },\n});\n\nexport default (\n state: FundsAifState = {\n selectedAifFunds: {},\n fundAifNews: {},\n aifFunds: [],\n paidDocument: null,\n },\n { type, payload }: FundsAction\n) => {\n switch (type) {\n case FETCH_FUND_AIF_NEWS_SUCCESSFUL:\n return {\n ...state,\n fundAifNews: {\n ...state.fundAifNews,\n [payload.id]: payload.news,\n },\n };\n case FETCH_AIF_FUNDS_SUCCESSFUL:\n return {\n ...state,\n aifFunds: payload.funds,\n };\n case FETCH_PAID_DOCUMENT_SUCCESSFUL:\n return {\n ...state,\n paidDocument: payload.document,\n };\n case SET_SELECTED_AIF_FUNDS:\n if (payload.isChecked) {\n return {\n ...state,\n selectedAifFunds: {\n ...state.selectedAifFunds,\n [payload.fund.id]: payload.fund,\n },\n };\n } else {\n const selectedAifFunds = state.selectedAifFunds;\n if (selectedAifFunds[payload.fund.id]) {\n delete selectedAifFunds[payload.fund.id];\n }\n\n return {\n ...state,\n selectedAifFunds: {\n ...selectedAifFunds,\n },\n };\n }\n default:\n return state;\n }\n};\n\nexport const fetchFundAifNewsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_FUND_AIF_NEWS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(\n `${API_URL}/aif/news/?fund_id=${payload.id\n }&lang=${lang.getLanguage()}`\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n setFundAifNewsLoading(false),\n fetchFundAifNewsSuccessful(response.results, payload.id)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_FUND_AIF_NEWS_REQUESTED)\n )\n ),\n catchError(error =>\n of(setFundAifNewsLoading(false), fetchFundAifNewsRejected(error))\n )\n )\n )\n );\n\nexport const fetchAifFundsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_AIF_FUNDS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax.get(`${API_URL}/aif/funds/`).pipe(\n mergeMap(({ response }) => {\n const selectedFund = response.filter(\n fund => fund.id === payload.id\n )[0];\n return of(\n setFundsLoading(false),\n setSelectedFund(selectedFund),\n setSelectedFundLast(selectedFund?.instrument?.rank > response.length),\n fetchAifFundsSuccessful(response)\n );\n }),\n takeUntil(\n action$.pipe(filter(({ type }) => type === FETCH_AIF_FUNDS_REQUESTED))\n ),\n catchError(error =>\n of(setFundsLoading(false), fetchAifFundsRejected(error))\n )\n )\n )\n );\n\nexport const saveFundEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(SAVE_FUND_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n\n return ajax\n .post(\n `${API_URL}/funds/${payload.fund.id}/photo/`,\n payload.fund,\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(\n setFundPhotoModalUploading(false),\n saveFundSuccessful(response)\n );\n }),\n catchError(error => {\n if (reject) reject(error);\n return of(\n setFundPhotoModalUploading(false),\n saveFundRejected(error)\n );\n })\n );\n })\n );\n\nexport const fetchPaidDocumentEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_PAID_DOCUMENT_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/aif/scope_aif_document/`, getReqOptions()).pipe(\n mergeMap(({ response }) => of(fetchPaidDocumentSuccessful(response))),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_PAID_DOCUMENT_REQUESTED)\n )\n ),\n catchError(error => of(fetchPaidDocumentRejected(error)))\n )\n )\n );\n","import { FundRatingChartData } from \"./../redux/domain/types\";\r\nimport HighchartsReact from \"highcharts-react-official\";\r\nimport { RefObject } from \"react\";\r\nimport { colors } from \"./styles\";\r\n\r\nexport const getChartsLang = () => ({\r\n en: {\r\n months: [\r\n \"January\",\r\n \"February\",\r\n \"March\",\r\n \"April\",\r\n \"May\",\r\n \"June\",\r\n \"July\",\r\n \"August\",\r\n \"September\",\r\n \"October\",\r\n \"November\",\r\n \"December\",\r\n ],\r\n weekdays: [\r\n \"Sunday\",\r\n \"Monday\",\r\n \"Tuesdey\",\r\n \"Wednesday\",\r\n \"Thursday\",\r\n \"Friday\",\r\n \"Saturday\",\r\n ],\r\n shortMonths: [\r\n \"Jan\",\r\n \"Feb\",\r\n \"Mar\",\r\n \"Apr\",\r\n \"May\",\r\n \"Jun\",\r\n \"Jul\",\r\n \"Aug\",\r\n \"Sep\",\r\n \"Oct\",\r\n \"Nov\",\r\n \"Dec\",\r\n ],\r\n },\r\n de: {\r\n months: [\r\n \"Januar\",\r\n \"Februar\",\r\n \"März\",\r\n \"April\",\r\n \"Mai\",\r\n \"Juni\",\r\n \"Juli\",\r\n \"August\",\r\n \"September\",\r\n \"Oktober\",\r\n \"November\",\r\n \"Dezember\",\r\n ],\r\n weekdays: [\r\n \"Sonntag\",\r\n \"Montag\",\r\n \"Dienstag\",\r\n \"Mittwoch\",\r\n \"Donnerstag\",\r\n \"Freitag\",\r\n \"Samstag\",\r\n ],\r\n shortMonths: [\r\n \"Jan\",\r\n \"Feb\",\r\n \"Mär\",\r\n \"Apr\",\r\n \"Mai\",\r\n \"Jun\",\r\n \"Jul\",\r\n \"Aug\",\r\n \"Sep\",\r\n \"Okt\",\r\n \"Nov\",\r\n \"Dez\",\r\n ],\r\n },\r\n});\r\n\r\nexport const getRank = (value: number) =>\r\n value >= 78\r\n ? \"A\"\r\n : value >= 60\r\n ? \"B\"\r\n : value >= 41\r\n ? \"C\"\r\n : value >= 23\r\n ? \"D\"\r\n : \"E\";\r\n\r\nlet lettersArray = [];\r\nlet circle = null;\r\nlet text = null;\r\n\r\nexport const drawRatingHistoryChart = (\r\n chartRef: RefObject,\r\n { rating }: FundRatingChartData\r\n) => {\r\n const { chart } = chartRef.current;\r\n const xAxis = chart.xAxis[0];\r\n const yAxis = chart.yAxis[0];\r\n const points = [23, 41, 60, 78];\r\n const letters = [\r\n { letter: \"A\", position: 90 },\r\n { letter: \"B\", position: 72 },\r\n { letter: \"C\", position: 53 },\r\n { letter: \"D\", position: 35 },\r\n { letter: \"E\", position: 15 },\r\n ];\r\n\r\n const plotLines = [];\r\n\r\n plotLines.forEach(v => chart.yAxis[0].removePlotLine(v));\r\n\r\n points.map((point, index) =>\r\n chart.yAxis[0].addPlotLine({\r\n value: point,\r\n color: \"#e6e6e6\",\r\n width: 1,\r\n zIndex: -1,\r\n id: `plot-line-${index}`,\r\n })\r\n );\r\n\r\n letters.map(({ letter, position }, index) => {\r\n if (lettersArray[index]) {\r\n lettersArray[index].destroy();\r\n }\r\n return (lettersArray[index] = chart.renderer\r\n .label(letter, 15, yAxis.toPixels(position, false))\r\n .css({ color: colors.gray2 })\r\n .add());\r\n });\r\n\r\n if (text && circle) {\r\n circle.destroy();\r\n text.destroy();\r\n }\r\n\r\n circle = chart.renderer\r\n .circle(\r\n xAxis.toPixels(rating[rating.length - 1].x, false),\r\n yAxis.toPixels(rating[rating.length - 1].y, false) - 26,\r\n 16\r\n )\r\n .attr({ fill: colors.blue })\r\n .css({ \"z-index\": 999 })\r\n .add();\r\n\r\n text = chart.renderer\r\n .text(\r\n getRank(rating[rating.length - 1].y),\r\n xAxis.toPixels(rating[rating.length - 1].x, false),\r\n yAxis.toPixels(rating[rating.length - 1].y, false) - 22\r\n )\r\n .attr({ \"text-anchor\": \"middle\" })\r\n .css({ color: colors.white, \"z-index\": 9999, \"font-weight\": \"bold\" })\r\n .add();\r\n};\r\n\r\nexport const monthInterval = 30 * 24 * 3600 * 1000;\r\n\r\nexport const getDateTickInterval = () => monthInterval * 6.1;\r\n\r\nexport const getTickPositioner = ({ min, max }, tickInterval) => {\r\n const positions = [];\r\n let tick = Math.floor(min);\r\n\r\n if (max !== null && min !== null) {\r\n for (tick; tick < max; tick += tickInterval) {\r\n positions.push(tick);\r\n }\r\n }\r\n positions.push(max);\r\n\r\n return positions;\r\n};\r\n\r\nexport const getMinDate = (period: number, recordDateUTC: number) => {\r\n const date = new Date(recordDateUTC);\r\n return date.setFullYear(date.getFullYear() - period);\r\n};\r\n\r\nexport const getLastDayOfMonth = (year, month) =>\r\n new Date(year, month + 1, 0).getDate();\r\n\r\nexport const getInitialFromDate = () => {\r\n const d = new Date();\r\n return [1, d.getMonth(), d.getFullYear()];\r\n};\r\n\r\nexport const getInitialToDate = () => {\r\n const d = new Date();\r\n const y = d.getFullYear();\r\n const m = d.getMonth() + 1;\r\n return [getLastDayOfMonth(y, m), m, y];\r\n};\r\n\r\nexport const getFromDateUTC = date => date && Date.UTC(date[2], date[1], 1);\r\n\r\nexport const getToDateUTC = date =>\r\n date && Date.UTC(date[2], date[1], getLastDayOfMonth(date[2], date[1]));\r\n","import { API_URL, getReqOptions } from \"../config\";\nimport {\n Action,\n ErrorAction,\n FundsAction,\n FundsWatchlistState,\n Watchlist,\n} from \"../types\";\nimport { Observable, of } from \"rxjs\";\nimport { addErrorToast, addSuccessToast } from \"../../ui/toasts\";\nimport { catchError, filter, mergeMap, takeUntil } from \"rxjs/operators\";\n\nimport { ajax } from \"rxjs/ajax\";\nimport { lang } from \"../../../lang/lang\";\nimport { ofType } from \"redux-observable\";\n\nconst ADD_FUND_TO_WATCHLIST_REQUESTED = \"ADD_FUND_TO_WATCHLIST_REQUESTED\";\nconst ADD_FUND_TO_WATCHLIST_SUCCESSFUL = \"ADD_FUND_TO_WATCHLIST_SUCCESSFUL\";\nconst ADD_FUND_TO_WATCHLIST_REJECTED = \"ADD_FUND_TO_WATCHLIST_REJECTED\";\nconst FETCH_WATCHLIST_REQUESTED = \"FETCH_WATCHLIST_REQUESTED\";\nconst FETCH_WATCHLIST_SUCCESSFUL = \"FETCH_WATCHLIST_SUCCESSFUL\";\nconst FETCH_WATCHLIST_REJECTED = \"FETCH_WATCHLIST_REJECTED\";\nconst DELETE_FUND_FROM_WATCHLIST_REQUESTED =\n \"DELETE_FUND_FROM_WATCHLIST_REQUESTED\";\nconst DELETE_FUND_FROM_WATCHLIST_SUCCESSFUL =\n \"DELETE_FUND_FROM_WATCHLIST_SUCCESSFUL\";\nconst DELETE_FUND_FROM_WATCHLIST_REJECTED =\n \"DELETE_FUND_FROM_WATCHLIST_REJECTED\";\n\nexport const addFundToWatchlist = (id: number): FundsAction => ({\n type: ADD_FUND_TO_WATCHLIST_REQUESTED,\n payload: { id },\n});\n\nconst addFundToWatchlistSuccessful = (): Action => ({\n type: ADD_FUND_TO_WATCHLIST_SUCCESSFUL,\n});\n\nconst addFundToWatchlistRejected = (error?: TypeError): ErrorAction => ({\n type: ADD_FUND_TO_WATCHLIST_REJECTED,\n error,\n});\n\nexport const fetchWatchlist = (isLookupOnly: boolean): FundsAction => ({\n type: FETCH_WATCHLIST_REQUESTED,\n payload: { isLookupOnly },\n});\n\nconst fetchWatchlistSuccessful = (funds: Watchlist[]): FundsAction => ({\n type: FETCH_WATCHLIST_SUCCESSFUL,\n payload: { funds },\n});\n\nconst fetchWatchlistRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_WATCHLIST_REJECTED,\n error,\n});\n\nexport const deleteFundFromWatchlist = (id: number): FundsAction => ({\n type: DELETE_FUND_FROM_WATCHLIST_REQUESTED,\n payload: { id },\n});\n\nconst deleteFundFromWatchlistSuccessful = (): Action => ({\n type: DELETE_FUND_FROM_WATCHLIST_SUCCESSFUL,\n});\n\nconst deleteFundFromWatchlistRejected = (error?: TypeError): ErrorAction => ({\n type: DELETE_FUND_FROM_WATCHLIST_REJECTED,\n error,\n});\n\nexport default (\n state: FundsWatchlistState = {\n watchlistFunds: [],\n },\n { type, payload }: FundsAction\n) => {\n switch (type) {\n case FETCH_WATCHLIST_SUCCESSFUL:\n return {\n ...state,\n watchlistFunds: payload.funds,\n };\n default:\n return state;\n }\n};\n\nexport const addFundToWatchlistEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(ADD_FUND_TO_WATCHLIST_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .post(`${API_URL}/watchlist/${payload.id}/`, {}, getReqOptions())\n .pipe(\n mergeMap(() =>\n of(\n addSuccessToast(lang.fund.watchlistAdded),\n fetchWatchlist(true),\n addFundToWatchlistSuccessful()\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === ADD_FUND_TO_WATCHLIST_REQUESTED)\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.fund.watchlistAddError),\n addFundToWatchlistRejected(error)\n )\n )\n )\n )\n );\n\nexport const deleteFundFromWatchlistEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(DELETE_FUND_FROM_WATCHLIST_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .delete(`${API_URL}/watchlist/${payload.id}/`, {\n ...getReqOptions(),\n pragma: \"no-cache\",\n })\n .pipe(\n mergeMap(() =>\n of(\n addSuccessToast(lang.fund.watchlistRemoved),\n fetchWatchlist(true),\n deleteFundFromWatchlistSuccessful()\n )\n ),\n takeUntil(\n action$.pipe(\n filter(\n action => action.type === DELETE_FUND_FROM_WATCHLIST_REQUESTED\n )\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.fund.watchlistDeleteError),\n deleteFundFromWatchlistRejected(error)\n )\n )\n )\n )\n );\n\nexport const fetchWatchlistFundsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_WATCHLIST_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(\n `${API_URL}/watchlist/${payload.isLookupOnly ? \"?lookup_only\" : \"\"}`,\n {\n ...getReqOptions(),\n pragma: \"no-cache\",\n }\n )\n .pipe(\n mergeMap(({ response }) => of(fetchWatchlistSuccessful(response))),\n catchError(error => of(fetchWatchlistRejected(error)))\n )\n )\n );\n","import { NewsAction, NewsState } from \"./types\";\n\nconst SET_NEWS_LOADING = \"SET_NEWS_LOADING\";\nconst SET_NEWS_LIST_TOTAL = \"SET_NEWS_LIST_TOTAL\";\nconst SET_CARDS_VIEW = \"SET_CARDS_VIEW\";\n\nexport const setNewsLoading = (value: boolean): NewsAction => ({\n type: SET_NEWS_LOADING,\n payload: { value }\n});\n\nexport const setNewsListTotal = (value: number): NewsAction => ({\n type: SET_NEWS_LIST_TOTAL,\n payload: { value }\n});\n\nexport const setCardsView = (value: boolean): NewsAction => ({\n type: SET_CARDS_VIEW,\n payload: { value }\n});\n\nexport default (\n state: NewsState = {\n total: 0,\n isNewsLoading: true,\n isCardsView: true\n },\n { type, payload }: NewsAction\n) => {\n switch (type) {\n case SET_NEWS_LOADING:\n return {\n ...state,\n isNewsLoading: payload.value\n };\n case SET_NEWS_LIST_TOTAL:\n return {\n ...state,\n total: payload.value\n };\n case SET_CARDS_VIEW:\n return {\n ...state,\n isCardsView: payload.value\n };\n default:\n return state;\n }\n};\n","import { API_URL, getReqOptions } from \"./config\";\nimport {\n Action,\n AnyChartData,\n AssetManagersChartsAction,\n AssetManagersChartsState,\n ErrorAction,\n} from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, filter, mergeMap, takeUntil } from \"rxjs/operators\";\n\nimport { StateValue } from \"../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { getReversedDateFormat } from \"../../utils/formats\";\nimport { ofType } from \"redux-observable\";\nimport { setAssetManagerChartLoading } from \"../ui/assetManagerCharts\";\n\nconst FETCH_ASSET_MANAGER_STATS_REQUESTED =\n \"FETCH_ASSET_MANAGER_STATS_REQUESTED\";\nconst FETCH_ASSET_MANAGER_STATS_SUCCESSFUL =\n \"FETCH_ASSET_MANAGER_STATS_SUCCESSFUL\";\nconst FETCH_ASSET_MANAGER_STATS_REJECTED = \"FETCH_ASSET_MANAGER_STATS_REJECTED\";\n\nexport const fetchAssetManagerStats = (\n name: string\n): AssetManagersChartsAction => ({\n type: FETCH_ASSET_MANAGER_STATS_REQUESTED,\n payload: { name },\n});\n\nexport const fetchAssetManagerStatsSuccessful = (\n name: string,\n data: AnyChartData\n): AssetManagersChartsAction => ({\n type: FETCH_ASSET_MANAGER_STATS_SUCCESSFUL,\n payload: { name, data },\n});\n\nexport const fetchAssetManagerStatsRejected = (\n error?: TypeError\n): ErrorAction => ({\n type: FETCH_ASSET_MANAGER_STATS_REJECTED,\n error,\n});\n\nexport default (\n state: AssetManagersChartsState = {\n allMyProductsChartDashboard: [],\n allMyProductsChart: [],\n myProductsInPeergroupChart: [],\n myTop10FundsChart: [],\n top10FundsInSeChart: [],\n top10PeergroupsInSeChart: [],\n topPeergroupsFund: [],\n },\n { type, payload }\n) => {\n switch (type) {\n case FETCH_ASSET_MANAGER_STATS_SUCCESSFUL:\n if (payload.name) {\n return {\n ...state,\n [payload.name]: payload.data,\n };\n } else {\n return state;\n }\n\n default:\n return state;\n }\n};\n\nexport const fetchAssetManagerStatsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_ASSET_MANAGER_STATS_REQUESTED),\n mergeMap(({ payload }) => {\n const name = payload.name;\n const form = state.value.form[name];\n if (state.value.domain.auth.assetManagerId) {\n const values = form?.values;\n\n let dateRange = \"\";\n\n if (form?.values?.dateFrom && form?.values?.dateTo) {\n const dateFrom = getReversedDateFormat(\n new Date(values.dateFrom[2], values.dateFrom[1], values.dateFrom[0])\n );\n const dateTo = getReversedDateFormat(\n new Date(values.dateTo[2], values.dateTo[1], values.dateTo[0])\n );\n dateRange = `date_after=${dateFrom}&date_before=${dateTo}`;\n }\n\n const user = form?.values.user\n ? `&user=${form?.values.user.value}`\n : \"\";\n const type =\n name === \"allMyProductsChartDashboard\" ? \"allMyProductsChart\" : name;\n\n return ajax\n .get(\n `${API_URL}/company_info/${state.value.domain.auth.assetManagerId}/stats/?${dateRange}&type=${type}${user}`,\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n setAssetManagerChartLoading(false, name),\n fetchAssetManagerStatsSuccessful(name, response)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(\n ({ type, payload }) =>\n type === FETCH_ASSET_MANAGER_STATS_REQUESTED &&\n payload.name === name\n )\n )\n ),\n catchError(error =>\n of(\n setAssetManagerChartLoading(false, payload.name),\n fetchAssetManagerStatsRejected(error)\n )\n )\n );\n } else {\n return of(\n setAssetManagerChartLoading(false, payload.name),\n fetchAssetManagerStatsRejected()\n );\n }\n })\n );\n","import { API_URL, chartsUrls, getReqOptions } from \"./config\";\nimport {\n Action,\n ChartData,\n ChartsAction,\n ChartsState,\n ErrorAction,\n} from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, mergeMap } from \"rxjs/operators\";\nimport { getChartData, getChartXYValue } from \"../../utils/funds\";\nimport {\n setComparisonAutocompleteValue,\n setComparisonLoading,\n} from \"../ui/comparisonModal\";\n\nimport { StateValue } from \"../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { getDateTickInterval } from \"../../utils/charts\";\nimport { ofType } from \"redux-observable\";\nimport { setChartLoading } from \"../ui/fundCharts\";\nimport { setChartTickInterval } from \"./../ui/fundCharts\";\nimport { setDetailsLoading } from \"../ui/fundDetails\";\n\nconst FETCH_CHART_DATA_REQUESTED = \"FETCH_CHART_DATA_REQUESTED\";\nconst FETCH_CHART_DATA_SUCCESSFUL = \"FETCH_CHART_DATA_SUCCESSFUL\";\nconst FETCH_CHART_DATA_REJECTED = \"FETCH_CHART_DATA_REJECTED\";\nconst FETCH_COMPARISON_CHART_DATA_REQUESTED =\n \"FETCH_COMPARISON_CHART_DATA_REQUESTED\";\nconst FETCH_COMPARISON_CHART_DATA_SUCCESSFUL =\n \"FETCH_COMPARISON_CHART_DATA_SUCCESSFUL\";\nconst FETCH_COMPARISON_CHART_DATA_REJECTED =\n \"FETCH_COMPARISON_CHART_DATA_REJECTED\";\nconst RESET_DETAILS_CHARTS = \"RESET_DETAILS_CHARTS\";\nconst RESET_COMPARISON_CHART = \"RESET_COMPARISON_CHART\";\nconst FETCH_ACTIVE_CHARTS_REQUESTED = \"FETCH_ACTIVE_CHARTS_REQUESTED\";\nconst SET_CHARTS_LOADING = \"SET_CHARTS_LOADING\";\n\nexport const fetchChartData = (\n id: number,\n chart: string,\n peergroup: number\n): ChartsAction => ({\n type: FETCH_CHART_DATA_REQUESTED,\n payload: { id, chart, peergroup },\n});\n\nconst fetchChartDataSuccessful = (\n chart: string,\n data: ChartData\n): ChartsAction => ({\n type: FETCH_CHART_DATA_SUCCESSFUL,\n payload: { chart, data },\n});\n\nconst fetchChartDataRejected = (\n error?: TypeError,\n chart?: string\n): ErrorAction | ChartsAction => ({\n type: FETCH_CHART_DATA_REJECTED,\n payload: { chart },\n error,\n});\n\nexport const fetchComparisonChartData = (\n fundId: number,\n secondFundId: number,\n thirdFundId: number\n): ChartsAction => ({\n type: FETCH_COMPARISON_CHART_DATA_REQUESTED,\n payload: { fundId, secondFundId, thirdFundId },\n});\n\nconst fetchComparisonChartDataSuccessful = (\n chart: string,\n data: ChartData\n): ChartsAction => ({\n type: FETCH_COMPARISON_CHART_DATA_SUCCESSFUL,\n payload: { chart, data },\n});\n\nconst fetchComparisonChartDataRejected = (\n error?: TypeError,\n chart?: string\n): ErrorAction | ChartsAction => ({\n type: FETCH_COMPARISON_CHART_DATA_REJECTED,\n payload: { chart },\n error,\n});\n\nexport const resetDetailsCharts = (): Action => ({\n type: RESET_DETAILS_CHARTS,\n});\n\nexport const resetComparisonChart = (): Action => ({\n type: RESET_COMPARISON_CHART,\n});\n\nexport const setChartsLoading = (): Action => ({\n type: SET_CHARTS_LOADING,\n});\n\nexport const fetchActiveCharts = (\n id: number,\n trancheId: number,\n fundId: number,\n peergroupId: number\n): ChartsAction => ({\n type: FETCH_ACTIVE_CHARTS_REQUESTED,\n payload: { id, trancheId, fundId, peergroupId },\n});\n\nexport default (\n state: ChartsState = {\n performanceChart: null,\n peergroupComparisonChart: null,\n crashDrawdownChart: null,\n riskReturnChart: null,\n fundRatingChart: null,\n classDistributionChart: null,\n distributionChart: null,\n evolutionOfRiskChart: null,\n comparisonChart: null,\n },\n { type, payload }: ChartsAction\n) => {\n switch (type) {\n case FETCH_CHART_DATA_REJECTED:\n return {\n ...state,\n [payload.chart]: { data: [] },\n };\n case FETCH_CHART_DATA_SUCCESSFUL:\n const { chart, data } = payload;\n let result = null;\n if (chart === \"performanceChart\") {\n result = {\n fund: getChartData(data, \"fund\"),\n index: getChartData(data, \"index\"),\n peergroup: getChartData(data, \"peergroup\"),\n };\n } else if (\n chart === \"peergroupComparisonChart\" ||\n chart === \"evolutionOfRiskChart\"\n ) {\n result = {\n fund: getChartData(data, \"fund\"),\n worstFund: getChartData(data, \"worstFund\"),\n bestFund: getChartData(data, \"bestFund\"),\n };\n } else if (chart === \"fundRatingChart\") {\n result = {\n rating: getChartXYValue(\"rating\", data),\n };\n } else if (chart === \"distributionChart\") {\n result = {\n fund: data.fund,\n distribution: data.distribution,\n };\n } else if (\n chart === \"riskReturnChart\" ||\n chart === \"classDistributionChart\"\n ) {\n result = data;\n } else if (chart === \"crashDrawdownChart\") {\n result = {\n name: data?.name,\n data: getChartXYValue(\"\", data?.data),\n };\n }\n\n return {\n ...state,\n [payload.chart]: result,\n };\n case FETCH_COMPARISON_CHART_DATA_SUCCESSFUL:\n return {\n ...state,\n [payload.chart]: {\n fund: getChartData(payload.data, \"fund\"),\n second_fund: getChartData(payload.data, \"second_fund\"),\n third_fund: getChartData(payload.data, \"third_fund\"),\n },\n };\n case RESET_COMPARISON_CHART:\n return {\n ...state,\n comparisonChart: null,\n };\n case RESET_DETAILS_CHARTS:\n return {\n ...state,\n performanceChart: null,\n peergroupComparisonChart: null,\n riskReturnChart: null,\n fundRatingChart: null,\n classDistributionChart: null,\n distributionChart: null,\n evolutionOfRiskChart: null,\n comparisonChart: null,\n };\n default:\n return state;\n }\n};\n\nexport const fetchChartDataEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_CHART_DATA_REQUESTED),\n mergeMap(({ payload }) => {\n const { id, chart, peergroup } = payload;\n const chartState = state.value.ui.fundCharts[chart];\n const period = chartState ? chartState.period : 3;\n const volatilityPeriod = chartState ? chartState.volatilityPeriod : 3;\n\n if (state.value.ui.fundCharts[chart].isVisible) {\n let queryParams = period ? `?period=${period}` : \"\";\n\n queryParams += volatilityPeriod\n ? `&vol_period=${volatilityPeriod}`\n : \"\";\n\n const hasPeergroup =\n chart === \"evolutionOfRiskChart\" ||\n chart === \"performanceChart\" ||\n chart === \"classDistributionChart\" ||\n chart === \"distributionChart\";\n\n const hasParams = chart !== \"crashDrawdownChart\";\n\n const params = hasParams\n ? `${id}/${hasPeergroup ? `${peergroup}/` : \"\"}${queryParams}`\n : \"\";\n\n return ajax\n .get(`${API_URL}/${chartsUrls[chart]}/${params}`, getReqOptions())\n .pipe(\n mergeMap(({ response }) =>\n of(\n setChartLoading(false, chart),\n setChartTickInterval(getDateTickInterval(), chart),\n fetchChartDataSuccessful(chart, response)\n )\n ),\n catchError(error =>\n of(\n setChartLoading(false, chart),\n fetchChartDataRejected(error, chart)\n )\n )\n );\n } else {\n return of(\n setChartLoading(false, chart),\n fetchChartDataRejected(null, chart)\n );\n }\n })\n );\n\nexport const fetchComparisonChartDataEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_COMPARISON_CHART_DATA_REQUESTED),\n mergeMap(({ payload }) => {\n const { fundId, secondFundId, thirdFundId } = payload;\n\n if (fundId !== -1) {\n const chartState = state.value.ui.fundCharts[\"comparisonChart\"];\n const period = chartState ? chartState.period : 3;\n\n let queryParams = period ? `?period=${period}` : \"\";\n if (secondFundId && secondFundId !== -1)\n queryParams += `&second_tranche_id=${secondFundId}`;\n if (thirdFundId && thirdFundId !== -1)\n queryParams += `&third_tranche_id=${thirdFundId}`;\n\n return ajax\n .get(\n `${API_URL}/${chartsUrls[\"comparisonChart\"]}/${fundId}/${queryParams}`,\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n setChartLoading(false, \"comparisonChart\"),\n setComparisonLoading(false),\n setComparisonAutocompleteValue(response.second_fund.name, 0),\n setComparisonAutocompleteValue(response.third_fund.name, 1),\n fetchComparisonChartDataSuccessful(\"comparisonChart\", response)\n )\n ),\n catchError(error =>\n of(\n setChartLoading(false, \"comparisonChart\"),\n setComparisonLoading(false),\n fetchComparisonChartDataRejected(error, \"comparisonChart\")\n )\n )\n );\n } else {\n return of(\n setChartLoading(false, \"comparisonChart\"),\n setComparisonLoading(false),\n resetComparisonChart(),\n fetchComparisonChartDataRejected(null, \"comparisonChart\")\n );\n }\n })\n );\n\nexport const setChartsLoadingEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(SET_CHARTS_LOADING),\n mergeMap(() =>\n of(\n setChartLoading(true, \"performanceChart\"),\n setChartLoading(true, \"peergroupComparisonChart\"),\n setChartLoading(true, \"riskReturnChart\"),\n setChartLoading(true, \"fundRatingChart\"),\n setChartLoading(true, \"classDistributionChart\"),\n setChartLoading(true, \"distributionChart\"),\n setChartLoading(true, \"evolutionOfRiskChart\")\n )\n )\n );\n\nexport const fetchActiveChartsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_ACTIVE_CHARTS_REQUESTED),\n mergeMap(({ payload }) => {\n const { id, trancheId, fundId, peergroupId } = payload;\n const {\n performanceChart,\n peergroupComparisonChart,\n riskReturnChart,\n fundRatingChart,\n classDistributionChart,\n distributionChart,\n evolutionOfRiskChart,\n } = state.value.ui.fundCharts;\n if (state.value.domain.auth.isWholesaleUser) {\n const actions = [setChartsLoading()];\n if (performanceChart.isVisible) {\n actions.push(\n fetchChartData(trancheId, \"performanceChart\", peergroupId)\n );\n }\n if (peergroupComparisonChart.isVisible) {\n actions.push(\n fetchChartData(fundId, \"peergroupComparisonChart\", peergroupId)\n );\n }\n if (riskReturnChart.isVisible) {\n actions.push(fetchChartData(id, \"riskReturnChart\", peergroupId));\n }\n if (fundRatingChart.isVisible) {\n actions.push(fetchChartData(id, \"fundRatingChart\", peergroupId));\n }\n if (classDistributionChart.isVisible) {\n actions.push(\n fetchChartData(trancheId, \"classDistributionChart\", peergroupId)\n );\n }\n if (distributionChart.isVisible) {\n actions.push(\n fetchChartData(trancheId, \"distributionChart\", peergroupId)\n );\n }\n if (evolutionOfRiskChart.isVisible) {\n actions.push(\n fetchChartData(trancheId, \"evolutionOfRiskChart\", peergroupId)\n );\n }\n return of(...actions);\n } else {\n return of(setDetailsLoading(false));\n }\n })\n );\n","import { FundDocumentsModalAction, FundDocumentsModalState } from \"./types\";\n\nconst SET_FUND_DOCUMENTS_LOADING = \"SET_FUND_DOCUMENTS_LOADING\";\nconst SET_FUND_DOCUMENTS_VISIBILITY = \"SET_FUND_DOCUMENTS_VISIBILITY\";\nconst SET_FUND_DOCUMENTS_UPLOADING = \"SET_FUND_DOCUMENTS_UPLOADING\";\nconst SET_FUND_DOCUMENTS_FUND_ID = \"SET_FUND_DOCUMENTS_FUND_ID\";\nconst SET_FUND_DOCUMENTS_EDIT_INDEX = \"SET_FUND_DOCUMENTS_EDIT_INDEX\";\n\nexport const setFundDocumentsLoading = (\n value: boolean\n): FundDocumentsModalAction => ({\n type: SET_FUND_DOCUMENTS_LOADING,\n payload: { value }\n});\n\nexport const setFundDocumentsVisibility = (\n value: boolean\n): FundDocumentsModalAction => ({\n type: SET_FUND_DOCUMENTS_VISIBILITY,\n payload: { value }\n});\n\nexport const setFundDocumentsUploading = (\n value: boolean\n): FundDocumentsModalAction => ({\n type: SET_FUND_DOCUMENTS_UPLOADING,\n payload: { value }\n});\n\nexport const setFundDocumentsFundId = (\n id: number\n): FundDocumentsModalAction => ({\n type: SET_FUND_DOCUMENTS_FUND_ID,\n payload: { id }\n});\n\nexport const setFundDocumentsEditIndex = (\n index: number\n): FundDocumentsModalAction => ({\n type: SET_FUND_DOCUMENTS_EDIT_INDEX,\n payload: { index }\n});\n\nexport default (\n state: FundDocumentsModalState = {\n isLoading: false,\n isVisible: false,\n isUploading: false,\n fundId: null,\n editIndex: null\n },\n { type, payload }: FundDocumentsModalAction\n) => {\n switch (type) {\n case SET_FUND_DOCUMENTS_LOADING:\n return {\n ...state,\n isLoading: payload.value\n };\n case SET_FUND_DOCUMENTS_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n case SET_FUND_DOCUMENTS_UPLOADING:\n return {\n ...state,\n isUploading: payload.value\n };\n case SET_FUND_DOCUMENTS_FUND_ID:\n return {\n ...state,\n fundId: payload.id\n };\n case SET_FUND_DOCUMENTS_EDIT_INDEX:\n return {\n ...state,\n editIndex: payload.index\n };\n default:\n return state;\n }\n};\n","import { AMNewsModalAction, AMNewsModalState } from \"./types\";\n\nconst SET_AM_NEWS_MODAL_VISIBILITY = \"SET_AM_NEWS_MODAL_VISIBILITY\";\nconst SET_AM_NEWS_MODAL_UPLOADING = \"SET_AM_NEWS_MODAL_UPLOADING\";\nconst SET_EDIT_NEWS_ID = \"SET_EDIT_NEWS_ID\";\n\nexport const setAmNewsModalVisibility = (\n value: boolean\n): AMNewsModalAction => ({\n type: SET_AM_NEWS_MODAL_VISIBILITY,\n payload: { value }\n});\n\nexport const setAmNewsModalUploading = (value: boolean): AMNewsModalAction => ({\n type: SET_AM_NEWS_MODAL_UPLOADING,\n payload: { value }\n});\n\nexport const setEditNewsId = (id: number): AMNewsModalAction => ({\n type: SET_EDIT_NEWS_ID,\n payload: { id }\n});\n\nexport default (\n state: AMNewsModalState = {\n isVisible: false,\n isUploading: false,\n editNewsId: null\n },\n { type, payload }: AMNewsModalAction\n) => {\n switch (type) {\n case SET_AM_NEWS_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n case SET_AM_NEWS_MODAL_UPLOADING:\n return {\n ...state,\n isUploading: payload.value\n };\n case SET_EDIT_NEWS_ID:\n return {\n ...state,\n editNewsId: payload.id\n };\n default:\n return state;\n }\n};\n","import { ConferenceDetailsAction, ConferenceDetailsState } from \"./types\";\n\nconst SET_CONFERENCE_DETAILS_LOADING = \"SET_CONFERENCE_DETAILS_LOADING\";\nconst SET_CONFERENCE_REGISTER_LOADING = \"SET_CONFERENCE_REGISTER_LOADING\";\n\nexport const setConferenceDetailsLoading = (\n value: boolean\n): ConferenceDetailsAction => ({\n type: SET_CONFERENCE_DETAILS_LOADING,\n payload: { value }\n});\n\nexport const setConferenceRegisterLoading = (\n value: boolean\n): ConferenceDetailsAction => ({\n type: SET_CONFERENCE_REGISTER_LOADING,\n payload: { value }\n});\n\nexport default (\n state: ConferenceDetailsState = {\n isLoading: false,\n isRegisterLoading: false\n },\n { type, payload }: ConferenceDetailsAction\n) => {\n switch (type) {\n case SET_CONFERENCE_DETAILS_LOADING:\n return {\n ...state,\n isLoading: payload.value\n };\n case SET_CONFERENCE_REGISTER_LOADING:\n return {\n ...state,\n isRegisterLoading: payload.value\n };\n default:\n return state;\n }\n};\n","import React from \"react\";\nimport { matchPath, withRouter } from \"react-router\";\n\nimport urls from \"./utils/urls\";\n\nexport const getBreadcrumbs = ({ pathname }) => {\n const matches = [];\n const routes = urls;\n\n pathname\n .replace(/\\/$/, \"\")\n .split(\"/\")\n .reduce((previous, current) => {\n const pathSection = `${previous}/${current}`;\n\n let breadcrumbMatch;\n\n Object.keys(routes).some(key => {\n const path = routes[key].reg;\n const breadcrumb = routes[key].breadcrumb;\n const match = matchPath(pathSection, { exact: true, path });\n\n if (match) {\n breadcrumbMatch = {\n breadcrumb,\n path,\n match\n };\n return true;\n }\n\n return false;\n });\n\n if (breadcrumbMatch) {\n if (breadcrumbMatch.match.url !== \"/en\") {\n matches.push(breadcrumbMatch);\n }\n }\n\n return pathSection;\n });\n\n return matches;\n};\n\nexport const withBreadcrumbs = () => Component =>\n withRouter(props => (\n \n ));\n","import \"./appBreadcrumbs.scss\";\n\nimport AppLink from \"./appLink\";\nimport { NavLink } from \"react-router-dom\";\nimport React from \"react\";\nimport { State } from \"../../types\";\nimport { connect } from \"react-redux\";\nimport urls from \"../../utils/urls\";\nimport { withBreadcrumbs } from \"../../withBreadcrumbs\";\nimport { withRouter } from \"react-router\";\n\nconst DetailsViewBreadcrumbsComponent = ({\n match,\n news,\n assetManagerNews,\n reports,\n funds,\n oif,\n}) => {\n const { pathname } = window.location;\n if (\n urls.NEWS_DETAILS.reg.test(pathname) ||\n urls.NEWS_DETAILS_SHORT.reg.test(pathname)\n ) {\n return news ? news?.title : \"\";\n } else if (urls.ASSET_MANAGER_NEWS.reg.test(pathname)) {\n return getBreadcrumbsTitle(assetManagerNews, match);\n } else if (\n urls.REPORTS_DETAILS.reg.test(pathname) ||\n urls.REPORTS_DETAILS_SHORT.reg.test(pathname)\n ) {\n return getBreadcrumbsTitle(reports, match);\n } else if (urls.DETAILS.reg.test(pathname)) {\n return getBreadcrumbsTitle(funds, match);\n } else if (\n urls.OIF_DETAILS.reg.test(pathname) ||\n urls.OIF_DETAILS_SHORT.reg.test(pathname)\n ) {\n return getBreadcrumbsTitle(oif, match);\n } else if (urls.DETAILS.reg.test(pathname)) {\n return getBreadcrumbsTitle(funds, match);\n } else {\n return;\n }\n};\n\nconst getBreadcrumbsTitle = (items, match) => {\n const id = parseInt(match.url.substr(match.url.lastIndexOf(\"/\") + 1), 10);\n const title = urls.DETAILS.reg.test(window.location.pathname)\n ? \"name\"\n : \"title\";\n return items[id] ? items[id][title] : \"\";\n};\n\nconst mapStateToProps = ({ domain }: State) => ({\n news: domain.news.news,\n assetManagerNews: domain.assetManagers.news,\n reports: domain.reports.reports,\n funds: domain.funds.details.funds,\n});\n\nexport const DetailsViewBreadcrumbs = withRouter(\n connect(mapStateToProps, undefined)(DetailsViewBreadcrumbsComponent)\n);\n\nconst isNewsBreadcrumbs = (breadcrumbs) =>\n breadcrumbs[1] && breadcrumbs[1].match.url.indexOf(\"/news\") !== -1\n ? \"app-container--small\"\n : \"\";\n\nconst AppBreadcrumbs = ({ breadcrumbs }) => (\n \n
\n
\n - \n \n \n \n /\n
\n {breadcrumbs.map(({ breadcrumb, path, match }) => (\n - \n {breadcrumb()}\n /\n
\n ))}\n
\n
\n
\n);\n\nexport default withBreadcrumbs()(AppBreadcrumbs);\n","import { API_URL, getReqOptions } from \"./config\";\nimport {\n Action,\n ErrorAction,\n Filters,\n FiltersAction,\n FiltersState,\n} from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { addErrorToast, addSuccessToast } from \"../ui/toasts\";\nimport { catchError, mergeMap } from \"rxjs/operators\";\n\nimport { StateValue } from \"../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { fetchFilterSearchFunds } from \"./funds/filterSearch\";\nimport { lang } from \"../../lang/lang\";\nimport { ofType } from \"redux-observable\";\nimport { setFiltersLoading } from \"../ui/search\";\nimport urls from \"../../utils/urls\";\n\nconst FETCH_FILTERS_REQUESTED = \"FETCH_FILTERS_REQUESTED\";\nconst FETCH_FILTERS_SUCCESSFUL = \"FETCH_FILTERS_SUCCESSFUL\";\nconst FETCH_FILTERS_REJECTED = \"FETCH_FILTERS_REJECTED\";\nconst FETCH_CUSTOM_FIELDS_REQUESTED = \"FETCH_CUSTOM_FIELDS_REQUESTED\";\nconst FETCH_CUSTOM_FIELDS_SUCCESSFUL = \"FETCH_CUSTOM_FIELDS_SUCCESSFUL\";\nconst FETCH_CUSTOM_FIELDS_REJECTED = \"FETCH_CUSTOM_FIELDS_REJECTED\";\nconst SAVE_CUSTOM_FIELDS_REQUESTED = \"SAVE_CUSTOM_FIELDS_REQUESTED\";\nconst SAVE_CUSTOM_FIELDS_SUCCESSFUL = \"SAVE_CUSTOM_FIELDS_SUCCESSFUL\";\nconst SAVE_CUSTOM_FIELDS_REJECTED = \"SAVE_CUSTOM_FIELDS_REJECTED\";\nconst CHANGE_FILTERS_LANG = \"CHANGE_FILTERS_LANG\";\n\nexport const fetchFilters = (): Action => ({\n type: FETCH_FILTERS_REQUESTED,\n});\n\nconst fetchFiltersSuccessful = (filters: Filters): FiltersAction => ({\n type: FETCH_FILTERS_SUCCESSFUL,\n payload: { filters },\n});\n\nconst fetchFiltersRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_FILTERS_REJECTED,\n error,\n});\n\nexport const fetchCustomFields = (): Action => ({\n type: FETCH_CUSTOM_FIELDS_REQUESTED,\n});\n\nconst fetchCustomFieldsSuccessful = (fields: string[]): FiltersAction => ({\n type: FETCH_CUSTOM_FIELDS_SUCCESSFUL,\n payload: { fields },\n});\n\nconst fetchCustomFieldsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_CUSTOM_FIELDS_REJECTED,\n error,\n});\n\nexport const saveCustomFields = (): Action => ({\n type: SAVE_CUSTOM_FIELDS_REQUESTED,\n});\n\nconst saveCustomFieldsSuccessful = (filters: Filters): FiltersAction => ({\n type: SAVE_CUSTOM_FIELDS_SUCCESSFUL,\n payload: { filters },\n});\n\nconst saveCustomFieldsRejected = (error?: TypeError): ErrorAction => ({\n type: SAVE_CUSTOM_FIELDS_REJECTED,\n error,\n});\n\nexport const changeFiltersLang = (): Action => ({\n type: CHANGE_FILTERS_LANG,\n});\n\nexport default (\n state: FiltersState = {\n peergroups: [],\n companies: [],\n universes: [],\n investmentFocus: [],\n rating: [\n { label: \"A\", value: \"A\" },\n { label: \"B\", value: \"B\" },\n { label: \"C\", value: \"C\" },\n { label: \"D\", value: \"D\" },\n { label: \"E\", value: \"E\" },\n ],\n regions: [],\n srri: [\n { label: lang.filterSearch.low, value: 1 },\n { label: lang.filterSearch.medium, value: 2 },\n { label: lang.filterSearch.high, value: 3 },\n ],\n customFields: [],\n },\n { type, payload }: FiltersAction\n) => {\n switch (type) {\n case FETCH_FILTERS_SUCCESSFUL:\n if (payload.filters) {\n return {\n ...state,\n peergroups: payload.filters.peergroups,\n companies: payload.filters.companies,\n universes: payload.filters.universes,\n investmentFocus: payload.filters.investment_focus,\n regions: payload.filters.regions,\n };\n }\n return state;\n case FETCH_CUSTOM_FIELDS_SUCCESSFUL:\n return {\n ...state,\n customFields: payload.fields,\n };\n case CHANGE_FILTERS_LANG:\n return {\n ...state,\n srri: [\n { label: lang.filterSearch.low, value: 1 },\n { label: lang.filterSearch.medium, value: 2 },\n { label: lang.filterSearch.high, value: 3 },\n ],\n };\n default:\n return state;\n }\n};\n\nexport const fetchFiltersEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_FILTERS_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/filters/?lang=${lang.getLanguage()}`).pipe(\n mergeMap(({ response }) => {\n if (urls.FILTER_SEARCH_RESULTS.reg.test(window.location.pathname)) {\n return of(\n setFiltersLoading(false),\n fetchFilterSearchFunds(),\n fetchFiltersSuccessful(response)\n );\n } else {\n return of(\n setFiltersLoading(false),\n fetchFiltersSuccessful(response)\n );\n }\n }),\n catchError(error =>\n of(setFiltersLoading(false), fetchFiltersRejected(error))\n )\n )\n )\n );\n\nexport const saveCustomFieldsEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(SAVE_CUSTOM_FIELDS_REQUESTED),\n mergeMap(() => {\n const form = state.value.form.advancedFundsList;\n if (form && form.values) {\n const fields = [];\n Object.keys(form.values).forEach(field => {\n if (form.values[field] === true) {\n fields.push({ value: field });\n }\n });\n return ajax\n .post(\n `${API_URL}/custom_search_fields/`,\n { custom_fields: fields },\n getReqOptions()\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n addSuccessToast(lang.advancedSearch.addSuccess),\n fetchCustomFields(),\n saveCustomFieldsSuccessful(response)\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.advancedSearch.addError),\n saveCustomFieldsRejected(error)\n )\n )\n );\n } else {\n return of(\n addErrorToast(lang.advancedSearch.addError),\n saveCustomFieldsRejected()\n );\n }\n })\n );\n\nexport const fetchCustomFieldsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_CUSTOM_FIELDS_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/custom_search_fields/`, getReqOptions()).pipe(\n mergeMap(({ response }) =>\n of(fetchCustomFieldsSuccessful(response.custom_fields))\n ),\n catchError(error => of(fetchCustomFieldsRejected(error)))\n )\n )\n );\n","import { API_URL, getReqOptions } from \"./config\";\r\nimport {\r\n Action,\r\n ErrorAction,\r\n Exclusion,\r\n Meta,\r\n PremiumAction,\r\n PremiumState,\r\n SearchFund,\r\n} from \"./types\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { catchError, mergeMap } from \"rxjs/operators\";\r\nimport { fetchEmpFunds, fetchEsgFunds } from \"./funds/fundsPremium\";\r\nimport {\r\n setEmpLoading,\r\n setEsgLoading,\r\n setExclusionsLoading,\r\n setPremiumLoading,\r\n} from \"../ui/premium\";\r\n\r\nimport { Option } from \"../../types\";\r\nimport { ajax } from \"rxjs/ajax\";\r\nimport { ofType } from \"redux-observable\";\r\n\r\nconst FETCH_EMP_PEERGROUPS_REQUESTED = \"FETCH_EMP_PEERGROUPS_REQUESTED\";\r\nconst FETCH_EMP_PEERGROUPS_SUCCESSFUL = \"FETCH_EMP_PEERGROUPS_SUCCESSFUL\";\r\nconst FETCH_EMP_PEERGROUPS_REJECTED = \"FETCH_EMP_PEERGROUPS_REJECTED\";\r\nconst FETCH_ESG_PEERGROUPS_REQUESTED = \"FETCH_ESG_PEERGROUPS_REQUESTED\";\r\nconst FETCH_ESG_PEERGROUPS_SUCCESSFUL = \"FETCH_ESG_PEERGROUPS_SUCCESSFUL\";\r\nconst FETCH_ESG_PEERGROUPS_REJECTED = \"FETCH_ESG_PEERGROUPS_REJECTED\";\r\nconst FETCH_EXCLUSIONS_REQUESTED = \"FETCH_EXCLUSIONS_REQUESTED\";\r\nconst FETCH_EXCLUSIONS_SUCCESSFUL = \"FETCH_EXCLUSIONS_SUCCESSFUL\";\r\nconst FETCH_EXCLUSIONS_REJECTED = \"FETCH_EXCLUSIONS_REJECTED\";\r\nconst FETCH_PREMIUM_SEARCH_FUNDS_REQUESTED =\r\n \"FETCH_PREMIUM_SEARCH_FUNDS_REQUESTED\";\r\nconst FETCH_PREMIUM_SEARCH_FUNDS_SUCCESSFUL =\r\n \"FETCH_PREMIUM_SEARCH_FUNDS_SUCCESSFUL\";\r\nconst FETCH_PREMIUM_SEARCH_FUNDS_REJECTED =\r\n \"FETCH_PREMIUM_SEARCH_FUNDS_REJECTED\";\r\n\r\nexport const fetchEmpPeergroups = (): Action => ({\r\n type: FETCH_EMP_PEERGROUPS_REQUESTED,\r\n});\r\n\r\nconst fetchEmpPeergroupsSuccessful = (peergroups: Option[]): PremiumAction => ({\r\n type: FETCH_EMP_PEERGROUPS_SUCCESSFUL,\r\n payload: { peergroups },\r\n});\r\n\r\nconst fetchEmpPeergroupsRejected = (error?: TypeError): ErrorAction => ({\r\n type: FETCH_EMP_PEERGROUPS_REJECTED,\r\n error,\r\n});\r\n\r\nexport const fetchEsgPeergroups = (): Action => ({\r\n type: FETCH_ESG_PEERGROUPS_REQUESTED,\r\n});\r\n\r\nconst fetchEsgPeergroupsSuccessful = (peergroups: Option[]): PremiumAction => ({\r\n type: FETCH_ESG_PEERGROUPS_SUCCESSFUL,\r\n payload: { peergroups },\r\n});\r\n\r\nconst fetchEsgPeergroupsRejected = (error?: TypeError): ErrorAction => ({\r\n type: FETCH_ESG_PEERGROUPS_REJECTED,\r\n error,\r\n});\r\n\r\nexport const fetchExclusions = (id: number): PremiumAction => ({\r\n type: FETCH_EXCLUSIONS_REQUESTED,\r\n payload: { id },\r\n});\r\n\r\nconst fetchExclusionsSuccessful = (\r\n exclusions: { [id: string]: Exclusion[] },\r\n id: number\r\n): PremiumAction => ({\r\n type: FETCH_EXCLUSIONS_SUCCESSFUL,\r\n payload: { exclusions, id },\r\n});\r\n\r\nconst fetchExclusionsRejected = (error?: TypeError): ErrorAction => ({\r\n type: FETCH_EXCLUSIONS_REJECTED,\r\n error,\r\n});\r\n\r\nexport const fetchPremiumSearchFunds = (\r\n value: string,\r\n meta?: Meta\r\n): PremiumAction => ({\r\n type: FETCH_PREMIUM_SEARCH_FUNDS_REQUESTED,\r\n payload: { value, meta },\r\n});\r\n\r\nconst fetchPremiumSearchFundsSuccessful = (\r\n funds: SearchFund[]\r\n): PremiumAction => ({\r\n type: FETCH_PREMIUM_SEARCH_FUNDS_SUCCESSFUL,\r\n payload: { funds },\r\n});\r\n\r\nconst fetchPremiumSearchFundsRejected = (error?: TypeError): ErrorAction => ({\r\n type: FETCH_PREMIUM_SEARCH_FUNDS_REJECTED,\r\n error,\r\n});\r\n\r\nexport default (\r\n state: PremiumState = {\r\n empPeergroups: [],\r\n esgPeergroups: [],\r\n premiumSearchFunds: null,\r\n exclusions: {},\r\n },\r\n { type, payload }: PremiumAction\r\n) => {\r\n switch (type) {\r\n case FETCH_EMP_PEERGROUPS_SUCCESSFUL:\r\n return {\r\n ...state,\r\n empPeergroups: payload.peergroups,\r\n };\r\n case FETCH_ESG_PEERGROUPS_SUCCESSFUL:\r\n return {\r\n ...state,\r\n esgPeergroups: payload.peergroups,\r\n };\r\n case FETCH_EXCLUSIONS_SUCCESSFUL:\r\n if (payload.exclusions && payload.id) {\r\n return {\r\n ...state,\r\n exclusions: {\r\n ...state.exclusions,\r\n [payload.id]: payload.exclusions,\r\n },\r\n };\r\n } else {\r\n return state;\r\n }\r\n case FETCH_PREMIUM_SEARCH_FUNDS_SUCCESSFUL:\r\n return {\r\n ...state,\r\n premiumSearchFunds: payload.funds,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const fetchEmpPeergroupsEpic = (\r\n action$: Observable\r\n): Observable =>\r\n action$.pipe(\r\n ofType(FETCH_EMP_PEERGROUPS_REQUESTED),\r\n mergeMap(() =>\r\n ajax.get(`${API_URL}/emp_peergroup_list/`, getReqOptions()).pipe(\r\n mergeMap(({ response }) =>\r\n of(\r\n fetchEmpPeergroupsSuccessful(response),\r\n fetchEmpFunds(response[0].value)\r\n )\r\n ),\r\n catchError(error =>\r\n of(setEmpLoading(false), fetchEmpPeergroupsRejected(error))\r\n )\r\n )\r\n )\r\n );\r\n\r\nexport const fetchEsgPeergroupsEpic = (\r\n action$: Observable\r\n): Observable =>\r\n action$.pipe(\r\n ofType(FETCH_ESG_PEERGROUPS_REQUESTED),\r\n mergeMap(() =>\r\n ajax.get(`${API_URL}/esg_peergroup_list/`, getReqOptions()).pipe(\r\n mergeMap(({ response }) =>\r\n of(\r\n fetchEsgPeergroupsSuccessful(response),\r\n fetchEsgFunds(response[0].value)\r\n )\r\n ),\r\n catchError(error =>\r\n of(setEsgLoading(false), fetchEsgPeergroupsRejected(error))\r\n )\r\n )\r\n )\r\n );\r\n\r\nexport const fetchExclusionsEpic = (\r\n action$: Observable\r\n): Observable =>\r\n action$.pipe(\r\n ofType(FETCH_EXCLUSIONS_REQUESTED),\r\n mergeMap(({ payload }) =>\r\n ajax.get(`${API_URL}/exclusion/${payload.id}/`, getReqOptions()).pipe(\r\n mergeMap(({ response }) =>\r\n of(\r\n setExclusionsLoading(false),\r\n fetchExclusionsSuccessful(response.exclusions, payload.id)\r\n )\r\n ),\r\n catchError(error =>\r\n of(setExclusionsLoading(false), fetchExclusionsRejected(error))\r\n )\r\n )\r\n )\r\n );\r\n\r\nexport const fetchPremiumSearchFundsEpic = (\r\n action$: Observable\r\n): Observable =>\r\n action$.pipe(\r\n ofType(FETCH_PREMIUM_SEARCH_FUNDS_REQUESTED),\r\n mergeMap(({ payload }) => {\r\n const { resolve, reject }: Meta = payload.meta;\r\n return ajax\r\n .get(\r\n `${API_URL}/premium_search/?search=${payload.value}`,\r\n getReqOptions()\r\n )\r\n .pipe(\r\n mergeMap(({ response }) => {\r\n if (resolve) resolve(response);\r\n return of(\r\n setPremiumLoading(false),\r\n fetchPremiumSearchFundsSuccessful(response.results)\r\n );\r\n }),\r\n catchError(error => {\r\n if (reject) reject(error);\r\n return of(\r\n setPremiumLoading(false),\r\n fetchPremiumSearchFundsRejected(error)\r\n );\r\n })\r\n );\r\n })\r\n );\r\n","import { ConferencesListAction, ConferencesListState } from \"./types\";\n\nconst SET_CONFERENCES_LIST_LOADING = \"SET_CONFERENCES_LIST_LOADING\";\n\nexport const setConferencesListLoading = (\n value: boolean\n): ConferencesListAction => ({\n type: SET_CONFERENCES_LIST_LOADING,\n payload: { value }\n});\n\nexport default (\n state: ConferencesListState = {\n isLoading: false\n },\n { type, payload }: ConferencesListAction\n) => {\n switch (type) {\n case SET_CONFERENCES_LIST_LOADING:\n return {\n ...state,\n isLoading: payload.value\n };\n default:\n return state;\n }\n};\n","import { HomeAction, HomeState } from \"./types\";\r\n\r\nconst SET_HOME_NEWS_LOADING = \"SET_HOME_NEWS_LOADING\";\r\nconst SET_HOME_FACTS_LOADING = \"SET_HOME_FACTS_LOADING\";\r\n\r\nexport const setHomeNewsLoading = (value: boolean): HomeAction => ({\r\n type: SET_HOME_NEWS_LOADING,\r\n payload: { value }\r\n});\r\n\r\nexport const setHomeFactsLoading = (value: boolean): HomeAction => ({\r\n type: SET_HOME_FACTS_LOADING,\r\n payload: { value }\r\n});\r\n\r\nexport default (\r\n state: HomeState = {\r\n isHomeNewsLoading: false,\r\n isHomeFactsLoading: false\r\n },\r\n { type, payload }: HomeAction\r\n) => {\r\n switch (type) {\r\n case SET_HOME_NEWS_LOADING:\r\n return {\r\n ...state,\r\n isHomeNewsLoading: payload.value\r\n };\r\n case SET_HOME_FACTS_LOADING:\r\n return {\r\n ...state,\r\n isHomeFactsLoading: payload.value\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","export const colors = {\n blue: \"#004d8f\",\n lightBlue: \"#a6c3d6\",\n gray: \"#444\",\n gray2: \"#666\",\n lightGray: \"#f7f8f8\",\n lightGray2: \"#c1c1c1\",\n white: \"#fff\",\n yellow: \"#ffc100\",\n red: \"#9c1f10\",\n red2: \"#f24747\",\n green2: \"#50be87\",\n redTransparent: \"rgba(208,33,39, 0.3)\",\n greenTransparent: \"rgba(43,166,74,0.3)\",\n yellowTransparent: \"rgba(255,193,0, 0.3)\",\n};\n","import { LoginAction, LoginState } from \"./types\";\n\nconst SET_LOGIN_VISIBILITY = \"SET_LOGIN_VISIBILITY\";\nconst SET_LOGIN_LOADING = \"SET_LOGIN_LOADING\";\n\nexport const setLoginVisibility = (value: boolean): LoginAction => {\n if (!value)\n localStorage.removeItem('loginModalVisibility')\n\n return ({\n type: SET_LOGIN_VISIBILITY,\n payload: { value }\n });\n}\n\nexport const setLoginLoading = (value: boolean): LoginAction => ({\n type: SET_LOGIN_LOADING,\n payload: { value }\n});\n\nexport default (\n state: LoginState = {\n isLoginVisible: false,\n isLoginLoading: false\n },\n { type, payload }: LoginAction\n) => {\n switch (type) {\n case SET_LOGIN_VISIBILITY:\n return {\n ...state,\n isLoginVisible: payload.value,\n isMobileNavVisible: false\n };\n case SET_LOGIN_LOADING:\n return {\n ...state,\n isLoginLoading: payload.value\n };\n default:\n return state;\n }\n};\n","import {\n Action,\n AnyFund,\n ErrorAction,\n FundsAction,\n FundsCommonState,\n} from \"../types\";\nimport { Observable, from, of } from \"rxjs\";\nimport {\n catchError,\n filter,\n mergeMap,\n switchMap,\n takeUntil,\n} from \"rxjs/operators\";\nimport { API_URL } from \"../config\";\nimport { StateValue } from \"../../types\";\nimport { addErrorToast } from \"./../../ui/toasts\";\nimport { ajax } from \"rxjs/ajax\";\nimport { fetch } from \"cross-fetch\";\nimport { getReqOptions } from \"./../config\";\nimport { lang } from \"../../../lang/lang\";\nimport { ofType } from \"redux-observable\";\nimport { setExportLoading } from \"./../../ui/fundsList\";\n\nconst SET_PRIMARY_COMPARE_FUND = \"SET_PRIMARY_COMPARE_FUND\";\nconst SET_PERFORMANCE_MODAL_FUND = \"SET_PERFORMANCE_MODAL_FUND\";\nconst SET_HISTORY_MODAL_FUND = \"SET_HISTORY_MODAL_FUND\";\n\nconst INCREMENT_STATS_REQUESTED = \"INCREMENT_STATS_REQUESTED\";\nconst INCREMENT_STATS_SUCCESSFUL = \"INCREMENT_STATS_SUCCESSFUL\";\nconst INCREMENT_STATS_REJECTED = \"INCREMENT_STATS_REJECTED\";\n\nconst GENERATE_EXPORT_FILE_REQUESTED = \"GENERATE_EXPORT_FILE_REQUESTED\";\nconst GENERATE_EXPORT_FILE_SUCCESSFUL = \"GENERATE_EXPORT_FILE_SUCCESSFUL\";\nconst GENERATE_EXPORT_FILE_REJECTED = \"GENERATE_EXPORT_FILE_REJECTED\";\n\nexport const setPrimaryCompareFund = (fund: AnyFund | null): FundsAction => ({\n type: SET_PRIMARY_COMPARE_FUND,\n payload: { fund },\n});\n\nexport const setPerformanceModalFund = (fund: AnyFund | null): FundsAction => ({\n type: SET_PERFORMANCE_MODAL_FUND,\n payload: { fund },\n});\n\nexport const setHistoryModalFund = (fund: AnyFund | null): FundsAction => ({\n type: SET_HISTORY_MODAL_FUND,\n payload: { fund },\n});\n\nexport const incrementStats = (id: number): FundsAction => ({\n type: INCREMENT_STATS_REQUESTED,\n payload: { id },\n});\n\nconst incrementStatsSuccessful = (): Action => ({\n type: INCREMENT_STATS_SUCCESSFUL,\n});\n\nconst incrementStatsRejected = (error?: TypeError): ErrorAction => ({\n type: INCREMENT_STATS_REJECTED,\n error,\n});\n\nexport const generateExportFile = (fields?: string[]): FundsAction => ({\n type: GENERATE_EXPORT_FILE_REQUESTED,\n payload: { fields },\n});\n\nconst generateExportFileSuccessful = (): Action => ({\n type: GENERATE_EXPORT_FILE_SUCCESSFUL,\n});\n\nconst generateExportFileRejected = (error?: TypeError): ErrorAction => ({\n type: GENERATE_EXPORT_FILE_REJECTED,\n error,\n});\n\nexport default (\n state: FundsCommonState = {\n primaryCompareFund: null,\n performanceModalFund: null,\n historyModalFund: null,\n },\n { type, payload }: FundsAction\n) => {\n switch (type) {\n case SET_PRIMARY_COMPARE_FUND:\n return {\n ...state,\n primaryCompareFund: payload.fund,\n };\n case SET_PERFORMANCE_MODAL_FUND:\n return {\n ...state,\n performanceModalFund: payload.fund,\n };\n case SET_HISTORY_MODAL_FUND:\n return {\n ...state,\n historyModalFund: payload.fund,\n };\n default:\n return state;\n }\n};\n\nexport const generateExportFileEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(GENERATE_EXPORT_FILE_REQUESTED),\n mergeMap(({ payload }) => {\n const search = window.location.search;\n const total = state.value.ui.fundsTable.total;\n const queryParams = search.replace(\n /(\\?|&)per_page=[0-9]+/g,\n `$1per_page=${total}`\n );\n\n const fetchObservable = from(\n fetch(`${API_URL}/generate_report/${queryParams}`, {\n method: \"post\",\n headers: {\n Accept: \"application/json\",\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ fields: payload.fields }),\n })\n );\n return fetchObservable.pipe(\n switchMap(response =>\n response.status === 200 ? response.arrayBuffer() : \"error\"\n ),\n mergeMap(response => {\n if (response !== \"error\") {\n const blob = response;\n const downloadLink = window.document.createElement(\"a\");\n downloadLink.href = window.URL.createObjectURL(\n new Blob([blob], {\n type:\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n })\n );\n downloadLink.download = lang.advancedFundsList.filename;\n document.body.appendChild(downloadLink);\n downloadLink.click();\n document.body.removeChild(downloadLink);\n return of(setExportLoading(false), generateExportFileSuccessful());\n } else {\n return of(\n setExportLoading(false),\n addErrorToast(\"Error: unable to export funds.\")\n );\n }\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === GENERATE_EXPORT_FILE_REQUESTED)\n )\n ),\n catchError(error =>\n of(setExportLoading(false), generateExportFileRejected(error))\n )\n );\n }),\n catchError(error =>\n of(setExportLoading(false), generateExportFileRejected(error))\n )\n );\n\nexport const incrementStatsEpic = (action$: Observable): any =>\n action$.pipe(\n ofType(INCREMENT_STATS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .put(\n `${API_URL}/stats/rating_points_requests`,\n { fund_id: payload.id },\n getReqOptions()\n )\n .pipe(\n mergeMap(() => of(incrementStatsSuccessful())),\n catchError(error => of(incrementStatsRejected(error)))\n )\n )\n );\n","import aif from \"../domain/funds/aif\";\nimport assetManagers from \"../domain/assetManagers\";\nimport assetManagersCharts from \"../domain/assetManagersCharts\";\nimport auth from \"../domain/auth\";\nimport charts from \"../domain/charts\";\nimport { combineReducers } from \"redux\";\nimport common from \"../domain/funds/common\";\nimport conferences from \"../domain/conferences\";\nimport contact from \"../domain/contact\";\nimport details from \"../domain/funds/details\";\nimport filterSearch from \"../domain/funds/filterSearch\";\nimport filters from \"../domain/filters\";\nimport fundDocuments from \"../domain/funds/fundDocuments\";\nimport fundsInFocus from \"../domain/funds/fundsInFocus\";\nimport fundsPremium from \"../domain/funds/fundsPremium\";\nimport home from \"../domain/home\";\nimport licenses from \"../domain/licenses\";\nimport news from \"../domain/news\";\nimport premium from \"../domain/premium\";\nimport ratingInFocus from \"../domain/funds/ratingInFocus\";\nimport reports from \"../domain/reports\";\nimport route from \"../domain/route\";\nimport savedSearches from \"../domain/savedSearches\";\nimport search from \"../domain/funds/search\";\nimport survey from \"../domain/survey\";\nimport watchlist from \"../domain/funds/watchlist\";\n\nexport const domainReducers = combineReducers({\n auth,\n assetManagersCharts,\n assetManagers,\n funds: combineReducers({\n aif,\n common,\n details,\n filterSearch,\n fundDocuments,\n fundsInFocus,\n ratingInFocus,\n fundsPremium,\n search,\n watchlist,\n }),\n charts,\n home,\n news,\n contact,\n conferences,\n filters,\n route,\n premium,\n savedSearches,\n reports,\n licenses,\n survey,\n});\n","import aifBenchmarks from \"./aifBenchmarks\";\nimport aifBenchmarksModal from \"./aifBenchmarksModal\";\nimport app from \"../ui/app\";\nimport assetManagerCharts from \"./assetManagerCharts\";\nimport assetManagerDashboard from \"./assetManagerDashboard\";\nimport assetManagerDetails from \"./assetManagerDetails\";\nimport assetManagerList from \"./assetManagerList\";\nimport assetManagerNewsModal from \"./assetManagerNewsModal\";\nimport { combineReducers } from \"redux\";\nimport comparisonModal from \"../ui/comparisonModal\";\nimport conferenceDetails from \"../ui/conferenceDetails\";\nimport conferenceInfoModal from \"./conferenceInfoModal\";\nimport esgSurveyInfoModal from \"./esgSurveyInfoModal\";\nimport uploadArticle89Modal from \"./uploadArticle89Modal\";\nimport surveySubmissionModal from \"./surveySubmissionModal\"\nimport removeFundKeyFactsModal from \"./removeFundKeyFactsModal\";\nimport conferenceModal from \"../ui/conferenceModal\";\nimport conferencesList from \"../ui/conferencesList\";\nimport confirmModal from \"../ui/confirmModal\";\nimport contactForm from \"../ui/contactForm\";\nimport fundCharts from \"../ui/fundCharts\";\nimport fundDetails from \"../ui/fundDetails\";\nimport fundDocumentsModal from \"./fundDocumentsModal\";\nimport fundPhotoModal from \"./fundPhotoModal\";\nimport fundsInFocus from \"../ui/fundsInFocus\";\nimport fundsList from \"../ui/fundsList\";\nimport fundsTable from \"../ui/fundsTable\";\nimport header from \"../ui/header\";\nimport home from \"../ui/home\";\nimport invoiceModal from \"./invoiceModal\";\nimport login from \"../ui/login\";\nimport news from \"../ui/news\";\nimport performanceModal from \"../ui/performanceModal\";\nimport portfolioManagerModal from \"./portfolioManagerModal\";\nimport premium from \"../ui/premium\";\nimport purchaseModal from \"./purchaseModal\";\nimport register from \"../ui/register\";\nimport reportDetails from \"../ui/reportDetails\";\nimport reports from \"../ui/reports\";\nimport requestResetPassword from \"../ui/requestResetPassword\";\nimport resetPassword from \"../ui/resetPassword\";\nimport savedSearches from \"../ui/savedSearches\";\nimport search from \"../ui/search\";\nimport survey from \"./survey\";\nimport toasts from \"../ui/toasts\";\nimport watchlist from \"../ui/watchlist\";\n\nexport const uiReducers = combineReducers({\n assetManagerNewsModal,\n app,\n assetManagerCharts,\n assetManagerDashboard,\n assetManagerList,\n assetManagerDetails,\n search,\n header,\n home,\n fundsTable,\n fundsList,\n fundDetails,\n fundsInFocus,\n fundCharts,\n news,\n reports,\n reportDetails,\n performanceModal,\n register,\n login,\n requestResetPassword,\n resetPassword,\n premium,\n watchlist,\n contactForm,\n toasts,\n savedSearches,\n comparisonModal,\n portfolioManagerModal,\n fundDocumentsModal,\n fundPhotoModal,\n confirmModal,\n conferenceModal,\n conferencesList,\n conferenceDetails,\n aifBenchmarksModal,\n aifBenchmarks,\n conferenceInfoModal,\n esgSurveyInfoModal,\n uploadArticle89Modal,\n purchaseModal,\n invoiceModal,\n survey,\n removeFundKeyFactsModal,\n surveySubmissionModal,\n});\n","import { WatchlistAction, WatchlistState } from \"./types\";\n\nconst SET_WATCHLIST_LOADING = \"SET_WATCHLIST_LOADING\";\n\nexport const setWatchlistLoading = (value: boolean): WatchlistAction => ({\n type: SET_WATCHLIST_LOADING,\n payload: { value }\n});\n\nexport default (\n state: WatchlistState = {\n isLoading: false\n },\n { type, payload }: WatchlistAction\n) => {\n switch (type) {\n case SET_WATCHLIST_LOADING:\n return {\n ...state,\n isLoading: payload.value\n };\n default:\n return state;\n }\n};\n","import { ContactFormAction, ContactFormState } from \"./types\";\n\nconst SET_CONTACT_LOADING = \"SET_CONTACT_LOADING\";\n\nexport const setContactLoading = (value: boolean): ContactFormAction => ({\n type: SET_CONTACT_LOADING,\n payload: { value }\n});\n\nexport default (\n state: ContactFormState = {\n isLoading: false\n },\n { type, payload }: ContactFormAction\n) => {\n switch (type) {\n case SET_CONTACT_LOADING:\n return {\n ...state,\n isLoading: payload.value\n };\n default:\n return state;\n }\n};\n","import {\n createStore as _createStore,\n applyMiddleware,\n combineReducers,\n compose,\n} from \"redux\";\nimport {\n addAssetManagerNewsEpic,\n editAssetManagerNewsEpic,\n fetchAssetManagerEpic,\n fetchAssetManagerFundsEpic,\n fetchAssetManagerNewsEpic,\n fetchAssetManagersEpic,\n fetchSingleAssetManagerNewsEpic,\n fetchTopAssetManagerFundsEpic,\n removeAssetManagerNewsEpic,\n saveAssetManagerEpic,\n fetchMacroOverviewsEpic,\n} from \"./domain/assetManagers\";\nimport {\n addConferenceEpic,\n editConferenceEpic,\n fetchConferencesListEpic,\n fetchSingleConferenceEpic,\n registerForConferenceEpic,\n sendConferenceParticipationConfirmationEpic,\n sendConferenceRequestEpic,\n unregisterFromConferenceEpic,\n} from \"./domain/conferences\";\nimport {\n addFundDocumentEpic,\n editFundDocumentEpic,\n fetchFundDocumentsEpic,\n removeFundDocumentEpic,\n} from \"./domain/funds/fundDocuments\";\nimport {\n addFundToWatchlistEpic,\n deleteFundFromWatchlistEpic,\n fetchWatchlistFundsEpic,\n} from \"./domain/funds/watchlist\";\nimport {\n cancelSubscriptionEpic,\n fetchLicensesEpic,\n redirectToPaymentEpic,\n} from \"./domain/licenses\";\nimport { combineEpics, createEpicMiddleware } from \"redux-observable\";\nimport {\n confirmUserEpic,\n cookies,\n fetchLicenseEpic,\n fetchUserWebinarsEpic,\n getLoggedInUserEpic,\n loginEpic,\n logoutEpic,\n refreshTokenEpic,\n registerEpic,\n rejectTokenEpic,\n requestResetPasswordEpic,\n resetPasswordEpic,\n setReceiveEmailsEpic,\n wholesaleRegisterEpic,\n} from \"./domain/auth\";\nimport { connectRouter, push, routerMiddleware } from \"connected-react-router\";\nimport {\n fetchActiveChartsEpic,\n fetchChartDataEpic,\n fetchComparisonChartDataEpic,\n setChartsLoadingEpic,\n} from \"./domain/charts\";\nimport {\n fetchAdvancedSearchFundsEpic,\n fetchCompareFundsEpic,\n fetchFundsInPeergroupEpic,\n fetchNextSearchFundsEpic,\n fetchSearchFundsEpic,\n fetchSelectedFundEpic,\n} from \"./domain/funds/search\";\nimport {\n fetchAifFundsEpic,\n fetchFundAifNewsEpic,\n fetchPaidDocumentEpic,\n saveFundEpic,\n} from \"./domain/funds/aif\";\nimport {\n fetchCustomFieldsEpic,\n fetchFiltersEpic,\n saveCustomFieldsEpic,\n} from \"./domain/filters\";\nimport {\n fetchEmpFundsEpic,\n fetchEsgFundsEpic,\n} from \"./domain/funds/fundsPremium\";\nimport {\n fetchEmpPeergroupsEpic,\n fetchEsgPeergroupsEpic,\n fetchExclusionsEpic,\n fetchPremiumSearchFundsEpic,\n} from \"./domain/premium\";\nimport {\n fetchFilterSearchCountEpic,\n fetchFilterSearchFundsEpic,\n fetchFilterSearchPerfRiskEpic,\n} from \"./domain/funds/filterSearch\";\nimport { fetchHomeFactsEpic, fetchHomeNewsEpic } from \"./domain/home\";\nimport { fetchNewsListEpic, fetchSingleNewsEpic } from \"./domain/news\";\nimport { assetManagerSummaryExportEpic, esgCompanySummaryExportEpic, esgFundSummaryExportEpic, fetchQuestionsCountEpic, fetchSurveyEpic, fetchSurveysVersionsEpic, sendSurveyEpic, sendSurveyVersionEpic, surveyExportEpic, uploadArticle89Epic } from \"./domain/survey\";\nimport { fetchRecordDateEpic, setCookieInfoVisibility } from \"./ui/app\";\nimport { fetchReportsListEpic, fetchSingleReportEpic } from \"./domain/reports\";\nimport {\n fetchSavedSearchesEpic,\n removeSearchEpic,\n saveSearchEpic,\n} from \"./domain/savedSearches\";\nimport {\n generateExportFileEpic,\n incrementStatsEpic,\n} from \"./domain/funds/common\";\nimport { getFilterSearchQueryParams, onSearchChange } from \"../utils/routing\";\nimport { getLangUrl, isProd } from \"../utils/app\";\nimport {\n sendAmRequestEpic,\n sendFundRequestEpic,\n sendMessageEpic,\n sendPremiumMessageEpic,\n sendTeamRequestEpic,\n subscribeListEpic,\n unsubscribeEpic,\n unsubscribeListEpic,\n} from \"./domain/contact\";\nimport { setPrevPathname, setPrevSearch } from \"./domain/route\";\n\nimport { createBrowserHistory } from \"history\";\nimport { domainReducers } from \"./domain/index\";\nimport { fetchAssetManagerStatsEpic } from \"./domain/assetManagersCharts\";\nimport { fetchFundEpic } from \"./domain/funds/details\";\nimport { fetchFundsInFocusEpic } from \"./domain/funds/fundsInFocus\";\nimport { fetchRatingInFocusEpic } from \"./domain/funds/ratingInFocus\";\nimport { reducer as formReducer } from \"redux-form\";\nimport { onRouteChange } from \"../utils/routing\";\nimport { setFUndsListModalVisibility } from \"./ui/fundsList\";\nimport { sxAuth } from \"../utils/sxAuth\";\nimport { uiReducers } from \"./ui\";\n\nexport const history = createBrowserHistory({ basename: \"/\" });\n\nexport const rootReducers = combineReducers({\n ui: uiReducers,\n domain: domainReducers,\n router: connectRouter(history),\n form: formReducer,\n});\n\nconst epicMiddleware = createEpicMiddleware();\n\nconst composeEnhancers =\n typeof window === \"object\" &&\n !isProd() &&\n (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n ? (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__({})\n : compose;\n\nconst epics = combineEpics(\n fetchFundEpic,\n fetchCompareFundsEpic,\n fetchFundsInFocusEpic,\n fetchRatingInFocusEpic,\n fetchSearchFundsEpic,\n fetchAdvancedSearchFundsEpic,\n fetchNewsListEpic,\n fetchReportsListEpic,\n fetchHomeNewsEpic,\n fetchHomeFactsEpic,\n fetchSingleNewsEpic,\n fetchSingleReportEpic,\n loginEpic,\n logoutEpic,\n registerEpic,\n wholesaleRegisterEpic,\n refreshTokenEpic,\n confirmUserEpic,\n requestResetPasswordEpic,\n resetPasswordEpic,\n sendMessageEpic,\n sendPremiumMessageEpic,\n fetchFiltersEpic,\n fetchSelectedFundEpic,\n rejectTokenEpic,\n addFundToWatchlistEpic,\n deleteFundFromWatchlistEpic,\n fetchWatchlistFundsEpic,\n fetchChartDataEpic,\n fetchActiveChartsEpic,\n fetchEmpFundsEpic,\n fetchEsgFundsEpic,\n fetchFundsInPeergroupEpic,\n fetchEmpPeergroupsEpic,\n fetchEsgPeergroupsEpic,\n fetchExclusionsEpic,\n fetchSavedSearchesEpic,\n saveSearchEpic,\n removeSearchEpic,\n saveCustomFieldsEpic,\n fetchCustomFieldsEpic,\n fetchComparisonChartDataEpic,\n sendFundRequestEpic,\n sendTeamRequestEpic,\n subscribeListEpic,\n unsubscribeListEpic,\n unsubscribeEpic,\n fetchPremiumSearchFundsEpic,\n fetchRecordDateEpic,\n fetchAssetManagersEpic,\n fetchMacroOverviewsEpic,\n fetchAssetManagerFundsEpic,\n fetchAssetManagerEpic,\n fetchAssetManagerNewsEpic,\n fetchTopAssetManagerFundsEpic,\n incrementStatsEpic,\n saveAssetManagerEpic,\n fetchSingleAssetManagerNewsEpic,\n fetchFilterSearchFundsEpic,\n fetchFilterSearchCountEpic,\n generateExportFileEpic,\n sendAmRequestEpic,\n fetchFilterSearchPerfRiskEpic,\n fetchAssetManagerStatsEpic,\n addAssetManagerNewsEpic,\n editAssetManagerNewsEpic,\n removeAssetManagerNewsEpic,\n addFundDocumentEpic,\n fetchFundDocumentsEpic,\n editFundDocumentEpic,\n removeFundDocumentEpic,\n saveFundEpic,\n fetchConferencesListEpic,\n fetchSingleConferenceEpic,\n addConferenceEpic,\n editConferenceEpic,\n registerForConferenceEpic,\n sendConferenceParticipationConfirmationEpic,\n sendConferenceRequestEpic,\n redirectToPaymentEpic,\n fetchUserWebinarsEpic,\n unregisterFromConferenceEpic,\n fetchNextSearchFundsEpic,\n fetchLicensesEpic,\n cancelSubscriptionEpic,\n fetchLicenseEpic,\n fetchFundAifNewsEpic,\n fetchAifFundsEpic,\n fetchPaidDocumentEpic,\n setChartsLoadingEpic,\n setReceiveEmailsEpic,\n sendSurveyEpic,\n sendSurveyVersionEpic,\n fetchSurveyEpic,\n fetchQuestionsCountEpic,\n getLoggedInUserEpic,\n surveyExportEpic,\n uploadArticle89Epic,\n assetManagerSummaryExportEpic,\n fetchSurveysVersionsEpic,\n esgFundSummaryExportEpic,\n esgCompanySummaryExportEpic,\n);\n\nexport const store = _createStore(\n rootReducers,\n composeEnhancers(applyMiddleware(epicMiddleware, routerMiddleware(history)))\n);\n\nconst handleRouteChange = ({ pathname, search }) => {\n const prevPathname = store.getState()[\"domain\"][\"route\"][\"prevPathname\"];\n const prevSearch = store.getState()[\"domain\"][\"route\"][\"prevSearch\"];\n\n setTimeout(() => {\n store.dispatch(setPrevPathname(pathname));\n store.dispatch(setPrevSearch(search));\n\n if (prevPathname.includes('/details') && pathname.includes('/details')) {\n onRouteChange(pathname, search, store);\n } else if (prevPathname !== pathname && prevSearch !== search) {\n onRouteChange(pathname, search, store);\n } else if (prevPathname !== pathname) {\n onRouteChange(pathname, search, store);\n } else if (prevSearch !== search) {\n onSearchChange(pathname, search, store);\n } else if (prevSearch === search && search.indexOf(\"selectedFund\") !== -1) {\n onSearchChange(pathname, search, store);\n }\n }, 1);\n}\n\nhistory.listen(handleRouteChange);\n\nhandleRouteChange(history.location)\n\nepicMiddleware.run(epics);\n\nsxAuth();\n\nif (cookies.get(\"accept_cookies\")) {\n store.dispatch(setCookieInfoVisibility(false));\n}\n\nif (cookies.get(\"dont_show_modal\")) {\n store.dispatch(setFUndsListModalVisibility(false));\n}\n\nexport const filterSearchSubmit = () => {\n const form = store.getState().form.filterSearch;\n if (form && form.values) {\n const queryParams = getFilterSearchQueryParams(store.getState().form);\n store.dispatch(push(`${getLangUrl()}/filter-search-results${queryParams}`));\n }\n};\n\nexport default () => store;","import { fetchFilters } from \"../redux/domain/filters\";\nimport { fetchLicenses } from \"../redux/domain/licenses\";\nimport { fetchRecordDate } from \"../redux/ui/app\";\nimport { refreshToken } from \"../redux/domain/auth\";\nimport { store } from \"./../redux/index\";\n\nexport const sxAuth = () => {\n store.dispatch(refreshToken());\n setTimeout(() => {\n store.dispatch(fetchRecordDate());\n store.dispatch(fetchFilters());\n store.dispatch(fetchLicenses());\n }, 1);\n\n setInterval(() => {\n if (store.getState().domain.auth.isAuthenticated) {\n store.dispatch(refreshToken());\n }\n }, 540000);\n};\n","import { FundsInFocusAction, FundsInFocusState } from \"./types\";\n\nconst SET_FUNDS_IN_FOCUS_LOADING = \"SET_FUNDS_IN_FOCUS_LOADING\";\nconst SET_FUNDS_IN_FOCUS_CATEGORY = \"SET_FUNDS_IN_FOCUS_CATEGORY\";\nconst SET_FUNDS_IN_FOCUS_STEP = \"SET_FUNDS_IN_FOCUS_STEP\";\n\nexport const setFundsInFocusLoading = (value: boolean): FundsInFocusAction => ({\n type: SET_FUNDS_IN_FOCUS_LOADING,\n payload: { value },\n});\n\nexport const setFundsInFocusActiveCategory = (\n value: number\n): FundsInFocusAction => ({\n type: SET_FUNDS_IN_FOCUS_CATEGORY,\n payload: { value },\n});\n\nexport const setFundsInFocusStep = (value: number): FundsInFocusAction => ({\n type: SET_FUNDS_IN_FOCUS_STEP,\n payload: { value },\n});\n\nexport default (\n state: FundsInFocusState = {\n isLoading: false,\n category: 0,\n step: 0,\n },\n { type, payload }: FundsInFocusAction\n) => {\n switch (type) {\n case SET_FUNDS_IN_FOCUS_LOADING:\n return {\n ...state,\n isLoading: payload.value,\n };\n case SET_FUNDS_IN_FOCUS_CATEGORY:\n return {\n ...state,\n category: payload.value,\n step: 0,\n };\n case SET_FUNDS_IN_FOCUS_STEP:\n return {\n ...state,\n step: payload.value,\n };\n default:\n return state;\n }\n};\n","import { PurchaseModalAction, PurchaseModalState } from \"./types\";\n\nconst SET_PURCHASE_MODAL_VISIBILITY = \"SET_PURCHASE_MODAL_VISIBILITY\";\nconst SET_PURCHASE_MODAL_LOADING = \"SET_PURCHASE_MODAL_LOADING\";\n\nexport const setPurchaseModalVisibility = (\n value: boolean\n): PurchaseModalAction => ({\n type: SET_PURCHASE_MODAL_VISIBILITY,\n payload: { value }\n});\n\nexport const setPurchaseModalLoading = (\n value: boolean\n): PurchaseModalAction => ({\n type: SET_PURCHASE_MODAL_LOADING,\n payload: { value }\n});\n\nexport default (\n state: PurchaseModalState = {\n isVisible: false,\n isLoading: false\n },\n { type, payload }: PurchaseModalAction\n) => {\n switch (type) {\n case SET_PURCHASE_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n case SET_PURCHASE_MODAL_LOADING:\n return {\n ...state,\n isLoading: payload.value\n };\n default:\n return state;\n }\n};\n","import {\n Action,\n ErrorAction,\n Meta,\n News,\n NewsAction,\n NewsState,\n} from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, filter, mergeMap, takeUntil } from \"rxjs/operators\";\nimport { setNewsListTotal, setNewsLoading } from \"../ui/news\";\n\nimport { API_URL } from \"./config\";\nimport { StateValue } from \"../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { getLangUrl } from \"../../utils/app\";\nimport { getNewsQueryParams } from \"../../utils/routing\";\nimport { lang } from \"../../lang/lang\";\nimport { ofType } from \"redux-observable\";\nimport { push } from \"connected-react-router\";\nimport { slugify } from \"../../utils/funds\";\nimport urls from \"../../utils/urls\";\n\nconst FETCH_NEWS_LIST_REQUESTED = \"FETCH_NEWS_LIST_REQUESTED\";\nconst FETCH_NEWS_LIST_SUCCESSFUL = \"FETCH_NEWS_LIST_SUCCESSFUL\";\nconst FETCH_NEWS_LIST_REJECTED = \"FETCH_NEWS_LIST_REJECTED\";\nconst FETCH_SINGLE_NEWS_REQUESTED = \"FETCH_SINGLE_NEWS_REQUESTED\";\nconst FETCH_SINGLE_NEWS_SUCCESSFUL = \"FETCH_SINGLE_NEWS_SUCCESSFUL\";\nconst FETCH_SINGLE_NEWS_REJECTED = \"FETCH_SINGLE_NEWS_REJECTED\";\n\nexport const fetchNewsList = (meta?: Meta): NewsAction => ({\n type: FETCH_NEWS_LIST_REQUESTED,\n payload: { meta },\n});\n\nexport const fetchNewsListSuccessful = (news: News[]): NewsAction => ({\n type: FETCH_NEWS_LIST_SUCCESSFUL,\n payload: { news },\n});\n\nexport const fetchNewsListRejected = (error: TypeError): ErrorAction => ({\n type: FETCH_NEWS_LIST_REJECTED,\n error,\n});\n\nexport const fetchSingleNews = (id: number | string): NewsAction => ({\n type: FETCH_SINGLE_NEWS_REQUESTED,\n payload: { id },\n});\n\nexport const fetchSingleNewsSuccessful = (singleNews: News): NewsAction => ({\n type: FETCH_SINGLE_NEWS_SUCCESSFUL,\n payload: { singleNews },\n});\n\nexport const fetchSingleNewsRejected = (error: TypeError): ErrorAction => ({\n type: FETCH_SINGLE_NEWS_REJECTED,\n error,\n});\n\nexport default (\n state: NewsState = {\n newsList: [],\n news: null,\n },\n { type, payload }: NewsAction\n) => {\n switch (type) {\n case FETCH_NEWS_LIST_SUCCESSFUL:\n return {\n ...state,\n newsList: payload.news,\n };\n case FETCH_SINGLE_NEWS_SUCCESSFUL:\n if (payload.singleNews) {\n return {\n ...state,\n news: payload.singleNews,\n };\n } else {\n return state;\n }\n default:\n return state;\n }\n};\n\nexport const fetchNewsListEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_NEWS_LIST_REQUESTED),\n mergeMap(({ payload }) => {\n const queryParams = getNewsQueryParams(state.value.form);\n const resolve = (payload.meta && payload.meta.resolve) || null;\n const reject = (payload.meta && payload.meta.reject) || null;\n const language = `${\n queryParams === \"\" ? \"?\" : \"&\"\n }lang=${lang.getLanguage()}`;\n\n return ajax.get(`${API_URL}/news/${queryParams}${language}`).pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(\n setNewsLoading(false),\n setNewsListTotal(response.count),\n fetchNewsListSuccessful(response.results)\n );\n }),\n takeUntil(\n action$.pipe(filter(({ type }) => type === FETCH_NEWS_LIST_REQUESTED))\n ),\n catchError(error => {\n if (reject) reject(error);\n return of(setNewsLoading(false), fetchNewsListRejected(error));\n })\n );\n })\n );\n\nexport const fetchSingleNewsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_SINGLE_NEWS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(`${API_URL}/news/${payload.id}/?lang=${lang.getLanguage()}`)\n .pipe(\n mergeMap(({ response }) => {\n if (urls.NEWS_DETAILS_SHORT.reg.test(window.location.pathname)) {\n return of(\n push(\n `${getLangUrl()}/news/${slugify(response.title)}/${\n response.id\n }`\n )\n );\n }\n return of(\n setNewsLoading(false),\n fetchSingleNewsSuccessful(response)\n );\n }),\n catchError(error => {\n if (error.status === 404) {\n return of(push(`/404`));\n }\n return of(setNewsLoading(false), fetchSingleNewsRejected(error));\n })\n )\n )\n );\n","import {\n Action,\n ErrorAction,\n Fund,\n FundsAction,\n FundsDetailsState,\n} from \"../types\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, mergeMap } from \"rxjs/operators\";\n\nimport { API_URL, getStatisticsHeader } from \"../config\";\nimport { StateValue } from \"../../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { fetchActiveCharts } from \"../charts\";\nimport { ofType } from \"redux-observable\";\nimport { push } from \"connected-react-router\";\nimport { setDetailsLoading } from \"../../ui/fundDetails\";\nimport { setFundsIds } from \"../../ui/comparisonModal\";\nimport { setPrimaryCompareFund } from \"./common\";\nimport { lang } from \"../../../lang/lang\";\nimport {setFundEntranceSrc} from \"../route\";\n\nconst FETCH_FUND_REQUESTED = \"FETCH_FUND_REQUESTED\";\nconst FETCH_FUND_SUCCESSFUL = \"FETCH_FUND_SUCCESSFUL\";\nconst FETCH_FUND_REJECTED = \"FETCH_FUND_REJECTED\";\n\nconst CLEAR_FUND_DETAILS_STATE = \"CLEAR_FUND_DETAILS_STATE\";\n\nexport const fetchFund = (id: number): FundsAction => ({\n type: FETCH_FUND_REQUESTED,\n payload: { id },\n});\n\nexport const fetchFundSuccessful = (fund: Fund): FundsAction => ({\n type: FETCH_FUND_SUCCESSFUL,\n payload: { fund },\n});\n\nexport const fetchFundRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_FUND_REJECTED,\n error,\n});\n\nexport const clearFundDetailsState = (): Action => ({\n type: CLEAR_FUND_DETAILS_STATE,\n});\n\nexport default (\n state: FundsDetailsState = {\n funds: {},\n },\n { type, payload }: FundsAction\n) => {\n switch (type) {\n case FETCH_FUND_SUCCESSFUL:\n if (payload.fund) {\n return {\n ...state,\n funds: {\n ...state.funds,\n [payload.fund.id]: payload.fund,\n },\n };\n } else {\n return state;\n }\n case CLEAR_FUND_DETAILS_STATE:\n return {\n ...state,\n funds: {},\n };\n default:\n return state;\n }\n};\n\nexport const fetchFundEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_FUND_REQUESTED),\n mergeMap(({ payload }) => {\n return ajax\n .get(\n `${API_URL}/funds/${payload.id}/?lang=${lang.getLanguage()}`,\n getStatisticsHeader(state)\n )\n .pipe(\n mergeMap(({ response }) =>\n of(\n setDetailsLoading(false),\n setFundsIds(response.tranche_id, 0),\n setPrimaryCompareFund(response),\n fetchFundSuccessful(response),\n fetchActiveCharts(\n response.id,\n response.tranche_id,\n response.fund_id,\n response.peergroup\n ),\n setFundEntranceSrc(\"\")\n )\n ),\n catchError(error => {\n if (error.status === 404) {\n return of(push(`/404`));\n }\n return of(setDetailsLoading(false), fetchFundRejected(error));\n })\n );\n })\n );","import { API_URL, getReqOptions } from \"./config\";\r\nimport {\r\n Action,\r\n ErrorAction,\r\n SavedSearchesAction,\r\n SavedSearchesState,\r\n} from \"./types\";\r\nimport { Observable, of } from \"rxjs\";\r\nimport { addErrorToast, addSuccessToast } from \"../ui/toasts\";\r\nimport { catchError, mergeMap } from \"rxjs/operators\";\r\nimport {\r\n setSavedSearchesLoading,\r\n setSavedSearchesModalVisibility,\r\n} from \"../ui/savedSearches\";\r\n\r\nimport { SavedSearch } from \"../../types\";\r\nimport { ajax } from \"rxjs/ajax\";\r\nimport { lang } from \"../../lang/lang\";\r\nimport { ofType } from \"redux-observable\";\r\n\r\nconst FETCH_SAVED_SEARCHES_REQUESTED = \"FETCH_SAVED_SEARCHES_REQUESTED\";\r\nconst FETCH_SAVED_SEARCHES_SUCCESSFUL = \"FETCH_SAVED_SEARCHES_SUCCESSFUL\";\r\nconst FETCH_SAVED_SEARCHES_REJECTED = \"FETCH_SAVED_SEARCHES_REJECTED\";\r\nconst SAVE_SEARCH_REQUESTED = \"SAVE_SEARCH_REQUESTED\";\r\nconst SAVE_SEARCH_SUCCESSFUL = \"SAVE_SEARCH_SUCCESSFUL\";\r\nconst SAVE_SEARCH_REJECTED = \"SAVE_SEARCH_REJECTED\";\r\nconst REMOVE_SEARCH_REQUESTED = \"REMOVE_SEARCH_REQUESTED\";\r\nconst REMOVE_SEARCH_SUCCESSFUL = \"REMOVE_SEARCH_SUCCESSFUL\";\r\nconst REMOVE_SEARCH_REJECTED = \"REMOVE_SEARCH_REJECTED\";\r\n\r\nexport const fetchSavedSearches = (): Action => ({\r\n type: FETCH_SAVED_SEARCHES_REQUESTED,\r\n});\r\n\r\nconst fetchSavedSearchesSuccessful = (\r\n searches: SavedSearch[]\r\n): SavedSearchesAction => ({\r\n type: FETCH_SAVED_SEARCHES_SUCCESSFUL,\r\n payload: { searches },\r\n});\r\n\r\nconst fetchSavedSearchesRejected = (error?: TypeError): ErrorAction => ({\r\n type: FETCH_SAVED_SEARCHES_REJECTED,\r\n error,\r\n});\r\n\r\nexport const saveSearch = (\r\n search: string,\r\n name: string\r\n): SavedSearchesAction => ({\r\n type: SAVE_SEARCH_REQUESTED,\r\n payload: { search, name },\r\n});\r\n\r\nconst saveSearchSuccessful = (): Action => ({\r\n type: SAVE_SEARCH_SUCCESSFUL,\r\n});\r\n\r\nconst saveSearchRejected = (error?: TypeError): ErrorAction => ({\r\n type: SAVE_SEARCH_REJECTED,\r\n error,\r\n});\r\nexport const removeSearch = (id: number): SavedSearchesAction => ({\r\n type: REMOVE_SEARCH_REQUESTED,\r\n payload: { id },\r\n});\r\n\r\nconst removeSearchSuccessful = (): Action => ({\r\n type: REMOVE_SEARCH_SUCCESSFUL,\r\n});\r\n\r\nconst removeSearchRejected = (error?: TypeError): ErrorAction => ({\r\n type: REMOVE_SEARCH_REJECTED,\r\n error,\r\n});\r\n\r\nexport default (\r\n state: SavedSearchesState = {\r\n searches: [],\r\n },\r\n { type, payload }: SavedSearchesAction\r\n) => {\r\n switch (type) {\r\n case FETCH_SAVED_SEARCHES_SUCCESSFUL:\r\n return {\r\n ...state,\r\n searches: payload.searches,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const fetchSavedSearchesEpic = (\r\n action$: Observable\r\n): Observable =>\r\n action$.pipe(\r\n ofType(FETCH_SAVED_SEARCHES_REQUESTED),\r\n mergeMap(() =>\r\n ajax\r\n .get(`${API_URL}/saved_searches/`, {\r\n pragma: \"no-cache\",\r\n ...getReqOptions(),\r\n })\r\n .pipe(\r\n mergeMap(({ response }) =>\r\n of(\r\n setSavedSearchesLoading(false),\r\n fetchSavedSearchesSuccessful(response.results)\r\n )\r\n ),\r\n catchError(error =>\r\n of(\r\n setSavedSearchesLoading(false),\r\n fetchSavedSearchesRejected(error)\r\n )\r\n )\r\n )\r\n )\r\n );\r\n\r\nexport const saveSearchEpic = (\r\n action$: Observable\r\n): Observable =>\r\n action$.pipe(\r\n ofType(SAVE_SEARCH_REQUESTED),\r\n mergeMap(({ payload }) =>\r\n ajax\r\n .post(\r\n `${API_URL}/saved_searches/`,\r\n { search_query: payload.search, search_name: payload.name },\r\n getReqOptions()\r\n )\r\n .pipe(\r\n mergeMap(() =>\r\n of(\r\n addSuccessToast(lang.savedSearches.addSuccess),\r\n setSavedSearchesModalVisibility(false),\r\n saveSearchSuccessful()\r\n )\r\n ),\r\n catchError(error =>\r\n of(\r\n addErrorToast(lang.savedSearches.addError),\r\n saveSearchRejected(error)\r\n )\r\n )\r\n )\r\n )\r\n );\r\n\r\nexport const removeSearchEpic = (\r\n action$: Observable\r\n): Observable =>\r\n action$.pipe(\r\n ofType(REMOVE_SEARCH_REQUESTED),\r\n mergeMap(({ payload }) =>\r\n ajax\r\n .delete(`${API_URL}/saved_searches/${payload.id}/`, getReqOptions())\r\n .pipe(\r\n mergeMap(() =>\r\n of(\r\n removeSearchSuccessful(),\r\n addSuccessToast(lang.savedSearches.removeSuccess),\r\n fetchSavedSearches()\r\n )\r\n ),\r\n catchError(error =>\r\n of(\r\n addErrorToast(lang.savedSearches.removeError),\r\n removeSearchRejected(error)\r\n )\r\n )\r\n )\r\n )\r\n );\r\n","import { SavedSearchesAction, SavedSearchesState } from \"./types\";\r\n\r\nconst SET_SAVED_SEARCHES_LOADING = \"SET_SAVED_SEARCHES_LOADING\";\r\nconst SET_SAVED_SEARCHES_MODAL_VISIBILITY = \"SET_SAVED_SEARCHES_MODAL_VISIBILITY\";\r\n\r\nexport const setSavedSearchesLoading = (\r\n value: boolean\r\n): SavedSearchesAction => ({\r\n type: SET_SAVED_SEARCHES_LOADING,\r\n payload: { value }\r\n});\r\n\r\nexport const setSavedSearchesModalVisibility = (\r\n value: boolean\r\n): SavedSearchesAction => ({\r\n type: SET_SAVED_SEARCHES_MODAL_VISIBILITY,\r\n payload: { value }\r\n});\r\n\r\nexport default (\r\n state: SavedSearchesState = {\r\n isLoading: false,\r\n isSavedSearchesModalVisible: false\r\n },\r\n { type, payload }: SavedSearchesAction\r\n) => {\r\n switch (type) {\r\n case SET_SAVED_SEARCHES_LOADING:\r\n return {\r\n ...state,\r\n isLoading: payload.value\r\n };\r\n case SET_SAVED_SEARCHES_MODAL_VISIBILITY:\r\n return {\r\n ...state,\r\n isSavedSearchesModalVisible: payload.value\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { API_URL, getReqOptions } from \"../config\";\nimport {\n Action,\n CompareFund,\n ErrorAction,\n EsgFund,\n FundsAction,\n FundsPremiumState,\n} from \"../types\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, mergeMap } from \"rxjs/operators\";\nimport { setEmpLoading, setEsgLoading } from \"../../ui/premium\";\n\nimport { ajax } from \"rxjs/ajax\";\nimport { ofType } from \"redux-observable\";\n\nconst FETCH_EMP_FUNDS_REQUESTED = \"FETCH_EMP_FUNDS_REQUESTED\";\nconst FETCH_EMP_FUNDS_SUCCESSFUL = \"FETCH_EMP_FUNDS_SUCCESSFUL\";\nconst FETCH_EMP_FUNDS_REJECTED = \"FETCH_EMP_FUNDS_REJECTED\";\n\nconst FETCH_ESG_FUNDS_REQUESTED = \"FETCH_ESG_FUNDS_REQUESTED\";\nconst FETCH_ESG_FUNDS_SUCCESSFUL = \"FETCH_ESG_FUNDS_SUCCESSFUL\";\nconst FETCH_ESG_FUNDS_REJECTED = \"FETCH_ESG_FUNDS_REJECTED\";\n\nexport const fetchEmpFunds = (id: number): FundsAction => ({\n type: FETCH_EMP_FUNDS_REQUESTED,\n payload: { id },\n});\n\nconst fetchEmpFundsSuccessful = (funds: CompareFund[]): FundsAction => ({\n type: FETCH_EMP_FUNDS_SUCCESSFUL,\n payload: { funds },\n});\n\nconst fetchEmpFundsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_EMP_FUNDS_REJECTED,\n error,\n});\n\nexport const fetchEsgFunds = (id: number): FundsAction => ({\n type: FETCH_ESG_FUNDS_REQUESTED,\n payload: { id },\n});\n\nconst fetchEsgFundsSuccessful = (funds: EsgFund[]): FundsAction => ({\n type: FETCH_ESG_FUNDS_SUCCESSFUL,\n payload: { funds },\n});\n\nconst fetchEsgFundsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_ESG_FUNDS_REJECTED,\n error,\n});\n\nexport default (\n state: FundsPremiumState = {\n empFunds: [],\n esgFunds: [],\n },\n { type, payload }: FundsAction\n) => {\n switch (type) {\n case FETCH_EMP_FUNDS_SUCCESSFUL:\n return {\n ...state,\n empFunds: payload.funds,\n };\n case FETCH_ESG_FUNDS_SUCCESSFUL:\n return {\n ...state,\n esgFunds: payload.funds,\n };\n default:\n return state;\n }\n};\n\nexport const fetchEmpFundsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_EMP_FUNDS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(`${API_URL}/emp_list/?peergroup=${payload.id}`, getReqOptions())\n .pipe(\n mergeMap(({ response }) =>\n of(setEmpLoading(false), fetchEmpFundsSuccessful(response.results))\n ),\n catchError(error =>\n of(setEmpLoading(false), fetchEmpFundsRejected(error))\n )\n )\n )\n );\n\nexport const fetchEsgFundsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_ESG_FUNDS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(`${API_URL}/esg_list/?peergroup=${payload.id}`, getReqOptions())\n .pipe(\n mergeMap(({ response }) =>\n of(setEsgLoading(false), fetchEsgFundsSuccessful(response.results))\n ),\n catchError(error =>\n of(setEsgLoading(false), fetchEsgFundsRejected(error))\n )\n )\n )\n );\n","import { ofType } from \"redux-observable\";\nimport { Observable, of } from \"rxjs\";\nimport { ajax } from \"rxjs/ajax\";\nimport { catchError, mergeMap } from \"rxjs/operators\";\n\nimport { lang } from \"../../lang/lang\";\nimport { setHomeFactsLoading, setHomeNewsLoading } from \"../ui/home\";\nimport { API_URL } from \"./config\";\nimport {\n Action,\n ErrorAction,\n HomeAction,\n HomeState,\n Meta,\n News\n} from \"./types\";\n\nconst FETCH_HOME_NEWS_REQUESTED = \"FETCH_HOME_NEWS_REQUESTED\";\nconst FETCH_HOME_NEWS_SUCCESSFUL = \"FETCH_HOME_NEWS_SUCCESSFUL\";\nconst FETCH_HOME_NEWS_REJECTED = \"FETCH_HOME_NEWS_REJECTED\";\nconst FETCH_HOME_FACTS_REQUESTED = \"FETCH_HOME_FACTS_REQUESTED\";\nconst FETCH_HOME_FACTS_SUCCESSFUL = \"FETCH_HOME_FACTS_SUCCESSFUL\";\nconst FETCH_HOME_FACTS_REJECTED = \"FETCH_HOME_FACTS_REJECTED\";\n\nexport const fetchHomeNews = (meta?: Meta): HomeAction => ({\n type: FETCH_HOME_NEWS_REQUESTED,\n payload: { meta }\n});\n\nconst fetchHomeNewsSuccessful = (news: News[]): HomeAction => ({\n type: FETCH_HOME_NEWS_SUCCESSFUL,\n payload: { news }\n});\n\nconst fetchHomeNewsRejected = (error: TypeError): ErrorAction => ({\n type: FETCH_HOME_NEWS_REJECTED,\n error\n});\n\nexport const fetchHomeFacts = (meta?: Meta): HomeAction => ({\n type: FETCH_HOME_FACTS_REQUESTED,\n payload: { meta }\n});\n\nconst fetchHomeFactsSuccessful = (news: News[]): HomeAction => ({\n type: FETCH_HOME_FACTS_SUCCESSFUL,\n payload: { news }\n});\n\nconst fetchHomeFactsRejected = (error: TypeError): ErrorAction => ({\n type: FETCH_HOME_FACTS_REJECTED,\n error\n});\n\nexport default (\n state: HomeState = {\n homeNews: [],\n homeFacts: []\n },\n { type, payload }: HomeAction\n) => {\n switch (type) {\n case FETCH_HOME_NEWS_SUCCESSFUL:\n return {\n ...state,\n homeNews: payload.news\n };\n case FETCH_HOME_FACTS_SUCCESSFUL:\n return {\n ...state,\n homeFacts: payload.news\n };\n default:\n return state;\n }\n};\n\nexport const fetchHomeNewsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_HOME_NEWS_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/home_news/?lang=${lang.getLanguage()}`).pipe(\n mergeMap(({ response }) =>\n of(setHomeNewsLoading(false), fetchHomeNewsSuccessful(response))\n ),\n catchError(error =>\n of(setHomeNewsLoading(false), fetchHomeNewsRejected(error))\n )\n )\n )\n );\n\nexport const fetchHomeFactsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_HOME_FACTS_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/home_facts/?lang=${lang.getLanguage()}`).pipe(\n mergeMap(({ response }) =>\n of(setHomeFactsLoading(false), fetchHomeFactsSuccessful(response))\n ),\n catchError(error =>\n of(setHomeFactsLoading(false), fetchHomeFactsRejected(error))\n )\n )\n )\n );\n","import { ReportsAction, ReportsState } from \"./types\";\n\nconst SET_REPORTS_LOADING = \"SET_REPORTS_LOADING\";\nconst SET_REPORTS_LIST_TOTAL = \"SET_REPORTS_LIST_TOTAL\";\nconst SET_REPORTS_CARDS_VIEW = \"SET_REPORTS_CARDS_VIEW\";\n\nexport const setReportsLoading = (value: boolean): ReportsAction => ({\n type: SET_REPORTS_LOADING,\n payload: { value }\n});\n\nexport const setReportsListTotal = (value: number): ReportsAction => ({\n type: SET_REPORTS_LIST_TOTAL,\n payload: { value }\n});\n\nexport const setReportsCardsView = (value: boolean): ReportsAction => ({\n type: SET_REPORTS_CARDS_VIEW,\n payload: { value }\n});\n\nexport default (\n state: ReportsState = {\n total: 0,\n isReportsLoading: true,\n isReportsCardsView: true\n },\n { type, payload }: ReportsAction\n) => {\n switch (type) {\n case SET_REPORTS_LOADING:\n return {\n ...state,\n isReportsLoading: payload.value\n };\n case SET_REPORTS_LIST_TOTAL:\n return {\n ...state,\n total: payload.value\n };\n case SET_REPORTS_CARDS_VIEW:\n return {\n ...state,\n isReportsCardsView: payload.value\n };\n default:\n return state;\n }\n};\n","import { API_URL, getReqOptions } from \"./config\";\nimport {\n Action,\n ErrorAction,\n Invoice,\n License,\n LicensesAction,\n LicensesState,\n Meta,\n Price,\n} from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { addErrorToast, addSuccessToast } from \"../ui/toasts\";\nimport { catchError, filter, mergeMap, takeUntil } from \"rxjs/operators\";\n\nimport { StateValue } from \"./../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { fetchLicense } from \"./auth\";\nimport { lang } from \"./../../lang/lang\";\nimport { ofType } from \"redux-observable\";\nimport { setInvoiceModalVisibility } from \"../ui/invoiceModal\";\nimport { setPurchaseModalLoading } from \"../ui/purchaseModal\";\nimport { setPurchaseModalVisibility } from \"./../ui/purchaseModal\";\n\nconst FETCH_LICENSES_REQUESTED = \"FETCH_LICENSES_REQUESTED\";\nconst FETCH_LICENSES_SUCCESSFUL = \"FETCH_LICENSES_SUCCESSFUL\";\nconst FETCH_LICENSES_REJECTED = \"FETCH_LICENSES_REJECTED\";\nconst REDIRECT_TO_PAYMENT_REQUESTED = \"REDIRECT_TO_PAYMENT_REQUESTED\";\nconst REDIRECT_TO_PAYMENT_SUCCESSFUL = \"REDIRECT_TO_PAYMENT_SUCCESSFUL\";\nconst REDIRECT_TO_PAYMENT_REJECTED = \"REDIRECT_TO_PAYMENT_REJECTED\";\nconst CANCEL_SUBSCRIPTION_REQUESTED = \"CANCEL_SUBSCRIPTION_REQUESTED\";\nconst CANCEL_SUBSCRIPTION_SUCCESSFUL = \"CANCEL_SUBSCRIPTION_SUCCESSFUL\";\nconst CANCEL_SUBSCRIPTION_REJECTED = \"CANCEL_SUBSCRIPTION_REJECTED\";\nconst SET_SELECTED_PRICE = \"SET_SELECTED_PRICE\";\nconst SET_SELECTED_LICENSE = \"SET_SELECTED_LICENSE\";\n\nexport const fetchLicenses = (): Action => ({\n type: FETCH_LICENSES_REQUESTED,\n});\n\nexport const fetchLicensesSuccessful = (\n licenses: License[]\n): LicensesAction => ({\n type: FETCH_LICENSES_SUCCESSFUL,\n payload: { licenses },\n});\n\nexport const fetchLicensesRejected = (error: TypeError): ErrorAction => ({\n type: FETCH_LICENSES_REJECTED,\n error,\n});\n\nexport const redirectToPayment = (\n item: PaymentItem,\n meta: Meta\n): LicensesAction => ({\n type: REDIRECT_TO_PAYMENT_REQUESTED,\n payload: { item, meta },\n});\n\nexport const redirectToPaymentSuccessful = (\n invoice: Invoice\n): LicensesAction => ({\n type: REDIRECT_TO_PAYMENT_SUCCESSFUL,\n payload: { invoice },\n});\n\nexport const redirectToPaymentRejected = (error: TypeError): ErrorAction => ({\n type: REDIRECT_TO_PAYMENT_REJECTED,\n error,\n});\n\nexport const cancelSubscription = (): Action => ({\n type: CANCEL_SUBSCRIPTION_REQUESTED,\n});\n\nexport const cancelSubscriptionSuccessful = (\n license: License\n): LicensesAction => ({\n type: CANCEL_SUBSCRIPTION_SUCCESSFUL,\n payload: { license },\n});\n\nexport const cancelSubscriptionRejected = (error: TypeError): ErrorAction => ({\n type: CANCEL_SUBSCRIPTION_REJECTED,\n error,\n});\n\nexport const setSelectedPrice = (price: Price): LicensesAction => ({\n type: SET_SELECTED_PRICE,\n payload: { price },\n});\n\nexport const setSelectedLicense = (license: License): LicensesAction => ({\n type: SET_SELECTED_LICENSE,\n payload: { license },\n});\n\nexport default (\n state: LicensesState = {\n licenses: [],\n invoice: null,\n selectedPrice: null,\n selectedLicense: null,\n },\n { type, payload }: LicensesAction\n) => {\n switch (type) {\n case FETCH_LICENSES_SUCCESSFUL:\n return {\n ...state,\n licenses: payload.licenses,\n };\n case SET_SELECTED_PRICE:\n return {\n ...state,\n selectedPrice: payload.price,\n };\n case SET_SELECTED_LICENSE:\n return {\n ...state,\n selectedLicense: payload.license,\n };\n case REDIRECT_TO_PAYMENT_SUCCESSFUL:\n return {\n ...state,\n invoice: payload.invoice,\n };\n default:\n return state;\n }\n};\n\nexport const fetchLicensesEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_LICENSES_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/payments/products/?type=good`, getReqOptions()).pipe(\n mergeMap(({ response }) =>\n of(fetchLicensesSuccessful(response.results))\n ),\n takeUntil(\n action$.pipe(filter(({ type }) => type === FETCH_LICENSES_REQUESTED))\n ),\n catchError(error => of(fetchLicensesRejected(error)))\n )\n )\n );\n\nexport const redirectToPaymentEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(REDIRECT_TO_PAYMENT_REQUESTED),\n mergeMap(({ payload }) => {\n const data = {\n item: payload.item,\n user: { ...state.value.form.purchase?.values },\n success_url: `${window.location.origin}/payments/success`,\n cancel_url: window.location.href,\n };\n\n const { resolve, reject }: Meta | any = payload.meta || {};\n\n return ajax\n .post(`${API_URL}/payments/invoice/`, data, getReqOptions())\n .pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(\n setPurchaseModalLoading(false),\n setPurchaseModalVisibility(false),\n setInvoiceModalVisibility(true),\n fetchLicense(),\n redirectToPaymentSuccessful(response)\n );\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === REDIRECT_TO_PAYMENT_REQUESTED)\n )\n ),\n catchError(error => {\n if (reject) reject(error);\n return of(\n setPurchaseModalLoading(false),\n redirectToPaymentRejected(error)\n );\n })\n );\n })\n );\n\nexport const cancelSubscriptionEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(CANCEL_SUBSCRIPTION_REQUESTED),\n mergeMap(() =>\n ajax\n .post(`${API_URL}/profile/subscription/cancel/`, getReqOptions())\n .pipe(\n mergeMap(({ response }) =>\n of(\n addSuccessToast(\"Your premium subscription was cancelled.\"),\n fetchLicense(),\n cancelSubscriptionSuccessful(response)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === CANCEL_SUBSCRIPTION_REQUESTED)\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.premium.subscribeListError),\n cancelSubscriptionRejected(error)\n )\n )\n )\n )\n );\n","import {\n Action,\n ErrorAction,\n Meta,\n Report,\n ReportsAction,\n ReportsState,\n} from \"./types\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, filter, mergeMap, takeUntil } from \"rxjs/operators\";\nimport { setReportsListTotal, setReportsLoading } from \"./../ui/reports\";\n\nimport { API_URL } from \"./config\";\nimport { StateValue } from \"../types\";\nimport { ajax } from \"rxjs/ajax\";\nimport { getReportsQueryParams } from \"./../../utils/routing\";\nimport { lang } from \"../../lang/lang\";\nimport { ofType } from \"redux-observable\";\nimport { push } from \"connected-react-router\";\nimport { setReportDetailsLoading } from \"./../ui/reportDetails\";\nimport { slugify } from \"../../utils/funds\";\nimport urls from \"../../utils/urls\";\n\nconst FETCH_REPORTS_LIST_REQUESTED = \"FETCH_REPORTS_LIST_REQUESTED\";\nconst FETCH_REPORTS_LIST_SUCCESSFUL = \"FETCH_REPORTS_LIST_SUCCESSFUL\";\nconst FETCH_REPORTS_LIST_REJECTED = \"FETCH_REPORTS_LIST_REJECTED\";\nconst FETCH_SINGLE_REPORT_REQUESTED = \"FETCH_SINGLE_REPORT_REQUESTED\";\nconst FETCH_SINGLE_REPORT_SUCCESSFUL = \"FETCH_SINGLE_REPORT_SUCCESSFUL\";\nconst FETCH_SINGLE_REPORT_REJECTED = \"FETCH_SINGLE_REPORT_REJECTED\";\n\nexport const fetchReportsList = (meta?: Meta): ReportsAction => ({\n type: FETCH_REPORTS_LIST_REQUESTED,\n payload: { meta },\n});\n\nexport const fetchReportsListSuccessful = (\n reports: Report[]\n): ReportsAction => ({\n type: FETCH_REPORTS_LIST_SUCCESSFUL,\n payload: { reports },\n});\n\nexport const fetchReportsListRejected = (error: TypeError): ErrorAction => ({\n type: FETCH_REPORTS_LIST_REJECTED,\n error,\n});\n\nexport const fetchSingleReport = (id: number): ReportsAction => ({\n type: FETCH_SINGLE_REPORT_REQUESTED,\n payload: { id },\n});\n\nexport const fetchSingleReportSuccessful = (\n singleReport: Report\n): ReportsAction => ({\n type: FETCH_SINGLE_REPORT_SUCCESSFUL,\n payload: { singleReport },\n});\n\nexport const fetchSingleReportRejected = (error: TypeError): ErrorAction => ({\n type: FETCH_SINGLE_REPORT_REJECTED,\n error,\n});\n\nexport default (\n state: ReportsState = {\n reportsList: [],\n reports: {},\n reportData: null,\n },\n { type, payload }: ReportsAction\n) => {\n switch (type) {\n case FETCH_REPORTS_LIST_SUCCESSFUL:\n return {\n ...state,\n reportsList: payload.reports,\n };\n case FETCH_SINGLE_REPORT_SUCCESSFUL:\n if (payload.singleReport) {\n return {\n ...state,\n reports: {\n ...state.reports,\n [payload.singleReport.id]: payload.singleReport,\n },\n };\n } else {\n return state;\n }\n default:\n return state;\n }\n};\n\nexport const fetchReportsListEpic = (\n action$: Observable,\n state: StateValue\n): Observable =>\n action$.pipe(\n ofType(FETCH_REPORTS_LIST_REQUESTED),\n mergeMap(({ payload }) => {\n const queryParams = getReportsQueryParams(state.value.form);\n const resolve = (payload.meta && payload.meta.resolve) || null;\n const reject = (payload.meta && payload.meta.reject) || null;\n const language = `${queryParams === \"\" ? \"?\" : \"&\"\n }lang=${lang.getLanguage()}`;\n\n return ajax.get(`${API_URL}/reports/${queryParams}${language}`).pipe(\n mergeMap(({ response }) => {\n if (resolve) resolve(response);\n return of(\n setReportsLoading(false),\n setReportsListTotal(response.count),\n fetchReportsListSuccessful(response.results)\n );\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_REPORTS_LIST_REQUESTED)\n )\n ),\n catchError((error) => {\n if (reject) reject(error);\n return of(setReportsLoading(false), fetchReportsListRejected(error));\n })\n );\n })\n );\n\nexport const fetchSingleReportEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_SINGLE_REPORT_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .get(`${API_URL}/reports/${payload.id}/?lang=${lang.getLanguage()}`)\n .pipe(\n mergeMap(({ response }) => {\n if (urls.NEWS_DETAILS_SHORT.reg.test(window.location.pathname)) {\n return of(\n push(`/reports/${slugify(response.title)}/${response.id}`)\n );\n }\n return of(\n setReportDetailsLoading(false),\n fetchSingleReportSuccessful(response)\n );\n }),\n catchError((error) => {\n if (error.status === 404) {\n return of(push(`/404`));\n }\n return of(\n setReportDetailsLoading(false),\n fetchSingleReportRejected(error)\n );\n })\n )\n )\n );\n","import { HeaderAction, HeaderState } from \"./types\";\n\nconst SET_MOBILE_NAV_VISIBILITY = \"SET_MOBILE_NAV_VISIBILITY\";\nconst SET_ACCOUNT_MENU_VISIBILITY = \"SET_ACCOUNT_MENU_VISIBILITY\";\nconst SET_LANG_MENU_VISIBILITY = \"SET_LANG_MENU_VISIBILITY\";\nconst SET_PUBLICATIONS_MENU_VISIBILITY = \"SET_PUBLICATIONS_MENU_VISIBILITY\";\nconst SET_SERVICES_MENU_VISIBILITY = \"SET_SERVICES_MENU_VISIBILITY\";\nconst SET_SCOPE_AWARDS_MENU_VISIBILITY = \"SET_SCOPE_AWARDS_MENU_VISIBILITY\";\n\nexport const setMobileNavVisibility = (value: boolean): HeaderAction => ({\n type: SET_MOBILE_NAV_VISIBILITY,\n payload: { value }\n});\n\nexport const setAccountMenuVisibility = (value: boolean): HeaderAction => ({\n type: SET_ACCOUNT_MENU_VISIBILITY,\n payload: { value }\n});\n\nexport const setLangMenuVisibility = (value: boolean): HeaderAction => ({\n type: SET_LANG_MENU_VISIBILITY,\n payload: { value }\n});\n\nexport const setPublicationsMenuVisibility = (\n value: boolean\n): HeaderAction => ({\n type: SET_PUBLICATIONS_MENU_VISIBILITY,\n payload: { value }\n});\n\nexport const setServicesMenuVisibility = (value: boolean): HeaderAction => ({\n type: SET_SERVICES_MENU_VISIBILITY,\n payload: { value }\n});\n\nexport const setScopeAwardsMenuVisibility = (value: boolean): HeaderAction => ({\n type: SET_SCOPE_AWARDS_MENU_VISIBILITY,\n payload: { value },\n});\n\nexport default (\n state: HeaderState = {\n isMobileNavVisible: false,\n isAccountMenuVisible: false,\n isLangMenuVisible: false,\n isPublicationsMenuVisible: false,\n isServicesMenuVisible: false,\n isScopeAwardsMenuVisible: false,\n },\n { type, payload }: HeaderAction\n) => {\n switch (type) {\n case SET_MOBILE_NAV_VISIBILITY:\n return {\n isMobileNavVisible: payload.value,\n isAccountMenuVisible: false,\n isLangMenuVisible: false,\n isPublicationsMenuVisible: false,\n isServicesMenuVisible: false,\n isScopeAwardsMenuVisible: false\n };\n case SET_ACCOUNT_MENU_VISIBILITY:\n return {\n isMobileNavVisible: false,\n isAccountMenuVisible: payload.value,\n isLangMenuVisible: false,\n isPublicationsMenuVisible: false,\n isServicesMenuVisible: false,\n isScopeAwardsMenuVisible: false,\n };\n case SET_LANG_MENU_VISIBILITY:\n return {\n isMobileNavVisible: false,\n isAccountMenuVisible: false,\n isLangMenuVisible: payload.value,\n isPublicationsMenuVisible: false,\n isServicesMenuVisible: false,\n isScopeAwardsMenuVisible: false,\n };\n case SET_PUBLICATIONS_MENU_VISIBILITY:\n return {\n isMobileNavVisible: false,\n isAccountMenuVisible: false,\n isLangMenuVisible: false,\n isPublicationsMenuVisible: payload.value,\n isServicesMenuVisible: false,\n isScopeAwardsMenuVisible: false,\n };\n case SET_SERVICES_MENU_VISIBILITY:\n return {\n isMobileNavVisible: false,\n isAccountMenuVisible: false,\n isLangMenuVisible: false,\n isPublicationsMenuVisible: false,\n isServicesMenuVisible: payload.value,\n isScopeAwardsMenuVisible: false,\n };\n case SET_SCOPE_AWARDS_MENU_VISIBILITY:\n return {\n isMobileNavVisible: false,\n isAccountMenuVisible: false,\n isLangMenuVisible: false,\n isPublicationsMenuVisible: false,\n isServicesMenuVisible: false,\n isScopeAwardsMenuVisible: payload.value,\n };\n default:\n return state;\n }\n};\n","import { AifParam } from \"../domain/types\";\nimport { AifBenchmarksModalAction, AifBenchmarksModalState } from \"./types\";\n\nconst SET_AIF_BENCHMAKRS_MODAL_VISIBILITY =\n \"SET_AIF_BENCHMAKRS_MODAL_VISIBILITY\";\nconst SET_AIF_MODAL_STEP = \"SET_AIF_MODAL_STEP\";\nconst SET_SELECTED_AIF_PARAMS = \"SET_SELECTED_AIF_PARAMS\";\nconst SET_AIF_SELECTED_FUND_ID = \"SET_AIF_SELECTED_FUND_ID\";\n\nexport const setAifBenchmarksModalVisibility = (\n value: boolean\n): AifBenchmarksModalAction => ({\n type: SET_AIF_BENCHMAKRS_MODAL_VISIBILITY,\n payload: { value }\n});\n\nexport const setAifModalStep = (value: number): AifBenchmarksModalAction => ({\n type: SET_AIF_MODAL_STEP,\n payload: { value }\n});\n\nexport const setSelectedAifParams = (\n param: AifParam,\n isChecked: boolean\n): AifBenchmarksModalAction => ({\n type: SET_SELECTED_AIF_PARAMS,\n payload: { param, isChecked }\n});\n\nexport const setAifSelectedFundId = (\n id: number | null\n): AifBenchmarksModalAction => ({\n type: SET_AIF_SELECTED_FUND_ID,\n payload: { id }\n});\n\nexport default (\n state: AifBenchmarksModalState = {\n isVisible: false,\n id: null,\n step: 0,\n selectedAifParams: {}\n },\n { type, payload }: AifBenchmarksModalAction\n) => {\n switch (type) {\n case SET_AIF_BENCHMAKRS_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n case SET_AIF_MODAL_STEP:\n return {\n ...state,\n step: payload.value\n };\n case SET_SELECTED_AIF_PARAMS:\n if (payload.isChecked) {\n return {\n ...state,\n selectedAifParams: {\n ...state.selectedAifParams,\n [payload.param.id]: payload.param\n }\n };\n } else {\n const selectedAifParams = state.selectedAifParams;\n if (selectedAifParams[payload.param.id]) {\n delete selectedAifParams[payload.param.id];\n }\n\n return {\n ...state,\n selectedAifParams: {\n ...selectedAifParams\n }\n };\n }\n case SET_AIF_SELECTED_FUND_ID:\n return {\n ...state,\n id: payload.id\n };\n default:\n return state;\n }\n};\n","import { API_URL, getReqOptions } from \"../config\";\nimport {\n Action,\n ErrorAction,\n FundDocument,\n FundDocumentsState,\n FundsAction,\n Meta,\n} from \"../types\";\nimport { Observable, of } from \"rxjs\";\nimport { addErrorToast, addSuccessToast } from \"../../ui/toasts\";\nimport { catchError, filter, mergeMap, takeUntil } from \"rxjs/operators\";\nimport {\n setFundDocumentsLoading,\n setFundDocumentsUploading,\n} from \"../../ui/fundDocumentsModal\";\n\nimport { ajax } from \"rxjs/ajax\";\nimport { getReversedDateFormat } from \"../../../utils/formats\";\nimport { lang } from \"../../../lang/lang\";\nimport { ofType } from \"redux-observable\";\n\nconst ADD_FUND_DOCUMENT_REQUESTED = \"ADD_FUND_DOCUMENT_REQUESTED\";\nconst ADD_FUND_DOCUMENT_SUCCESSFUL = \"ADD_FUND_DOCUMENT_SUCCESSFUL\";\nconst ADD_FUND_DOCUMENT_REJECTED = \"ADD_FUND_DOCUMENT_REJECTED\";\n\nconst EDIT_FUND_DOCUMENT_REQUESTED = \"EDIT_FUND_DOCUMENT_REQUESTED\";\nconst EDIT_FUND_DOCUMENT_SUCCESSFUL = \"EDIT_FUND_DOCUMENT_SUCCESSFUL\";\nconst EDIT_FUND_DOCUMENT_REJECTED = \"EDIT_FUND_DOCUMENT_REJECTED\";\n\nconst REMOVE_FUND_DOCUMENT_REQUESTED = \"REMOVE_FUND_DOCUMENT_REQUESTED\";\nconst REMOVE_FUND_DOCUMENT_SUCCESSFUL = \"REMOVE_FUND_DOCUMENT_SUCCESSFUL\";\nconst REMOVE_FUND_DOCUMENT_REJECTED = \"REMOVE_FUND_DOCUMENT_REJECTED\";\n\nconst FETCH_FUND_DOCUMENTS_REQUESTED = \"FETCH_FUND_DOCUMENTS_REQUESTED\";\nconst FETCH_FUND_DOCUMENTS_SUCCESSFUL = \"FETCH_FUND_DOCUMENTS_SUCCESSFUL\";\nconst FETCH_FUND_DOCUMENTS_REJECTED = \"FETCH_FUND_DOCUMENTS_REJECTED\";\n\nexport const addFundDocument = (\n values: FundDocument,\n id: number,\n meta: Meta\n): FundsAction => ({\n type: ADD_FUND_DOCUMENT_REQUESTED,\n payload: { values, id, meta },\n});\n\nconst addFundDocumentSuccessful = (): Action => ({\n type: ADD_FUND_DOCUMENT_SUCCESSFUL,\n});\n\nconst addFundDocumentRejected = (error?: TypeError): ErrorAction => ({\n type: ADD_FUND_DOCUMENT_REJECTED,\n error,\n});\n\nexport const editFundDocuments = (\n values: FundDocument,\n id: number,\n meta: Meta\n): FundsAction => ({\n type: EDIT_FUND_DOCUMENT_REQUESTED,\n payload: { values, id, meta },\n});\n\nconst editFundDocumentSuccessful = (): Action => ({\n type: EDIT_FUND_DOCUMENT_SUCCESSFUL,\n});\n\nconst editFundDocumentRejected = (error?: TypeError): ErrorAction => ({\n type: EDIT_FUND_DOCUMENT_REJECTED,\n error,\n});\n\nexport const removeFundDocuments = (\n values: FundDocument,\n id: number\n): FundsAction => ({\n type: REMOVE_FUND_DOCUMENT_REQUESTED,\n payload: { values, id },\n});\n\nconst removeFundDocumentSuccessful = (): Action => ({\n type: REMOVE_FUND_DOCUMENT_SUCCESSFUL,\n});\n\nconst removeFundDocumentRejected = (error?: TypeError): ErrorAction => ({\n type: REMOVE_FUND_DOCUMENT_REJECTED,\n error,\n});\n\nexport const fetchFundDocuments = (id: number): FundsAction => ({\n type: FETCH_FUND_DOCUMENTS_REQUESTED,\n payload: { id },\n});\n\nconst fetchFundDocumentsSuccessful = (\n documents: FundDocument[]\n): FundsAction => ({\n type: FETCH_FUND_DOCUMENTS_SUCCESSFUL,\n payload: { documents },\n});\n\nconst fetchFundDocumentsRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_FUND_DOCUMENTS_REJECTED,\n error,\n});\n\nexport default (\n state: FundDocumentsState = {\n fundDocuments: [],\n },\n { type, payload }: FundsAction\n) => {\n switch (type) {\n case FETCH_FUND_DOCUMENTS_SUCCESSFUL:\n return {\n ...state,\n fundDocuments: payload.documents,\n };\n default:\n return state;\n }\n};\n\nexport const addFundDocumentEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(ADD_FUND_DOCUMENT_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n\n payload.values = {\n ...payload.values,\n date:\n payload.values.date instanceof Date\n ? getReversedDateFormat(payload.values.date)\n : payload.values.date,\n category: payload.values.category?.value,\n };\n\n return ajax\n .post(\n `${API_URL}/fund_documents/${payload.id}/`,\n { ...payload.values },\n getReqOptions()\n )\n .pipe(\n mergeMap(response => {\n if (resolve) resolve(response);\n return of(\n setFundDocumentsUploading(false),\n addFundDocumentSuccessful()\n );\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === ADD_FUND_DOCUMENT_REQUESTED)\n )\n ),\n catchError(error => {\n if (reject) reject(error);\n return of(\n setFundDocumentsUploading(false),\n addFundDocumentRejected(error)\n );\n })\n );\n })\n );\n\nexport const editFundDocumentEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(EDIT_FUND_DOCUMENT_REQUESTED),\n mergeMap(({ payload }) => {\n const { resolve, reject }: Meta = payload.meta;\n\n if (!payload.values.file.base64_string) {\n delete payload.values.file;\n }\n\n payload.values = {\n ...payload.values,\n date:\n payload.values.date instanceof Date\n ? getReversedDateFormat(payload.values.date)\n : payload.values.date,\n category: payload.values.category?.value,\n };\n\n return ajax\n .patch(\n `${API_URL}/fund_documents/${payload.id}/`,\n {\n ...payload.values,\n },\n getReqOptions()\n )\n .pipe(\n mergeMap(() => {\n if (resolve) resolve();\n return of(\n setFundDocumentsUploading(false),\n editFundDocumentSuccessful()\n );\n }),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === EDIT_FUND_DOCUMENT_REQUESTED)\n )\n ),\n catchError(error => {\n if (reject) reject(error);\n return of(\n setFundDocumentsUploading(false),\n editFundDocumentRejected(error)\n );\n })\n );\n })\n );\n\nexport const removeFundDocumentEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(REMOVE_FUND_DOCUMENT_REQUESTED),\n mergeMap(({ payload }) =>\n ajax\n .delete(\n `${API_URL}/funds/${payload.id}/documents/${payload.values.id}/`,\n getReqOptions()\n )\n .pipe(\n mergeMap(() =>\n of(\n fetchFundDocuments(payload.id),\n addSuccessToast(lang.assetManagerDashboard.documentRemoved),\n removeFundDocumentSuccessful()\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === EDIT_FUND_DOCUMENT_REQUESTED)\n )\n ),\n catchError(error =>\n of(\n addErrorToast(lang.assetManagerDashboard.errors.default),\n removeFundDocumentRejected(error)\n )\n )\n )\n )\n );\n\nexport const fetchFundDocumentsEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_FUND_DOCUMENTS_REQUESTED),\n mergeMap(({ payload }) =>\n ajax.get(`${API_URL}/fund_documents/${payload.id}/?lang=${lang.getLanguage()}`).pipe(\n mergeMap(({ response }) =>\n of(\n setFundDocumentsLoading(false),\n fetchFundDocumentsSuccessful(response)\n )\n ),\n takeUntil(\n action$.pipe(\n filter(({ type }) => type === FETCH_FUND_DOCUMENTS_REQUESTED)\n )\n ),\n catchError(error =>\n of(setFundDocumentsLoading(false), fetchFundDocumentsRejected(error))\n )\n )\n )\n );\n","import { ReportDetailsAction, ReportDetailsState } from \"./types\";\n\nconst SET_REPORT_DETAILS_LOADING = \"SET_REPORT_DETAILS_LOADING\";\n\nexport const setReportDetailsLoading = (\n value: boolean\n): ReportDetailsAction => ({\n type: SET_REPORT_DETAILS_LOADING,\n payload: { value }\n});\n\nexport default (\n state: ReportDetailsState = {\n isLoading: true\n },\n { type, payload }: ReportDetailsAction\n) => {\n switch (type) {\n case SET_REPORT_DETAILS_LOADING:\n return {\n ...state,\n isLoading: payload.value\n };\n default:\n return state;\n }\n};\n","import { AssetManagerListAction, AssetManagerListState } from \"./types\";\n\nconst SET_ASSET_MANAGERS_LOADING = \"SET_ASSET_MANAGERS_LOADING\";\n\nexport const setAssetManagersLoading = (\n value: boolean\n): AssetManagerListAction => ({\n type: SET_ASSET_MANAGERS_LOADING,\n payload: { value }\n});\n\nexport default (\n state: AssetManagerListState = {\n isAssetManagersLoading: true\n },\n { type, payload }: AssetManagerListAction\n) => {\n switch (type) {\n case SET_ASSET_MANAGERS_LOADING:\n return {\n ...state,\n isAssetManagersLoading: payload.value\n };\n\n default:\n return state;\n }\n};\n","import { ofType } from \"redux-observable\";\nimport { Observable, of } from \"rxjs\";\nimport { ajax } from \"rxjs/ajax\";\nimport {\n catchError,\n mergeMap,\n} from \"rxjs/operators\";\n\nimport { setFundsInFocusLoading } from \"../../ui/fundsInFocus\";\nimport { API_URL } from \"../config\";\nimport {\n Action,\n ErrorAction,\n FundInFocus,\n FundsAction,\n FundsInFocusState,\n} from \"../types\";\n\nconst FETCH_FUNDS_IN_FOCUS_REQUESTED = \"FETCH_FUNDS_IN_FOCUS_REQUESTED\";\nconst FETCH_FUNDS_IN_FOCUS_SUCCESSFUL = \"FETCH_FUNDS_IN_FOCUS_SUCCESSFUL\";\nconst FETCH_FUNDS_IN_FOCUS_REJECTED = \"FETCH_FUNDS_IN_FOCUS_REJECTED\";\n\nexport const fetchFundsInFocus = (): Action => ({\n type: FETCH_FUNDS_IN_FOCUS_REQUESTED\n});\n\nexport const fetchFundsInFocusSuccessful = (\n funds: FundInFocus[]\n): FundsAction => ({\n type: FETCH_FUNDS_IN_FOCUS_SUCCESSFUL,\n payload: { funds }\n});\n\nexport const fetchFundsInFocusRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_FUNDS_IN_FOCUS_REJECTED,\n error\n});\n\nexport default (\n state: FundsInFocusState = {\n fundsInFocus: []\n },\n { type, payload }: FundsAction\n) => {\n switch (type) {\n case FETCH_FUNDS_IN_FOCUS_SUCCESSFUL:\n return {\n ...state,\n fundsInFocus: payload.funds\n };\n default:\n return state;\n }\n};\n\nexport const fetchFundsInFocusEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_FUNDS_IN_FOCUS_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/fund_in_focus_categories/`).pipe(\n mergeMap(({ response }) =>\n of(\n setFundsInFocusLoading(false),\n fetchFundsInFocusSuccessful(response.results)\n )\n ),\n catchError(error =>\n of(setFundsInFocusLoading(false), fetchFundsInFocusRejected(error))\n )\n )\n )\n );\n","import { API_URL, getReqOptions } from \"../config\";\nimport {\n Action,\n ErrorAction,\n RatingInFocusAction,\n RatingInFocusLink,\n RatingInFocusState,\n} from \"../types\";\nimport { Observable, of } from \"rxjs\";\nimport { catchError, mergeMap } from \"rxjs/operators\";\n\nimport { ajax } from \"rxjs/ajax\";\nimport { ofType } from \"redux-observable\";\n\nconst FETCH_RATING_IN_FOCUS_REQUESTED = \"FETCH_RATING_IN_FOCUS_REQUESTED\";\nconst FETCH_RATING_IN_FOCUS_SUCCESSFUL = \"FETCH_RATING_IN_FOCUS_SUCCESSFUL\";\nconst FETCH_RATING_IN_FOCUS_REJECTED = \"FETCH_RATING_IN_FOCUS_REJECTED\";\n\nexport const fetchRatingInFocus = (): Action => ({\n type: FETCH_RATING_IN_FOCUS_REQUESTED,\n});\n\nexport const fetchRatingInFocusSuccessful = (\n links: RatingInFocusLink[]\n): RatingInFocusAction => ({\n type: FETCH_RATING_IN_FOCUS_SUCCESSFUL,\n payload: { links },\n});\n\nexport const fetchRatingInFocusRejected = (error?: TypeError): ErrorAction => ({\n type: FETCH_RATING_IN_FOCUS_REJECTED,\n error,\n});\n\nexport default (\n state: RatingInFocusState = {\n links: [],\n },\n { type, payload }: RatingInFocusAction\n) => {\n switch (type) {\n case FETCH_RATING_IN_FOCUS_SUCCESSFUL:\n return {\n ...state,\n links: payload.links,\n };\n default:\n return state;\n }\n};\n\nexport const fetchRatingInFocusEpic = (\n action$: Observable\n): Observable =>\n action$.pipe(\n ofType(FETCH_RATING_IN_FOCUS_REQUESTED),\n mergeMap(() =>\n ajax.get(`${API_URL}/team_rating_links/`, getReqOptions()).pipe(\n mergeMap(({ response }) => of(fetchRatingInFocusSuccessful(response))),\n catchError(error => of(fetchRatingInFocusRejected(error)))\n )\n )\n );\n","import { FundPhotoModalAction, FundPhotoModalState } from \"./types\";\n\nconst SET_FUND_PHOTO_VISIBILITY = \"SET_FUND_PHOTO_VISIBILITY\";\nconst SET_FUND_PHOTO_UPLOADING = \"SET_FUND_PHOTO_UPLOADING\";\nconst SET_FUND_PHOTO_EDIT_INDEX = \"SET_FUND_PHOTO_EDIT_INDEX\";\n\nexport const setFundPhotoModalVisibility = (\n value: boolean\n): FundPhotoModalAction => ({\n type: SET_FUND_PHOTO_VISIBILITY,\n payload: { value }\n});\n\nexport const setFundPhotoModalUploading = (\n value: boolean\n): FundPhotoModalAction => ({\n type: SET_FUND_PHOTO_UPLOADING,\n payload: { value }\n});\n\nexport const setFundPhotoModalFundId = (\n index: number | null\n): FundPhotoModalAction => ({\n type: SET_FUND_PHOTO_EDIT_INDEX,\n payload: { index }\n});\n\nexport default (\n state: FundPhotoModalState = {\n isVisible: false,\n isUploading: false,\n editIndex: null\n },\n { type, payload }: FundPhotoModalAction\n) => {\n switch (type) {\n case SET_FUND_PHOTO_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n case SET_FUND_PHOTO_UPLOADING:\n return {\n ...state,\n isUploading: payload.value\n };\n case SET_FUND_PHOTO_EDIT_INDEX:\n return {\n ...state,\n editIndex: payload.index\n };\n default:\n return state;\n }\n};\n","import { UploadArticle89ModalAction, UploadArticle89ModalState } from \"./types\";\n\nconst SET_UPLOAD_ARTICLE_89_MODAL_VISIBILITY = \"SET_UPLOAD_ARTICLE_89_MODAL_VISIBILITY\";\nconst SET_UPLOAD_ARTICLE_89_MODAL_UPLOADING = \"SET_UPLOAD_ARTICLE_89_MODAL_UPLOADING\";\n\nexport const setUploadArticle89ModalVisibility = (\n value: boolean\n): UploadArticle89ModalAction => ({\n type: SET_UPLOAD_ARTICLE_89_MODAL_VISIBILITY,\n payload: { value }\n});\n\nexport const setUploadArticle89ModalUploading = (\n value: boolean\n): UploadArticle89ModalAction => ({\n type: SET_UPLOAD_ARTICLE_89_MODAL_UPLOADING,\n payload: { value }\n})\n\nexport default (\n state: UploadArticle89ModalState = {\n isVisible: false,\n isUploading: false,\n },\n { type, payload }: UploadArticle89ModalAction\n) => {\n switch (type) {\n case SET_UPLOAD_ARTICLE_89_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n case SET_UPLOAD_ARTICLE_89_MODAL_UPLOADING:\n return {\n ...state,\n isUploading: payload.value\n };\n default:\n return state;\n }\n};\n","import { ResetPasswordAction, ResetPasswordState } from \"./types\";\n\nconst SET_RESET_PASSWORD_VISIBILITY = \"SET_RESET_PASSWORD_VISIBILITY\";\nconst SET_RESET_PASSWORD_TOKEN = \"SET_RESET_PASSWORD_TOKEN\";\n\nexport const setResetPasswordVisibility = (\n value: boolean\n): ResetPasswordAction => ({\n type: SET_RESET_PASSWORD_VISIBILITY,\n payload: { value }\n});\n\nexport const setResetPasswordToken = (token: string): ResetPasswordAction => ({\n type: SET_RESET_PASSWORD_TOKEN,\n payload: { token }\n});\n\nexport default (\n state: ResetPasswordState = {\n isResetPasswordVisible: false,\n token: null\n },\n { type, payload }: ResetPasswordAction\n) => {\n switch (type) {\n case SET_RESET_PASSWORD_VISIBILITY:\n return {\n ...state,\n isResetPasswordVisible: payload.value,\n token: payload.value === false ? null : state.token\n };\n case SET_RESET_PASSWORD_TOKEN:\n return {\n ...state,\n token: payload.token\n };\n default:\n return state;\n }\n};\n","import { ConferenceInfoModalAction, ConferenceInfoModalState } from \"./types\";\n\nconst SET_CONFERENCE_INFO_MODAL_VISIBILITY =\n \"SET_CONFERENCE_INFO_MODAL_VISIBILITY\";\n\nexport const setConferenceInfoModalVisibility = (\n value: boolean\n): ConferenceInfoModalAction => ({\n type: SET_CONFERENCE_INFO_MODAL_VISIBILITY,\n payload: { value }\n});\n\nexport default (\n state: ConferenceInfoModalState = {\n isVisible: false\n },\n { type, payload }: ConferenceInfoModalAction\n) => {\n switch (type) {\n case SET_CONFERENCE_INFO_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n default:\n return state;\n }\n};\n","import moment from \"moment\";\n\nimport { getMacroOverviewFields } from \"../components/assetManagers/assetManagerDashboard/profile/config\";\n\nexport const getExtension = name => {\n const reg = /(\\.[a-z0-9]+)$/;\n return name.match(reg)[0].substr(1);\n};\n\nexport const getChangedValues = (\n values,\n form,\n macroOverviewForm,\n selectedFundsForm\n) => {\n const changedValues = {};\n Object.keys(values).forEach(key => {\n if (form) {\n if (form.values[key] !== form.initial[key] && key !== \"selected_funds\") {\n changedValues[key] = values[key];\n if (key === \"macro_overview_date\") {\n changedValues[key] = moment(values[key]).format(\"YYYY-MM-DD\");\n }\n }\n }\n });\n if (macroOverviewForm && form) {\n if (\n macroOverviewForm.values &&\n macroOverviewForm.values.macro_overviews !== form.initial.macro_overviews\n ) {\n changedValues[\"macro_overviews\"] = values.macro_overviews;\n }\n }\n\n if (selectedFundsForm) {\n if (\n selectedFundsForm.values &&\n selectedFundsForm.values.selected_funds !==\n selectedFundsForm.initial.selected_funds\n ) {\n changedValues[\"selected_funds\"] = values.selected_funds;\n }\n }\n return changedValues;\n};\n\nexport const updateEsg = changedValues => {\n if (changedValues[\"esg\"]) {\n const esg = [];\n changedValues[\"esg\"].forEach(value => esg.push({ value }));\n changedValues[\"esg\"] = esg;\n }\n};\n\nexport const updatePortfolioManagers = changedValues => {\n if (changedValues[\"portfolio_managers\"]) {\n const portfolio_managers = [];\n changedValues[\"portfolio_managers\"].forEach(manager => {\n Object.keys(manager).forEach(key => {\n if (\n manager[key] === null ||\n (key === \"photo\" && !manager[key].base64_string)\n ) {\n delete manager[key];\n }\n });\n portfolio_managers.push(manager);\n });\n changedValues[\"portfolio_managers\"] = portfolio_managers;\n }\n};\n\nexport const updateMacroOverview = changedValues => {\n if (changedValues[\"macro_overviews\"]) {\n changedValues[\"macro_overviews\"].forEach((item, i) => {\n const l = getMacroOverviewFields()[i];\n item.label_de = l.label_de;\n item.label_en = l.label_en;\n item.regions.forEach((region, j) => {\n region.label_en = l.regions_en[j];\n region.label_de = l.regions_de[j];\n });\n });\n }\n};\n","import { Link } from \"react-router-dom\";\nimport React from \"react\";\nimport { getRedirectLocation } from \"../../utils/app\";\n\nexport const AppLink = props => {\n let className = \"\";\n\n if (props.className) {\n className += props.className;\n }\n\n if (props.type === \"button\") {\n className += ` button`;\n }\n\n if (props.size) {\n className += ` button--${props.size}`;\n }\n\n if (props.variant) {\n className += ` button--${props.variant}`;\n }\n\n if (props.iconAlign) {\n className += ` button--icon-${props.iconAlign}`;\n }\n\n if (props.active) {\n className += \" button--active\";\n }\n\n if (props.disabled) {\n className += \" applink--disabled\";\n }\n\n if (props.external) {\n return (\n \n {props.iconAlign === \"left\" && props.icon ? props.icon : <>>}\n {props.children}\n {props.iconAlign === \"right\" && props.icon ? props.icon : <>>}\n \n );\n } else {\n return (\n \n {props.iconAlign === \"left\" && props.icon ? props.icon : <>>}\n {props.children}\n {props.iconAlign === \"right\" && props.icon ? props.icon : <>>}\n \n );\n }\n};\n\nexport default AppLink;\n","import { RequestResetPasswordAction, RequestResetPasswordState } from \"./types\";\n\nconst SET_REQUEST_RESET_PASSWORD_VISIBILITY =\n \"SET_REQUEST_RESET_PASSWORD_VISIBILITY\";\n\nexport const setRequestResetPasswordVisibility = (\n value: boolean\n): RequestResetPasswordAction => ({\n type: SET_REQUEST_RESET_PASSWORD_VISIBILITY,\n payload: { value }\n});\n\nexport default (\n state: RequestResetPasswordState = {\n isRequestResetPasswordVisible: false\n },\n { type, payload }: RequestResetPasswordAction\n) => {\n switch (type) {\n case SET_REQUEST_RESET_PASSWORD_VISIBILITY:\n return {\n ...state,\n isRequestResetPasswordVisible: payload.value,\n isMobileNavVisible: false\n };\n default:\n return state;\n }\n};\n","import {\n PortfolioManagerModalAction,\n PortfolioManagerModalState\n} from \"./types\";\n\nconst SET_PORTFOLIO_MANAGER_MODAL_VISIBILITY =\n \"SET_PORTFOLIO_MANAGER_MODAL_VISIBILITY\";\nconst SET_EDIT_PORTFOLIO_MANAGER_ID = \"SET_EDIT_PORTFOLIO_MANAGER_ID\";\n\nexport const setPortfolioManagerModalVisibility = (\n value: boolean\n): PortfolioManagerModalAction => ({\n type: SET_PORTFOLIO_MANAGER_MODAL_VISIBILITY,\n payload: { value }\n});\n\nexport const setEditPortfolioManagerId = (\n id: number | null\n): PortfolioManagerModalAction => ({\n type: SET_EDIT_PORTFOLIO_MANAGER_ID,\n payload: { id }\n});\n\nexport default (\n state: PortfolioManagerModalState = {\n isVisible: false,\n editPortfolioManagerId: null\n },\n { type, payload }: PortfolioManagerModalAction\n) => {\n switch (type) {\n case SET_PORTFOLIO_MANAGER_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n case SET_EDIT_PORTFOLIO_MANAGER_ID:\n return {\n ...state,\n editPortfolioManagerId: payload.id\n };\n default:\n return state;\n }\n};\n","import { InvoiceModalAction, InvoiceModalState } from \"./types\";\n\nconst SET_INVOICE_MODAL_VISIBILITY = \"SET_INVOICE_MODAL_VISIBILITY\";\n\nexport const setInvoiceModalVisibility = (\n value: boolean\n): InvoiceModalAction => ({\n type: SET_INVOICE_MODAL_VISIBILITY,\n payload: { value }\n});\n\nexport default (\n state: InvoiceModalState = {\n isVisible: false\n },\n { type, payload }: InvoiceModalAction\n) => {\n switch (type) {\n case SET_INVOICE_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n default:\n return state;\n }\n};\n","export const aifParams = [\n {\n id: 1,\n field: \"property_portfolio\",\n isInstrument: true,\n formatter: \"getFloatValue\"\n },\n {\n id: 2,\n field: \"sustainability\",\n isInstrument: true,\n formatter: \"getFloatValue\"\n },\n {\n id: 3,\n field: \"financial_structure\",\n isInstrument: true,\n formatter: \"getFloatValue\"\n },\n {\n id: 4,\n field: \"asset_management\",\n isInstrument: true,\n formatter: \"getFloatValue\"\n },\n {\n id: 5,\n field: \"fund_management\",\n isInstrument: true,\n formatter: \"getFloatValue\"\n },\n {\n id: 6,\n field: \"rating_total\",\n isInstrument: true,\n formatter: \"getFloatValue\"\n }\n];\n\nexport const yourAifParams = [\n {\n id: 7,\n field: \"ter\",\n isInstrument: false,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 8,\n field: \"net_volume\",\n isInstrument: true,\n formatter: \"getIntValue\"\n },\n {\n id: 9,\n field: \"real_volume\",\n isInstrument: true,\n formatter: \"getIntValue\"\n },\n {\n id: 10,\n field: \"objects_number\",\n isInstrument: true,\n formatter: \"getIntValue\"\n },\n {\n id: 11,\n field: \"liquidity_ratio\",\n isInstrument: true,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 12,\n field: \"credit_ratio\",\n isInstrument: true,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 13,\n field: \"geographical_german\",\n isInstrument: true,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 14,\n field: \"geographical_european\",\n isInstrument: true,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 15,\n field: \"geographical_non_european\",\n isInstrument: true,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 16,\n field: \"sectoral_office\",\n isInstrument: true,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 17,\n field: \"sectoral_retail\",\n isInstrument: true,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 18,\n field: \"sectoral_living\",\n isInstrument: true,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 19,\n field: \"sectoral_hotel\",\n isInstrument: true,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 20,\n field: \"sectoral_logistics\",\n isInstrument: true,\n formatter: \"getPercentOneDigitValue\"\n },\n {\n id: 21,\n name: \"Performance 1y\",\n field: \"performance_1y\",\n isInstrument: false,\n formatter: \"getPerfValue\"\n },\n {\n id: 22,\n field: \"performance_5y\",\n isInstrument: false,\n formatter: \"getPerfValue\"\n },\n {\n id: 23,\n field: \"volatility_5y\",\n isInstrument: false,\n formatter: \"getRiskValue\"\n },\n {\n id: 24,\n field: \"occupancy\",\n isInstrument: true,\n formatter: \"getFloatValue\"\n }\n];\n","import \"./loadingIndicator.scss\";\n\nimport React from \"react\";\n\nexport const LoadingIndicator = props => (\n \n);\n\nexport default LoadingIndicator;\n","import {\n AssetManagerDashboardAction,\n AssetManagerDashboardState\n} from \"./types\";\n\nconst SET_IS_ASSET_MANAGER_DASHBOARD_SAVING =\n \"SET_IS_ASSET_MANAGER_DASHBOARD_SAVING\";\nconst SET_ASSET_MANAGER_DASHBOARD_CHART_TYPE =\n \"SET_ASSET_MANAGER_DASHBOARD_CHART_TYPE\";\n\nexport const setIsAssetManagerDashboardSaving = (\n value: boolean\n): AssetManagerDashboardAction => ({\n type: SET_IS_ASSET_MANAGER_DASHBOARD_SAVING,\n payload: { value }\n});\n\nexport const setAssetManagerDashboardChartType = (\n value: number\n): AssetManagerDashboardAction => ({\n type: SET_ASSET_MANAGER_DASHBOARD_CHART_TYPE,\n payload: { value }\n});\n\nexport default (\n state: AssetManagerDashboardState = {\n isAssetManagerDashboardChartLoading: false,\n isAssetManagerDashboardSaving: false,\n chartType: 1\n },\n { type, payload }: AssetManagerDashboardAction\n) => {\n switch (type) {\n case SET_IS_ASSET_MANAGER_DASHBOARD_SAVING:\n return {\n ...state,\n isAssetManagerDashboardSaving: payload.value\n };\n case SET_ASSET_MANAGER_DASHBOARD_CHART_TYPE:\n return {\n ...state,\n chartType: payload.value\n };\n default:\n return state;\n }\n};\n","import { ConferenceModalAction, ConferenceModalState } from \"./types\";\n\nconst SET_CONFERENCE_MODAL_LOADING = \"SET_CONFERENCE_MODAL_LOADING\";\nconst SET_CONFERENCE_MODAL_VISIBILITY = \"SET_CONFERENCE_MODAL_VISIBILITY\";\nconst SET_CONFERENCE_ID = \"SET_CONFERENCE_ID\";\n\nexport const setConferenceModalLoading = (\n value: boolean\n): ConferenceModalAction => ({\n type: SET_CONFERENCE_MODAL_LOADING,\n payload: { value }\n});\n\nexport const setConferenceModalVisibility = (\n value: boolean\n): ConferenceModalAction => ({\n type: SET_CONFERENCE_MODAL_VISIBILITY,\n payload: { value }\n});\n\nexport const setConferenceId = (id: number): ConferenceModalAction => ({\n type: SET_CONFERENCE_ID,\n payload: { id }\n});\n\nexport default (\n state: ConferenceModalState = {\n isLoading: false,\n isVisible: false,\n conferenceId: null\n },\n { type, payload }: ConferenceModalAction\n) => {\n switch (type) {\n case SET_CONFERENCE_MODAL_LOADING:\n return {\n ...state,\n isLoading: payload.value\n };\n case SET_CONFERENCE_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n case SET_CONFERENCE_ID:\n return {\n ...state,\n conferenceId: payload.id\n };\n default:\n return state;\n }\n};\n","import { ConfirmModalAction, ConfirmModalState } from \"./types\";\n\nconst SET_CONFIRM_MODAL_VISIBILITY = \"SET_CONFIRM_MODAL_VISIBILITY\";\nconst SET_CONFIRM_MODAL_TEXT = \"SET_CONFIRM_MODAL_TEXT\";\nconst SET_CONFIRM_MODAL_CONFIRM_ACTION = \"SET_CONFIRM_MODAL_CONFIRM_ACTION\";\nconst SET_CONFIRM_MODAL_CANCEL_ACTION = \"SET_CONFIRM_MODAL_CANCEL_ACTION\";\n\nexport const setConfirmModalVisibility = (\n value: boolean\n): ConfirmModalAction => ({\n type: SET_CONFIRM_MODAL_VISIBILITY,\n payload: { value }\n});\n\nexport const setConfirmModalText = (text: string): ConfirmModalAction => ({\n type: SET_CONFIRM_MODAL_TEXT,\n payload: { text }\n});\n\nexport const setConfirmModalConfirmAction = (\n confirm: Function\n): ConfirmModalAction => ({\n type: SET_CONFIRM_MODAL_CONFIRM_ACTION,\n payload: { confirm }\n});\n\nexport const setConfirmModalCancelAction = (\n cancel: Function\n): ConfirmModalAction => ({\n type: SET_CONFIRM_MODAL_CANCEL_ACTION,\n payload: { cancel }\n});\n\nexport default (\n state: ConfirmModalState = {\n isVisible: false,\n text: \"Are you sure?\",\n confirm: () => {},\n cancel: () => {}\n },\n { type, payload }: ConfirmModalAction\n) => {\n switch (type) {\n case SET_CONFIRM_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n case SET_CONFIRM_MODAL_TEXT:\n return {\n ...state,\n text: payload.text\n };\n case SET_CONFIRM_MODAL_CONFIRM_ACTION:\n return {\n ...state,\n confirm: payload.confirm\n };\n case SET_CONFIRM_MODAL_CANCEL_ACTION:\n return {\n ...state,\n cancel: payload.cancel\n };\n default:\n return state;\n }\n};\n","import { lang } from \"../../../../lang/lang\";\n\nexport const getMacroOverviewFields = () => [\n {\n label_en: \"Equity\",\n label_de: \"Aktien\",\n regions_de: [\n \"Europa Large Cap\",\n \"Europa SME\",\n \"USA\",\n \"Schwellenländer\",\n \"Japan\"\n ],\n regions_en: [\n \"Europe Large Cap\",\n \"Europe SME\",\n \"USA\",\n \"Emerging Markets\",\n \"Japan\"\n ]\n },\n {\n label_en: \"Government Bonds\",\n label_de: \"Staatsanleihen\",\n regions_de: [\"Europa\", \"USA\", \"Schwellenländer\"],\n regions_en: [\"Europe\", \"USA\", \"Emerging Markets\"]\n },\n {\n label_en: \"Corporate Bonds\",\n label_de: \"Unternehmens anleihen\",\n regions_de: [\n \"IG Europa\",\n \"IG USA\",\n \"HY Europa\",\n \"HY USA\",\n \"Schwellenländer\"\n ],\n regions_en: [\n \"IG Europe\",\n \"IG USA\",\n \"HY Europe\",\n \"HY USA\",\n \"Emerging Markets\"\n ]\n },\n {\n label_en: \"Currencies\",\n label_de: \"Währungen\",\n regions_de: [\"USD/EUR\", \"YEN/EUR\"],\n regions_en: [\"USD/EUR\", \"YEN/EUR\"]\n }\n];\n\nexport const getMacroOverviewOptions = () => [\n {\n label: lang.assetManagerDashboard.macroOverviewOptions.veryNegative,\n value: 1\n },\n {\n label: lang.assetManagerDashboard.macroOverviewOptions.negative,\n value: 2\n },\n {\n label: lang.assetManagerDashboard.macroOverviewOptions.neutral,\n value: 3\n },\n {\n label: lang.assetManagerDashboard.macroOverviewOptions.positive,\n value: 4\n },\n {\n label: lang.assetManagerDashboard.macroOverviewOptions.veryPositive,\n value: 5\n }\n];\n","import { AifBenchmarksAction, AifBenchmarksState } from \"./types\";\n\nconst SET_AIF_BENCHMAKRS_VISIBILITY = \"SET_AIF_BENCHMAKRS_VISIBILITY\";\n\nexport const setAifBenchmarksVisibility = (\n value: boolean\n): AifBenchmarksAction => ({\n type: SET_AIF_BENCHMAKRS_VISIBILITY,\n payload: { value }\n});\n\nexport default (\n state: AifBenchmarksState = {\n isVisible: true\n },\n { type, payload }: AifBenchmarksAction\n) => {\n switch (type) {\n case SET_AIF_BENCHMAKRS_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value\n };\n default:\n return state;\n }\n};\n","import { EsgSurveyInfoModalAction, EsgSurveyInfoModalState } from \"./types\";\n\nconst SET_ESG_SURVEY_INFO_MODAL_VISIBILITY =\n \"SET_ESG_SURVEY_INFO_MODAL_VISIBILITY\";\n\nexport const setEsgSurveyInfoModalVisibility = (\n value: boolean,\n path?: string\n): EsgSurveyInfoModalAction => ({\n type: SET_ESG_SURVEY_INFO_MODAL_VISIBILITY,\n payload: { value, path },\n});\n\nexport default (\n state: EsgSurveyInfoModalState = {\n isVisible: false,\n path: null,\n },\n { type, payload }: EsgSurveyInfoModalAction\n) => {\n switch (type) {\n case SET_ESG_SURVEY_INFO_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value,\n path: payload.path,\n };\n default:\n return state;\n }\n};\n","import {\n SurveySubmissionModalAction,\n SurveySubmissionModalState,\n} from \"./types\";\nconst SET_SURVEY_SUBMISSION_MODAL_VISIBILITY =\n \"SET_SURVEY_SUBMISSION_MODAL_VISIBILITY\";\n\nexport const setSurveySubmissionModalVisibility = (\n value: boolean\n): SurveySubmissionModalAction => ({\n type: SET_SURVEY_SUBMISSION_MODAL_VISIBILITY,\n payload: { value },\n});\n\nexport default (\n state: SurveySubmissionModalState = {\n isVisible: false,\n },\n { type, payload }: SurveySubmissionModalAction\n) => {\n switch (type) {\n case SET_SURVEY_SUBMISSION_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value,\n };\n default:\n return state;\n }\n};\n","import { RemoveFundKeyFactsModalAction, RemoveFundKeyFactsModalState, } from \"./types\";\n\nconst SET_REMOVE_FUND_KEY_FACTS_MODAL_VISIBILITY = \"SET_REMOVE_FUND_KEY_FACTS_MODAL_VISIBILITY\";\n\nexport const setRemoveFundKeyFactsModalVisibility = (\n value: boolean,\n values?: any,\n item?: any,\n sectionNumber?: Number,\n): RemoveFundKeyFactsModalAction => ({\n type: SET_REMOVE_FUND_KEY_FACTS_MODAL_VISIBILITY,\n payload: { value, values, item, sectionNumber }\n});\n\nexport default (\n state: RemoveFundKeyFactsModalState = {\n isVisible: false,\n values: null,\n item: null,\n sectionNumber: null,\n },\n { type, payload }: RemoveFundKeyFactsModalAction\n) => {\n switch (type) {\n case SET_REMOVE_FUND_KEY_FACTS_MODAL_VISIBILITY:\n return {\n ...state,\n isVisible: payload.value,\n item: payload.item,\n sectionNumber: payload.sectionNumber,\n values: payload.values,\n };\n default:\n return state;\n }\n};\n","import { PerformanceModalAction, PerformanceModalState } from \"./types\";\r\n\r\nconst SET_PERFORMANCE_ID = \"SET_PERFORMANCE_ID\";\r\n\r\nexport const setPerformanceId = (id: number): PerformanceModalAction => ({\r\n type: SET_PERFORMANCE_ID,\r\n payload: { id }\r\n});\r\n\r\nexport default (\r\n state: PerformanceModalState = {\r\n id: null\r\n },\r\n { type, payload }: PerformanceModalAction\r\n) => {\r\n switch (type) {\r\n case SET_PERFORMANCE_ID:\r\n return {\r\n ...state,\r\n id: payload.id\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import \"aos/dist/aos.css\";\nimport \"./styles/_picky.scss\";\nimport \"./styles/_forms.scss\";\nimport \"./styles/_buttons.scss\";\nimport \"./styles/_icons.scss\";\nimport \"./styles/_tabs.scss\";\nimport \"./styles/_table.scss\";\nimport \"./styles/_tooltips.scss\";\nimport \"./styles/_print.scss\";\nimport \"./styles/_slick.scss\";\nimport \"./styles/_grid.scss\";\nimport \"./index.scss\";\n\nimport createStore, { history } from \"./redux\";\n\nimport AOS from \"aos\";\nimport { ConnectedRouter } from \"connected-react-router\";\nimport Highcharts from \"highcharts\";\nimport { Provider } from \"react-redux\";\nimport React, { lazy, Suspense } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { getChartsLang } from \"./utils/charts\";\nimport { lang } from \"./lang/lang\";\nimport objectFitImages from \"object-fit-images\";\nimport { setCurrentLang } from \"./redux/ui/app\";\nimport AppLink from \"./components/common/appLink\";\nimport LoadingIndicator from \"./components/common/loadingIndicator\";\n\nconst AppLazy = lazy(() => import(\"./app\"));\nconst store = createStore();\n\n// Enable animations\nAOS.init({\n duration: 700,\n offset: 60,\n});\n\n// Fix object-fit for IE\nobjectFitImages();\n\n// Set current language\nif (window.location.pathname.indexOf(\"/en\") !== -1) {\n lang.setLanguage(\"en\");\n store.dispatch(setCurrentLang(\"en\"));\n} else {\n lang.setLanguage(\"de\");\n store.dispatch(setCurrentLang(\"de\"));\n}\n\n// Set language in charts\nHighcharts.setOptions({ lang: { ...getChartsLang()[lang.getLanguage()] } });\n\nconst rootElement = document.getElementById(\"root\");\n\nReactDOM.render(\n \n \n \n }>\n \n \n \n ,\n rootElement\n);\n"],"sourceRoot":""}