{"version":3,"sources":["modules/common/GraphQL/utils.tsx","shared/hooks/useApi.ts","shared/hooks/useFetch.ts","selectors/common.js","shared/constants/orderTypes.js","modules/common/SummaryCard/HeadSquare/HeadSquare.tsx","modules/common/SummaryCard/SummaryCard.jsx","modules/common/SummaryCard/SummaryCardBusinessCard/SummaryCardBusinessCard.jsx","modules/common/SummaryCard/SummaryCardDocuments/SummaryCardDocuments.jsx","modules/common/SummaryCard/SummaryCardLineChart/SummaryCardLineChart.jsx","shared/constants/moduleTypes.js","modules/common/App/App.jsx","services/navigator/index.ts","modules/common/Navbar/hooks/useNavigator.tsx","modules/common/Navbar/Navbar.jsx","modules/common/Navbar/hooks/useCre.ts","modules/common/Navbar/hooks/useFunds.ts","modules/common/Navbar/Subnavigation.tsx","modules/common/Navbar/Title.jsx","modules/common/Modals/CreditSphereInvitationModal.tsx","shared/hoc/PrivateRoute/PrivateRoute.js","shared/constants/creditReview/creditReviewInitialSubscription.ts","shared/constants/creditSphere/creditSphereInitialSubscription.ts","modules/shop/shared/functions/getShopProductValues/getShopProductValues.js","modules/shop/components/ShopToolbar.jsx","modules/shop/components/ShopProduct/ShopProductActivationModal.jsx","modules/shop/components/ShopProduct/ShopProductCancellationModal.jsx","modules/shop/components/ShopSelectionList/ShopSelectionListActions.jsx","modules/shop/components/ShopSelectionList/ShopSelectionList.jsx","modules/shop/components/ShopFavorites.jsx","modules/shop/components/ShopSortSelect/ShopSortSelect.jsx","shared/styles/selectFilterStyles/selectFilterStyles.js","shared/styles/smallSelectStyles/smallSelectStyles.js","modules/shop/shared/constants/shopProductFilters.js","modules/shop/components/ShopFilters/ShopFilters.jsx","modules/shop/shared/constants/ShopProductDocumentTypes.ts","modules/shop/components/ShopTermsAndConditions.tsx","modules/shop/components/ShopCheckoutForm.jsx","modules/shop/components/ShopBasket.jsx","assets/icons/entities.svg","modules/shop/components/ShopPurchases.jsx","modules/shop/scenes/Shop.jsx","modules/events/store/eventsActions.ts","modules/events/constants/eventsLocations.ts","modules/events/components/EventsCreationPanel/EventEdit/EventEditSchema.ts","modules/events/components/EventsDocumentsControl/EventsDocumentsUpload.tsx","modules/events/components/EventsDocumentsControl/EventsDocumentsModal.tsx","modules/events/components/EventsDocumentsControl/EventsDocumentsControl.tsx","modules/events/components/FieldControl.tsx","modules/events/components/FormGenerator.tsx","modules/events/components/EventsCreationPanel/EventEdit/EventEditForm.tsx","modules/events/components/EventsCreationPanel/EventEdit/EventEdit.tsx","modules/events/constants/eventsUpdate.ts","shared/functions/getSelectedItems.ts","modules/events/components/EventsActionButton.tsx","modules/events/components/EventsProductDetails/EventsProductDetails.tsx","modules/events/components/EventsProduct/EventsProduct.tsx","modules/events/components/EventsCreationPanel/EventPreview.tsx","modules/events/scenes/EventPanelCreate.tsx","modules/events/components/EventsSelectionList.tsx","shared/constants/portfolioUploadQuery.js","modules/common/Modals/PortfolioUpload/UploadSteps/PortfolioUploadSteps.styled.ts","assets/icons/funds.svg","modules/common/PortfolioManager/types.tsx","modules/common/Modals/PortfolioUpload/constants.ts","modules/common/Modals/PortfolioUpload/UploadSteps/PortfolioUploadFirstStep.tsx","modules/common/Modals/PortfolioUpload/UploadSteps/PortfolioUploadSecondStep.tsx","modules/common/Modals/PortfolioUpload/services/PortfolioUploadServices.ts","modules/common/Modals/PortfolioUpload/OldPortfolioUploadModal.tsx","modules/common/Modals/PortfolioUpload/PortfolioUploadModal.tsx","shared/mappings/artifactIdTypeToRatingType.ts","modules/common/PortfolioManager/utils.tsx","modules/common/PortfolioManager/PortfolioManager.tsx","shared/constants/eventFiltersTypes.ts","modules/common/PortfolioManager/Portfolio/components/ScoreLock.tsx","modules/common/PortfolioManager/Portfolio/components/EntityScore.tsx","modules/common/PortfolioManager/Portfolio/components/DatatableEntityFilters.tsx","modules/common/PortfolioManager/Portfolio/services/filtersService.ts","modules/common/PortfolioManager/Portfolio/components/DatatableChipFilters.tsx","modules/common/PortfolioManager/Portfolio/PortfolioEntities.tsx","shared/constants/titleByEventFilter.js","modules/common/PortfolioManager/Portfolio/PortfolioEvents.tsx","modules/common/PortfolioManager/Portfolio/components/MaturityDateFilter.tsx","modules/common/PortfolioManager/Portfolio/components/DatatableInstrumentsFilters.tsx","modules/common/PortfolioManager/Portfolio/PortfolioInstruments.tsx","modules/common/PortfolioManager/Portfolio/PortfolioRatingNews.tsx","modules/common/PortfolioManager/Portfolio/PortfolioResearch.tsx","modules/common/PortfolioManager/Portfolio/PortfolioSummaryTab/PortfolioSummary.styled.ts","modules/common/PortfolioManager/Portfolio/PortfolioSummaryTab/ItemsWidget.tsx","modules/common/PortfolioManager/Portfolio/PortfolioSummaryTab/LastAddedWidget.tsx","modules/common/PortfolioManager/Portfolio/PortfolioSummaryTab/PortfolioNewsWidget.tsx","modules/common/PortfolioManager/Portfolio/PortfolioSummaryTab/PortfolioSummary.tsx","modules/common/PortfolioManager/Portfolio/components/UploadStatus.tsx","modules/common/PortfolioManager/Portfolio/PortfolioUploads.tsx","modules/common/PortfolioManager/Portfolio/components/DatatableFundsFilters.tsx","modules/common/PortfolioManager/Portfolio/PortfolioFunds.tsx","modules/shop/shared/constants/shopSubscriptionTypes.js","shared/styles/errorAutocompleteStyles/errorAutocompleteStyles.js","modules/shop/shared/validations/matchFileFormat.js","modules/shop/shared/state/documentsUploader.js","modules/shop/components/ShopProductDocumentsModal.jsx","modules/shop/components/ShopProductSourceModal.jsx","modules/shop/components/ShopPanelProductCreator.jsx","modules/shop/components/ShopPanelPackageCreator.jsx","modules/shop/scenes/ShopPanel/ShopPanelCreator.jsx","assets/icons/arrow-left.svg","modules/events/components/EventsSortSelect/EventsSortSelect.tsx","modules/events/constants/eventsFilters.ts","modules/events/components/EventsFilters/EventsFilters.tsx","modules/events/scenes/Events.tsx","modules/common/RestrictedSubscriptionRatings/Modals/UserRatingStatusLog.tsx","modules/common/RestrictedSubscriptionRatings/components/RatingStatusIndicator.tsx","modules/common/RestrictedSubscriptionRatings/Modals/styled.ts","modules/common/RestrictedSubscriptionRatings/Modals/AssignUser.tsx","routes.ts","modules/common/PortfolioManager/Portfolio/Portfolio.tsx","modules/shop/scenes/ShopPanel/ShopPanelProductList.jsx","modules/shop/scenes/ShopPanel/ShopPanelEdit.jsx","modules/events/scenes/EventPanelView.tsx","modules/common/RestrictedSubscriptionRatings/RatingUsersList.tsx","modules/common/AuthenticatedApp/AuthenticatedApp.jsx","modules/common/UnauthenticatedApp/UnauthenticatedApp.jsx","shared/constants/news/emailNotificationsTypes.js","modules/common/NewsCentre/EmailNotifications.jsx","modules/common/NewsCentre/NewsFeedSettings.jsx","modules/common/NewsFeed.tsx","modules/common/RequestButton.jsx","modules/common/RequestEsgButton.jsx","modules/common/Search/Search.jsx","modules/common/Search/SearchFiltersModal.jsx","modules/common/SearchBar/SearchBar.jsx","modules/creditRating/CreditRatingEntitiesFiltersModal.jsx","shared/types/score.ts","shared/constants/portfolio/portfolioItemIdTypes.ts","shared/constants/esg/dedicatedPortfoliosLabels.ts","modules/common/Table/EntitiesTable/useEntitiesTableColumns.tsx","modules/common/Table/EntitiesTable/EntitiesTable.jsx","modules/common/Table/InstrumentsTable/InstrumentsTable.jsx","modules/common/Table/InvestorRelationsTable/InvestorRelationsTable.tsx","ui/ViewPeerGroup/ViewPeerGroup.jsx","ui/ViewCountries/ViewCountriesModal.jsx","ui/ViewIndustries/ViewIndustriesModal.jsx","modules/common/Modals/ChangePasswordModal.jsx","modules/common/Modals/EditProfileModal.jsx","shared/constants/globalConstants.js","modules/common/Modals/InvestorRelationsModal.jsx","modules/common/Modals/RequestEsgScoreModal.jsx","modules/common/Modals/ConfirmModal.tsx","ui/ActionsButton/ActionsButton.tsx","ui/Alert/Alert.jsx","ui/ArtifactCard/ArtifactCard.jsx","ui/Artifacts/Artifacts.jsx","ui/ArtifactsNews/ArtifactsNews.jsx","ui/BlurWrapper/BlurWrapper.jsx","ui/Breadcrumbs/DynamicBreadcrumbs/DynamicBreadcrumbs.jsx","shared/constants/regions.ts","shared/constants/businessLines.js","breadcrumbsRoutes.ts","ui/Breadcrumbs/Breadcrumbs.jsx","ui/CollapseCard/CollapseCard.jsx","ui/ConditionalWrapper/ConditionalWrapper.jsx","ui/ConfidentialAlert/ConfidentialAlert.jsx","ui/ContactBox/ContactBox.jsx","ui/CoverageWidget/CoverageWidget.tsx","ui/CustomTooltip/CustomTooltip.jsx","ui/DistributionBar/DistributionBar.tsx","ui/DialogTitleWithClose/DialogTitleWithClose.tsx","ui/EmptyDistributionBar/EmptyDistributionBar.tsx","ui/Documents/Documents.jsx","ui/FileUploader/FileUploader.jsx","ui/FileUploader/FileUploaderInput.jsx","assets/icons/linkedin.svg","ui/FlagsList/FlagsList.jsx","assets/icons/file-contract-solid.svg","ui/Footer/ContactUsModal/ContactUsModal.jsx","ui/Footer/PrivacyPolicyModal/PrivacyPolicyModal.jsx","ui/Footer/SiteNoticeModal/SiteNoticeModal.jsx","ui/Footer/TermsOfUseModal/TermsOfUseModal.jsx","ui/Footer/Footer.jsx","ui/GroupedSelect/GroupedSelect.jsx","ui/InfoCard/InfoCard.jsx","ui/InfoTooltip/InfoTooltip.jsx","ui/LinkText/LinkText.jsx","ui/Menu/MenuItem/MenuItem.jsx","ui/Menu/MenuModule/MenuModule.tsx","ui/Menu/Menu.jsx","ui/NewsCard/NewsCard.jsx","ui/OnMountScroller/OnMountScroller.jsx","ui/PageTitle/PageTitle.jsx","ui/Pagination/Pagination.jsx","ui/PanelTitle/PanelTitle.jsx","ui/PeopleList/Item/Item.jsx","ui/PeopleList/PeopleList.jsx","ui/PreviewPanel/PreviewPanel.jsx","ui/ProfileInfo/ProfileInfo.jsx","ui/ProfileCard/ProfileCard.jsx","ui/RangeSlider/RangeSlider.jsx","ui/RatingScale/RatingScale.jsx","ui/ScoreChangeIndicator/ScoreChangeIndicator.tsx","ui/ScrollTop/ScrollTop.jsx","ui/SearchBreadcrumb/SearchBreadcrumb.jsx","ui/SelectWithSearch/SelectWithSearch.jsx","ui/SimpleDataList/SimpleDataList.jsx","ui/SnackbarNotifications/SnackbarNotifications.jsx","ui/TabsPanel/TabsPanel.jsx","ui/TabPanel/TabPanel.jsx","ui/Tags/Tags.jsx","ui/TextEditor/TextEditor.jsx","ui/Title/Title.tsx","ui/Triangle/Triangle.jsx","ui/Datatable/CustomToolbar/CustomToolbar.tsx","ui/Datatable/Datatable.styled.ts","ui/Datatable/Datatable.tsx","ui/DatatablePreview/DatatablePreview.styled.ts","ui/DatatablePreview/DatatablePreview.js","ui/BlurredContactAdvisorBox/BlurredContactAdvisorBox.jsx","ui/BlurredContactAdvisorBox/ContactAdvisor.jsx","ui/RangeSliderExtended/RangeSliderExtended.tsx","ui/FieldRange/FieldRange.tsx","ui/StyledSwitch/StyledSwitch.tsx","ui/Blur/Blur.tsx","modules/common/RestrictedSubscriptionRatings/services/rsrService.ts","ui/ScoreWidget/ScoreWidget.js","shared/constants/portfolioTypes.js","modules/shop/services/shopService.js","store/login/loginAction.js","modules/shop/selectors/shopSelectors.js","shared/mappings/summaryTab/summaryCardLevelsMapping.js","shared/mappings/creditRatingScalesMapping.js","shared/types/ratingStatus.ts","modules/common/Modals/DocumentsModal.jsx","modules/shop/shared/constants/shopProductsCategories.ts","modules/creditReview/CreditReviewTab.jsx","modules/common/Questionnaire/QuestionnaireStepper.jsx","modules/common/Questionnaire/QuestionnaireNextButton.jsx","modules/common/Questionnaire/QuestionnairePreviousButton.jsx","modules/common/Questionnaire/QuestionnaireStepHeader.jsx","modules/common/Questionnaire/formFields/TextField.jsx","modules/common/Questionnaire/QuestionnaireContext.js","modules/common/Questionnaire/formFields/ButtonsWithOther.jsx","modules/common/Questionnaire/formFields/Buttons.jsx","modules/common/Questionnaire/formFields/RadioCard/RadioCardSubPage.jsx","modules/common/Questionnaire/formFields/RadioCard/RadioCard.jsx","modules/common/Questionnaire/formFields/Checkboxes.jsx","modules/common/Questionnaire/QuestionnaireFormFieldsBuilder.jsx","modules/common/Questionnaire/QuestionnaireIntro.jsx","modules/common/Questionnaire/QuestionnaireForm.jsx","modules/common/Questionnaire/Questionnaire.jsx","assets/images/sdg-logo.svg","modules/ESG/ESGLearnMoreBar/ESGLearnMoreBar.styled.ts","modules/ESG/Modals/ESGLearnMoreModal/ESGLearnMoreModal.styled.ts","modules/ESG/Modals/ESGLearnMoreModal/ESGLearnMoreModal.tsx","modules/ESG/ESGLearnMoreBar/ESGLearnMoreBar.tsx","modules/ESG/ESGMaterialityMap/ESGMaterialityMap.styled.ts","modules/ESG/ESGMaterialityMap/ESGMaterialityMap.tsx","assets/images/sdg-categories.svg","assets/icons/info-outlined.svg","modules/ESG/ESGRelevanceMapping/ESGRelevanceMapping.styled.ts","modules/ESG/ESGRelevanceMapping/ESGRelevanceMapping.tsx","modules/ESG/ESG.tsx","shared/hooks/usePrevious/usePrevious.js","shared/hooks/useArtifacts/useArtifacts.js","shared/hooks/useRegions/useRegions.js","shared/hooks/useLoginForm/useLoginForm.js","shared/hooks/useTable/useTable.js","shared/hooks/useContact/useContact.js","shared/hooks/useNotifications/useNotifications.js","shared/hooks/useGetNotifications/useGetNotifications.ts","shared/hooks/useContactAdvisor/useContactAdvisor.js","shared/hooks/useReportPage/useReportPage.js","shared/hooks/useAdminPage/useAdminPage.js","shared/hooks/useQuestionnaire/useQuestionnaire.js","shared/hooks/useViewDocuments/useViewDocuments.jsx","shared/hooks/useHubSpot.jsx","shared/hooks/useModal.ts","shared/hooks/useSelectedTableRows/useSelectedTableRows.ts","shared/hooks/useMenuBookmarks/useMenuBookmarks.ts","shared/hooks/useGetCREProjects/useGetCREProjects.ts","shared/hooks/useGetFundsAccess/useGetFundsAccess.ts","shared/hooks/useContactSales/useContactSales.ts","shared/hooks/useRSR/useRSR.tsx","shared/hooks/useGeneralServices/useGeneralServices.tsx","assets/pdfs/esg-imp-demo.pdf","shared/hooks/useSnackbar.tsx","assets/pdfs/privacy-policy.pdf","assets/pdfs/terms-of-use.pdf","utils/logVersion.ts","assets/images/credit-sphere-invitation.jpg","assets/images/shakehand.png","modules/common/Modals/UpdateEntitiesModal/SearchControl.tsx","modules/common/Modals/UpdateEntitiesModal/PortfoliosSelectControl.tsx","modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal.tsx","assets/icons/weight.svg","modules/ESG/ESGDistribution/ESGDistribution.jsx","shared/constants/ESGImpactTypes.js","shared/constants/ESGImpactLabels.js","modules/ESG/ESGExternalCostsComparison/ESGExternalCostsComparison.jsx","modules/ESG/ESGImpactDistribution.jsx","modules/ESG/ESGImpactIcon/ESGImpactIcon.jsx","modules/ESG/ESGImpactMap/ImpactTypeControls/ImpactTypeControls.jsx","modules/ESG/ESGImpactTable/Legend/LegendColorChip/LegendColorChip.jsx","modules/ESG/ESGImpactTable/Legend/Legend.jsx","modules/ESG/ESGImpactMap/ESGImpactMap.jsx","modules/ESG/ESGImpactScore.jsx","modules/ESG/ESGImpactTable/ESGImpactTable.jsx","shared/constants/esg/rankingScale.js","modules/ESG/ESGRanking/RectangularScale.jsx","modules/ESG/ESGRanking/CircleScale.jsx","modules/ESG/ESGRanking/RankingItem.jsx","modules/ESG/ESGRanking/ESGRanking.jsx","shared/constants/ESGScoresColors.js","modules/ESG/ESGScore/ESGScore.js","modules/ESG/ESGScoreComparison/ESGScoreComparison.jsx","modules/ESG/FlatScoreComparisonChart/FlatScoreComparisonChart.jsx","modules/ESG/ESGPortfolioUpload/PortfolioUploadESG.jsx","modules/ESG/SummaryCardRequestESG.jsx","shared/constants/esg/scoringToolSteps.ts","modules/ESG/Modals/ESGScoringToolModal.tsx","modules/ESG/Modals/ESGEntityRemovalConfirmation.tsx","modules/common/PortfolioManager/Portfolio/components/PortfolioChartLegend.tsx","modules/ESG/ESGLendingData/ESGLendingData.tsx","shared/constants/artifactTypes.js","shared/constants/ratingTypes.ts","shared/constants/summaryTab/generalInformation.js","shared/constants/summaryTab/levels.js","shared/constants/summaryTab/generalInformationLabels.js","shared/constants/summaryTab/additionalInformationLabels.js","shared/constants/summaryTab/endorsementCreditRating.js","shared/constants/summaryTab/summaryTabCreditRatingNamesPriorites.js","services/esg/distributionService.ts","services/esg/impactScoreService.ts","services/esg/peergroupComparisonService.ts","services/esg/impactService.ts","services/esg/scoreOverviewService.ts","services/esg/externalCostsComparisonService.ts","services/esg/impactOverviewService.ts","services/esg/rankingService.ts","services/esg/summaryTabService.ts","services/esg/uploadCustomCompanies.ts","shared/constants/contractStates.js","services/esg/fetchContractData.ts","services/esg/scoringToolService.ts","modules/ESGSentiment/services/esgSentiment.ts","modules/ESG/services/esgLendingService.ts","modules/shop/shared/constants/shopSubscriptionStatuses.ts","modules/shop/shared/constants/shopProductLines.ts","shared/types/portfolios.ts","selectors/auth.js","shared/validations/changePasswordSchema/changePasswordSchema.js","shared/validations/editProfileSchema/editProfileSchema.js","shared/validations/sharePortfolioSchema/sharePortfolioSchema.js","shared/validations/portfolioUploadSchema/portfolioUploadSchema.js","shared/validations/portfolioUploadSchema/createPortfolioSchema.js","shared/validations/portfolioUploadSchema/creditReviewCreatePortfolioSchema.js","shared/constants/creditReview/cofaceAccessTypes.js","shared/hooks/useFeatures/useFeatures.ts","modules/shop/shared/constants/shopRoles.js","modules/events/selectors/eventsSelectors.ts","modules/events/services/eventsService.ts","theme.js","modules/notificationsCentre/constants/types.ts","shared/constants/ESGImpactHexCodesMap.js","modules/notificationsCentre/constants/apiUrls/notificationsCentre.ts","modules/notificationsCentre/services/notificationsService.js","shared/constants/creditRatingRangeValues.js","ui/Modals/DisclaimerModal/DisclaimerModal.jsx","ui/Modals/MessageModal/MessageModal.jsx","ui/Modals/SharePortfolioModal/SharePortfolioModal.jsx","ui/Labels/EmptyDataLabel/EmptyDataLabel.js","ui/Labels/TilesLabel/TilesLabel.jsx","modules/notificationsCentre/constants/filters.ts","modules/notificationsCentre/constants/categories.ts","modules/notificationsCentre/utils/getUnreadIds.js","modules/notificationsCentre/store/reducer.js","store/login/loginReducer.js","store/instrument/instrumentReducer.js","store/entity/entityReducer.js","store/recentUsers/recentUsersReducer.js","store/searchResult/searchResultReducer.js","store/announcement/announcementReducer.js","store/newsFeed/newsFeedReducer.js","store/portfolio/dossierReducer.js","store/shared/sharedReducer.js","store/investor/investorReducer.js","store/creditReview/creditReviewReducer.js","modules/shop/store/shopReducer.js","modules/events/store/eventsReducer.ts","store/esg/esgReducer.ts","shared/parsers/esgCoverageToTable/esgCoverageToTableParser.ts","store/esgCoverage/esgCoverageReducer.js","store/combineReducers.js","store/notifications/notificationsReducer.js","modules/notificationsCentre/store/actions.js","modules/notificationsCentre/store/saga.js","modules/notificationsCentre/store/watchers.js","modules/shop/store/shopSaga.js","modules/shop/store/shopWatchers.js","store/instrument/instrumentSaga.js","store/instrument/instrumentWatchers.js","store/entity/entitySaga.js","store/entity/entityWatchers.js","store/login/loginSaga.js","store/login/loginWatchers.js","store/recentUsers/recentUsersSaga.js","store/recentUsers/recentUsersWatchers.js","store/searchResult/searchResultSaga.js","store/searchResult/searchResultWatchers.js","store/announcement/announcementSaga.js","store/announcement/announcementWatchers.js","store/newsFeed/newsFeedSaga.js","store/newsFeed/newsFeedWatchers.js","store/portfolio/dossierSaga.js","store/portfolio/dossierWatchers.js","services/shared/industries.js","services/shared/ratingCoverage.js","services/shared/esgCoverage.js","store/shared/industries/industriesSaga.js","store/shared/relatedEntities/relatedEntitiesSaga.js","store/shared/ratingCoverage/ratingCoverageSaga.js","store/shared/esgCoverage/esgCoverageSaga.js","store/shared/regions/regionsSaga.js","store/shared/questionnaire/questionnaireSaga.js","store/shared/sharedWatchers.js","store/investor/investorSaga.js","store/investor/investorWatchers.js","store/creditReview/creditReviewSaga.js","store/creditReview/creditReviewWatchers.js","modules/events/store/eventsSaga.ts","modules/events/store/eventsWatchers.ts","store/esg/esgSaga.ts","store/esg/esgWatchers.ts","store/esgCoverage/esgCoverageSaga.js","store/esgCoverage/esgCoverageWatchers.js","store/startSagas.js","utils/isOfType/isOfType.ts","store/shared/creditReviewLevels/creditReviewLevelsEpic.ts","store/shared/creditReviewSpecs/creditReviewSpecsEpic.ts","store/rootEpic.js","store/store.js","store/configureStore.js","shared/constants/dateFormat.js","services/dossier/dossierService.js","store/localStorage.ts","serviceWorker.js","apollo.ts","i18n.ts","translations/en.js","modules/notificationsCentre/translations/en.js","modules/shop/translations/en.js","translations/de.js","modules/notificationsCentre/translations/de.js","modules/shop/translations/de.js","index.tsx","shared/constants/news/newsSettings.js","shared/styles/groupedAutocompleteStyles/groupedAutocompleteStyles.js","shared/constants/environmentTypes.ts","store/creditReview/creditReviewActions.js","shared/constants/outlookTypes.js","shared/errors/CreditRatingError.js","shared/errors/ErrorBoundary.jsx","shared/constants/contactBox.js","shared/mappings/activityLabels.ts","shared/constants/permissionsTypes.js","services/export/exportService.ts","ui/Loader/Loader.jsx","services/analysts/analystsService.js","services/contactBox/contactBoxService.js","services/countries/countries.js","services/methodologies/methodologiesService.js","services/mostOrderedItems/mostOrderedItemsService.js","shared/constants/news/defaultPreferences.js","services/news/newsService.js","services/instrument/instrumentService.js","services/entity/entityService.js","services/login/loginService.js","services/login/logoutService.js","shared/constants/moduleRoutes.js","services/login/permissionsService.js","services/portfolio/portfolioService.js","services/profile/editProfileService.js","services/profile/fetchJobFunctions.js","services/recentUsers/recentUsersService.js","services/user/getLoggedUserService.js","services/user/userImageService.js","services/watchlist/watchlistService.js","services/investor/investorService.js","services/creditReview/creditReviewService.ts","services/documents/documentsService.js","services/summaryTab/summaryTabService.js","services/newsCentre/newsCentreService.js","services/peersNames/peersNamesService.js","services/export/index.js","modules/shop/components/ShopProductsModal.jsx","modules/shop/components/ShopRelatedProductsModal.tsx","shared/constants/news/newsletterFrequencies.js","selectors/entity.js","ui/Charts/BarChart/BarChart.jsx","ui/Boxplot/Boxplot.jsx","ui/Charts/BoxPlot/BoxPlot.jsx","ui/Charts/BoxPlot/BoxPlotChart.jsx","ui/Charts/DoughnutChart/DoughnutChartSvg.js","ui/Charts/DoughnutChart/DoughnutChart.jsx","ui/Charts/GougeChart/GougeChartSvg.js","ui/Charts/GougeChart/GougeChart.jsx","ui/Charts/PyramidChart/PyramidChart.jsx","shared/styles/summaryCard/summaryCardStyles.js","modules/shop/shared/constants/shopViews.js","shared/constants/titleByRatingType.js","shared/constants/searchCategories.js","shared/constants/exportModes.ts","shared/functions/fetchApi/fetchApi.js","store/shared/lastVisited/lastVisitedActions.js","store/announcement/announcementActions.js","store/recentUsers/recentUsersActions.js","store/shared/industries/industriesActions.js","store/shared/relatedEntities/relatedEntitiesActions.js","store/shared/ratingCoverage/ratingCoverageAction.js","store/shared/esgCoverage/esgCoverageAction.js","store/shared/regions/regionsAction.js","shared/constants/portfolio/portfolioItemTypes.ts","shared/constants/menuItems.tsx","shared/parsers/activities/activitiesParser.js","shared/parsers/instrumentEntity/instrumentEntity.js","shared/parsers/login/loginParser.js","shared/parsers/login/mergePermissionsParser.js","shared/parsers/login/permissionsParser.js","shared/parsers/login/userParser.js","shared/parsers/login/validateRoles.js","shared/parsers/profile/jobFunctionsParser.js","shared/parsers/entitiesToTable/entitiesToTableParser.js","shared/parsers/instrumentsToTable/instrumentsToTableParser.js","shared/parsers/portfoliosToTable/creditRatingPortfoliosToTableParser.js","shared/parsers/portfoliosToTable/creditReviewPortfoliosToTableParser.js","shared/parsers/portfoliosToTable/esgPortfoliosToTableParser.js","shared/parsers/creditReviewToTable/creditReviewToTableParser.js","shared/parsers/esgImpactToTable/esgImpactToTableParser.js","shared/parsers/esgSentimentToTable/esgSentimentToTableParser.ts","shared/parsers/portfoliosToTable/portfolioItemsToTableParser.js","shared/parsers/rating/ratingCoveragePercentagesParser.js","shared/parsers/rating/ratingRequestParser.js","shared/parsers/rating/ratingTypeParser.js","shared/parsers/rating/demandTypeParser.js","shared/parsers/recentUsers/recentUsersParser.js","shared/parsers/contactParser/contactParser.js","shared/parsers/industry/industryTypeParser.js","shared/parsers/industry/flattenIndustries.js","shared/parsers/industry/industriesParser.js","shared/parsers/selectedItemsToProducts/selectedItemsToProductsParser.js","shared/parsers/regions/regionsParser.js","shared/parsers/preferences/preferencesParser.js","shared/parsers/investorsToTable/investorRequestsToTableParser.js","shared/parsers/industry/entitiesIndustriesParser.js","shared/parsers/relatedEntities/relatedEntitiesParser.js","shared/parsers/industryEntities/industryEntitiesParser.js","shared/parsers/searchFilters/searchFiltersParser.js","shared/parsers/summaryCard/summaryCardCreditRatingParser.js","shared/parsers/summaryCard/summaryCardHistoryParser.js","shared/parsers/summaryCard/summaryCardDocumentsParser.js","shared/parsers/documentsParser.js","services/esg/fetchSentimentSummary.ts","shared/hooks/usePortfolioModals/usePortfolioModals.ts","shared/hooks/useCofaceContract/useCofaceContract.js","shared/constants/creditReview/creditReviewRequestTooltips.js","modules/shop/shared/parsers/shopPermissionsParser.js","modules/shop/shared/parsers/validateShopPermissions.js","store/esgCoverage/esgCoverageActions.js","store/investor/investorActions.js","store/shared/questionnaire/questionnaireActions.js","store/esg/esgActions.ts","modules/creditReview/CreditReview.jsx","shared/parsers/creditReviewDocumentsParser.ts","shared/constants/creditReview/creditReviewLevelTypes.js","shared/constants/creditReview/dedicatedPortfoliosLabels.ts","modules/creditReview/CreditReviewEntities/CreditReviewEntitiesFilterModal.tsx","modules/creditReview/CreditReviewEntities/CreditReviewEntities.jsx","modules/creditReview/CreditReviewLevelsPopover/CreditReviewLevelsPopover.jsx","modules/creditReview/PortfolioUploadCreditReview.jsx","modules/creditReview/ScoreHistoryWidget.jsx","modules/creditReview/SummaryCardRequestCreditReview.jsx","ui/ColorChips/LegendColorChip.tsx","store/shared/creditReviewLevels/creditReviewLevelsActions.ts","store/shared/creditReviewSpecs/creditReviewSpecsActions.ts","shared/constants/artifactIdType.ts","modules/shop/store/shopActions.js","shared/constants/news/emailFrequencies.js","services/download/downloadAsyncService.ts","shared/parsers/esg/impactScoreParser.js","shared/parsers/esg/regionImpactToMapParser.js","shared/parsers/esg/regionImpactToTableParser.js","shared/parsers/esg/industryImpactToTableParser.js","shared/parsers/esg/scoreOverviewParser.js","shared/constants/creditRating/creditRatingAlerts.js","shared/constants/portfolio/portfolioErrorTypes.ts","store/notifications/notificationsActions.js","modules/common/Modals/CreateNewPortfolioModal.tsx","shared/constants/purchaseTypes.js","modules/common/SummaryCard/Request/generalInformationMock.js","modules/events/constants/eventsCategories.ts","store/entity/entityActions.js","modules/shop/components/ShopProduct/ShopProductIndicator.jsx","modules/shop/shared/constants/shopProductUnits.js","modules/shop/components/ShopProduct/ShopProductDetails.jsx","modules/shop/components/ShopProduct/ShopProduct.jsx","shared/constants/licencesTypes.js","shared/constants/errorPages.ts","services/orders/index.js","shared/mappings/industries/industriesMapping.js","modules/common/SummaryCard/Request/RequestContent.jsx","modules/creditRating/CompanyCreditRating.jsx","modules/creditRating/PortfolioUploadCreditRating.jsx","modules/creditRating/SummaryCardRequestCreditRating.jsx","modules/creditRating/Documents/Documents.styled.ts","modules/creditRating/Documents/Documents.tsx","shared/constants/picturesPath.js","modules/creditReview/CreditReviewModals/RequestConfirmationModal.jsx","modules/creditReview/CreditReviewModals/InitialSubscriptionInvitationModal.tsx","shared/hoc/RenderElement/RenderElement.jsx","shared/constants/toggleMode.js","modules/ESG/parsers.ts","ui/Buttons/BackButton/BackButton.jsx","ui/Buttons/DownloadButton/DownloadButton.jsx","ui/Buttons/LinkButton/LinkButton.tsx","ui/Buttons/RoundButton/RoundButton.jsx","ui/Buttons/ChipButton/ChipButton.tsx","services/dossier/index.js","services/userQualification/userQualificationService.js","shared/hooks/useQuery/useQuery.ts","services/coveredBonds/coveredBondsServices.ts","shared/functions/entityPortfolioModuleData.tsx","services/download/downloadServiceWithRetries.js","modules/shop/components/ShopProduct/ShopProductFreeSubscriptionModal.jsx","modules/shop/shared/constants/shopProductsSortOptions.js","shared/hooks/useConfirmedRequest/useConfirmedRequest.js","shared/constants/creditRatingStatuses.js","modules/common/RestrictedSubscriptionRatings/Modals/ConfirmModal.tsx","services/orders/ordersService.js","shared/hooks/useAccess/useAccess.ts","assets/icons/unlock.svg","shared/styles/OrangeRatingChip/OrangeRatingChip.ts","shared/constants/rolesTypes.js","scenes/Analysts/Analysts.jsx","shared/mappings/annoucementTypesToProductLinesMapping.js","scenes/Announcement/Announcement.jsx","scenes/ESGCoverage/ESGCoverage.jsx","ui/Company/CompanyBasicData/CompanyBasicData.jsx","ui/Company/CompanyHeader/CompanyHeader.jsx","ui/Company/CompanyPanel/CompanyPanel.jsx","assets/icons/arrow-up-right.svg","ui/Company/CompanyTabs/CompanyTabs.jsx","scenes/Instrument/Tabs/Tabs.jsx","scenes/Instrument/InstrumentContent.jsx","scenes/Instrument/Instrument.jsx","assets/icons/message-growth.svg","modules/ESGSentiment/components/ESGScoresOverTime/ESGScoresOverTime.styled.ts","modules/ESGSentiment/components/ESGScoresOverTime/ESGScoresOverTime.loader.tsx","modules/ESGSentiment/components/ESGScoresOverTime/ESGScoresOverTime.tsx","modules/ESGSentiment/components/ScoreBreakdownWidget/ScoreBreakdownWidget.styled.ts","modules/ESGSentiment/components/AttentionBuzz/AttentionBuzz.tsx","modules/ESGSentiment/components/ScoreBreakdownWidget/ScoreBreakdownWidget.tsx","assets/icons/x.svg","assets/icons/chevron-left.svg","assets/icons/radio-button-off.svg","modules/ESGSentiment/components/EventSidebar/EventSidebar.styled.ts","modules/ESGSentiment/components/EventSidebar/EventSidebar.tsx","assets/icons/download.svg","modules/ESGSentiment/components/EsgEventsCard/EsgEventsCard.styled.ts","modules/ESGSentiment/components/EsgEventsCard/EsgEventsCard.tsx","modules/ESGSentiment/utils/groupColors.tsx","modules/ESGSentiment/components/ESGSentiment.styled.ts","modules/ESGSentiment/utils/renderers.tsx","modules/ESGSentiment/components/ESGEventsSection/columns.tsx","modules/ESGSentiment/components/ESGEventsSection/utils.ts","modules/ESGSentiment/components/ESGEventsSection/ESGEventsSection.tsx","modules/ESGSentiment/components/GeneralInformationWidget/GeneralInformationWidget.tsx","modules/ESGSentiment/components/ImpactReviewWidget/ImpactReviewWidget.tsx","modules/ESGSentiment/components/ESGDailyScoreSection/ESGDailyScoreSection.loader.tsx","modules/ESGSentiment/components/ESGDailyScoreSection/ESGDailyScoreSection.tsx","modules/ESGSentiment/components/PeerGroupComparison/columns.tsx","modules/ESGSentiment/components/PeerGroupComparison/PeerGroupComparison.styled.ts","modules/ESGSentiment/components/PeerGroupComparison/AttentionBuzzChart.tsx","modules/ESGSentiment/components/PeerGroupComparison/parsers.ts","modules/ESGSentiment/components/PeerGroupComparison/PeerGroupComparison.tsx","modules/ESGSentiment/components/MoreInfoModal/MoreInfoModal.styled.ts","modules/ESGSentiment/components/MoreInfoModal/MoreInfoModal.tsx","modules/ESGSentiment/components/ESGSentiment.tsx","modules/ESGSentiment/components/ESGSentimentTab.tsx","modules/ClimateStressTest/services/climateStressTest.ts","modules/ClimateStressTest/components/TransitionRisk/TransitionRisk.styled.ts","modules/ClimateStressTest/components/ClimateChangeRisk/TotalOutputLoss.tsx","modules/ClimateStressTest/components/ClimateChangeRisk/ClimateChangeRisk.styled.ts","modules/ClimateStressTest/components/ClimateChangeRisk/ValueChainInfoCard.tsx","modules/ClimateStressTest/components/ClimateChangeRisk/ValueChainDistribution.tsx","modules/ClimateStressTest/components/ClimateChangeRisk/ClimateChangeRisk.tsx","modules/ClimateStressTest/components/TransitionRisk/OutputLoss.tsx","modules/ClimateStressTest/components/TransitionRisk/CarbonIntensity.tsx","modules/ClimateStressTest/components/TransitionRisk/CarbonTaxEvolution.tsx","modules/ClimateStressTest/components/TransitionRisk/TransitionRisk.tsx","modules/ClimateStressTest/components/PhysicalRisk/PhysicalRisk.styled.ts","modules/ClimateStressTest/components/PhysicalRisk/OutputLoss.tsx","modules/ClimateStressTest/components/PhysicalRisk/CountryContribution.tsx","modules/ClimateStressTest/components/PhysicalRisk/SectorContribution.tsx","modules/ClimateStressTest/components/PhysicalRisk/PhysicalRisk.tsx","modules/ClimateStressTest/components/SummaryCardCST/SummaryCardCST.tsx","modules/ClimateStressTest/components/ClimateStressTest/ClimateStressTest.tsx","shared/state/summaryCard/summaryCardState.js","scenes/Entity/SummaryCardTab/SectionTitle.jsx","scenes/Entity/Tabs.jsx","scenes/Entity/SummaryCardTab/SummaryCardTab.jsx","shared/parsers/esg/sentimentParser.ts","scenes/Entity/EntityContent.jsx","scenes/Entity/EmptyCustomEntityContent.tsx","scenes/Entity/Entity.jsx","scenes/IssuerDashboard/IssuerDashboardHeader/IssuerDashboardHeader.jsx","scenes/IssuerDashboard/IssuerDashboardResearchWidget/IssuerDashboardResearchWidget.jsx","scenes/IssuerDashboard/IndustryWidget/IndustryWidget.jsx","scenes/IssuerDashboard/IssuerDashboardEntitiesWidget/IssuerDashboardEntitiesWidget.jsx","scenes/IssuerDashboard/IssuerDashboard.jsx","scenes/Profile/Profile.jsx","shared/parsers/esg/esgCoveragePercentagesParser.js","modules/notificationsCentre/components/NotificationsWidget.tsx","scenes/Home/HomeESGCoverage/HomeESGCoverage.jsx","scenes/Home/HomeRatingCoverage/HomeRatingCoverage.jsx","scenes/Home/HomeTrendingRatings/HomeTrendingRatings.jsx","scenes/Home/HomeRecentRatings/HomeRecentRatings.jsx","scenes/Home/HomeRecentPortfolios/HomeRecentPortfolios.jsx","scenes/Home/HomeContactBox/HomeContactBox.jsx","scenes/Home/HomeMyOrganisation/HomeMyOrganisation.jsx","scenes/Home/HomeSubscriptions/HomeSubscriptions.jsx","modules/common/Modals/HomeCoveredBondsDocumentsModal.tsx","modules/creditRating/CoveredBonds/functions.ts","scenes/Home/HomeCoveredBonds/HomeCoveredBonds.tsx","scenes/Home/Home.tsx","scenes/Login/Login.jsx","modules/notificationsCentre/components/SettingsTab.tsx","modules/notificationsCentre/components/Settings.tsx","modules/notificationsCentre/parsers/settingsParser.js","scenes/NewsCentre/NewsCentre.jsx","scenes/NotFound.tsx","scenes/ErrorPage.tsx","scenes/ServiceNotAvailable.tsx","scenes/RatingCoverage/RatingCoverage.jsx","shared/constants/ratingCoverageTabs.js","scenes/RatingCoverage/RatingCoverageIndustry/RatingCoverageIndustry.jsx","scenes/RatingCoverageRelated/RatingCoverageRelated.jsx","shared/functions/searchFilters/searchFilters.js","scenes/SearchResult/SearchResult.jsx","scenes/EntityDetails/EntityDetails.jsx","ui/GenerateReports/GenerateReportsFooter.jsx","ui/GenerateReports/GenerateReportsHeaderBig.jsx","ui/GenerateReports/GenerateReportsHeaderSection.jsx","ui/GenerateReports/GenerateReportsPage.jsx","ui/GenerateReports/GenerateReportsWrapper.jsx","scenes/GenerateReports/GenerateReportESG.jsx","modules/common/RestrictedSubscriptionRatings/const.tsx","shared/functions/validators/validateEmail.ts","modules/common/RestrictedSubscriptionRatings/Modals/AddUserRSR.tsx","modules/common/RestrictedSubscriptionRatings/UsersList.tsx","modules/common/RestrictedSubscriptionRatings/Modals/SetContractTypeModal.tsx","modules/common/RestrictedSubscriptionRatings/RatingsList.tsx","scenes/RestrictedSubscriptionRatings/RestrictedSubscriptionRatings.tsx","modules/creditRating/CoveredBonds/CoveredBondsList.tsx","scenes/CoveredBonds/CoveredBonds.tsx","scenes/CreditRatingCoverage/CreditRatingCoverage.tsx","shared/constants/tableRefreshReasonTypes.js","shared/constants/company/companyModules.js","shared/constants/company/companyTabs.js","shared/constants/company/companyAvailableRating.js","modules/events/types/eventsTypes.ts","shared/parsers/esg/peergroupComparisonParser.js","store/searchResult/searchResultActions.js","store/instrument/instrumentActions.js","shared/functions/fetchApi/DetailedError.ts","services/login/changePasswordService.js","shared/functions/makeModalsHook.ts","services/esg/requestService.ts","modules/common/SummaryCard/Request/SummaryCardLockedRating.jsx","shared/constants/summaryTab/datesLabels.js","modules/ESG/ESGScoreOverview/ESGScoreOverview.jsx","modules/ESG/ESGImpactOverview.jsx","modules/ESG/ESGEntitiesFilterModal.jsx","shared/constants/esg/esgContractStates.ts","shared/constants/errorCodes.js","shared/parsers/portfoliosToTable/climateStressTestToTableParser.ts","services/download/downloadBase64File.js","services/download/downloadService.ts","ui/Charts/HorizontalBarChart/HorizontalBarChart.jsx","modules/ESG/ESGLendingImpact/ESGLendingImpact.tsx","shared/constants/portfolioUploadSteps.js","shared/functions/changeDirection/changeDirection.js","shared/functions/continents/filterContinents.js","shared/functions/getOrganisationId/getOrganisationId.js","shared/functions/getUserId/getUserId.js","shared/functions/formatDate/formatDate.js","shared/functions/formatCurrency/formatCurrency.js","shared/functions/formatNumber/formatNumber.ts","shared/functions/generateImageUrl/generateImageUrl.js","shared/functions/generateKey/generateKey.js","shared/functions/kebabCase/kebabCase.js","shared/functions/humanize/humanize.js","shared/functions/reorderColumn/reorderColumn.js","shared/functions/sanitizedHtml/sanitizedHtml.js","shared/functions/scrollToRef/scrollToRef.js","shared/functions/toBase64/toBase64.js","shared/functions/rating/ratingRequestAvailable.js","shared/functions/rating/setRatingColor.js","shared/functions/notifications/notifications.js","shared/functions/portfolio/removeItemsFromPortfolio.js","shared/functions/portfolio/allowedForPortfolio.js","shared/functions/redirect/redirectFromHashLinks.js","shared/functions/redirect/redirectToRootAddress.js","shared/functions/company/getCompanyData.js","shared/functions/getScoreWidgetFooterColor/getScoreWidgetFooterColor.js","shared/functions/getHexColorByImpact/getHexColorByImpact.js","shared/functions/parseToCurrency/parseToCurrency.js","shared/functions/modules/findModule.js","shared/functions/performInNextCycle/performInNextCycle.js","shared/functions/getMonthsBetweenDates/getMonthsBetweenDates.js","shared/functions/transformKeysToCamelCase.js","shared/functions/getShallowObjectsArrayDifference.js","store/newsFeed/newsFeedActions.js","shared/constants/watchlistItemTypes.js","shared/hooks/useAccess/checkAccess.ts","shared/constants/disclaimer.js","modules/common/GraphQL/portfolios/mutations.ts","modules/common/GraphQL/portfolios/queries.ts","modules/common/GraphQL/portfolios/hooks.ts","modules/common/Modals/portfolioModalUtils.tsx","modules/shop/components/ShopProduct/ShopProductTrialModal.jsx","modules/common/RestrictedSubscriptionRatings/types.tsx","assets/images/esg-baner.jpg","assets/icons/info.svg","shared/constants/creditReview/cofaceContractStates.js","selectors/creditReviewSelectors.js","assets/images/credit-review-free-trial-invitation.jpg","scenes/IssuerDashboard/config.ts","modules/common/RestrictedSubscriptionRatings/Modals/SetSubscriberConfirmationModal.tsx","modules/common/RestrictedSubscriptionRatings/components/UserStatusIndicator.tsx","modules/common/RestrictedSubscriptionRatings/components/SubscriberConfirmationIndicator.tsx","assets/icons/refresh-cw.svg","assets/icons/user-plus.svg","modules/creditRating/hooks/useInstrumentsRatingRequest.tsx","utils/log/log.js","utils/apiUrl/apiUrl.js","utils/serviceUrlPrefix/serviceUrlPrefix.js","utils/files/csv.js","utils/index.js","shared/constants/ratingTrends.js","modules/common/Table/TrendIcon.jsx","modules/creditRating/hooks/useInstrumentRenderers.tsx","modules/common/Table/InstrumentsTable/InstrumentsFiltersModal.jsx","shared/constants/currencies.js","store/portfolio/dossierActions.js"],"names":["makeMutation","mutation","useMutation","mutate","variables","getResponseMessage","response","fallback","Object","values","message","Status","getErrorMessage","error","JSON","parse","useApi","token","useSelector","auth","data","dispatch","useDispatch","defaultHeaders","authorization","makeMethod","method","url","options","payload","params","errorMessage","headers","apiPrefix","disableLogout","body","stringify","queryParams","qs","skipNulls","query","init","prefixes","api","API_URL","navigator","NAVIGATOR_URL","FUNDS_URL","fetch","then","res","status","AUTH_TOKEN_EXPIRED","logoutAction","ok","blob","URL","createObjectURL","text","json","err","Error","code","statusText","get","post","put","patch","del","upload","useGet","useState","path","setPath","requestOptions","setRequestOptions","setData","loading","setLoading","setError","refetch","catch","finally","useEffect","disableAutofetch","isEqual","makeRestHook","func","useToasts","stack","title","content","usePost","getShared","shared","getAllIndustries","createSelector","industries","getRelatedIndustries","relatedIndustries","getAllIndustriesData","getESGCoverage","esgCoverage","getRegions","regions","getParsedRegions","isPending","regionsParser","getSearchableRegions","getFlattenedIndustries","flattenIndustries","getSortedFlattenedIndustries","sortBy","getSearchbleIndustries","getFilterableIndustries","flattenedIndustries","reduce","extendedIndustries","industryName","industry","find","name","push","getIndustryByName","getSortedFilterableIndustries","getCurrentIndustry","industryCode","c","ic","getSearchResultEntities","searchResult","entities","getSearchResultEntitiesByRatingType","ratingType","byRatingType","getNewsFeed","newsFeed","getNewsFeedShouldRefresh","shouldRefresh","getNewsFeedPreferences","preferences","getNewsFeedPreferencesIsPending","getSharedQuestionnaire","questionnaire","show","orderTypes","INSTRUMENT","ENTITY","SIG_ENTITY","useStyles","makeStyles","theme","root","backgroundColor","customScore","palette","custom","gray","primary","main","padding","spacing","color","textAlign","minHeight","height","flexDirection","position","slightlyDesaturatedBlue","subtitle","fontSize","white","HeadSquare","subtitleTooltip","children","classes","Box","className","display","justifyContent","alignItems","align","clsx","tooltip","tooltipClassName","head","margin","borderRight","grey","border","headSquare","latestChange","dataQuality","gridGap","dataQualityDisplay","generalInformationList","generalInformationListIcon","level","fontWeight","paddingBottom","marginTop","marginBottom","borderBottom","infoData","titleMarginBottom","titleMarginTopBottom","useListItemIconStyles","minWidth","SummaryCard","isOpen","isLoading","undefined","history","documentHandling","onlyHeader","props","listItemIconClasses","t","useTranslation","center","generalInformation","initialAdditionalInformation","additionalInformation","endorsementList","levels","dates","datesLabels","defaultDatesLabels","documents","ratingScalesData","summaryCardLevelsMapping","levelToDisplay","pickBy","Grid","container","item","xs","Typography","variant","quality","date","List","map","element","ListItem","key","disableGutters","ListItemIcon","ListItemText","Card","bottomLine","summaryCardTablevels","highlight","keys","length","label","value","isEmpty","generalInformationLabels","additionalInformationLabels","documentTypes","defaultProps","avatar","width","SummaryCardBusinessCard","id","imageUrl","setImageUrl","a","fetchUserImage","fetchImage","Avatar","src","borderWidth","button","textTransform","icon","marginRight","active","borderStyle","borderColor","SummaryCardDocuments","disabled","setIsPending","filesPending","setFilesPending","info","useSnackbar","throwFetchError","addNotificationAction","handleDownloadNotReady","handleDownload","retries","defaultDocument","toggleModal","downloadAsyncService","onError","onDownloadNotReady","DownloadStatus","PENDING","filter","includes","Button","onClick","zIndex","top","transform","borderLeft","notAvailable","left","right","yearItem","SummaryCardLineChart","historyType","ratingScale","isESGImpact","isESGSentiment","sentimentHistory","reverse","currentYear","getYear","Date","currentMonth","getMonth","labels","getMonthsBetweenDates","drawData","dataBeforeFirstChartYear","forEach","toString","getDataBeforeFirstChartYear","currentDate","pointRadius","isWithdrawal","withdrawalDate","actualValue","searchedData","shouldStopDrawing","selectSuggestedMax","portfolioTypes","CREDIT_RATING","scalesTypes","rs1","rs2","rs3","rs4","tooltipCallback","creditRatingRangeValues","creditRatingLongTermRangeValues","datasets","fill","lineTension","layout","scales","y","ticks","suggestedMin","suggestedMax","min","max","x","plugins","legend","callbacks","tooltipItem","raw","hover","mode","chartLabels","slice","component","moduleTypes","ratingTypes","SUMMARY_CARD","ESG_SENTIMENT","CLIMATE_STRESS_TEST","INSTRUMENTS","RATING_NEWS","RESEARCH","DOCUMENTS","App","logVersion","authData","previousAuthData","usePrevious","useFeatures","redirectHomeToPageOne","window","location","pathname","href","origin","lastLocation","localStorage","getItem","removeItem","StyledEngineProvider","injectFirst","ThemeProvider","LocalizationProvider","dateAdapter","AdapterDateFns","CssBaseline","redirectToRootAddress","baseApiUrl","process","REACT_APP_API_TARGET","useNavigatorPost","useNavigator","isRequestPending","setRequestPending","hasAccessToNavigatorApp","hasAccess","setAccess","getAccess","role","useGetNavigatorAccess","requestAccess","success","useMessages","requestAccessToNavigator","Navbar","navigate","useNavigate","changePasswordModalOpen","setChangePasswordOpen","toggleChangePasswordModal","redirect","userMenu","user","firstName","lastName","jobTitle","onViewProfile","onChangePassword","onNewsCenter","onLogout","notifications","useGetNotifications","generalServices","useGeneralServices","bookmarks","useMenuBookmarks","navigatorOptions","creOptions","useGetCREProjects","errorCRE","loadingCRE","errorPortfolio","loadingPortfolio","models","useGetSimulationModels","modelHeader","model","match","shortName","getModelHeader","hasAccessToCREApp","hasAccessToPortfolioApp","contactSalesRequest","useContactSales","useCre","fundsOptions","useGetFundsAccess","hasAccessToFundsApp","useFunds","accessOptions","TopHeader","activeUrl","hasSettings","open","onClose","navbarStyles","COLORS","background","control","moduleNotFound","Subnavigation","useLocation","state","modules","creditAnalysis","subnavigation","hidden","checkAccess","permission","environment","shopPermissions","to","initialModule","currentRoute","setCurrentRoute","currentModule","split","findModule","navLinks","absolutePath","startsWith","bookmarkedPage","navigateTo","flex","back","ArrowBack","divider","tabs","pt","tabsBackground","dialogContent","whiteSpace","dialogTitle","heading","image","backgroundPosition","CreditSphereInvitiationModal","onNavigateToInitialSubscription","Dialog","maxWidth","creditSphereInvitationImg","imageClassName","titleVariant","DialogContent","DialogContentText","DialogActions","PrivateRoute","Component","licence","shopRoles","rest","useHubSpot","store","getState","permissions","licences","roles","mergedPermissions","mergePermissionsParser","checkEnvironment","checkPermission","checkLicence","checkRole","validateRoles","checkShopPermissions","validateShopPermissions","creditReviewInitialSubscription","subscriptionsData","subscription","categories","category","productLines","productLine","creditSphereInitialSubscription","produtName","toLowerCase","getShopProductValues","product","fields","field","pricing","price","formatDate","ShopToolbar","actions","React","anchorEl","setAnchorEl","size","event","currentTarget","Menu","keepMounted","Boolean","action","MenuItem","ShopProductActivationModal","onConfirm","DialogTitle","mt","format","shortDateFormat","subscriptionUntil","autoFocus","ShopProductCancellationModal","messageModalOpen","setMessageModalOpen","toggleMessageModal","onSendMessage","messageData","sendMessageToSales","ShopSelectionListAction","productId","getProductById","setIsLoading","isCancelModalOpen","setIsCancelModalOpen","isActivateModalOpen","setIsActivateModalOpen","messageByStatus","subscriptionStatuses","ACTIVE_CANCELLED","validUntil","ENDED_CANCELLED","ENDED_TRIAL","ACTIVE_TRIAL","ACTIVE","mb","activateSubscriptions","products","fetchShopProductsAction","cancelSubscriptions","toolbarContainer","ShopSelectionList","columns","onSelectionChange","toolbar","editMode","showFreeTrialPrice","selectedProducts","setSelectedProducts","columnsSetup","sort","customBodyRender","rowData","join","cancellationPeriod","today","subscriptionUntilDate","cancelDate","addDays","priceData","trialStarted","formatCurrency","_","optionsSetup","filterType","print","download","search","onRowsDelete","viewColumns","pagination","sortDirection","onRowsSelect","_currentSelection","items","selectedItems","dataIndex","_product","index","rowsSelected","customToolbar","customToolbarSelect","MUIDataTableHeadCell","styleOverrides","fixedHeader","MUIDataTableSelectCell","headerCell","fixedLeft","MUIDataTable","paper","boxShadow","MUIDataTableToolbarSelect","MUIDataTableSearch","searchText","searchIcon","useStyle","ShopFavorites","tab","useQuery","getFavoriteProducts","changeShopProductsFavoriteStatusAction","ids","isFavorite","filteredProducts","exportToExcel","fileName","workbookName","setShopActiveViewAction","view","IconButton","Paper","elevation","select","contrastText","borderRadius","ShopSortSelect","shop","Select","onChange","setShopSortingAction","target","shopProductsSortOptions","sortOption","useSelectFilterStyles","useSmallSelectStyles","shopProductsFilters","formControl","marginLeft","initialFilters","segments","ShopFilters","showSelectFilters","onFilterChange","selectFilterClasses","smallSelectClasses","filters","activeView","productProperties","getProductsProperties","handleCategoryFilterChange","updatedFilters","setShopFiltersAction","handleSelectFilterChange","alignContent","shopProductsCategories","trial","free","FormControl","InputLabel","shrink","ShopProductDocumentTypes","tnc_link","textDecoration","ShopTermsAndConditions","onAccepted","onRejected","Map","termsAcceptance","setTermsAcceptance","findTermsDocument","termDocuments","document","type","TERMS","set","checked","buildTermsLabel","doc","Link","e","preventDefault","downloadService","p","FormControlLabel","Checkbox","Array","from","every","handleClick","validationSchema","Yup","shape","companyName","required","address","city","zipCode","country","vatId","contactPerson","ShopCheckoutForm","onSuccess","productIds","termsAccepted","setTermsAccepted","termsDocuments","setTermsDocuments","initialValues","organisation","addressLine","zip","handleTermsAccepted","terms","handleTermsRejected","fetchShopHistoryAction","cover","onSubmit","agreements","entries","fromEntries","version","acceptTermsAndConditions","purchaseProducts","validateOnChange","handleChange","errors","px","TextField","input","defaultValue","fullWidth","_g","titleText","summary","total","stepButton","finishIcon","ShopBasket","activeState","urlsState","lastUpdate","basket","getProductsFromBasket","urls","setUrls","activeStep","setActiveStep","summaryPrice","setSummaryPrice","removeShopProductsFromBasketAction","sum","handleNext","prevActiveStep","pl","pr","py","direction","invoiceStripePaymentUrl","invoicePdfUrl","ShopPurchases","getPurchasedProducts","counter","noDataText","fetchEventsAction","EventsActionType","FETCH_EVENTS","fetchEventTitles","FETCH_EVENT_TITLES","fetchEventSessions","FETCH_EVENT_SESSIONS","eventsLocations","webinar","onsight","session","dateTime","duration","language","segment","region","marketingLabel","description","logo","EventsDocumentsUpload","onUpload","files","htmlFor","EventsDocumentsModal","handleSubmit","Divider","my","file","m","EventsDocumentsControl","showDocumentsModal","setShowDocumentsModal","toggleDocumentsModal","FieldControl","onUpdate","DateTimePicker","inputFormat","renderInput","val","Autocomplete","getOptionLabel","option","isOptionEqualToValue","onInputChange","debounce","placeholder","img","docs","FormGenerator","controls","EventEditForm","setFieldValue","sessionDetailsState","setFields","selectedEventId","setSelectedEventId","sessions","setSessions","selectedSessionId","setSelectedSessionId","sessionDetails","setSessionDetails","properties","getEventProperties","eventTitles","getEventTitles","eventSessions","getEventSessions","sessionsDetails","getSessionsDetails","prev","attributes","getSessions","timestamp","estimated_started_at","timezone","formatISO","utcToZonedTime","included","estimated_duration","kindId","kind","locations","getFormSchema","FETCH_SESSION_DETAILS","fetchSessionsDetails","EventEdit","editedEventDetails","onEventUpdate","eventData","externalId","organiser","owner","first_name","last_name","getSessionDetails","activeEvent","shortDescription","toUpperCase","replace","eventDate","languages","thirdPartySource","documentList","formData","getSelectedItems","ItemType","SCOPEONEID","count","castArray","itemIds","EventsActionButton","connectionLink","userRegistered","detailsView","onRegister","upcoming","isFuture","unregisterFromAnEvent","registerForAnEvent","stats","statValue","statLabel","footer","checkoutButton","sidebar","detailsInfo","detailsInfoList","subscriptionButton","EventsProductDetails","expanded","preview","getEventsDetails","FETCH_EVENT_DETAILS","Collapse","in","timeout","unmountOnExit","sanitizeHtml","eventsCategories","countryCodes","labelBar","thirdPartyImage","maxHeight","overflow","textOverflow","actionContainer","priceBox","pricePeriod","buttonContainer","buttonActive","actionButton","favoriteButton","trialText","freeText","hiddenCheckoutButton","visibility","loader","lockIcon","esgAnalysisHeader","esgAnalysisEvents","fundAnalysisHeader","fundAnalysisEvents","creditAnalysisHeader","creditAnalysisEvents","bold","EventsProduct","collapsed","productRef","useRef","isFavoriteStatusLoading","setIsFavoriteStatusLoading","showDetails","setShowDetails","usePortfolioModals","addToPortfolio","createPortfolio","eventsInPortfolioManager","scrollToProductId","ignoreQueryPrefix","favourite","changeFavoriteStatus","removeEventFromFavourites","addEventToFavourites","timer","setTimeout","scrollToRef","clearTimeout","current","rootProps","ref","alt","pb","toggle","UpdateEntitiesModal","close","itemsData","onClickCreateNew","itemType","EventPreview","onBack","steps","EventPanelCreate","setInitialValues","setEvent","setEditedEventDetails","useParams","FETCH_EVENT_PROPERTIES","fetchEventDetails","File","Stepper","alternativeLabel","Step","StepLabel","eventPreview","step","updateEvent","saveEvent","EventsSelectionList","events","showActive","setShowActive","selectedEvents","setSelectedEvents","activeEvents","inactiveEvents","Tabs","Tab","onRowSelectionChange","_event","components","portfolioUploadQuery","StepChoiceWrapper","styled","AccentedWord","mark","typography","TemplateArea","SIZES","DownloadTemplateButton","_extends","assign","i","arguments","source","prototype","hasOwnProperty","call","apply","this","createElement","viewBox","stroke","d","strokeLinecap","strokeWidth","Activity","OrganisationState","PortfolioType","CollectionType","strokeLinejoin","uploadTypes","uploadSteps","PortfolioUploadFirstStep","changeUploadType","uploadType","setStep","mx","TileButton","selected","withCheckbox","PortfolioUploadSecondStep","onFileUpload","onPortfolioSelect","uploadToISIN","portfolio","portfoliosOptions","isPortfoliosLoading","notifyError","useNotifications","portfolioChoiceScenarios","templateUrl","portfolioChoiceScenario","setPortfolioChoiceScenario","downloadErrorHandler","portfolioId","portfolioName","containerSize","fileType","handleOnUpload","multiple","uploadPortfolioUnified","uploadEntitiesViaIsin","FormData","append","fetchApi","downloadTemplateContainer","buttonIcon","downloadButtonContainer","flexGrow","uploadContainer","fileUploadText","summaryContent","textCenter","checkIcon","strong","summarySideNotes","finishSideNotes","borderTop","OldPortfolioUploadModal","onUploaded","destinationPortfolioId","fileUploadInputRef","setFileUploadInputRef","fileData","setFileData","summaryStep","setSummaryStep","uploadEntities","setUploadEntities","selectedPortfolio","setSelectedPortfolio","isCreatePortfolioOpen","setIsCreatePortfolioOpen","handleClickCreateNew","handleAddToSelectedPortfolioClick","portfoliosStart","setPortfoliosStart","portfoliosLimit","setPortfoliosLimit","useFetchPortfolios","portfoliosData","portfolios","closeModal","handleDone","handleDownloadTemplateClick","previousStep","fileUploadInputRefChanged","newPortfolioId","dataToUpload","fileUploadInput","refreshReasons","UPDATED","updateUploadBoxData","setFieldValueFunc","stepUploadInitialValues","stepUpload","portfolioUploadSchema","touched","InputBase","readOnly","defaultChecked","style","stepCreatePortfolio","creditReviewCreatePortfolioSchema","defaultAction","onSelectPortfolio","isDedicated","stepFinish","marginY","marginX","customShadows","stepsMapping","Loader","onCreate","createdPortfolioId","createdPortfolioName","PortfolioUploadModal","newPortfolioUploadModal","selectedStep","setSelectedStep","setUploadType","setPortfolio","uploadedFile","setUploadedFile","setUploadToISIN","firstStep","v","secondStep","handleClose","hideCancelButton","cancelLabel","onCancel","confirmLabel","detail","handleUploadPortfolio","artifactIdToRatingType","ArtifactIdType","ScopeOneId","EasyNumber","CREDIT_REVIEW","EsgId","ESG_IMPACT","multiline","firstLine","secondLine","makePortfolioTableData","createdDate","noOfItems","instruments","funds","coverage","esg","creditRating","creditReview","watchlistEnabled","rangeSliderValuesGenerator","unit","minimum","maximum","valuesArray","roundStep","Math","round","valueParser","minMaxValueInitialValues","updateFilters","omit","nameButton","opacity","PortfolioManager","portfolioForUpdate","setPortfolioForUpdate","portfolioUploadModalOpen","setPortfolioUploadModalOpen","createPortfolioModalOpen","setCreatePortfolioModalOpen","updating","setUpdating","reason","setShouldRefresh","updatePortfolio","useUpdatePortfolio","deletePortfolios","useDeletePortfolios","useSelectedTableRows","singleSelect","multiSelect","currentSelect","selectedAll","onSelectAll","onSelectedChange","selectSingle","clearSingle","features","actionRender","artifactId","rowIndex","onOpen","getActions","dedicatedIndexes","initialColumns","useCallback","withPathname","fundAnalysisPortfolioManager","toggleVisibility","activityInPortfolioManager","useTable","onSortChange","onTableChange","page","limit","column","sortColumn","isDedicatedPortfolioSelected","openUploadPortfolioModal","openCreatePortfolioModal","openRenamePortfolioModal","deletePortfolio","portfolioIds","DELETED","loadTableData","selectedId","selectedItem","handler","confirmation","notSelectableRows","toolbarData","onSelectAllClick","selectableRowsHeader","CreateNewPortfolioModal","eventFiltersTypes","ScoreLock","entity","module","customHandler","setOpen","esgAnalysis","SENTIMENT","ShopProductLines","Rating","meta","esgCustomScore","Tools","Review","countriesAndIndustries","countryCode","ShopRelatedProductsModal","chipCustomScore","darkGrayAlt","EntityScore","subscore","onRequestEsg","onRequestSentiment","onRequestCreditReview","cofaceAccessType","useCofaceContract","esgRequestPermitted","esgContract","esgRequestPermission","getShopProducts","creditReviewSubscription","sigProduct","entityPortfolioModuleData","score","canRequest","canUnlock","requested","orderType","displayCustomScore","Chip","iconClassName","requestButton","onRequestClick","alreadyRequested","confirmationModalOpen","DatatableEntityFilters","filterFieldsInitialData","ratingTypePage","prevFiltersValues","isFiltered","setIsFiltered","dataToSubmit","setDataToSubmit","creditRatingShortTermRating","esgEnvironment","esgGovernance","esgSocial","esgTotal","sigCountryRiskAssessment","sigPOD","storefrontRatingOutlook","storefrontRatingType","countriesParsed","useMemo","countriesList","continentCode","continent","countries","countryInRegion","iso","industriesParsed","industriesList","industryObj","sectors","sector","ratingParsed","storefrontRatingOutlookParsed","shortTermRatingsParsed","sigCountryRiskAssessmentParsed","creditReviewParsed","sigPODParsed","esgEnvironmentParsed","esgSocialParsed","esgGovernanceParsed","esgTotalParsed","rating","shortTermRatings","pod","environmental","social","governance","handleSelectChange","handleRangeSliderChange","newValues","previousFilterValues","cloneDeep","countriesConverted","countryIso","industriesConverted","searchedIndustry","generatePreviousValues","Popover","anchorOrigin","vertical","horizontal","groupBy","fetchInitialFiltersData","collection","getFetchApiJSONResponse","catchFetchApiError","DatatableChipFilters","filtersData","handleDelete","handleCustomChipDelete","handleClearAll","chipsCounter","filtersDataArray","generateChipName","rangeSliderValues","nameTranslated","fromRange","toRange","emptyValues","isFromRangePresent","range","and","noValueMsg","fromRangeDisplay","toLocaleString","useGrouping","flexWrap","chipText","render","customChipsCounter","tooltipText","getName","onDelete","Tooltip","generateCustomChip","buttonLink","cursor","availableWrapper","availableCounter","requestsAvailableLockIcon","counterLoader","cstSelect","paddingTop","body2","lineHeight","cstLabel","infoIcon","PortfolioEntities","refetchPortfolio","portfolioData","totalCounter","lastVisitedRatingType","lastVisited","requestConfirmationModalOpen","setRequestConfirmationModalOpen","toggleRequestConfirmationModal","toggleSigMonitor","useToggleSigMonitoring","setVariant","requestEsgScore","createCompanies","deleteEntities","useDeleteEntities","activeItem","setActiveItem","requestSelectedESG","setRequestSelectedESG","cofaceContractInfoPending","cofaceRequestsAllowed","getCofaceRequestsAllowed","requestButtonTooltipTitle","creditReviewRequestTooltips","entitiesToRequestCount","setEntitiesToRequestCount","cstScenario","setCstScenario","useGetSentifyRequests","sentifyRequests","loadingSentify","portfolioType","isRequestHistory","REQUEST_HISTORY","isRSRPortfolio","RSR_PORTFOLIO","PRIVATE_RATING_PORTFOLIO","ON_DEMAND_RATING_PORTFOLIO","activeTab","setFiltersData","setFilterFieldsInitialData","handleRequestRating","entitiesAvailableToRequest","generateEntitiesAvailableToRequest","filteredRatingRequest","selectedItemsToProductsParser","artifactType","frequency","purchaseType","purchaseTypes","ONE_TIME","postOrderMany","refreshList","PRODUCT_REQUESTED","sampleProduct","organisationId","userId","requestSigEntityRatingAction","scheduleRequest","useConfirmedRequest","handleRequest","itemId","portfolioItems","entityEssential","lastVisitedRatingTypeAction","onCompanyModuleChange","REFERENCE_PORTFOLIO_EUROPE","REFERENCE_PORTFOLIO_GLOBAL","deleteEntity","portfolioItemsIds","deletePortfolioItems","copyEntity","moveEntity","handleRequestSelected","exportEntities","exportFullDataToExcel","exportMode","addQueryPrefix","popoverFiltersPortfolioManager","PORTFOLIO_ITEMS","entitiesFilters","dataToSet","countryCodeArray","industryConverted","filterChips","propertyName","filtersEdited","valuesEdited","elementName","prevState","ratingTypesValues","FUNDS","requestHistoryRatingTabs","tabsButtons","esgSentiment","ratingTypeValue","isActive","titleByRatingType","availableRequestsRender","paddingY","paddingX","bgcolor","lightBlue","sentimentRequestsRender","requestLeft","nameRender","SAMPLE_PORTFOLIO","moduleGroup","companyEntityModules","moduleParam","companyModule","details","activityRender","activity","oldScore","scoreDate","activityMapping","activityMappingPortfolioItems","scoreChangeDate","scoreOld","showLabel","ratingTypeRender","ratingTypeInColumn","parseRatingType","scoreRender","requestSentimentScore","cstTooltipRenderer","placement","sigMonitoringRender","sigMonitoring","toggleSigMonitoring","toggleSig","isNil","orderly","disorderly","hotHouse","customHeadLabelRender","multipleRequestsPortfolioManager","useFetchPortfolioItems","requestedTab","refresh","totalPortfolioItems","filteredEntitiesCount","tableData","idColumn","nameColumn","artifactIdType","dataSource","otherColumns","sigCity","sigPostcode","parseIndustryType","parseDemandType","demandType","storefrontOldScore","storefrontScoreUpdate","sigOldScore","sigScoreUpdate","esgOldScore","esgScoreUpdate","scores","sentifi","makePortfolioItemsTableData","showTabsButtons","tableToolbar","removeShadow","popoverFilters","leftToolbar","showSelectionExtension","requestCounter","onActionSuccess","sourcePortfolioId","onRequested","selectIds","ESG","isPortfolioManager","selectedIds","actionVariant","requestsCount","titleByEventFilter","CREDIT_ANALYSIS","ESG_ANALYSIS","FUNDS_ANALYSIS","PortfolioEvents","deleteEvents","useDeleteEvents","eventFilter","deleteEvent","eventsIds","copyEvent","moveEvent","tabButtons","categoryConverted","onEventFilterChange","categoryRenderer","word","charAt","eventActionRender","useFetchPortfolioEvents","parseISO","MaturityDateSelect","prevValue","maturityRange","startDate","maxRangeDate","dateFormat","startDateFormatted","datesToPick","addMonths","valueToRange","datesToPickFinder","DatatableInstrumentsFilters","couponPercent","currencyCode","volume","maturityDate","couponPercentParsed","volumeParsed","rangeLimit","PortfolioInstruments","isReferencePortfolio","deleteInstruments","useDeleteInstruments","deleteInstrument","instrumentsIds","copyInstrument","moveInstrument","exportIndustries","instrumentsFilters","instrumentRatingRender","isSelectedAllInReferencePortfolio","useFetchPortfolioInstruments","totalInstruments","filteredInstrumentsCount","isin","entityName","coupon","filtersCounter","InstrumentsTitle","ml","gap","PortfolioRatingNews","deleteRatineNews","useDeleteRatingNews","artifactIdList","tableRefreshReasonTypes","useFetchPortfolioRatingNews","ratingNews","publicationDate","makeRatingNewsTableData","PortfolioResearch","deleteResearches","useDeleteResearchItems","i18n","lang","deleteResearch","useFetchPortfolioResearch","researches","SummaryTitle","WidgetsWrapper","WidgetStyled","Widget","ScrollableArea","showScroll","WidgetItem","secondary","WidgetItemSubtitleDescription","TileRow","TileNumber","IconWrapper","Tile","ThreeDotsTile","EntitiesTile","InstrumentsTile","FundsTile","ItemsWidget","goToTab","route","LastAddedTypeRoute","instrument","fund","LastAddedWidget","lastAdded","artifactTypesLabels","rating_news","research","PortfolioNewsWidget","latestNews","PortfolioSummary","padded","iconTextWrapper","uploadedIconColor","green","errorIconColor","UploadStatus","onDownloadDetails","onDownloadErrorReport","uploadStatus","errorsLink","PortfolioUploads","deleteUpload","useDeleteUpload","uploadPortfolio","downloadFile","nameRenderer","_link","typeRender","statusRenderer","link","uploadedItemsRender","validationErrorsRender","uploadsIds","initialSort","useFetchPortfolioUploads","uploadHistory","itemsType","results","uploadedItems","validationErrors","selectableRows","DatatableFundsFilters","peergroup","ratingPoints","parsed","fundPeerGroup","fundRating","fundRatingPoints","FilterList","peergroupName","fundRank","verticalAlign","fundRatingOuter","fundRatingInner","fundPointsTotal","PortfolioFunds","deleteFunds","useDeleteFunds","deleteItemsHandler","isins","copyItemsHandler","moveItemsHandler","exportToExcelHandler","fundsFilters","rankRenderer","ratingRenderer","isAif","isQualitative","rank","pointsRenderer","percentageRenderer","toFixed","useFetchPortfolioFunds","returnValue","risk","shopSubscriptionTypes","useErrorAutocompleteStyles","red","availableFormats","matchFileFormat","fileFormat","pop","initializeInputs","orderFormText","productDescriptionText","termsAndConditionsText","checkDocuments","orderFormInput","productDescriptionInput","termsAndConditionsInput","array","documentInputFields","shouldBeRemoved","isNull","ShopProductDocumentsModal","orderForm","productDescription","termsAndConditions","thirdparty","ShopProductSourceModal","setLogo","validateForm","createProductThirdPartySource","fetchShopProductPropertiesAction","addButton","documentsButton","documentButtonToRemove","nullable","activationFee","amount","toolType","when","is","otherwise","of","cancelPeriod","Research","sources","isFreeTrial","trialAmount","test","ShopPanelProductCreator","editedProduct","autocompleteErrorClasses","scopeSources","getScopeProductSources","thirdPartySources","getThirdPartyProductSources","tools","durations","validity","cancelPeriods","marketLabel","getInitialValues","setProduct","productPreview","setProductPreview","multiplePrice","setMultiplePrice","prices","setPrices","activationFees","setActivationFees","unitsLabelName","setUnitsLabelName","unitsValue","setUnitsValue","setThirdPartySource","showSourceModal","setShowSourceModal","productImage","setProductImage","handleUnitNameChange","units","productLineName","isMultiplePrice","thirdParty","toggleSourceModal","getDocumentsByType","prod","documentType","ableToEdit","some","fee","inputDocuments","availability","upgrade","tierPrice","tier","purchased","trialPeriod","validityDays","removeDocument","tiers","tierIndex","pricesCopy","Number","handleChangeTierPrice","feesCopy","handleChangeTierFee","fileUrl","FULL_API_URL","maxSizeMb","ShopProduct","createProduct","header","ShopPanelPackageCreator","productsToAddIds","setProductsToAddIds","productsToRemove","setProductsToRemove","packageProducts","packageProduct","addedProducts","setAddedProducts","handleBack","completed","addedProductsIds","productsToAdd","productsToAddCategories","Set","addedProductsCategories","productValues","addedProduct","uniqBy","currentValues","allProductLines","isPackage","_path","EventsSortSelect","sortDesc","getEventSortDesc","SET_EVENTS_SORT_DESC","setEventsSortDesc","endIcon","eventsFilters","timeline","past","favourites","favorite","EventsFilters","getEventsFilters","getCategoryFilter","SET_EVENTS_CATEGORY_FILTER","setEventsCategoryFilter","handleTimelineFilterChange","SET_EVENTS_TIMELINE_FILTER","SET_EVENTS_FAVORITES_FILTER","dialog","overflowY","UserRatingStatusLog","ratingId","ratingStatusLog","setRatingStatusLog","ratingStatusLogTotal","setRatingStatusLogTotal","fetchLog","statusLog","pageSize","getUserRatingStatusLog","resp","dateRender","statusDate","modifiedByRender","modifiedByName","modifiedByEmail","modifiedBy","paginationLimit","PaperProps","skipHeader","rowsPerPageOptions","RatingStatusIndicator","statuses","RatingStatuses","INVITED","APPROVED","REVOKED","Styled","UserListWrapper","AssignUser","ratingName","subscriptionRatingType","selectedUser","setSelectedUser","users","setUsers","assignedUsers","setAssignedUsers","fetchAssignedUsers","getRatingUsers","u","ratingStatus","fetchUsers","enteredMail","filterUsers","result","debouncedFetchUsers","useDebouncedCallback","addUser","addRatingUsers","onSearch","onSelect","email","selectedValue","organisationName","getEntitiesRoutings","baseAddress","license","Announcement","Instrument","Entity","routes","exact","Home","licencesTypes","INVESTORHUB_MODULE","IssuerDashboard","ISSUER_DASHBOARD","Analysts","permissionsTypes","SSO_VIEW_USER_ANALYST_DATA","CA_VIEW_DOSSIER","EntityDetails","NewsCentre","Profile","GenerateReportESG","allStandardRolesTypes","SearchResult","useFetchPortfolio","entitiesCounter","setEntitiesCounter","instrumentsCounter","setInstrumentsCounter","uploadsHistoryInPortfolioManager","uploads","isReference","defaultActiveTab","setActiveTab","savedActiveTab","searchQuery","onTabChange","hasShadow","entCount","instCount","RatingCoverageRelated","RatingCoverageIndustry","RatingCoverage","CreditRatingCoverage","ESGCoverage","SHOP_ADMIN","duplicateShopProducts","deleteSubscriptions","activeBasketState","allProducts","activeProducts","setActiveBasket","shopViews","handleViewChange","purchases","favorites","ErrorPage","ServiceNotAvailable","getEvents","hiddenActions","setHiddenActions","alert","Promise","all","activateEvent","deactivateEvent","hideRules","Duplicate","Activate","Deactivate","allEvents","CoveredBonds","isAddModalOpen","setAddModalOpen","isLogModalOpen","setLogModalOpen","setRating","isSubscriberConfirmationModalOpen","setSubscriberConfirmationModalOpen","isConfirmModalOpen","setIsConfirmModalOpen","confirmType","setConfirmType","dir","order","searchedValue","setRows","buildRows","setTotal","er","fetchRating","getRating","activateUsers","userIds","activateRatingUsers","entityType","deactivateUsers","deactivateRatingUsers","showuserStatusLog","sortable","searchable","getSearchValue","userStatus","UserStatusIndicator","SubscriberConfirmationIndicator","access","list","useRSR","defaultSortField","tableActions","selectToggle","rows","isSelectedAll","selectAllToggle","clearSelectedIds","setSelectedIds","fetchDebounce","approve","revoke","headerActions","SubscriberConfirmations","SIGNED","UserStatuses","ratingStatusDate","moreActions","confirmModalData","APPROVE","REVOKE","iconSize","selection","cols","selectable","paginate","added","SetSubscriberConfirmationModal","needsUpdate","ConfirmModal","RestrictedSubscriptionRatings","AuthenticatedApp","lazy","autoConfirm","requestConfirmation","subscriptionsIsPending","creditSphereSubscription","showCreditReviewInvitationModal","creditReviewInvitationCard","NO_SUBSCRIPTION","loadOnboardingState","showCreditSphereInvitationModal","creditSphereInvitationCard","initialSubscriptionInvitationModalOpen","setInitialSubscriptionInvitationModalOpen","creditSphereInvitationModalOpen","setCreditSphereInvitationModalOpen","toggleInitialSubscriptionInvitationModal","toggleCreditSphereInvitationModal","navigateToCreditReviewSubscription","saveOnboardingState","navigateToCreditSphereSubscription","useESGReportPage","FS","identify","displayName","requestQuestionnaireAvailabilityAction","qualificationId","getCreditReviewContractDataAction","esgCompanies","getEsgContractDataAction","getPreferencesAction","getIndustriesAction","requestCreditRequestLevelsAction","requestCreditReviewSpecsAction","getLoggedUserAction","fetchShopPermissionsAction","getESGCoverageAction","getRegionsAction","getRatingCoverageAction","relatedIssuers","requestRelatedEntitiesAction","getRelatedEntitiesData","requestConfirmationChangedAction","confirmed","setItem","setIndustriesMapping","renderRoutes","redirectFromHashLinks","generateKey","NotFound","useAdminPage","basename","showErrorPage","Container","separator","useReportPage","UnauthenticatedApp","emailNotificationsTypes","space","emailFrequencies","DISABLED","EmailNotifications","pristine","emailSettingsChanged","emailNotificationsParser","handleTypeChange","concat","el","typeSelected","FormLabel","RadioGroup","aria-label","row","IMMEDIATE","Radio","DAILY_DIGEST","FormGroup","helperText","ultimateHelperText","NewsFeedSettings","followedAnalysts","newsletterEnabled","newsSettingsChanged","errorStateChanged","groupedAutocompleteClasses","useGroupedAutocompleteStyles","industriesData","isIndustriesDataPending","setIndustries","rawPreferences","setPreferences","prefs","classifications","allRegions","resetPageNumber","buildInitialSettings","newsFeedSettingsParser","newsletter","newsletterSettingsParser","settings","setSettings","newsTypes","isError","newsletterFrequencies","NONE","showNewsTypes","useNewsFeedPreferences","newsType","artifactTypes","newsToArtifactTypes","updatedNewsTypes","produce","draftSettings","newsTypeChecked","WEEKLY","types","newsFeedTypes","newsFeedTypesLabels","COMPANY_NEWS","FormHelperText","updatedIndustryTypes","industryTypes","industryType","selectedIndustries","countriesIso","selectedCountries","updatedCountriesList","limitToFollowedAnalysts","NewsFeed","newsFeedRef","setToggle","shopProductsData","shopProductsIsPending","getHomeSubscriptions","showSubscriptionsInvitationCard","showCreditReviewInvitationCard","useArtifacts","getArtifactsAction","getNewsFeedAction","getArtifactsDataActionParams","customLimit","useUrlParam","handleChangeArtifactsPage","handleArtifactClick","currentPage","updatedSettings","saveFeedSettingsAction","imgUrl","creditReviewFreeTrialInvitationImg","contentHeight","shakehandImg","onItemClick","onChangePage","RequestButton","reset","setRequested","previousReset","l5","available","requestInstrumentRatingAction","requestEntityRatingAction","newsArtifactsTypes","indexOf","requestRatingNewsAction","isRequestAvailable","ratingRequestAvailable","renderButton","disableRipple","RequestEsgButton","Search","group","urlParams","regionCode","region_code","postalCode","postal_code","inputValue","setInputValue","getInitialSearchState","searchCategories","QUERY","fullValue","setValues","shouldSubmit","setShouldSubmit","mapValues","mappedValues","queryString","searchStartAction","setSearchFiltersAction","performInNextCycle","useDeepCompareEffect","handleKeyDown","optionLabel","capitalize","resetValue","isFilled","freeSolo","newInputValue","onKeyDown","InputProps","startAdornment","InputAdornment","endAdornment","renderTags","getTagProps","paddingRight","postcode","warningIcon","applyBtn","SearchFiltersModal","extraMessage","useRegions","getInitialCountry","countryRegions","setCountryRegions","getCountryRegions","fetchCountryRegions","regionName","handleCountryChange","countryRegionsAvailable","inputProps","maxLength","htmlColor","warning","cleanedValues","SearchBar","condition","CreditRatingEntitiesFiltersModal","initialFilter","filterableIndustries","allowEmptyIndustriesFilter","actionTypes","ratingRange","actionType","newSectors","initialIndustry","industrySectors","longTermRatingFrom","encodeURIComponent","longTermRatingTo","Score","portfolioItemIdTypes","dedicatedPortfoliosLabels","chip","totalChip","requestCell","statusInfo","RatingState","useEntitiesTableColumns","isPortfolioTable","isRequestEnabled","isUnlockEnabled","onUnlockClick","isESGScoringTool","getOptionsForClimateStressTest","renderClimateLossScore","scenario","scoreName","getSentimentOptions","setCellProps","hasPermission","hasCompany","hasScore","isTotalScoreColumn","TOTAL","esgId","totalScore","getImpactOptions","isSocialColumn","SOCIAL","RatingStatus","DONE","requiresScoring","IN_PROGRESS","TO_DO","unableToRequest","UNABLE_TO_REQUEST","columnsByRatingType","outlook","hasLicence","ratingTrend","previousRating","previousOutlook","longTermRatingDate","isUnsolicited","outlookLabels","hasIndustry","OrangeRatingChip","setRatingColor","shortTermRatingDate","sortOrder","hint","longTermRatingTrend","previousLongTermRating","activityMappingCreditRating","entityId","ENVIRONMENT","GOVERNANCE","buildInitialColumns","setInitialColumns","EntitiesTable","dataSelector","actionCreator","actionCreatorParams","dossierId","onItemsRemoved","constantFilter","initialFilterModalValues","renderDatatable","extendedExport","didUnmount","requestedEntityId","isRatingRequestPending","ratingRequestError","dossierData","dossier","singleDossier","isDedicatedPortfolio","lowerCase","esgDedicatedPortfoliosLabels","esgContractData","contractData","entitiesFiltersModalOpen","setEntitiesFiltersModalOpen","ESGScoringToolModalOpen","setESGScoringToolModalOpen","ESGEntityRemovalConfirmationModalOpen","setESGEntityRemovalConfirmationModalOpen","setCountriesAndIndustries","requestedEntitiesIds","setRequestedEntitiesIds","requestLoading","setRequestLoading","setSelected","dossiersRequest","setDossiersRequest","isRequestEsgModalOpen","setRequestEsgModalOpen","isRelatedProductsModalOpen","setRelatedProductsModalOpen","toggleEntitiesFiltersModal","toggleESGScoringToolModal","toggleESGEntityRemovalConfirmationModal","esgProductData","creditRatingProductData","setCreditRatingProductData","cofaceRequestPermission","refreshTable","columnsFilterKeysMapping","getTableDataAction","getTableDataActionParams","setFilter","extractIdsByType","idType","itemData","scopeoneId","handleUnlockedButton","unlocked","SUBSCRIPTION_PURCHASED","exportItemsIds","isArray","removeItems","dossierItemsIds","removeItemsFromPortfolio","putNotifyError","onExportSuccess","ratingRequestParser","exportService","exportModes","EXTENDED","BASIC","asyncExportService","customButtonLabel","onCustomButtonClick","switchScenarioAction","onApplyFiltersClick","showFilters","ratingTypeFilter","newFilters","FILTERS_APPLIED","ESGEntitiesFilterModal","environmentFrom","environmentTo","socialFrom","socialTo","governanceFrom","governanceTo","totalScoreFrom","totalScoreTo","InstrumentsTable","useInstrumentsRatingRequest","requestRating","useInstrumentRenderers","addedDateRenderer","protectedRenderer","instrumentsFiltersModalOpen","setInstrumentsFiltersModalOpen","setCellHeaderProps","InstrumentsFiltersModal","ratingFrom","ratingTo","couponRangeFrom","couponRangeTo","issueVolumeFrom","issueVolumeTo","maturityDateFrom","maturityDateTo","issueVolumeCurrency","InvestorRelationsTable","investor","relations","ViewPeerGroupModal","table","ViewPeerGroup","fetchPeersNames","setIsOpen","alertWrapper","dark","ChangePasswordModal","oldPassword","newPassword","confirmNewPassword","changePasswordService","changePasswordSchema","noValidate","closeButton","profilePictureLabel","profilePictureDropzone","profilePictureActive","profilePictureReject","profilePictureContainer","boxSizing","profilePicture","objectFit","EditProfileModal","setFile","jobFunctions","setJobFunctions","useDropzone","accept","maxSize","minSize","onDrop","onDropRejected","getRootProps","getInputProps","isDragActive","isDragReject","fileValue","tempFile","phone","jobFunction","fetchJobFunctions","fetchData","setSubmitting","handledValues","toBase64","base64","editProfileAction","removePicture","editProfileSchema","isSubmitting","SelectProps","native","IssuerRelationsModal","selectButton","selectTitle","RequestEsgScoreModal","showErrors","setShowErrors","uploadRequest","uploadData","responseData","requestFormInitialValues","requestForm","verySoftCyan","verySoftPink","ArrowDropUp","ArrowDropDown","line","ActionsButton","itemForConfirm","setItemForConfirm","clearItemForConfirm","handleAction","MoreHoriz","transformOrigin","amber","iconVariants","InfoIcon","ErrorIcon","CheckCircleIcon","WarningIcon","Alert","Icon","SnackbarContent","card","teaser","remove","lock","bottom","blurred","ArtifactCard","onRemove","restricted","hasNoText","CardActionArea","CardContent","artifactCard","Artifacts","onItemRemove","onChangeRowsPerPage","pagesTotal","isInteger","ceil","visibleArtifacts","rowsPerPage","showSelectPerPage","noData","alignText","ArtifactsNews","shortTitle","shortText","imageFilename","blur","BlurWrapper","CoverageListBreadcrumbs","param","mapper","AF","AS","SA","EU","NA","businessLines","banks","corporates","sovereigns","supranationals","breadcrumbsRoutes","breadcrumb","countryName","getCountryName","countryId","businessLine","regs","useFilterOptions","homeBreadcrumb","excludePaths","LinkRouter","Breadcrumbs","breadcrumbs","useBreadcrumbs","isSearch","transition","iconActive","CollapseCard","isIn","setIsIn","iconClasses","ConditionalWrapper","wrapper","ConfidentialAlert","compactButtons","noPadding","ContactBox","analystTeams","compact","followed","showRequestCallButton","showFollowButton","showMessageButton","onRequestCall","empty","internal","renderButtons","CardActions","renderAvatar","renderContent","personalAdvisorPicturesPath","listItem","listItemCount","CoverageWidget","formatNumber","CustomTooltip","tooltipStyles","arrow","black","DistributionBarVariant","titlePrimary","titleWhite","rootWithImg","backgroundSize","overlay","alpha","whiteIcon","DialogTitleWithClose","forwardRef","titleClassName","edge","percentageLabel","barWrapper","scoresWrapper","scoreLast","flip","chipSpacing","Indicator","showIcons","boxProps","useProgressStyles","colorBg","Variant1","bar","colorProgress","useDownstreamStyles","colorDownstream","DistributionBar","distributionScores","distributionProgress","downstreamProgress","labelA","labelB","labelC","isDouble","progressClasses","downstreamProgressClasses","_downstreamProgress","supplyChainValue","supplyChainArrow","scoreCompany","LegendColorChip","chipColor","LinearProgress","scoreSupplyChain","roundedBox","documentDate","documentName","documentDownloadIcon","expansionPanelList","Documents","Accordion","defaultExpanded","expansionPanel","AccordionSummary","expandIcon","AccordionDetails","disablePadding","documentTitle","pointerEvents","FileUploader","setFiles","acceptedFiles","extendedFiles","revokeObjectURL","FileUploaderInput","inputRef","fileInput","fileText","updateUploadData","isDisabled","iconButton","flag","FlagsList","svg","papers","ContactUsModal","PrivacyPolicyModal","PrivacyPolicyPdf","SiteNoticeModal","TermsOfUseModal","TermsAndConditions","dangerouslySetInnerHTML","__html","offset","Footer","contactUsModalOpen","setContactUsModalOpen","siteNoticeModalOpen","setSiteNoticeModalOpen","privacyPolicyModalOpen","setPrivacyPolicyModalOpen","termsOfUseModalOpen","setTermsOfUseModalOpen","toggleContactUsModal","toggleSiteNoticeModal","togglePrivacyPolicyModal","toggleTermsOfUseModal","GroupedSelect","InfoCard","gutterBottom","InfoTooltip","LinkText","nested","paddingLeft","depthLevel","closeMenu","external","renderListItem","underline","menuButton","listWrapper","NewsCard","CardMedia","generateImageUrl","disableSpacing","OnMountScroller","scrollTo","PageTitle","noMargin","useGridStyles","perPage","usePaginationStyles","ul","Pagination","paginationClasses","gridClasses","PanelTitle","Item","PeopleList","PreviewPanel","caption","onViewAllClick","viewAllDisabled","profileInfo","ProfileInfo","profilePicturesPath","ValueLabelComponent","enterTouchDelay","RangeSlider","alignSliderToLabel","firstValueIndex","secondValueIndex","setCurrentValues","rangeSliderMarks","Slider","firstValue","secondValue","marks","valueLabelDisplay","valueLabelFormat","getColor","RatingScale","useCreditScoreClasses","affirmation","blue","stable","better","worse","new","yellow","none","ScoreChangeIndicator","creditScoreClasses","mappedActivity","activityLabel","activityLabels","activityClasses","Downgrade","Upgrade","FirstScore","Affirmation","None","Stable","tooltipTitle","isNumber","ScrollTop","trigger","useScrollTrigger","disableHysteresis","threshold","Zoom","anchor","ownerDocument","querySelector","scrollIntoView","behavior","block","Fab","SearchBreadcrumb","searchFilters","SelectWithSearch","SimpleDataList","emptyText","primaryText","secondaryText","Fragment","SnackbarNotifications","notification","removeNotification","setMessage","previousNotification","processQueue","Snackbar","TransitionProps","onExited","autoHideDuration","ConnectedNotifications","connect","removeNotificationAction","shadowed","useTabStyles","TabsPanel","childrenArray","child","flat","o","tabsLoadedState","setTabsLoadedState","clonedChildren","setClonedChildren","tabClasses","selectActive","Children","cloneElement","TabIndicatorProps","scrollButtons","counterInfo","TabPanel","tag","clipboard","matchVisual","formats","fontFamily","fontStyle","inactive","TextEditor","newValue","alignOptions","alignLeft","alignRight","alignCenter","tooltipIcon","inline","Title","rootClassNames","triangle","borderBottomWidth","small","large","Triangle","CustomToolbar","menuItems","onApplySearchFiltersClick","showSearchFilters","menuAnchorEl","setMenuAnchorEl","menuOpen","handleMenuClose","handleMenuItemClick","visibleMenuItems","menuItem","DatatableStyledWrapper","div","toolbarWrapper","toolbarWrapperWithLeftMenu","default","selectAllButton","rightToolbarWrapper","Datatable","disableSort","customTextLabels","setRowProps","newSelected","resetSelected","MOVED","newSelectedItemsIds","newSelectedItems","selectAllItems","getId","selectElementLabel","tableTitle","serverSide","textLabels","currentRowsSelected","toggleElement","selectToolbarPlacement","onColumnSortChange","tableState","getTableChanges","isRowSelectable","selectionExtension","String","MuiTableRow","MUIDataTableToolbar","MuiTableSortLabel","iconDirectionDesc","iconDirectionAsc","hintIconWithSortIcon","hintIconAlone","DatatablePreview","requestBox","RequestRating","onRequest","whiteText","BlurredContactAdvisorBox","handleRatingRequest","contactAdvisor","ScoreWidget","footerColor","last","Contact","ContactAdvisorDone","ContactAdvisor","useContactAdvisor","messageSent","RenderModal","chipStyles","noRangeLine","noRangeLineWrapper","RangeSliderExtended","rangeActive","setRangeActive","noValueActive","setNoValueActive","valuesParsed","rangeSliderValueParser","chipButtonHandler","isRangeActive","isNoValueActive","clickable","inputField","FieldRange","fieldProps","initialValueParser","value1","value2","initialValue","StyledSwitch","Switch","transitionDuration","transitions","create","BlurredText","Blur","getUsers","searched","getRatings","setRatingContractType","entityIds","contractType","rsrId","setSubscriberConfirmation","organizationIds","ratingIds","ratingEntityList","ratingEntityType","getFetchApiTextResponse","updateUserRatings","deactivateRatings","useMainColumnStyles","footerContainer","valueGridItem","footerColorToHexMap","ScoreWidgetMainColumn","preliminary","suffix","accent","orangeAccent","colors","rootClasses","useColumnStyles","fullHeight","columnInnerBoxWithBorder","columnValue","ScoreWidgetColumn","ScoreWidgetSingleValueColumn","subvalue","ScoreWidgetMultiValuesColumn","useRootStyles","fetchProducts","changeProductsFavoriteStatus","fetchShopHistory","addProductsToBasket","removeProductsFromBasket","fetchProductProperties","startFreeTrial","startFreeSubscription","fetchShopPermissions","fetchShopRelatedSubscriptions","LOGIN","LOGIN_SUCCESS","LOGIN_ERROR","LOGOUT","LOGOUT_SUCCESS","EDIT_PROFILE","EDIT_PROFILE_SUCCESS","EDIT_PROFILE_ERROR","PERMISSIONS","GET_LOGGED_USER","GET_LOGGED_USER_SUCCESS","loginAction","getShop","sorting","property","productValue","matchValue","getProductsByIds","L1","L2","L3","L4","L5","creditRatingScales","creditRatingScalesMap","ratingConstants","entityRatingCurrency","entityReview","longTermRating","longTermRatingCurrency","entityRating","longTermRange","undeterminedRange","shortTermRange","creditRatingScalesMapping","DocumentsModal","defaultExpandDocuments","company","initialMethodologies","initialDocuments","checkExpanded","setDocuments","isDocumentsPending","setIsDocumentsPending","methodologies","setMethodologies","isMethodologiesPending","setIsMethodologiesPending","additionalDocuments","setAdditionalDocuments","isAdditionalDocumentsPending","setIsAdditionalDocumentsPending","getESGDocuments","esgAvailable","reports","availableYears","update","year","latestUpdate","fetchESGDocuments","fetchESGAdditionalDocuments","CreditReviewTab","easyNumber","getAuthDataOrganisationId","getAuthDataUserId","ratingAvailable","setRatingAvailable","setEntity","isRequestRatingPending","setIsRequestRatingPending","fetchEntities","entityData","wasRequested","requestCreditReviewRatings","isAvailable","QuestionnaireStepper","stepsNumber","QuestionnaireNextButton","PropTypes","QuestionnairePreviousButton","subLabel","QuestionnaireStepHeader","QuestionnaireContext","createContext","useToggleButtonGroupStyles","grouped","useToggleButtonStyle","ButtonsWithOther","questionId","handleValidation","setParam","useContext","currentValue","setCurrentValue","otherValue","setOtherValue","setType","toggleButtonGroupClasses","toggleButtonClasses","setValidate","ToggleButtonGroup","answerId","answer","other","exclusive","answerLabel","ToggleButton","Buttons","onPush","singleValue","RadioCardSubPage","next","isValid","setIsValid","questionLabel","questionSubLabel","selectedValues","handleOnChange","nextSubStep","subOptions","RadioCard","setSubOptions","subQuestionId","setSubQuestionId","subPage","setSubPage","hasSubOptions","subLevel","subOptionsValues","subOptionsValue","subPageValues","useFormGroupStyles","useFormControlLabelStyles","Checkboxes","onSet","formGroupClasses","formControlLabelStyles","optionsState","setOptionsState","handleChage","formFields","narrow","QuestionnaireFormFieldsBuilder","onSetValue","onPushValue","onRemoveValue","onRemoveValues","QuestionnaireIntro","formTheme","createTheme","adaptV4Theme","overrides","MuiToggleButtonGroup","MuiToggleButton","QuestionnaireForm","newsFeedPreferences","submitted","setSubmitted","currentStep","setCurrentStep","showIntro","setShowIntro","useQuestionnaire","setAnswer","pushAnswer","removeAnswer","removeAnswers","answers","showPreviousButton","showSubmitButton","cleanStepAnswers","questions","isHeaderVisible","Provider","saveQuestionnaire","newsCentreUserDataService","initialSettings","initialSettingsParser","customize","savePreferencesAction","isValidate","useDialogStyles","Questionnaire","isModalOpen","setIsModalOpen","questionsSteps","setQuestionsSteps","dialogClasses","getQuestionnaireData","_defs","Wrapper","BoxStyled","BarChartIconWrapper","BarChartIconStyled","BarChartIcon","DialogStyled","ModalHeader","ImageWrapper","ESGLearnMoreModal","onContactSales","mr","startIcon","EsgImpDemo","ESGLearnMoreBar","openModal","setModalOpen","CoreWidget","Cell","ChartTitle","getData","mapData","chartData","chartShort","customPalettes","s","g","indicators","chart","ESGMaterialityMap","percentage","colored","numberFormatOptions","maximumFractionDigits","preserveAspectRatio","xlinkHref","_circle","cx","cy","r","Legend","getChartData","sdg01","sdg02","sdg03","sdg04","sdg05","sdg06","sdg07","sdg08","sdg09","sdg10","sdg11","sdg12","sdg13","sdg14","sdg15","sdg16","sdg17","ESGRelevanceMapping","selectedYear","esgLendingData","headSquareClasses","useHeadSquareStyles","setEntityData","companyVsValueChain","useCompanyVsValueChain","useGetImpactIndustryAbsolute","impactIndustryAbsolute","impactIndustryAbsoluteLoading","useGetImpactIndustryRelative","impactIndustryRelative","impactIndustryRelativeLoading","useGetImpactRegionAbsolute","impactRegionAbsolute","impactRegionAbsoluteLoading","useGetImpactRegionRelative","impactRegionRelative","impactRegionRelativeLoading","materialityMap","useMaterialityMap","useGetScoreOverview","scoreOverview","scoreOverviewLoading","relevanceMapping","useSDGRelevanceMapping","useImpactReview","impactReview","impactReviewLoading","usePortfolioCoverage","portfolioCoverage","portfolioCoverageLoading","impactOverview","getImpactOverview","scoreOverviewData","getScoreOverview","esgScore","getSummary","lendingImpactLoading","dataExists","data_exists","isSubscribed","subscribed","requestState","showESGScoreSummaryCard","refreshEntity","refreshEntityAction","getEntityData","fetchEntityBasic","summaryCardHistoryParser","summaryCard","summaryCardDocumentsParser","onUnlocked","ESGImpactOverview","ESGScoreOverview","ESGLendingImpact","industriesAbsolute","industriesRelative","countriesAbsolute","countriesRelative","localStatePage","setLocalStatePage","setLimit","newsFeedPreferencesIsPending","newsFeedShouldRefresh","previousFilters","previousPage","getArtifacts","artifactPage","noParamChange","handleChangeRowsPerPage","setRegions","fetchEntitiesCountries","entitiesCountries","filteredRegions","filterContinents","fetchCountries","useLoginForm","inputs","setInputs","handleInputChange","persist","useTheme","setPagination","setColumns","setRefreshTable","setDirection","refreshTableFn","filteredCellHeaderPropsFn","highlightFilteredColumns","filterKey","shouldHighlightColumn","draftColumn","reorderColumn","newFilter","useContact","subject","contactBoxService","contactTypes","MESSAGE","notifySuccess","getAuthDataToken","toastInfo","totalUnread","userUnread","whatsNewUnread","unread","setUnread","hasMoreData","setHasMoreData","setList","setPage","getNotifications","useFetchNotifications","whatsNew","fetchUserNotificationsWhatsNew","parseNotification","_id","headline","isFavourite","is_favourite","isRead","is_read","img_url","view_link","docUrl","viewLink","resetList","loadNews","_pageNumber","newData","prevList","loadMine","pageNumber","notificationsLimit","mounted","ws","WebSocket","WS_API_URL","onmessage","websocketData","onclose","settingsLink","getScopeOneUrl","onFilter","onLoadMore","newPage","onFavToggle","isFav","updateNotification","setMessageSent","contact","contactTargets","PERSONAL_ADVISER","answersInitialState","answersReducer","isTheSameQuestionId","question_id","isDifferentQuestionId","paramsInitialState","paramsReducer","useReducer","answersDispatch","paramsDispatch","useViewDocuments","defaultExpand","setDefaultExpand","showViewDocumentsButton","viewDocumentsModal","userData","getAuthDataUser","isIdentified","setIsIdentified","hsq","_hsq","HubSpotConversations","widget","console","warn","useModal","setSelectedAll","setMultiSelect","setSingleSelect","getBookmark","bookmarkedHomepage","setBookmarkedHomepage","bookmarkNewHomepage","homeAddress","setBookmark","simulationModel","lastPage","setLastPage","setSearchedValue","setIsSelectedAll","setSort","useTableFeatures","dataRows","updateSearching","updatePagination","newLast","updateOrdering","isSelected","getAuthData","hasRole","hasLicense","hasShopPermit","canAccess","ADMIN","SCI","SCOPEX","exports","notify","log","npm_package_version","SearchControl","form","Close","PortfoliosSelectControl","filtered","searchField","searchVal","setSearchVal","nameFilter","setNameFilter","useVariantAction","submit","refreshSettings","networkError","itemContainer","calculatorTitle","weightBox","weight","textField","lightGray","textFieldValue","ESGDistributionCalculator","firstInputLabel","firstInputValue","secondInputLabel","secondInputValue","firstInputUnit","secondInputUnit","showWeightBox","useESGDistributionStyles","alignSelf","ESGDistribution","environmentWeight","environmentExtCostsDividedByRevenue","parseToCurrency","environmentExtCosts","orientation","socialWeight","socialRiskHoursExtCostsDividedByRevenue","socialRiskHoursExtCosts","governanceWeight","corruptionRiskDividedByRevenue","corruptionRisk","ESGImpactTypes","darkCyan","softOrange","veryLightBlue","componentWidth","boxPlotLabel","parseDonutData","companyValueTooltip","companyValueGraph","peers25Value","peers75Value","peersMaxValue","peersMedianValue","peersMinValue","parseBoxPlotData","startCase","ESGImpactDistribution","memo","boxplotData","donutData","humanize","flexItem","svgCircle","tooltipScore","ESGImpactIcon","impactWeight","impactNumber","hoveredContinent","classNames","renderIcon","parseScoreToString","ImpactTypeControls","includeTotal","impactTypes","setValue","impactType","impactLevel","ESGImpactHexCodesMap","ESGImpactHexBorderMap","columnDisplay","columnRow","scoreColumn","helpIcon","legendIcon","legendLabel","columnLabel","weights","svgMap","ESGImpactMap","withLegend","setImpactType","setHoveredContinent","continentsMarkers","lon","lat","continents","markers","marker","dataItem","getFillForContinent","continentToColor","continentData","getHexColorByImpact","getStyles","geo","CONTINENT","outline","handleLeave","geography","geoUrl","geographies","rsmKey","onMouseMove","findName","handleMove","onMouseLeave","pressed","coordinates","contactAdvisorDesc","ESGImpactScore","stability","dataPrecision","ESGImpactTable","chipClasses","isIndustry","chartColumnsOptions","insignificant","fixedHeaderCommon","MuiTableCell","responsive","rankingScale","rectangularUseStyles","RectangularScale","quarter","rectangularClasses","circleUseStyles","textWrapper","rankText","CircleScale","circleClasses","quarterValue","RankingModal","rankingItemUseStyles","itemTitle","RankingItem","section","rankingItemClasses","betterScores","ESGRanking","totalRank","totalSection","environmentSection","socialSection","governanceSection","worstColor","averageColor","bestColor","missingColor","themeObject","chartWrapper","scoreNumbers","scoreNumber","scoreMaxNumber","legendChip","ESGScore","worst","average","best","isComparison","notFilledColor","getHexColorByScoreOverview","cutout","circumference","rotation","aspectRatio","tooltips","enabled","elements","arc","parseFloat","itemWrapper","scoreTotal","legendText","flatScoreComparisonChartWrapper","ESGScoreComparison","worstScore","averageScore","bestScore","companyImpact","supplyChainImpact","averageImpact","bestImpact","worstImpact","lowest","highest","indigo","inner","topBar","topBarScore","bottomBar","bottomBarScore","bottomBarScoreIndicator","topBarLabel","useLegendStyles","FlatScoreComparisonChart","usePositionsStyles","labelLowest","labelAverage","labelHighest","positionsClasses","legendClasses","labelsClasses","indicatorsClasses","PortfolioUploadESG","backToTypeSelection","createdPortfolioDesc","isPortfoliosPending","UPLOAD","tempDossierId","setTempDossierId","setPortfolios","getDossiersAction","requestParams","downloadMissingIsinsErrorHandler","missingIsinsCount","notFoundIsins","missingScoresCount","summarySteps","ratingsCount","customField","missingIsins","placeOrders","confirmBody","sourceDossierId","targetDossierId","targetDossierName","targetDossierDescription","confirmPortfolioESG","refreshDossiersAction","FINISH","handleStepSubmit","CREATE_DOSSIER","SUMMARY","stepCreateDossier","onSelectDossier","stepSummary","portfolioScore","generalInformationMock","endorsementCreditRating","unlockButton","contentRow","scoreWidgetMainColumn","SummaryCardRequestESG","setProductLine","esgIds","setEsgIds","setEsgProductData","openRequestEsgModal","addToScoringToolService","addedItems","requestEsgSentimentScore","openRelatedProductsModal","DONE_BY_SCOPE","buildImpactContent","summaryTabHistoryData","Events","ScoringToolSteps","ESGScoringToolModal","successfullyParsed","errorsNumber","uploadCustomCompanies","companiesFile","successfully_parsed","ESGEntityRemovalConfirmationModal","nameCapitalized","iconButtonStyling","PortfolioChartLegend","otherItemsToExpand","hideLegendChip","isCollapsed","changeCollapse","ExpandLess","ExpandMore","renderCollapseButton","companies","ESGLendingData","statistics","chartExtended","sortChartData","objectToSort","chartItemsToArray","calculateValuesToDecimal","statisticsItems","exposure","b","floor","prepareChartData","prepareOtherDataToExpand","otherDataToExpand","regionsChartData","industriesChartData","otherRegionsToExpand","otherIndustriesToExpand","sortedRegions","otherRegionsToExpandArray","sortedIndustries","otherIndustriesToExpandArray","COMMENTARY","MONITORING_NOTES","FOLLOWED_ANALYSTS","generalInformationCreditReview","businessClimate","countryRisk","businessRisk","summaryTabCreditRatingNamesPriorites","distributionService","impactScoreService","peergroupComparisonService","regionImpactService","industryImpactService","scoreOverviewService","externalCostsComparisonService","impactOverviewService","rankingService","fetchESGScoreSummaryTab","contractStates","fetchEsgContractData","getUserId","isTrial","is_trial","allowedRequests","allowed_requests","totalAmount","total_amount","contractState","contract_state","esgIsTrial","esgRequestsAllowed","esgTotalAmount","esgContractState","useGeneralInformation","useGetHistoryChart","useGetEsgEvents","companyId","eventType","useGetPeriodScore","useGetPeriodIndustryScore","useGetPeerGroupComparison","useGetAttentionBuzzBreakdown","useGetCompareCompanyIndustry","useGetTopCompanies","useGetESGTotalData","timeRange","useGetE_S_GData","useGetESGHistory","scoreType","useGetCompanyInfo","useGetAvailability","getPieByRegion","getPieByIndustry","getImpactByCountry","getImpactByIndustry","getEsgCoverage","orderBy","company_uuid","ENDED","getAuthDataOrganisation","parent","matches","sharePortfolioSchema","fileExistenceMessage","createPortfolioSchema","dossierName","cofaceAccessTypes","REQUEST_ALLOWED","REQUEST_NOT_ALLOWED","NO_CONTRACT_ID","NOT_ENOUGH_CREDITS","useAccess","EnvironmentTypes","DEVELOPMENT","shopSystem","restrictedSubscriptionRatings","TESTING","climateStressTest","ecafFeature","SHOP_USER","SHOP_SCOPE_EXPLORER","getEventsModule","eventsDetails","fetchEvents","futureEvents","pastEvents","fetchSessionDetails","uploadDocument","fetchEventsProperties","defaultTheme","moderateBlue","veryLightGray","darkGray","darkGrayAlt2","darkLimeGreen","darkOrange","verySoftLimeGreen","verySoftYellow","lightGreen","chart1filled","chart1empty","chart2filled","chart2empty","breakpoints","lg","h6","MuiTextField","MuiSelect","MuiTooltip","MuiTabs","indicator","MuiTab","MuiAccordion","MuiCssBaseline","html","WebkitPrintColorAdjust","WebkitFilter","MuiDialogActions","MuiDialogContent","TypesEnum","typesIds","ACCOUNT_NOTIFICATIONS","SYSTEM_UPDATE","RESPONSE","WHATS_NEW","DOWNLOADS","UPLOADS","accountNotification","systemUpdate","downloads","veryLow","low","medium","high","veryHigh","notificationsCentre","fetchUserNotifications","updateNotifications","updateNotificationsSettings","fetchUserNotificationsSettings","fetchNotificationsWidget","transformKeysToCamelCase","allCategory","downloadsCategory","uploadsCategory","favFilter","resFilter","$in","creditRatingRange","creditRatingRangeMapping","DisclaimerModal","disclaimer","MessageModal","SharePortfolioModal","arrayHelpers","fullName","EmptyDataLabel","TilesLabel","filtersIds","filterQuery","getFilterById","filterId","categoriesIds","yourNotifications","yourDownloads","initial","initialCategory","getUnreadIds","initialState","currentCategory","currentFilter","isFavouritePendings","loadMore","getCalculatedUnread","categoryId","unreadDisplayed","whatsNewData","whatsNewRead","loadWhatsNewReadState","unreadItems","isCurrentCategoryType","isRatingNewsPending","shouldRefreshRatingNews","isResearchPending","shouldRefreshResearch","isVisible","isSearchStarted","acc","parserByRatingType","entitiesToTableParser","creditReviewListToTableParser","esgImpactToTableParser","esgSentimentToTableParser","climateStressTestToTableParser","leadAnalysts","locales","isPreferencesPending","emailNotifications","news","defaultPrefsSet","isModalPending","issuers","issues","commentaries","companyNews","creditRatingPortfoliosToTableParser","creditReviewPortfoliosToTableParser","esgPortfoliosToTableParser","relatedEntities","creditReviewSpecs","creditReviewLevels","ratingCoverage","cofaceContractState","cofaceContractStates","esgContractStates","esgCoverageToTableParser","eScore","sScore","gScore","scopeoneIdentifier","scopeOneCompanyName","wasPurchased","combineReducers","reduxCombineReducers","loginParser","draftState","userParser","permissionsParser","FETCH_SHOP_PERMISSIONS_SUCCESS","shopPermissionsParser","GET_INSTRUMENT","GET_INSTRUMENT_SUCCESS","instrumentParser","GET_INSTRUMENT_ERROR","GET_INSTRUMENT_PRODUCTS","GET_INSTRUMENT_PRODUCTS_SUCCESS","merge","productsParser","GET_INSTRUMENT_PRODUCTS_ERROR","GET_INSTRUMENT_RATING_NEWS","GET_INSTRUMENT_RATING_NEWS_SUCCESS","artifactsParser","GET_INSTRUMENT_RATING_NEWS_ERROR","GET_INSTRUMENT_RESEARCH","GET_INSTRUMENT_RESEARCH_SUCCESS","GET_INSTRUMENT_RESEARCH_ERROR","REQUEST_INSTRUMENT_RATING","REQUEST_INSTRUMENT_RATING_SUCCESS","REQUEST_INSTRUMENT_RATING_ERROR","REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA","REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_SUCCESS","REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_ERROR","REQUEST_RATING_NEWS","REQUEST_RATING_NEWS_FINISHED","SEARCH_ENTITIES","GET_ENTITY","GET_ENTITY_SUCCESS","entityParser","GET_ENTITY_ERROR","GET_ENTITY_PRODUCTS","GET_ENTITY_PRODUCTS_SUCCESS","GET_ENTITY_PRODUCTS_ERROR","GET_ENTITY_INSTRUMENTS","areInstrumentsPending","GET_ENTITY_INSTRUMENTS_SUCCESS","instrumentsToTableParser","GET_ENTITY_INSTRUMENTS_ERROR","GET_ENTITY_RATING_NEWS","GET_ENTITY_RATING_NEWS_SUCCESS","GET_ENTITY_RATING_NEWS_ERROR","GET_ENTITY_RESEARCH","GET_ENTITY_RESEARCH_SUCCESS","GET_ENTITY_RESEARCH_ERROR","REQUEST_SIG_ENTITY_RATING","REQUEST_ENTITY_RATING","REQUEST_SIG_ENTITY_RATING_SUCCESS","REQUEST_ENTITY_RATING_SUCCESS","REQUEST_SIG_ENTITY_RATING_ERROR","REQUEST_ENTITY_RATING_ERROR","REQUEST_ENTITY_RATING_AND_FETCH_DATA","REQUEST_ENTITY_RATING_AND_FETCH_DATA_SUCCESS","REQUEST_ENTITY_RATING_AND_FETCH_DATA_ERROR","REFRESH_ENTITY","REQUEST_CONFIRMATION_CHANGED","SET_ENTITY_CREDIT_RATING_VISIBILITY","ADD_NOTIFICATION","REMOVE_NOTIFICATION","recentUsers","GET_RECENT_USERS","GET_RECENT_USERS_SUCCESS","recentUsersParser","GET_RECENT_USERS_ERROR","SEARCH_START","SEARCH_ENTITIES_SUCCESS","parser","SEARCH_ENTITIES_SWITCH_SCENARIO","changeScenario","SEARCH_ENTITIES_ERROR","SEARCH_INSTRUMENTS","SEARCH_INSTRUMENTS_SUCCESS","SEARCH_INSTRUMENTS_ERROR","SEARCH_RATING_NEWS","SEARCH_RATING_NEWS_SUCCESS","SEARCH_RATING_NEWS_ERROR","SEARCH_RESEARCH","SEARCH_RESEARCH_SUCCESS","SEARCH_RESEARCH_ERROR","updatedItems","updatedItem","creditReviewToTableParser","SET_SEARCH_FILTERS","announcement","GET_ANNOUNCEMENT","GET_ANNOUNCEMENT_SUCCESS","GET_ANNOUNCEMENT_ERROR","GET_NEWS_FEED","GET_NEWS_FEED_SUCCESS","GET_NEWS_FEED_ERROR","SAVE_FEED_SETTINGS","GET_PREFERENCES","GET_PREFERENCES_FINISHED","defaultPrefs","SAVE_PREFERENCES","SAVE_PREFERENCES_FINISHED","REFRESH_DOSSIERS","dossiers","GET_DOSSIER","GET_DOSSIER_SUCCESS","GET_DOSSIER_ERROR","GET_DOSSIER_ITEMS","GET_DOSSIER_ITEMS_SUCCESS","dossierItemsToTableParser","GET_DOSSIER_ITEMS_ERROR","GET_DOSSIERS","GET_DOSSIERS_SUCCESS","dossiersParser","GET_DOSSIERS_ERROR","CREATE_DOSSIER_SUCCESS","CREATE_DOSSIER_ERROR","errorType","DELETE_DOSSIER","DELETE_DOSSIER_SUCCESS","DELETE_DOSSIER_ERROR","TOGGLE_DOSSIER_WATCHED_STATE","TOGGLE_DOSSIER_WATCHED_STATE_FINISHED","GET_INDUSTRIES","GET_INDUSTRIES_SUCCESS","parseIndustries","GET_INDUSTRIES_ERROR","REQUEST_RELATED_ENTITIES","REQUEST_RELATED_ENTITIES_SUCCESS","parseEntitiesIndustries","REQUEST_RELATED_ENTITIES_ERROR","REQUEST_CREDIT_REVIEW_LEVELS","REQUEST_CREDIT_REVIEW_LEVELS_SUCCESS","REQUEST_CREDIT_REVIEW_LEVELS_ERROR","REQUEST_CREDIT_REVIEW_SPECS","REQUEST_CREDIT_REVIEW_SPECS_SUCCESS","REQUEST_CREDIT_REVIEW_SPECS_ERROR","VISIT_RATING_TYPE","GET_RATING_COVERAGE","GET_RATING_COVERAGE_SUCCESS","GET_RATING_COVERAGE_ERROR","GET_ESG_COVERAGE","GET_ESG_COVERAGE_SUCCESS","GET_ESG_COVERAGE_ERROR","GET_REGIONS","GET_REGIONS_SUCCESS","GET_REGIONS_ERROR","REQUEST_QUESTIONNAIRE_AVAILABILITY_SUCCESS","REQUEST_QUESTIONNAIRE_AVAILABILITY_ERROR","GET_INVESTOR_RELATIONS","GET_INVESTOR_RELATIONS_FINISHED","parsedData","investorRelationsToTableParser","cofaceTotalAmount","GET_CREDIT_REVIEW_CONTRACT_DATA_SUCCESS","GET_CREDIT_REVIEW_CONTRACT_DATA_ERROR","SET_SHOP_FILTERS","RESET_SHOP_FILTERS","SET_SHOP_SORTING","FETCH_SHOP_PRODUCTS","FETCH_SHOP_PRODUCTS_SUCCESS","FETCH_SHOP_PRODUCTS_ERROR","CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_SUCCESS","FETCH_SHOP_HISTORY","FETCH_SHOP_HISTORY_SUCCESS","FETCH_SHOP_HISTORY_ERROR","ADD_SHOP_PRODUCTS_TO_BASKET_SUCCESS","basketItems","REMOVE_SHOP_PRODUCTS_FROM_BASKET_SUCCESS","SET_SHOP_ACIVE_VIEW","FETCH_SHOP_PRODUCT_PROPERTIES","FETCH_SHOP_PRODUCT_PROPERTIES_SUCCESS","FETCH_SHOP_PRODUCT_PROPERTIES_ERROR","START_SHOP_PRODUCT_FREE_SUBSCRIPTION_SUCCESS","START_SHOP_PRODUCT_FREE_TRIAL_SUCCESS","CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_ERROR","START_SHOP_PRODUCT_FREE_SUBSCRIPTION_ERROR","START_SHOP_PRODUCT_FREE_TRIAL_ERROR","FETCH_EVENTS_SUCCESS","FETCH_EVENTS_ERROR","FETCH_EVENT_PROPERTIES_SUCCESS","FETCH_EVENT_PROPERTIES_ERROR","FETCH_EVENT_DETAILS_SUCCESS","FETCH_EVENT_DETAILS_ERROR","FETCH_EVENT_TITLES_SUCCESS","FETCH_EVENT_TITLES_ERROR","FETCH_EVENT_SESSIONS_SUCCESS","FETCH_EVENT_SESSIONS_ERROR","FETCH_SESSION_DETAILS_SUCCESS","FETCH_SESSION_DETAILS_ERROR","GET_ESG_CONTRACT_DATA_SUCCESS","GET_ESG_CONTRACT_DATA_ERROR","GET_ESG_COVERAGE_DATA_SUCCESS","GET_ESG_COVERAGE_DATA_ERROR","fetchUserNotificationsSaga","putFavouriteUserNotificationSaga","getCategoryFetchFunction","uploada","baseParams","unreadIds","notificationsCentreWatchers","takeLatest","fetchShopProductsSaga","changeShopProductsFavoriteStatusSaga","fetchShopHistorySaga","addShopProductsToBasketSaga","removeShopProductsFromBasketSaga","fetchShopProductsPropertiesSaga","startShopProductFreeTrialSaga","startShopProductFreeSubscriptionSaga","fetchShopPermissionsSaga","ADD_SHOP_PRODUCTS_TO_BASKET_ERROR","REMOVE_SHOP_PRODUCTS_FROM_BASKET_ERROR","GET_CREDIT_REVIEW_CONTRACT_DATA","shopWatchers","CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS","ADD_SHOP_PRODUCTS_TO_BASKET","REMOVE_SHOP_PRODUCTS_FROM_BASKET","START_SHOP_PRODUCT_FREE_TRIAL","START_SHOP_PRODUCT_FREE_SUBSCRIPTION","FETCH_SHOP_PERMISSIONS","fetchInstrumentSaga","fetchInstrumentDocumentsSaga","fetchInstrumentProductsSaga","fetchInstrumentRatingNewsSaga","fetchInstrumentResearchSaga","requestInstrumentRatingSaga","requestInstrumentRatingAndFetchData","fetchInstrument","fetchInstrumentDocuments","GET_INSTRUMENT_DOCUMENTS_SUCCESS","GET_INSTRUMENT_DOCUMENTS_ERROR","fetchInstrumentProducts","fetchArtifacts","postOrder","take","getInstrumentDocumentsAction","instrumentId","getInstrumentProductsAction","instrumentWatchers","GET_INSTRUMENT_DOCUMENTS","fetchEntitySaga","fetchEntityDocumentsSaga","fetchEntityProductsSaga","fetchEntityInstrumentsSaga","fetchEntityRatingNewsSaga","fetchEntityResearchSaga","requestEntityRatingSaga","requestEntityRatingAndFetchData","requestSigEntityRatingSaga","fetchEntity","fetchEntityDocuments","GET_ENTITY_DOCUMENTS_SUCCESS","GET_ENTITY_DOCUMENTS_ERROR","fetchEntityProducts","fetchEntityInstruments","getEntityDocumentsAction","getEntityProductsAction","itemsAdded","entityWatchers","GET_ENTITY_DOCUMENTS","loginSaga","getLoggedUserSaga","logoutSaga","editProfileSaga","loginService","loginResponse","permissionsService","permissionsResponse","getLoggedUserService","logoutService","anonymize","putNotifySuccess","editProfileService","loginWatchers","recentUsersSaga","recentUsersService","recentUsersWatchers","searchEntitiesSaga","searchInstrumentsSaga","searchRatingNewsSaga","searchResearchSaga","fetchInstruments","searchResultWatchers","takeEvery","fetchAnnouncementSaga","fetchAnnouncement","announcementWatchers","fetchNewsFeedSaga","requestRatingNewsSaga","fetchPreferencesSaga","getInitialPreferencesSaga","savePreferencesSaga","defaultFilters","fetchPreferences","savePreferences","newsFeedWatchers","fetchDossierSaga","fetchDossierItemsSaga","fetchDossiersSaga","createDossierSaga","deleteDossiersSaga","toggleDossierWatchedStateSaga","getCallMethodsByRatingType","toggleWatchedState","SIGToggleWatchedState","fetchDossier","fetchDossierItems","fetchDossiers","selectAll","addElementsToDossier","createDossier","responseDossier","addToDossier","CREATED","PortfolioErrorType","CREATE_NAME_CONFLICT","UNKNOWN","portfolioErrorMessages","deleteDossiers","watchlistItemTypes","DOSSIER","toggleMode","ON","WATCHLIST_STATE_CHANGED","dossierWatchers","fetchIndustries","fetchRatingCoverage","fetchESGCoverage","industriesSaga","requestRelatedEntitiesSaga","issuerIds","ratingCoverageSaga","esgCoverageSaga","regionsSaga","fetchEsgRegions","questionnaireSaga","getQuestionnaireAvailability","sharedWatchers","REQUEST_QUESTIONNAIRE_AVAILABILITY","fetchInvestorRelationsSaga","fetchInvestorRelations","investorRelationsWatchers","fetchCreditReviewContractDataSaga","fetchCreditReviewContractData","creditReviewWatchers","fetchEventsSaga","fetchEventPropertiesSaga","fetchEventDetailsSaga","fetchEventTitlesSaga","fetchEventSessionsSaga","fetchSessionDetailsSaga","eventsWatchers","fetchEsgContractDataSaga","esgWatchers","GET_ESG_CONTRACT_DATA","fetchEsgCoverageDataSaga","esgCoverageWatchers","GET_ESG_COVERAGE_DATA","startSagas","fork","checkInvalidActionTypeInArray","arg","idx","isOfType","actionTypeOrTypes","argPosition","throwIsEmpty","assertFn","_action","creditReviewLevelsEpic","action$","pipe","CreditReviewLevelsActionTypes","Request","switchMap","fetchCreditReviewLevels","requestCreditRequestLevelsSuccessAction","catchError","requestCreditRequestLevelsErrorAction","creditReviewSpecsEpic","CreditReviewSpecsActionTypes","fetchCreditReviewSpecs","requestCreditReviewSpecsSuccessAction","requestCreditReviewSpecsErrorAction","rootEpic","store$","dependencies","combineEpics","sagaMiddleware","createSagaMiddleware","epicMiddleware","createEpicMiddleware","persistedState","loadState","createStore","applyMiddleware","subscribe","saveState","run","toPromise","redirectToErrorPage","PAGE_ERROR_HREF","configureStore","longDateFormat","urlPrefix","serviceUrlPrefix","fetchDossierItemsSingleType","listId","start","dossierItemTypes","consolidatedPortfolioItemTypes","fetchFunc","responses","resourceUrl","addToDossierIsin","artifacts","handleIssuers","removeFromDossier","checkDossierName","SIGUpdateDossier","toggleMonitoring","itemsIds","LocalStorage","getAuth","setAuth","clearAuth","done","localData","hostname","httpLink","createHttpLink","uri","authLink","setContext","apollo","ApolloClient","cache","InMemoryCache","use","LanguageDetector","initReactI18next","whitelist","resources","en","translation","ERROR","PAGE_NOT_FOUND","SORRY_SOMETHING_WENT_WRONG","SORRY_SERVICE_UNAVAILABLE","SORRY_THE_PAGE_YOU_ARE_LOOKING_FOR_WAS_NOT_FOUND","WE_ARE_WORKING_ON_IT","GO_BACK","ENTITIES","REQUESTS","EVENTS","APPLY_FILTERS","SELECT_ALL_ITEMS","SHOW_MORE","SHOW_LESS","RANGE","NO_VALUE","HOME","COVERED_BONDS","USERS","TITLE","ADD_USER","PROVIDE_EMAIL","EDIT_USER","REVOKE_ALL_CONFIRMATION_TITLE","REVOKE_ALL_CONFIRMATION_MESSAGE","RESEND_INVITATION","RATINGS","RATING_USERS","APPROVE_ALL_CONFIRMATION_TITLE","APPROVE_ALL_CONFIRMATION_MESSAGE","SNACKS","USER_ADDED","USER_ADD_FAILED","USER_UPDATED","USER_UPDATE_FAILED","RATING_USER_ADDED","RATING_USER_ADD_FAILED","USERS_REVOKED","USERS_REVOKE_FAILED","RATING_USERS_REVOKED","RATINS_USERS_REVOKE_FAILED","RATING_USERS_APPROVED","RATING_USERS_APPROVE_FAILES","REVOKED_ALL_RATING_USERS","REVOKE_ALL_RATING_USERS_FAILED","COFIRMATION_SET","COFIRMATION_FAILED","RATING_CONTRACT_TYPE_SET","RATING_CONTRACT_TYPE_FAILED","LOG","DATE","STATUS","MODIFIED_BY","USER_STATUS","CONFIRMED","INACTIVE","UNCONFIRMED","BLOCKED","RATING_STATUS","RSR","SUBSCRIBER_CONFIRMATION","SET_SUBSCRIBER_CONFIRMATION","CONFIRMATION_BLANK","CONFIRMATION_SENT","CONFIRMATION_SIGNED","CONTRACT_TYPE","INVESTOR_REQUESTED","ISSUER_SOLICITED","VIEW_DETAILS","VIEW_LOG","USER_RATINGS_LOG_TITLE","REVOKE_ALL_USERS","RESTRICTED_SUBSCRIPTION_RATINGS","RSR_NAME","TYPE","RATING_TYPE","SET_CONTRACT_TYPE","NO_OF_REGISTERED_USERS","NAME","ORGANISATION","EMAIL","ACCESSIBLE_RATINGS","APPROVED_RATINGS","AVAILABLE_RATINGS","ACCESS","ENTITY_TYPE_ISSUE","ENTITY_TYPE_ISSUER","PORTFOLIO","UPLOADED_ITEMS","VALIDATION_ERRORS","RENEWAL","ISIN","ITEMS","LAST_ADDED","PORTFOLIO_NEWS","NO_ITEMS","NO_ITEMS_DESC","PORTFOLIO_SUMMARY","PORTFOLIO_COVERAGE","EMPTY_PORTFOLIO_COVERAGE","ESG_COVERAGE","CREDIT_RATING_COVERAGE","COMPANIES_BY_REGION","COMPANIES_BY_INDUSTRY","UPLOAD_DATE","CREDIT_SCORE","FUNDS_PEERGROUP","FUNDS_RANK","FUNDS_RATING","FUNDS_RATING_POINTS","FUNDS_RETURN","FUNDS_RISK","ESG_IMPACT_REVIEW","OVERVIEW","COVERAGE","NOTIFICATIONS","ACTIVITY","AVAILABLE_ENTITIES","COUNTRY","INDUSTRY","ENVIRONMENTAL","CLIMATE_LOSS","PHYSICAL_RISK_LOSS","TRANSITION_RISK_LOSS","CREATE_PORTFOLIO","CREATE_PORTFOLIO_NAME","CREATE_PORTFOLIO_DESCRIPTION","UPLOAD_PORTFOLIO","UPDATE_PORTFOLIO","DELETE_PORTFOLIO","RENAME_PORTFOLIO","PORTFOLIO_DELETED","NEW_PORTFOLIO_CREATED","NOTIFICATIONS_ENABLED","NOTIFICATIONS_DISABLED","ITEMS_ADDED_TO_NEW_PORTFOLIO","UNABLE_TO_ADD_TO_NEW_PORTFOLIO","PORTFOLIO_NAME_WHITESPACE_WARNING","UPLOADS_NAME","UPLOADS_TYPE","UPLOADS_CREATED","UPLOADS_STATUS","DATA_SOURCE","CITY","POSTCODE","ENTITY_RATING","OUTLOOK","SORT_TERM_RATING","ASSESSMENT","CREDIT_ASSESMENT","COUNTRY_RISK","UPDATE","PROBABILITY_OF_DEFAULT","DEMAND_TYPE","ALL_EVENTS","UNABLE_TO_REQUEST_SELECTED","YOU_CAN_NOT_REQUEST_MORE_THAN","ITEMS_AT_ONCE","ITEMS_COPIED_TO_NEW_PORTFOLIO","ITEMS_MOVED_TO_NEW_PORTFOLIO","RATING","RATING_TYPE_ONELINE","ON_REQUEST","SUBSCRIPTION","PUBLIC","COUPON_RANGE","INVESTMENT_VOLUME","CURRENCY","POD","INDUSTRIES","SHORT_TERM_RATINGS","COUNTRIES","MATURITY_DATE","ENTITY_RATING_SHOW_NO_VALUES","INSTRUMENT_RATING_SHOW_NO_VALUES","PROBABILITY_OF_DEFAULT_ONELINE","FUND_PEERGROUP","FUND_RETURN_VALUE","FUND_RISK","FUND_RATING_POINTS","FUND_RANK","SEARCH","SEARCH_FOR_ENTITIES_COUNTRIES_AND_INDUSTRIES","HAVENT_FOUND_WHAT_YOU_ARE_LOOKING_FOR","REFINE_YOUR_SEARCH","EXTENDED_DATA","LEI","THIS_SCORE_IS_NOT_YET_AVAILABLE","ADDED","LATEST_UPDATE","PREVIOUS_RATING","PREVIOUS_OUTLOOK","ULTIMATE_PARENT","SHORT_TERM_RATING","PUBLIC_RATING","SUBSCRIPTION_RATING","RESTRICTED_SUBSCRIPTION_RATING","CHANGE_AS_OF_LATEST_RATING_ACTION","ACTIVITY_HINT","FAILED_TO_EXPORT_ENTITIES","DOWNLOAD_TEMPLATE_FAIL","UPLOAD_CUSTOM_DATA","CUSTOM_DATA_UPLOADED","DATA_SOURCE_USER","DATA_SOURCE_SCOPE","TOOLBAR","ADD_TO_PORTFOLIO","COPY_TO_PORTFOLIO","MOVE_TO_PORTFOLIO","REQUEST_SELECTED","EXPORT_TO_EXCEL","EXPORT_VIEW_TO_EXCEL","EXPORT_FULL_DATA_TO_EXCEL","EXPORT_STARTED","TOGGLE_MONITORING","DELETE","SHARE","CREATE_NEW_PORTFOLIO","EXPORT_DISABLED_HINT","ENTITY_NAME","SENIORITY_TYPE","INSTRUMENT_VALUE","ALL","ALL_COUNTRIES","CREDIT_SPHERE","INVITATION_CARD_TITLE","INVITATION_CARD_DESC","INVITATION_CARD_YES","INVITATION_CARD_NO","CREDIT_REVIEW_REQUESTS","FREE_TRIAL_INVITATION_CARD_TITLE","FREE_TRIAL_INVITATION_CARD_DESC","FREE_TRIAL_INVITATION_MODAL_NO","FREE_TRIAL_INVITATION_MODAL_YES","ACTIVATE_YOUR_CREDIT_REVIEW_FREE_TRIAL_NOW","MONITORING_CHANGE_SUCCESS","MONITORING_PENDING","NEXT_IMPACT_BY_REG_IND","FAILED_TO_DOWNLOAD_SAMPLE_TEMPLATE","FAILED_TO_UPLOAD_COMPANIES","SCORING_TOOL","SCORING_TOOL_DESC_1","SCORING_TOOL_DESC_2","SCORING_TOOL_SUCCESS","SENTIMENT_REQUESTS","IMPACT_REVIEW_SCORE","CUSTOM_SCORE_TOOLTIP","PORTFOLIO_UPLOAD","INFO_1","INFO_2","INFO_3","STEP_SCORES_AVAILABLE","STEP_SCORES_MISSING","STEP_COMPANIES_MISSING","STEP_NO_COMPANIES_MISSING","DOWNLOAD_UNIDENTIFIED_ELEMENTS","FAILED_DOWNLOAD_PORTFOLIO_TEMPLATE","FAILED_DOWNLOAD_MISSING_ELEMENTS_TEMPLATE","SELECT_PORTFOLIO","GOTO_PORTFOLIOS","STATUS_FAILED","ENTITY_REMOVAL_CONFIRMATION","ENTITY_REMOVAL_CONFIRMATION_DESC","SCORE_REQUEST","REQUEST_FAILED","SCORE_REQUESTING","SUMMARY_TAB_REQUEST","SUMMARY_TAB_REQUESTED","SUMMARY_TAB_UNLOCK_TOOLS","SUMMARY_TAB_UNLOCK_RATINGS","SCORING_TOOL_NO_PERMISSION","SCORE_NOT_AVAILABLE","SOMETHING_WENT_WRONG","MISSING_FINANCIAL_STATEMENT","ONLY_AVAILABLE_FOR_CORPORATES","LENDING_PORTFOLIO_DATA","EXPOSURE_BY_REGION","EXPOSURE_BY_INDUSTRY","LENDING_PORTFOLIO_IMPACT","IMPACT_BY_COUNTRY","IMPACT_BY_INDUSTRY","QUESTION_1","INFO_1_1","INFO_1_2","OR","INFO_1_3","PREVIOUS","ENTITIES_PORTFOLIO_UPLOAD","FUNDS_PORTFOLIO_UPLOAD","INFO_ENTITIES_2_1","INFO_FUNDS_2_1","TYPE_PORTFOLIO_NAME","ADD_TO_EXISTING_PORTFOLIO","DOWNLOAD_INFO_1","DOWNLOAD_INFO_2","DOWNLOAD_TEMPLATE","ADD_TO_ISIN","SELECT_FILE","SCORES_SIDE_NOTES","UPLOADING_PORTFOLIO","YOU_WILL_BE_NOTIFIED","SUMMARY_MAIN","SUMMARY_SIDE_NOTES","ADD_INSTRUMENTS","STATUS_ERROR","STATUS_FINISHED","STATUS_UPLOADING","SHOP","CHECKOUT","TERMS_AND_CONDITIONS","READ_AND_ACCEPT","OF_PRODUCT","AND_CONFIRM","TERMS_DOWNLOAD_FAILED","FILE_FORMAT","MAX_SIZE","COLUMNS","UPLOAD_SELECTED","CHANGE_FILE","OUT_OF","STEP_ONE","STEP_TWO","STEP_THREE","BROWSE","NO_FILE_SELECTED","FILE_TOO_LARGE","VIEW_DOCUMENTS","CREATE_COMPANIES","UNLOCK","NEXT","CANCEL","CONFIRM","SAVE","SUBMIT","CONTINUE","ERRORS","CREATE","ADD","COPY","MOVE","SUCCESS","UNEXPECTED_ERROR","OTHER","NO_ITEMS_FOUND","PORTFOLIO_EVENTS","CATEGORY","REGION","NOTIFICATIONS_CENTRE","NO_NOTIFICATIONS","WIDGET","EMPTY","TYPES","ACCOUNT_NOTIFICATION","DOWNLOAD","NEW","READY_TO_DOWNLOAD","SUBSCRIPTIONS","GLOBAL","SEGMENT","VARIOUS","SUBSCRIBED","GET_FREE_TRIAL","GET_STARTED","MORE_INFO","ADD_TO_BASKET","de","fallbackLng","nsSeparator","debug","require","config","Sentry","dsn","ReactDOM","ApolloProvider","client","getElementById","serviceWorker","ready","registration","unregister","outlookTypes","STABLE","NEGATIVE","POSITIVE","CreditRatingError","captureStackTrace","ErrorBoundary","hasError","CALL","ANALYST","SERVICE_CENTRE","activityMappingCreditReview","DOWN","UP","FIRST_SCORE","NO_ACTIVITY","UPGRADE","DOWNGRADE","AFFIRMATION","A_ANOP_VIEW_ROLES_MANAGEMENT","CA_SEARCH_ORDER_ITEMS","CA_VIEW_LEADERBOARD","CA_VIEW_RATING_COVERAGE","CA_VIEW_RECENT_RATINGS","CA_VIEW_RECENT_DOSSIER","CA_RSR_CONFIG","SSO_MASTER_PASSWORD","SSO_VIEW_ORGANISATIONS_LIST","typeToPath","saveAs","respText","worksheet","xlsx","utils","aoa_to_sheet","workbook","book_new","book_append_sheet","writeFile","overview","exportCoveredBonds","countryParam","circle","loaderClasses","FullPageLoader","fetchAnalysts","getOrganisationId","getMethodologyPath","fetchMostOrderedItems","defaultPreferences","innerFilters","valStr","filtersMap","ENTITY_RATING_NEWS","INDUSTRY_RESEARCH","DASHBOARD_NEWS","mapCountriesListObject","classificationStandardCode","classificationType","filterString","encodeURI","instrumentApiData","productsApiData","documentsApiData","entitiesUrlByRatingType","industrySector","entitiesUrl","creditRatingData","esgData","entityApiData","entityApiBasic","reject","fetchEntityDetails","entityCall","productsCall","tokenParams","authParams","moduleRoutes","organisationAdmin","ANALYTICALOPERATIONS_MODULE","RISKANALYSIS_MODULE","adminPermissionsCall","verifyAccess","investorhubPermissionsCall","analyticalOperationsPermissionsCall","riskAnalysisPermissionsCall","adminPermissions","investorhubPermissions","analyticalOperationsPermissions","riskAnalysisPermissions","parsePermissions","ADMIN_MODULE","getUploadUrlByPortfolioType","confirmPortfolio","confirmPortfolioUrl","confirmationData","jobFunctionsParser","clearBlob","lastModifiedDate","paramNames","toggleModeToHttpMethod","OFF","idParamName","investorRelations","fetchCreditReviewChartsData","fetchCreditRatingSummaryTab","fetchCreditReviewSummaryTab","easynumber","overflowX","ShopProductsModal","activeProduct","borderBottomColor","borderBottomStyle","basketButton","infoButton","isFreeSubscriptionModalOpen","setIsFreeSubscriptionModalOpen","isFreeTrialModalOpen","setIsFreeTrialModalOpen","isSubscriptionModalOpen","setIsSubscriptionModalOpen","relatedSubscriptionIds","setRelatedSubscriptionIds","relatedSubscriptions","setRelatedSubscriptions","industryList","getPrice","toggleSubscriptionModal","isOpenById","toggleFreeTrialModal","toggleFreeSubscriptionModal","handleConfirmSubscription","startShopProductFreeSubscriptionAction","renderBuyButton","ShopProductTrialModal","startShopProductFreeTrialAction","ShopProductFreeSubscriptionModal","addShopProductsToBasketAction","getEntity","getEntityShouldRefresh","getEntityDataProducts","getEntityDataProductsL4","l4","getEntityDataProductsL5","getEntityDataProductsConflictOfInterests","conflictOfInterests","getEntityDataProduct","getEntityDataProductPurchased","getEntityDataProductApproved","approved","getEntityDataProductShowRatingRequestInProgress","getEntityDataProductsLevel","getEntityDataProductShowRequestRatingBox","isUltimateParentUser","extraText","dataset","BarChart","showLegend","extraLegendText","xAxes","fontColor","yAxes","tooltipItems","datasetIndex","yLabel","chartRef","Boxplot","xMax","horizScaleFactor","vertScaleFactor","transforms","tickStyle","whiskerStrokeWidth","whiskerStyle","boxStyle","medianStrokeWidth","medianStyle","outlierRadius","outlierStyle","xCenter","x1","x2","y1","whiskerLow","y2","quartile1","quartile3","quartile2","whiskerHigh","outliers","outlier","rx","ry","strokeOpacity","fillOpacity","strokeDasharray","orange","BoxPlot","boxPlotWrapper","scaleX","rangeIcon","medianIcon","valueIcon","prepareDataToDisplay","BoxPlotChart","getMinAndMax","factor","itemStats","outliersTooltip","shouldDrawOnRightSide","startAngle","endAngle","PI","DoughnutChartSvg","containerRef","overlapSize","getPolylinesPoints","rightSide","outerArc","resultPolylines","polylines","prevPolyline","prevBendPos","bendPos","centroid","abs","posA","posB","posC","radius","initialized","d3","attr","drawChart","dataReady","pie","innerRadius","outerRadius","enter","drawLabels","labelTextsPos","maxOverflow","positive","translateContainer","leftItems","rightItems","polylinesPoints","_d","checkOverflow","scoreBox","DoughnutChart","setChart","destroy","defaultColors","defaultLabels","pieGenerator","getEndAnglePosition","cos","sin","GougeChartSvg","getTrasnformedValues","_value","_worst","_average","_best","drawBackgroundChart","drawWorstChart","drawBestChart","drawPrimaryChart","drawAverage","exit","domain","drawPolylines","drawPolylinesWithLabelsWithLabels","distance","lengthFactor","pos","prepareValue","number","GougeChart","pyramid","clipPath","isHighlighted","PyramidChart","divClassName","data-label","data-value","businessCards","endpoint","headersToRemove","redirect404","redirect500","requestUrl","URLSearchParams","PAGE_NOT_FOUND_HREF","PAGE_SERVICE_UNAVAILABLE_HREF","DetailedError","getAnnouncementAction","getRecentUsersAction","portfolioItemTypes","riskSolutions","analyticalOperations","subscriptionsServices","eventsServices","scopeExplorer","SCOPEEXPLORER_MODULE","restrictedSubscriptionRatingsFeature","PRODUCTION","admin","relatedArtifacts","ratingsParser","ratings","preliminaryFlag","notchSuffix","leadAnalyst","committeeChair","ratingAction","ratingClassification","ratingDate","endorsementLocations","issuanceLocation","superLevelParser","chargeable","coi","l1","l2","l3","leadAnalystParser","methodologiesParser","classification","ultimateIssuer","issueCount","ratingNewsCount","researchCount","spv","documentsParser","issuer","bond","currentAmountOutstandingVolume","currentAmountOutstandingDate","currency","issueDate","maturity","maturityPerpetualFlag","seniorityType","outstandingVolume","outstandingDate","newsCentreSettingsSaved","remember","administrativeRights","licencesAndRoles","hasCofaceLicense","userRoles","availableRoles","intersection","issuerName","lei","industryClassification","ultimateIssuerId","ultimateIssuerName","shortTermRating","shortTermRatingTrend","publicRating","subscriptionRating","rsr","addedDate","isBlurred","issueName","issueVolume","itemsCount","dossierItem","itemsTypeCount","modifiedDate","easy_number","VAT","HRN","sectorRiskLevel","creditScore","creditScoreDate","countryRiskAssessment","probabilityOfDefault","probabilityOfDefaultDefinition","creditScoreRow","score_date","monitoring","requestDate","sentifiId","scopeId","entityByRatingTypeParser","getItemTypesToParsers","checkBusinessLine","percent","ratingCoveragePercentagesParser","rated","kebabCase","ratingTypeToString","RESTRICTED_SUBSCRIPTION","PRIVATE","parseIndustriesMapping","obj","industriesMapping","isSearchable","flatten","productCategory","mapCountries","parseRelatedEntities","parseIndustryEntities","searchEntitiesFiltersParser","searchNewsFiltersParser","searchNewsQueryParser","countriesQueryString","parseValue","parseLabels","parseHistory","ratingHistory","ratingsByName","setParticipationType","demand","participationType","upperFirst","summaryCardMapCreditRatingParser","latestRating","orderByPriority","lastRatingAction","firstRating","firstRatingAction","scoreTitle","isPublic","commonCreditRatingParser","fetchSentimentSummary","fetchSentimentAvailability","makeModalsHook","issuerDashboard","shopAvailablePermissions","getEsgCoverageAction","environmentScore","socialScore","governanceScore","companyCountry","getInvestorRelationsAction","CreditReview","historyData","setHistoryData","latestChangeData","setLatestChangeData","setWasRequested","setIsAvailable","contactAdvisorText","scoreHistoryData","latest_change_date","initialScore","first_score","parseDate","latest_change_status","score_over_time_labels","score_over_time_values","dataAvailable","creditReviewDocumentsParser","showCreditReviewSummaryCard","probability_of_default","probability_of_default_definition","country_risk_assessment","datesLabelsCreditReview","creditReviewLevelTypes","CreditReviewEntitiesFilterModal","mapRatingLevels","sectorRiskLevels","businessClimateLevels","countryRiskAssessmentLevels","creditScoreValues","levelStr","spec","pd","creditScoreFrom","creditScoreTo","sectorRiskLevelFrom","sectorRiskLevelTo","businessClimateFrom","businessClimateTo","countryRiskAssessmentFrom","countryRiskAssessmentTo","pendingText","refineSearchLink","monitoringIconEnabled","monitoringIconDisabled","monitoringIcon","DataAvailabilityCell","propTypes","bool","node","CreditReviewEntities","entityShouldRefresh","isSamplePortfolio","pendingMonitoringChange","setPendingMonitoringChange","filtersModalOpen","setFiltersModalOpen","searchFiltersModalOpen","setSearchFiltersModalOpen","setShowSearchFilters","setShowSelectionExtension","requestInProgressTooltip","doRequestConfirmationModalOpen","handleToggleMonitoring","monitoredRenderer","monitored","pending","companyNameRenderer","companyVat","companyHrn","companyLei","companyCityRenderer","creditScoreRenderer","scoreRequest","isDataRequested","probabilityOfDefaultRenderer","probabilityOfDefaultExists","probabilityOfDefaultValue","sectorRiskLevelRenderer","activeLevel","levelType","businessClimateRenderer","countryRiskAssessmentRenderer","purchaseRenderer","scoreDateRenderer","activityRenderer","old_score","EASYNUMBER","popover","CreditReviewLevelsPopover","allLevels","wrapperRef","setLevels","handlePopoverClose","onMouseEnter","PortfolioUploadCreditReview","dossiersData","isDossiersPending","selectedDossier","setSelectedDossier","setDossiers","generateCSV","point","entityPoint","SummaryCardRequestCreditReview","showRatingIsNotAvailable","RequestContent","RequestSuccess","RequestError","downloadServiceWithRetries","generated","parseScore","parseWeight","regionImpactToMapParser","environmentWgt","socialWgt","governanceWgt","totalWgt","regionImpactToTableParser","industryImpactToTableParser","dataLabels","scoreOverviewParser","variable","extCostsToRevenue","supplyChain","downstreamImpact","valueWithoutDownstream","getDataByName","creditRatingAlerts","confidentialAlert","MOVE_UPLOADED_ITEMS_TO_PORTFOLIO","getTime","showError","setShowError","useCreatePortfolio","trim","strict","itemSubmitSuccess","portfolioDescription","updatedPortfolio","newPortfolio","onBlur","getEntityAction","getEntityInstrumentsAction","getEntityRatingNewsAction","getEntityResearchAction","requestEntityRatingAndFetchDataAction","setEntityCreditRatingVisibility","useProductIndicatorStyles","iconAvailable","iconUnavailable","iconUpgrade","nameUnavailable","ShopProductIndicator","IconComponent","CheckIcon","CloseIcon","shopProductUnits","Assessment","ShopProductDetails","productsById","prodsById","getActivationFee","getAmountLabel","productUnit","period","weeks","days","weeksLabel","daysLabel","getTrialPeriod","purchasedButton","addToBasketButton","getDescription","getPriceText","infoContainer","imageBar","imageDivider","subscriptionButtonActive","moreInfoButton","fundAnalysis","isAddingToBasket","setIsAddingToBasket","freeTrialOpen","freeTrial","isEsgAnalysis","isFundAnalysis","isCreditAnalysis","isCheckoutDisabled","cancelled","logoUrl","targetUrl","endsWith","BlurredCompanyCreditRating","CompanyCreditRating","isRatingSubscription","isPublicRating","showConflictOfInterests","showRatingRequestInProgress","showRequestRatingBox","showRatings","getScoreWidgetFooterColor","doneIcon","PortfolioUploadCreditRating","setDossierName","artifactIdsToProducts","artifactIds","subscriptionProducts","subscriptionRatingsFree","subscriptionRatingsChargeable","publicProducts","publicRatings","dossierItems","orderResponse","addToDossierResponse","uploadError","dossierNameExists","onPortfolioCreate","SummaryCardRequestCreditRating","relatedSubscriptionData","onUnlock","showCreditRatingNotAvailableMessage","showRatingContent","creditRatingNotAvailableMessage","SummaryCardLockedRating","NavMenu","performances","setTab","report","performance","methodology","at","depth","navTabs","tabLabel","RequestConfirmationModal","dontShowAgain","InitialSubscriptionInvitiationModal","RenderElement","isRequired","oneOf","arrayOf","string","impactSummaryDistribution","impactSummaryOverallMonetisation","downstream","upstream","companySites","totalNetExternality","impactDistribution","scoreDownstreamFactor","scoreCompanyFactor","scoreSupplyChainFactor","overallMonetization","externalCostsMillionsEur","absoluteNetExternality","externalCostsDividedByRevenue","eCost","sCost","gCost","esgCost","impactReviewScore","companyType","updateDate","DownloadButton","directDownload","LinkButton","setIsActive","isCurrentLocation","generateLink","ButtonComponent","colorSuccess","RoundButton","ChipButton","disableElevation","disableTouchRipple","fetchCoveredBoundsCountries","fetchCoveredBoundsDocuments","fetchCoveredBoundsSeniorityRatings","canRequestEsg","esgRequestState","storefrontSubscriptionType","storefrontPurchased","requiresDataUpload","sigRequested","esgPurchased","esgSentifiHasScore","esgSentifiHasPermission","esgSentifiHasCompany","esgSentifiRequestState","climateLossOrderly","cstOrderly","climateLoss","climateLossDisorderly","cstDisorderly","climateLossHotHouse","cstHotHouse","physicalRiskLossOrderly","physicalRiskLoss","physicalRiskLossDisorderly","physicalRiskLossHotHouse","transitionRiskLossOrderly","transitionRiskLoss","transitionRiskLossDisorderly","transitionRiskLossHotHouse","delay","time","lockOpenIcon","endDate","watchedProduct","isSuccess","setIsSuccess","isPurchased","pendingConfirmation","setPendingConfirmation","creditRatingStatuses","notFound","forbidden","_rect","ULTIMATE_PARENT_USER","ORGANISATION_USER","PERSONAL_ADVISOR","DEMO_USER","PORTAL_USER","analyst","analysts","setAnalysts","requestAnalysts","productLineByAnnoucementType","restrictedArea","lockContainer","announcementId","pressContact","getAnnouncement","setIsRelatedProductsModalOpen","setRelatedSubscriptionData","toggleRelatedProductsModal","entitiesCountriesAndIndustries","subheaderText","publisher","contactPhone","officePhone","legalName","legalForm","itemsForPortfolio","allowedForPortfolio","md","CardHeader","subheader","paragraph","showFollowRow","artifact","isLast","esgCoverageData","isIndustrySearch","filteredIndustry","flatMap","continentName","validated","withRatingOnly","CompanyBasicData","CompanyHeader","yearSelectBoxContainer","yearButton","CompanyPanel","activeModule","onChangeModule","onYearChange","getContentAnchorEl","CompanyTabs","documentsTotal","availableModules","getLabel","indicatorColor","textColor","getInstrumentResearchAction","RatingNews","getInstrumentRatingNewsAction","InstrumentContent","activeTabs","setActiveTabs","css","showDisclaimerModal","setShowDisclaimerModal","toggleDisclaimerModal","companyTab","basicData","getCompanyData","isActiveTab","moduleType","companyModulesConst","searchQueryParams","requestInstrumentRatingAndFetchDataAction","equals","companyInstrumentTabs","getInstrument","getInstrumentAction","_path2","StyledChipButton","ChartLoader","Skeleton","timeRangeSelect","chartOptions","defaultOption","defaultRange","ESGScoresOverTime","selectedChartOption","setSelectedChartOption","setTimeRange","esgTotalLine","esgTotalLineLoading","ESGData","deviationData","mapChartData","esgMainLine","legendItems","CHARTS_COLORS","PALETTE","blue5","blue6","DeviationChart","lineData","dots","yAxisRange","VerticalArrowContainer","VerticalPolygon","VerticalArrowBorderLeft","VerticalArrow","VerticalArrowBorderRight","SentimentScore","SentimentBreakdown","SentimentCharts","SentimentHeader","VerticalDivider","AttentionBuzz","notApplicable","ScoreBreakdownWidget","periodScores","periodScoresLoading","periodIndustryScores","periodIndustryScoresLoading","attentionBuzzBreakdown","attentionBuzzBreakdownLoading","onPeriodChange","negative","neutral","attentionBuzz","iframeWidth","pxToRem","IframeWindow","iframe","SidebarWrapper","SideButton","Chevron","ChevronLeft","Header","EventSidebar","topicId","eventId","onToggle","subDays","subMonths","subYears","getDates","WidgetContent","RadioWidget","ProgressContent","EsgEventsCard","eventsList","activeType","onPick","eventInfo","customHeader","hideCount","groupColors","peers","SectionA","SentimentLabel","Label","Dot","groupType","sentimentRenderer","sentiment","scoreRenderer","rangeRenderer","getTableData","scoreOne","oneMonth","change","oneMonthChange","threeMonth","threeMonthChange","sixMonth","sixMonthChange","oneYear","oneYearChange","oneWeek","oneWeekChange","scoreTwo","rangeScore","minOneYear","maxOneYear","buzzOne","buzzTwo","mentions","influence","ESGEventsSection","eventSection","setEventSection","setSelectedId","envData","envLoading","socData","socLoading","govData","govLoading","companyData","companyLoading","clearSelection","updateFilter","sentifi_id","GeneralInformationWidget","sentify","ImpactReviewWidget","DailyScoreHeaderLoader","ESGDailyScoreSection","scoreForGraph","monthShortName","normalizedY","attentionInPercent","chartHeight","hideYAxis","yDataType","yDomain","tickCount","xLabel","compareTableCols","topCompaniesTableCols","ChartBox","VerticalTitle","HorizontalTitles","ChartContainer","AttentionBuzzChart","colorSet","getInterval","buzzScores","positiveInterval","negativeInterval","normalize","sectorCompanies","industryCompanies","peerCompanies","actualCompany","chartDataParser","ScatterChart","horizontalMiddleLine","verticalMiddleLine","chartWidth","hideXAxis","xAxisRange","tooltipLabels","labelX","labelY","labelYUnit","PeerGroupComparison","chartLoading","compareData","compareLoading","topData","topLoading","companyInfo","sectorInfo","industryInfo","compareTableRows","comparison","todayScore","topCompaniesTableRows","thirtyDaysScore","thirtyDaysChange","todayChange","yearMinScore","yearMaxScore","getTopCompaniesTableData","companyScore","sectorScore","loaderRowsCount","Modal","MoreInfoModal","stickyHeader","term","definition","ESGSentiment","moreInfoModal","ESGSentimentTab","apiUrl","useGetExportUrl","exportUrl","useGetContributionByCountry","useGetContribution","TotalOutputLoss","setSector","setCountry","useGetTotalOutputLoss","exportFile","getRiskData","isSovereign","ValueChainInfoCard","activeIndex","setActiveIndex","onPieEnter","onPieLeave","ValueChainDistribution","setScenario","useGetValueChainDistribution","upstreamData","upstreamSupplyChainInput","upstreamValueAdded","downstreamData","downstreamIntermediateDemandUse","downstreamFinalDemandUse","hasFilters","chips","ClimateChangeRisk","pageData","OutputLoss","useGetTransitionRisk","CarbonIntensity","useGetCarbonIntensity","CarbonTaxEvolution","useGetCarbonTaxEvolution","TransitionRisk","useGetPhysicalRisk","CountryContribution","worldAverage","worldBest","worldWorst","getCountData","SectorContribution","getAbs","getCount","sovereignChips","corporateChips","PhysicalRisk","SummaryCardCST","ClimateStressTest","entityLoading","availabilityLoading","countriesAndSectors","casLoading","initialLoadingState","isLoadingReducer","initialDataState","dataReducer","setStatus","initialStatusState","statusReducer","setSubscribed","initialSubscribedState","subscribedReducer","SectionTitle","onChangeTabs","Instruments","ratingNewsTotal","researchTotal","instrumentsTotal","companyEntityTabs","SummaryCardTab","creditRatingMethodologies","creditRatingDocuments","subscribedState","subscribedDispatch","loadingState","loadingDispatch","dataState","dataDispatch","statusState","statusDispatch","isCSTAvailable","fetchCreditReview","fetchESGSentiment","labelsMapped","parseSentimentData","handleEsgRequested","handleEsgUnlocked","errorCodes","statusIncludesNegativeValue","subscribedIncludesNegativeValue","showCreditRatingSummaryCard","showESGSentimentSummaryCard","showConfidentialLabel","businessCard","CreditRatingTab","EntityContent","esgAvailability","currentEnvironmentModules","setSelectedYear","isPortfolioAvailable","isCreditReviewPDFAvailable","creditReviewPDFURL","isESGVisible","requestStatus","EmptyCustomEntityContent","subregion","isDevelopmentEnvironment","isTestingEnvironment","getCurrentEnvironmentModules","isEmptyCustomCompany","setIsEmptyCustomCompany","portfolioEntityData","setPortfolioEntityData","getEntitySelector","setESGAvailability","useFetchPortfolioItemsByArtifactId","portfolioLoading","portfolioRefresh","esgIsPending","getESGAvailability","impactAvailable","IssuerDashboardHeader","fetchCreditRating","IssuerDashboardResearchWidget","setArtifacts","prevPath","IndustryWidget","setEntities","getEntities","viewAllParams","IssuerDashboardEntitiesWidget","handleViewAllClick","investorRelationsPreviewInfo","entityDetails","setEntityDetails","investorRelationsModalOpen","setInvestorRelationsModalOpen","investorRelationsData","setInvestorRelationsData","allIndustries","investorRelationsLoading","toggleInvestorRelationsModal","getEntityDetails","uniq","listItemPrimaryText","listItemSecondaryTextHighlighted","editProfileModalOpen","setEditProfileModalOpen","fetchedAvatarUrl","setFetchedAvatarUrl","toggleEditProfileModal","avatarUrl","profileData","licenseOrRole","esgCoveragePercentagesParser","companyCount","HomeESGCoverage","HomeRatingCoverage","HomeTrendingRatings","setRatings","HomeRecentRatings","orderByRecentRatings","HomeRecentPortfolios","HomeContactBox","scopeOrganisationType","mockedPersonalAdvisor","personalAdvisor","handleContact","HomeMyOrganisation","HomeSubscriptions","subscriptions","HomeCoveredBondsDocumentsModal","documentsParsed","documentsDisplay","prepareCountriesList","countriesWithNames","showMoreButton","countryCount","widgetHeader","isShowMore","setIsShowMore","fullCountriesList","setFullCountriesList","displayCountriesList","setDisplayCountriesList","documentsModalOpen","setDocumentsModalOpen","getCountriesData","halfwayThrough","_err","panel","ConnectedLogin","StyledTableCell","withStyles","TableCell","useTableCellEmailSectionStyles","useButtonStyles","SettingsTab","buttonClasses","tableCellEmailSectionClasses","TableContainer","Table","TableHead","TableRow","TableBody","isPush","isEmail","tabsLabels","Settings","onNotificationsSettingsChange","availableTabsLabels","parseSettingData","float","saveButton","settingsVisibility","setInitialSettings","isSettingsChanged","setIsSettingsChanged","notificationsSettings","setNotificationsSettings","initialNotificationsSettings","setInitialNotificationsSettings","isNotificationsSettingsChanged","setIsNotificationsSettingsChanged","isNotificationsSettingsLoading","setIsNotificationsSettingsLoading","setPristine","didSettingsChange","setDidSettingsChange","isMounted","_isSettingsChanged","isEqualWith","first","second","_isNotificationsSettingsChanged","currentSettings","emailSettings","updatedSetting","currentId","changedData","getShallowObjectsArrayDifference","type_tag","ratingCoverageData","allIndustriesData","camelCase","searchEntitiesAction","ratingCoverageTabs","initialFilterValues","setInitialFilterValues","currentIndustry","setIsResearchPending","researchArtifacts","setResearchArtifacts","updatedParams","relatedEntitiesIds","buildCountryFilter","countryItem","getInitialSearchResultsModalFilters","restFilters","countryFilters","industryFilters","industryItem","searchResearchAction","searchRatingNewsAction","filtersParams","setInitialFilters","initialModalFilters","setInitialModalFilters","companyModuleChangePending","setCompanyModuleChangePending","isEsg","isCredit","modalFilters","getInitialSearchResultsFilters","getCreditRating","isIsin","searchInstrumentsAction","is_sample","GenerateReportsFooter","todayDate","pageNum","pageTotal","imageWrapper","tilesWrapper","tiles","GenerateReportsHeaderBig","GenerateReportsHeaderSection","GenerateReportsPage","GenerateReportsWrapper","rsrTabs","useQueryParams","pages","setPages","impactScore","setImpactScore","setEsgAvailable","scoreComparison","setScoreComparison","externalCostsComparison","setExternalCostsComparison","setScoreOverview","regionImpact","setRegionImpact","industryImpact","setIndustryImpact","distribution","setDistribution","setImpactOverview","ranking","setRanking","setStats","industryData","setIndustryData","countryData","setCountryData","showBankLendingSection","setShowBankLendingSection","actualDate","getEsgAvailable","getEntityDataESGScore","checkIfBank","getImpactScore","total_score","getScoreComparison","peergroupComparisonParser","getRegionImpact","getIndustryImpact","getDistribution","getRanking","getExternalCostsComparison","fetchPieChartData","fetchImpactData","_showBankLendingSection","ImpactTableData","ImpactMapData","esgUnavailable","disclaimerDocument","emailPattern","AddUserRSR","propUser","setUser","setEmail","clear","approvedRatings","submitHandler","AddUserVariants","INVITE","responseCode","mail","validateEmail","noOptionsText","col","renderUserBox","UsersList","isAddUserModalOpen","setIsAddUserModalOpen","setAddUserVariant","addUserVariant","toggleAddUserRSRModal","editUserHandler","userAddedHandler","accessibleRatings","changed","SetContractTypeModal","selectedContractType","setSelectedContractType","contractTypes","ContractTypes","REQUESTED","SOLICITED","setContractType","RatingsList","selectedRating","setSelectedRating","isContractModalOpen","setIsContractModalOpen","ISSUE","ISSUER","sortComparator","numberOfUsers","entityRatingType","showRatingDetails","showContractTypeModal","fetchRatings","deactivateAllUsers","isRefreshRequired","tabSelected","views","CoveredBondsList","coveredBonds","setCoveredBonds","setTableData","setFilters","availableCountries","setAvailableCountries","countryRenderer","entityRenderer","valueRenderer","fetchCoveredBondsList","coveredBond","selectedCountry","seniorityTypes","lockCountry","setCountriesList","allTotal","setAllTotal","fetchCountriesList","initialCountry","experimentalModules","companyInstrumentModules","areExperimentalModulesAvailable","companyAvailableRating","toPercentage","peergroupScoreWorst","peergroupScoreAvg","peergroupScoreBest","peergroupImpactAvg","peergroupImpactBest","peergroupImpactWorst","modals","curr","unlockContainer","firstReview","lastReviewAction","treeParent","treeParentPDF","mobileTreeParent","treeChild","treeLeft","treeRight","treeConnector","scoreText","scoreTextLeft","scoreTextLeftTotal","scoreTextBankTotal","scoreWrapper","scoreWrapperTotal","scoreWrapperTotalBank","triangleBottom","triangleMiddle","progressWrapper","mobileFontSize","totalExtCosts","weightBoxReport","triangleMiddleTotal","totalExtCostsTitle","descriptionBox","scoreTextBank","containerBank","withMargin","externalCostWrapper","triangleBottomScore","weightBoxTop","roundedExtCostsToRevenue","legendRow","newIndustries","downloadBase64File","downloadLink","click","HorizontalBarChart","graphLabel","colorActive","environmentalCostCountry","setEnvironmentalCostCountry","socialCostCountry","setSocialCostCountry","governanceCostCountry","setGovernanceCostCountry","isAbsolute","setIsAbsolute","environmentalCostIndustry","setEnvironmentalCostIndustry","socialCostIndustry","setSocialCostIndustry","governanceCostIndustry","setGovernanceCostIndustry","showChart","environmentalCost","socialCost","governanceCost","mapCountryDatasets","mapIndustryDatasets","countryOptions","indexAxis","animation","barThickness","stacked","callback","indostryOptions","portfolioUploadSteps","SELECT_TYPE","changeDirection","Intl","NumberFormat","minimumFractionDigits","generatedWord","txt","substr","changedColumn","unsafeHtml","sanitized","sanitizeReact","allowedTags","allowedAttributes","allowedSchemes","transformTags","tagName","attribs","sanitize","offsetTop","resolve","reader","FileReader","readAsDataURL","onload","onerror","productAvailable","productItem","allowedArtifactTypes","arr","n","fistDate","lastDate","resultList","monthList","getFullYear","setMonth","initialData","changedDifference","differenceWith","initialDifference","gql","DELETE_PORTFOLIOS","ADD_PORTFOLIO_ITEM","COPY_PORTFOLIO_ITEMS","COPY_ALL_PORTFOLIO_ITEMS","MOVE_PORTFOLIO_ITEMS","MOVE_ALL_PORTFOLIO_ITEMS","DELETE_ENTITIES","TOGGLE_SIG_MONITORING","DELETE_INSTRUMENTS","DELETE_UPLOAD","MOVE_INSTRUMENTS","MOVE_ALL_INSTRUMENTS","COPY_INSTRUMENTS","COPY_ALL_INSTRUMENTS","ADD_FUNDS","DELETE_FUNDS","MOVE_FUNDS","MOVE_ALL_FUNDS","COPY_FUNDS","COPY_ALL_FUNDS","ADD_PORTFOLIO_RATING_NEWS","COPY_PORTFOLIO_RATING_NEWS","COPY_ALL_PORTFOLIO_RATING_NEWS","MOVE_PORTFOLIO_RATING_NEWS","MOVE_ALL_PORTFOLIO_RATING_NEWS","DELETE_PORTFOLIO_RATING_NEWS","ADD_RESEARCH_ITEMS","COPY_RESEARCHES","COPY_ALL_RESEARCHES","MOVE_RESEARCHES","MOVE_ALL_RESEARCHES","DELETE_RESEARCH_ITEMS","ADD_EVENTS","COPY_EVENTS","COPY_ALL_EVENTS","MOVE_EVENTS","MOVE_ALL_EVENTS","DELETE_EVENTS","GET_PORTFOLIOS_QUERY","GET_PORTFOLIO_QUERY","GET_ENTITIES_QUERY","GET_ENTITIES_QUERY_BY_ARTIFACT_ID","GET_INSTRUMENTS_QUERY","GET_FUNDS_QUERY","GET_RATING_NEWS_QUERY","GET_RESEARCH_QUERY","GET_EVENTS_QUERY","GET_UPLOADS_QUERY","useAddEntities","useAddInstruments","useAddFunds","useAddRatingNews","useAddToResearch","useAddEvents","useAddToPortfolio","addEntities","addInstruments","addFunds","addToResearch","addRatingNews","addEvents","useCopyEntities","useCopyInstruments","useCopyFunds","useCopyRatingNews","useCopyResearchItems","useCopyEvents","useCopyPortfolioItems","copyEntities","copyInstruments","copyFunds","copyRatingNews","copyResearches","copyEvents","useCopyAllEntities","useCopyAllInstruments","useCopyAllFunds","useCopyAllRatingNews","useCopyAllResearchItems","useCopyAllEvents","useCopyAllPortfolioItems","copyAllEntities","copyAllInstruments","copyAllFunds","copyAllRatingNews","copyAllResearches","copyAllEvents","useMoveEntities","useMoveInstruments","useMoveFunds","useMoveRatingNews","useMoveResearchItems","useMoveEvents","useMovePortfolioItems","moveEntities","moveInstruments","moveFunds","moveRatingNews","moveResearches","moveEvents","useMoveAllEntities","useMoveAllInstruments","useMoveAllFunds","useMoveAllRatingNews","useMoveAllResearchItems","useMoveAllEvents","useMoveAllPortfolioItems","moveAllEntities","moveAllInstruments","moveAllFunds","moveAllRatingNews","moveAllResearches","moveAllEvents","copyPortfolioItems","copyAllPortfolioItems","movePortfolioItems","moveAllPortfolioItems","add","copy","copy_all","move","move_all","termsLabel","userSelect","termsDocument","termsChecked","setTermsChecked","differenceInCalendarDays","RatingTypes","getCreditReview","sortCompare","BLANK","selectedConfirmation","setSelectedConfirmation","SENT","setConfirmationHandler","protocols","http","websocket","host","REACT_APP_API_HOST","csvData","caseSensitive","ratingTrends","useTrendStyles","TrendIcon","trend","trendClasses","getRatingTrendClass","RequestRatingButton","pendingRequest","setPendingRequest","issueId","ratingLabel","issuerId","datePicker","currenciesOptions","couponRangeSliderValues","issueVolumeRangeSliderValues","couponRange","issueVolumeRange","setSeniorityTypes","fetchSeniorityTypes","seniorityTypesData","handleSelectWithSearchChange","handleDateChange","DatePicker","disableToolbar","KeyboardButtonProps","toISOString"],"mappings":"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KAAcC,mBACvB9kD,KAAMylD,MAGR,CACEh7D,KAAM,8CACN0S,UAAWkoD,IACXf,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,4FACN0S,UAAWonD,IACXD,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,8DACN0S,UAAWqnD,IACXF,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,kEACN0S,UAAWonD,IACXD,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,oCACN0S,UAAWsnD,IACXH,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,2CACN0S,UAAWqnD,IACXF,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,+CACN0S,UAAWonD,IACXD,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,iBACN0S,UAAWuoD,IACXpB,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAIR,CACEh7D,KAAM,sGACN0S,UAAWonD,IACXD,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,wEACN0S,UAAWqnD,IACXF,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,4EACN0S,UAAWonD,IACXD,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,wDACN0S,UAAWkoD,IACXf,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,8CACN0S,UAAWsnD,IACXH,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,yDACN0S,UAAWonD,IACXD,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,qDACN0S,UAAWqnD,IACXF,QAASO,KAAcC,mBACvB9kD,KAAMylD,MAER,CACEh7D,KAAM,2BACN0S,UCnOyB,WAAO,IAAD,EACjC,EAA6BkpB,cAArB+E,mBAAR,MAAsB,GAAtB,EACQ13B,EAAMC,cAAND,EACF6M,EAAWC,cACXnC,E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","file":"static/js/main.e7eec452.chunk.js","sourcesContent":["import { DocumentNode, useMutation } from '@apollo/client';\n\nexport type DefaultResponse = {\n [key: string]: {\n message: string;\n } | null;\n};\n\nexport const makeMutation = <Variables, Response = DefaultResponse>(\n mutation: DocumentNode,\n) => () => {\n const [mutate] = useMutation<Response, Variables>(mutation);\n\n return (variables: Variables) => mutate({ variables });\n};\n\nexport const getResponseMessage = (\n response: DefaultResponse | null | undefined,\n fallback: string,\n) => Object.values(response || {})[0]?.message || fallback;\n","import qs from 'qs';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { logoutAction } from 'store/login/loginAction';\nimport { API_URL } from 'utils';\nimport { AuthStore, AuthData } from 'modules/common/PortfolioManager/types';\nimport { ErrorMessage } from 'shared/types/errorMessage';\nimport { FUNDS_URL, NAVIGATOR_URL } from '@scope/scope-one-common/utils/apiUrl';\n\nenum Status {\n AUTH_TOKEN_EXPIRED = 401,\n}\n\nexport type ApiPrefix = 'api' | 'navigator' | 'fund-analysis';\n\nexport type RequestOptions<P = any> = RequestInit & {\n /* Request body, that will be converted to JSON */\n payload?: P;\n\n /* Expected response type, 'json' by default. */\n response?: 'json' | 'blob' | 'text' | 'raw';\n\n /* URL query params, joined with 'qs'. */\n params?: Record<string, any>;\n\n /* Custom error message */\n errorMessage?: string;\n\n /* Sets api prefix to proxy for given module */\n apiPrefix?: ApiPrefix;\n\n /* Prevents logout action after 401 code returned */\n disableLogout?: boolean;\n\n /* Disables refetch on params change. Requires `refetch` to be called manually. */\n disableAutofetch?: boolean;\n};\n\nexport const getErrorMessage = (error: string) => {\n try {\n return JSON.parse(error).message;\n } catch {\n return 'Something went wrong.';\n }\n};\n\nexport const useAuth = () => useSelector<AuthStore, AuthData>(({ auth }) => auth.data);\n\nexport const useApi = () => {\n const { token } = useAuth();\n const dispatch = useDispatch();\n\n const defaultHeaders = {\n 'Content-Type': 'application/json',\n authorization: `Bearer ${token}`,\n };\n\n const makeMethod =\n (method: string) =>\n <R, P = void>(url: string, options: RequestOptions<P> = {}): Promise<R> => {\n const {\n payload,\n response = 'json',\n params,\n errorMessage,\n headers,\n apiPrefix = 'api',\n disableLogout,\n } = options;\n\n const body = payload ? { body: JSON.stringify(payload) } : {};\n\n const queryParams = qs.stringify(params, { skipNulls: true });\n\n const query = queryParams ? `?${queryParams}` : '';\n\n const init = {\n headers: {\n ...defaultHeaders,\n ...headers,\n },\n method,\n ...body,\n };\n\n const prefixes: Record<ApiPrefix, string> = {\n api: API_URL,\n navigator: NAVIGATOR_URL,\n 'fund-analysis': FUNDS_URL,\n };\n\n return fetch(`${prefixes[apiPrefix]}${url}${query}`, init).then((res) => {\n if (!disableLogout && res.status === Status.AUTH_TOKEN_EXPIRED) {\n dispatch(logoutAction);\n }\n\n if (!res.ok) {\n return res.text().then((err) => {\n throw new Error(\n JSON.stringify({\n code: res.status,\n status: res.statusText,\n message: errorMessage || getErrorMessage(err),\n } as ErrorMessage),\n );\n });\n }\n\n if (response === 'raw') return res;\n if (response === 'blob') return res.blob().then(URL.createObjectURL);\n if (response === 'text') return res.text();\n return res.json();\n });\n };\n\n return {\n get: makeMethod('GET'),\n post: makeMethod('POST'),\n put: makeMethod('PUT'),\n patch: makeMethod('PATCH'),\n del: makeMethod('DELETE'),\n upload: makeMethod('UPLOAD'),\n };\n};\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useState, useEffect } from 'react';\nimport isEqual from 'lodash/isEqual';\nimport { useToasts } from '@scope/scope-one-ui/core/Messages/context';\nimport { ErrorMessage } from 'shared/types/errorMessage';\nimport { RequestOptions, useApi } from './useApi';\n\nexport const useGet = <T>(url: string, options?: RequestOptions<void>) => {\n const { get } = useApi();\n\n /* Local request state */\n const [path, setPath] = useState(url);\n const [requestOptions, setRequestOptions] = useState(options);\n const [data, setData] = useState<T>();\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<ErrorMessage | null>(null);\n\n /* Requests the data, managing loading state and error if thrown */\n const refetch = () => {\n setLoading(true);\n get<T>(path, requestOptions)\n .then((res) => {\n setData(res);\n setError(null);\n })\n .catch((err) => setError(JSON.parse(err.message)))\n .finally(() => setLoading(false));\n };\n\n /* Calls request and updates local state when parameters change */\n useEffect(() => {\n if (requestOptions?.disableAutofetch) {\n return;\n }\n\n refetch();\n }, [path, requestOptions]);\n\n /* Checks the equality between url and options, and updates state if different */\n useEffect(() => {\n setPath(url);\n\n if (!isEqual(options, requestOptions)) {\n setRequestOptions(options);\n }\n }, [url, options]);\n\n return { data, loading, error, refetch };\n};\n\nconst makeRestHook =\n (method: 'get' | 'post' | 'put' | 'del') =>\n <P, R = void>(func: (payload: P) => { url: string; options?: RequestOptions }) =>\n () => {\n const api = useApi();\n const { error } = useToasts();\n\n return (payload: P) => {\n const { url, options } = func(payload);\n\n return api[method]<R, P>(url, options).catch((err) => {\n const stack: ErrorMessage = JSON.parse(err.message);\n error({\n title: stack.status,\n content: stack.message,\n });\n throw err;\n });\n };\n };\n\nexport const usePost = makeRestHook('post');\n\nexport const usePut = makeRestHook('put');\n\nexport const useDelete = makeRestHook('del');\n\nexport const useFetch = makeRestHook('get');\n","import { createSelector } from 'reselect';\nimport { flattenIndustries, regionsParser } from 'shared/parsers';\nimport { sortBy } from 'lodash';\n\nconst getShared = ({ shared }) => shared;\nexport const getAllIndustries = createSelector(getShared, ({ industries }) => industries);\n\nexport const getRelatedIndustries = createSelector(\n getShared,\n ({ relatedIndustries }) => relatedIndustries,\n);\nexport const getAllIndustriesData = createSelector(getAllIndustries, ({ data }) => data);\nexport const getESGCoverage = createSelector(getShared, ({ esgCoverage }) => esgCoverage);\nexport const getRegions = createSelector(getShared, ({ regions }) => regions);\n\nexport const getParsedRegions = createSelector(getRegions, regions =>\n regions.isPending ? regions : { ...regions, data: regionsParser(regions.data) },\n);\n\nexport const getSearchableRegions = createSelector(getRegions, regions =>\n regions.isPending ? regions : { ...regions, data: regionsParser(regions.data, true) },\n);\n\nexport const getFlattenedIndustries = createSelector(getAllIndustriesData, industries =>\n flattenIndustries(industries),\n);\n\nexport const getSortedFlattenedIndustries = createSelector(getFlattenedIndustries, data =>\n sortBy(data, ['industryName', 'name']),\n);\n\nexport const getSearchbleIndustries = createSelector(getAllIndustriesData, industries =>\n flattenIndustries(industries, true),\n);\n\nexport const getFilterableIndustries = createSelector(\n getRelatedIndustries,\n getFlattenedIndustries,\n (relatedIndustries, flattenedIndustries) =>\n relatedIndustries.reduce((extendedIndustries, industryName) => {\n const industry = flattenedIndustries.find(({ name }) => name === industryName);\n if (industry) extendedIndustries.push(industry);\n return extendedIndustries;\n }, []),\n);\n\nexport const getIndustryByName = industryName =>\n createSelector(getFlattenedIndustries, industries =>\n industries.find(({ name }) => name === industryName),\n );\n\nexport const getSortedFilterableIndustries = createSelector(getFilterableIndustries, data =>\n sortBy(data, ['industryName', 'name']),\n);\n\nexport const getCurrentIndustry = (code, industryCode) =>\n createSelector(getFlattenedIndustries, industries =>\n industries.find(({ code: c, industryCode: ic }) => code === c && industryCode === ic),\n );\n\nconst getSearchResult = ({ searchResult }) => searchResult;\nexport const getSearchResultEntities = createSelector(getSearchResult, ({ entities }) => entities);\nexport const getSearchResultEntitiesByRatingType = ratingType =>\n createSelector(getSearchResultEntities, entities => entities.byRatingType[ratingType]);\n\nconst getNewsFeed = ({ newsFeed }) => newsFeed;\nexport const getNewsFeedShouldRefresh = createSelector(\n getNewsFeed,\n ({ shouldRefresh }) => shouldRefresh,\n);\nexport const getNewsFeedPreferences = createSelector(getNewsFeed, ({ preferences }) => preferences);\nexport const getNewsFeedPreferencesIsPending = createSelector(\n getNewsFeedPreferences,\n ({ isPending }) => isPending,\n);\n\nconst getSharedQuestionnaire = createSelector(getShared, ({ questionnaire }) => questionnaire);\nexport const getSharedQuestionareShow = createSelector(getSharedQuestionnaire, ({ show }) => show);\n","export const orderTypes = {\n INSTRUMENT: 'ISSUE',\n ENTITY: 'ISSUER',\n SIG_ENTITY: 'SIG_ISSUER',\n};\n","import React, { FC } from 'react';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\n\nimport { Title } from 'ui';\nimport clsx from 'clsx';\n\ntype HeadSquareProps = {\n title?: string;\n subtitle?: string;\n subtitleTooltip?: string;\n customScore?: boolean;\n};\n\nconst useStyles = makeStyles(theme => ({\n root: {\n backgroundColor: customScore =>\n customScore ? theme.palette.custom.gray : theme.palette.primary.main,\n padding: theme.spacing(3, 1.5),\n color: '#fff',\n textAlign: 'center',\n minHeight: 180,\n height: '100%',\n flexDirection: 'column',\n position: 'relative',\n },\n customScore: {\n backgroundColor: theme.palette.custom.slightlyDesaturatedBlue,\n },\n title: {\n color: '#fff !important',\n },\n subtitle: {\n fontSize: '0.75rem',\n },\n white: {\n color: theme.palette.custom.white,\n },\n}));\nconst HeadSquare: FC<HeadSquareProps> = ({\n title,\n subtitle,\n subtitleTooltip = '',\n customScore = false,\n children,\n}) => {\n const classes = useStyles(customScore);\n\n return (\n <Box\n className={classes.root}\n display=\"flex\"\n flexDirection=\"column\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n <Box height={20}>\n {title && (\n <Title className={classes.title} align=\"center\">\n {title}\n </Title>\n )}\n </Box>\n\n <Box>{children}</Box>\n\n <Box height={20}>\n {subtitle && (\n <Title\n className={clsx(classes.title, classes.subtitle)}\n align=\"center\"\n tooltip={subtitleTooltip}\n tooltipClassName={classes.white}\n >\n {subtitle}\n </Title>\n )}\n </Box>\n </Box>\n );\n};\n\nexport default HeadSquare;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport isEmpty from 'lodash/isEmpty';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport { grey } from '@mui/material/colors';\nimport Typography from '@mui/material/Typography';\nimport List from '@mui/material/List';\nimport Card from '@mui/material/Card';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport pickBy from 'lodash/pickBy';\n\nimport { CollapseCard, Title, RatingScale, Loader } from 'ui';\nimport { PyramidChart } from 'ui/Charts';\nimport { SummaryCardDocuments } from 'modules/common/SummaryCard';\nimport {\n summaryCardTablevels,\n datesLabels as defaultDatesLabels,\n generalInformationLabels,\n additionalInformationLabels,\n} from 'shared/constants/summaryTab';\nimport { summaryCardLevelsMapping } from 'shared/mappings';\n\nconst useStyles = makeStyles((theme) => ({\n head: {\n '& > .MuiGrid-item': {\n padding: `0 ${theme.spacing(2)}`,\n margin: `${theme.spacing(2)} 0`,\n borderRight: `2px solid ${grey[200]}`,\n },\n '& > .MuiGrid-item:last-child, & > .MuiGrid-item:first-child': {\n border: 'none',\n },\n },\n headSquare: {\n '&.MuiGrid-item': {\n padding: 0,\n margin: 0,\n },\n },\n content: {\n '& > .MuiGrid-item': {\n padding: `0 ${theme.spacing(2)}`,\n margin: `${theme.spacing(2)} 0`,\n borderRight: `2px solid ${grey[200]}`,\n },\n '& > .MuiGrid-item:last-child': {\n border: 'none',\n },\n },\n latestChange: {\n flexDirection: 'column',\n justifyContent: 'space-between',\n height: '100%',\n textAlign: 'center',\n },\n dataQuality: {\n flexDirection: 'column',\n gridGap: theme.spacing(4),\n height: '100%',\n textAlign: 'center',\n },\n dataQualityDisplay: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gridGap: theme.spacing(1),\n },\n generalInformationList: {\n padding: 0,\n '& li': {\n padding: 0,\n },\n },\n generalInformationListIcon: {\n color: theme.palette.primary.main,\n },\n level: {\n fontWeight: 500,\n display: 'flex',\n fontSize: 20,\n justifyContent: 'space-between',\n paddingBottom: theme.spacing(2),\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(4),\n borderBottom: `1px dashed ${grey[400]}`,\n },\n infoData: {\n display: 'flex',\n justifyContent: 'space-between',\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(1),\n '& > div:nth-child(2)': {\n fontWeight: 500,\n },\n },\n titleMarginBottom: {\n marginBottom: theme.spacing(2),\n },\n titleMarginTopBottom: {\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n}));\nconst useListItemIconStyles = makeStyles({\n root: {\n minWidth: 35,\n },\n});\n\nconst SummaryCard = ({\n isOpen = false,\n isLoading,\n className,\n headSquare,\n main = undefined,\n dataQuality,\n history,\n data,\n documentHandling = undefined,\n onlyHeader = false,\n ...props\n}) => {\n const classes = useStyles();\n const listItemIconClasses = useListItemIconStyles();\n const { t } = useTranslation();\n\n if (isLoading) {\n return <Loader center />;\n }\n\n const {\n latestChange,\n generalInformation,\n generalInformationList,\n additionalInformation: initialAdditionalInformation,\n endorsementList,\n levels,\n dates,\n datesLabels = defaultDatesLabels,\n documents,\n ratingScalesData,\n } = data;\n\n const level = summaryCardLevelsMapping[levels.level];\n const levelToDisplay = level + 1;\n\n const additionalInformation = pickBy(initialAdditionalInformation);\n\n const head = (\n <Grid container className={classes.head}>\n <Grid item xs={2} className={classes.headSquare}>\n {headSquare}\n </Grid>\n <Grid item xs={3}>\n <Title>{t('History')}</Title>\n <Grid container justifyContent=\"center\">\n <Grid item>{history}</Grid>\n </Grid>\n </Grid>\n {dataQuality ? (\n <Grid item xs={3}>\n <Grid container className={classes.dataQuality}>\n <Grid item>\n <Title align=\"center\">{t('Data quality')}</Title>\n </Grid>\n <Grid item className={classes.dataQualityDisplay}>\n <CheckCircleIcon className={classes.generalInformationListIcon} />\n <Typography variant=\"h5\">{dataQuality.quality}</Typography>\n </Grid>\n </Grid>\n </Grid>\n ) : (\n <Grid item xs={3}>\n <Grid container className={classes.latestChange}>\n <Grid item>\n <Title align=\"center\">{t('Latest change')}</Title>\n </Grid>\n <Grid item>\n <Typography variant=\"h5\">{latestChange.status || t('New')}</Typography>\n </Grid>\n <Grid item>\n <Typography variant=\"subtitle1\">{latestChange.date}</Typography>\n </Grid>\n </Grid>\n </Grid>\n )}\n <Grid item xs={4}>\n <Title>{t('General information')}</Title>\n <List className={classes.generalInformationList}>\n {generalInformationList.map((element) => (\n <ListItem key={element} disableGutters>\n <ListItemIcon classes={listItemIconClasses}>\n <CheckCircleIcon className={classes.generalInformationListIcon} />\n </ListItemIcon>\n <ListItemText>{element}</ListItemText>\n </ListItem>\n ))}\n </List>\n </Grid>\n </Grid>\n );\n\n if (onlyHeader) {\n return <Card className={className}>{head}</Card>;\n }\n\n return (\n <CollapseCard head={head} isOpen={isOpen} className={className} {...props}>\n {main}\n <Grid container className={classes.content}>\n <Grid item xs={5}>\n <Title\n tooltip=\"The graph describes the composition of Scope's analytical value chain.\"\n bottomLine\n >\n {t('Analytical depth')}\n </Title>\n <Grid container className={classes.level}>\n <Grid item>\n {t('Level')} {levelToDisplay} ({levels.level})\n </Grid>\n <Grid item>{levels.title}</Grid>\n </Grid>\n <PyramidChart data={summaryCardTablevels} highlight={level} />\n </Grid>\n <Grid item xs={4}>\n {dates && (\n <>\n <Title bottomLine className={classes.titleMarginBottom}>\n {t('Dates')}\n </Title>\n {Object.keys(dates).map((key) => (\n <Grid container key={key} className={classes.infoData}>\n <Grid item>{datesLabels[key]}</Grid>\n <Grid item>{dates[key] || t('Not available')}</Grid>\n </Grid>\n ))}\n </>\n )}\n {endorsementList && endorsementList.length ? (\n <>\n <Title bottomLine className={classes.titleMarginTopBottom}>\n {t('Endorsements')}\n </Title>\n {endorsementList.map(({ label, value }) => (\n <Grid container key={value} className={classes.infoData}>\n <Grid item>{label}</Grid>\n <Grid item>{value}</Grid>\n </Grid>\n ))}\n </>\n ) : null}\n {!isEmpty(generalInformation) ? (\n <>\n <Title bottomLine className={classes.titleMarginTopBottom}>\n {t('General Information')}\n </Title>\n {Object.keys(generalInformation).map((key) => (\n <Grid container key={key} className={classes.infoData}>\n <Grid item>{generalInformationLabels[key]}</Grid>\n <Grid item>{generalInformation[key]}</Grid>\n </Grid>\n ))}\n </>\n ) : null}\n {!isEmpty(additionalInformation) ? (\n <>\n <Title bottomLine className={classes.titleMarginTopBottom}>\n {t('Additional Information')}\n </Title>\n {Object.keys(additionalInformation).map((key) => (\n <Grid container key={key} className={classes.infoData}>\n <Grid item>{additionalInformationLabels[key]}</Grid>\n <Grid item>{additionalInformation[key]}</Grid>\n </Grid>\n ))}\n </>\n ) : null}\n <Title bottomLine className={classes.titleMarginTopBottom}>\n {t('Documents')}\n </Title>\n <SummaryCardDocuments documentTypes={documents} documentHandling={documentHandling} />\n </Grid>\n <Grid item xs={3}>\n <Title bottomLine className={classes.titleMarginBottom}>\n {t('Applicable scale')}\n </Title>\n <Grid container justifyContent=\"center\">\n <Grid item xs={5}>\n <RatingScale data={ratingScalesData} />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </CollapseCard>\n );\n};\n\nSummaryCard.defaultProps = {\n isOpen: false,\n isLoading: false,\n className: undefined,\n main: undefined,\n history: undefined,\n documentHandling: undefined,\n dataQuality: undefined,\n};\n\nSummaryCard.propTypes = {\n headSquare: PropTypes.node.isRequired,\n isOpen: PropTypes.bool,\n isLoading: PropTypes.bool,\n className: PropTypes.string,\n main: PropTypes.node,\n history: PropTypes.node,\n documentHandling: PropTypes.object,\n dataQuality: PropTypes.shape({\n quality: PropTypes.string,\n }),\n data: PropTypes.shape({\n latestChange: PropTypes.shape({\n date: PropTypes.string,\n status: PropTypes.string,\n }),\n generalInformationList: PropTypes.arrayOf(PropTypes.string),\n endorsementList: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n value: PropTypes.string,\n }),\n ),\n levels: PropTypes.shape({\n level: PropTypes.string,\n title: PropTypes.string,\n }),\n dates: PropTypes.object,\n datesLabels: PropTypes.object,\n generalInformation: PropTypes.object,\n additionalInformation: PropTypes.object,\n documents: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string,\n path: PropTypes.string,\n publicationDate: PropTypes.string,\n title: PropTypes.string,\n options: PropTypes.object,\n retries: PropTypes.number,\n }),\n ),\n ratingScalesData: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n tooltip: PropTypes.string,\n }),\n ),\n }).isRequired,\n};\n\nexport default SummaryCard;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { Grid, Avatar, Typography } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\n\nimport { fetchUserImage } from 'services';\n\nconst useStyles = makeStyles(() => ({\n avatar: {\n width: 100,\n height: 100,\n },\n name: {\n fontWeight: 'bold',\n },\n}));\n\nconst SummaryCardBusinessCard = ({ id, name, position }) => {\n const classes = useStyles();\n const [imageUrl, setImageUrl] = useState();\n\n useEffect(() => {\n const fetchImage = async () => {\n try {\n setImageUrl(await fetchUserImage(id));\n } catch (e) {\n setImageUrl(undefined);\n }\n };\n\n fetchImage();\n }, [id]);\n\n return (\n <Grid container alignItems=\"center\" spacing={4}>\n <Grid item>\n <Avatar className={classes.avatar} src={imageUrl} />\n </Grid>\n <Grid item>\n <Typography variant=\"h6\" className={classes.name}>\n {name}\n </Typography>\n {position ? <Typography variant=\"body1\">{position}</Typography> : null}\n </Grid>\n </Grid>\n );\n};\n\nSummaryCardBusinessCard.defaultProps = {\n position: undefined,\n};\n\nSummaryCardBusinessCard.propTypes = {\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n position: PropTypes.string,\n};\n\nexport default SummaryCardBusinessCard;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@mui/styles';\nimport ChevronRightIcon from '@mui/icons-material/ChevronRight';\nimport PictureAsPdfIcon from '@mui/icons-material/PictureAsPdf';\nimport { Grid, Button, Typography } from '@mui/material';\n\nimport { Loader } from 'ui';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { downloadAsyncService, DownloadStatus } from 'services/download/downloadAsyncService';\nimport clsx from 'clsx';\n\nconst useStyles = makeStyles(theme => ({\n item: {\n marginTop: theme.spacing(1),\n display: 'flex',\n justifyContent: 'flex-between',\n '&:last-child': {\n borderWidth: 0,\n },\n },\n name: {\n display: 'flex',\n alignItems: 'center',\n },\n button: {\n textTransform: 'none',\n },\n icon: {\n width: 20,\n height: 20,\n marginRight: 5,\n },\n active: {\n borderWidth: '0 0 1px 0',\n borderStyle: 'dashed',\n borderColor: theme.palette.text.primary,\n },\n}));\n\nconst SummaryCardDocuments = ({ documentTypes, documentHandling, disabled, className }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const [isPending, setIsPending] = useState(false);\n const [filesPending, setFilesPending] = useState([]);\n const { info } = useSnackbar();\n\n const throwFetchError = (message = null) =>\n dispatch(\n addNotificationAction({\n variant: 'error',\n message: message || t('Failed to get document. Please try again or contact.'),\n }),\n );\n\n const handleDownloadNotReady = (message = 'Document not ready') => info(message);\n\n const handleDownload = async ({ path, name, options, retries }) => {\n if (path === 'documentsModal' && documentHandling) {\n documentHandling.defaultDocument(name);\n documentHandling.toggleModal();\n } else {\n setIsPending(true);\n setFilesPending([...filesPending, path]);\n\n const result = await downloadAsyncService({\n path,\n name,\n options,\n retries,\n onError: throwFetchError,\n onDownloadNotReady: handleDownloadNotReady,\n });\n if (result !== DownloadStatus.PENDING) {\n setFilesPending(filesPending.filter(value => value !== path));\n }\n setIsPending(false);\n }\n };\n\n return <>\n {documentTypes.map(item => (\n <Grid\n container\n justifyContent=\"space-between\"\n className={clsx(\n classes.item,\n {\n [classes.active]: !filesPending.includes(item.path),\n },\n className,\n )}\n key={item.title}\n >\n <Grid item className={classes.name}>\n <Typography variant=\"body2\">{item.title}</Typography>\n </Grid>\n <Grid item>\n <Button\n onClick={() => handleDownload(item)}\n className={classes.button}\n disabled={filesPending.includes(item.path) || disabled}\n >\n <PictureAsPdfIcon className={classes.icon} />\n {t('View')}\n <ChevronRightIcon />\n </Button>\n </Grid>\n </Grid>\n ))}\n {isPending && <Loader center />}\n </>;\n};\n\nSummaryCardDocuments.defaultProps = {\n className: null,\n documentHandling: undefined,\n disabled: false,\n};\n\nSummaryCardDocuments.propTypes = {\n className: PropTypes.string,\n documentTypes: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n path: PropTypes.string.isRequired,\n options: PropTypes.object,\n retries: PropTypes.number,\n }),\n ).isRequired,\n documentHandling: PropTypes.object,\n disabled: PropTypes.bool,\n};\n\nexport default SummaryCardDocuments;\n","import React from 'react';\nimport { Line } from 'react-chartjs-2';\nimport PropTypes from 'prop-types';\nimport getYear from 'date-fns/getYear';\nimport getMonth from 'date-fns/getMonth';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { makeStyles } from '@mui/styles';\n\nimport { theme } from 'theme';\nimport { getMonthsBetweenDates } from 'shared/functions';\nimport {\n creditRatingRangeValues,\n creditRatingLongTermRangeValues,\n} from 'shared/constants/creditRatingRangeValues';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { scalesTypes } from 'shared/mappings';\n\nconst useStyles = makeStyles(() => ({\n container: {\n position: 'relative',\n width: 310,\n height: 90,\n zIndex: 0,\n\n '&:before, &:after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n height: '90%',\n transform: 'translateY(-50%)',\n borderLeft: ({ notAvailable }) =>\n `2px dashed ${notAvailable ? theme.palette.grey[300] : theme.palette.grey[500]}`,\n zIndex: -1,\n },\n '&:before': {\n left: 'calc(33.3% - 3px)',\n },\n '&:after': {\n right: 'calc(33.3% + 5px)',\n },\n },\n yearItem: {\n width: '33.3%',\n display: 'inline-block',\n textAlign: 'center',\n color: ({ notAvailable }) => (notAvailable ? theme.palette.grey[400] : 'inherit'),\n },\n notAvailable: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n },\n}));\n\nconst SummaryCardLineChart = ({\n history,\n historyType,\n latestChange,\n ratingScale,\n isESGImpact,\n isESGSentiment,\n}) => {\n const sentimentHistory = history.reverse();\n const notAvailable = history.length === 0;\n const classes = useStyles({ notAvailable });\n const currentYear = getYear(new Date());\n const currentMonth = getMonth(new Date()) + 1;\n const labels = getMonthsBetweenDates(+currentYear - 2, +currentYear + 1);\n\n const getDataBeforeFirstChartYear = () => {\n const data = [];\n\n history.forEach((item) => {\n const date = getYear(new Date(item.label.toString()));\n\n if (date < +currentYear - 2) {\n data.push(item);\n }\n });\n\n return data;\n };\n\n const drawData = () => {\n const dataBeforeFirstChartYear = getDataBeforeFirstChartYear();\n const currentDate = new Date(`${currentYear}/${currentMonth}`);\n const data = [];\n const pointRadius = [];\n const isWithdrawal = latestChange && latestChange.status === 'withdrawal';\n const withdrawalDate = latestChange && new Date(latestChange.date);\n const shouldStopDrawing = (date) => isWithdrawal && date > withdrawalDate;\n let actualValue =\n dataBeforeFirstChartYear.length !== 0 ? dataBeforeFirstChartYear[0].data : null;\n\n labels.forEach((value) => {\n const date = new Date(value.toString());\n const searchedData = history.find((item) => item.label === value);\n\n if (searchedData && value === searchedData.label) {\n pointRadius.push(3);\n actualValue = searchedData.data;\n } else {\n pointRadius.push(0);\n }\n\n if (!actualValue || date > currentDate || shouldStopDrawing(date)) {\n data.push(null);\n } else {\n data.push(actualValue);\n }\n });\n\n return { pointRadius, data };\n };\n\n const selectSuggestedMax = {\n [portfolioTypes.CREDIT_RATING]: {\n [scalesTypes.rs1]: 20,\n [scalesTypes.rs2]: 5,\n },\n default: {\n undefined: 10,\n [scalesTypes.rs3]: 10,\n [scalesTypes.rs4]: 10,\n },\n undefined: {\n undefined: 10,\n },\n };\n\n const tooltipCallback = {\n [portfolioTypes.CREDIT_RATING]: {\n [scalesTypes.rs1]: (tooltip) =>\n creditRatingRangeValues.find(({ value }) => value === tooltip).label,\n [scalesTypes.rs2]: (tooltip) =>\n creditRatingLongTermRangeValues.find(({ value }) => value === tooltip).label,\n },\n default: {\n undefined: (tooltip) => tooltip,\n [scalesTypes.rs3]: (tooltip) => tooltip,\n [scalesTypes.rs4]: (tooltip) => tooltip,\n },\n undefined: {\n undefined: (tooltip) => tooltip,\n },\n };\n\n const data = {\n labels:\n (notAvailable && []) ||\n (isESGSentiment ? sentimentHistory.map((item) => item.label) : labels),\n datasets: [\n {\n label: '',\n data:\n (notAvailable && []) ||\n (isESGSentiment ? sentimentHistory.map((item) => item.data) : drawData().data),\n pointRadius: isESGSentiment ? [3, 3, 3] : drawData().pointRadius,\n borderWidth: 4,\n fill: false,\n lineTension: 0.05,\n backgroundColor: theme.palette.primary.main,\n borderColor: theme.palette.primary.main,\n },\n ],\n };\n\n const options = {\n layout: { padding: 5 },\n scales: {\n y: {\n display: false,\n ticks: {\n suggestedMin: 1,\n suggestedMax: selectSuggestedMax[historyType][ratingScale],\n },\n min: isESGImpact ? 0 : 1,\n max: isESGImpact ? 10 : selectSuggestedMax[historyType][ratingScale],\n },\n x: { display: false },\n },\n plugins: {\n legend: { display: false },\n tooltip: {\n callbacks: {\n label: (tooltipItem) => tooltipCallback[historyType][ratingScale](tooltipItem.raw),\n },\n },\n },\n hover: { mode: null },\n };\n\n const chartLabels = isESGSentiment\n ? sentimentHistory.map(({ label }) => label)\n : [\n +currentYear.toString().slice(2, 4) - 2,\n +currentYear.toString().slice(2, 4) - 1,\n +currentYear.toString().slice(2, 4),\n ];\n\n return (\n <Box className={classes.container}>\n <Line data={data} options={options} width={310} height={90} />\n {chartLabels.map((label) => (\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"span\"\n className={classes.yearItem}\n key={label}\n >\n {label}\n </Typography>\n ))}\n {notAvailable && (\n <Typography variant=\"subtitle2\" component=\"p\" className={classes.notAvailable}>\n NA\n </Typography>\n )}\n </Box>\n );\n};\n\nSummaryCardLineChart.defaultProps = {\n history: [],\n historyType: 'default',\n latestChange: undefined,\n ratingScale: undefined,\n isESGImpact: false,\n isESGSentiment: false,\n};\n\nSummaryCardLineChart.propTypes = {\n history: PropTypes.arrayOf(\n PropTypes.shape({\n data: PropTypes.number.isRequired,\n label: PropTypes.string.isRequired,\n }),\n ),\n historyType: PropTypes.oneOf([...Object.values(portfolioTypes), 'default']),\n latestChange: PropTypes.shape({\n status: PropTypes.string,\n date: PropTypes.string,\n }),\n ratingScale: PropTypes.oneOf([...Object.values(scalesTypes)]),\n isESGImpact: PropTypes.bool,\n isESGSentiment: PropTypes.bool,\n};\n\nexport default SummaryCardLineChart;\n","import { ratingTypes } from './ratingTypes';\n\nexport const moduleTypes = {\n ...ratingTypes,\n SUMMARY_CARD: 'summary-card',\n ESG_SENTIMENT: 'esg-sentiment',\n CLIMATE_STRESS_TEST: 'climate-stress-test',\n INSTRUMENTS: 'instruments',\n RATING_NEWS: 'rating-news',\n RESEARCH: 'research',\n DOCUMENTS: 'documents',\n};\n","import React, { Suspense, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport CssBaseline from '@mui/material/CssBaseline';\nimport LocalizationProvider from '@mui/lab/LocalizationProvider';\nimport { StyledEngineProvider, ThemeProvider } from '@mui/material/styles';\nimport AdapterDateFns from '@mui/lab/AdapterDateFns';\nimport { LanguageProvider } from '@scope/scope-one-ui/core';\n\nimport { FullPageLoader, SnackbarNotifications } from 'ui';\nimport { AuthenticatedApp, UnauthenticatedApp } from 'modules/common';\nimport { redirectToRootAddress } from 'shared/functions';\nimport { theme } from 'theme';\nimport { usePrevious, useFeatures } from 'shared/hooks';\nimport { logVersion } from 'utils/logVersion';\n\nconst App = () => {\n useEffect(logVersion, []);\n const { data: authData } = useSelector(({ auth }) => auth);\n const previousAuthData = usePrevious(authData);\n const { redirectHomeToPageOne } = useFeatures();\n\n if (redirectHomeToPageOne && ['', '/', '/ca', '/ca/'].includes(window.location.pathname)) {\n window.location.href = `${window.location.origin}/page-one`;\n\n return null;\n }\n\n const lastLocation = localStorage.getItem('lastLocation');\n\n if (process.env.NODE_ENV === 'production' && !authData) {\n redirectToRootAddress();\n\n return null;\n }\n\n if (!authData && previousAuthData) {\n window.location.href = '/';\n }\n\n if (lastLocation) {\n localStorage.removeItem('lastLocation');\n window.location.href = lastLocation;\n }\n\n return (\n <LanguageProvider>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={theme}>\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <CssBaseline />\n <Suspense fallback={<FullPageLoader />}>\n {authData ? <AuthenticatedApp /> : <UnauthenticatedApp />}\n </Suspense>\n <SnackbarNotifications />\n </LocalizationProvider>\n </ThemeProvider>\n </StyledEngineProvider>\n </LanguageProvider>\n );\n};\n\nexport default App;\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { AuthStore, AuthData } from 'modules/common/PortfolioManager/types';\n\nconst baseApiUrl = process.env.REACT_APP_API_TARGET || window.location.origin;\nconst navigatorApiUrl = '/navigator/api/v1';\n\ntype NavigatorToken = {\n role: 'access_denied' | string;\n};\n\nconst useNavigatorPost = <T = void>(path: string): (() => Promise<T>) => {\n const { token } = useSelector<AuthStore, AuthData>(({ auth }) => auth.data);\n\n return () =>\n fetch(`${baseApiUrl}${navigatorApiUrl}${path}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n authorization: `Bearer ${token}`,\n },\n }).then((res) => res.json());\n};\n\nexport const useGetNavigatorAccess = () => {\n const [hasAccess, setAccess] = useState(false);\n const getAccess = useNavigatorPost<NavigatorToken>('/token/');\n\n useEffect(() => {\n getAccess().then(({ role }) => setAccess(role !== 'access_denied'));\n }, []);\n\n return hasAccess;\n};\n\nexport const useRequestNavigatorAccess = () => useNavigatorPost('/request_access/');\n","import { useState } from 'react';\nimport { useMessages } from '@scope/scope-one-ui/core';\nimport { useGetNavigatorAccess, useRequestNavigatorAccess } from 'services/navigator';\n\nexport const useNavigator = () => {\n const [isRequestPending, setRequestPending] = useState(false);\n const hasAccessToNavigatorApp = useGetNavigatorAccess();\n const requestAccess = useRequestNavigatorAccess();\n const { success } = useMessages();\n\n const requestAccessToNavigator = () => {\n setRequestPending(true);\n requestAccess()\n .then(() => success({ title: 'Success', content: 'Request for access sent!' }))\n .finally(() => setRequestPending(false));\n };\n\n return {\n hasAccessToNavigatorApp,\n requestAccessToNavigator,\n isRequestPending,\n };\n};\n","import React, { useState } from 'react';\nimport { TopHeader } from '@scope/scope-one-ui/core/TopHeader/TopHeader';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { logoutAction } from 'store/login/loginAction';\nimport { useNavigate } from 'react-router-dom';\nimport { ChangePasswordModal } from 'modules/common/Modals';\nimport { useGetNotifications, useGeneralServices } from '../../../shared/hooks';\nimport { useNavigator } from './hooks/useNavigator';\nimport { useMenuBookmarks } from '../../../shared/hooks';\nimport { useCre } from './hooks/useCre';\nimport { useFunds } from './hooks/useFunds';\n\nconst Navbar = () => {\n const navigate = useNavigate();\n const dispatch = useDispatch();\n const { data } = useSelector(({ auth }) => auth);\n\n const [changePasswordModalOpen, setChangePasswordOpen] = useState(false);\n\n const toggleChangePasswordModal = () => {\n setChangePasswordOpen(!changePasswordModalOpen);\n };\n\n const redirect = (path) => {\n navigate(path);\n };\n\n const userMenu = {\n user: {\n firstName: `${data.firstName}`,\n lastName: `${data.name}`,\n jobTitle: `${data.user && data.user.jobTitle}`,\n },\n onViewProfile: () => redirect('/profile'),\n onChangePassword: () => toggleChangePasswordModal(),\n onNewsCenter: () => redirect('/news-centre'),\n onLogout: () => dispatch(logoutAction),\n };\n const notifications = useGetNotifications();\n const generalServices = useGeneralServices();\n const bookmarks = useMenuBookmarks();\n const navigatorOptions = useNavigator();\n const creOptions = useCre();\n const fundsOptions = useFunds();\n\n const accessOptions = {\n ...navigatorOptions,\n ...creOptions,\n ...fundsOptions,\n };\n\n return (\n <>\n <TopHeader\n title=\"PageOne\"\n activeUrl=\"/page-one\"\n hasSettings={false}\n userMenu={userMenu}\n notifications={notifications}\n generalServices={generalServices}\n bookmarks={bookmarks}\n accessOptions={accessOptions}\n />\n <ChangePasswordModal open={changePasswordModalOpen} onClose={toggleChangePasswordModal} />\n </>\n );\n};\n\nexport default Navbar;\n","import {\n useContactSales,\n useGetCREProjects,\n useGetSimulationModels,\n} from '../../../../shared/hooks';\n\nexport const useCre = () => {\n const { error: errorCRE, loading: loadingCRE } = useGetCREProjects('cre');\n const { error: errorPortfolio, loading: loadingPortfolio } = useGetCREProjects('cpm');\n const { data: models } = useGetSimulationModels();\n\n const getModelHeader = () =>\n (models || []).find((model) => {\n const path = window.location.pathname;\n const match = `/tools/${model.shortName}`;\n\n return path.includes(match);\n })?.name;\n\n return {\n modelHeader: getModelHeader(),\n hasAccessToCREApp: loadingCRE ? false : errorCRE?.code !== 403,\n hasAccessToPortfolioApp: loadingPortfolio ? false : errorPortfolio?.code !== 403,\n contactSalesRequest: useContactSales(),\n };\n};\n","import { useGetFundsAccess } from '../../../../shared/hooks';\n\nexport const useFunds = () => {\n const { error, loading } = useGetFundsAccess();\n\n return { hasAccessToFundsApp: loading ? false : error?.code !== 401 };\n};\n","import React, { FC, useEffect, useState } from 'react';\nimport { NavMenu, IconTextButton, Divider } from '@scope/scope-one-ui/core';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport { ArrowBack } from '@mui/icons-material';\nimport { Box } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useSelector } from 'react-redux';\nimport { creditAnalysis } from 'shared/constants/menuItems';\nimport { checkAccess } from 'shared/hooks/useAccess/checkAccess';\n\nconst useStyles = makeStyles(() => ({\n navbarStyles: {\n backgroundColor: COLORS.background.control,\n display: 'flex',\n alignItems: 'center',\n padding: '0 3.75rem',\n },\n}));\n\nconst moduleNotFound = { label: '', value: '' };\n\nconst Subnavigation: FC = () => {\n const { pathname } = useLocation();\n const classes = useStyles();\n const navigate = useNavigate();\n const auth = useSelector((state: any) => state.auth);\n\n const modules = creditAnalysis.subnavigation\n .filter((item) => !item.hidden)\n .map((item) => {\n return (\n checkAccess({\n permission: item.permission,\n role: item.role,\n environment: item.environment,\n shopPermissions: item.shopPermissions,\n auth,\n }) && { label: item.label, value: item.to }\n );\n })\n .filter((item) => item);\n\n const initialModule = modules[0];\n\n const [currentRoute, setCurrentRoute] = useState(initialModule);\n\n useEffect(() => {\n const currentModule = pathname.split('/')[1];\n const findModule = modules.find((item) => item.value === `/${currentModule}`);\n setCurrentRoute(findModule || moduleNotFound);\n }, [pathname]);\n\n const navigateTo = (item) => {\n const absolutePath = item.value.startsWith('https://') || item.value.startsWith('http://');\n const bookmarkedPage = localStorage.getItem('bookmarked-home');\n if (absolutePath) {\n window.location.href =\n item.label === 'Overview'\n ? `${window.location.origin}${\n bookmarkedPage && bookmarkedPage !== '' ? bookmarkedPage : '/page-one'\n }`\n : item.value; \n } else {\n navigate({ pathname: item.value });\n }\n };\n\n const navLinks = modules.map((item) => ({\n label: item.label,\n onClick: () => navigateTo(item),\n }));\n\n return (\n <Box width=\"100%\">\n <Box className={classes.navbarStyles}>\n <Box flex={1}>\n <IconTextButton onClick={() => window.history.back()} icon={<ArrowBack />}>\n Back\n </IconTextButton>\n </Box>\n <NavMenu\n divider={false}\n active={currentRoute.label}\n tabs={navLinks}\n variant=\"secondary\"\n pt={2.25}\n tabsBackground={COLORS.background.control}\n />\n <Box flex={1} />\n </Box>\n <Divider />\n </Box>\n );\n};\nexport default Subnavigation;\n","import React from 'react';\nimport Typography from '@mui/material/Typography';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles(() => ({\n title: {\n position: 'absolute',\n left: '50%',\n transform: 'translateX(-50%)',\n },\n}));\n\nconst Title = () => {\n const classes = useStyles();\n\n return (\n <Typography className={classes.title} variant=\"h5\" component=\"h1\" color=\"inherit\">\n ScopeOne\n </Typography>\n );\n};\n\nexport default Title;\n","import React, { FC, ReactElement } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport { theme } from 'theme';\n\nimport creditSphereInvitationImg from 'assets/images/credit-sphere-invitation.jpg';\n\nimport { DialogTitleWithClose } from 'ui';\n\ntype SubscriptionInvitiationModalProps = {\n onClose: () => void;\n open: boolean;\n onNavigateToInitialSubscription: () => void;\n};\n\nconst useStyles = makeStyles(() => ({\n dialogContent: {\n minWidth: '400px',\n whiteSpace: 'pre-line',\n padding: theme.spacing(3),\n },\n dialogTitle: {\n height: '353px',\n },\n heading: {\n color: '#333',\n fontWeight: 500,\n fontSize: 15,\n },\n text: {\n color: '#333',\n fontSize: 15,\n },\n image: {\n backgroundPosition: 'center',\n },\n}));\n\nexport const CreditSphereInvitiationModal: FC<SubscriptionInvitiationModalProps> = ({\n open,\n onClose,\n onNavigateToInitialSubscription,\n}): ReactElement => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <Dialog open={!!open} onClose={onClose} maxWidth=\"sm\">\n <DialogTitleWithClose\n onClose={onClose}\n imageUrl={creditSphereInvitationImg}\n className={classes.dialogTitle}\n imageClassName={classes.image}\n titleVariant=\"h6\"\n >\n {t('CREDIT_SPHERE.INVITATION_CARD_TITLE')}\n </DialogTitleWithClose>\n <DialogContent className={classes.dialogContent}>\n <DialogContentText>\n <Typography variant=\"body1\" color=\"secondary\" component=\"span\" className={classes.text}>\n {t('CREDIT_SPHERE.INVITATION_CARD_DESC')}\n </Typography>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('CREDIT_SPHERE.INVITATION_CARD_NO')}\n </Button>\n <Button variant=\"contained\" color=\"primary\" onClick={onNavigateToInitialSubscription}>\n {t('CREDIT_SPHERE.INVITATION_CARD_YES')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Navigate } from 'react-router-dom';\n\nimport { EnvironmentTypes } from 'shared/constants/environmentTypes';\nimport { permissionsTypes } from 'shared/constants/permissionsTypes';\nimport { licencesTypes } from 'shared/constants/licencesTypes';\nimport { allStandardRolesTypes, organisationAdmin } from 'shared/constants/rolesTypes';\nimport { mergePermissionsParser, validateRoles } from 'shared/parsers';\nimport { validateShopPermissions } from 'modules/shop/shared/parsers';\nimport { useHubSpot } from 'shared/hooks';\n\nimport { store } from 'store/store';\n\nconst PrivateRoute = ({\n component: Component,\n environment,\n permission,\n licence,\n role,\n shopPermissions: shopRoles,\n ...rest\n}) => {\n useHubSpot();\n const { permissions, licences, roles, shopPermissions } = store.getState().auth.data;\n\n const mergedPermissions = permissions ? mergePermissionsParser(permissions) : [];\n\n const checkEnvironment = environment ? environment === process.env.NODE_ENV : true;\n const checkPermission = permission ? mergedPermissions.includes(permission) : true;\n const checkLicence = licence ? licences.includes(licence) : true;\n const checkRole = role ? validateRoles(roles, role) : true;\n const checkShopPermissions =\n shopRoles && shopRoles.length ? validateShopPermissions(shopPermissions, shopRoles) : true;\n\n return checkEnvironment &&\n checkPermission &&\n checkLicence &&\n checkRole &&\n checkShopPermissions ? (\n <Component {...rest} />\n ) : (\n <Navigate to={{ pathname: '/not-found' }} />\n );\n};\n\nPrivateRoute.defaultProps = {\n environment: null,\n permission: null,\n licence: null,\n role: null,\n shopPermissions: [],\n};\n\nPrivateRoute.propTypes = {\n component: PropTypes.elementType.isRequired,\n environment: PropTypes.oneOf([...Object.values(EnvironmentTypes), null]),\n permission: PropTypes.oneOf([...Object.keys(permissionsTypes), null]),\n licence: PropTypes.oneOf([...Object.keys(licencesTypes), null]),\n role: PropTypes.oneOf([...allStandardRolesTypes, allStandardRolesTypes, organisationAdmin, null]),\n shopPermissions: PropTypes.arrayOf(PropTypes.string),\n};\n\nexport { PrivateRoute };\n","import { ShopSubscription } from 'shared/types/shop';\n\nexport const creditReviewInitialSubscription = (\n subscriptionsData: ShopSubscription[],\n): ShopSubscription | undefined =>\n subscriptionsData?.find(\n subscription =>\n subscription.categories?.find(category => category === 'Credit Analysis') &&\n subscription.productLines?.find(productLine => productLine === 'Review'),\n );\n\nexport const creditReviewInitialSubscriptionId = (\n subscriptionsData: ShopSubscription[],\n): number | undefined => creditReviewInitialSubscription(subscriptionsData)?.id;\n","import { ShopSubscription } from 'shared/types/shop';\n\nexport const creditSphereInitialSubscription = (\n subscriptionsData: ShopSubscription[],\n): ShopSubscription | undefined =>\n subscriptionsData?.find(subscription => {\n const produtName = subscription.name.toLowerCase();\n return (\n subscription.categories?.find(category => category === 'Credit Analysis') &&\n subscription.productLines?.find(productLine => productLine === 'Rating') &&\n produtName.includes('europe') &&\n produtName.includes('full')\n );\n });\n\nexport const creditSphereSubscriptionId = (\n subscriptionsData: ShopSubscription[],\n): number | undefined => creditSphereInitialSubscription(subscriptionsData)?.id;\n","import { formatDate } from 'shared/functions';\n\nexport const getShopProductValues = (product, fields) =>\n fields.map(field => {\n if (field === 'category') return product.categories[0];\n\n if (field === 'price') {\n const pricing = (product.pricing ? product.pricing : []).find(({ active }) => active);\n return pricing.price;\n }\n\n if (field === 'subscriptionUntil' || field === 'purchaseDate') {\n return formatDate(product[field]);\n }\n\n return product[field];\n });\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { ListItemText, Menu, Button, MenuItem } from '@mui/material';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\n\nconst ShopToolbar = ({ actions }) => {\n const { t } = useTranslation();\n\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const handleClick = event => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n return (\n <>\n <Button variant=\"outlined\" size=\"small\" onClick={handleClick}>\n {t('More actions')}\n <ExpandMoreIcon />\n </Button>\n <Menu anchorEl={anchorEl} keepMounted open={Boolean(anchorEl)} onClose={handleClose}>\n {actions\n .filter(({ hidden }) => !hidden)\n .map(({ name, action }) => (\n <MenuItem key={name}>\n <ListItemText primary={name} onClick={action} />\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n};\n\nShopToolbar.propTypes = {\n actions: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n action: PropTypes.func.isRequired,\n hidden: PropTypes.bool,\n }),\n ).isRequired,\n};\n\nexport { ShopToolbar };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { Typography, Box } from '@mui/material';\nimport { format } from 'date-fns';\n\nimport { shortDateFormat } from 'shared/constants/dateFormat';\n\nconst ShopProductActivationModal = ({ open, onClose, onConfirm, product }) => {\n const { t } = useTranslation();\n\n const handleConfirm = () => {\n onClose();\n onConfirm();\n };\n\n return (\n <div>\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>\n <Typography variant=\"h4\">\n {t('Reactivation:')} {product.name}\n </Typography>\n </DialogTitle>\n <DialogContent>\n <Typography>\n {t(\n 'We are happy to hear that you have decided to reactivate the following subscription:',\n )}\n </Typography>\n\n <Box mt={4}>\n <Typography>\n {t('Subscription:')} <strong>{product.name}</strong>\n </Typography>\n <Typography>\n {t('Reactivation date:')} <strong>{format(new Date(), shortDateFormat)}</strong>\n </Typography>\n <Typography>\n {t('Subscription ends:')}{' '}\n <strong>{format(new Date(product.subscriptionUntil), shortDateFormat)}</strong>\n </Typography>\n </Box>\n <Box mt={4}>\n <Typography>\n {t(\n 'If you want to move ahead and reactivate the subscription, please confirm your selection below.',\n )}\n </Typography>\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" variant=\"outlined\">\n {t('Cancel')}\n </Button>\n <Button onClick={handleConfirm} color=\"primary\" variant=\"contained\" autoFocus>\n {t('Confirm')}\n </Button>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n\nShopProductActivationModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n product: PropTypes.object.isRequired,\n};\n\nexport { ShopProductActivationModal };\n","import React, { useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { Typography, Box } from '@mui/material';\nimport { format } from 'date-fns';\n\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { MessageModal } from 'ui/Modals';\nimport { shortDateFormat } from 'shared/constants/dateFormat';\n\nimport { sendMessageToSales } from '../../services';\n\nconst ShopProductCancellationModal = ({ open, onClose, onConfirm, product }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const [messageModalOpen, setMessageModalOpen] = useState(false);\n const toggleMessageModal = () => setMessageModalOpen(!messageModalOpen);\n\n const handleConfirm = () => {\n onClose();\n onConfirm();\n };\n\n const sendMessage = messageData => {\n sendMessageToSales(messageData)\n .then(() => {\n dispatch(\n addNotificationAction({\n message: t('Message sent successfully'),\n variant: 'success',\n }),\n );\n })\n .catch(() => {\n dispatch(\n addNotificationAction({\n message: t('Failed to send a message'),\n variant: 'error',\n }),\n );\n });\n };\n\n return (\n <div>\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>\n <Typography variant=\"h4\">\n {t('Cancellation:')} {product.name}\n </Typography>\n </DialogTitle>\n <DialogContent>\n <Typography>\n {t('We are sorry to hear that you have decided to cancel the following subscription:')}\n </Typography>\n\n <Box mt={4}>\n <Typography>\n {t('Subscription:')} <strong>{product.name}</strong>\n </Typography>\n <Typography>\n {t('Cancellation date:')} <strong>{format(new Date(), shortDateFormat)}</strong>\n </Typography>\n <Typography>\n {t('Subscription ends:')}{' '}\n <strong>{format(new Date(product.subscriptionUntil), shortDateFormat)}</strong>\n </Typography>\n </Box>\n <Box mt={4}>\n <Typography>\n {t(\n 'If you are uncertain whether you really want to cancel the subscription, we would be delighted to assist you with any open questions. Please do not hesitate to contact your personal advisor or the Service Center here:',\n )}\n </Typography>\n <Box mt={4}>\n <Button variant=\"contained\" color=\"primary\" onClick={toggleMessageModal}>\n {t('Contact sales')}\n </Button>\n </Box>\n <MessageModal\n title={t('Contact Sales')}\n open={messageModalOpen}\n onClose={toggleMessageModal}\n onSendMessage={sendMessage}\n />\n </Box>\n <Box mt={4}>\n <Typography>\n {t(\n 'If you want to move ahead and cancel the subscription, please confirm your selection below.',\n )}\n </Typography>\n </Box>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\" variant=\"outlined\">\n {t('Cancel')}\n </Button>\n <Button onClick={handleConfirm} color=\"primary\" variant=\"contained\" autoFocus>\n {t('Confirm')}\n </Button>\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n\nShopProductCancellationModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n product: PropTypes.object.isRequired,\n};\n\nexport { ShopProductCancellationModal };\n","import React, { useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Button, Box } from '@mui/material';\n\nimport { Loader } from 'ui';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { formatDate } from 'shared/functions';\n\nimport { subscriptionStatuses } from '../../shared/constants/shopSubscriptionStatuses';\nimport { getProductById } from '../../selectors/shopSelectors';\nimport { cancelSubscriptions, activateSubscriptions } from '../../services';\nimport { fetchShopProductsAction } from '../../store/shopActions';\nimport { ShopProductActivationModal } from '../ShopProduct/ShopProductActivationModal';\nimport { ShopProductCancellationModal } from '../ShopProduct/ShopProductCancellationModal';\n\nconst ShopSelectionListAction = ({ productId }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const product = useSelector(getProductById(productId));\n\n const [isLoading, setIsLoading] = useState(false);\n const [isCancelModalOpen, setIsCancelModalOpen] = useState(false);\n const [isActivateModalOpen, setIsActivateModalOpen] = useState(false);\n\n const handleCloseCancelModal = () => setIsCancelModalOpen(false);\n\n const handleCloseActivateModal = () => setIsActivateModalOpen(false);\n\n const toggleCancelModal = () => setIsCancelModalOpen(isOpen => !isOpen);\n\n const toggleActivateModal = () => setIsActivateModalOpen(isOpen => !isOpen);\n\n const messageByStatus = {\n [subscriptionStatuses.ACTIVE_CANCELLED]:\n t('Cancelled. Subscription valid until: ') + formatDate(product.validUntil),\n [subscriptionStatuses.ENDED_CANCELLED]: t('Subscription has ended'),\n [subscriptionStatuses.ENDED_TRIAL]: t('Free trial has ended'),\n [subscriptionStatuses.ACTIVE_TRIAL]: t('Free trial active'),\n };\n\n const cancel = () => {\n setIsLoading(true);\n\n cancelSubscriptions({ products: [productId] })\n .then(() => {\n dispatch(\n addNotificationAction({\n message: t('Subscription successfully cancelled.'),\n variant: 'success',\n }),\n );\n dispatch(fetchShopProductsAction());\n })\n .catch(error => {\n if (error) {\n dispatch(\n addNotificationAction({\n message: t('Cannot cancel subscription'),\n variant: 'error',\n }),\n );\n }\n })\n .finally(() => {\n setIsLoading(false);\n });\n };\n\n const activate = () => {\n setIsLoading(true);\n\n activateSubscriptions({ products: [productId] })\n .then(() => {\n dispatch(\n addNotificationAction({\n message: t('Subscription successfully activated.'),\n variant: 'success',\n }),\n );\n dispatch(fetchShopProductsAction());\n })\n .catch(error => {\n if (error) {\n dispatch(\n addNotificationAction({\n message: t('Cannot activate subscription'),\n variant: 'error',\n }),\n );\n }\n })\n .finally(() => {\n setIsLoading(false);\n });\n };\n\n if (isLoading || !product) {\n return <Loader />;\n }\n\n if (product.status !== subscriptionStatuses.ACTIVE) {\n return (\n <>\n <Box mb={1}>{messageByStatus[product.status]}</Box>\n {product.status === subscriptionStatuses.ACTIVE_CANCELLED && (\n <>\n <Button color=\"primary\" variant=\"contained\" size=\"small\" onClick={toggleActivateModal}>\n Reactivate\n </Button>\n <ShopProductActivationModal\n product={product}\n open={isActivateModalOpen}\n onClose={handleCloseActivateModal}\n onConfirm={activate}\n />\n </>\n )}\n </>\n );\n }\n\n return (\n <>\n <Button color=\"primary\" variant=\"outlined\" size=\"small\" onClick={toggleCancelModal}>\n Cancel\n </Button>\n <ShopProductCancellationModal\n product={product}\n open={isCancelModalOpen}\n onClose={handleCloseCancelModal}\n onConfirm={cancel}\n />\n </>\n );\n};\n\nShopSelectionListAction.propTypes = {\n productId: PropTypes.number.isRequired,\n};\n\nexport { ShopSelectionListAction };\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport MUIDataTable from 'mui-datatables';\nimport { ThemeProvider, StyledEngineProvider, Grid } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\nimport addDays from 'date-fns/addDays';\n\nimport { LinkButton } from 'ui/Buttons';\nimport { formatDate, formatCurrency } from 'shared/functions';\n\nimport { ShopToolbar } from '../ShopToolbar';\nimport { ShopSelectionListAction } from './ShopSelectionListActions';\n\nconst getMuiTheme = () => ({\n component: {\n MUIDataTableHeadCell: {\n styleOverrides: {\n fixedHeader: {\n zIndex: 1,\n },\n }\n },\n MUIDataTableSelectCell: {\n styleOverrides: {\n headerCell: {\n zIndex: 1,\n },\n fixedLeft: {\n zIndex: 1,\n }\n }\n },\n MUIDataTable: {\n styleOverrides: {\n paper: {\n boxShadow: 'none',\n }\n }\n },\n MUIDataTableToolbarSelect: {\n styleOverrides: {\n root: {\n boxShadow: 'none',\n height: 64,\n backgroundColor: '#fff',\n },\n title: {\n minWidth: 200,\n }\n }\n },\n MUIDataTableSearch: {\n styleOverrides: {\n main: {\n '& input': {\n padding: '8px 10px',\n },\n },\n searchText: {\n marginTop: 8,\n },\n searchIcon: {\n marginTop: 15,\n }\n }\n },\n },\n});\n\nconst useStyles = makeStyles(theme => ({\n toolbarContainer: {\n marginRight: theme.spacing(3),\n },\n}));\n\nconst ShopSelectionList = ({\n products,\n columns,\n onSelectionChange,\n actions,\n toolbar,\n options,\n editMode,\n showFreeTrialPrice,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const [selectedProducts, setSelectedProducts] = useState([]);\n\n const handleRowSelect = (_currentSelection, items) => {\n const selectedItems = items.map(({ dataIndex }) => dataIndex);\n\n setSelectedProducts(selectedItems);\n\n onSelectionChange(\n products.filter((_product, index) => selectedItems.includes(index)).map(({ id }) => id),\n );\n };\n\n const columnsSetup = [\n {\n name: 'id',\n label: t('ID'),\n options: {\n display: columns.includes('id'),\n },\n },\n {\n name: 'name',\n label: t('Name'),\n options: {\n display: columns.includes('name'),\n sort: true,\n customBodyRender: (value, { rowData }) => (\n <LinkButton\n to={\n editMode ? `/subscriptions/${rowData[0]}` : `/subscriptions?productId=${rowData[0]}`\n }\n label={value}\n />\n ),\n },\n },\n {\n name: 'categories',\n label: t('Category'),\n options: {\n display: columns.includes('category'),\n sort: true,\n customBodyRender: value => (value ? value.join(', ') : ''),\n },\n },\n {\n name: 'regions',\n label: t('Region'),\n options: {\n display: columns.includes('region'),\n sort: true,\n customBodyRender: value => (value ? value.join(', ') : ''),\n },\n },\n {\n name: 'segments',\n label: t('Segment'),\n options: {\n display: columns.includes('segment'),\n sort: true,\n customBodyRender: value => (value ? value.join(', ') : ''),\n },\n },\n {\n name: 'productLines',\n label: t('Product line'),\n options: {\n display: columns.includes('productLines'),\n sort: true,\n customBodyRender: value => (value ? value.join(', ') : ''),\n },\n },\n {\n name: 'industries',\n label: t('Industry'),\n options: {\n display: columns.includes('industry'),\n sort: true,\n customBodyRender: value => (value ? value.map(({ name }) => name).join(', ') : ''),\n },\n },\n {\n name: 'sources',\n label: t('Source'),\n options: {\n display: columns.includes('source'),\n sort: true,\n },\n },\n {\n name: 'purchaseDate',\n label: t('Date of purchase'),\n options: {\n display: columns.includes('purchaseDate'),\n sort: true,\n customBodyRender: value => formatDate(value),\n },\n },\n {\n name: 'cancellationPeriod',\n label: t('Cancel by'),\n options: {\n display: columns.includes('cancellationPeriod'),\n sort: true,\n customBodyRender: (cancellationPeriod, { rowData }) => {\n const today = new Date();\n\n const subscriptionUntil = rowData[11];\n const subscriptionUntilDate = new Date(subscriptionUntil);\n\n if (!subscriptionUntil || today > subscriptionUntilDate) {\n return '-';\n }\n\n const cancelDate = addDays(new Date(subscriptionUntilDate), -cancellationPeriod);\n\n return formatDate(cancelDate);\n },\n },\n },\n {\n name: 'subscriptionUntil',\n label: t('Renewal / end'),\n options: {\n display: columns.includes('subscriptionUntil'),\n sort: true,\n customBodyRender: value => (value ? formatDate(value) : '-'),\n },\n },\n {\n name: 'amount',\n label: t('Amount'),\n options: {\n display: columns.includes('amount'),\n sort: true,\n },\n },\n {\n name: 'pricing',\n label: t('Price'),\n options: {\n display: columns.includes('pricing'),\n sort: true,\n customBodyRender: (priceData, { rowData }) => {\n if (!priceData) return '-';\n\n const pricing = priceData.find(({ active }) => active);\n\n if (!pricing) {\n return '-';\n }\n\n const trialStarted = rowData[16];\n\n if (!showFreeTrialPrice && trialStarted) {\n return t('Free trial');\n }\n\n return pricing.price === 0 ? t('Free of charge') : formatCurrency(pricing.price, 'EUR');\n },\n },\n },\n {\n name: 'active',\n label: t('Active'),\n options: {\n display: columns.includes('active'),\n sort: true,\n customBodyRender: value => (value ? t('Yes') : t('No')),\n },\n },\n {\n name: 'actions',\n label: t('Actions'),\n options: {\n display: columns.includes('actions'),\n sort: true,\n customBodyRender: (_, { rowData }) => <ShopSelectionListAction productId={rowData[0]} />,\n },\n },\n {\n name: 'trialStarted',\n label: t('Free trial started'),\n options: {\n display: columns.includes('trialStarted'),\n sort: true,\n customBodyRender: value => (value ? t('Yes') : t('No')),\n },\n },\n {\n name: 'trialPeriod',\n label: t('Trial period'),\n options: {\n display: columns.includes('trialPeriod'),\n },\n },\n ];\n\n const optionsSetup = {\n filterType: 'checkbox',\n print: false,\n download: false,\n filter: false,\n search: false,\n onRowsDelete: false,\n viewColumns: false,\n pagination: false,\n sortDirection: 'desc',\n onRowsSelect: handleRowSelect,\n rowsSelected: selectedProducts,\n customToolbar: () => toolbar,\n customToolbarSelect: () => (\n <Grid container justifyContent=\"flex-end\" spacing={1} className={classes.toolbarContainer}>\n {toolbar && <Grid item>{toolbar}</Grid>}\n {actions.length !== 0 && (\n <Grid item>\n <ShopToolbar actions={actions} />\n </Grid>\n )}\n </Grid>\n ),\n ...options,\n };\n\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={getMuiTheme()}>\n <MUIDataTable data={products} columns={columnsSetup} options={optionsSetup} />\n </ThemeProvider>\n </StyledEngineProvider>\n );\n};\n\nShopSelectionList.defaultProps = {\n onSelectionChange: () => {},\n actions: [],\n toolbar: null,\n options: {},\n editMode: false,\n showFreeTrialPrice: true,\n};\n\nShopSelectionList.propTypes = {\n products: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n categories: PropTypes.arrayOf(PropTypes.string).isRequired,\n regions: PropTypes.arrayOf(PropTypes.string).isRequired,\n segments: PropTypes.arrayOf(PropTypes.string).isRequired,\n productLines: PropTypes.arrayOf(PropTypes.string).isRequired,\n duration: PropTypes.string,\n industries: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n }),\n ).isRequired,\n sources: PropTypes.arrayOf(PropTypes.string).isRequired,\n purchaseDate: PropTypes.string,\n cancelPeriod: PropTypes.string,\n subscriptionUntil: PropTypes.string,\n amount: PropTypes.number,\n pricing: PropTypes.arrayOf(\n PropTypes.shape({\n price: PropTypes.number.isRequired,\n activationFee: PropTypes.number,\n tier: PropTypes.number,\n }),\n ),\n }),\n ).isRequired,\n columns: PropTypes.arrayOf(PropTypes.string).isRequired,\n onSelectionChange: PropTypes.func,\n actions: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n action: PropTypes.func.isRequired,\n }),\n ),\n toolbar: PropTypes.node,\n options: PropTypes.object,\n editMode: PropTypes.bool,\n showFreeTrialPrice: PropTypes.bool,\n};\n\nexport { ShopSelectionList };\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport { Paper, Typography, Box, IconButton } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nimport { exportToExcel } from 'services';\nimport { useQuery } from 'shared/hooks';\n\nimport { getShopProductValues } from '../shared/functions/getShopProductValues/getShopProductValues';\nimport {\n changeShopProductsFavoriteStatusAction,\n setShopActiveViewAction,\n} from '../store/shopActions';\nimport { getFavoriteProducts } from '../selectors/shopSelectors';\nimport { ShopSelectionList } from './ShopSelectionList/ShopSelectionList';\n\nconst useStyle = makeStyles(() => ({\n title: {\n position: 'relative',\n top: 2,\n },\n}));\n\nconst ShopFavorites = () => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n const { tab } = useQuery();\n const navigate = useNavigate();\n\n const products = useSelector(getFavoriteProducts);\n\n const [selectedProducts, setSelectedProducts] = useState([]);\n\n const handleSelectionChange = (items) => {\n setSelectedProducts(items);\n };\n\n const backToProductList = () => {\n navigate({\n search: ``,\n });\n };\n\n const actions = [\n {\n name: t('Delete'),\n action: () => {\n if (!selectedProducts.length) return;\n dispatch(\n changeShopProductsFavoriteStatusAction({ ids: selectedProducts, isFavorite: false }),\n );\n },\n },\n {\n name: t('Export to Excel'),\n action: () => {\n if (!selectedProducts.length) return;\n\n const filteredProducts = products.data\n .filter(({ id }) => selectedProducts.includes(id))\n .map((product) =>\n getShopProductValues(product, ['name', 'validity', 'category', 'price']),\n );\n\n exportToExcel({\n fileName: `ShopFavorites`,\n workbookName: t('My favorites'),\n columns: [t('Name'), t('Validity'), t('Category'), t('Price')],\n data: filteredProducts,\n });\n },\n },\n ];\n\n useEffect(() => {\n dispatch(setShopActiveViewAction({ view: tab || null }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tab]);\n\n return (\n <>\n <Box mb={1}>\n <Box mb={1}>\n <Typography variant=\"h5\">\n <IconButton onClick={backToProductList} size=\"large\">\n <ArrowBackIcon />\n </IconButton>\n <span className={classes.title}>{t('My favorites')}</span>\n </Typography>\n </Box>\n </Box>\n <Paper elevation={3}>\n <ShopSelectionList\n actions={actions}\n products={products.data}\n onSelectionChange={handleSelectionChange}\n columns={[\n 'name',\n 'purchaseDate',\n 'validity',\n 'cancellationPeriod',\n 'subscriptionUntil',\n 'category',\n 'pricing',\n ]}\n />\n </Paper>\n </>\n );\n};\n\nexport { ShopFavorites };\n","import React from 'react';\nimport { Select, MenuItem } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { shopProductsSortOptions } from '../../shared/constants/shopProductsSortOptions';\nimport { setShopSortingAction } from '../../store/shopActions';\n\nconst useStyle = makeStyles(theme => ({\n select: {\n color: theme.palette.primary.contrastText,\n background: theme.palette.primary.main,\n padding: '13px 15px',\n textTransform: 'uppercase',\n fontSize: '0.8125rem',\n fontWeight: 500,\n\n '&:focus': {\n background: theme.palette.primary.main,\n borderRadius: 4,\n },\n },\n icon: {\n color: theme.palette.primary.contrastText,\n },\n}));\n\nconst ShopSortSelect = () => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n\n const sortBy = useSelector(({ shop }) => shop.sortBy);\n\n const handleSortingChange = event => {\n dispatch(setShopSortingAction({ sortBy: event.target.value }));\n };\n\n return (\n <Select value={sortBy} onChange={handleSortingChange} label=\"Sort\" classes={classes}>\n {Object.keys(shopProductsSortOptions).map(sortOption => (\n <MenuItem key={sortOption} value={sortOption}>\n {t('Sort by')} {sortOption}\n </MenuItem>\n ))}\n </Select>\n );\n};\n\nexport { ShopSortSelect };\n","import makeStyles from '@mui/styles/makeStyles';\n\nexport const useSelectFilterStyles = makeStyles(theme => ({\n root: {\n background: theme.palette.primary.main,\n padding: '5px 15px',\n textTransform: 'uppercase',\n fontSize: '0.8125rem',\n fontWeight: 500,\n\n '&:focus': {\n background: theme.palette.primary.main,\n borderRadius: 4,\n },\n },\n select: {\n color: theme.palette.primary.contrastText,\n '&:focus': {\n color: theme.palette.primary.contrastText,\n },\n },\n icon: {\n color: theme.palette.primary.contrastText,\n '&:focus': {\n color: theme.palette.primary.contrastText,\n },\n },\n}));\n","import { makeStyles } from '@mui/styles';\n\nexport const useSmallSelectStyles = makeStyles(() => ({\n root: {\n padding: '5px 15px',\n textTransform: 'uppercase',\n fontSize: '0.8125rem',\n fontWeight: 500,\n\n '&:focus': {\n background: 'transparent',\n borderRadius: 4,\n },\n },\n icon: {\n top: 2,\n },\n}));\n","export const shopProductsFilters = {\n regions: 'regions',\n segments: 'segments',\n categories: 'categories',\n};\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { Grid, Button, Select, MenuItem, InputLabel, FormControl, Box } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\n\nimport { useSelectFilterStyles } from 'shared/styles/selectFilterStyles/selectFilterStyles';\nimport { useSmallSelectStyles } from 'shared/styles/smallSelectStyles/smallSelectStyles';\n\nimport { shopProductsFilters } from '../../shared/constants/shopProductFilters';\nimport { shopProductsCategories } from '../../shared/constants/shopProductsCategories';\nimport { setShopFiltersAction } from '../../store/shopActions';\nimport { getProductsProperties } from '../../selectors/shopSelectors';\n\nconst useStyle = makeStyles((theme) => ({\n button: {\n height: 45,\n padding: '0 15px',\n marginRight: 10,\n fontSize: '0.875rem',\n },\n formControl: {\n marginTop: 0,\n marginRight: theme.spacing(1),\n minWidth: 120,\n\n '& fieldset': {\n top: 0,\n },\n\n '& legend': {\n display: 'none',\n },\n },\n label: {\n top: -16,\n marginLeft: 15,\n textTransform: 'uppercase',\n fontWeight: 500,\n fontSize: '0.8125rem',\n },\n container: {\n position: 'relative',\n marginBottom: theme.spacing(2),\n },\n}));\n\nconst initialFilters = {\n regions: '',\n segments: '',\n categories: '',\n};\n\nconst ShopFilters = ({ children, showSelectFilters, onFilterChange }) => {\n const { t } = useTranslation();\n const classes = useStyle();\n const selectFilterClasses = useSelectFilterStyles();\n const smallSelectClasses = useSmallSelectStyles();\n\n const dispatch = useDispatch();\n\n const { filters, activeView } = useSelector(({ shop }) => shop);\n const productProperties = useSelector(getProductsProperties);\n\n const handleCategoryFilterChange = (value) => {\n const { categories } = filters;\n const updatedFilters = {\n filters: {\n ...initialFilters,\n categories: categories === value ? '' : value,\n },\n };\n\n dispatch(setShopFiltersAction(updatedFilters));\n onFilterChange(updatedFilters);\n };\n\n const handleSelectFilterChange = (filter, value) => {\n const updatedFilters = {\n filters: {\n ...filters,\n [filter]: value,\n },\n };\n\n dispatch(setShopFiltersAction(updatedFilters));\n onFilterChange(updatedFilters);\n };\n\n return (\n <>\n <Box className={classes.container}>\n <Grid container justifyContent={activeView ? 'flex-end' : 'space-between'}>\n {!activeView && [\n <Grid item key=\"categories\">\n <Button\n key=\"all\"\n variant={filters.categories ? 'outlined' : 'contained'}\n color=\"primary\"\n className={classes.button}\n size=\"small\"\n onClick={() => handleCategoryFilterChange(filters.categories)}\n >\n {t('All')}\n </Button>\n {productProperties.data.categories.map(({ name }) => (\n <Button\n key={name}\n variant={filters.categories === name ? 'contained' : 'outlined'}\n color=\"primary\"\n className={classes.button}\n size=\"small\"\n onClick={() => handleCategoryFilterChange(name)}\n >\n {name}\n </Button>\n ))}\n </Grid>,\n <Grid item key=\"free\">\n <Grid container justifyContent=\"center\" alignContent=\"center\">\n <Grid item>\n <Button\n key=\"free-trial\"\n variant={\n filters.categories === shopProductsCategories.trial ? 'contained' : 'outlined'\n }\n color=\"primary\"\n className={classes.button}\n size=\"small\"\n onClick={() => handleCategoryFilterChange(shopProductsCategories.trial)}\n >\n {t('Free trial')}\n </Button>\n </Grid>\n <Grid item>\n <Button\n key=\"free-products\"\n variant={\n filters.categories === shopProductsCategories.free ? 'contained' : 'outlined'\n }\n color=\"primary\"\n className={classes.button}\n size=\"small\"\n onClick={() => handleCategoryFilterChange(shopProductsCategories.free)}\n >\n {t('Free of charge')}\n </Button>\n </Grid>\n </Grid>\n </Grid>,\n ]}\n\n <Grid item>{children}</Grid>\n </Grid>\n </Box>\n {showSelectFilters && (\n <Grid container>\n <Grid item>\n <FormControl className={classes.formControl}>\n <InputLabel className={classes.label} shrink={false}>\n {t('Region')}\n </InputLabel>\n <Select\n value={filters.regions}\n onChange={(event) =>\n handleSelectFilterChange(shopProductsFilters.regions, event.target.value)\n }\n label={t('Region')}\n classes={filters.regions ? selectFilterClasses : smallSelectClasses}\n >\n <MenuItem key=\"empty\" value=\"\">\n {t('None')}\n </MenuItem>\n {productProperties.data.regions.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl className={classes.formControl}>\n <InputLabel className={classes.label} shrink={false}>\n {t('Segment')}\n </InputLabel>\n <Select\n value={filters.segments}\n onChange={(event) =>\n handleSelectFilterChange(shopProductsFilters.segments, event.target.value)\n }\n label={t('Segment')}\n classes={filters.segments ? selectFilterClasses : smallSelectClasses}\n >\n <MenuItem key=\"empty\" value=\"\">\n {t('None')}\n </MenuItem>\n {productProperties.data.segments.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n <FormControl className={classes.formControl}>\n <InputLabel className={classes.label} shrink={false}>\n {t('Category')}\n </InputLabel>\n <Select\n value={filters.categories}\n onChange={(event) =>\n handleSelectFilterChange(shopProductsFilters.categories, event.target.value)\n }\n label={t('Category')}\n classes={filters.categories ? selectFilterClasses : smallSelectClasses}\n >\n <MenuItem key=\"empty\" value=\"\">\n {t('None')}\n </MenuItem>\n {productProperties.data.categories.map(({ name }) => (\n <MenuItem key={name} value={name}>\n {name}\n </MenuItem>\n ))}\n </Select>\n </FormControl>\n </Grid>\n </Grid>\n )}\n </>\n );\n};\n\nShopFilters.defaultProps = {\n children: null,\n showSelectFilters: true,\n onFilterChange: () => {},\n};\n\nShopFilters.propTypes = {\n children: PropTypes.node,\n showSelectFilters: PropTypes.bool,\n onFilterChange: PropTypes.func,\n};\n\nexport { ShopFilters };\n","export enum ShopProductDocumentTypes {\n TERMS = 'TERMS',\n PRODUCT_DESCRIPTION = 'PRODUCT_DESCRIPTION',\n ORDER_FORM = 'ORDER_FORM',\n}\n","/* eslint-disable jsx-a11y/anchor-is-valid */\nimport React, { useState, useEffect, FC, FormEvent } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { Box, FormControlLabel, Checkbox, Typography, Link } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { downloadService } from 'services';\n\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { useTranslation } from 'react-i18next';\nimport { ShopProductDocumentTypes } from '../shared/constants/ShopProductDocumentTypes';\n\nconst useStyle = makeStyles(() => ({\n product: {},\n tnc_link: {\n textDecoration: 'underline',\n },\n}));\n\ntype ShopProductItem = {\n id: string;\n name: string;\n documents: Array<ShopProductDocument>;\n};\n\ntype ShopProductDocument = {\n id: string;\n name: string;\n type: ShopProductDocumentTypes;\n};\n\ntype ShopTermsAndConditionsProps = {\n products: Array<ShopProductItem>;\n onAccepted: (termsAcceptance: Map<string, ShopAcceptedDocument>) => void;\n onRejected: () => void;\n};\n\ntype ShopAcceptedDocument = {\n checked: boolean;\n document: ShopProductDocument | null;\n};\n\nconst ShopTermsAndConditions: FC<ShopTermsAndConditionsProps> = ({\n products,\n onAccepted,\n onRejected,\n}) => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n\n const [termsAcceptance, setTermsAcceptance] = useState(new Map<string, ShopAcceptedDocument>([]));\n\n const findTermsDocument = (product: ShopProductItem) => {\n const termDocuments = product.documents.filter((document: ShopProductDocument) => {\n return document.type === ShopProductDocumentTypes.TERMS;\n });\n if (termDocuments?.length) {\n return termDocuments[0];\n }\n return null;\n };\n\n useEffect(() => {\n products.forEach((product) => {\n setTermsAcceptance(termsAcceptance.set(product.id, { checked: false, document: null }));\n });\n }, [products, termsAcceptance]);\n\n const handleClick = (event: React.ChangeEvent<HTMLInputElement>, product: ShopProductItem) => {\n if (termsAcceptance) {\n const document = findTermsDocument(product);\n setTermsAcceptance(\n termsAcceptance.set(product.id, { checked: event.target.checked, document }),\n );\n const allAccepted = Array.from(termsAcceptance.values()).every((value) => value.checked);\n if (allAccepted) {\n onAccepted(termsAcceptance);\n } else {\n onRejected();\n }\n return;\n }\n onRejected();\n };\n\n const throwFetchError = () =>\n dispatch(\n addNotificationAction({\n variant: 'error',\n message: t('SHOP.CHECKOUT.TERMS_DOWNLOAD_FAILED'),\n }),\n );\n\n const handleDownload = (event: FormEvent, document: ShopProductDocument) => {\n event.preventDefault();\n downloadService({\n path: `/shop/file-download/${document.id}/`,\n name: document.name,\n onError: throwFetchError,\n });\n };\n\n const buildTermsLabel = (product: ShopProductItem) => {\n const doc = findTermsDocument(product);\n\n if (doc) {\n return (\n <Typography variant=\"body1\">\n {t('SHOP.CHECKOUT.READ_AND_ACCEPT')}\n <Link\n href=\"#\"\n onClick={(e: FormEvent) => handleDownload(e, doc)}\n className={classes.tnc_link}\n >\n {t('SHOP.CHECKOUT.TERMS_AND_CONDITIONS')}\n </Link>\n {t('SHOP.CHECKOUT.OF_PRODUCT')}\n {product.name}\n {t('SHOP.CHECKOUT.AND_CONFIRM')}\n </Typography>\n );\n }\n return (\n <Typography variant=\"body1\">\n {t('SHOP.CHECKOUT.READ_AND_ACCEPT')}\n {t('SHOP.CHECKOUT.TERMS_AND_CONDITIONS')}\n {t('SHOP.CHECKOUT.OF_PRODUCT')}\n {product.name}\n {t('SHOP.CHECKOUT.AND_CONFIRM')}\n </Typography>\n );\n };\n\n return (\n <>\n <Box>\n {products.map((product) => (\n <Box p={3} className={classes.product} key={product.id}>\n <FormControlLabel\n control={\n <Checkbox\n name=\"Accept\"\n value={termsAcceptance.get(product.id)}\n onChange={(e) => handleClick(e, product)}\n />\n }\n label={buildTermsLabel(product)}\n />\n </Box>\n ))}\n </Box>\n </>\n );\n};\n\nexport { ShopTermsAndConditions };\n","import React, { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { Box, Grid, TextField, Button, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\nimport { Formik, Form } from 'formik';\nimport * as Yup from 'yup';\n\nimport { Loader } from 'ui';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nimport { purchaseProducts, acceptTermsAndConditions } from '../services';\nimport { fetchShopHistoryAction, fetchShopProductsAction } from '../store/shopActions';\nimport { ShopTermsAndConditions } from './ShopTermsAndConditions';\n\nconst useStyle = makeStyles(() => ({\n button: {\n minWidth: 120,\n marginLeft: 10,\n },\n}));\n\nconst validationSchema = Yup.object().shape({\n companyName: Yup.string().required(),\n address: Yup.string().required(),\n city: Yup.string().required(),\n zipCode: Yup.string().required(),\n country: Yup.string().required(),\n vatId: Yup.string().required(),\n contactPerson: Yup.string().required(),\n});\n\nconst ShopCheckoutForm = ({ products, onSuccess, children }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const classes = useStyle();\n\n const productIds = products.map(({ id }) => id);\n\n const authData = useSelector(({ auth }) => auth.data);\n\n const [isLoading, setIsLoading] = useState(false);\n\n const [termsAccepted, setTermsAccepted] = useState(false);\n const [termsDocuments, setTermsDocuments] = useState(new Map([]));\n\n const initialValues =\n authData && authData.organisation\n ? {\n companyName: authData.organisation.name,\n address: authData.organisation.address.addressLine,\n city: authData.organisation.address.city,\n zipCode: authData.organisation.address.zip,\n country: authData.organisation.address.country.name,\n contactPerson: `${authData.firstName} ${authData.name}`,\n }\n : {};\n\n const handleTermsAccepted = terms => {\n setTermsAccepted(true);\n setTermsDocuments(terms);\n };\n\n const handleTermsRejected = () => {\n setTermsAccepted(false);\n setTermsDocuments(null);\n };\n\n const handleSubmit = values => {\n if (termsAccepted) {\n setIsLoading(true);\n\n const agreements = Object.entries(Object.fromEntries(termsDocuments)).map(([key, val]) => ({\n product: key,\n version: val.document?.id,\n }));\n\n acceptTermsAndConditions(agreements)\n .then(() => {\n purchaseProducts({\n ...values,\n productIds,\n })\n .then(response => {\n onSuccess(response);\n dispatch(fetchShopProductsAction());\n dispatch(fetchShopHistoryAction());\n })\n .catch(error =>\n dispatch(\n addNotificationAction({\n message: error.message,\n variant: 'error',\n }),\n ),\n )\n .finally(() => {\n setIsLoading(false);\n });\n })\n .catch(error => {\n dispatch(\n addNotificationAction({\n message: error.message,\n variant: 'error',\n }),\n );\n setIsLoading(false);\n });\n }\n };\n\n useEffect(() => {\n dispatch(fetchShopHistoryAction());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return isLoading ? (\n <Loader cover />\n ) : (\n <Formik\n onSubmit={handleSubmit}\n validationSchema={validationSchema}\n validateOnChange={false}\n initialValues={initialValues}\n >\n {({ handleChange, errors }) => (\n <>\n <Box pt={2}>\n <Box mt={4} mb={2} px={6}>\n <Typography variant=\"h5\">{t('Please fill in your billing address')}</Typography>\n </Box>\n\n <Form>\n <Box width=\"75%\" margin=\"0 auto\" px={6}>\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextField\n name=\"companyName\"\n label={t('ENTITY.NAME')}\n variant=\"outlined\"\n error={Boolean(errors.companyName)}\n onChange={handleChange}\n className={classes.input}\n defaultValue={authData.organisation.name}\n fullWidth\n disabled={isLoading}\n />\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n name=\"address\"\n label={t('Address')}\n variant=\"outlined\"\n error={Boolean(errors.address)}\n onChange={handleChange}\n className={classes.input}\n defaultValue={authData.organisation.address.addressLine}\n fullWidth\n disabled={isLoading}\n />\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n name=\"city\"\n label={t('City')}\n variant=\"outlined\"\n error={Boolean(errors.city)}\n onChange={handleChange}\n className={classes.input}\n defaultValue={authData.organisation.address.city}\n fullWidth\n disabled={isLoading}\n />\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n name=\"zipCode\"\n label={t('Zip code')}\n variant=\"outlined\"\n error={Boolean(errors.zipCode)}\n onChange={handleChange}\n className={classes.input}\n defaultValue={authData.organisation.address.zip}\n fullWidth\n disabled={isLoading}\n />\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n name=\"country\"\n label={t('Country')}\n variant=\"outlined\"\n error={Boolean(errors.country)}\n onChange={handleChange}\n className={classes.input}\n defaultValue={authData.organisation.address.country.name}\n fullWidth\n disabled={isLoading}\n />\n </Grid>\n\n <Grid item xs={12}>\n <TextField\n name=\"vatId\"\n label={t('Vat ID')}\n variant=\"outlined\"\n error={Boolean(errors.vatId)}\n onChange={handleChange}\n className={classes.input}\n fullWidth\n disabled={isLoading}\n />\n </Grid>\n\n <Grid item xs={12}>\n <TextField\n name=\"contactPerson\"\n label={t('Contact person')}\n variant=\"outlined\"\n error={Boolean(errors.contactPerson)}\n onChange={handleChange}\n className={classes.input}\n defaultValue={`${authData.firstName} ${authData.name}`}\n fullWidth\n disabled={isLoading}\n />\n </Grid>\n </Grid>\n <ShopTermsAndConditions\n products={products}\n onAccepted={handleTermsAccepted}\n onRejected={handleTermsRejected}\n />\n </Box>\n <Box p={2} pt={4}>\n <Grid container justifyContent=\"flex-end\">\n {children && <Grid item>{children}</Grid>}\n <Grid item>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n type=\"submit\"\n disabled={isLoading || !termsAccepted}\n >\n {t('Buy')}\n </Button>\n </Grid>\n </Grid>\n </Box>\n </Form>\n </Box>\n </>\n )}\n </Formik>\n );\n};\n\nShopCheckoutForm.defaultProps = {\n children: null,\n};\n\nShopCheckoutForm.propTypes = {\n onSuccess: PropTypes.func.isRequired,\n products: PropTypes.arrayOf(PropTypes.object).isRequired,\n children: PropTypes.node,\n};\n\nexport { ShopCheckoutForm };\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport { Paper, Box, Grid, Typography, Button, IconButton } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\nimport { grey } from '@mui/material/colors';\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nimport { MessageModal } from 'ui/Modals';\nimport { exportToExcel } from 'services';\nimport { formatDate, formatCurrency } from 'shared/functions';\nimport { useQuery } from 'shared/hooks';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nimport { getShopProductValues } from '../shared/functions/getShopProductValues/getShopProductValues';\nimport { removeShopProductsFromBasketAction, setShopActiveViewAction } from '../store/shopActions';\nimport { sendMessageToSales } from '../services';\nimport { getProductsFromBasket } from '../selectors/shopSelectors';\nimport { ShopSelectionList } from './ShopSelectionList/ShopSelectionList';\nimport { ShopCheckoutForm } from './ShopCheckoutForm';\n\nconst useStyle = makeStyles((theme) => ({\n title: {\n display: 'flex',\n alignItems: 'center',\n },\n titleText: {\n position: 'relative',\n top: 4,\n fontSize: '1.5rem',\n },\n value: {\n color: theme.palette.primary.main,\n marginTop: theme.spacing(1),\n marginBottom: theme.spacing(2),\n },\n summary: {\n borderStyle: 'solid',\n borderWidth: '0 0 5px 0',\n borderColor: grey[200],\n },\n total: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n },\n button: {\n width: '100%',\n minWidth: 120,\n },\n stepButton: {\n minWidth: 120,\n },\n finishIcon: {\n width: 150,\n height: 150,\n color: theme.palette.primary.main,\n },\n message: {\n textAlign: 'center',\n },\n}));\n\nconst ShopBasket = ({ activeState, urlsState }) => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const { tab } = useQuery();\n\n const { lastUpdate } = useSelector(({ shop }) => shop.history.basket);\n const { data: products } = useSelector(getProductsFromBasket);\n\n const [urls, setUrls] = urlsState;\n const [activeStep, setActiveStep] = activeState;\n\n const [summaryPrice, setSummaryPrice] = useState(0);\n const [selectedProducts, setSelectedProducts] = useState([]);\n\n const [messageModalOpen, setMessageModalOpen] = useState(false);\n const toggleMessageModal = () => setMessageModalOpen(!messageModalOpen);\n\n const handleSelectionChange = (items) => {\n setSelectedProducts(items);\n };\n\n const actions = [\n {\n name: t('Delete'),\n action: () => {\n if (!selectedProducts.length) return;\n dispatch(removeShopProductsFromBasketAction({ ids: selectedProducts }));\n },\n },\n {\n name: t('Export to Excel'),\n action: () => {\n if (!selectedProducts.length) return;\n\n const filteredProducts = products\n .filter(({ id }) => selectedProducts.includes(id))\n .map((product) =>\n getShopProductValues(product, ['name', 'validity', 'category', 'price']),\n );\n\n exportToExcel({\n fileName: `ShopBasket`,\n workbookName: t('My basket'),\n columns: [t('Name'), t('Validity'), t('Category'), t('Price')],\n data: filteredProducts,\n });\n },\n },\n ];\n\n useEffect(() => {\n setSummaryPrice(\n products.reduce((sum, { pricing }) => {\n const item = pricing.find(({ active }) => active);\n const price = item ? item.price : 0;\n\n return sum + price;\n }, 0),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [products]);\n\n useEffect(() => {\n dispatch(setShopActiveViewAction({ view: tab || null }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tab]);\n\n const handleNext = () => {\n setActiveStep((prevActiveStep) => prevActiveStep + 1);\n };\n\n const handleBack = () => {\n setActiveStep((prevActiveStep) => prevActiveStep - 1);\n };\n\n const handleOnSuccess = (data) => {\n setUrls(data);\n\n handleNext();\n };\n\n const backToProductList = () => {\n navigate({\n search: ``,\n });\n };\n\n const redirectToDashboard = () => {\n window.location.href = `${window.location.origin}/page-one`;\n };\n\n const sendMessage = (messageData) => {\n sendMessageToSales(messageData)\n .then(() => {\n dispatch(\n addNotificationAction({\n message: t('Message sent successfully'),\n variant: 'success',\n }),\n );\n })\n .catch(() => {\n dispatch(\n addNotificationAction({\n message: t('Failed to send a message'),\n variant: 'error',\n }),\n );\n });\n };\n\n return (\n <>\n {activeStep === 0 && (\n <>\n <Box mb={1}>\n <IconButton onClick={backToProductList} size=\"large\">\n <ArrowBackIcon />\n </IconButton>\n <span className={classes.titleText}>{t('My basket')}</span>\n </Box>\n <Paper elevation={3}>\n <Box pl={7} pr={9} py={6} className={classes.summary}>\n <Grid container justifyContent=\"space-between\">\n <Grid item>\n <Box>\n <Typography variant=\"h5\">{t('Total')}</Typography>\n <Typography variant=\"h4\" className={classes.value}>\n {products.length} {t('packages')}\n </Typography>\n </Box>\n </Grid>\n <Grid item>\n <Box>\n <Typography variant=\"h5\">{t('Amount')}</Typography>\n <Typography variant=\"h4\" className={classes.value}>\n {formatCurrency(summaryPrice, 'EUR')}\n </Typography>\n </Box>\n </Grid>\n <Grid item>\n <Box>\n <Typography variant=\"h5\">{t('Last update')}</Typography>\n <Typography variant=\"h4\" className={classes.value}>\n {lastUpdate ? formatDate(lastUpdate) : '-'}\n </Typography>\n </Box>\n </Grid>\n <Grid item>\n <Grid container direction=\"column\" spacing={2}>\n <Grid item>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n onClick={handleNext}\n disabled={!products.length}\n >\n {t('Checkout')}\n </Button>\n </Grid>\n <Grid item>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n className={classes.button}\n onClick={toggleMessageModal}\n >\n {t('Contact sales')}\n </Button>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </Box>\n <Box>\n <ShopSelectionList\n actions={actions}\n products={products}\n onSelectionChange={handleSelectionChange}\n columns={['name', 'validity', 'category', 'pricing']}\n />\n <Box pl={2} pr={15} py={2} className={classes.total}>\n <Grid container justifyContent=\"space-between\">\n <Grid item>\n <Typography variant=\"h5\">{t('Total')}</Typography>\n </Grid>\n <Grid item>\n <Typography variant=\"h5\">{formatCurrency(summaryPrice, 'EUR')}</Typography>\n </Grid>\n </Grid>\n </Box>\n </Box>\n </Paper>\n <MessageModal\n title={t('Contact Sales')}\n open={messageModalOpen}\n onClose={toggleMessageModal}\n onSendMessage={sendMessage}\n />\n </>\n )}\n {activeStep === 1 && (\n <Paper elevation={3}>\n <ShopCheckoutForm products={products} onSuccess={handleOnSuccess}>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n className={classes.stepButton}\n onClick={handleBack}\n >\n {t('Back')}\n </Button>\n </ShopCheckoutForm>\n </Paper>\n )}\n {activeStep === 2 && (\n <Paper elevation={3}>\n <Box p={6}>\n <Grid container justifyContent=\"center\" alignItems=\"center\" direction=\"column\">\n <Grid item>\n <CheckCircleOutlineIcon className={classes.finishIcon} />\n </Grid>\n <Grid item>\n <Typography variant=\"h5\" className={classes.message}>\n {t('Invoice successfully created!')}\n </Typography>\n <Typography variant=\"h6\" className={classes.message}>\n {t(\n 'You can pay using one of the payment methods given in the invoice or using bank transfer given in the invoice.',\n )}\n </Typography>\n </Grid>\n <Grid item>\n <Box pt={3}>\n <Grid container spacing={2}>\n <Grid item>\n <Button\n component=\"a\"\n href={urls.invoiceStripePaymentUrl}\n variant=\"contained\"\n color=\"primary\"\n target=\"_blank\"\n >\n {t('Pay online')}\n </Button>\n </Grid>\n\n <Grid item>\n <Button\n component=\"a\"\n href={urls.invoicePdfUrl}\n variant=\"contained\"\n color=\"primary\"\n target=\"_blank\"\n >\n {t('Download invoice')}\n </Button>\n </Grid>\n </Grid>\n </Box>\n </Grid>\n </Grid>\n </Box>\n <Box p={2}>\n <Grid container justifyContent=\"flex-end\">\n <Grid item>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.stepButton}\n onClick={redirectToDashboard}\n >\n {t('Finish')}\n </Button>\n </Grid>\n </Grid>\n </Box>\n </Paper>\n )}\n </>\n );\n};\n\nShopBasket.propTypes = {\n activeState: PropTypes.array.isRequired,\n urlsState: PropTypes.array.isRequired,\n};\n\nexport { ShopBasket };\n","var _g;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgEntities = function SvgEntities(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 34,\n height: 33,\n viewBox: \"0 0 48.446 47.752\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n \"data-name\": \"Group 12162\",\n stroke: \"currentColor\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83902\",\n d: \"M27.998 47.002H2.75a2 2 0 01-2-2V11.531a2 2 0 012-2h7.52a2 2 0 012 2v4.608a1.994 1.994 0 01.727-.136h10.5V2.804c0-1.085.229-2.4 2.1-1.965l19.995 5.894c1.233.359 2.1.879 2.1 1.964v36.341a2.038 2.038 0 01-2.1 1.965z\",\n fill: \"none\",\n strokeLinecap: \"round\",\n strokeWidth: 1.5\n }), /*#__PURE__*/React.createElement(\"g\", {\n \"data-name\": \"Group 12161\",\n fill: \"none\",\n strokeLinecap: \"round\",\n strokeWidth: 1.5\n }, /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83729\",\n d: \"M32.998 12.772v24.286\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83730\",\n d: \"M39.385 12.772v24.286\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83898\",\n d: \"M5.498 23.002h2a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-2a.5.5 0 01-.5-.5v-2a.5.5 0 01.5-.5z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83899\",\n d: \"M5.498 15.002h2a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-2a.5.5 0 01-.5-.5v-2a.5.5 0 01.5-.5z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83900\",\n d: \"M5.498 39.002h2a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-2a.5.5 0 01-.5-.5v-2a.5.5 0 01.5-.5z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83901\",\n d: \"M5.498 31.002h2a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-2a.5.5 0 01-.5-.5v-2a.5.5 0 01.5-.5z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83894\",\n d: \"M15.498 21.002h2a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-2a.5.5 0 01-.5-.5v-2a.5.5 0 01.5-.5z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83895\",\n d: \"M15.498 37.002h2a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-2a.5.5 0 01-.5-.5v-2a.5.5 0 01.5-.5z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83896\",\n d: \"M15.498 29.002h2a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-2a.5.5 0 01-.5-.5v-2a.5.5 0 01.5-.5z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83892\",\n d: \"M21.498 21.002h2a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-2a.5.5 0 01-.5-.5v-2a.5.5 0 01.5-.5z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83897\",\n d: \"M21.498 37.002h2a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-2a.5.5 0 01-.5-.5v-2a.5.5 0 01.5-.5z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83893\",\n d: \"M21.498 29.002h2a.5.5 0 01.5.5v2a.5.5 0 01-.5.5h-2a.5.5 0 01-.5-.5v-2a.5.5 0 01.5-.5z\",\n fill: \"currentColor\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83903\",\n d: \"M12.998 16.002h13a2 2 0 012 2v29h-17v-29a2 2 0 012-2z\",\n fill: \"none\",\n strokeLinecap: \"round\",\n strokeWidth: 1.5\n }))));\n};\n\nexport default SvgEntities;","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport { Paper, Typography, Box, IconButton } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\n\nimport { useQuery } from 'shared/hooks';\nimport { exportToExcel } from 'services';\n\nimport { getShopProductValues } from '../shared/functions/getShopProductValues/getShopProductValues';\nimport { setShopActiveViewAction } from '../store/shopActions';\nimport { getPurchasedProducts } from '../selectors/shopSelectors';\nimport { ShopSelectionList } from './ShopSelectionList/ShopSelectionList';\n\nconst useStyle = makeStyles(() => ({\n title: {\n position: 'relative',\n top: 2,\n },\n}));\n\nconst ShopPurchases = () => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n const { tab } = useQuery();\n const navigate = useNavigate();\n\n const products = useSelector(getPurchasedProducts);\n\n const [selectedProducts, setSelectedProducts] = useState([]);\n\n const handleSelectionChange = (items) => {\n setSelectedProducts(items);\n };\n\n const backToProductList = () => {\n navigate({\n search: ``,\n });\n };\n\n const actions = [\n {\n name: t('Export to Excel'),\n action: () => {\n if (!selectedProducts.length) return;\n\n const filteredProducts = products.data\n .filter(({ id }) => selectedProducts.includes(id))\n .map((product) =>\n getShopProductValues(product, [\n 'name',\n 'purchaseDate',\n 'validity',\n 'subscriptionUntil',\n 'category',\n 'price',\n ]),\n );\n\n exportToExcel({\n fileName: `ShopPurchases`,\n workbookName: t('My purchases'),\n columns: [\n t('Name'),\n t('Date of purchase'),\n t('Validity'),\n t('Renewal / end'),\n t('Category'),\n t('Price'),\n ],\n data: filteredProducts,\n });\n },\n },\n ];\n\n useEffect(() => {\n dispatch(setShopActiveViewAction({ view: tab || null }));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tab]);\n\n return (\n <>\n <Box mb={1}>\n <Typography variant=\"h5\">\n <IconButton onClick={backToProductList} size=\"large\">\n <ArrowBackIcon />\n </IconButton>\n <span className={classes.title}>{t('My purchases')}</span>\n </Typography>\n </Box>\n <Paper elevation={3}>\n <ShopSelectionList\n actions={actions}\n products={products.data}\n onSelectionChange={handleSelectionChange}\n columns={[\n 'name',\n 'purchaseDate',\n 'validity',\n 'subscriptionUntil',\n 'category',\n 'pricing',\n 'actions',\n ]}\n showFreeTrialPrice\n />\n </Paper>\n </>\n );\n};\n\nexport { ShopPurchases };\n","import React, { useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Paper, Box, Grid, Typography, Button } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\n\nimport { Loader } from 'ui';\nimport { useQuery } from 'shared/hooks';\n\nimport { shopViews } from '../shared/constants/shopViews';\nimport {\n fetchShopProductsAction,\n fetchShopHistoryAction,\n setShopActiveViewAction,\n fetchShopProductPropertiesAction,\n} from '../store/shopActions';\nimport { ShopFavorites } from '../components/ShopFavorites';\nimport { getShopProducts } from '../selectors/shopSelectors';\nimport { ShopProduct } from '../components/ShopProduct/ShopProduct';\nimport { ShopSortSelect } from '../components/ShopSortSelect/ShopSortSelect';\nimport { ShopFilters } from '../components/ShopFilters/ShopFilters';\nimport { ShopBasket } from '../components/ShopBasket';\nimport { ShopPurchases } from '../components/ShopPurchases';\n\nconst useStyle = makeStyles(() => ({\n title: {\n display: 'flex',\n alignItems: 'center',\n },\n counter: {\n fontSize: 15,\n marginRight: 20,\n marginBottom: 2,\n fontWeight: 500,\n },\n button: {\n height: 45,\n marginLeft: 10,\n },\n noDataText: {\n fontSize: 18,\n },\n}));\n\nconst Shop = () => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n const { tab } = useQuery();\n const navigate = useNavigate();\n const activeBasketState = useState(0);\n const urlsState = useState({});\n\n const { products: allProducts, activeView } = useSelector(({ shop }) => shop);\n const products = useSelector(getShopProducts);\n const activeProducts = allProducts && allProducts.data.filter(({ active }) => active);\n\n useEffect(() => {\n dispatch(fetchShopProductPropertiesAction());\n dispatch(fetchShopProductsAction());\n dispatch(fetchShopHistoryAction());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n const [, setActiveBasket] = activeBasketState;\n\n dispatch(setShopActiveViewAction({ view: tab || null }));\n setActiveBasket(0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tab]);\n\n const handleViewChange = (view) => {\n navigate({\n search: tab === view ? '' : `?tab=${view}`,\n });\n };\n\n if (products.isPending) {\n return <Loader center />;\n }\n\n return (\n <>\n <Box my={2}>\n <ShopFilters showSelectFilters={false}>\n {Object.keys(shopViews).map((view) => (\n <Button\n key={view}\n variant={activeView === view ? 'contained' : 'outlined'}\n color=\"primary\"\n className={classes.button}\n onClick={() => handleViewChange(view)}\n >\n {t(`My ${shopViews[view]}`)}\n </Button>\n ))}\n </ShopFilters>\n </Box>\n {!activeView && (\n <>\n <Box mb={2}>\n <Grid container justifyContent=\"space-between\">\n <Grid item className={classes.title}>\n <Typography variant=\"h5\">{t('Our offerings')}</Typography>\n </Grid>\n <Grid item>\n <Box display=\"flex\" alignItems=\"center\">\n <Typography component=\"span\" className={classes.counter}>\n {products.data.length} of {activeProducts.length}\n </Typography>\n <ShopSortSelect />\n </Box>\n </Grid>\n </Grid>\n </Box>\n <Paper elevation={3}>\n {products.data.length ? (\n <Box padding={6}>\n {products.data.map((item) => (\n <ShopProduct data={item} key={item.id} />\n ))}\n </Box>\n ) : (\n <Box padding={3}>\n <Typography variant=\"body1\" className={classes.noDataText}>\n {t('No products found')}\n </Typography>\n </Box>\n )}\n </Paper>\n </>\n )}\n {activeView === shopViews.purchases && <ShopPurchases />}\n {activeView === shopViews.favorites && <ShopFavorites />}\n {activeView === shopViews.basket && (\n <ShopBasket activeState={activeBasketState} urlsState={urlsState} />\n )}\n </>\n );\n};\n\nexport { Shop };\n","import { EventCategory, EventsActionType } from '../types/eventsTypes';\n\nexport const fetchEventsAction = (status?: 'ACTIVE' | 'DRAFT' | 'ALL') => ({\n type: EventsActionType.FETCH_EVENTS,\n payload: { status },\n});\n\nexport const fetchEventsPropertiesAction = () => ({\n type: EventsActionType.FETCH_EVENT_PROPERTIES,\n});\n\nexport const fetchEventDetailsAction = (id: string) => ({\n type: EventsActionType.FETCH_EVENT_DETAILS,\n payload: id,\n});\n\nexport const setEventsCategoryFilter = (category: EventCategory | '') => ({\n type: EventsActionType.SET_EVENTS_CATEGORY_FILTER,\n payload: category,\n});\n\nexport const setEventsTimelineFilter = (timeline: string) => ({\n type: EventsActionType.SET_EVENTS_TIMELINE_FILTER,\n payload: timeline,\n});\n\nexport const setEventsFavoritesFilter = (favourites: boolean) => ({\n type: EventsActionType.SET_EVENTS_FAVORITES_FILTER,\n payload: favourites,\n});\n\nexport const setEventsSortDesc = (sortDesc: boolean) => ({\n type: EventsActionType.SET_EVENTS_SORT_DESC,\n payload: sortDesc,\n});\n\nexport const fetchEventTitles = (title: string) => ({\n type: EventsActionType.FETCH_EVENT_TITLES,\n payload: title,\n});\n\nexport const fetchEventSessions = (id: string) => ({\n type: EventsActionType.FETCH_EVENT_SESSIONS,\n payload: id,\n});\n\nexport const fetchSessionsDetails = (id: string) => ({\n type: EventsActionType.FETCH_SESSION_DETAILS,\n payload: id,\n});\n","export const eventsLocations = {\n webinar: 'Web conference',\n onsight: 'Onsight',\n};\n","import { SelectOption, SchemaElement } from 'modules/events/types/eventsTypes';\nimport * as Yup from 'yup';\n\nexport const validationSchema = Yup.object().shape({\n event: Yup.object().shape({\n id: Yup.string().required(),\n name: Yup.string().required(),\n }),\n session: Yup.object().shape({\n id: Yup.string().required(),\n name: Yup.string().required(),\n }),\n dateTime: Yup.date().required(),\n duration: Yup.string().required(),\n location: Yup.object().shape({\n id: Yup.string().required(),\n name: Yup.string().required(),\n }),\n language: Yup.string().required(),\n category: Yup.object().shape({\n id: Yup.string().required(),\n name: Yup.string().required(),\n }),\n segment: Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n productLine: Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n industry: Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n region: Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n marketingLabel: Yup.string().required(),\n description: Yup.string().required(),\n logo: Yup.mixed().required(),\n});\n\nexport const getFormSchema = (properties: Record<string, SelectOption[]>): SchemaElement[] => [\n {\n name: 'event',\n label: 'Select event',\n type: 'autocomplete',\n },\n {\n name: 'session',\n label: 'Select session',\n type: 'autocomplete',\n },\n {\n name: 'dateTime',\n label: 'Date and time',\n type: 'date-time',\n width: 3,\n },\n {\n name: 'duration',\n label: 'Duration',\n width: 3,\n },\n {\n name: 'location',\n label: 'Location',\n type: 'autocomplete',\n width: 3,\n options: properties.locations,\n },\n {\n name: 'language',\n label: 'Language',\n width: 3,\n },\n {\n name: 'category',\n label: 'Category',\n type: 'autocomplete',\n width: 6,\n options: properties.categories,\n },\n {\n name: 'segment',\n label: 'Segment',\n type: 'autocomplete',\n width: 6,\n options: properties.segments,\n },\n {\n name: 'productLine',\n label: 'Product Line',\n type: 'autocomplete',\n width: 6,\n options: properties.productLines,\n },\n {\n name: 'industry',\n label: 'Industry',\n type: 'autocomplete',\n width: 6,\n options: properties.industries,\n },\n {\n name: 'region',\n label: 'Region',\n type: 'autocomplete',\n width: 6,\n options: properties.regions,\n },\n {\n name: 'marketingLabel',\n label: 'Marketing Label',\n width: 6,\n },\n {\n name: 'description',\n label: 'Edit description',\n type: 'rich-text',\n },\n {\n name: 'actionsColumn',\n type: 'group',\n width: 6,\n controls: [\n {\n name: 'documents',\n label: 'Documents',\n type: 'documents',\n },\n {\n name: 'activeEvent',\n label: 'Active event',\n type: 'checkbox',\n },\n ],\n },\n {\n name: 'logo',\n label: 'Upload image',\n type: 'image',\n width: 6,\n },\n];\n","import { Box, Button } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport React, { FC, ChangeEvent } from 'react';\nimport { useTranslation } from 'react-i18next';\n\nconst useStyles = makeStyles(() => ({\n input: {\n display: 'none',\n },\n}));\n\nconst id = 'events_documents_upload';\n\ntype EventsDocumentsUploadProps = {\n onUpload: (file: File) => void;\n};\n\nexport const EventsDocumentsUpload: FC<EventsDocumentsUploadProps> = ({ onUpload }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) =>\n onUpload(event.target.files?.[0] as File);\n\n return (\n <Box>\n <input id={id} type=\"file\" onChange={handleChange} className={classes.input} />\n <label htmlFor={id}>\n <Button variant=\"contained\" color=\"primary\" component=\"span\">\n {t('UPLOAD.BROWSE')}\n </Button>\n </label>\n </Box>\n );\n};\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Typography from '@mui/material/Typography';\nimport { Grid, Button, Box, Paper } from '@mui/material';\nimport Divider from '@mui/material/Divider';\nimport { DialogTitleWithClose } from 'ui';\nimport IconButton from '@mui/material/IconButton';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { EventsDocumentsUpload } from './EventsDocumentsUpload';\n\nconst useStyles = makeStyles({\n paper: {\n minWidth: 600,\n },\n});\n\ntype EventsDocumentsModalProps = {\n documents: any[];\n onChange: (value: any[]) => void;\n open: boolean;\n onClose: () => void;\n};\n\nexport const EventsDocumentsModal: FC<EventsDocumentsModalProps> = ({\n onChange,\n open,\n onClose,\n documents,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const handleSubmit = async () => {\n onClose();\n };\n\n const addFile = (file: File) => {\n if (documents.map(item => item.name).includes(file.name)) {\n return;\n }\n\n onChange([file, ...documents]);\n };\n\n const deleteFile = (file: File) => () =>\n onChange(documents.filter(item => item.name !== file.name));\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\" classes={{ paper: classes.paper }}>\n {/* @ts-ignore */}\n <DialogTitleWithClose onClose={onClose}>{t('Documents upload')}</DialogTitleWithClose>\n <DialogContent>\n <Divider />\n <Box my={2}>\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid>\n <Typography>{`${t('File format')}: .pdf`}</Typography>\n <Typography>{`${t('Max size')}: 5 MB`}</Typography>\n </Grid>\n <Grid>\n <EventsDocumentsUpload onUpload={addFile} />\n </Grid>\n </Grid>\n </Box>\n <Divider />\n {documents.length === 0 ? (\n <Box m={8}>\n <Typography align=\"center\">{t('No files currently uploaded')}</Typography>\n </Box>\n ) : (\n <Box pt={3}>\n {documents.map(item => (\n <Box key={item.name} mb={3}>\n <Paper>\n <Box p={2}>\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Typography align=\"center\">{item.name}</Typography>\n <IconButton onClick={deleteFile(item)} size=\"large\">\n <DeleteIcon />\n </IconButton>\n </Grid>\n </Box>\n </Paper>\n </Box>\n ))}\n </Box>\n )}\n <Box mb={2}>\n <Grid container justifyContent=\"flex-end\">\n <Button color=\"primary\" variant=\"contained\" type=\"submit\" onClick={handleSubmit}>\n {t('Save')}\n </Button>\n </Grid>\n </Box>\n </DialogContent>\n </Dialog>\n );\n};\n","import { Box, Grid, Typography } from '@mui/material';\nimport React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { RoundButton } from 'ui/Buttons';\nimport { EventsDocumentsModal } from './EventsDocumentsModal';\n\ntype EventsDocumentsControlProps = {\n label: string;\n value: any[];\n onChange: (value: any[]) => void;\n};\n\nexport const EventsDocumentsControl: FC<EventsDocumentsControlProps> = ({\n label,\n value = [],\n onChange,\n}) => {\n const { t } = useTranslation();\n const [showDocumentsModal, setShowDocumentsModal] = useState(false);\n\n const toggleDocumentsModal = () => setShowDocumentsModal(!showDocumentsModal);\n\n return (\n <Box mt={2}>\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t(label)}\n </Typography>\n </Grid>\n <Grid item>\n <Grid container alignItems=\"center\">\n <EventsDocumentsModal\n documents={value}\n onChange={onChange}\n open={showDocumentsModal}\n onClose={toggleDocumentsModal}\n />\n {/* @ts-ignore */}\n <RoundButton label={t('Upload')} onClick={toggleDocumentsModal} marginRight />\n </Grid>\n </Grid>\n </Grid>\n </Box>\n );\n};\n","import { Box, TextField, Typography, Checkbox, FormControlLabel } from '@mui/material';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport DateTimePicker from '@mui/lab/DateTimePicker';\nimport { debounce } from 'lodash';\nimport { TextEditor, FileUploader } from 'ui';\nimport { FieldControlProps, SelectOption } from '../types/eventsTypes';\nimport { EventsDocumentsControl } from './EventsDocumentsControl/EventsDocumentsControl';\n\nexport const FieldControl: FC<FieldControlProps> = ({\n name,\n type,\n label,\n options,\n disabled,\n error,\n value,\n onChange,\n onUpdate,\n}) => {\n const { t } = useTranslation();\n\n /* *********************************************************************** */\n /* Date */\n /* *********************************************************************** */\n if (type === 'date-time') {\n return (\n <DateTimePicker\n inputFormat=\"h:mm a dd/MM/yyyy\"\n renderInput={() => <TextField label={label} error={!!error} />}\n value={(value as Date) || null}\n onChange={val => onChange(name, val)}\n disabled={disabled}\n />\n );\n }\n\n /* *********************************************************************** */\n /* Autocomplete */\n /* *********************************************************************** */\n if (type === 'autocomplete') {\n return (\n <Autocomplete\n options={options || []}\n getOptionLabel={(option: SelectOption) => option.name}\n isOptionEqualToValue={(option: SelectOption, val: SelectOption) => option.id === val.id}\n onChange={(_, val) => onChange(name, val)}\n onInputChange={debounce((_, val) => onUpdate && onUpdate(name, val), 500)}\n value={(value as SelectOption) || null}\n renderInput={params => (\n <TextField\n {...params}\n error={!!error}\n label={t(label)}\n variant=\"outlined\"\n disabled={disabled}\n />\n )}\n disabled={disabled || !options}\n />\n );\n }\n\n /* *********************************************************************** */\n /* Rich text */\n /* *********************************************************************** */\n if (type === 'rich-text') {\n return (\n <>\n <Box mt={2}>\n <Typography variant=\"body1\" component=\"span\">\n {t(label)}\n </Typography>\n </Box>\n <Box mt={1}>\n <TextEditor\n error={!!error}\n placeholder={t(label)}\n value={value as string}\n disabled={disabled}\n onChange={val => onChange(name, val)}\n />\n </Box>\n </>\n );\n }\n\n /* *********************************************************************** */\n /* Checkbox */\n /* *********************************************************************** */\n if (type === 'checkbox') {\n return (\n <Box mt={2}>\n <FormControlLabel\n control={\n <Checkbox\n checked={(value as boolean) || false}\n onChange={(_, val) => onChange(name, val)}\n name={name}\n color=\"primary\"\n disabled={disabled}\n />\n }\n label={label}\n />\n </Box>\n );\n }\n\n /* *********************************************************************** */\n /* Number */\n /* *********************************************************************** */\n if (type === 'number') {\n return (\n <TextField\n name={name}\n fullWidth\n type=\"number\"\n label={t(label)}\n variant=\"outlined\"\n error={!!error}\n value={value || ''}\n onChange={event => onChange(name, event.target.value)}\n disabled={disabled}\n />\n );\n }\n\n /* *********************************************************************** */\n /* Image */\n /* *********************************************************************** */\n if (type === 'image') {\n return (\n <Box mt={2}>\n <Typography variant=\"body1\" component=\"span\">\n {t(label)}\n </Typography>\n <Box mt={2}>\n <FileUploader\n value={value ? [value] : []}\n onChange={img => onChange(name, img[0])}\n error={!!error}\n />\n </Box>\n </Box>\n );\n }\n\n /* *********************************************************************** */\n /* Documents */\n /* *********************************************************************** */\n if (type === 'documents') {\n return (\n <EventsDocumentsControl\n label={label}\n value={value as any[]}\n onChange={docs => onChange(name, docs)}\n />\n );\n }\n\n /* *********************************************************************** */\n /* Text (default) */\n /* *********************************************************************** */\n return (\n <TextField\n name={name}\n fullWidth\n label={t(label)}\n variant=\"outlined\"\n error={!!error}\n value={value || ''}\n onChange={event => onChange(name, event.target.value)}\n disabled={disabled}\n />\n );\n};\n","import React, { FC } from 'react';\nimport { Grid } from '@mui/material';\nimport { SchemaElement } from '../types/eventsTypes';\nimport { FieldControl } from './FieldControl';\n\ntype FormGeneratorProps = {\n fields: SchemaElement[];\n values: Record<string, unknown>;\n errors: Record<string, unknown>;\n onChange: (name: string, value: unknown) => void;\n /* Tracks control update, that is not yet a value change (eg. input text on autocomplete) */\n onUpdate?: (name: string, value: unknown) => void;\n};\n\nexport const FormGenerator: FC<FormGeneratorProps> = ({\n fields,\n errors,\n values,\n onChange,\n onUpdate,\n}) => (\n <>\n {fields.map(element => {\n if (element.type === 'group') {\n return (\n <Grid key={element.name} item xs={element.width || 12}>\n <FormGenerator\n fields={element.controls}\n errors={errors}\n values={values}\n onChange={onChange}\n onUpdate={onUpdate}\n />\n </Grid>\n );\n }\n\n const { name, type, label, width, options } = element;\n\n return (\n <Grid key={name} item xs={width || 12}>\n <FieldControl\n name={name}\n type={type}\n label={label}\n options={options}\n error={(errors as Record<string, unknown>)[name]}\n value={(values as Record<string, unknown>)[name]}\n onChange={onChange}\n onUpdate={onUpdate}\n />\n </Grid>\n );\n })}\n </>\n);\n","import React, { FC, useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Form, FormikProps, FormikValues } from 'formik';\nimport { Grid, Button } from '@mui/material';\nimport { format, formatISO } from 'date-fns';\nimport { utcToZonedTime } from 'date-fns-tz';\nimport {\n getEventTitles,\n getEventSessions,\n getSessionsDetails,\n getEventProperties,\n} from 'modules/events/selectors/eventsSelectors';\nimport {\n fetchSessionsDetails,\n fetchEventSessions,\n fetchEventTitles,\n} from 'modules/events/store/eventsActions';\nimport { EventSession, SchemaElement, SelectOption } from 'modules/events/types/eventsTypes';\nimport { eventsLocations } from 'modules/events/constants/eventsLocations';\nimport { getFormSchema } from './EventEditSchema';\nimport { FormGenerator } from '../../FormGenerator';\n\nconst getSessions = (\n selectedEventId: string,\n eventSessions: Record<string, { data: EventSession[] }>,\n) =>\n eventSessions[selectedEventId]?.data?.map(({ id, dateTime }) => ({\n id,\n name: format(dateTime, 'd MMMM yyyy - EEEE h:mm a'),\n }));\n\ntype EventEditFormProps = FormikProps<FormikValues> & {\n sessionDetailsState: any[];\n};\n\nexport const EventEditForm: FC<EventEditFormProps> = ({\n setFieldValue,\n values,\n initialValues,\n errors,\n sessionDetailsState,\n}) => {\n const dispatch = useDispatch();\n\n const [fields, setFields] = useState<SchemaElement[]>([]);\n const [selectedEventId, setSelectedEventId] = useState(initialValues?.event?.id);\n const [sessions, setSessions] = useState<SelectOption[]>();\n const [selectedSessionId, setSelectedSessionId] = useState(initialValues?.session?.id || '');\n const [sessionDetails, setSessionDetails] = sessionDetailsState;\n\n const properties = useSelector(getEventProperties);\n const eventTitles = useSelector(getEventTitles);\n const eventSessions = useSelector(getEventSessions);\n const sessionsDetails = useSelector(getSessionsDetails);\n\n const handleUpdate = (name: string, value: unknown) => {\n /* On event input change: filter event titles list by typed phrase */\n if (name === 'event') {\n dispatch(fetchEventTitles(value as string));\n }\n };\n\n const handleChange = (name: string, value: unknown) => {\n /* On event selection or clear */\n if (name === 'event') {\n /* Reset session since there is no event (or new event) to choose sessions from */\n setFieldValue('session', null);\n setSelectedEventId('');\n\n /* Update session field based on selected event */\n if (value) {\n const { id } = value as SelectOption;\n dispatch(fetchEventSessions(id));\n setSelectedEventId(id);\n }\n }\n\n /* On session selection: update fields that can be prefilled with session data */\n if (name === 'session' && value) {\n const { id } = value as SelectOption;\n dispatch(fetchSessionsDetails(id));\n setSelectedSessionId(id);\n }\n\n /* Proceed with the actual field update */\n setFieldValue(name, value);\n };\n\n /* *********************************************************************** */\n /* Fetching sessions for initial event if there is any */\n /* *********************************************************************** */\n useEffect(() => {\n if (!initialValues?.event?.id) return;\n\n dispatch(fetchEventSessions(initialValues.event.id));\n }, [initialValues, dispatch]);\n\n /* *********************************************************************** */\n /* Filtering event titles by searched phrase */\n /* *********************************************************************** */\n useEffect(() => {\n setFields(prev =>\n prev.map(field =>\n field.name === 'event'\n ? {\n ...field,\n options: eventTitles.data.map(item => ({ id: item.id, name: item.attributes.title })),\n }\n : field,\n ),\n );\n }, [eventTitles, setFields]);\n\n /* *********************************************************************** */\n /* Setting sessions for selected event */\n /* *********************************************************************** */\n\n useEffect(() => {\n setSessions(getSessions(selectedEventId, eventSessions));\n }, [selectedEventId, eventSessions]);\n\n useEffect(() => {\n setFields(prev =>\n prev.map(field => (field.name === 'session' ? { ...field, options: sessions } : field)),\n );\n }, [sessions, setFields]);\n\n /* *********************************************************************** */\n /* Populating fields with details from selected session */\n /* *********************************************************************** */\n\n useEffect(() => {\n setSessionDetails(sessionsDetails[selectedSessionId]);\n }, [selectedSessionId, sessionsDetails, setSessionDetails]);\n\n useEffect(() => {\n if (!sessionDetails || sessionDetails.isPending) return;\n\n const { estimated_started_at: timestamp, timezone } = sessionDetails.data.data.attributes;\n\n setFieldValue(\n 'dateTime',\n `${formatISO(utcToZonedTime(timestamp * 1000, timezone)).slice(0, 19)}`,\n );\n setFieldValue('duration', sessionDetails.data.included[0].attributes.estimated_duration);\n setFieldValue('language', sessionDetails.data.included[0].attributes.language);\n setFieldValue('description', sessionDetails.data.included[0].attributes.description);\n\n const kindId = sessionDetails.data.included[0].attributes.kind as keyof typeof eventsLocations;\n const kindName = eventsLocations[kindId];\n\n setFieldValue('location', { id: kindId, name: kindName });\n }, [sessionDetails, setFieldValue]);\n\n /* *********************************************************************** */\n /* Update select options with properties from backend */\n /* *********************************************************************** */\n\n useEffect(() => {\n if (properties.isPending) return;\n\n setFields(getFormSchema(properties.data));\n }, [properties]);\n\n return (\n <Form>\n <Grid container spacing={2}>\n <FormGenerator\n fields={fields}\n values={values}\n errors={errors}\n onChange={handleChange}\n onUpdate={handleUpdate}\n />\n <Button variant=\"contained\" color=\"primary\" type=\"submit\">\n Next\n </Button>\n </Grid>\n </Form>\n );\n};\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Typography } from '@mui/material';\nimport { Formik } from 'formik';\nimport { updateSessionId } from 'modules/events/constants/eventsUpdate';\nimport { Event } from 'modules/events/types/eventsTypes';\nimport { EventEditForm } from './EventEditForm';\nimport { validationSchema } from './EventEditSchema';\n\ntype EventEditProps = {\n initialValues: object;\n editedEventDetails?: Event;\n onEventUpdate: (event: Event, formValues: object) => void;\n};\n\nexport const EventEdit: FC<EventEditProps> = ({\n initialValues,\n editedEventDetails,\n onEventUpdate,\n}) => {\n const { t } = useTranslation();\n const sessionDetailsState = useState<any>();\n\n const submit = (values: any) => {\n const [sessionDetails] = sessionDetailsState;\n\n const getSessionDetails = () => {\n /*\n Session data can come from backend if session seleted (`sessionDetails` object)\n or from event object (`editedEventDetails`) if that's an edit instead of create.\n */\n const isUpdatingEvent =\n values.session.id === updateSessionId && editedEventDetails && !sessionDetails;\n\n if (isUpdatingEvent) {\n return editedEventDetails!;\n }\n\n const [eventData] = sessionDetails.data.included;\n\n return {\n externalId: sessionDetails.data.data.id,\n type: eventData.type,\n title: eventData.attributes.title,\n organiser: `${eventData.attributes.owner.attributes.first_name} ${eventData.attributes.owner.attributes.last_name}`,\n };\n };\n\n const { externalId, type, title, organiser } = getSessionDetails();\n\n onEventUpdate(\n {\n status: values.activeEvent ? 'ACTIVE' : 'DRAFT',\n externalId,\n image: values.logo,\n type,\n title,\n shortDescription: values.description, // missing\n description: values.description,\n category: values.category.name.toUpperCase().replace(/ /g, '_'),\n region: values.region.name,\n industry: values.industry.name,\n eventDate: values.dateTime,\n duration: values.duration,\n languages: values.language,\n organiser,\n thirdPartySource: false,\n segment: values.segment.name,\n productLine: values.productLine.name,\n marketingLabel: values.marketingLabel,\n location: {\n name: values.location.name,\n },\n documentList: values.documents,\n },\n values,\n );\n };\n\n return (\n <Formik\n onSubmit={submit}\n validationSchema={validationSchema}\n initialValues={initialValues}\n validateOnChange={false}\n >\n {formData => (\n <Box px={8} py={4}>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('Specify event properties:')}</Typography>\n </Box>\n <EventEditForm sessionDetailsState={sessionDetailsState} {...formData} />\n </Box>\n )}\n </Formik>\n );\n};\n","export const updateSessionId = 'update_session_id';\n","import { castArray } from 'lodash';\nimport { ItemType } from 'shared/types/portfolios';\n\nexport const getSelectedItems = (ids: string[] | string, type: ItemType = ItemType.SCOPEONEID) => ({\n count: castArray(ids).length,\n itemIds: castArray(ids).reduce((itemIds, id) => ({ ...itemIds, [id]: id }), {}),\n items: {},\n type,\n});\n","import React, { HTMLProps, FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { isFuture } from 'date-fns';\nimport { Event } from 'modules/events/types/eventsTypes';\nimport { Button } from '@mui/material';\nimport { useDispatch } from 'react-redux';\nimport { unregisterFromAnEvent, registerForAnEvent } from 'modules/events/services/eventsService';\nimport { fetchEventsAction } from 'modules/events/store/eventsActions';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\ntype EventsActionButton = HTMLProps<HTMLButtonElement> & {\n event: Event;\n detailsView?: boolean;\n onRegister?: () => void;\n};\n\nexport const EventsActionButton: FC<EventsActionButton> = ({\n event: { id, connectionLink, userRegistered, eventDate },\n detailsView = false,\n onRegister = null,\n ...rest\n}) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const upcoming = isFuture(new Date(eventDate));\n\n const handleAction = () => {\n const updateRegistrationStatus = userRegistered\n ? unregisterFromAnEvent(id as string)\n : registerForAnEvent(id as string);\n\n updateRegistrationStatus\n .then(() => {\n dispatch(\n addNotificationAction({\n message: `Successfully ${\n userRegistered ? 'unregistered from' : 'registered to'\n } an event!`,\n variant: 'success',\n }),\n );\n dispatch(fetchEventsAction());\n if (onRegister) {\n onRegister();\n }\n })\n .catch((error: any) => {\n dispatch(\n addNotificationAction({\n message: error.message,\n variant: 'error',\n }),\n );\n });\n };\n\n const showAccessButton = userRegistered && ((upcoming && !detailsView) || !upcoming);\n let label = upcoming ? 'Get started' : 'View recording';\n\n if (showAccessButton) {\n return (\n <Button\n variant=\"contained\"\n // @ts-ignore\n color=\"primary\"\n component=\"a\"\n target=\"_blank\"\n href={connectionLink}\n {...rest}\n disabled={!connectionLink}\n >\n {t(label)}\n </Button>\n );\n }\n\n if (upcoming) {\n label = userRegistered ? 'Unregister' : 'Register';\n } else {\n label = 'Access recording';\n }\n\n return (\n <Button\n variant=\"contained\"\n // @ts-ignore\n color=\"primary\"\n onClick={handleAction}\n {...rest}\n >\n {t(label)}\n </Button>\n );\n};\n","import React, { FC, useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { Collapse, Box, Typography, Grid, Button, Divider } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { grey } from '@mui/material/colors';\nimport format from 'date-fns/format';\n\nimport { sendMessageToSales } from 'modules/shop/services';\nimport { Event, Document } from 'modules/events/types/eventsTypes';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { fetchEventDetailsAction } from 'modules/events/store/eventsActions';\nimport { getEventsDetails } from 'modules/events/selectors/eventsSelectors';\nimport { sanitizeHtml } from 'shared/functions';\nimport { SummaryCardDocuments } from 'modules/common/SummaryCard';\nimport { FlagsList } from 'ui';\nimport { MessageModal } from 'ui/Modals';\nimport { eventsCategories } from 'modules/events/constants/eventsCategories';\nimport { EventsActionButton } from '../EventsActionButton';\n\nconst useStyle = makeStyles(theme => ({\n stats: {\n textAlign: 'center',\n },\n statValue: {\n color: theme.palette.primary.main,\n },\n statLabel: {\n fontWeight: 'bold',\n },\n footer: {\n borderWidth: '5px 0 0 0',\n borderStyle: 'solid',\n borderColor: grey[300],\n },\n checkoutButton: {\n backgroundColor: '#ff8900',\n width: 175,\n height: 45,\n marginLeft: 15,\n },\n button: {\n height: 45,\n },\n price: {\n fontWeight: 500,\n },\n sidebar: {\n borderWidth: '0 0 0 3px',\n borderStyle: 'solid',\n borderColor: grey[300],\n },\n container: {\n marginTop: theme.spacing(4),\n },\n subtitle: {\n color: theme.palette.primary.main,\n },\n divider: {\n marginTop: 5,\n backgroundColor: theme.palette.text.primary,\n },\n detailsInfo: {\n fontSize: 16,\n fontWeight: 500,\n marginBottom: theme.spacing(2),\n },\n detailsInfoList: {\n textAlign: 'right',\n },\n description: {\n fontSize: 16,\n },\n tooltip: {\n position: 'relative',\n top: 2,\n marginRight: 5,\n },\n documents: {\n '& p': {\n fontWeight: 500,\n fontSize: 16,\n },\n '& button': {\n fontSize: 16,\n color: theme.palette.primary.main,\n },\n },\n subscriptionButton: {\n height: 45,\n marginLeft: 10,\n },\n}));\n\ntype EventsProductDetailsProps = {\n product: Event;\n expanded?: boolean;\n preview?: boolean;\n};\n\nconst EventsProductDetails: FC<EventsProductDetailsProps> = ({ product, expanded, preview }) => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n\n const [messageModalOpen, setMessageModalOpen] = useState(false);\n const toggleMessageModal = () => setMessageModalOpen(!messageModalOpen);\n const eventDetails = useSelector(getEventsDetails);\n\n const { description, documentList } = eventDetails[product.id as string]?.data || {};\n\n const documents = documentList\n ? (documentList as Document[]).map(({ id, title }) => ({\n title: title.split('.')[0],\n path: `/storefront/document/LIVESTORM_EVENT/${id}/`,\n name: title,\n }))\n : [];\n\n const sendMessage = (messageData: string) => {\n sendMessageToSales(messageData)\n .then(() => {\n dispatch(\n addNotificationAction({\n message: t('Message sent successfully'),\n variant: 'success',\n }),\n );\n })\n .catch(() => {\n dispatch(\n addNotificationAction({\n message: t('Failed to send a message'),\n variant: 'error',\n }),\n );\n });\n };\n\n useEffect(() => {\n dispatch(fetchEventDetailsAction(product.id as string));\n }, [product.id, dispatch]);\n\n return (\n <Collapse in={expanded || preview} timeout=\"auto\" unmountOnExit>\n <Grid container spacing={2} className={classes.container}>\n <Grid item xs={8}>\n <Box mb={4}>\n <Typography variant=\"h6\">\n <strong>Event overview</strong>\n </Typography>\n <Typography>{sanitizeHtml(description || product.description)}</Typography>\n </Box>\n </Grid>\n <Grid item xs={4} className={classes.sidebar}>\n <Box px={4}>\n <Typography variant=\"h6\" className={classes.subtitle}>\n {t('Event details')}\n </Typography>\n <Divider className={classes.divider} />\n <Box mt={2}>\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Category:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n <Box>{eventsCategories[product.category]}</Box>\n </Grid>\n </Grid>\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Start time:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n <Box>{format(new Date(product.eventDate), 'K.mm bbbb')}</Box>\n </Grid>\n </Grid>\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Duration:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n <Box>{product.duration} minutes</Box>\n </Grid>\n </Grid>\n {product.languages && (\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Language:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n <FlagsList\n countryCodes={[product.languages === 'en' ? 'gb' : product.languages]}\n />\n </Grid>\n </Grid>\n )}\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Organizer:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n <Box>{product.organiser}</Box>\n </Grid>\n </Grid>\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Location:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n <Box>{product.location.name}</Box>\n </Grid>\n </Grid>\n </Box>\n </Box>\n <Box px={4}>\n <Typography variant=\"h6\" className={classes.subtitle}>\n {t('Documents')}\n </Typography>\n <Divider className={classes.divider} />\n <Box mt={2}>\n <SummaryCardDocuments\n documentTypes={documents}\n className={classes.documents}\n disabled={preview}\n />\n </Box>\n </Box>\n </Grid>\n </Grid>\n <Box p={4} mt={4} className={classes.footer}>\n <Grid container justifyContent=\"flex-end\" alignItems=\"center\">\n <Grid item>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n onClick={toggleMessageModal}\n disabled={preview}\n >\n {t('Contact Sales')}\n </Button>\n <EventsActionButton\n event={product}\n className={classes.checkoutButton}\n disabled={preview}\n detailsView\n />\n </Grid>\n </Grid>\n </Box>\n <MessageModal\n title={t('Contact Sales')}\n open={messageModalOpen}\n onClose={toggleMessageModal}\n onSendMessage={sendMessage}\n />\n </Collapse>\n );\n};\n\nexport { EventsProductDetails };\n","import React, { useState, useRef, useEffect, FC } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Typography, Paper, Grid, Button } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { grey } from '@mui/material/colors';\nimport FlagIcon from '@mui/icons-material/Flag';\nimport clsx from 'clsx';\nimport { useLocation } from 'react-router-dom';\nimport qs from 'qs';\nimport LockIcon from '@mui/icons-material/Lock';\nimport format from 'date-fns/format';\n\nimport { Event } from 'modules/events/types/eventsTypes';\nimport { eventsCategories } from 'modules/events/constants/eventsCategories';\nimport { sanitizeHtml, scrollToRef } from 'shared/functions';\nimport { Loader } from 'ui';\nimport {\n addEventToFavourites,\n removeEventFromFavourites,\n} from 'modules/events/services/eventsService';\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { getSelectedItems } from 'shared/functions/getSelectedItems';\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\nimport { usePortfolioModals, useFeatures } from 'shared/hooks';\nimport { fetchEventsAction } from 'modules/events/store/eventsActions';\nimport { EventsProductDetails } from '../EventsProductDetails/EventsProductDetails';\nimport { EventsActionButton } from '../EventsActionButton';\n\nconst useStyles = makeStyles(theme => ({\n name: {\n fontSize: 28,\n backgroundColor: grey[600],\n color: theme.palette.primary.contrastText,\n borderRadius: '4px 4px 0 0',\n },\n container: {\n height: 400,\n },\n label: {\n color: theme.palette.primary.main,\n fontSize: 14,\n },\n value: {\n fontWeight: 500,\n fontSize: 18,\n },\n labelBar: {\n backgroundColor: grey[400],\n height: '100%',\n borderRadius: '4px 0 0 4px',\n color: theme.palette.primary.contrastText,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n textAlign: 'center',\n fontWeight: 'bold',\n fontSize: 24,\n },\n image: {\n height: 330,\n },\n thirdPartyImage: {\n maxWidth: '50%',\n maxHeight: '50%',\n },\n description: {\n borderLeft: `1px solid ${grey[300]}`,\n borderRight: `1px solid ${grey[300]}`,\n '& > div': {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n '-webkit-line-clamp': 9,\n '-webkit-box-orient': 'vertical',\n fontSize: 18,\n fontWeight: 500,\n textAlign: 'justify',\n margin: theme.spacing(1.5, 4, 4),\n },\n },\n product: {\n marginTop: 15,\n '&:first-of-type': {\n marginTop: 0,\n },\n },\n actionContainer: {\n height: '100%',\n },\n priceBox: {\n width: 160,\n borderStyle: 'dashed',\n borderColor: grey[600],\n borderWidth: '0 0 1px 0',\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center',\n flexDirection: 'column',\n },\n price: {\n fontSize: 28,\n fontWeight: 'bold',\n },\n pricePeriod: {\n fontSize: 12,\n fontWeight: 'bold',\n },\n buttonContainer: {\n textAlign: 'center',\n },\n buttonActive: {\n backgroundColor: '#ff8900',\n },\n actionButton: {\n height: 45,\n marginTop: 10,\n },\n favoriteButton: {\n width: 45,\n height: 45,\n padding: 0,\n minWidth: 'auto',\n marginLeft: 6,\n marginTop: 10,\n },\n trialText: {\n display: 'block',\n maxWidth: 160,\n fontWeight: 'bold',\n textAlign: 'center',\n padding: 0,\n },\n freeText: {\n fontSize: 22,\n },\n hiddenCheckoutButton: {\n visibility: 'hidden',\n },\n loader: {\n display: 'inline-block',\n position: 'relative',\n margin: '0 10px',\n top: 18,\n },\n lockIcon: {\n fontSize: 100,\n color: theme.palette.primary.main,\n },\n esgAnalysisHeader: { backgroundColor: theme.palette.custom.esgAnalysisEvents },\n fundAnalysisHeader: { backgroundColor: theme.palette.custom.fundAnalysisEvents },\n creditAnalysisHeader: { backgroundColor: theme.palette.custom.creditAnalysisEvents },\n bold: {\n fontWeight: 'bold',\n },\n date: {\n fontSize: 24,\n },\n}));\n\ntype EventsProductProps = {\n data: Event;\n preview?: boolean;\n collapsed?: boolean;\n};\n\nconst EventsProduct: FC<EventsProductProps> = ({ data, preview, collapsed }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const location = useLocation();\n const productRef = useRef(null);\n const [isFavoriteStatusLoading, setIsFavoriteStatusLoading] = useState(false);\n const [showDetails, setShowDetails] = useState(collapsed);\n const { addToPortfolio, createPortfolio } = usePortfolioModals();\n const { eventsInPortfolioManager } = useFeatures();\n\n const { productId: scrollToProductId } = qs.parse(location.search, { ignoreQueryPrefix: true });\n const isFavorite = data.favourite;\n\n const scrollToProduct = () => {\n scrollToRef(productRef);\n };\n\n const changeFavoriteStatus = async () => {\n setIsFavoriteStatusLoading(true);\n\n await (isFavorite\n ? removeEventFromFavourites(data.id as string)\n : addEventToFavourites(data.id as string));\n\n dispatch(fetchEventsAction());\n\n setIsFavoriteStatusLoading(false);\n };\n\n const toggleDetails = () => {\n setShowDetails(!showDetails);\n };\n\n useEffect(() => {\n let timer: NodeJS.Timeout | null = null;\n\n if (showDetails) {\n timer = setTimeout(() => scrollToProduct(), 300);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [showDetails]);\n\n useEffect(() => {\n // @ts-ignore\n if (scrollToProductId && scrollToProductId === data.id && productRef.current) {\n setShowDetails(true);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [productRef.current]);\n\n const date = new Date(data.eventDate);\n const locked = false;\n const image =\n typeof data.image === 'string'\n ? `data:image/png;base64, ${data.image}`\n : URL.createObjectURL(data.image);\n\n /*\n Since `ref` is not available in Box props typescript definition (https://github.com/mui-org/material-ui/issues/17010)\n we spread it, to prevent from typescript error (commenting with `@ts-ignore` fails on minification). \n */\n const rootProps = {\n ref: productRef,\n };\n\n return (\n <Box mb={6} {...rootProps}>\n <Paper elevation={3}>\n <Box\n p={2}\n className={clsx({\n [classes.name]: true,\n [classes.esgAnalysisHeader]: data.category === 'ESG_ANALYSIS',\n [classes.fundAnalysisHeader]: data.category === 'FUNDS_ANALYSIS',\n [classes.creditAnalysisHeader]: data.category === 'CREDIT_ANALYSIS',\n })}\n >\n <Typography variant=\"h5\">{data.title}</Typography>\n </Box>\n <Grid container>\n <img alt={t('Logo')} src={image} className={classes.image} />\n <Grid container item xs direction=\"column\" justifyContent=\"space-between\">\n <Box px={4} pt={4}>\n <Grid container spacing={3}>\n <Grid item xs={6}>\n <Typography className={classes.label}>{t('Category')}</Typography>\n <Typography className={classes.value}>\n {eventsCategories[data.category]}\n </Typography>\n </Grid>\n <Grid item xs={6} container justifyContent=\"flex-end\">\n <Box>\n <Typography className={classes.label}>{t('Region')}</Typography>\n <Typography className={classes.value}>{data.region}</Typography>\n </Box>\n </Grid>\n <Grid item xs={6}>\n <Typography className={classes.label}>{t('Industry')}</Typography>\n <Typography className={classes.value}>{data.industry}</Typography>\n </Grid>\n </Grid>\n </Box>\n <Box px={4} pb={4}>\n <Typography className={classes.bold} variant=\"h6\" align=\"justify\">\n {data.marketingLabel}\n </Typography>\n </Box>\n </Grid>\n {locked && (\n <Grid\n item\n xs\n container\n direction=\"column\"\n alignItems=\"center\"\n justifyContent=\"space-evenly\"\n className={classes.description}\n >\n <LockIcon className={classes.lockIcon} />\n <Typography color=\"primary\" variant=\"h6\" align=\"center\">\n <strong>\n Get started to gain access\n <br />\n to this event\n </strong>\n </Typography>\n </Grid>\n )}\n {!locked && (\n <Grid item xs className={classes.description}>\n {sanitizeHtml(data.shortDescription)}\n </Grid>\n )}\n <Box px={4} py={4}>\n <Grid container direction=\"column\">\n <Paper>\n <Box>\n <Typography align=\"center\">\n <strong>\n <small>{format(date, 'EEEE').toUpperCase()}</small>\n </strong>\n </Typography>\n <Typography align=\"center\" variant=\"h6\" className={classes.date}>\n <strong>{format(date, 'd MMM yyyy').toUpperCase()}</strong>\n </Typography>\n <Typography align=\"center\" color=\"primary\">\n <strong>\n <small>{format(date, 'K.mm bbbb')}</small>\n </strong>\n </Typography>\n </Box>\n </Paper>\n <EventsActionButton\n event={data}\n className={clsx(classes.buttonActive, classes.actionButton)}\n disabled={preview}\n />\n {eventsInPortfolioManager && (\n <Button\n variant=\"outlined\"\n color=\"primary\"\n className={classes.actionButton}\n onClick={addToPortfolio.toggle}\n disabled={preview}\n >\n {t('Add to portfolio')}\n </Button>\n )}\n <Grid container>\n <Button\n variant={showDetails ? 'contained' : 'outlined'}\n color=\"primary\"\n className={classes.actionButton}\n onClick={toggleDetails}\n disabled={preview}\n >\n {t('More info')}\n </Button>\n {isFavoriteStatusLoading ? (\n <Loader size={30} classes={classes.loader} />\n ) : (\n <Button\n variant={isFavorite ? 'contained' : 'outlined'}\n color=\"primary\"\n className={classes.favoriteButton}\n onClick={changeFavoriteStatus}\n disabled={preview}\n >\n <FlagIcon />\n </Button>\n )}\n </Grid>\n </Grid>\n </Box>\n </Grid>\n </Paper>\n <EventsProductDetails product={data} expanded={!!showDetails} preview={preview} />\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n itemsData={getSelectedItems(data.id || '')}\n onClickCreateNew={createPortfolio.show}\n variant=\"add\"\n itemType=\"EVENT\"\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={getSelectedItems(data.id || '')}\n itemType=\"EVENT\"\n />\n </Box>\n );\n};\n\nexport { EventsProduct };\n","import { Box, Button, Grid } from '@mui/material';\nimport { Event } from 'modules/events/types/eventsTypes';\nimport React, { FC } from 'react';\nimport { EventsProduct } from '../EventsProduct/EventsProduct';\n\ntype EventPreviewProps = {\n event?: Event;\n onBack: () => void;\n onSubmit: () => void;\n};\n\nexport const EventPreview: FC<EventPreviewProps> = ({ event, onBack, onSubmit }) => {\n return (\n <Box px={8} py={4}>\n <EventsProduct data={event as Event} preview />\n <Grid container justifyContent=\"flex-end\">\n <Button onClick={onBack}>Back</Button>\n <Button variant=\"contained\" color=\"primary\" onClick={onSubmit}>\n Save event\n </Button>\n </Grid>\n </Box>\n );\n};\n","import React, { FC, useEffect, useState } from 'react';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Paper, Box, Step, StepLabel, Stepper, Typography } from '@mui/material';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { Loader } from 'ui';\nimport { format } from 'date-fns';\nimport { fetchEventsPropertiesAction, fetchEventTitles } from 'modules/events/store/eventsActions';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { Event } from 'modules/events/types/eventsTypes';\nimport { EventEdit } from '../components/EventsCreationPanel/EventEdit/EventEdit';\nimport { EventPreview } from '../components/EventsCreationPanel/EventPreview';\nimport { fetchEventDetails, saveEvent, updateEvent } from '../services/eventsService';\nimport { getEventProperties } from '../selectors/eventsSelectors';\nimport { updateSessionId } from '../constants/eventsUpdate';\n\nconst steps = ['Edit event', 'Preview', 'Finish'];\n\ntype EventPanelCreateParams = {\n id?: string;\n};\n\ntype FormikValues = null | object;\n\nexport const EventPanelCreate: FC = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const [activeStep, setActiveStep] = useState(0);\n const [initialValues, setInitialValues] = useState<FormikValues>(null);\n const [event, setEvent] = useState<Event>();\n const [editedEventDetails, setEditedEventDetails] = useState<Event>();\n const [loading, setLoading] = useState(false);\n const properties = useSelector(getEventProperties);\n const { id } = useParams<EventPanelCreateParams>();\n\n const goNext = () => setActiveStep((step) => step + 1);\n const goPrev = () => setActiveStep((step) => step - 1);\n\n useEffect(() => {\n dispatch(fetchEventsPropertiesAction());\n dispatch(fetchEventTitles(''));\n }, [dispatch]);\n\n const handleEventUpdate = (eventPreview: Event, values: object) => {\n setInitialValues(values);\n\n if (editedEventDetails) {\n const { documentList } = editedEventDetails;\n setEvent({ ...eventPreview, id, documentList });\n } else {\n setEvent(eventPreview);\n }\n\n goNext();\n };\n\n const submitEvent = () => {\n setLoading(true);\n\n const request = event?.id ? updateEvent(event!) : saveEvent(event!);\n\n request\n .then(() => {\n navigate('/event-panel/view');\n })\n .catch((error: any) => {\n setLoading(false);\n dispatch(\n addNotificationAction({\n message: error.message,\n variant: 'error',\n }),\n );\n });\n };\n\n useEffect(() => {\n if (properties.isPending) return;\n\n if (!id) {\n setInitialValues({});\n return;\n }\n\n fetchEventDetails(id).then((values) => {\n const { data: options } = properties;\n\n fetch(`data:image/png;base64,${values.image}`)\n .then((res) => res.blob())\n .then((blob) => {\n setEditedEventDetails(values);\n\n setInitialValues({\n event: { id: values.externalId, name: values.title },\n session: {\n id: updateSessionId,\n name: format(new Date(values.eventDate), 'd MMMM yyyy - EEEE h:mm a'),\n },\n dateTime: values.eventDate,\n duration: values.duration,\n location: options.locations.find(({ name }) => name === values.location.name),\n language: values.languages,\n category: options.categories.find((item) => item.id === values.category),\n segment: options.segments.find(({ name }) => name === values.segment),\n productLine: options.productLines.find(({ name }) => name === values.productLine),\n industry: options.industries.find(({ name }) => name === values.industry),\n region: options.regions.find(({ name }) => name === values.region),\n marketingLabel: values.marketingLabel,\n description: values.description,\n activeEvent: values.status === 'ACTIVE',\n logo: new File([blob], 'logo.png', { type: 'image/png' }),\n });\n });\n });\n }, [id, properties]);\n\n if (!initialValues || properties.isPending) {\n return <Loader />;\n }\n\n return (\n <>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('Create event')}</Typography>\n </Box>\n <Paper elevation={3}>\n <Box pt={4}>\n <Stepper alternativeLabel activeStep={activeStep}>\n {steps.map((label) => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n </Box>\n {loading ? (\n <Box my={4}>\n <Loader center />\n </Box>\n ) : (\n <>\n {activeStep === 0 && (\n <EventEdit\n initialValues={initialValues}\n editedEventDetails={editedEventDetails}\n onEventUpdate={handleEventUpdate}\n />\n )}\n {activeStep === 1 && event && (\n <EventPreview event={event} onBack={goPrev} onSubmit={submitEvent} />\n )}\n </>\n )}\n </Paper>\n </>\n );\n};\n","import React, { useState, FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport MUIDataTable, { MUIDataTableColumnDef, MUIDataTableOptions } from 'mui-datatables';\nimport { ThemeProvider, StyledEngineProvider, Grid, Tabs, Tab } from '@mui/material';\n\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { LinkButton } from 'ui/Buttons';\nimport { eventsCategories } from 'modules/events/constants/eventsCategories';\nimport { formatDate } from 'shared/functions';\nimport { Event } from 'modules/events/types/eventsTypes';\nimport { ShopToolbar } from 'modules/shop/components/ShopToolbar';\n\nconst getMuiTheme = () => ({\n components: {\n MUIDataTable: {\n styleOverrides: {\n paper: {\n boxShadow: 'none',\n },\n }\n },\n MUIDataTableToolbarSelect: {\n styleOverrides: {\n root: {\n boxShadow: 'none',\n height: 64,\n backgroundColor: '#fff',\n },\n title: {\n minWidth: 200,\n },\n }\n },\n MUIDataTableSearch: {\n styleOverrides: {\n main: {\n '& input': {\n padding: '8px 10px',\n },\n },\n searchText: {\n marginTop: 8,\n },\n searchIcon: {\n marginTop: 15,\n },\n }\n },\n MUIDataTableHeadCell: {\n styleOverrides: {\n fixedHeader: {\n zIndex: 1,\n },\n }\n },\n MUIDataTableSelectCell: {\n styleOverrides: {\n headerCell: {\n zIndex: 1,\n },\n fixedLeft: {\n zIndex: 1,\n }\n }\n }\n },\n});\n\nconst useStyles = makeStyles(theme => ({\n toolbarContainer: {\n marginRight: theme.spacing(3),\n },\n}));\n\nexport type ToolbarAction = {\n name: string;\n action: () => void;\n};\n\ntype EventsSelectionListProps = {\n events: Event[];\n columns: string[];\n onSelectionChange: (items: Event[]) => void;\n showActive: boolean;\n setShowActive: (value: boolean) => void;\n actions: ToolbarAction[];\n toolbar: JSX.Element;\n editMode: boolean;\n};\n\ntype MuiSelection = {\n index: number;\n dataIndex: number;\n};\n\nexport const EventsSelectionList: FC<EventsSelectionListProps> = ({\n events,\n columns,\n onSelectionChange = () => {},\n showActive,\n setShowActive,\n actions = [],\n toolbar = null,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const [selectedEvents, setSelectedEvents] = useState<number[]>([]);\n\n const activeEvents = events.filter(({ status }) => status === 'ACTIVE');\n const inactiveEvents = events.filter(({ status }) => status === 'DRAFT');\n\n const handleRowSelect = (_currentSelection: MuiSelection[], items: MuiSelection[]) => {\n const selectedItems = items.map(({ dataIndex }) => dataIndex);\n\n setSelectedEvents(selectedItems);\n onSelectionChange(\n (showActive ? activeEvents : inactiveEvents).filter((_event, index) =>\n selectedItems.includes(index),\n ),\n );\n };\n\n const columnsSetup: MUIDataTableColumnDef[] = [\n {\n name: 'id',\n label: t('ID'),\n options: {\n display: columns.includes('id') ? 'true' : 'false',\n },\n },\n {\n name: 'title',\n label: t('Title'),\n options: {\n display: columns.includes('title') ? 'true' : 'false',\n sort: true,\n customBodyRender: (value: string, { rowData }: any) => (\n <LinkButton to={`/event-panel/edit/${rowData[0]}`} label={value} />\n ),\n },\n },\n {\n name: 'eventDate',\n label: t('Date'),\n options: {\n display: columns.includes('eventDate') ? 'true' : 'false',\n sort: true,\n customBodyRender: (value: string) => formatDate(new Date(value)),\n },\n },\n {\n name: 'category',\n label: t('Category'),\n options: {\n display: columns.includes('category') ? 'true' : 'false',\n sort: true,\n customBodyRender: (value: keyof typeof eventsCategories) => eventsCategories[value],\n },\n },\n {\n name: 'organiser',\n label: t('Source'),\n options: {\n display: columns.includes('organiser') ? 'true' : 'false',\n sort: true,\n },\n },\n ];\n\n const title = (\n <Tabs value={showActive ? 0 : 1} onChange={(_, value) => setShowActive(!value)}>\n <Tab label={`Active (${activeEvents.length})`} />\n <Tab label={`Inactive (${inactiveEvents.length})`} />\n </Tabs>\n );\n\n const optionsSetup: MUIDataTableOptions = {\n filterType: 'checkbox',\n print: false,\n download: false,\n filter: false,\n search: false,\n viewColumns: false,\n pagination: false,\n onRowSelectionChange: handleRowSelect,\n rowsSelected: selectedEvents,\n customToolbar: () => toolbar,\n customToolbarSelect: () => (\n <Grid container justifyContent=\"flex-end\" spacing={1} className={classes.toolbarContainer}>\n {toolbar && <Grid item>{toolbar}</Grid>}\n {actions.length !== 0 && (\n <Grid item>\n <ShopToolbar actions={actions} />\n </Grid>\n )}\n </Grid>\n ),\n };\n\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={getMuiTheme()}>\n <MUIDataTable\n title={title}\n data={showActive ? activeEvents : inactiveEvents}\n columns={columnsSetup}\n options={optionsSetup}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n );\n};\n","export const portfolioUploadQuery = {\n MODAL: 'portfolio-upload',\n};\n","import styled from 'styled-components';\nimport { Box, Button } from '@scope/scope-one-ui/core';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\n\nexport const StepChoiceWrapper = styled(Box)`\n text-align: center;\n display: flex;\n flex-direction: column;\n width: 100%;\n justify-content: center;\n`;\n\nexport const AccentedWord = styled.mark`\n color: ${COLORS.typography.label};\n background: none;\n`;\n\nexport const TemplateArea = styled(Box)`\n color: ${COLORS.success.main};\n display: flex;\n background-color: ${COLORS.success.hover};\n align-items: center;\n justify-content: space-between;\n padding: ${SIZES.spacing(2)};\n`;\n\nexport const DownloadTemplateButton = styled(Button)`\n background-color: ${COLORS.success.main};\n &:enabled {\n background-color: ${COLORS.success.main};\n }\n`;\n","var _g;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgFunds = function SvgFunds(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 34,\n height: 34,\n viewBox: \"0 0 48.584 47.723\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n \"data-name\": \"Group 12160\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeLinecap: \"round\",\n strokeWidth: 1.5\n }, /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83883\",\n d: \"M27.351 6.523L14.318 17.714 1.142 10.632 16.176.75l31.03 15.873-15.08 10.117-11.444-6.082 13.389-10.657\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83884\",\n d: \"M6.566 13.907L1.294 17.43l12.678 6.75\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83885\",\n d: \"M6.507 20.285L.75 24.049l13.189 6.924\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83886\",\n d: \"M6.894 27.43l-5.777 3.993L32.06 46.972l15.035-9.771-5.712-2.87\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83887\",\n d: \"M42.132 20.29l5.7 2.971-15.7 10.553-11.444-6.035\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83888\",\n d: \"M42.777 27.121l5.056 2.454-15.7 10.553-11.444-6.035\",\n strokeLinejoin: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83889\",\n d: \"M20.688 20.675l-.3 20.378\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n \"data-name\": \"Path 83890\",\n d: \"M14.275 17.807l-.3 19.959\"\n }))));\n};\n\nexport default SvgFunds;","import { ArtifactIdType } from 'shared/constants/artifactIdType';\nimport { RatingStatus } from 'shared/types/ratingStatus';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { RatingType } from '@scope/scope-one-ui/core/RatingCircleBadge/RatingCircleBadge.d';\n\nexport enum Activity {\n Upgrade = 'upgrade',\n Downgrade = 'downgrade',\n New = 'new',\n Stable = 'stable',\n}\n\nexport enum OrganisationState {\n ON_TRIAL = 'ON_TRIAL',\n ACTIVE = 'ACTIVE',\n}\n\nexport type Coverage = {\n creditReview: number;\n creditRating: number;\n esg: number;\n};\n\nexport type StatisticsItem = {\n name: string;\n count: number;\n countRaw?: number;\n exposure?: number;\n};\n\nexport type PortfolioAction = 'add' | 'copy' | 'copy_all' | 'move' | 'move_all';\n\nexport type Statistics = {\n regions: StatisticsItem[];\n subregions: StatisticsItem[];\n industries: StatisticsItem[];\n};\n\nexport type ItemsTypeCount = {\n issuers: number;\n issues: number;\n};\n\nexport type ChartData = Record<string, number>;\n\nexport type NumberOfItems = {\n entities: number;\n instruments: number;\n funds?: number;\n ratingNews: number;\n researches: number;\n events: number;\n uploads?: number;\n};\n\nexport enum PortfolioType {\n REGULAR = 'REGULAR',\n REFERENCE_PORTFOLIO_EUROPE = 'REFERENCE_PORTFOLIO_EUROPE',\n REFERENCE_PORTFOLIO_GLOBAL = 'REFERENCE_PORTFOLIO_GLOBAL',\n REQUEST_HISTORY = 'REQUEST_HISTORY',\n SAMPLE_PORTFOLIO = 'SAMPLE_PORTFOLIO',\n RSR_PORTFOLIO = 'RSR_PORTFOLIO',\n PRIVATE_RATING_PORTFOLIO = 'PRIVATE_RATING_PORTFOLIO',\n ON_DEMAND_RATING_PORTFOLIO = 'ON_DEMAND_RATING_PORTFOLIO',\n}\n\nexport type SummaryLastAddedType = 'entity' | 'instrument' | 'fund';\n\nexport type PortfolioLatestNews = {\n artifactId: string;\n title: string;\n publicationDate: string;\n type: 'rating_news' | 'research';\n};\n\nexport type PortfolioLastAdded = {\n artifactId: string;\n addedDate: string;\n type: SummaryLastAddedType;\n name: string;\n country?: string;\n isin?: string;\n};\n\nexport type PortfolioSummary = {\n lastAdded: PortfolioLastAdded[];\n latestNews: PortfolioLatestNews[];\n};\n\nexport type Portfolio = {\n byIsinUpload: boolean;\n createdDate: string;\n description: string;\n id: string;\n portfolioType: PortfolioType;\n isDedicated: boolean;\n modifiedDate: string;\n name: string;\n noOfItems: NumberOfItems;\n shared: boolean;\n sharedUsers: string[];\n watchlistEnabled: boolean;\n statistics: Statistics;\n coverage: Coverage;\n itemsTypeCount: ItemsTypeCount;\n summary: PortfolioSummary;\n};\n\nexport type PortfolioResponse = {\n portfolio: Portfolio;\n};\n\nexport type Portfolios = {\n total: number;\n portfolios: Portfolio[];\n};\n\nexport type SubscriptionType = 'PUBLIC' | 'FREE_TRIAL' | 'SUBSCRIPTION' | 'NONE' | 'NOT_APPLIES';\n\nexport type SubScore =\n | 'shortTermRating'\n | 'environmental'\n | 'social'\n | 'governance'\n | 'climateLossOrderly'\n | 'climateLossDisorderly'\n | 'climateLossHotHouse'\n | 'physicalRiskLossOrderly'\n | 'physicalRiskLossDisorderly'\n | 'physicalRiskLossHotHouse'\n | 'transitionRiskLossOrderly'\n | 'transitionRiskLossDisorderly'\n | 'transitionRiskLossHotHouse';\n\nexport type PortfolioEntity = {\n module: string;\n name: string;\n artifactId: string;\n addedDate: string;\n id: string;\n sector: string;\n region: string;\n subRegion: string;\n industry: string;\n countryCode: string;\n reportedWeight: string;\n meta: {\n demandType: string;\n storefrontHasLicence?: boolean;\n storefrontPurchased?: boolean;\n storefrontOldScore?: number;\n storefrontScoreUpdate?: string;\n esgPurchased?: boolean;\n esgRequestState?: RatingStatus | null;\n esgCustomScore?: boolean | null;\n esgOldScore?: number;\n esgScoreUpdate?: string;\n esgSentifiRequestState: string;\n esgSentifiHasScore?: boolean;\n esgSentifiHasCompany?: boolean;\n esgSentifiHasPermission?: boolean;\n sigRequested?: boolean;\n sigOldScore?: number;\n sigScoreUpdate?: string;\n sigMonitoring?: boolean;\n sigPOD?: number;\n sigPODDefinition?: string;\n sigCountryRiskAssessment?: string;\n storefrontSubscriptionType?: SubscriptionType;\n sigSubscriptionType?: SubscriptionType;\n esgSubscriptionType?: SubscriptionType;\n artifactIdType?: ArtifactIdType;\n storefrontRatingType?: string;\n storefrontRatingOutlook?: string;\n sigCity?: string;\n sigPostcode?: string;\n };\n scores: {\n creditReview?: number;\n creditRating?: number;\n esgTotal?: number;\n esgEnvironment?: number;\n esgSocial?: number;\n esgGovernance?: number;\n creditRatingShortTermRating?: number;\n sentifi?: {\n esgScore?: number;\n eScore?: number;\n sScore?: number;\n gScore?: number;\n status: string;\n };\n cstOrderly: {\n climateLoss?: number;\n physicalRiskLoss?: number;\n transitionRiskLoss?: number;\n };\n cstDisorderly: {\n climateLoss?: number;\n physicalRiskLoss?: number;\n transitionRiskLoss?: number;\n };\n cstHotHouse: {\n climateLoss?: number;\n physicalRiskLoss?: number;\n transitionRiskLoss?: number;\n };\n };\n activity: {\n esg?: Activity | null;\n creditReview?: Activity | null;\n creditRating?: Activity | null;\n };\n};\n\nexport type PortfolioInstrument = {\n id: string;\n name: string;\n date: string;\n volume: string;\n artifactId: string;\n isin: string;\n currencyCode: string;\n entityId: string;\n entityName: string;\n addedDate: string;\n meta: {\n demandType: string;\n available: boolean;\n hasLicence: boolean;\n rating: string;\n ratingType: string;\n ratingDate: string;\n };\n coupon: {\n artifactId: string;\n couponPercent: number;\n maturityDate: string;\n maturityPerpetualFlag: boolean;\n };\n};\n\nexport type PortfolioFund = {\n id: string;\n name: string;\n peergroupName: string;\n isin: string;\n rank: string;\n rating: RatingType;\n ratingPoints: number;\n returnValue: number;\n risk: number;\n isAif: boolean;\n isQualitative: boolean;\n};\n\nexport type PortfolioRatingNews = {\n artifactId: string;\n language: string;\n title: string;\n addedDate: string;\n publicationDate: string;\n};\n\nexport type PortfolioResearch = {\n artifactId: string;\n language: string;\n title: string;\n addedDate: string;\n publicationDate: string;\n};\n\nexport type PortfolioEvent = {\n id: string;\n artifactId: string;\n title: string;\n eventDate: string;\n category: string;\n region: string;\n industry: string;\n meta: {\n externalId: string;\n connectionLink: string;\n userRegistered: boolean;\n };\n};\n\nexport type PortfolioUploadResult = {\n total: number;\n instrumentsFound: number;\n totalInstruments: number;\n esgFound: number;\n creditRatingFound: number;\n creditReviewFound: number;\n validationErrors: number;\n uploadedItems: number;\n};\n\nexport type PortfolioUpload = {\n id: string;\n portfolioId: string;\n fileName: string;\n uploadType: string;\n uploadStatus: string;\n itemsType: string;\n createdDate: Date;\n link: string;\n errorsLink: string;\n results: PortfolioUploadResult;\n};\n\nexport type PortfolioItems<T> = T & {\n total: number;\n};\n\nexport type Entities = {\n portfolioItems: PortfolioEntity[];\n totalPortfolioItems: number;\n};\n\nexport type Instruments = {\n instruments: PortfolioInstrument[];\n totalInstruments: number;\n};\n\nexport type Funds = {\n fund: PortfolioFund[];\n};\n\nexport type RatingNews = {\n ratingNews: PortfolioRatingNews[];\n};\n\nexport type Research = {\n researches: PortfolioResearch[];\n};\n\nexport type Events = {\n events: PortfolioEvent[];\n};\n\nexport type Uploads = {\n uploadHistory: PortfolioUpload[];\n};\n\nexport type PortfolioItemsProps = {\n portfolioId: string;\n total?: number;\n refetchPortfolio?: () => void;\n isReferencePortfolio?: boolean;\n portfolioData: Portfolio;\n totalCounter?: (number) => void;\n};\n\nexport type EntityScoreProps = {\n entity: PortfolioEntity;\n module: ratingTypes;\n subscore?: SubScore;\n onRequestEsg: () => void;\n onRequestSentiment: () => void;\n onRequestCreditReview: () => void;\n};\n\nexport type EsgStore = {\n esgContract: { esgRequestPermission: boolean };\n};\n\nexport type AuthData = {\n userId: string;\n organisationId: string;\n token: string;\n};\n\nexport type AuthStore = {\n auth: {\n data: AuthData;\n };\n};\n\nexport type StorefrontProduct = {\n l4: { purchased: boolean };\n l5: { purchased: boolean };\n};\n\nexport type SigProduct = {\n requested?: boolean;\n userId: string;\n organisationId: string;\n};\n\nexport type ScoreData = {\n score?: string | number | null;\n canRequest: boolean;\n requiresDataUpload: boolean;\n canUnlock: boolean;\n requested: boolean;\n product?: StorefrontProduct | SigProduct;\n orderType?: string;\n};\n\nexport type EntityEssential = {\n artifactId: string;\n product?: StorefrontProduct | SigProduct;\n orderType?: string;\n};\n\nexport type CurrencyCode = {\n label: string;\n value: string;\n};\n\nexport type CountryParsed = {\n continentCode: string;\n continent: string;\n name: string;\n iso: string;\n};\n\nexport enum CollectionType {\n PORTFOLIO_ITEMS = 'portfolio_items',\n INSTRUMENTS = 'instruments',\n FUNDS = 'funds',\n}\n\nexport type InstrumentsInitialFiltersData = {\n ratingType: string[];\n rating: string[]; // instrument rating\n couponPercent: InitialFilterRangeValue;\n currencyCode: CurrencyCode[]; // Investment volume currency\n volume: InitialFilterRangeValue;\n maturityDate: InitialMaturityDateRangeValue;\n};\n\nexport type FundsInitialFiltersData = {\n peergroup: string[];\n // rank: string[];\n rating: string[];\n ratingPoints: InitialFilterRangeValue;\n // returnRate: InitialFilterRangeValue;\n // riskRate: InitialFilterRangeValue;\n};\n\nexport type EntityInitialFiltersData = {\n countryCode: any; // COUNTRY\n creditRating: string[]; // creditRating\n creditRatingShortTermRating: string[];\n creditReview: InitialFilterRangeValue;\n esgEnvironment: InitialFilterRangeValue;\n esgGovernance: InitialFilterRangeValue;\n esgSocial: InitialFilterRangeValue;\n esgTotal: InitialFilterRangeValue;\n industry: any; // INDUSTRY\n sigCountryRiskAssessment: string[]; // Country Risk\n sigPOD: InitialFilterRangeValue;\n storefrontRatingOutlook: string[]; // outlook\n storefrontRatingType: string[]; // storefrontRatingType\n};\n\nexport type InitialFilterRangeValue = {\n minimum: number | null;\n maximum: number | null;\n};\n\nexport type InitialMaturityDateRangeValue = {\n minimum: string | null;\n maximum: string | null;\n};\n\nexport type NumberFilterRangeValue = {\n fromRange: number;\n toRange: number;\n};\n\nexport type StringFilterRangeValue = {\n fromRange: string;\n toRange: string;\n};\n\nexport type CreditRatingFilter = {\n fromRange?: string | number | null;\n toRange?: string | number | null;\n emptyValues?: boolean;\n};\n\nexport type RangeFilter = {\n fromRange?: string | number | null;\n toRange?: string | number | null;\n emptyValues?: boolean;\n};\n\nexport type SigMonitor = {\n toggleSigMonitoring: {\n message: string;\n };\n};\n\nexport type RequestTab =\n | 'OVERVIEW'\n | 'ESG'\n | 'CREDIT_RATING'\n | 'CREDIT_REVIEW'\n | 'CLIMATE_STRESS_TEST'\n | 'ESG_SENTIMENT';\n\nexport type FiltersData = {\n name?: string;\n countryCode?: string[];\n industry?: string[];\n ratingType?: string; // rating type\n storefrontRatingType?: string; // Entities rating type\n rating?: RangeFilter; // instrument rating\n maturityDate?: StringFilterRangeValue;\n couponPercent?: RangeFilter;\n currencyCode?: string; // Investment volume currency\n volume?: RangeFilter; // Investment volume value\n creditRatingShortTermRating?: RangeFilter;\n sigCountryRiskAssessment?: string[];\n creditRating?: RangeFilter;\n creditReview?: RangeFilter;\n sigPOD?: RangeFilter;\n esgEnvironment?: RangeFilter;\n esgSocial?: RangeFilter;\n esgGovernance?: RangeFilter;\n esgTotal?: RangeFilter;\n storefrontRatingOutlook?: string[];\n\n peergroupName?: string;\n rank?: number[];\n ratingPoints?: number[];\n returnValue?: number[];\n risk?: number[];\n};\n","export const uploadTypes = {\n entities: 'instruments-entities',\n funds: 'funds',\n};\n\nexport const uploadSteps = {\n first: 'choose_upload_type',\n second: 'upload_data',\n};\n","import React, { FC, useState } from 'react';\nimport { Box, Typography, Button } from '@scope/scope-one-ui/core';\nimport { TileButton } from '@scope/scope-one-ui/core/TileButton';\nimport { useTranslation } from 'react-i18next';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { AccentedWord, StepChoiceWrapper } from './PortfolioUploadSteps.styled';\nimport { PortfolioUploadFirstStepProps } from './PortfolioUploadFirstStep.d';\nimport Entities from '../../../../../assets/icons/entities.svg';\nimport Funds from '../../../../../assets/icons/funds.svg';\nimport { uploadSteps, uploadTypes } from '../constants';\n\nexport const PortfolioUploadFirstStep: FC<PortfolioUploadFirstStepProps> = ({\n changeUploadType,\n uploadType,\n setStep,\n}) => {\n const { t } = useTranslation();\n return (\n <StepChoiceWrapper>\n <Box display=\"flex\" justifyContent=\"center\" mt={4} mb={3}>\n <Typography variant=\"h2\">{t('PORTFOLIO_UPLOAD.QUESTION_1')}</Typography>\n </Box>\n <Box display=\"flex\" justifyContent=\"center\" mx={20}>\n <Typography color={COLORS.typography.main}>\n {t('PORTFOLIO_UPLOAD.INFO_1_1')}{' '}\n <AccentedWord>{t('PORTFOLIO_UPLOAD.INFO_1_2')}</AccentedWord> {t('PORTFOLIO_UPLOAD.OR')}{' '}\n <AccentedWord>{t('PORTFOLIO_UPLOAD.FUNDS')}</AccentedWord>{' '}\n {t('PORTFOLIO_UPLOAD.INFO_1_3')}\n </Typography>\n </Box>\n <Box display=\"flex\" justifyContent=\"center\" mt={5} gridGap={3} color={COLORS.typography.main}>\n <TileButton\n selected={uploadType === uploadTypes.entities}\n title=\"Entities / Bonds\"\n withCheckbox\n onClick={() => changeUploadType(uploadTypes.entities)}\n icon={<Entities />}\n />\n <TileButton\n selected={uploadType === uploadTypes.funds}\n title=\"Funds\"\n withCheckbox\n onClick={() => changeUploadType(uploadTypes.funds)}\n icon={<Funds />}\n />\n </Box>\n <Box mt={6}>\n <Button disabled={!uploadType} onClick={() => setStep(uploadSteps.second)}>\n Start Portfolio Upload\n </Button>\n </Box>\n </StepChoiceWrapper>\n );\n};\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n Box,\n Checkbox,\n Divider,\n DropZoneField,\n Input,\n Radio,\n Select,\n Typography,\n} from '@scope/scope-one-ui/core';\nimport { useNotifications } from 'shared/hooks';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { DownloadTemplateButton, TemplateArea } from './PortfolioUploadSteps.styled';\nimport { PortfolioUploadSecondStepProps } from './PortfolioUploadSecondStep.d';\nimport { uploadTypes } from '../constants';\nimport { downloadService } from '../../../../../services';\n\nexport const PortfolioUploadSecondStep: FC<PortfolioUploadSecondStepProps> = ({\n uploadType,\n onFileUpload,\n onPortfolioSelect,\n uploadToISIN,\n portfolio,\n portfoliosOptions,\n isPortfoliosLoading,\n}) => {\n const { t } = useTranslation();\n const { notifyError } = useNotifications();\n const portfolioChoiceScenarios = [\n { value: 'addToExistingPortfolio', label: t('PORTFOLIO_UPLOAD.ADD_TO_EXISTING_PORTFOLIO') },\n { value: 'createNewPortfolio', label: t('PORTFOLIO_UPLOAD.CREATE_NEW_PORTFOLIO') },\n ];\n\n const templateUrl = `/user-profile/portfolios/upload/${uploadType}`;\n\n const [portfolioChoiceScenario, setPortfolioChoiceScenario] = useState(\n portfolioChoiceScenarios[0].value,\n );\n\n const downloadErrorHandler = () => {\n notifyError(t('PORTFOLIO_UPLOAD.FAILED_DOWNLOAD_PORTFOLIO_TEMPLATE'));\n };\n\n const handleDownloadTemplateClick = () =>\n downloadService({\n path: templateUrl,\n name: 'portfolio-template.xlsx',\n onError: downloadErrorHandler,\n });\n\n const fileAddedHandler = (files) => {\n if (files && files[0]) {\n onFileUpload(files[0].file);\n }\n };\n\n return (\n <>\n <Box pt={4} px={3} display=\"flex\" flexDirection=\"column\">\n <Typography color={COLORS.typography.main}>\n {uploadType === uploadTypes.entities\n ? t('PORTFOLIO_UPLOAD.INFO_ENTITIES_2_1')\n : t('PORTFOLIO_UPLOAD.INFO_FUNDS_2_1')}\n </Typography>\n <Box mt={3}>\n <Radio\n options={portfolioChoiceScenarios}\n value={portfolioChoiceScenario}\n onChange={(value) => {\n setPortfolioChoiceScenario(value as string);\n return value === portfolioChoiceScenarios[1].value && onPortfolioSelect(null);\n }}\n />\n </Box>\n <Box mt={3} mb={4}>\n {portfolioChoiceScenario === portfolioChoiceScenarios[0].value ? (\n <Select\n value={(portfolio && portfolio.portfolioId) ?? undefined}\n options={portfoliosOptions}\n disabled={isPortfoliosLoading}\n placeholder={isPortfoliosLoading ? 'Loading Portfolios...' : 'Select portfolio'}\n onChange={(val) => onPortfolioSelect({ portfolioId: val as string })}\n />\n ) : (\n <Input\n placeholder={t('PORTFOLIO_UPLOAD.TYPE_PORTFOLIO_NAME')}\n onChange={(val) => onPortfolioSelect({ portfolioName: val as string })}\n />\n )}\n </Box>\n </Box>\n <Divider />\n <Box pt={4} pb={5} px={3} display=\"flex\" flexDirection=\"column\">\n <TemplateArea mb={4}>\n <Typography>\n <b>{t('PORTFOLIO_UPLOAD.DOWNLOAD_INFO_1')}</b>\n {t('PORTFOLIO_UPLOAD.DOWNLOAD_INFO_2')}\n </Typography>\n <DownloadTemplateButton onClick={() => handleDownloadTemplateClick()}>\n {t('PORTFOLIO_UPLOAD.DOWNLOAD_TEMPLATE')}\n </DownloadTemplateButton>\n </TemplateArea>\n <DropZoneField\n containerSize=\"medium\"\n fileType=\"sheet\"\n handleOnUpload={fileAddedHandler}\n multiple={false}\n />\n {uploadType === uploadTypes.entities && (\n <Box mt={4}>\n <Checkbox\n onChange={(val) => uploadToISIN(val)}\n label={t('PORTFOLIO_UPLOAD.ADD_TO_ISIN')}\n />\n </Box>\n )}\n </Box>\n <Divider />\n </>\n );\n};\n","import { fetchApi } from 'shared/functions';\n\nexport const uploadPortfolioUnified = async (payload, uploadType) => {\n const { file, portfolioName, portfolioId, uploadEntitiesViaIsin: uploadToISIN } = payload;\n const formData = new FormData();\n formData.append('file', file, file.name);\n if (uploadToISIN) formData.append('uploadEntitiesViaIsin', uploadToISIN);\n if (portfolioId) formData.append('portfolioId', portfolioId);\n if (portfolioName) formData.append('portfolioName', portfolioName);\n\n const url = `/user-profile/portfolios/upload/${uploadType}`;\n\n const params = {\n method: 'POST',\n body: formData,\n };\n\n return fetchApi(url, params, ['Content-Type']);\n};\n","import React, { FC, useState, useEffect, FormEvent } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { Formik, Form, Field, ErrorMessage } from 'formik';\nimport get from 'lodash/get';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport Button from '@mui/material/Button';\nimport { Dialog, DialogActions, DialogContent, Link, Checkbox } from '@mui/material';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport Paper from '@mui/material/Paper';\nimport InputBase from '@mui/material/InputBase';\nimport IconButton from '@mui/material/IconButton';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport MenuItem from '@mui/material/MenuItem';\nimport CheckIcon from '@mui/icons-material/Check';\nimport Grid from '@mui/material/Grid';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { theme } from 'theme';\nimport { DialogTitleWithClose } from 'ui';\nimport { Loader } from 'ui/Loader/Loader';\n\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\nimport { downloadService, uploadPortfolioUnified } from 'services';\nimport { portfolioUploadSchema, creditReviewCreatePortfolioSchema } from 'shared/validations';\nimport { useNotifications } from 'shared/hooks';\nimport { useFetchPortfolios } from '../../GraphQL/portfolios/hooks';\n\nconst useStyles = makeStyles({\n downloadTemplateContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n downloadButtonContainer: {\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'flex-end',\n },\n input: {\n display: 'none',\n },\n uploadContainer: {\n padding: '2px 4px',\n margin: theme.spacing(2, 0),\n display: 'flex',\n alignItems: 'center',\n },\n fileUploadText: {\n marginLeft: theme.spacing(1),\n flex: 1,\n },\n fullWidth: {\n width: '100%',\n },\n summaryContent: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n textCenter: {\n textAlign: 'center',\n },\n checkIcon: {\n fontSize: 80,\n fill: '#00d3a7',\n },\n strong: {\n fontWeight: 700,\n },\n summarySideNotes: {\n textAlign: 'left',\n fontSize: '0.75rem',\n },\n finishSideNotes: {\n textAlign: 'center',\n fontSize: '0.75rem',\n padding: '20px 50px',\n marginTop: '20px',\n borderTop: 'solid gray 1px',\n borderBottom: 'solid gray 1px',\n },\n});\n\ntype SelectedPortfolio = {\n id?: string | null;\n name?: string;\n description?: string;\n};\n\ntype PortfolioUploadResponseMissingItem = {\n type: string;\n value: string;\n};\n\ntype PortfolioUploadModalProps = {\n open: boolean;\n onClose: () => void;\n onUploaded?: (refresh: boolean, reason: string) => void;\n destinationPortfolioId?: string;\n};\n\nexport const steps = {\n UPLOAD: 1,\n CREATE_PORTFOLIO: 2,\n SUMMARY: 3,\n FINISH: 4,\n};\n\nexport const OldPortfolioUploadModal: FC<PortfolioUploadModalProps> = ({\n open,\n onClose,\n onUploaded,\n destinationPortfolioId = null,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n const { notifyError } = useNotifications();\n const navigate = useNavigate();\n\n const sampleTemplateUrl = '/user-profile/portfolios/upload-portfolio';\n\n const [fileUploadInputRef, setFileUploadInputRef] = useState<HTMLInputElement>();\n\n const [isPending, setIsPending] = useState(false);\n\n const [error, setError] = useState<any>();\n\n const [fileData, setFileData] = useState({ fileUploadText: '' });\n\n const [step, setStep] = useState(steps.UPLOAD);\n const [summaryStep, setSummaryStep] = useState(0);\n\n const [uploadEntities, setUploadEntities] = useState(false);\n\n const [selectedPortfolio, setSelectedPortfolio] = useState<SelectedPortfolio>({});\n\n const [isCreatePortfolioOpen, setIsCreatePortfolioOpen] = useState(false);\n\n /**\n * create portfolio modal handlers\n */\n const handleClickCreateNew = () => {\n setIsCreatePortfolioOpen(true);\n refetch();\n };\n\n const handleCreatePortfolioClose = () => {\n setIsCreatePortfolioOpen(false);\n };\n\n const handlePortfolioCreateDone = (createdPortfolioId: string, createdPortfolioName: string) => {\n setSelectedPortfolio({ id: createdPortfolioId, name: createdPortfolioName });\n };\n\n useEffect(() => {\n if (isCreatePortfolioOpen) {\n handleAddToSelectedPortfolioClick();\n setIsCreatePortfolioOpen(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectedPortfolio]);\n\n /**\n * prepare portfolios list\n */\n const [portfoliosStart, setPortfoliosStart] = useState(0);\n const [portfoliosLimit, setPortfoliosLimit] = useState(1);\n\n const {\n data: portfoliosData,\n loading: isPortfoliosLoading,\n refetch,\n } = useFetchPortfolios(portfoliosStart, portfoliosLimit);\n\n const { portfolios } = portfoliosData || { total: 0, portfolios: [] };\n\n /**\n *\n */\n useEffect(() => {\n if (error) {\n notifyError(error);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [error]);\n\n /**\n * finish / close modal\n */\n const closeModal = () => {\n setSelectedPortfolio({});\n setStep(steps.UPLOAD);\n setSummaryStep(0);\n onClose();\n };\n\n const handleDone = async () => {\n closeModal();\n if (!destinationPortfolioId) {\n navigate('/portfolios');\n }\n };\n\n /**\n * download portfolio template\n */\n const downloadErrorHandler = () => {\n notifyError(t('PORTFOLIO_UPLOAD.FAILED_DOWNLOAD_PORTFOLIO_TEMPLATE'));\n };\n\n const handleDownloadTemplateClick = () =>\n downloadService({\n path: sampleTemplateUrl,\n name: 'portfolio-template.xlsx',\n onError: downloadErrorHandler,\n });\n\n /**\n * handle next/previous steps\n */\n const previousStep = () => {\n switch (step) {\n case steps.UPLOAD:\n break;\n case steps.SUMMARY:\n if (summaryStep > 0) {\n setSummaryStep(summaryStep - 1);\n } else {\n setStep(step - 1);\n }\n break;\n default:\n setStep(step - 1);\n }\n };\n\n const fileUploadInputRefChanged = (element: HTMLInputElement) => setFileUploadInputRef(element);\n\n // eslint-disable-next-line consistent-return\n const handleSubmit = async (payload?: any, newPortfolioId?: string | undefined) => {\n if (payload) setFileData(payload);\n if (!destinationPortfolioId && !newPortfolioId) {\n return setStep(steps.CREATE_PORTFOLIO);\n }\n const dataToUpload = payload ?? fileData;\n\n setIsPending(true);\n\n uploadPortfolioUnified({\n portfolio: dataToUpload && dataToUpload.fileUploadInput,\n uploadEntities,\n portfolioId: destinationPortfolioId ?? newPortfolioId,\n })\n .then(() => {\n setStep(steps.FINISH);\n if (onUploaded) {\n onUploaded(true, refreshReasons.UPDATED);\n }\n })\n .catch(() => {\n setError('Unexpected error while uploading portfolio.');\n closeModal();\n })\n .finally(() => setIsPending(false));\n };\n\n useEffect(() => {\n if (step === steps.CREATE_PORTFOLIO) {\n setPortfoliosStart(0);\n setPortfoliosLimit(20);\n }\n }, [step]);\n\n const onSelectPortfolio = (e: FormEvent, defaultAction: (e: FormEvent) => any) => {\n const target = e.target as HTMLInputElement;\n setSelectedPortfolio({ id: target.value });\n if (defaultAction) {\n defaultAction(e);\n }\n };\n\n const handleAddToSelectedPortfolioClick = () => {\n if (selectedPortfolio?.id) {\n handleSubmit(null, selectedPortfolio.id);\n }\n };\n\n const updateUploadBoxData = (\n setFieldValueFunc: (name: string, value: any) => void,\n file: any | null,\n text: string,\n ) => {\n if (!file && fileUploadInputRef) {\n fileUploadInputRef.value = '';\n }\n setFieldValueFunc('fileUploadInput', file);\n setFieldValueFunc('fileUploadText', text);\n };\n\n const stepUploadInitialValues = {\n description: '',\n origin: window.location.href,\n fileUploadText: '',\n fileUploadInput: null,\n };\n\n const stepCreatePortfolioInitialValues = {\n portfolioId: '',\n };\n\n /**\n * upload step\n */\n const stepUpload = (\n <Formik\n key={steps.UPLOAD}\n initialValues={stepUploadInitialValues}\n onSubmit={(payload) => handleSubmit(payload)}\n validationSchema={portfolioUploadSchema(['csv', 'xls', 'xlsx'])}\n >\n {({ values, errors, touched, setFieldValue }) => {\n return (\n <Form>\n <DialogContent>\n <Box mb={2}>\n <Typography>{t('PORTFOLIO_UPLOAD.INFO_1')}</Typography>\n </Box>\n <Box mb={2}>\n <Typography>{t('PORTFOLIO_UPLOAD.INFO_2')}</Typography>\n </Box>\n <Divider />\n <div className={classes.downloadTemplateContainer}>\n <Box p={2}>\n <Typography>{`${t('UPLOAD.FILE_FORMAT')}: .csv, .xls, .xlsx`}</Typography>\n <Typography>{`${t('UPLOAD.MAX_SIZE')}: 100 ${t(\n 'ENTITIES',\n ).toLowerCase()}`}</Typography>\n </Box>\n <Box p={2} className={classes.downloadButtonContainer}>\n <Button\n onClick={handleDownloadTemplateClick}\n variant=\"outlined\"\n disabled={isPending}\n >\n {t('DOWNLOAD_TEMPLATE')}\n </Button>\n </Box>\n </div>\n <Divider />\n <ErrorMessage name=\"fileUploadInput\">\n {(message) => (\n <Box mt={2}>\n <Typography color=\"error\">{message}</Typography>\n </Box>\n )}\n </ErrorMessage>\n <Paper className={classes.uploadContainer}>\n <input\n className={classes.input}\n id=\"file-upload\"\n name=\"file-upload\"\n ref={fileUploadInputRefChanged}\n type=\"file\"\n onChange={(event: FormEvent) => {\n updateUploadBoxData(\n setFieldValue,\n get((event.currentTarget as HTMLInputElement)?.files, '[0]', null),\n get((event.currentTarget as HTMLInputElement)?.files, '[0].name', ''),\n );\n }}\n />\n <Field name=\"fileUploadText\">\n {({ field }: any) => (\n <InputBase\n {...field}\n className={classes.fileUploadText}\n placeholder={t('UPLOAD.NO_FILE_SELECTED')}\n error={errors.fileUploadInput && touched.fileUploadText}\n readOnly\n />\n )}\n </Field>\n <IconButton\n type=\"submit\"\n disabled={!fileUploadInputRef || !fileUploadInputRef.value}\n onClick={() => {\n updateUploadBoxData(setFieldValue, null, '');\n }}\n >\n <DeleteIcon />\n </IconButton>\n <label htmlFor=\"file-upload\">\n <Button variant=\"contained\" color=\"primary\" component=\"span\">\n {t('UPLOAD.BROWSE')}\n </Button>\n </label>\n </Paper>\n\n <Box mt={2}>\n <Grid container alignItems=\"center\">\n <Grid item>\n <Checkbox\n name=\"uploadEntities\"\n defaultChecked={false}\n onChange={(event) => setUploadEntities(event.target.checked)}\n />\n </Grid>\n <Grid item>\n <Typography>{t('PORTFOLIO_UPLOAD.ADD_INSTRUMENTS')}</Typography>\n </Grid>\n </Grid>\n </Box>\n </DialogContent>\n <DialogActions>\n {step !== steps.FINISH && step !== steps.UPLOAD && (\n <Box>\n <Button variant=\"outlined\" onClick={previousStep}>\n {t('PREVIOUS')}\n </Button>\n </Box>\n )}\n <div style={{ flex: '1 0 0' }} />\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isPortfoliosLoading || !get(values, 'fileUploadInput')}\n >\n {t('NEXT')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n );\n\n /**\n * create portfolio step\n */\n const stepCreatePortfolio = (\n <Formik\n key={steps.CREATE_PORTFOLIO}\n initialValues={stepCreatePortfolioInitialValues}\n onSubmit={(payload) => handleSubmit(payload)}\n validationSchema={creditReviewCreatePortfolioSchema}\n >\n {() => {\n return (\n <Form>\n <DialogContent>\n <Box mb={2}>\n <Typography>{t('UPLOAD.UPLOAD_SELECTED')}</Typography>\n </Box>\n <div className={classes.downloadTemplateContainer}>\n <Box p={2}>\n <Typography color=\"primary\">{`${\n fileData && fileData.fileUploadText\n }`}</Typography>\n </Box>\n <Box p={2} className={classes.downloadButtonContainer}>\n <Button onClick={() => setStep(steps.UPLOAD)} variant=\"contained\" color=\"primary\">\n {t('UPLOAD.CHANGE_FILE')}\n </Button>\n </Box>\n </div>\n <Box mt={2}>\n <Typography>{t('PORTFOLIO_UPLOAD.CREATE_PORTFOLIO')}</Typography>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n {!!portfolios && (\n <Field name=\"portfolioId\">\n {({ field }: any) => (\n <TextField\n {...field}\n select\n label={t('PORTFOLIO_UPLOAD.SELECT_PORTFOLIO')}\n fullWidth\n onChange={(e) => onSelectPortfolio(e, field.onChange)}\n >\n {portfolios\n .filter((item: any) => !item.isDedicated)\n .map(({ id, name }) => (\n <MenuItem key={id} value={id}>\n {name}\n </MenuItem>\n ))}\n </TextField>\n )}\n </Field>\n )}\n </Box>\n <Divider />\n </DialogContent>\n <DialogActions>\n <Box>\n <Button onClick={previousStep}>{t('PREVIOUS')}</Button>\n </Box>\n <div style={{ flex: '1 0 0' }} />\n <Button variant=\"outlined\" onClick={handleClickCreateNew}>\n {t('Create new portfolio')}\n </Button>\n <Button\n onClick={handleAddToSelectedPortfolioClick}\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isPortfoliosLoading}\n >\n {t('NEXT')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n );\n\n /**\n * Last step\n */\n const stepFinish = (\n <>\n <DialogContent className={classes.textCenter}>\n <Box\n width={100}\n height={100}\n borderRadius=\"50%\"\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n marginY={2}\n marginX=\"auto\"\n boxShadow={theme.customShadows[1]}\n >\n <CheckIcon className={classes.checkIcon} />\n </Box>\n <Typography className={classes.textCenter}>\n {t('PORTFOLIO_UPLOAD.UPLOADING_PORTFOLIO')}\n </Typography>\n <Typography className={classes.finishSideNotes}>\n {t('PORTFOLIO_UPLOAD.YOU_WILL_BE_NOTIFIED')}\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isPortfoliosLoading}\n onClick={handleDone}\n >\n {t('NEXT')}\n </Button>\n </DialogActions>\n </>\n );\n\n const stepsMapping = {\n [steps.UPLOAD]: stepUpload,\n [steps.CREATE_PORTFOLIO]: stepCreatePortfolio,\n [steps.FINISH]: stepFinish,\n };\n\n return (\n <>\n <Dialog open={open} onClose={closeModal} fullWidth maxWidth=\"sm\">\n <DialogTitleWithClose onClose={closeModal}>\n {t('PORTFOLIO_UPLOAD.TITLE')}\n </DialogTitleWithClose>\n {(isPending || isPortfoliosLoading) && <Loader cover />}\n {stepsMapping[step]}\n </Dialog>\n\n <CreateNewPortfolioModal\n open={isCreatePortfolioOpen}\n onClose={handleCreatePortfolioClose}\n onCreate={handlePortfolioCreateDone}\n />\n </>\n );\n};\n","import React, { FC, useState } from 'react';\nimport { Dialog } from '@scope/scope-one-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { useNotifications } from 'shared/hooks';\nimport { useToasts } from '@scope/scope-one-ui/core/Messages/context';\nimport { PortfolioData, PortfolioUploadModalProps, UploadType } from './PortfolioUploadModal.d';\nimport { PortfolioUploadFirstStep } from './UploadSteps/PortfolioUploadFirstStep';\nimport { uploadSteps, uploadTypes } from './constants';\nimport { PortfolioUploadSecondStep } from './UploadSteps/PortfolioUploadSecondStep';\nimport { tableRefreshReasonTypes as refreshReasons } from '../../../../shared/constants/tableRefreshReasonTypes';\nimport { useFetchPortfolios } from '../../GraphQL/portfolios/hooks';\nimport { uploadPortfolioUnified } from './services/PortfolioUploadServices';\nimport { OldPortfolioUploadModal } from './OldPortfolioUploadModal';\nimport { useFeatures } from '../../../../shared/hooks';\n\nexport const PortfolioUploadModal: FC<PortfolioUploadModalProps> = ({\n open,\n onClose,\n onUploaded,\n destinationPortfolioId = null,\n}) => {\n const { t } = useTranslation();\n const { success, error } = useToasts();\n const { notifyError } = useNotifications();\n const { data: portfoliosData, loading: isPortfoliosLoading } = useFetchPortfolios(0, 200);\n const { portfolios } = portfoliosData || { total: 0, portfolios: [] };\n const { newPortfolioUploadModal } = useFeatures();\n const [selectedStep, setSelectedStep] = useState(uploadSteps.first);\n const [uploadType, setUploadType] = useState<UploadType>(null);\n const [portfolio, setPortfolio] = useState<PortfolioData | null>(\n destinationPortfolioId ? { portfolioId: destinationPortfolioId } : null,\n );\n const [uploadedFile, setUploadedFile] = useState<File | null>(null);\n const [uploadToISIN, setUploadToISIN] = useState(false);\n\n const firstStep = (\n <PortfolioUploadFirstStep\n changeUploadType={(v: UploadType) => setUploadType(v)}\n uploadType={uploadType}\n setStep={(step) => setSelectedStep(step)}\n />\n );\n\n const portfoliosOptions = portfolios.map((item) => {\n return { label: item.name, value: item.id };\n });\n\n const secondStep = (\n <PortfolioUploadSecondStep\n uploadType={uploadType}\n portfolio={portfolio}\n isPortfoliosLoading={isPortfoliosLoading}\n portfoliosOptions={portfoliosOptions}\n onPortfolioSelect={(val) => setPortfolio(val)}\n onFileUpload={(file) => setUploadedFile(file)}\n uploadToISIN={(val) => setUploadToISIN(val)}\n />\n );\n\n const steps = { [uploadSteps.first]: firstStep, [uploadSteps.second]: secondStep };\n\n const modalTitle = () => {\n if (selectedStep !== uploadSteps.first) {\n return uploadType === uploadTypes.entities\n ? t('PORTFOLIO_UPLOAD.ENTITIES_PORTFOLIO_UPLOAD')\n : t('PORTFOLIO_UPLOAD.FUNDS_PORTFOLIO_UPLOAD');\n }\n return t('PORTFOLIO_UPLOAD.TITLE');\n };\n\n const handleUploadPortfolio = () => {\n if (!portfolio) return notifyError(t('PORTFOLIO_UPLOAD.SELECT_PORTFOLIO'));\n if (!uploadedFile) return notifyError(t('PORTFOLIO_UPLOAD.SELECT_FILE'));\n\n const payload = {\n file: uploadedFile,\n uploadEntitiesViaIsin: uploadType === uploadTypes.entities ? uploadToISIN : undefined,\n portfolioId: portfolio.portfolioId ?? undefined,\n portfolioName: portfolio.portfolioName ?? undefined,\n };\n\n return uploadPortfolioUnified(payload, uploadType)\n .then(() => {\n success({\n title: 'Uploading portfolio...',\n content: `You will be notified when the processing has finished`,\n });\n if (onUploaded) {\n onUploaded(true, refreshReasons.UPDATED);\n }\n handleClose();\n })\n .catch((err) => {\n err.json().then((res) =>\n error({\n title: 'Portfolio not uploaded!',\n content: `${res.detail}`,\n }),\n );\n });\n };\n\n const handleClose = () => {\n setUploadType(null);\n setUploadToISIN(false);\n setUploadedFile(null);\n setSelectedStep(uploadSteps.first);\n return onClose();\n };\n\n return (\n <>\n {newPortfolioUploadModal ? (\n <Dialog\n size=\"medium\"\n open={open}\n onClose={() => handleClose()}\n title={modalTitle()}\n hideCancelButton={selectedStep === uploadSteps.first}\n cancelLabel={t('PORTFOLIO_UPLOAD.PREVIOUS')}\n onCancel={() => setSelectedStep(uploadSteps.first)}\n confirmLabel={t('PORTFOLIO_UPLOAD.UPLOAD_PORTFOLIO')}\n onConfirm={selectedStep !== uploadSteps.first ? () => handleUploadPortfolio() : undefined}\n >\n {steps[selectedStep]}\n </Dialog>\n ) : (\n <OldPortfolioUploadModal\n onClose={onClose}\n open={open}\n onUploaded={onUploaded}\n destinationPortfolioId={destinationPortfolioId ?? undefined}\n />\n )}\n </>\n );\n};\n","import { ArtifactIdType } from 'shared/constants/artifactIdType';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\n\nexport const artifactIdToRatingType: Record<ArtifactIdType, ratingTypes> = {\n [ArtifactIdType.ScopeOneId]: ratingTypes.CREDIT_RATING,\n [ArtifactIdType.EasyNumber]: ratingTypes.CREDIT_REVIEW,\n [ArtifactIdType.EsgId]: ratingTypes.ESG_IMPACT,\n};\n","import { getName } from 'country-list';\nimport { isNil, round } from 'lodash';\nimport { Event } from 'modules/events/types/eventsTypes';\nimport { ArtifactIdType } from 'shared/constants/artifactIdType';\nimport { formatCurrency, formatDate } from 'shared/functions';\nimport { artifactIdToRatingType } from 'shared/mappings/artifactIdTypeToRatingType';\nimport { parseDemandType, parseIndustryType, parseRatingType } from 'shared/parsers';\nimport { parseISO } from 'date-fns';\nimport omit from 'lodash/omit';\nimport {\n Portfolio,\n PortfolioEntity,\n PortfolioEvent,\n PortfolioInstrument,\n PortfolioFund,\n PortfolioRatingNews,\n PortfolioResearch,\n PortfolioUpload,\n InitialFilterRangeValue,\n FiltersData,\n} from './types';\n\nexport const multiline = (firstLine: string, secondLine: string) => `${firstLine}\\n${secondLine}`;\n\nexport const makePortfolioTableData = (portfolios: Portfolio[]) =>\n portfolios.map((item) => [\n [item.id, item.name, item.description ?? ''],\n formatDate(item.createdDate),\n item.noOfItems.entities,\n item.noOfItems.instruments,\n item.noOfItems.funds,\n item.coverage?.esg ?? 'N/A',\n item.coverage?.creditRating ?? 'N/A',\n item.coverage?.creditReview ?? 'N/A',\n [item.id, item.watchlistEnabled, item.isDedicated],\n null,\n ]);\n\nexport const makePortfolioItemsTableData = (portfolioItems: PortfolioEntity[]) => {\n const result = (portfolioItems ?? []).map((item) => {\n const idColumn = [item.id, item.artifactId, item];\n const nameColumn = [\n item.artifactId,\n item.name,\n artifactIdToRatingType[item.meta.artifactIdType ?? ArtifactIdType.ScopeOneId],\n ];\n const dataSource = item.meta.esgCustomScore\n ? 'ENTITY.DATA_SOURCE_USER'\n : 'ENTITY.DATA_SOURCE_SCOPE';\n\n const otherColumns = [\n // country,\n item.countryCode ? getName(item.countryCode) : 'N/A',\n // city\n item.meta?.sigCity ?? 'N/A',\n // postcode\n item.meta?.sigPostcode ?? 'N/A',\n // industry\n parseIndustryType(item.industry),\n // credit rating\n item,\n // credit review\n item,\n // ESG review\n item,\n // rating type\n item.meta?.storefrontRatingType ?? 'N/A',\n // demandType\n parseDemandType(item.meta?.demandType),\n // entityRating,\n item,\n // outlook\n item.meta?.storefrontRatingOutlook ?? 'N/A',\n // shortTermRating\n item,\n // probability,\n item.meta?.sigPOD ? `${item.meta.sigPOD}%` : 'N/A',\n // countryRisk,\n item.meta?.sigCountryRiskAssessment ?? 'N/A',\n // Renewal CREDIT RATING\n item,\n // environmental\n item,\n // social\n item,\n // governance\n item,\n // total\n item,\n // SENTIMENT environmental\n item,\n // SENTIMENT social\n item,\n // SENTIMENT governance\n item,\n // SENTIMENT total\n item,\n // CLIMATE_STRESS_TEST climateLoss\n item,\n // CLIMATE_STRESS_TEST physicalRiskLoss\n item,\n // CLIMATE_STRESS_TEST transitionRiskLoss\n item,\n // activity credit rating\n [item.activity?.creditRating, item.meta.storefrontOldScore, item.meta.storefrontScoreUpdate],\n // activity credit review\n [item.activity?.creditReview, item.meta.sigOldScore, item.meta.sigScoreUpdate],\n // activity ESG\n [item.activity?.esg, item.meta.esgOldScore, item.meta.esgScoreUpdate],\n // activity SENTIMENT\n [item.scores.sentifi?.status],\n ];\n\n return [idColumn, nameColumn, dataSource, ...otherColumns];\n });\n\n return result;\n};\n\nexport const makeInstrumentsTableData = (portfolioItems: PortfolioInstrument[]) =>\n portfolioItems.map((item) => [\n [item.id, item.artifactId],\n item.name,\n item.isin,\n item.entityName,\n parseRatingType(item.meta.ratingType),\n parseDemandType(item.meta?.demandType),\n item.meta.rating ?? 'N/A',\n formatDate(item.coupon.maturityDate),\n !isNil(item.coupon?.couponPercent) ? `${round(item.coupon.couponPercent, 1)}%` : '-',\n formatCurrency(item.volume, item.currencyCode),\n ]);\n\nexport const makeFundsTableData = (portfolioItems: PortfolioFund[]) =>\n portfolioItems.map((item) => [\n item.isin,\n item.name,\n item.peergroupName,\n item.isin,\n item.rank,\n item.rating,\n item.ratingPoints,\n item.returnValue,\n item.risk,\n item.isAif,\n item.isQualitative,\n ]);\n\nexport const makeRatingNewsTableData = (portfolioItems: PortfolioRatingNews[]) =>\n portfolioItems.map((item) => [item.artifactId, item.title, formatDate(item.publicationDate)]);\n\nexport const makeResearchTableData = (portfolioItems: PortfolioResearch[]) =>\n portfolioItems.map((item) => [item.artifactId, item.title, formatDate(item.publicationDate)]);\n\nexport const makeEventsTableData = (portfolioItems: PortfolioEvent[]) =>\n portfolioItems.map((item) => [\n [item.id, item.artifactId],\n item.title,\n formatDate(item.eventDate, 'dd/MM/yyyy HH:MM a'),\n item.category,\n item.region,\n item.industry,\n {\n id: item.artifactId,\n connectionLink: item.meta.connectionLink,\n userRegistered: item.meta.userRegistered,\n eventDate: parseISO(item.eventDate),\n } as Event,\n ]);\n\nexport const makeUploadsTableData = (portfolioItems: PortfolioUpload[]) =>\n portfolioItems.map((item) => [\n item.id,\n [item.fileName, item.link, item.errorsLink], // name\n item.itemsType, // type\n item.results.uploadedItems ?? item.results.total, // uploaded items\n item.results.validationErrors, // validation errors\n item, // status\n item, // more actions\n ]);\n\nexport const rangeSliderValuesGenerator = (\n data: InitialFilterRangeValue,\n step: number = 0.01,\n unit: string = '',\n) => {\n let { minimum } = data;\n const { maximum } = data;\n const valuesArray: { label: string; value: number }[] = [];\n while (minimum !== null && maximum !== null && minimum <= maximum) {\n const roundStep: number = 1 / step;\n const value: number = Math.round(minimum * roundStep) / roundStep;\n valuesArray.push({\n label: unit ? `${value}${unit}` : `${value}`,\n value,\n });\n minimum = value + step;\n }\n return valuesArray;\n};\n\nexport const valueParser = (value: string[], unit: string = '') => {\n return value\n .filter((item) => {\n return item != null;\n })\n .map((item) => {\n return {\n label: unit ? item + unit : item,\n value: item,\n };\n });\n};\n\nexport const minMaxValueInitialValues = (data: { label: string; value: number | string }[]) => [\n data[0]?.value,\n data[data.length - 1]?.value,\n];\n\nexport const updateFilters = (data: FiltersData, name: keyof FiltersData, value: any) =>\n value ? { ...data, [name]: value } : omit(data, name);\n","import React, { FC, useCallback, useEffect, useState } from 'react';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport clsx from 'clsx';\nimport { Box, Button, IconButton } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport VisibilityIcon from '@mui/icons-material/Visibility';\nimport { useTranslation } from 'react-i18next';\nimport { ActionsButton, Datatable } from 'ui';\nimport { useSelectedTableRows, useTable } from 'shared/hooks';\nimport { theme } from 'theme';\nimport { portfolioUploadQuery } from 'shared/constants/portfolioUploadQuery';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { LinkButton } from 'ui/Buttons';\nimport { MUIDataTableMeta } from 'mui-datatables';\nimport { SelectedEntities } from 'shared/types/portfolios';\nimport { useFeatures } from 'shared/hooks/useFeatures/useFeatures';\nimport { PortfolioUploadModal } from '../Modals/PortfolioUpload/PortfolioUploadModal';\nimport {\n useFetchPortfolios,\n useDeletePortfolios,\n useUpdatePortfolio,\n} from '../GraphQL/portfolios/hooks';\nimport { CreateNewPortfolioModal } from '../Modals/CreateNewPortfolioModal';\nimport { multiline, makePortfolioTableData } from './utils';\n\nconst useStyles = makeStyles(() => ({\n root: {\n '& thead > tr': {\n whiteSpace: 'pre',\n },\n },\n nameButton: {\n minWidth: 'unset',\n },\n disabled: {\n opacity: 0.3,\n },\n}));\n\ntype SelectedPortfolio = {\n id: string;\n name: string;\n description: string;\n};\n\nexport const PortfolioManager: FC = () => {\n const { t } = useTranslation();\n const classes = useStyles();\n const [portfolioForUpdate, setPortfolioForUpdate] = useState<SelectedPortfolio>();\n const { pathname, search } = useLocation();\n const navigate = useNavigate();\n const [portfolioUploadModalOpen, setPortfolioUploadModalOpen] = useState(false);\n const [createPortfolioModalOpen, setCreatePortfolioModalOpen] = useState(false);\n const [updating, setUpdating] = useState(false);\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: '' });\n const { success } = useSnackbar();\n const updatePortfolio = useUpdatePortfolio();\n const deletePortfolios = useDeletePortfolios();\n const {\n singleSelect,\n multiSelect,\n currentSelect,\n selectedAll,\n onSelectAll,\n onSelectedChange,\n selectSingle,\n clearSingle,\n } = useSelectedTableRows();\n\n const features = useFeatures();\n\n const actionRender = (\n _: unknown,\n { rowData: [[id, artifactId]], rowIndex }: MUIDataTableMeta,\n ) => (\n <ActionsButton\n onOpen={() => selectSingle(id, artifactId)}\n onClose={() => clearSingle()}\n actions={getActions(singleSelect)}\n disabled={dedicatedIndexes.includes(rowIndex)}\n />\n );\n\n /* ******************************************************************** */\n /* Table columns definition */\n /* ******************************************************************** */\n\n const initialColumns = useCallback(\n () => [\n {\n name: 'name',\n label: t('PORTFOLIO.PORTFOLIO'),\n options: {\n customBodyRender: ([id, name, description]: string[]) => (\n <LinkButton\n to={id}\n label={name}\n className={classes.nameButton}\n tooltip={description}\n withPathname\n />\n ),\n },\n },\n {\n name: 'created_date',\n label: t('PORTFOLIO.UPLOAD_DATE'),\n },\n {\n name: 'noOfItems',\n label: t('PORTFOLIO.ENTITIES'),\n options: {\n sort: false,\n },\n },\n {\n name: 'instruments',\n label: t('PORTFOLIO.INSTRUMENTS'),\n options: {\n sort: false,\n },\n },\n {\n name: 'fundsAnalysis',\n label: t('PORTFOLIO.FUNDS_ANALYSIS'),\n options: {\n sort: false,\n display: features.fundAnalysisPortfolioManager,\n },\n },\n {\n name: 'esgImpactReviewCoverage',\n label: multiline(t('PORTFOLIO.ESG_IMPACT_REVIEW'), t('PORTFOLIO.COVERAGE')),\n options: {\n sort: false,\n display: false,\n },\n },\n {\n name: 'creditRatingCoverage',\n label: multiline(t('PORTFOLIO.CREDIT_RATING'), t('PORTFOLIO.COVERAGE')),\n options: {\n sort: false,\n display: false,\n },\n },\n {\n name: 'creditReviewCoverage',\n label: multiline(t('PORTFOLIO.CREDIT_REVIEW'), t('PORTFOLIO.COVERAGE')),\n options: {\n sort: false,\n display: false,\n },\n },\n {\n name: 'notifications',\n label: t('PORTFOLIO.NOTIFICATIONS'),\n options: {\n sort: false,\n customBodyRender: ([id, watchlistEnabled, hidden]: any[]) => {\n if (!hidden) {\n return (\n <IconButton\n color={watchlistEnabled ? 'primary' : 'inherit'}\n className={clsx(!watchlistEnabled && classes.disabled)}\n onClick={toggleVisibility(id, watchlistEnabled)}\n size=\"large\"\n >\n <VisibilityIcon />\n </IconButton>\n );\n }\n return null;\n },\n },\n },\n {\n name: 'activity',\n label: t('PORTFOLIO.ACTIVITY'),\n options: {\n customBodyRender: (item: unknown) =>\n item && (\n <Button variant=\"outlined\" size=\"small\" color=\"primary\">\n {t('View activity')}\n </Button>\n ),\n display: features.activityInPortfolioManager,\n },\n },\n {\n name: 'moreActions',\n label: ' ',\n options: {\n sort: false,\n customBodyRender: actionRender,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [t, classes, singleSelect, multiSelect, currentSelect],\n );\n\n /* ******************************************************************** */\n /* Table data */\n /* ******************************************************************** */\n\n const { columns, pagination, onSortChange, onTableChange } = useTable({\n initialColumns,\n } as any);\n\n const { data, loading, refetch } = useFetchPortfolios(\n pagination.page * pagination.limit,\n pagination.limit,\n pagination.sort && [\n {\n column: pagination.sort.sortColumn,\n direction: pagination.sort.direction,\n },\n ],\n );\n const { total, portfolios } = data || { total: 0, portfolios: [] };\n\n const dedicatedIndexes =\n portfolios && portfolios.length\n ? portfolios\n .map((portfolio, i) => (portfolio.isDedicated ? i : -1))\n .filter((index) => index !== -1)\n : [];\n\n const isDedicatedPortfolioSelected = !!(\n portfolios &&\n portfolios.length &&\n currentSelect.count > 0 &&\n portfolios.find(\n ({ id: portfolioId, isDedicated }) => currentSelect.itemIds[portfolioId] && isDedicated,\n )\n );\n\n /* ******************************************************************** */\n /* Event handlers */\n /* ******************************************************************** */\n\n const openUploadPortfolioModal = () => navigate(`${pathname}?${portfolioUploadQuery.MODAL}`);\n\n const closeUploadPortfolioModal = () => navigate(`${pathname}`);\n\n const openCreatePortfolioModal = () => {\n if (portfolioForUpdate) {\n setPortfolioForUpdate(undefined);\n }\n setCreatePortfolioModalOpen(true);\n };\n\n const openRenamePortfolioModal = () => setCreatePortfolioModalOpen(true);\n\n const closeCreatePortfolioModal = () => setCreatePortfolioModalOpen(false);\n\n const toggleVisibility = (portfolioId: string, watchlistEnabled: boolean) => async () => {\n setUpdating(true);\n await updatePortfolio({ portfolioId, watchlistEnabled: !watchlistEnabled }).then(() => {\n success(\n watchlistEnabled\n ? t('PORTFOLIO.NOTIFICATIONS_DISABLED')\n : t('PORTFOLIO.NOTIFICATIONS_ENABLED'),\n );\n });\n await refetch();\n setUpdating(false);\n };\n\n const deletePortfolio = async () => {\n setUpdating(true);\n await deletePortfolios({ portfolioIds: Object.keys(currentSelect.itemIds) }).then(() => {\n success(t('PORTFOLIO.PORTFOLIO_DELETED'));\n });\n await refetch();\n setShouldRefresh({ value: true, reason: refreshReasons.DELETED });\n setUpdating(false);\n };\n\n const loadTableData = async () => {\n setUpdating(true);\n await refetch();\n setShouldRefresh({ value: true, reason: refreshReasons.UPDATED });\n setUpdating(false);\n };\n\n useEffect(() => {\n if (currentSelect.count === 1) {\n const selectedId = Object.keys(currentSelect.itemIds)[0];\n const selectedItem = portfolios.find((item) => item.id === selectedId);\n\n if (selectedItem) {\n setPortfolioForUpdate({\n id: selectedItem.id,\n name: selectedItem.name,\n description: selectedItem.description,\n });\n }\n }\n }, [currentSelect, portfolios]);\n\n /* ******************************************************************** */\n /* More actions */\n /* ******************************************************************** */\n\n const getActions = (items: SelectedEntities) => [\n {\n text: t('PORTFOLIO.UPLOAD_PORTFOLIO'),\n handler: openUploadPortfolioModal,\n hidden: items.count > 0,\n },\n {\n text: t('PORTFOLIO.CREATE_PORTFOLIO'),\n handler: openCreatePortfolioModal,\n hidden: items.count > 0,\n },\n {\n text: t('PORTFOLIO.RENAME_PORTFOLIO'),\n handler: openRenamePortfolioModal,\n hidden: items.count !== 1,\n disabled: isDedicatedPortfolioSelected,\n },\n {\n text: t('PORTFOLIO.DELETE_PORTFOLIO'),\n handler: deletePortfolio,\n hidden: items.count === 0,\n disabled: isDedicatedPortfolioSelected,\n color: theme.palette.error.main,\n confirmation: {\n title: 'Deleting portfolio',\n text: 'Do you really want to delete that portfolio?',\n },\n },\n ];\n\n /* ******************************************************************** */\n /* Side effects */\n /* ******************************************************************** */\n\n useEffect(() => {\n setPortfolioUploadModalOpen(search.includes(portfolioUploadQuery.MODAL));\n }, [search]);\n\n useEffect(() => {\n loadTableData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n /* ******************************************************************** */\n /* Render */\n /* ******************************************************************** */\n return (\n <>\n <Box className={classes.root}>\n <Datatable\n loading={loading || updating}\n columns={columns}\n pagination={pagination}\n data={makePortfolioTableData(portfolios)}\n notSelectableRows={dedicatedIndexes}\n total={total}\n onSelectedChange={onSelectedChange}\n toolbarData={getActions(multiSelect)}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n selectedAll={selectedAll}\n onSelectAllClick={onSelectAll}\n shouldRefresh={shouldRefresh}\n selectableRowsHeader={false}\n />\n </Box>\n <PortfolioUploadModal\n open={portfolioUploadModalOpen}\n onClose={closeUploadPortfolioModal}\n onUploaded={loadTableData}\n />\n <CreateNewPortfolioModal\n open={createPortfolioModalOpen}\n onClose={closeCreatePortfolioModal}\n onCreate={loadTableData}\n portfolio={portfolioForUpdate}\n />\n </>\n );\n};\n","export enum eventFiltersTypes {\n CREDIT_ANALYSIS = 'CREDIT_ANALYSIS',\n FUNDS_ANALYSIS = 'FUNDS_ANALYSIS',\n ESG_ANALYSIS = 'ESG_ANALYSIS',\n}\n","import { IconButton } from '@mui/material';\nimport React, { FC, useState } from 'react';\nimport LockIcon from '@mui/icons-material/Lock';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { ShopRelatedProductsModal } from 'modules/shop/components/ShopRelatedProductsModal';\nimport { shopProductsCategories } from 'modules/shop/shared/constants/shopProductsCategories';\nimport { ShopProductLines } from 'modules/shop/shared/constants/shopProductLines';\nimport { PortfolioEntity } from '../../types';\n\ntype ScoreLockProps = {\n entity: PortfolioEntity;\n module: ratingTypes;\n customHandler?: () => void;\n};\n\nexport const ScoreLock: FC<ScoreLockProps> = ({ entity, module, customHandler }) => {\n const [open, setOpen] = useState(false);\n\n const data = {\n category: {\n [ratingTypes.CREDIT_RATING]: shopProductsCategories.creditAnalysis,\n [ratingTypes.CREDIT_REVIEW]: shopProductsCategories.creditAnalysis,\n [ratingTypes.ESG_IMPACT]: shopProductsCategories.esgAnalysis,\n [ratingTypes.SENTIMENT]: shopProductsCategories.esgAnalysis,\n }[module],\n productLine: {\n [ratingTypes.CREDIT_RATING]: ShopProductLines.Rating,\n [ratingTypes.CREDIT_REVIEW]: ShopProductLines.Rating,\n [ratingTypes.ESG_IMPACT]:\n entity.meta.esgCustomScore || entity.meta.esgCustomScore === null\n ? ShopProductLines.Tools\n : ShopProductLines.Review,\n [ratingTypes.SENTIMENT]:\n entity.meta.esgCustomScore || entity.meta.esgCustomScore === null\n ? ShopProductLines.Tools\n : ShopProductLines.Review,\n }[module],\n countriesAndIndustries: [\n {\n country: entity.countryCode,\n industries: [entity.industry],\n },\n ],\n };\n\n const toggle = () => setOpen((prev) => !prev);\n\n return (\n <>\n <IconButton color=\"inherit\" onClick={customHandler || toggle} size=\"large\">\n <LockIcon />\n </IconButton>\n {open && (\n <ShopRelatedProductsModal\n data={data}\n open={open}\n onClose={toggle}\n onConfirm={toggle}\n module={module}\n />\n )}\n </>\n );\n};\n","import { Box, Chip } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { RequestButton, RequestEsgButton } from 'modules/common';\nimport React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { creditReviewInitialSubscription } from 'shared/constants/creditReview/creditReviewInitialSubscription';\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { useCofaceContract } from 'shared/hooks/useCofaceContract/useCofaceContract';\nimport { theme } from 'theme';\nimport { getShopProducts } from 'modules/shop/selectors/shopSelectors';\nimport { InfoTooltip } from 'ui';\nimport { entityPortfolioModuleData } from 'shared/functions/entityPortfolioModuleData';\nimport { EntityScoreProps, EsgStore, AuthData, AuthStore } from '../../types';\nimport { ScoreLock } from './ScoreLock';\n\nconst useStyles = makeStyles({\n chipCustomScore: {\n color: theme.palette.custom.white,\n backgroundColor: theme.palette.custom.darkGrayAlt,\n },\n tooltip: {\n marginLeft: 3,\n },\n});\n\nexport const EntityScore: FC<EntityScoreProps> = ({\n entity,\n module,\n subscore,\n onRequestEsg,\n onRequestSentiment,\n onRequestCreditReview,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n const { cofaceAccessType } = useCofaceContract();\n const esgRequestPermitted = useSelector<EsgStore, boolean>(\n ({ esgContract: { esgRequestPermission } }) => esgRequestPermission,\n );\n\n const { data: subscriptionsData } = useSelector(getShopProducts);\n\n const creditReviewSubscription = creditReviewInitialSubscription(subscriptionsData);\n\n const navigateToCreditReviewSubscription = () => {\n window.location.href = `/ca/subscriptions?productId=${\n creditReviewSubscription ? creditReviewSubscription.id : undefined\n }`;\n };\n\n const sigProduct = useSelector<AuthStore, AuthData>(({ auth }) => auth.data);\n\n const { score, canRequest, canUnlock, requested, product, orderType } = entityPortfolioModuleData(\n entity,\n sigProduct,\n cofaceAccessType,\n esgRequestPermitted,\n subscore,\n )[module];\n\n const {\n meta: { esgCustomScore },\n } = entity;\n\n /* SCORE - Score is available to show */\n if (score) {\n const displayCustomScore = esgCustomScore && module === ratingTypes.ESG_IMPACT;\n\n return (\n <Box display=\"flex\" alignItems=\"center\">\n {module === 'climate-stress-test' ? (\n `${score}%`\n ) : (\n <Chip\n label={score}\n variant={displayCustomScore ? 'filled' : 'outlined'}\n className={displayCustomScore ? classes.chipCustomScore : undefined}\n color=\"primary\"\n />\n )}\n {displayCustomScore && (\n <InfoTooltip title={t('ESG.CUSTOM_SCORE_TOOLTIP')} iconClassName={classes.tooltip} />\n )}\n </Box>\n );\n }\n\n /* EMPTY - There is no main score, so subscores will not be included in any action */\n if (subscore) {\n return <></>;\n }\n\n /* REQUEST - There is no score, but user has the appropriate subscriptions to request it, or the score was already requested */\n if (canRequest || requested) {\n let requestButton: React.ReactElement | null = null;\n\n if (module === ratingTypes.ESG_IMPACT) {\n requestButton = (\n <RequestEsgButton onRequestClick={onRequestEsg} alreadyRequested={requested} />\n );\n } else if (module === ratingTypes.SENTIMENT) {\n requestButton = (\n <RequestEsgButton alreadyRequested={requested} onRequestClick={onRequestSentiment} />\n );\n } else if (product && orderType) {\n requestButton = (\n <RequestButton\n id={entity.artifactId}\n product={product}\n orderType={orderType}\n alreadyRequested={requested}\n ratingType={module}\n confirmationModalOpen={orderType === orderTypes.SIG_ENTITY ? onRequestCreditReview : null}\n />\n );\n }\n\n return requestButton;\n }\n\n /* UNLOCK - User does not have any subscription to request for score */\n if (canUnlock && module !== ratingTypes.ESG_IMPACT) {\n return (\n <ScoreLock\n entity={entity}\n module={module}\n customHandler={\n module === ratingTypes.CREDIT_REVIEW ? navigateToCreditReviewSubscription : undefined\n }\n />\n );\n }\n\n /* N/A - Score is not available to request for this entity */\n return <>N/A</>;\n};\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Box, Button, Popover } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport { GroupedSelect, RangeSliderExtended, SelectWithSearch } from 'ui';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport cloneDeep from 'lodash/cloneDeep';\nimport { CountryParsed, EntityInitialFiltersData, FiltersData, RangeFilter } from '../../types';\n\nimport {\n minMaxValueInitialValues,\n rangeSliderValuesGenerator,\n updateFilters,\n valueParser,\n} from '../../utils';\n\ntype DatatableEntityFiltersProps = {\n filterFieldsInitialData: EntityInitialFiltersData;\n prevFiltersValues: FiltersData;\n handleSubmit: (value: FiltersData) => void;\n ratingTypePage: ratingTypes | undefined;\n};\n\nexport const DatatableEntityFilters: FC<DatatableEntityFiltersProps> = ({\n filterFieldsInitialData,\n handleSubmit,\n ratingTypePage,\n prevFiltersValues,\n}) => {\n const { t } = useTranslation();\n\n const [anchorEl, setAnchorEl] = React.useState<HTMLButtonElement | null>(null);\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) =>\n setAnchorEl(event.currentTarget);\n const handleClose = () => setAnchorEl(null);\n const open = Boolean(anchorEl);\n const id = open ? 'datatable-filters-popover' : undefined;\n const [isFiltered, setIsFiltered] = useState(false);\n\n const [dataToSubmit, setDataToSubmit] = useState<FiltersData>({});\n\n const {\n countryCode,\n creditRating,\n creditRatingShortTermRating,\n creditReview,\n esgEnvironment,\n esgGovernance,\n esgSocial,\n esgTotal,\n industry,\n sigCountryRiskAssessment,\n sigPOD,\n storefrontRatingOutlook,\n storefrontRatingType,\n } = filterFieldsInitialData;\n const countriesParsed = useMemo(() => {\n const countriesList: CountryParsed[] = [];\n if (countryCode.data) {\n countryCode.data.forEach((region: any) => {\n const { continentCode, continent, countries } = region;\n countries.forEach((countryInRegion: any) => {\n const { name, iso } = countryInRegion;\n countriesList.push({\n continentCode,\n continent,\n name,\n iso,\n });\n });\n });\n }\n return countriesList;\n }, [countryCode]);\n\n const industriesParsed = useMemo(() => {\n const industriesList: any = [];\n if (industry.data) {\n industry.data.forEach((industryObj: any) => {\n const { sectors } = industryObj;\n sectors.forEach((sector: { code: string; name: 'string' }) =>\n industriesList.push({\n name: sector.name,\n value: sector.name,\n }),\n );\n });\n }\n return industriesList;\n }, [industry]);\n\n const ratingParsed = valueParser(creditRating.length ? creditRating : []);\n const storefrontRatingOutlookParsed = valueParser(storefrontRatingOutlook);\n const shortTermRatingsParsed = valueParser(creditRatingShortTermRating);\n const sigCountryRiskAssessmentParsed = valueParser(sigCountryRiskAssessment);\n const creditReviewParsed = useMemo(\n () => rangeSliderValuesGenerator(creditReview, 1),\n [creditReview],\n );\n const sigPODParsed = useMemo(() => rangeSliderValuesGenerator(sigPOD), [sigPOD]);\n const esgEnvironmentParsed = useMemo(\n () => rangeSliderValuesGenerator(esgEnvironment),\n [esgEnvironment],\n );\n const esgSocialParsed = useMemo(() => rangeSliderValuesGenerator(esgSocial), [esgSocial]);\n const esgGovernanceParsed = useMemo(\n () => rangeSliderValuesGenerator(esgGovernance),\n [esgGovernance],\n );\n const esgTotalParsed = useMemo(() => rangeSliderValuesGenerator(esgTotal), [esgTotal]);\n\n const values = {\n countries: countriesParsed,\n industries: industriesParsed,\n storefrontRatingType: storefrontRatingType.map((element) => {\n return {\n label: t(`PORTFOLIO.${element}`),\n value: element,\n };\n }),\n rating: minMaxValueInitialValues(ratingParsed),\n storefrontRatingOutlookParsed,\n shortTermRatings: minMaxValueInitialValues(shortTermRatingsParsed),\n sigCountryRiskAssessment: minMaxValueInitialValues(sigCountryRiskAssessmentParsed),\n creditReview: minMaxValueInitialValues(creditReviewParsed),\n pod: minMaxValueInitialValues(sigPODParsed),\n environmental: minMaxValueInitialValues(esgEnvironmentParsed),\n social: [esgSocial?.minimum, esgSocial?.maximum],\n governance: minMaxValueInitialValues(esgGovernanceParsed),\n total: minMaxValueInitialValues(esgTotalParsed),\n };\n\n const handleCountryChange = (value: any) => {\n setDataToSubmit({\n ...dataToSubmit,\n countryCode: value,\n });\n };\n\n const handleSelectChange = (name: keyof FiltersData) => (value: any) =>\n setDataToSubmit(updateFilters(dataToSubmit, name, value));\n\n const handleRangeSliderChange = (name: string) => (newValues: RangeFilter) => {\n setDataToSubmit({\n ...dataToSubmit,\n [name]: newValues,\n });\n };\n\n const generatePreviousValues = () => {\n const previousFilterValues = cloneDeep(prevFiltersValues);\n if (previousFilterValues.countryCode) {\n const countriesConverted = previousFilterValues.countryCode.map((countryIso: string) =>\n countriesParsed.find((element: any) => element.iso === countryIso),\n );\n previousFilterValues.countryCode = countriesConverted as unknown as string[];\n }\n if (previousFilterValues.industry) {\n const industriesConverted = previousFilterValues.industry.map((item: string) =>\n industriesParsed.find((searchedIndustry: any) => searchedIndustry.value === item),\n );\n previousFilterValues.industry = industriesConverted as unknown as string[];\n }\n return prevFiltersValues ? previousFilterValues : {};\n };\n\n const checkFiltersAvailability = () => {\n if (ratingTypePage === ratingTypes.ESG_IMPACT) {\n return (\n !!esgEnvironmentParsed.length ||\n !!esgSocialParsed.length ||\n !!esgGovernanceParsed.length ||\n !!esgTotalParsed.length\n );\n }\n\n if (ratingTypePage === ratingTypes.CREDIT_REVIEW) {\n return (\n !!creditReviewParsed.length || !!sigCountryRiskAssessment.length || !!sigPODParsed.length\n );\n }\n\n if (ratingTypePage === ratingTypes.CREDIT_RATING) {\n return (\n !!values.countries.length ||\n !!values.industries.length ||\n !!values.storefrontRatingType.length ||\n !!ratingParsed.length ||\n !!storefrontRatingOutlookParsed.length ||\n !!shortTermRatingsParsed.length\n );\n }\n\n if (ratingTypePage === ratingTypes.SENTIMENT) {\n return null;\n }\n\n if (ratingTypePage === ratingTypes.CLIMATE_STRESS_TEST) {\n return null;\n }\n\n return !!values.countries.length || !!values.industries.length;\n };\n\n useEffect(() => {\n if (!open) {\n setIsFiltered(!!Object.keys(prevFiltersValues).length);\n setDataToSubmit(generatePreviousValues());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, prevFiltersValues]);\n\n return (\n <>\n {checkFiltersAvailability() && (\n <Button\n size=\"small\"\n variant={isFiltered ? 'contained' : 'outlined'}\n color={isFiltered ? 'primary' : undefined}\n onClick={handleClick}\n >\n {isFiltered ? t('Change filters') : t('Apply filters')}\n </Button>\n )}\n <Popover\n id={id}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n >\n <Box p={2} width=\"500px\">\n {ratingTypePage !== ratingTypes.CREDIT_REVIEW &&\n ratingTypePage !== ratingTypes.ESG_IMPACT && (\n <>\n {/* COUNTRIES */}\n {!!values.countries.length && (\n <Box pb={2}>\n <GroupedSelect\n multiple\n options={values.countries}\n value={dataToSubmit.countryCode ?? []}\n label={t('PORTFOLIO.COUNTRY')}\n onChange={handleCountryChange}\n getOptionLabel={(option: any) => option.name}\n groupBy={(option: any) => option.continent}\n />\n </Box>\n )}\n {/* INDUSTRIES */}\n {!!values.industries.length && (\n <GroupedSelect\n multiple\n options={values.industries}\n value={dataToSubmit.industry ?? []}\n label={t('PORTFOLIO.INDUSTRIES')}\n onChange={handleSelectChange('industry')}\n getOptionLabel={(option: any) => option.name}\n groupBy={(option: any) => option.continent}\n />\n )}\n </>\n )}\n {ratingTypePage === ratingTypes.CREDIT_RATING && (\n <>\n {/* ENTITY RATING */}\n {!!values.storefrontRatingType.length && (\n <Box pt={2}>\n <SelectWithSearch\n label={t('PORTFOLIO.RATING_TYPE_ONELINE')}\n options={values.storefrontRatingType}\n value={dataToSubmit.storefrontRatingType ?? null}\n onChange={handleSelectChange('storefrontRatingType')}\n />\n </Box>\n )}\n {!!ratingParsed.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.ENTITY_RATING')}\n options={ratingParsed}\n values={dataToSubmit.creditRating ?? values?.rating}\n onChange={handleRangeSliderChange('creditRating')}\n />\n )}\n {/* OUTLOOK */}\n {!!storefrontRatingOutlookParsed.length && (\n <Box pt={2}>\n <SelectWithSearch\n label={t('PORTFOLIO.OUTLOOK')}\n options={storefrontRatingOutlookParsed}\n value={dataToSubmit.storefrontRatingOutlook ?? null}\n onChange={handleSelectChange('storefrontRatingOutlook')}\n />\n </Box>\n )}\n {/* SHORT TERM RATINGS */}\n {!!shortTermRatingsParsed.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.SHORT_TERM_RATINGS')}\n options={shortTermRatingsParsed}\n values={dataToSubmit.creditRatingShortTermRating ?? values?.shortTermRatings}\n onChange={handleRangeSliderChange('creditRatingShortTermRating')}\n />\n )}\n </>\n )}\n {ratingTypePage === ratingTypes.CREDIT_REVIEW && (\n <>\n {/* CREDIT ASSESMENT */}\n {!!creditReviewParsed.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.CREDIT_ASSESMENT')}\n options={creditReviewParsed}\n values={dataToSubmit.creditReview ?? values?.creditReview}\n onChange={handleRangeSliderChange('creditReview')}\n />\n )}\n {/* COUNTRY RISK */}\n {!!sigCountryRiskAssessment.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.COUNTRY_RISK')}\n options={sigCountryRiskAssessmentParsed}\n values={dataToSubmit.sigCountryRiskAssessment ?? values?.sigCountryRiskAssessment}\n onChange={handleRangeSliderChange('sigCountryRiskAssessment')}\n />\n )}\n {/* POD */}\n {!!sigPODParsed.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.PROBABILITY_OF_DEFAULT_ONELINE')}\n options={sigPODParsed}\n values={dataToSubmit.sigPOD ?? values?.pod}\n onChange={handleRangeSliderChange('sigPOD')}\n />\n )}\n </>\n )}\n {ratingTypePage === ratingTypes.ESG_IMPACT ||\n (ratingTypePage === ratingTypes.SENTIMENT && (\n <>\n {/* ENVIRONMENTAL */}\n {!!esgEnvironmentParsed.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.ENVIRONMENTAL')}\n options={esgEnvironmentParsed}\n values={dataToSubmit.esgEnvironment ?? values?.environmental}\n onChange={handleRangeSliderChange('esgEnvironment')}\n />\n )}\n {/* SOCIAL */}\n {!!esgSocialParsed.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.SOCIAL')}\n options={esgSocialParsed}\n values={dataToSubmit.esgSocial ?? values?.environmental}\n onChange={handleRangeSliderChange('esgSocial')}\n />\n )}\n {/* GOVERNANCE */}\n {!!esgGovernanceParsed.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.GOVERNANCE')}\n options={esgGovernanceParsed}\n values={dataToSubmit.esgGovernance ?? values?.governance}\n onChange={handleRangeSliderChange('esgGovernance')}\n />\n )}\n {/* TOTAL */}\n {!!esgTotalParsed.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.TOTAL')}\n options={esgTotalParsed}\n values={dataToSubmit.esgTotal ?? values?.total}\n onChange={handleRangeSliderChange('esgTotal')}\n />\n )}\n </>\n ))}\n <Box mt={2} display=\"flex\" justifyContent=\"space-between\">\n <Button type=\"submit\" onClick={() => setDataToSubmit({})}>\n {t('RESET')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n handleSubmit(dataToSubmit);\n handleClose();\n }}\n >\n {t('APPLY_FILTERS')}\n </Button>\n </Box>\n </Box>\n </Popover>\n </>\n );\n};\n","import { catchFetchApiError, fetchApi, getFetchApiJSONResponse } from 'shared/functions';\nimport { CollectionType } from '../../types';\n\nexport const fetchInitialFiltersData = (portfolioId: string, collection: CollectionType) =>\n fetchApi(`/user-profile/portfolios/filter-fields/${portfolioId}/${collection}`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n","import React, { FC, useRef } from 'react';\nimport { Box, Button, Chip, Tooltip } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport { getName } from 'country-list';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { FiltersData, RangeFilter } from '../../types';\n\ntype DatatableChipFiltersProps = {\n filtersData: FiltersData;\n handleDelete: (propertyName: keyof FiltersData) => void;\n handleClearAll: () => void;\n handleCustomChipDelete?: (propertyName: keyof FiltersData, value: string) => void;\n};\n\ntype FilterItemProp = any;\n\n// FIXME\n// type FilterItemProp = [ string, string | string[] | RangeFilter ]\n\nexport const DatatableChipFilters: FC<DatatableChipFiltersProps> = ({\n filtersData,\n handleDelete,\n handleCustomChipDelete,\n handleClearAll,\n}) => {\n const { t } = useTranslation();\n const chipsCounter = useRef(0);\n const maxCustomChipsCountToDisplay = 6;\n const clearAllButtonChipsMinimalValue = 1;\n const filtersDataArray = filtersData ? Object.entries(filtersData) : [];\n\n const generateChipName = (item: FilterItemProp) => {\n chipsCounter.current += 1;\n const [name, value] = item;\n\n const rangeSliderValues = (nameTranslated: string, data: RangeFilter, unit: string = '') => {\n const { fromRange, toRange, emptyValues } = data;\n const isFromRangePresent = fromRange !== null && fromRange !== undefined;\n const range = isFromRangePresent ? ` ${fromRange}${unit} - ${toRange}${unit}` : '';\n const and = isFromRangePresent && emptyValues ? ' and' : '';\n const noValueMsg = emptyValues ? ` Without Values` : '';\n return `${nameTranslated}:${range}${and}${noValueMsg}`;\n };\n\n if (name === 'maturityDate') {\n const { fromRange } = value as RangeFilter;\n const fromRangeDisplay = fromRange ? ` from ${(fromRange as string).slice(0, 10)}` : ': past';\n return `${t('PORTFOLIO.MATURITY_DATE')}${fromRangeDisplay}`;\n }\n if (name === 'storefrontRatingType' || name === 'ratingType') {\n const storefrontRatingType = t(`PORTFOLIO.${value}`);\n return `${t('PORTFOLIO.RATING_TYPE_ONELINE')}: ${storefrontRatingType}`;\n }\n if (name === 'rating') {\n return rangeSliderValues(t('PORTFOLIO.RATING'), value);\n }\n if (name === 'creditRating') {\n return rangeSliderValues(t('PORTFOLIO.CREDIT_RATING'), value);\n }\n if (name === 'couponPercent') {\n const fromRange = (value as RangeFilter)?.fromRange as number;\n const toRange = (value as RangeFilter)?.toRange as number;\n const emptyValues = value.emptyValues as boolean;\n return rangeSliderValues(\n t('PORTFOLIO.COUPON_RANGE'),\n { fromRange, toRange, emptyValues },\n '%',\n );\n }\n if (name === 'volume') {\n const fromRange = (value as RangeFilter).fromRange?.toLocaleString('en', {\n useGrouping: true,\n });\n const toRange = (value as RangeFilter).toRange?.toLocaleString('en', { useGrouping: true });\n const emptyValues = value.emptyValues as boolean;\n return rangeSliderValues(t('PORTFOLIO.INVESTMENT_VOLUME'), {\n fromRange,\n toRange,\n emptyValues,\n });\n }\n if (name === 'currencyCode') {\n return `${t('PORTFOLIO.CURRENCY')}: ${value}`;\n }\n if (name === 'creditReview') {\n return rangeSliderValues(t('PORTFOLIO.CREDIT_SCORE'), value);\n }\n if (name === 'sigPOD') {\n return rangeSliderValues(t('PORTFOLIO.POD'), value);\n }\n if (name === 'esgEnvironment') {\n return rangeSliderValues(t('PORTFOLIO.ENVIRONMENTAL'), value);\n }\n if (name === 'esgSocial') {\n return rangeSliderValues(t('PORTFOLIO.SOCIAL'), value);\n }\n if (name === 'esgGovernance') {\n return rangeSliderValues(t('PORTFOLIO.GOVERNANCE'), value);\n }\n if (name === 'esgTotal') {\n return rangeSliderValues(t('PORTFOLIO.TOTAL'), value);\n }\n if (name === 'storefrontRatingOutlook') {\n return `${t('PORTFOLIO.OUTLOOK')}`;\n }\n if (name === 'creditRatingShortTermRating') {\n return rangeSliderValues(t('PORTFOLIO.SHORT_TERM_RATINGS'), value);\n }\n if (name === 'sigCountryRiskAssessment') {\n return rangeSliderValues(t('PORTFOLIO.COUNTRY_RISK'), value);\n }\n\n if (name === 'peergroup') {\n return `${t('PORTFOLIO.FUND_PEERGROUP')}: ${value}`;\n }\n if (name === 'rank') {\n return rangeSliderValues(t('PORTFOLIO.FUND_RANK'), value);\n }\n if (name === 'ratingPoints') {\n return rangeSliderValues(t('PORTFOLIO.FUND_RATING_POINTS'), value);\n }\n if (name === 'returnValue') {\n return rangeSliderValues(t('PORTFOLIO.FUND_RETURN_VALUE'), value);\n }\n if (name === 'risk') {\n return rangeSliderValues(t('PORTFOLIO.FUND_RISK'), value);\n }\n return name;\n };\n\n const generateCustomChip = (items: FilterItemProp) => {\n const [name, values] = items;\n const tooltipText =\n name === 'countryCode'\n ? values.map((item: string) => getName(item)).join(', ')\n : values.join(', ');\n let chipText: string;\n let render: any;\n let customChipsCounter: number;\n\n switch (name) {\n case 'countryCode':\n chipText = `Countries: ${values.length}`;\n break;\n case 'industry':\n chipText = `Industries: ${values.length}`;\n break;\n default:\n chipText = `${values.length}`;\n }\n\n if (values.length < maxCustomChipsCountToDisplay) {\n customChipsCounter = values.length;\n render = values.map((value: string) => (\n <Box p={1} key={value}>\n <Chip\n label={name === 'countryCode' ? getName(value) : value}\n onDelete={() =>\n handleCustomChipDelete && handleCustomChipDelete(name as keyof FiltersData, value)\n }\n />\n </Box>\n ));\n } else {\n customChipsCounter = 1;\n render = (\n <Tooltip title={tooltipText}>\n <Box p={1}>\n <Chip label={chipText} onDelete={() => handleDelete(name as keyof FiltersData)} />\n </Box>\n </Tooltip>\n );\n }\n chipsCounter.current += customChipsCounter;\n return values.length ? render : <></>;\n };\n\n return (\n <Box display=\"flex\" alignItems=\"center\" flexWrap=\"wrap\">\n {filtersDataArray.map(([name, value]) => {\n return name === 'countryCode' || name === 'industry' ? (\n generateCustomChip([name, value])\n ) : (\n <Box p={1} key={name}>\n <Chip\n label={generateChipName([name, value])}\n onDelete={() => {\n chipsCounter.current -= 1;\n handleDelete(name as keyof FiltersData);\n }}\n />\n </Box>\n );\n })}\n {chipsCounter.current > clearAllButtonChipsMinimalValue ? (\n <Box p={1}>\n <Button\n onClick={() => {\n chipsCounter.current = 0;\n handleClearAll();\n }}\n >\n <Box display=\"flex\">\n Clear all\n <CloseIcon />\n </Box>\n </Button>\n </Box>\n ) : (\n <></>\n )}\n </Box>\n );\n};\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { isNil } from 'lodash';\nimport qs from 'qs';\nimport { Box, MenuItem, Select, Tooltip, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { theme } from 'theme';\nimport { ActionsButton, Datatable, Loader, ScoreChangeIndicator } from 'ui';\nimport { ChipButton, LinkButton } from 'ui/Buttons';\nimport { titleByRatingType } from 'shared/constants/titleByRatingType';\nimport { usePortfolioModals, useQuery, useSelectedTableRows, useTable } from 'shared/hooks';\nimport { SelectedEntities } from 'shared/types/portfolios';\nimport { activityMappingPortfolioItems } from 'shared/mappings/activityLabels';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { useDispatch, useSelector } from 'react-redux';\nimport LockIcon from '@mui/icons-material/Lock';\nimport InfoIcon from '@mui/icons-material/InfoOutlined';\nimport { exportEntities } from 'services/export/exportService';\nimport { ESGScoringToolModal } from 'modules/ESG';\nimport { lastVisitedRatingTypeAction } from 'store/shared/lastVisited/lastVisitedActions';\nimport { MUIDataTableMeta } from 'mui-datatables';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { useFeatures } from 'shared/hooks/useFeatures/useFeatures';\nimport { getCofaceRequestsAllowed } from 'selectors/creditReviewSelectors';\nimport { useCofaceContract } from 'shared/hooks/useCofaceContract/useCofaceContract';\nimport { parseRatingType, selectedItemsToProductsParser } from 'shared/parsers';\nimport { entityPortfolioModuleData } from 'shared/functions/entityPortfolioModuleData';\nimport { creditReviewRequestTooltips } from 'shared/constants/creditReview/creditReviewRequestTooltips';\nimport { RequestConfirmationModal as CreditReviewRequestConfirmationModal } from 'modules/creditReview/CreditReviewModals';\nimport { requestSigEntityRatingAction } from 'store/entity/entityActions';\nimport { useConfirmedRequest } from 'shared/hooks/useConfirmedRequest/useConfirmedRequest';\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { purchaseTypes } from 'shared/constants/purchaseTypes';\nimport { postOrderMany } from 'services/orders/ordersService';\nimport { companyEntityModules } from 'shared/constants/company';\nimport { useGetSentifyRequests } from 'modules/ESGSentiment/services/esgSentiment';\nimport { requestSentimentScore } from 'services/esg/fetchSentimentSummary';\nimport { StyledSwitch } from '../../../../ui';\nimport {\n useDeleteEntities,\n useFetchPortfolioItems,\n useToggleSigMonitoring,\n} from '../../GraphQL/portfolios/hooks';\nimport { makePortfolioItemsTableData } from '../utils';\nimport { UpdateEntitiesModal } from '../../Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { CreateNewPortfolioModal, RequestEsgScoreModal } from '../../Modals';\nimport {\n AuthData,\n AuthStore,\n CollectionType,\n EntityEssential,\n EntityInitialFiltersData,\n EsgStore,\n FiltersData,\n PortfolioAction,\n PortfolioEntity,\n PortfolioItemsProps,\n PortfolioType,\n RequestTab,\n SigMonitor,\n SigProduct,\n SubScore,\n} from '../types';\nimport { ScoreLock } from './components/ScoreLock';\nimport { EntityScore } from './components/EntityScore';\nimport { DatatableEntityFilters } from './components/DatatableEntityFilters';\nimport { fetchInitialFiltersData } from './services/filtersService';\nimport { DatatableChipFilters } from './components/DatatableChipFilters';\n\nconst useStyles = makeStyles(() => ({\n root: {\n '& thead > tr': {\n whiteSpace: 'pre',\n },\n },\n nameButton: {\n minWidth: 'unset',\n },\n chipCustomScore: {\n color: theme.palette.custom.white,\n backgroundColor: theme.palette.custom.darkGrayAlt,\n },\n tooltip: {\n marginLeft: 3,\n },\n buttonLink: {\n cursor: 'pointer',\n },\n availableWrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n availableCounter: {\n fontWeight: 500,\n },\n requestsAvailableLockIcon: {\n fontSize: 20,\n },\n counterLoader: {\n margin: theme.spacing(1, 2, 1, 1),\n },\n cstSelect: {\n position: 'absolute',\n top: theme.spacing(2),\n right: theme.spacing(2),\n\n '& > .MuiSelect-select': {\n fontWeight: 500,\n paddingTop: theme.spacing(0.5),\n paddingBottom: theme.spacing(0.5),\n fontSize: theme.typography.body2.fontSize,\n lineHeight: 1,\n display: 'flex',\n alignItems: 'center',\n },\n },\n cstLabel: {\n gridGap: theme.spacing(1),\n },\n infoIcon: {\n width: theme.spacing(2.5),\n height: theme.spacing(2.5),\n color: theme.palette.primary.main,\n },\n}));\n\ntype PortfolioEntitiesParams = {\n ratingType?: ratingTypes;\n activeTab?: string;\n};\n\nexport const PortfolioEntities: FC<PortfolioItemsProps> = ({\n portfolioId,\n total = 0,\n refetchPortfolio = null,\n portfolioData,\n totalCounter,\n}) => {\n const lastVisitedRatingType = useSelector<any>(\n ({ shared }) => shared.lastVisited.ratingType,\n ) as ratingTypes;\n const navigate = useNavigate();\n const location = useLocation();\n const { t } = useTranslation();\n const { error, success } = useSnackbar();\n const dispatch = useDispatch();\n const classes = useStyles();\n const queryParams = useQuery() as PortfolioEntitiesParams;\n\n const [requestConfirmationModalOpen, setRequestConfirmationModalOpen] = useState(false);\n\n const toggleRequestConfirmationModal = () => {\n setRequestConfirmationModalOpen(!requestConfirmationModalOpen);\n };\n\n const {\n singleSelect,\n multiSelect,\n currentSelect,\n selectedAll,\n onSelectAll,\n onSelectedChange,\n selectSingle,\n clearSingle,\n } = useSelectedTableRows();\n\n const toggleSigMonitor = useToggleSigMonitoring();\n\n const [variant, setVariant] = useState<PortfolioAction>();\n const [updating, setUpdating] = useState(false);\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: '' });\n\n const { createPortfolio, addToPortfolio, requestEsgScore, createCompanies } =\n usePortfolioModals();\n\n const deleteEntities = useDeleteEntities();\n const [activeItem, setActiveItem] = useState<string>();\n const [requestSelectedESG, setRequestSelectedESG] = useState<EntityEssential[]>();\n const { cofaceAccessType, isPending: cofaceContractInfoPending } = useCofaceContract();\n const cofaceRequestsAllowed = useSelector(getCofaceRequestsAllowed);\n const requestButtonTooltipTitle = creditReviewRequestTooltips[cofaceAccessType];\n const sigProduct = useSelector<AuthStore, AuthData>(({ auth }) => auth.data);\n const esgRequestPermitted = useSelector<EsgStore, boolean>(\n ({ esgContract: { esgRequestPermission } }) => esgRequestPermission,\n );\n const maxRequestCount: number = 25;\n const [entitiesToRequestCount, setEntitiesToRequestCount] = useState<number>(1);\n const [cstScenario, setCstScenario] = useState('orderly');\n const { data: sentifyRequests, loading: loadingSentify } = useGetSentifyRequests();\n\n const { isDedicated, portfolioType } = portfolioData;\n\n const isRequestHistory = portfolioType === PortfolioType.REQUEST_HISTORY;\n const isRSRPortfolio = [\n PortfolioType.RSR_PORTFOLIO,\n PortfolioType.PRIVATE_RATING_PORTFOLIO,\n PortfolioType.ON_DEMAND_RATING_PORTFOLIO,\n ].includes(portfolioType);\n\n const { ratingType = isRequestHistory ? ratingTypes.CREDIT_RATING : undefined, activeTab } =\n queryParams;\n\n const features = useFeatures();\n const [filtersData, setFiltersData] = useState<FiltersData>({});\n const [filterFieldsInitialData, setFilterFieldsInitialData] =\n useState<EntityInitialFiltersData>();\n\n const requestedTab = (): RequestTab => {\n if (isRequestHistory) {\n if (ratingType === ratingTypes.ESG_IMPACT) {\n return 'ESG';\n }\n if (features.creditReview && ratingType === ratingTypes.CREDIT_REVIEW) {\n return 'CREDIT_REVIEW';\n }\n if (ratingType === ratingTypes.SENTIMENT) {\n return 'ESG_SENTIMENT';\n }\n }\n return 'OVERVIEW';\n };\n\n // eslint-disable-next-line consistent-return\n const handleRequestRating = () => {\n const entitiesAvailableToRequest = generateEntitiesAvailableToRequest();\n if (!entitiesAvailableToRequest.length) {\n return error(t('PORTFOLIO.UNABLE_TO_REQUEST_SELECTED'));\n }\n // eslint-disable-next-line default-case\n switch (ratingType) {\n case ratingTypes.CREDIT_RATING:\n {\n setUpdating(true);\n const filteredRatingRequest = entitiesAvailableToRequest.map((entity) => ({\n id: entity.artifactId,\n level: 'L4',\n }));\n const products = selectedItemsToProductsParser({\n selected: filteredRatingRequest,\n artifactType: orderTypes.ENTITY,\n frequency: 0,\n purchaseType: purchaseTypes.ONE_TIME,\n });\n\n postOrderMany({ products }).finally(() => {\n refreshList(true, refreshReasons.PRODUCT_REQUESTED);\n setUpdating(false);\n });\n }\n break;\n case ratingTypes.CREDIT_REVIEW:\n {\n const ids: any = entitiesAvailableToRequest.map((entity) => entity.artifactId);\n const sampleProduct: SigProduct = entitiesAvailableToRequest[0].product! as SigProduct;\n const { organisationId, userId } = sampleProduct;\n dispatch(requestSigEntityRatingAction({ ids, organisationId, userId }));\n setEntitiesToRequestCount(1);\n refreshList(true, '');\n }\n break;\n case ratingTypes.ESG_IMPACT:\n setRequestSelectedESG(entitiesAvailableToRequest);\n requestEsgScore.show();\n break;\n }\n };\n\n const { scheduleRequest } = useConfirmedRequest({\n handleRequest: handleRequestRating,\n confirmationModalOpen: toggleRequestConfirmationModal,\n });\n\n const generateEntitiesAvailableToRequest = () => {\n if (!ratingType) {\n return [];\n }\n const entities: EntityEssential[] = [];\n\n const selectedEntities: PortfolioEntity[] = Object.values(currentSelect.itemIds).map(\n (itemId) => {\n return portfolioItems.find((entity: PortfolioEntity) => entity.id === itemId)!;\n },\n );\n\n selectedEntities.forEach((entity: PortfolioEntity) => {\n const { canRequest, requested, product, orderType } = entityPortfolioModuleData(\n entity,\n sigProduct,\n cofaceAccessType,\n esgRequestPermitted,\n )[ratingType];\n\n const entityEssential: EntityEssential = {\n artifactId: entity.artifactId,\n product,\n orderType,\n };\n if (canRequest && !requested) entities.push(entityEssential);\n });\n setEntitiesToRequestCount(entities.length);\n return entities;\n };\n\n useEffect(() => {\n if (ratingType === ratingTypes.CREDIT_REVIEW && !features.creditReview) {\n onCompanyModuleChange(ratingTypes.CREDIT_RATING);\n return;\n }\n\n if (ratingType && ratingType !== lastVisitedRatingType) {\n dispatch(lastVisitedRatingTypeAction({ ratingType }));\n }\n }, [ratingType]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n refreshList(true, refreshReasons.UPDATED);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (\n !!portfolioType &&\n [PortfolioType.REFERENCE_PORTFOLIO_EUROPE, PortfolioType.REFERENCE_PORTFOLIO_GLOBAL].includes(\n portfolioType,\n ) &&\n activeTab === 'entities'\n ) {\n onCompanyModuleChange(ratingTypes.CREDIT_RATING);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeTab]);\n\n /* ******************************************************************** */\n /* Event handlers */\n /* ******************************************************************** */\n\n const toggleSig = (artifactId: string) => {\n setUpdating(true);\n toggleSigMonitor({ portfolioId, artifactId })\n .then(({ data }) => {\n const message = (data as unknown as SigMonitor).toggleSigMonitoring.message || t('Success');\n refreshList(true, refreshReasons.UPDATED);\n success(message);\n })\n .catch(() => {\n error(t('Unable to change renewal value.'));\n })\n .finally(() => setUpdating(false));\n };\n\n const deleteEntity = () => {\n setUpdating(true);\n deleteEntities({\n portfolioItemsIds: selectedAll ? [] : Object.values(currentSelect.itemIds),\n portfolioId,\n selectedAll,\n })\n .then(({ data }) => {\n const message =\n (data as unknown as { deletePortfolioItems: any }).deletePortfolioItems?.message ||\n t('Success');\n refreshList(true, refreshReasons.DELETED);\n success(message);\n })\n .catch(() => {\n error(t('Unable to delete entities.'));\n })\n .finally(() => setUpdating(false));\n };\n\n const copyEntity = () => {\n setVariant(selectedAll ? 'copy_all' : 'copy');\n addToPortfolio.toggle();\n };\n\n const moveEntity = () => {\n setVariant(selectedAll ? 'move_all' : 'move');\n addToPortfolio.toggle();\n };\n\n const handleRequestSelected = () => {\n if (portfolioItems.length) {\n if (ratingType === ratingTypes.CREDIT_REVIEW) {\n scheduleRequest();\n } else {\n handleRequestRating();\n }\n }\n };\n\n const exportToExcel = () => {\n const items = Object.values(currentSelect.itemIds);\n\n // eslint-disable-next-line no-shadow\n const onError = (err: string) => error(err);\n const onSuccess = (message: string) => success(t('TOOLBAR.EXPORT_STARTED'));\n\n exportEntities({\n items: selectedAll ? [] : items,\n onError,\n onSuccess,\n portfolioId,\n selectedAll,\n ratingType,\n });\n clearSingle();\n };\n\n const exportFullDataToExcel = () => {\n const items = Object.values(currentSelect.itemIds);\n\n // eslint-disable-next-line no-shadow\n const onError = (err: string) => error(err);\n const onSuccess = (message: string) => success(t('TOOLBAR.EXPORT_STARTED'));\n\n exportEntities({\n items: selectedAll ? [] : items,\n onError,\n onSuccess,\n portfolioId,\n selectedAll,\n ratingType,\n exportMode: 'extended',\n });\n clearSingle();\n };\n\n const onCompanyModuleChange = (value?: ratingTypes) => {\n if (ratingType !== value) {\n navigate({\n pathname: location.pathname,\n search: qs.stringify({ ...queryParams, ratingType: value }, { addQueryPrefix: true }),\n });\n }\n };\n\n const prepareRequestIds = () => {\n if (!activeItem && requestSelectedESG) {\n return requestSelectedESG.map((esg) => esg.artifactId);\n }\n if (activeItem) {\n return [activeItem];\n }\n return Object.values(currentSelect.items).map((item) => (item as Array<any>)[0][1]);\n };\n\n /* ******************************************************************** */\n /* Datatable filters */\n /* ******************************************************************** */\n\n useEffect(() => {\n if (features.popoverFiltersPortfolioManager) {\n fetchInitialFiltersData(portfolioId, CollectionType.PORTFOLIO_ITEMS).then((response) =>\n setFilterFieldsInitialData(response),\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleFiltersSubmit = (data: FiltersData) => {\n const dataToSet: FiltersData = data;\n if (dataToSet.countryCode) {\n const countryCodeArray = dataToSet.countryCode.map((country: any) => country.iso);\n dataToSet.countryCode = countryCodeArray;\n }\n if (dataToSet.industry) {\n const industryConverted = dataToSet.industry.map((industry: any) => industry.value);\n dataToSet.industry = industryConverted;\n }\n setFiltersData(dataToSet);\n };\n\n const handleDeleteFilter = (propertyName: keyof FiltersData) => {\n // eslint-disable-next-line camelcase\n if (filtersData) {\n // eslint-disable-next-line camelcase\n const { [propertyName]: _removedProperty, ...filtersEdited } = filtersData!;\n setFiltersData(filtersEdited);\n }\n };\n\n const handleClearAllFilters = () => setFiltersData({});\n\n const handleCustomChipDelete = (propertyName: keyof FiltersData, value: string) => {\n if (filtersData && filtersData[propertyName]) {\n const valuesEdited = (filtersData[propertyName] as string[]).filter(\n (elementName) => elementName !== value,\n );\n setFiltersData((prevState) => ({\n ...prevState,\n [propertyName]: valuesEdited,\n }));\n }\n };\n\n const entitiesFilters = filterFieldsInitialData && (\n <DatatableEntityFilters\n filterFieldsInitialData={filterFieldsInitialData}\n prevFiltersValues={filtersData}\n handleSubmit={handleFiltersSubmit}\n ratingTypePage={ratingType}\n />\n );\n\n const filterChips = filtersData && (\n <DatatableChipFilters\n filtersData={filtersData}\n handleDelete={handleDeleteFilter}\n handleClearAll={handleClearAllFilters}\n handleCustomChipDelete={handleCustomChipDelete}\n />\n );\n\n const ratingTypesValues = Object.values(ratingTypes).filter((item) => {\n if (item === ratingTypes.FUNDS) return false;\n if (item === ratingTypes.CREDIT_REVIEW && !features.creditReview) return false;\n\n return true;\n });\n\n const requestHistoryRatingTabs = [\n features.creditReview && ratingTypes.CREDIT_REVIEW,\n ratingTypes.ESG_IMPACT,\n ratingTypes.SENTIMENT,\n ].filter(Boolean);\n\n /* ******************************************************************** */\n /* Custom body renders */\n /* ******************************************************************** */\n\n const tabsButtons = (\n <Box display=\"flex\" py={2} px={1} minHeight={32}>\n {(isRequestHistory\n ? requestHistoryRatingTabs\n : [\n undefined,\n ...ratingTypesValues.filter((item) => {\n if (item === ratingTypes.SENTIMENT) {\n return features.esgSentiment;\n }\n\n return true;\n }),\n ]\n ).map((ratingTypeValue) => {\n const isActive = ratingTypeValue === ratingType;\n return (\n <ChipButton\n key={ratingTypeValue ?? 'overview'}\n isActive={isActive}\n onClick={() => onCompanyModuleChange(ratingTypeValue)}\n style={{ whiteSpace: 'nowrap' }}\n >\n {!ratingTypeValue ? t('PORTFOLIO.OVERVIEW') : titleByRatingType[ratingTypeValue]}\n </ChipButton>\n );\n })}\n </Box>\n );\n\n const availableRequestsRender = cofaceContractInfoPending ? (\n <Loader classes={classes.counterLoader} size={20} />\n ) : (\n <div className={classes.availableWrapper}>\n <h4>{t('CREDIT_REVIEW.CREDIT_REVIEW_REQUESTS')}</h4>\n <Box\n display=\"flex\"\n margin={1}\n marginRight={2}\n paddingY={0.5}\n paddingX={1.75}\n borderRadius=\"15px\"\n bgcolor={theme.palette.custom.lightBlue}\n >\n {cofaceRequestsAllowed === 0 ? (\n <Tooltip title={requestButtonTooltipTitle} className={classes.requestsAvailableLockIcon}>\n <LockIcon />\n </Tooltip>\n ) : (\n <Typography color=\"primary\" variant=\"body2\" className={classes.availableCounter}>\n {cofaceRequestsAllowed}\n </Typography>\n )}\n </Box>\n </div>\n );\n\n const sentimentRequestsRender = loadingSentify ? (\n <Loader classes={classes.counterLoader} size={20} />\n ) : (\n <div className={classes.availableWrapper}>\n <h4>{t('ESG.SENTIMENT_REQUESTS')}</h4>\n <Box\n display=\"flex\"\n margin={1}\n marginRight={2}\n paddingY={0.5}\n paddingX={1.75}\n borderRadius=\"15px\"\n bgcolor={theme.palette.custom.lightBlue}\n >\n <Typography color=\"primary\" variant=\"body2\" className={classes.availableCounter}>\n {sentifyRequests?.requestLeft}\n </Typography>\n </Box>\n </div>\n );\n\n const nameRender = ([artifactId, name, module]: string[]) => {\n if (portfolioType === PortfolioType.SAMPLE_PORTFOLIO) return name;\n\n const moduleGroup = companyEntityModules.find((item) => item.value === module)?.module;\n const moduleParam = moduleGroup ? `&module=${moduleGroup}` : '';\n const companyModule = module === ratingTypes.CREDIT_REVIEW ? module : 'summary-card';\n const details = module === ratingTypes.CREDIT_REVIEW ? '/details' : '';\n\n return (\n <LinkButton\n to={`/entities/${artifactId}${details}?companyModule=${companyModule}${moduleParam}`}\n label={name?.toUpperCase()}\n />\n );\n };\n\n const activityRender =\n (module: ratingTypes) =>\n (\n value: (string | number)[] | null,\n { rowData: [[_id, _artifactId, entity]] }: MUIDataTableMeta,\n ) => {\n if (!value) {\n return '';\n }\n\n const [activity, oldScore, scoreDate] = value;\n\n if (activity === '' || activity === 'N/A') {\n return activity;\n }\n\n if (activity === 'lock') {\n return <ScoreLock entity={entity} module={module} />;\n }\n\n return (\n <ScoreChangeIndicator\n activity={activity as string}\n activityMapping={activityMappingPortfolioItems}\n scoreChangeDate={scoreDate as string}\n scoreOld={oldScore}\n showLabel\n />\n );\n };\n\n const ratingTypeRender = (ratingTypeInColumn: string | null) => {\n if (ratingTypeInColumn === 'N/A' || !ratingTypeInColumn) {\n return 'N/A';\n }\n return <Box>{parseRatingType(ratingTypeInColumn)}</Box>;\n };\n\n const actionRender = (_: unknown, { rowData: [[id, artifactId]] }: MUIDataTableMeta) => (\n <ActionsButton onOpen={() => selectSingle(id, artifactId)} actions={getActions(singleSelect)} />\n );\n\n const scoreRender = (module: ratingTypes, subscore?: SubScore) => (entity: PortfolioEntity) =>\n entity ? (\n <EntityScore\n entity={entity}\n module={module}\n subscore={subscore}\n onRequestEsg={() => {\n setActiveItem(entity.artifactId);\n requestEsgScore.show();\n }}\n onRequestSentiment={() =>\n requestSentimentScore(entity.artifactId).then(() =>\n refreshList(true, refreshReasons.UPDATED),\n )\n }\n onRequestCreditReview={() => setRequestConfirmationModalOpen(true)}\n />\n ) : null;\n\n const cstTooltipRenderer = ({ index, ...column }) => (\n <Tooltip key={index} placement=\"top\" title={<>{t('Yearly Loss (Ave.) % - (2022-2050)')}</>}>\n <Box display=\"flex\" alignItems=\"center\" className={classes.cstLabel}>\n {column.label}\n <InfoIcon className={classes.infoIcon} />\n </Box>\n </Tooltip>\n );\n\n const sigMonitoringRender = (item) => {\n const {\n artifactId,\n meta: { sigMonitoring },\n } = item;\n return (\n <>\n <StyledSwitch\n defaultChecked={sigMonitoring === true}\n value={sigMonitoring}\n disabled={sigMonitoring === null}\n onChange={() => toggleSig(artifactId)}\n />\n </>\n );\n };\n\n /* ******************************************************************** */\n /* Table columns definition */\n /* ******************************************************************** */\n\n const initialColumns = useCallback(\n () => [\n {\n name: 'id',\n options: {\n display: false,\n },\n },\n {\n name: 'name',\n label: t('PORTFOLIO.AVAILABLE_ENTITIES'),\n options: {\n customBodyRender: nameRender,\n },\n },\n {\n name: 'dataSource',\n label: t('PORTFOLIO.DATA_SOURCE'),\n options: {\n customBodyRender: (label: string | null) => (label ? t(label) : null),\n display: (!isRequestHistory && !isNil(ratingType)) || isRSRPortfolio,\n },\n },\n {\n name: 'country',\n label: t('PORTFOLIO.COUNTRY'),\n },\n {\n name: 'city',\n label: t('PORTFOLIO.CITY'),\n options: {\n display: ratingType === ratingTypes.CREDIT_REVIEW,\n },\n },\n {\n name: 'postcode',\n label: t('PORTFOLIO.POSTCODE'),\n options: {\n display: ratingType === ratingTypes.CREDIT_REVIEW,\n },\n },\n {\n name: 'industry',\n label: t('PORTFOLIO.INDUSTRY'),\n },\n {\n name: 'creditRating',\n label: t('PORTFOLIO.CREDIT_RATING'),\n options: {\n customBodyRender: scoreRender(ratingTypes.CREDIT_RATING),\n display: !ratingType && !isRSRPortfolio,\n },\n },\n {\n name: 'creditReview',\n label: t('PORTFOLIO.CREDIT_REVIEW'),\n options: {\n customBodyRender: scoreRender(ratingTypes.CREDIT_REVIEW),\n display:\n !isRSRPortfolio &&\n (!ratingType || ratingType === ratingTypes.CREDIT_REVIEW) &&\n features.creditReview,\n },\n },\n {\n name: 'esgImpactReview',\n label: t('PORTFOLIO.ESG_IMPACT_REVIEW'),\n options: {\n customBodyRender: scoreRender(ratingTypes.ESG_IMPACT),\n display: !isRSRPortfolio && !ratingType,\n },\n },\n {\n name: 'ratingType',\n label: t('PORTFOLIO.RATING_TYPE'),\n options: {\n customBodyRender: ratingTypeRender,\n display: isRSRPortfolio || ratingType === ratingTypes.CREDIT_RATING,\n },\n },\n {\n name: 'demandType',\n label: t('PORTFOLIO.DEMAND_TYPE'),\n options: {\n sort: true,\n display: isRSRPortfolio || ratingType === ratingTypes.CREDIT_RATING,\n },\n },\n {\n name: 'entityRating',\n label: t('PORTFOLIO.ENTITY_RATING'),\n options: {\n customBodyRender: scoreRender(ratingTypes.CREDIT_RATING),\n display: isRSRPortfolio || ratingType === ratingTypes.CREDIT_RATING,\n },\n },\n {\n name: 'outlook',\n label: t('PORTFOLIO.OUTLOOK'),\n options: {\n display: isRSRPortfolio || ratingType === ratingTypes.CREDIT_RATING,\n },\n },\n {\n name: 'shortTermRating',\n label: t('PORTFOLIO.SORT_TERM_RATING'),\n options: {\n customBodyRender: scoreRender(ratingTypes.CREDIT_RATING, 'shortTermRating'),\n display: isRSRPortfolio || ratingType === ratingTypes.CREDIT_RATING,\n },\n },\n {\n name: 'probabilityOfDefault',\n label: t('PORTFOLIO.PROBABILITY_OF_DEFAULT'),\n options: {\n sort: false,\n display: ratingType === ratingTypes.CREDIT_REVIEW,\n },\n },\n {\n name: 'countryRisk',\n label: t('PORTFOLIO.COUNTRY_RISK'),\n options: {\n sort: false,\n display: ratingType === ratingTypes.CREDIT_REVIEW,\n },\n },\n {\n name: 'renewal',\n label: t('PORTFOLIO.RENEWAL'),\n options: {\n sort: true,\n display: isRequestHistory && ratingType === ratingTypes.CREDIT_REVIEW,\n customBodyRender: sigMonitoringRender,\n },\n },\n {\n name: 'esgEnvironment',\n label: t('PORTFOLIO.ENVIRONMENTAL'),\n options: {\n customBodyRender: scoreRender(ratingTypes.ESG_IMPACT, 'environmental'),\n display: ratingType === ratingTypes.ESG_IMPACT,\n },\n },\n {\n name: 'esgSocial',\n label: t('PORTFOLIO.SOCIAL'),\n options: {\n customBodyRender: scoreRender(ratingTypes.ESG_IMPACT, 'social'),\n display: ratingType === ratingTypes.ESG_IMPACT,\n },\n },\n {\n name: 'esgGovernance',\n label: t('PORTFOLIO.GOVERNANCE'),\n options: {\n customBodyRender: scoreRender(ratingTypes.ESG_IMPACT, 'governance'),\n display: ratingType === ratingTypes.ESG_IMPACT,\n },\n },\n {\n name: 'esgTotal',\n label: t('Total'),\n options: {\n customBodyRender: scoreRender(ratingTypes.ESG_IMPACT),\n display: ratingType === ratingTypes.ESG_IMPACT,\n },\n },\n {\n name: 'esgEnvironment',\n label: t('PORTFOLIO.ENVIRONMENTAL'),\n options: {\n customBodyRender: scoreRender(ratingTypes.SENTIMENT, 'environmental'),\n display: ratingType === ratingTypes.SENTIMENT,\n },\n },\n {\n name: 'esgSocial',\n label: t('PORTFOLIO.SOCIAL'),\n options: {\n customBodyRender: scoreRender(ratingTypes.SENTIMENT, 'social'),\n display: ratingType === ratingTypes.SENTIMENT,\n },\n },\n {\n name: 'esgGovernance',\n label: t('PORTFOLIO.GOVERNANCE'),\n options: {\n customBodyRender: scoreRender(ratingTypes.SENTIMENT, 'governance'),\n display: ratingType === ratingTypes.SENTIMENT,\n },\n },\n {\n name: 'esgTotal',\n label: t('Total'),\n options: {\n customBodyRender: scoreRender(ratingTypes.SENTIMENT),\n display: ratingType === ratingTypes.SENTIMENT,\n },\n },\n {\n name: 'climateLoss',\n label: t('PORTFOLIO.CLIMATE_LOSS'),\n options: {\n customBodyRender: scoreRender(\n ratingTypes.CLIMATE_STRESS_TEST,\n {\n orderly: 'climateLossOrderly',\n disorderly: 'climateLossDisorderly',\n hotHouse: 'climateLossHotHouse',\n }[cstScenario] as SubScore,\n ),\n customHeadLabelRender: cstTooltipRenderer,\n display: ratingType === ratingTypes.CLIMATE_STRESS_TEST,\n },\n },\n {\n name: 'physicalRiskLoss',\n label: t('PORTFOLIO.PHYSICAL_RISK_LOSS'),\n options: {\n customBodyRender: scoreRender(\n ratingTypes.CLIMATE_STRESS_TEST,\n {\n orderly: 'physicalRiskLossOrderly',\n disorderly: 'physicalRiskLossDisorderly',\n hotHouse: 'physicalRiskLossHotHouse',\n }[cstScenario] as SubScore,\n ),\n customHeadLabelRender: cstTooltipRenderer,\n display: ratingType === ratingTypes.CLIMATE_STRESS_TEST,\n },\n },\n {\n name: 'transitionRiskLoss',\n label: t('PORTFOLIO.TRANSITION_RISK_LOSS'),\n options: {\n customBodyRender: scoreRender(\n ratingTypes.CLIMATE_STRESS_TEST,\n {\n orderly: 'transitionRiskLossOrderly',\n disorderly: 'transitionRiskLossDisorderly',\n hotHouse: 'transitionRiskLossHotHouse',\n }[cstScenario] as SubScore,\n ),\n customHeadLabelRender: cstTooltipRenderer,\n display: ratingType === ratingTypes.CLIMATE_STRESS_TEST,\n },\n },\n {\n name: 'cr_activity',\n label: t('PORTFOLIO.ACTIVITY'),\n options: {\n sort: true,\n customBodyRender: activityRender(ratingTypes.CREDIT_RATING),\n display: ratingType === ratingTypes.CREDIT_RATING && features.activityInPortfolioManager,\n },\n },\n {\n name: 'sig_activity',\n label: t('PORTFOLIO.ACTIVITY'),\n options: {\n sort: true,\n customBodyRender: activityRender(ratingTypes.CREDIT_REVIEW),\n display:\n !isRequestHistory &&\n ratingType === ratingTypes.CREDIT_REVIEW &&\n features.activityInPortfolioManager,\n },\n },\n {\n name: 'rsr_activity',\n label: t('PORTFOLIO.ACTIVITY'),\n options: {\n sort: true,\n customBodyRender: activityRender(ratingTypes.CREDIT_REVIEW),\n display: isRSRPortfolio,\n },\n },\n {\n name: 'esg_activity',\n label: t('PORTFOLIO.ACTIVITY'),\n options: {\n sort: true,\n customBodyRender: activityRender(ratingTypes.ESG_IMPACT),\n display: ratingType === ratingTypes.ESG_IMPACT && features.activityInPortfolioManager,\n },\n },\n {\n name: 'sentiment_activity',\n label: t('PORTFOLIO.ACTIVITY'),\n options: {\n sort: true,\n customBodyRender: activityRender(ratingTypes.SENTIMENT),\n display: !isRequestHistory && ratingType === ratingTypes.SENTIMENT,\n },\n },\n {\n name: 'moreActions',\n label: ' ',\n options: {\n sort: false,\n customBodyRender: actionRender,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [ratingType, singleSelect, multiSelect, currentSelect, cstScenario],\n );\n\n /* ******************************************************************** */\n /* More actions */\n /* ******************************************************************** */\n\n const getActions = (items: SelectedEntities) => [\n {\n text: 'Copy to portfolio',\n handler: copyEntity,\n hidden: items.count === 0,\n disabled: portfolioType === PortfolioType.SAMPLE_PORTFOLIO,\n },\n {\n text: 'Move to portfolio',\n handler: moveEntity,\n hidden: items.count === 0,\n disabled: isDedicated,\n },\n {\n text: 'Request selected',\n handler: handleRequestSelected,\n tooltip:\n items.count > maxRequestCount || selectedAll\n ? `${t('PORTFOLIO.YOU_CAN_NOT_REQUEST_MORE_THAN')} ${maxRequestCount} ${t(\n 'PORTFOLIO.ITEMS_AT_ONCE',\n )}`\n : '',\n hidden:\n !features.multipleRequestsPortfolioManager ||\n !ratingType ||\n items.count === 0 ||\n ratingType === ratingTypes.CREDIT_REVIEW ||\n ratingType === ratingTypes.SENTIMENT,\n disabled: items.count > maxRequestCount || selectedAll || isDedicated,\n },\n {\n text: 'Export to Excel',\n handler: exportToExcel,\n hidden:\n items.count === 0 ||\n ratingType === ratingTypes.SENTIMENT ||\n ratingType === ratingTypes.ESG_IMPACT ||\n ratingType === ratingTypes.CLIMATE_STRESS_TEST,\n },\n {\n text: 'Export View',\n handler: exportToExcel,\n hidden:\n items.count === 0 ||\n (ratingType !== ratingTypes.ESG_IMPACT && ratingType !== ratingTypes.CLIMATE_STRESS_TEST),\n },\n {\n text: 'Export Full Data',\n handler: exportFullDataToExcel,\n hidden:\n items.count === 0 ||\n (ratingType !== ratingTypes.ESG_IMPACT && ratingType !== ratingTypes.CLIMATE_STRESS_TEST),\n },\n {\n text: 'Create companies',\n handler: () => {\n createCompanies.show();\n clearSingle();\n },\n hidden:\n (items.count === 1 && !Object.keys(items.items).length) ||\n isDedicated ||\n ratingType === ratingTypes.SENTIMENT,\n },\n {\n text: 'Delete',\n handler: deleteEntity,\n hidden: items.count === 0,\n color: theme.palette.error.main,\n disabled: isDedicated,\n confirmation: {\n title: 'Deleting entity',\n text: 'Do you really want to delete that entity?',\n },\n },\n ];\n\n /* ******************************************************************** */\n /* Table data */\n /* ******************************************************************** */\n const { columns, pagination, onSortChange, onTableChange } = useTable({\n initialColumns,\n } as any);\n\n const getSortColumn = (column: string) => {\n const isCST =\n column === 'climateLoss' || column === 'physicalRiskLoss' || column === 'transitionRiskLoss';\n\n return isCST ? `${cstScenario}.${column}` : column;\n };\n\n const { data, loading, refetch } = useFetchPortfolioItems(\n portfolioId,\n pagination.page * pagination.limit,\n pagination.limit,\n pagination.sort && [\n {\n column: getSortColumn(pagination.sort.sortColumn),\n direction: pagination.sort.direction,\n },\n ],\n requestedTab(),\n filtersData,\n );\n\n const refreshList = async (refresh: boolean, reason: string) => {\n setUpdating(true);\n if (refetchPortfolio) {\n refetchPortfolio();\n }\n await refetch();\n setShouldRefresh({ value: refresh, reason });\n setUpdating(false);\n };\n\n const { portfolioItems, totalPortfolioItems: filteredEntitiesCount } = data || {\n portfolioItems: [],\n totalPortfolioItems: 0,\n };\n\n const tableData = useMemo(() => makePortfolioItemsTableData(portfolioItems), [portfolioItems]);\n\n const showTabsButtons =\n !!portfolioType &&\n ![\n PortfolioType.REFERENCE_PORTFOLIO_EUROPE,\n PortfolioType.REFERENCE_PORTFOLIO_GLOBAL,\n PortfolioType.RSR_PORTFOLIO,\n PortfolioType.PRIVATE_RATING_PORTFOLIO,\n PortfolioType.ON_DEMAND_RATING_PORTFOLIO,\n ].includes(portfolioType);\n\n useEffect(() => {\n refreshList(true, 'filtersUpdate');\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filtersData]);\n\n useEffect(() => {\n if (totalCounter) {\n totalCounter(filteredEntitiesCount);\n }\n }, [portfolioItems]);\n\n /* ******************************************************************** */\n /* Render */\n /* ******************************************************************** */\n return (\n <Box className={classes.root}>\n <Datatable\n loading={loading || updating}\n columns={columns}\n pagination={pagination}\n data={tableData}\n total={filteredEntitiesCount || total}\n onSelectedChange={onSelectedChange}\n toolbarData={getActions(multiSelect)}\n tableToolbar={\n ratingType === ratingTypes.CLIMATE_STRESS_TEST && (\n <Select\n size=\"small\"\n className={classes.cstSelect}\n value={cstScenario}\n onChange={(e) => setCstScenario(e.target.value)}\n >\n <MenuItem key=\"orderly\" value=\"orderly\">\n {t('Orderly')}\n </MenuItem>\n <MenuItem key=\"disorderly\" value=\"disorderly\">\n {t('Disorderly')}\n </MenuItem>\n <MenuItem key=\"hotHouse\" value=\"hotHouse\">\n {t('Hot House')}\n </MenuItem>\n </Select>\n )\n }\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n selectedAll={selectedAll}\n onSelectAllClick={onSelectAll}\n shouldRefresh={shouldRefresh}\n removeShadow\n popoverFilters={features.popoverFiltersPortfolioManager ? entitiesFilters : <></>}\n filterChips={filterChips}\n leftToolbar={showTabsButtons && tabsButtons}\n showSelectionExtension\n requestCounter={\n (ratingType === ratingTypes.CREDIT_REVIEW && availableRequestsRender) ||\n (ratingType === ratingTypes.SENTIMENT && sentimentRequestsRender) ||\n undefined\n }\n />\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n onActionSuccess={refreshList}\n itemsData={currentSelect}\n sourcePortfolioId={portfolioId}\n variant={variant}\n itemType=\"ENTITY\"\n />\n <RequestEsgScoreModal\n open={requestEsgScore.isOpen}\n onClose={() => {\n requestEsgScore.close();\n setActiveItem(undefined);\n }}\n onRequested={refreshList}\n selectIds={prepareRequestIds()}\n />\n <ESGScoringToolModal\n open={createCompanies.isOpen}\n onClose={createCompanies.close}\n onUploaded={refreshList}\n isPortfolioManager\n portfolioId={portfolioId}\n selectedIds={Object.values(currentSelect.items).map((item) => (item as Array<any>)[0][1])}\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={currentSelect}\n itemType=\"ENTITY\"\n actionVariant={variant}\n sourcePortfolioId={portfolioId}\n />\n <CreditReviewRequestConfirmationModal\n open={requestConfirmationModalOpen}\n onClose={toggleRequestConfirmationModal}\n requestsCount={entitiesToRequestCount}\n />\n </Box>\n );\n};\n","import { eventFiltersTypes } from './eventFiltersTypes';\n\nexport const titleByEventFilter = {\n [eventFiltersTypes.CREDIT_ANALYSIS]: 'Credit Analysis',\n [eventFiltersTypes.ESG_ANALYSIS]: 'ESG Analysis',\n [eventFiltersTypes.FUNDS_ANALYSIS]: 'Funds Analysis',\n};\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { Box } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { ActionsButton, Datatable } from 'ui';\nimport { ChipButton, LinkButton } from 'ui/Buttons';\nimport qs from 'qs';\nimport { eventFiltersTypes } from 'shared/constants/eventFiltersTypes';\nimport { titleByEventFilter } from 'shared/constants/titleByEventFilter';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { SelectedEntities } from 'shared/types/portfolios';\nimport { MUIDataTableMeta } from 'mui-datatables';\nimport { Event } from 'modules/events/types/eventsTypes';\nimport { EventsActionButton } from 'modules/events/components/EventsActionButton';\nimport clsx from 'clsx';\nimport { useSelectedTableRows, useTable, useQuery, usePortfolioModals } from 'shared/hooks';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { useDeleteEvents, useFetchPortfolioEvents } from '../../GraphQL/portfolios/hooks';\nimport { makeEventsTableData } from '../utils';\nimport { PortfolioItemsProps, PortfolioAction, PortfolioType } from '../types';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.grey[50],\n '& thead > tr': {\n whiteSpace: 'pre',\n },\n },\n buttonLink: {\n cursor: 'pointer',\n },\n buttonActive: {\n backgroundColor: '#ff8900',\n },\n actionButton: {\n height: 45,\n marginTop: 10,\n textAlign: 'center',\n },\n}));\n\ntype PortfolioEventsParams = {\n eventFilter?: eventFiltersTypes;\n};\n\nexport const PortfolioEvents: FC<PortfolioItemsProps> = ({\n portfolioId,\n total = 0,\n portfolioData,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const {\n singleSelect,\n multiSelect,\n currentSelect,\n selectedAll,\n onSelectAll,\n onSelectedChange,\n selectSingle,\n } = useSelectedTableRows();\n const queryParams = useQuery();\n const navigate = useNavigate();\n const location = useLocation();\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: '' });\n const [updating, setUpdating] = useState(false);\n const { error, success } = useSnackbar();\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n const [variant, setVariant] = useState<PortfolioAction>();\n const deleteEvents = useDeleteEvents();\n const { eventFilter } = queryParams as PortfolioEventsParams;\n\n const { isDedicated } = portfolioData;\n\n /* ******************************************************************** */\n /* Event handlers */\n /* ******************************************************************** */\n\n const deleteEvent = () => {\n setUpdating(true);\n deleteEvents({\n eventsIds: selectedAll ? [] : Object.values(currentSelect.itemIds),\n portfolioId,\n selectedAll,\n })\n .then(({ data }) => {\n const message =\n (data as unknown as { deletePortfolioItems: any }).deletePortfolioItems?.message ||\n t('Success');\n refreshList(true, refreshReasons.DELETED);\n success(message);\n })\n .catch(() => {\n error(t('Unable to delete entities.'));\n })\n .finally(() => setUpdating(false));\n };\n\n const copyEvent = () => {\n setVariant(selectedAll ? 'copy_all' : 'copy');\n addToPortfolio.toggle();\n };\n\n const moveEvent = () => {\n setVariant(selectedAll ? 'move_all' : 'move');\n addToPortfolio.toggle();\n };\n\n const onEventFilterChange = (category?: string) => {\n if (category !== eventFilter) {\n const categoryConverted = category;\n navigate({\n pathname: location.pathname,\n search: qs.stringify(\n { ...queryParams, eventFilter: categoryConverted },\n { addQueryPrefix: true },\n ),\n });\n }\n };\n\n const refreshList = async (refresh: boolean, reason: string) => {\n setUpdating(true);\n await refetch();\n setShouldRefresh({ value: refresh, reason });\n setUpdating(false);\n };\n\n /* ******************************************************************** */\n /* Custom body renders */\n /* ******************************************************************** */\n\n const tabButtons = (\n <Box display=\"flex\" py={2} px={1} minHeight={32}>\n {[undefined, ...Object.values(eventFiltersTypes)].map((category) => {\n const isActive = category === eventFilter;\n return (\n <ChipButton\n key={category ?? 'All Events'}\n isActive={isActive}\n onClick={() => onEventFilterChange(category)}\n >\n {!category ? t('PORTFOLIO.ALL_EVENTS') : titleByEventFilter[category]}\n </ChipButton>\n );\n })}\n </Box>\n );\n\n const nameRender = (name: string, { rowData: [[, artifactId]] }: MUIDataTableMeta) => (\n <LinkButton to={`/events?productId=${artifactId}`} label={name?.toUpperCase()} />\n );\n\n const toTitleCase = (text: string) => {\n return text\n .toLowerCase()\n .split(' ')\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n };\n\n const categoryRenderer = (category: string) => toTitleCase(category.replace('_', ' '));\n\n const actionRender = (_: unknown, { rowData: [[id]] }: MUIDataTableMeta) => (\n <ActionsButton onOpen={() => selectSingle(id)} actions={getActions(singleSelect)} />\n );\n\n const eventActionRender = (event: Event) => (\n <EventsActionButton\n event={event}\n className={clsx(classes.buttonActive, classes.actionButton)}\n onRegister={refetch}\n />\n );\n\n /* ******************************************************************** */\n /* Table columns definition */\n /* ******************************************************************** */\n\n const initialColumns = useCallback(\n () => [\n {\n name: 'id',\n options: {\n display: false,\n },\n },\n {\n name: 'title',\n label: t('PORTFOLIO_EVENTS.NAME'),\n options: {\n customBodyRender: nameRender,\n },\n },\n {\n name: 'date',\n label: t('PORTFOLIO_EVENTS.DATE'),\n },\n {\n name: 'category',\n label: t('PORTFOLIO_EVENTS.CATEGORY'),\n options: {\n customBodyRender: categoryRenderer,\n },\n },\n {\n name: 'region',\n label: t('PORTFOLIO_EVENTS.REGION'),\n },\n {\n name: 'industry',\n label: t('PORTFOLIO_EVENTS.INDUSTRY'),\n },\n {\n name: 'eventActions',\n label: ' ',\n options: {\n sort: false,\n customBodyRender: eventActionRender,\n },\n },\n {\n name: 'moreActions',\n label: ' ',\n options: {\n sort: false,\n customBodyRender: actionRender,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [singleSelect, multiSelect, currentSelect],\n );\n\n /* ******************************************************************** */\n /* More actions */\n /* ******************************************************************** */\n\n const getActions = (items: SelectedEntities) => [\n {\n text: 'Copy to portfolio',\n handler: copyEvent,\n hidden: items.count === 0,\n disabled: portfolioData.portfolioType === PortfolioType.SAMPLE_PORTFOLIO,\n },\n {\n text: 'Move to portfolio',\n handler: moveEvent,\n hidden: items.count === 0,\n disabled: isDedicated,\n },\n { text: 'Delete', handler: deleteEvent, hidden: items.count === 0, disabled: isDedicated },\n ];\n\n /* ******************************************************************** */\n /* Table data */\n /* ******************************************************************** */\n\n const { columns, pagination, onSortChange, onTableChange } = useTable({\n initialColumns,\n } as any);\n\n const { data, loading, refetch } = useFetchPortfolioEvents(\n portfolioId,\n pagination.page * pagination.limit,\n pagination.limit,\n pagination.sort && [\n {\n column: pagination.sort.sortColumn,\n direction: pagination.sort.direction,\n },\n ],\n { category: eventFilter },\n );\n const { events } = data || { events: [] };\n\n const tableData = useMemo(() => makeEventsTableData(events || []), [events]);\n\n useEffect(() => {\n refreshList(true, '');\n }, [eventFilter]); // eslint-disable-line react-hooks/exhaustive-deps\n\n /* ******************************************************************** */\n /* Render */\n /* ******************************************************************** */\n return (\n <Box className={classes.root}>\n <Datatable\n loading={loading || updating}\n columns={columns}\n pagination={pagination}\n data={tableData}\n total={total}\n onSelectedChange={onSelectedChange}\n toolbarData={getActions(multiSelect)}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n selectedAll={selectedAll}\n onSelectAllClick={onSelectAll}\n shouldRefresh={shouldRefresh}\n removeShadow\n leftToolbar={tabButtons}\n showSelectionExtension\n />\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n onActionSuccess={refreshList}\n itemsData={currentSelect}\n sourcePortfolioId={portfolioId}\n variant={variant}\n itemType=\"EVENT\"\n />\n </Box>\n );\n};\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { SelectWithSearch } from 'ui';\nimport addMonths from 'date-fns/addMonths';\nimport { format } from 'date-fns';\nimport {InitialMaturityDateRangeValue, StringFilterRangeValue} from '../../types';\n\ntype MaturityDateSelect = {\n onChange: (value: StringFilterRangeValue) => void;\n prevValue: StringFilterRangeValue | null;\n maturityRange: InitialMaturityDateRangeValue;\n};\n\nexport const MaturityDateSelect: FC<MaturityDateSelect> = ({ onChange, prevValue, maturityRange }) => {\n const { t } = useTranslation();\n\n const startDate = new Date();\n const maxRangeDate = new Date(maturityRange.maximum ?? '')\n const dateFormat: string = \"yyyy-MM-dd'T'HH:mm:ss\";\n const startDateFormatted: string = format(startDate, dateFormat);\n\n const datesToPick = [\n {\n label: 'past',\n value: {\n toRange: startDateFormatted,\n },\n },\n {\n label: '1 month',\n value: {\n fromRange: startDateFormatted,\n toRange: format(addMonths(startDate, 1), dateFormat),\n },\n },\n {\n label: '3 months',\n value: {\n fromRange: startDateFormatted,\n toRange: format(addMonths(startDate, 3), dateFormat),\n },\n },\n {\n label: '6 months',\n value: {\n fromRange: startDateFormatted,\n toRange: format(addMonths(startDate, 6), dateFormat),\n },\n },\n {\n label: '1 year',\n value: {\n fromRange: startDateFormatted,\n toRange: format(addMonths(startDate, 12), dateFormat),\n },\n },\n {\n label: '3 years',\n value: {\n fromRange: startDateFormatted,\n toRange: format(addMonths(startDate, 36), dateFormat),\n },\n },\n ];\n\n if (addMonths(startDate, 36) < maxRangeDate) {\n datesToPick.push({\n label: 'more than 3 years',\n value: {\n fromRange: startDateFormatted,\n toRange: format(maxRangeDate, dateFormat)\n }\n })\n }\n\n const datesToPickFinder = (valueToRange: string) =>\n datesToPick.find(\n element => element.value?.toRange?.slice(0, 10) === valueToRange?.slice(0, 10),\n )?.value;\n\n const initialValues = () => {\n if (prevValue === null) {\n return null;\n }\n return prevValue\n ? datesToPickFinder(prevValue.toRange)\n : [datesToPick[0].value, datesToPick[datesToPick.length - 1].value];\n };\n\n return (\n <SelectWithSearch\n label={t('PORTFOLIO.MATURITY_DATE')}\n options={datesToPick}\n value={initialValues()}\n onChange={onChange}\n />\n );\n};\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport { Box, Button, Popover } from '@mui/material';\nimport { useTranslation } from 'react-i18next';\nimport { FieldRange, RangeSliderExtended, SelectWithSearch } from 'ui';\nimport { FiltersData, InstrumentsInitialFiltersData, RangeFilter } from '../../types';\nimport { MaturityDateSelect } from './MaturityDateFilter';\nimport {\n updateFilters,\n minMaxValueInitialValues,\n rangeSliderValuesGenerator,\n valueParser,\n} from '../../utils';\n\ntype DatatableInstrumentsFiltersProps = {\n filterFieldsInitialData: InstrumentsInitialFiltersData;\n prevFiltersValues: FiltersData;\n handleSubmit: (value: FiltersData) => void;\n};\n\nexport const DatatableInstrumentsFilters: FC<DatatableInstrumentsFiltersProps> = ({\n filterFieldsInitialData,\n handleSubmit,\n prevFiltersValues,\n}) => {\n const { t } = useTranslation();\n\n const [anchorEl, setAnchorEl] = React.useState<HTMLButtonElement | null>(null);\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) =>\n setAnchorEl(event.currentTarget);\n const handleClose = () => setAnchorEl(null);\n const open = Boolean(anchorEl);\n const id = open ? 'datatable-filters-popover' : undefined;\n const [isFiltered, setIsFiltered] = useState(false);\n\n const [dataToSubmit, setDataToSubmit] = useState<FiltersData>({});\n\n useEffect(() => {\n setIsFiltered(!!Object.keys(prevFiltersValues).length);\n setDataToSubmit(prevFiltersValues ?? {});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, prevFiltersValues]);\n\n const { ratingType, rating, couponPercent, currencyCode, volume, maturityDate } =\n filterFieldsInitialData;\n\n const ratingParsed = valueParser(rating.length ? rating : []);\n const couponPercentParsed = useMemo(\n () => rangeSliderValuesGenerator(couponPercent, 0.01, '%'),\n [couponPercent],\n );\n const volumeParsed = () => (volume.minimum !== null ? [volume.minimum, volume.maximum] : []);\n\n const values = {\n ratingType: ratingType.map((element) => {\n return {\n label: t(`PORTFOLIO.${element}`),\n value: element,\n };\n }),\n rating: minMaxValueInitialValues(ratingParsed),\n couponPercent: minMaxValueInitialValues(couponPercentParsed),\n volume: volumeParsed(),\n currencyCode,\n };\n\n const handleSelectChange = (name: keyof FiltersData) => (value: any) =>\n setDataToSubmit(updateFilters(dataToSubmit, name, value));\n\n const handleRangeSliderChange = (name: string) => (newValues: RangeFilter) => {\n setDataToSubmit({\n ...dataToSubmit,\n [name]: newValues,\n });\n };\n\n const checkFiltersAvailability = () => {\n return (\n !!ratingType.length ||\n !!ratingParsed.length ||\n maturityDate.minimum ||\n !!couponPercentParsed.length ||\n !!volumeParsed().length ||\n !!currencyCode.length\n );\n };\n\n return (\n <>\n {checkFiltersAvailability() && (\n <Button\n size=\"small\"\n variant={isFiltered ? 'contained' : 'outlined'}\n color={isFiltered ? 'primary' : undefined}\n onClick={handleClick}\n >\n {isFiltered ? t('Change filters') : t('Apply filters')}\n </Button>\n )}\n <Popover\n id={id}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n >\n <Box p={2} width=\"500px\">\n {!!ratingType.length && (\n <SelectWithSearch\n label={t('PORTFOLIO.RATING_TYPE_ONELINE')}\n options={values.ratingType}\n value={dataToSubmit.ratingType ?? null}\n onChange={handleSelectChange('ratingType')}\n />\n )}\n {!!ratingParsed.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.INSTRUMENT_RATING')}\n options={ratingParsed}\n values={dataToSubmit.rating ?? values?.rating}\n onChange={handleRangeSliderChange('rating')}\n />\n )}\n {maturityDate.minimum && (\n <MaturityDateSelect\n maturityRange={maturityDate}\n prevValue={dataToSubmit.maturityDate ?? null}\n onChange={handleSelectChange('maturityDate')}\n />\n )}\n {!!couponPercentParsed.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.COUPON_RANGE')}\n options={couponPercentParsed}\n values={dataToSubmit.couponPercent ?? values?.couponPercent}\n onChange={handleRangeSliderChange('couponPercent')}\n />\n )}\n {!!volumeParsed().length && (\n <Box mt={2}>\n <FieldRange\n rangeLimit={volume}\n onChange={handleRangeSliderChange('volume')}\n values={dataToSubmit.volume ?? values?.volume}\n label={t('PORTFOLIO.INVESTMENT_VOLUME')}\n />\n </Box>\n )}\n {!!currencyCode.length && (\n <SelectWithSearch\n label={t('PORTFOLIO.CURRENCY')}\n options={values.currencyCode}\n value={dataToSubmit.currencyCode ?? null}\n onChange={handleSelectChange('currencyCode')}\n />\n )}\n <Box mt={2} display=\"flex\" justifyContent=\"space-between\">\n <Button type=\"submit\" onClick={() => setDataToSubmit({})}>\n {t('RESET')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n handleSubmit(dataToSubmit);\n handleClose();\n }}\n >\n {t('APPLY_FILTERS')}\n </Button>\n </Box>\n </Box>\n </Popover>\n </>\n );\n};\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { useTranslation } from 'react-i18next';\nimport { Box, IconButton } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { ActionsButton, Datatable } from 'ui';\nimport { theme } from 'theme';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { LinkButton } from 'ui/Buttons';\nimport { useFeatures, usePortfolioModals, useSelectedTableRows, useTable } from 'shared/hooks';\nimport { SelectedEntities } from 'shared/types/portfolios';\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { exportIndustries } from 'services/export/exportService';\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\nimport { MUIDataTableMeta } from 'mui-datatables';\nimport LockIcon from '@mui/icons-material/Lock';\nimport Typography from '@mui/material/Typography';\nimport { useDeleteInstruments, useFetchPortfolioInstruments } from '../../GraphQL/portfolios/hooks';\nimport { makeInstrumentsTableData } from '../utils';\nimport {\n PortfolioItemsProps,\n PortfolioAction,\n FiltersData,\n InstrumentsInitialFiltersData,\n PortfolioType,\n CollectionType,\n} from '../types';\nimport { DatatableChipFilters } from './components/DatatableChipFilters';\nimport { DatatableInstrumentsFilters } from './components/DatatableInstrumentsFilters';\nimport { fetchInitialFiltersData } from './services/filtersService';\n\nconst useStyles = makeStyles(() => ({\n root: {\n '& thead > tr': {\n whiteSpace: 'pre',\n },\n },\n buttonLink: {\n cursor: 'pointer',\n },\n}));\n\nexport const PortfolioInstruments: FC<PortfolioItemsProps> = ({\n portfolioId,\n total = 0,\n refetchPortfolio,\n isReferencePortfolio,\n portfolioData,\n totalCounter,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const [updating, setUpdating] = useState(false);\n const {\n singleSelect,\n multiSelect,\n currentSelect,\n selectedAll,\n onSelectAll,\n onSelectedChange,\n selectSingle,\n } = useSelectedTableRows();\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: '' });\n const deleteInstruments = useDeleteInstruments();\n const { error, success } = useSnackbar();\n const [variant, setVariant] = useState<PortfolioAction>();\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n\n const features = useFeatures();\n const [filtersData, setFiltersData] = useState<FiltersData>({});\n const [filterFieldsInitialData, setFilterFieldsInitialData] =\n useState<InstrumentsInitialFiltersData>();\n\n const { isDedicated } = portfolioData;\n\n /* ******************************************************************** */\n /* Event handlers */\n /* ******************************************************************** */\n\n const deleteInstrument = () => {\n setUpdating(true);\n deleteInstruments({\n instrumentsIds: selectedAll ? [] : Object.values(currentSelect.itemIds),\n portfolioId,\n selectedAll,\n })\n .then(({ data }) =>\n refreshList(true, refreshReasons.DELETED).finally(() =>\n success(data?.deleteInstruments?.message || t('Success')),\n ),\n )\n .catch(() => error(t('Unable to delete entities.')))\n .finally(() => setUpdating(false));\n };\n\n const copyInstrument = () => {\n setVariant(selectedAll ? 'copy_all' : 'copy');\n addToPortfolio.toggle();\n };\n\n const moveInstrument = () => {\n setVariant(selectedAll ? 'move_all' : 'move');\n addToPortfolio.toggle();\n };\n\n const exportToExcel = () => {\n const items = Object.values(currentSelect.itemIds);\n\n // eslint-disable-next-line no-shadow\n const onError = (err: string) => error(err);\n\n exportIndustries({\n items: selectedAll ? [] : items,\n onError,\n portfolioId,\n selectedAll,\n });\n };\n\n /* ******************************************************************** */\n /* Datatable filters */\n /* ******************************************************************** */\n\n useEffect(() => {\n if (features.popoverFiltersPortfolioManager) {\n fetchInitialFiltersData(portfolioId, CollectionType.INSTRUMENTS).then((response) =>\n setFilterFieldsInitialData(response),\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleFiltersSubmit = (data: FiltersData) => {\n setFiltersData(data);\n };\n\n const handleDeleteFilter = (propertyName: keyof FiltersData) => {\n // eslint-disable-next-line camelcase\n if (filtersData) {\n // eslint-disable-next-line camelcase\n const { [propertyName]: _removedProperty, ...filtersEdited } = filtersData!;\n setFiltersData(filtersEdited);\n }\n };\n\n const handleClearAllFilters = () => setFiltersData({});\n\n const instrumentsFilters = filterFieldsInitialData && (\n <DatatableInstrumentsFilters\n filterFieldsInitialData={filterFieldsInitialData}\n prevFiltersValues={filtersData}\n handleSubmit={handleFiltersSubmit}\n />\n );\n\n const filterChips = filtersData && (\n <DatatableChipFilters\n filtersData={filtersData}\n handleDelete={handleDeleteFilter}\n handleClearAll={handleClearAllFilters}\n />\n );\n\n /* ******************************************************************** */\n /* Custom body renders */\n /* ******************************************************************** */\n\n const nameRender = (name: string, { rowData: [[, artifactId]] }: MUIDataTableMeta) => (\n <LinkButton to={`/instruments/${artifactId}`} label={name.toUpperCase()} />\n );\n\n const actionRender = (_: unknown, { rowData: [[id]] }: MUIDataTableMeta) => (\n <ActionsButton onOpen={() => selectSingle(id)} actions={getActions(singleSelect)} />\n );\n\n const instrumentRatingRender = (rating: string) =>\n rating === 'lock' ? (\n <IconButton color=\"inherit\" size=\"large\">\n <LockIcon />\n </IconButton>\n ) : (\n rating\n );\n\n /* ******************************************************************** */\n /* Table columns definition */\n /* ******************************************************************** */\n\n const initialColumns = useCallback(\n () => [\n {\n name: 'id',\n options: {\n display: false,\n },\n },\n {\n name: 'name',\n label: t('Available entities'),\n options: {\n customBodyRender: nameRender,\n },\n },\n {\n name: 'isin',\n label: t('ISIN'),\n },\n {\n name: 'entity',\n label: t('Entity'),\n },\n {\n name: 'ratingType',\n label: t('Rating type'),\n },\n {\n name: 'demandType',\n label: t('Demand type'),\n },\n {\n name: 'instrumentRating',\n label: t('Instrument\\n rating'),\n options: {\n customBodyRender: instrumentRatingRender,\n },\n },\n {\n name: 'maturityDate',\n label: t('Maturity date'),\n },\n {\n name: 'coupon',\n label: t('Coupon'),\n },\n {\n name: 'instrumentVolume',\n label: t('Instrument volume'),\n },\n {\n name: 'moreActions',\n label: ' ',\n options: {\n sort: false,\n customBodyRender: actionRender,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [singleSelect.count, currentSelect.itemIds],\n );\n\n /* ******************************************************************** */\n /* More actions */\n /* ******************************************************************** */\n\n const isSelectedAllInReferencePortfolio = isReferencePortfolio && selectedAll;\n\n const getActions = (items: SelectedEntities) => [\n {\n text: 'Copy to portfolio',\n handler: copyInstrument,\n hidden: items.count === 0,\n disabled:\n isSelectedAllInReferencePortfolio ||\n portfolioData.portfolioType === PortfolioType.SAMPLE_PORTFOLIO,\n },\n {\n text: 'Move to portfolio',\n handler: moveInstrument,\n hidden: items.count === 0 || isReferencePortfolio,\n disabled: isDedicated,\n },\n {\n text: 'Export to Excel',\n handler: exportToExcel,\n hidden: items.count === 0,\n },\n {\n text: 'Delete',\n handler: deleteInstrument,\n hidden: items.count === 0 || isReferencePortfolio,\n color: theme.palette.error.main,\n confirmation: {\n title: 'Deleting instrument',\n text: 'Do you really want to delete that instrument?',\n },\n disabled: isDedicated,\n },\n ];\n\n /* ******************************************************************** */\n /* Table data */\n /* ******************************************************************** */\n const { columns, pagination, onSortChange, onTableChange } = useTable({\n initialColumns,\n } as any);\n\n const { data, loading, refetch } = useFetchPortfolioInstruments(\n portfolioId,\n pagination.page * pagination.limit,\n pagination.limit,\n pagination.sort && [\n {\n column: pagination.sort.sortColumn,\n direction: pagination.sort.direction,\n },\n ],\n filtersData,\n );\n\n const { instruments, totalInstruments: filteredInstrumentsCount } = data || {\n instruments: [],\n totalInstruments: 0,\n };\n\n const refreshList = async (refresh: boolean, reason: string) => {\n setUpdating(true);\n if (refetchPortfolio) {\n refetchPortfolio();\n }\n await refetch();\n setShouldRefresh({ value: refresh, reason });\n setUpdating(false);\n };\n\n const tableData = useMemo(() => makeInstrumentsTableData(instruments), [instruments]);\n\n const filtersCounter = Object.keys(filtersData).length;\n\n const InstrumentsTitle = () => (\n <Box ml={2} display=\"flex\" alignItems=\"center\" gap={2}>\n <h3>{filteredInstrumentsCount} Instruments</h3>\n {!!filtersCounter && (\n <Typography variant=\"body1\" color={COLORS.typography.main}>\n {filtersCounter} {filtersCounter > 1 ? 'Filters' : 'Filter'} applied\n </Typography>\n )}\n </Box>\n );\n\n useEffect(() => {\n if (totalCounter) {\n totalCounter(filteredInstrumentsCount);\n }\n }, [instruments]);\n\n /* ******************************************************************** */\n /* Render */\n /* ******************************************************************** */\n return (\n <Box className={classes.root}>\n <Datatable\n loading={loading || updating}\n columns={columns}\n pagination={pagination}\n data={tableData}\n total={filteredInstrumentsCount || total}\n onSelectedChange={onSelectedChange}\n toolbarData={getActions(multiSelect)}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n selectedAll={selectedAll}\n onSelectAllClick={onSelectAll}\n shouldRefresh={shouldRefresh}\n removeShadow\n leftToolbar={<InstrumentsTitle />}\n showSelectionExtension\n popoverFilters={features.popoverFiltersPortfolioManager ? instrumentsFilters : <></>}\n filterChips={filterChips}\n />\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n onActionSuccess={refreshList}\n itemsData={currentSelect}\n variant={variant}\n itemType=\"INSTRUMENT\"\n sourcePortfolioId={portfolioId}\n />\n <CreateNewPortfolioModal\n itemsData={currentSelect}\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemType=\"INSTRUMENT\"\n actionVariant={variant}\n sourcePortfolioId={portfolioId}\n />\n </Box>\n );\n};\n","import React, { FC, useCallback, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { ActionsButton, Datatable } from 'ui';\nimport { LinkButton } from 'ui/Buttons';\nimport { useSelectedTableRows, useTable } from 'shared/hooks';\nimport { SelectedEntities, ArtifactId } from 'shared/types/portfolios';\nimport { tableRefreshReasonTypes } from 'shared/constants/tableRefreshReasonTypes';\nimport { MUIDataTableMeta } from 'mui-datatables';\nimport { usePortfolioModals } from 'shared/hooks/usePortfolioModals/usePortfolioModals';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { theme } from 'theme';\nimport { useFetchPortfolioRatingNews, useDeleteRatingNews } from '../../GraphQL/portfolios/hooks';\nimport { UpdateEntitiesModal } from '../../Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { CreateNewPortfolioModal } from '../../Modals/CreateNewPortfolioModal';\nimport { makeRatingNewsTableData } from '../utils';\nimport { PortfolioItemsProps, PortfolioAction, PortfolioType } from '../types';\n\nconst useStyles = makeStyles(() => ({\n root: {\n '& thead > tr': {\n whiteSpace: 'pre',\n },\n },\n buttonLink: {\n cursor: 'pointer',\n },\n}));\n\nexport const PortfolioRatingNews: FC<PortfolioItemsProps> = ({\n portfolioId,\n total = 0,\n refetchPortfolio = null,\n portfolioData,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const {\n singleSelect,\n multiSelect,\n currentSelect,\n selectedAll,\n onSelectAll,\n onSelectedChange,\n selectSingle,\n } = useSelectedTableRows();\n\n const [updating, setUpdating] = useState(false);\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: '' });\n const { error, success } = useSnackbar();\n const [variant, setVariant] = useState<PortfolioAction>();\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n const deleteRatineNews = useDeleteRatingNews();\n\n const { isDedicated } = portfolioData;\n\n /* ******************************************************************** */\n /* Event handlers */\n /* ******************************************************************** */\n\n const deleteEntity = () => {\n setUpdating(true);\n\n const items = Object.keys(currentSelect.itemIds).map((item: string) => {\n return {\n value: item,\n type: currentSelect.type,\n };\n }) as Array<ArtifactId>;\n\n deleteRatineNews({\n artifactIdList: items,\n portfolioId,\n selectedAll,\n })\n .then(({ data }) => {\n const message =\n ((data as unknown) as { deletePortfolioItems: any }).deletePortfolioItems?.message ||\n t('Success');\n refreshList(true, tableRefreshReasonTypes.DELETED);\n success(message);\n })\n .catch(() => {\n error(t('Unable to delete entities.'));\n })\n .finally(() => setUpdating(false));\n };\n\n const copyEntity = () => {\n setVariant(selectedAll ? 'copy_all' : 'copy');\n addToPortfolio.toggle();\n };\n\n const moveEntity = () => {\n setVariant(selectedAll ? 'move_all' : 'move');\n addToPortfolio.toggle();\n };\n\n /* ******************************************************************** */\n /* Custom body renders */\n /* ******************************************************************** */\n\n const nameRender = (name: string, { rowData: [id] }: MUIDataTableMeta) => (\n <LinkButton to={`/announcements/${id}`} label={name.toUpperCase()} />\n );\n\n const actionRender = (_: unknown, { rowData: [id] }: MUIDataTableMeta) => (\n <ActionsButton onOpen={() => selectSingle(id)} actions={getActions(singleSelect)} />\n );\n\n /* ******************************************************************** */\n /* Table columns definition */\n /* ******************************************************************** */\n\n const initialColumns = useCallback(\n () => [\n {\n name: 'artifactId',\n options: {\n display: false,\n },\n },\n {\n name: 'title',\n label: t('PORTFOLIO.TITLE'),\n options: {\n customBodyRender: nameRender,\n },\n },\n {\n name: 'date',\n label: t('PORTFOLIO.DATE'),\n },\n {\n name: 'moreActions',\n label: ' ',\n options: {\n sort: false,\n customBodyRender: actionRender,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [singleSelect.count],\n );\n\n /* ******************************************************************** */\n /* More actions */\n /* ******************************************************************** */\n\n const getActions = (items: SelectedEntities) => [\n {\n text: 'Copy to portfolio',\n handler: copyEntity,\n hidden: items.count === 0,\n disabled: portfolioData.portfolioType === PortfolioType.SAMPLE_PORTFOLIO,\n },\n {\n text: 'Move to portfolio',\n handler: moveEntity,\n hidden: items.count === 0,\n disabled: isDedicated,\n },\n {\n text: 'Delete',\n handler: deleteEntity,\n hidden: items.count === 0,\n color: theme.palette.error.main,\n confirmation: {\n title: 'Deleting rating news',\n text: 'Do you really want to delete that rating news?',\n },\n disabled: isDedicated,\n },\n ];\n\n /* ******************************************************************** */\n /* Table data */\n /* ******************************************************************** */\n const { columns, pagination, onSortChange, onTableChange } = useTable({\n initialColumns,\n } as any);\n\n const { data, loading, refetch } = useFetchPortfolioRatingNews(\n portfolioId,\n pagination.page * pagination.limit,\n pagination.limit,\n pagination.sort && [\n {\n column: pagination.sort.sortColumn,\n direction: pagination.sort.direction,\n },\n ],\n );\n const { ratingNews: portfolioItems } = data || { ratingNews: [] };\n\n const tableData = useMemo(() => makeRatingNewsTableData(portfolioItems), [portfolioItems]);\n\n const refreshList = async (refresh: boolean, reason: string) => {\n setUpdating(true);\n if (refetchPortfolio) {\n refetchPortfolio();\n }\n await refetch();\n setShouldRefresh({ value: refresh, reason });\n setUpdating(false);\n };\n\n /* ******************************************************************** */\n /* Render */\n /* ******************************************************************** */\n return (\n <Box className={classes.root}>\n <Datatable\n loading={loading || updating}\n columns={columns}\n pagination={pagination}\n data={tableData}\n total={total}\n onSelectedChange={onSelectedChange}\n toolbarData={getActions(multiSelect)}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n selectedAll={selectedAll}\n onSelectAllClick={onSelectAll}\n shouldRefresh={shouldRefresh}\n removeShadow\n showSelectionExtension\n />\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n onActionSuccess={refreshList}\n itemsData={currentSelect}\n variant={variant}\n itemType=\"RATING_NEWS\"\n sourcePortfolioId={portfolioId}\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={currentSelect}\n itemType=\"RATING_NEWS\"\n actionVariant={variant}\n sourcePortfolioId={portfolioId}\n />\n </Box>\n );\n};\n","import React, { FC, useCallback, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { ActionsButton, Datatable } from 'ui';\nimport { LinkButton } from 'ui/Buttons';\nimport { useSelectedTableRows, useTable } from 'shared/hooks';\nimport { ArtifactId, SelectedEntities } from 'shared/types/portfolios';\nimport { MUIDataTableMeta } from 'mui-datatables';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { theme } from 'theme';\nimport { usePortfolioModals } from 'shared/hooks/usePortfolioModals/usePortfolioModals';\nimport { UpdateEntitiesModal } from '../../Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { CreateNewPortfolioModal } from '../../Modals/CreateNewPortfolioModal';\nimport { useDeleteResearchItems, useFetchPortfolioResearch } from '../../GraphQL/portfolios/hooks';\nimport { makeResearchTableData } from '../utils';\nimport { PortfolioItemsProps, PortfolioAction, PortfolioType } from '../types';\n\nconst useStyles = makeStyles(() => ({\n root: {\n '& thead > tr': {\n whiteSpace: 'pre',\n },\n },\n buttonLink: {\n cursor: 'pointer',\n },\n}));\n\nexport const PortfolioResearch: FC<PortfolioItemsProps> = ({\n portfolioId,\n total = 0,\n refetchPortfolio = null,\n portfolioData,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const {\n singleSelect,\n multiSelect,\n currentSelect,\n selectedAll,\n onSelectAll,\n onSelectedChange,\n selectSingle,\n } = useSelectedTableRows();\n const [variant, setVariant] = useState<PortfolioAction>();\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n const [updating, setUpdating] = useState(false);\n const deleteResearches = useDeleteResearchItems();\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: '' });\n const { i18n } = useTranslation();\n const lang = i18n?.language;\n const { error, success } = useSnackbar();\n\n const { isDedicated } = portfolioData;\n\n /* ******************************************************************** */\n /* Event handlers */\n /* ******************************************************************** */\n\n const deleteResearch = () => {\n setUpdating(true);\n\n const items = Object.keys(currentSelect.itemIds).map((item: string) => {\n return {\n value: item,\n type: currentSelect.type,\n };\n }) as Array<ArtifactId>;\n\n deleteResearches({\n artifactIdList: items,\n portfolioId,\n selectedAll,\n })\n .then(({ data }) => {\n refreshList(true, refreshReasons.DELETED);\n success(data?.deleteResearches?.message || t('Success'));\n })\n .catch(() => error(t('Unable to delete entities.')))\n .finally(() => setUpdating(false));\n };\n\n const copyEntity = () => {\n setVariant(selectedAll ? 'copy_all' : 'copy');\n addToPortfolio.toggle();\n };\n\n const moveEntity = () => {\n setVariant(selectedAll ? 'move_all' : 'move');\n addToPortfolio.toggle();\n };\n\n /* ******************************************************************** */\n /* Custom body renders */\n /* ******************************************************************** */\n\n const nameRender = (name: string, { rowData: [id] }: MUIDataTableMeta) => (\n <LinkButton to={`/announcements/${id}`} label={name.toUpperCase()} />\n );\n\n const actionRender = (_: unknown, { rowData: [id] }: MUIDataTableMeta) => (\n <ActionsButton onOpen={() => selectSingle(id)} actions={getActions(singleSelect)} />\n );\n\n /* ******************************************************************** */\n /* Table columns definition */\n /* ******************************************************************** */\n\n const initialColumns = useCallback(\n () => [\n {\n name: 'id',\n options: {\n display: false,\n },\n },\n {\n name: 'title',\n label: t('PORTFOLIO.TITLE'),\n options: {\n customBodyRender: nameRender,\n },\n },\n {\n name: 'date',\n label: t('PORTFOLIO.DATE'),\n },\n {\n name: 'moreActions',\n label: ' ',\n options: {\n sort: false,\n customBodyRender: actionRender,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [singleSelect.count],\n );\n\n /* ******************************************************************** */\n /* More actions */\n /* ******************************************************************** */\n\n const getActions = (items: SelectedEntities) => [\n {\n text: 'Copy to portfolio',\n handler: copyEntity,\n hidden: items.count === 0,\n disabled: portfolioData.portfolioType === PortfolioType.SAMPLE_PORTFOLIO,\n },\n {\n text: 'Move to portfolio',\n handler: moveEntity,\n hidden: items.count === 0,\n disabled: isDedicated,\n },\n {\n text: 'Delete',\n handler: deleteResearch,\n hidden: items.count === 0,\n color: theme.palette.error.main,\n confirmation: {\n title: 'Deleting research',\n text: 'Do you really want to delete that research?',\n },\n disabled: isDedicated,\n },\n ];\n\n /* ******************************************************************** */\n /* Table data */\n /* ******************************************************************** */\n\n const { columns, pagination, onSortChange, onTableChange } = useTable({\n initialColumns,\n } as any);\n\n const { data, loading, refetch } = useFetchPortfolioResearch(\n portfolioId,\n lang,\n pagination.page * pagination.limit,\n pagination.limit,\n pagination.sort && [\n {\n column: pagination.sort.sortColumn,\n direction: pagination.sort.direction,\n },\n ],\n );\n\n const { researches } = data || { researches: [] };\n\n const tableData = useMemo(() => makeResearchTableData(researches), [researches]);\n\n const refreshList = async (refresh: boolean, reason: string) => {\n setUpdating(true);\n if (refetchPortfolio) {\n refetchPortfolio();\n }\n await refetch();\n setShouldRefresh({ value: refresh, reason });\n setUpdating(false);\n };\n\n /* ******************************************************************** */\n /* Render */\n /* ******************************************************************** */\n return (\n <Box className={classes.root}>\n <Datatable\n loading={loading || updating}\n columns={columns}\n pagination={pagination}\n data={tableData}\n total={total}\n shouldRefresh={shouldRefresh}\n onSelectedChange={onSelectedChange}\n toolbarData={getActions(multiSelect)}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n selectedAll={selectedAll}\n onSelectAllClick={onSelectAll}\n removeShadow\n showSelectionExtension\n />\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n onActionSuccess={refreshList}\n itemsData={currentSelect}\n variant={variant}\n itemType=\"RESEARCH\"\n sourcePortfolioId={portfolioId}\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={currentSelect}\n itemType=\"RESEARCH\"\n actionVariant={variant}\n sourcePortfolioId={portfolioId}\n />\n </Box>\n );\n};\n","import { Box, Card, Typography, Widget } from '@scope/scope-one-ui/core';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\nimport styled from 'styled-components';\nimport { ScrollableAreaProps } from './PortfolioSummary.d';\n\nexport const SummaryCard = styled(Card)`\n margin-top: ${SIZES.spacing(4)};\n margin-bottom: ${SIZES.spacing(3)};\n display: flex;\n justify-content: space-between;\n align-content: center;\n`;\n\nexport const SummaryTitle = styled(Typography)`\n line-height: ${SIZES.spacing(4)};\n`;\n\nexport const WidgetsWrapper = styled(Box)`\n display: grid;\n grid-column: 1/3;\n grid-gap: ${SIZES.spacing(4)};\n grid-template-columns: 1fr 1fr 1fr;\n`;\n\nexport const WidgetStyled = styled(Widget)`\n height: ${SIZES.spacing(52)};\n`;\n\nexport const ScrollableArea = styled(Box)<ScrollableAreaProps>`\n display: flex;\n flex-direction: column;\n overflow-y: ${({ showScroll }) => (showScroll ? 'scroll' : 'hidden')};\n`;\n\nexport const WidgetItem = styled(Box)`\n cursor: pointer;\n transition: 0.2s ease-out;\n border-left: 0.25rem solid ${COLORS.background.main};\n\n &:hover {\n color: ${COLORS.primary.hover};\n background-color: ${COLORS.secondary.hover};\n border-left: 0.25rem solid ${COLORS.primary.main};\n }\n`;\n\nexport const WidgetItemSubtitleDescription = styled(Typography)`\n margin-right: ${SIZES.spacing(0.25)};\n`;\n\nexport const TileRow = styled(Box)`\n height: 100%;\n`;\n\nexport const TileNumber = styled(Typography)`\n color: ${COLORS.typography.label};\n font-size: ${SIZES.spacing(5.25)};\n margin-bottom: ${SIZES.spacing(1)};\n`;\n\nexport const IconWrapper = styled(Box)`\n height: 100%;\n margin-right: ${SIZES.spacing(2)};\n align-items: end;\n display: none;\n`;\n\nexport const Tile = styled(Box)`\n cursor: pointer;\n width: 100%;\n height: 100%;\n padding-top: ${SIZES.spacing(3.25)};\n padding-left: ${SIZES.spacing(3.25)};\n padding-bottom: ${SIZES.spacing(2)};\n color: ${COLORS.typography.main};\n display: flex;\n justify-content: space-between;\n transition: 0.2s ease-out;\n\n &:hover {\n background-color: ${COLORS.secondary.hover};\n color: ${COLORS.primary.hover};\n }\n\n &:hover ${TileNumber} {\n color: ${COLORS.primary.hover};\n }\n &:hover ${IconWrapper} {\n display: flex;\n }\n`;\n\nexport const ThreeDotsTile = styled(Box)`\n width: 100%;\n height: 100%;\n padding-top: ${SIZES.spacing(3.25)};\n padding-left: ${SIZES.spacing(3.25)};\n`;\n\nexport const EntitiesTile = styled(Tile)`\n border-right: 1px solid ${COLORS.border.main};\n border-bottom: 1px solid ${COLORS.border.main};\n`;\n\nexport const InstrumentsTile = styled(Tile)`\n border-bottom: 1px solid ${COLORS.border.main};\n`;\nexport const FundsTile = styled(Tile)`\n border-right: 1px solid ${COLORS.border.main};\n`;\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport MoreHorizontal from '@scope/scope-one-ui/assets/icons/more-horizontal.svg';\nimport ArrowUpRight from '@scope/scope-one-ui/assets/icons/arrow-up-right.svg';\nimport { IconTextButton, Box, Typography } from '@scope/scope-one-ui/core';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport qs from 'qs';\nimport { ItemsWidgetProps } from './ItemsWidget.d';\nimport {\n EntitiesTile,\n FundsTile,\n IconWrapper,\n InstrumentsTile,\n ThreeDotsTile,\n TileNumber,\n TileRow,\n WidgetStyled,\n} from './PortfolioSummary.styled';\n\nexport const ItemsWidget: FC<ItemsWidgetProps> = ({ noOfItems }) => {\n const { t } = useTranslation();\n const { entities, instruments, funds } = noOfItems;\n const navigate = useNavigate();\n const location = useLocation();\n\n const goToTab = (route: string) => {\n navigate(\n {\n pathname: location.pathname,\n search: qs.stringify({ activeTab: route }, { addQueryPrefix: true }),\n },\n { replace: true },\n );\n };\n\n return (\n <WidgetStyled title={t('PORTFOLIO.ITEMS')}>\n <TileRow display=\"flex\">\n <EntitiesTile onClick={() => goToTab('entities')}>\n <Box>\n <TileNumber variant=\"h1\">{entities}</TileNumber>\n <Typography variant=\"subtitle\">{t('PORTFOLIO.ENTITIES')}</Typography>\n </Box>\n <IconWrapper>\n <ArrowUpRight />\n </IconWrapper>\n </EntitiesTile>\n <InstrumentsTile onClick={() => goToTab('instruments')}>\n <Box>\n <TileNumber variant=\"h1\">{instruments}</TileNumber>\n <Typography variant=\"subtitle\">{t('PORTFOLIO.INSTRUMENTS')}</Typography>\n </Box>\n <IconWrapper>\n <ArrowUpRight />\n </IconWrapper>\n </InstrumentsTile>\n </TileRow>\n <TileRow display=\"flex\">\n <FundsTile onClick={() => goToTab('funds')}>\n <Box>\n <TileNumber variant=\"h1\">{funds}</TileNumber>\n <Typography variant=\"subtitle\">{t('PORTFOLIO.FUNDS')}</Typography>\n </Box>\n <IconWrapper>\n <ArrowUpRight />\n </IconWrapper>\n </FundsTile>\n <ThreeDotsTile>\n <IconTextButton icon={<MoreHorizontal color={COLORS.typography.main} />} />\n </ThreeDotsTile>\n </TileRow>\n </WidgetStyled>\n );\n};\n\nexport default ItemsWidget;\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport FolderPlus from '@scope/scope-one-ui/assets/icons/folder-plus.svg';\nimport { Box, Typography, Divider } from '@scope/scope-one-ui/core';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { useNavigate } from 'react-router-dom';\nimport { LastAddedWidgetProps } from './LastAddedWidget.d';\nimport {\n ScrollableArea,\n WidgetItem,\n WidgetItemSubtitleDescription,\n WidgetStyled,\n} from './PortfolioSummary.styled';\nimport { SummaryLastAddedType } from '../../types';\n\nconst LastAddedTypeRoute = {\n entity: 'entities',\n instrument: 'instruments',\n fund: 'funds',\n};\n\nexport const LastAddedWidget: FC<LastAddedWidgetProps> = ({ lastAdded, portfolioId }) => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n\n const goToTab = (artifactId: string, type: SummaryLastAddedType) => {\n navigate(\n `/portfolios/${portfolioId}/${LastAddedTypeRoute[type]}/${artifactId}?companyModule=summary-card`,\n );\n };\n\n const convertToUpperCase = (text: string) =>\n text ? `${text.charAt(0).toUpperCase()}${text.slice(1)}` : '';\n\n return (\n <WidgetStyled title={t('PORTFOLIO.LAST_ADDED')}>\n <ScrollableArea showScroll={lastAdded.length > 3}>\n {lastAdded.map((item) => (\n <Box\n key={item.artifactId}\n display=\"flex\"\n flexDirection=\"column\"\n onClick={() => goToTab(item.artifactId, item.type)}\n >\n <WidgetItem py={3}>\n <Box mx={2} display=\"flex\" alignItems=\"start\">\n <FolderPlus width=\"18px\" height=\"17px\" color={COLORS.typography.main} />\n <Box ml={1}>\n <Typography variant=\"h3\">{item.name}</Typography>\n <Box display=\"flex\" alignItems=\"center\" mt={0.25}>\n <Box display=\"flex\">\n <WidgetItemSubtitleDescription color={COLORS.typography.main} variant=\"body2\">\n {t('PORTFOLIO.TYPE')}:\n </WidgetItemSubtitleDescription>\n <Typography variant=\"body2\">{convertToUpperCase(item.type)}</Typography>\n </Box>\n <Box px={1}>\n <Typography color={COLORS.typography.main} variant=\"body2\">\n |\n </Typography>\n </Box>\n <Box display=\"flex\">\n <WidgetItemSubtitleDescription color={COLORS.typography.main} variant=\"body2\">\n {item.type === 'entity' ? t('PORTFOLIO.COUNTRY') : t('PORTFOLIO.ISIN')}:\n </WidgetItemSubtitleDescription>\n <Typography variant=\"body2\">\n {item.type === 'entity' ? item.country : item.isin}\n </Typography>\n </Box>\n </Box>\n </Box>\n </Box>\n </WidgetItem>\n <Box mx={2}>\n <Divider />\n </Box>\n </Box>\n ))}\n </ScrollableArea>\n </WidgetStyled>\n );\n};\n\nexport default LastAddedWidget;\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Typography, Divider, Label } from '@scope/scope-one-ui/core';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { formatDate } from '@scope/scope-one-ui/global/utils';\nimport { PortfolioNewsWidgetProps } from './PortfolioNewsWidget.d';\nimport { ScrollableArea, WidgetItem, WidgetStyled } from './PortfolioSummary.styled';\n\nconst artifactTypesLabels = {\n rating_news: 'RATING NEWS',\n research: 'RESEARCH',\n};\n\nexport const PortfolioNewsWidget: FC<PortfolioNewsWidgetProps> = ({ latestNews }) => {\n const { t } = useTranslation();\n\n const goToTab = (artifactId: string) => {\n window.location.href = `/page-one/news/${artifactId}`;\n };\n\n const convertDate = (publicationDate: string) => formatDate(publicationDate);\n\n return (\n <WidgetStyled title={t('PORTFOLIO.PORTFOLIO_NEWS')}>\n <ScrollableArea showScroll={latestNews.length > 3}>\n {latestNews.map((item) => (\n <Box display=\"flex\" flexDirection=\"column\" onClick={() => goToTab(item.artifactId)}>\n <WidgetItem py={3}>\n <Box mx={2.5} display=\"flex\" alignItems=\"start\" flexDirection=\"column\">\n <Box display=\"flex\" alignItems=\"center\" mb={1.5}>\n <Typography color={COLORS.typography.main} variant=\"body1\">\n {convertDate(item.publicationDate)}\n </Typography>\n <Box mx={2}>\n <Label size=\"small\">{artifactTypesLabels[item.type]}</Label>\n </Box>\n </Box>\n <Typography variant=\"h3\">{item.title}</Typography>\n </Box>\n </WidgetItem>\n <Box mx={2}>\n <Divider />\n </Box>\n </Box>\n ))}\n </ScrollableArea>\n </WidgetStyled>\n );\n};\n\nexport default PortfolioNewsWidget;\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport FolderPlus from '@scope/scope-one-ui/assets/icons/folder-plus.svg';\nimport { IconTextButton, Widget } from '@scope/scope-one-ui/core';\nimport { PortfolioSummaryProps } from './PortfolioSummary.d';\n\nimport { PortfolioUploadModal } from '../../../Modals/PortfolioUpload/PortfolioUploadModal';\nimport { SummaryCard, SummaryTitle, WidgetsWrapper } from './PortfolioSummary.styled';\nimport { ItemsWidget } from './ItemsWidget';\nimport LastAddedWidget from './LastAddedWidget';\nimport PortfolioNewsWidget from './PortfolioNewsWidget';\n\nexport const PortfolioSummary: FC<PortfolioSummaryProps> = ({\n portfolioId,\n summary,\n noOfItems,\n}) => {\n const { t } = useTranslation();\n const [portfolioUploadModalOpen, setPortfolioUploadModalOpen] = useState(false);\n\n const { lastAdded, latestNews } = summary ?? { lastAdded: [], latestNews: [] };\n\n const closeUploadPortfolioModal = () => {\n setPortfolioUploadModalOpen(false);\n };\n\n const uploadPortfolio = () => {\n setPortfolioUploadModalOpen(true);\n };\n\n return (\n <>\n <SummaryCard padded>\n <SummaryTitle variant=\"h2\">{t('PORTFOLIO.PORTFOLIO_SUMMARY')}</SummaryTitle>\n <IconTextButton onClick={uploadPortfolio} icon={<FolderPlus />}>\n {t('PORTFOLIO.UPLOAD_PORTFOLIO')}\n </IconTextButton>\n </SummaryCard>\n <WidgetsWrapper>\n <ItemsWidget noOfItems={noOfItems} />\n {!!lastAdded.length && <LastAddedWidget portfolioId={portfolioId} lastAdded={lastAdded} />}\n {!!latestNews.length && <PortfolioNewsWidget latestNews={latestNews} />}\n </WidgetsWrapper>\n\n <PortfolioUploadModal\n open={portfolioUploadModalOpen}\n onClose={closeUploadPortfolioModal}\n destinationPortfolioId={portfolioId}\n />\n </>\n );\n};\n\nexport default PortfolioSummary;\n","import { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport React, { FC } from 'react';\nimport CancelIcon from '@mui/icons-material/Cancel';\nimport { Box, Button, Typography } from '@mui/material';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport { PortfolioUpload } from '../../types';\nimport { theme } from '../../../../../theme';\n\ntype UploadStatus = {\n item: PortfolioUpload;\n onDownloadDetails: (item: PortfolioUpload) => void;\n onDownloadErrorReport: (item: PortfolioUpload) => void;\n};\n\nconst useStyles = makeStyles(() => ({\n iconTextWrapper: {\n display: 'flex',\n gridGap: theme.spacing(1),\n alignItems: 'center',\n },\n uploadedIconColor: {\n color: theme.palette.custom.green,\n },\n errorIconColor: {\n color: theme.palette.custom.error,\n },\n}));\n\nexport const UploadStatus: FC<UploadStatus> = ({\n item,\n onDownloadDetails,\n onDownloadErrorReport,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n if (item.uploadStatus === 'ERROR') {\n return (\n <Button\n disabled={!item.errorsLink}\n className={classes.iconTextWrapper}\n onClick={() => onDownloadErrorReport(item)}\n >\n <ErrorIcon fontSize=\"small\" className={classes.errorIconColor} />\n <Typography>{t('PORTFOLIO_UPLOAD.STATUS_ERROR')}</Typography>\n </Button>\n );\n }\n if (item.uploadStatus === 'FAILED') {\n return (\n <Button\n disabled={!item.errorsLink}\n className={classes.iconTextWrapper}\n onClick={() => onDownloadErrorReport(item)}\n >\n <CancelIcon fontSize=\"small\" className={classes.errorIconColor} />\n <Typography>{t('PORTFOLIO_UPLOAD.STATUS_FAILED')}</Typography>\n </Button>\n );\n }\n if (item.uploadStatus === 'FINISHED') {\n return (\n <Button className={classes.iconTextWrapper}>\n <CheckCircleIcon fontSize=\"small\" className={classes.uploadedIconColor} />\n <Typography onClick={() => onDownloadDetails(item)}>\n {t('PORTFOLIO_UPLOAD.STATUS_FINISHED')}\n </Typography>\n </Button>\n );\n }\n return <Typography>{t('PORTFOLIO_UPLOAD.STATUS_UPLOADING')}</Typography>;\n};\n","import React, { FC, useMemo, useCallback, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Button, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { ActionsButton, Datatable } from 'ui';\nimport { useSelectedTableRows, useTable } from 'shared/hooks';\nimport { MUIDataTableMeta } from 'mui-datatables';\nimport { useDeleteUpload, useFetchPortfolioUploads } from '../../GraphQL/portfolios/hooks';\nimport { makeUploadsTableData } from '../utils';\nimport { PortfolioItemsProps, PortfolioUpload } from '../types';\nimport { PortfolioUploadModal } from '../../Modals/PortfolioUpload/PortfolioUploadModal';\nimport { theme } from '../../../../theme';\nimport { tableRefreshReasonTypes as refreshReasons } from '../../../../shared/constants/tableRefreshReasonTypes';\nimport { useSnackbar } from '../../../../shared/hooks/useSnackbar';\nimport { UploadStatus } from './components/UploadStatus';\n\nconst useStyles = makeStyles(() => ({\n root: {\n '& thead > tr': {\n whiteSpace: 'pre',\n },\n },\n buttonLink: {\n cursor: 'pointer',\n },\n}));\n\nexport const PortfolioUploads: FC<PortfolioItemsProps> = ({ portfolioId, total = 0 }) => {\n const { t } = useTranslation();\n const [updating, setUpdating] = useState(false);\n const classes = useStyles();\n const { error, success } = useSnackbar();\n const deleteUpload = useDeleteUpload();\n const { selectSingle, onSelectedChange } = useSelectedTableRows();\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: '' });\n const [portfolioUploadModalOpen, setPortfolioUploadModalOpen] = useState(false);\n\n const closeUploadPortfolioModal = () => {\n setPortfolioUploadModalOpen(false);\n refetch();\n };\n\n /* ******************************************************************** */\n /* Event handlers */\n /* ******************************************************************** */\n\n const deleteFile = (id) => {\n setUpdating(true);\n deleteUpload({\n uploadsIds: id,\n portfolioId,\n })\n .then(({ data }) =>\n refreshList(true, refreshReasons.DELETED).finally(() =>\n success(data?.deleteInstruments?.message || t('Success')),\n ),\n )\n .catch(() => error(t('Unable to delete upload.')))\n .finally(() => setUpdating(false));\n };\n\n const uploadPortfolio = () => {\n setPortfolioUploadModalOpen(true);\n };\n\n const downloadFile = (val) => window.open(val);\n\n /* ******************************************************************** */\n /* Custom body renders */\n /* ******************************************************************** */\n\n // eslint-disable-next-line no-unused-vars\n const nameRenderer = ([name, _link]: string[]) => {\n return (\n <Button component=\"a\" href={_link} target=\"_blank\">\n {name}\n </Button>\n );\n };\n\n const typeRender = (name) => (\n <Typography>{name === 'BONDS' ? 'ENTITIES/BONDS' : name}</Typography>\n );\n\n const statusRenderer = (item: PortfolioUpload) => (\n <UploadStatus\n item={item}\n onDownloadDetails={() => downloadFile(item.link)}\n onDownloadErrorReport={() => downloadFile(item.errorsLink)}\n />\n );\n\n const uploadedItemsRender = (val: string) => val ?? '-';\n\n const validationErrorsRender = (val: string) =>\n val ? (\n <Typography color={theme.palette.custom.error}>{val}</Typography>\n ) : (\n <Typography>-</Typography>\n );\n\n const actionRender = (item, { rowData: [[id]] }: MUIDataTableMeta) => (\n <ActionsButton onOpen={() => selectSingle(id)} actions={getActions(item)} />\n );\n\n /* ******************************************************************** */\n /* Table columns definition */\n /* ******************************************************************** */\n\n const initialColumns = useCallback(\n () => [\n {\n name: 'id',\n options: {\n display: false,\n },\n },\n {\n name: 'name',\n label: t('PORTFOLIO.UPLOADS_NAME'),\n options: {\n customBodyRender: nameRenderer,\n },\n },\n {\n name: 'type',\n label: t('PORTFOLIO.UPLOADS_TYPE'),\n options: {\n customBodyRender: typeRender,\n },\n },\n {\n name: 'uploaded',\n label: t('PORTFOLIO.UPLOADED_ITEMS'),\n options: {\n customBodyRender: uploadedItemsRender,\n },\n },\n {\n name: 'validation',\n label: t('PORTFOLIO.VALIDATION_ERRORS'),\n options: {\n customBodyRender: validationErrorsRender,\n },\n },\n {\n name: 'status',\n label: t('PORTFOLIO.UPLOADS_STATUS'),\n options: {\n customBodyRender: statusRenderer,\n },\n },\n {\n name: 'moreActions',\n label: ' ',\n options: {\n sort: false,\n customBodyRender: actionRender,\n },\n },\n ],\n [t],\n );\n\n const initialSort = {\n sortColumn: 'created',\n direction: 'DESC',\n };\n\n /* ******************************************************************** */\n /* More actions */\n /* ******************************************************************** */\n\n const getActions = (item: PortfolioUpload) => {\n return [\n {\n text: 'Download file',\n handler: () => downloadFile(item.link),\n disabled: !item.link,\n hidden: false,\n },\n {\n text: 'Validation report',\n handler: () => downloadFile(item.errorsLink),\n disabled: !item.errorsLink,\n },\n {\n text: 'Delete file',\n handler: () => deleteFile(item.id),\n color: theme.palette.error.main,\n hidden: false,\n },\n ];\n };\n\n const getUploadAction = () => [{ text: 'Upload File', handler: uploadPortfolio, hidden: false }];\n\n /* ******************************************************************** */\n /* Table data */\n /* ******************************************************************** */\n const { columns, pagination, onSortChange, onTableChange } = useTable({\n initialColumns,\n initialSort,\n } as any);\n\n const { data, loading, refetch } = useFetchPortfolioUploads(\n portfolioId,\n pagination.page * pagination.limit,\n pagination.limit,\n pagination.sort && [\n {\n column: pagination.sort.sortColumn,\n direction: pagination.sort.direction,\n },\n ],\n );\n const { uploadHistory } = data || { uploadHistory: [] };\n\n const tableData = useMemo(() => makeUploadsTableData(uploadHistory), [uploadHistory]);\n\n const refreshList = async (refresh: boolean, reason: string) => {\n setUpdating(true);\n await refetch();\n setShouldRefresh({ value: refresh, reason });\n setUpdating(false);\n };\n\n /* ******************************************************************** */\n /* Render */\n /* ******************************************************************** */\n return (\n <Box className={classes.root}>\n <PortfolioUploadModal\n open={portfolioUploadModalOpen}\n onClose={closeUploadPortfolioModal}\n destinationPortfolioId={portfolioId}\n />\n <Datatable\n loading={loading || updating}\n columns={columns}\n pagination={pagination}\n data={tableData}\n total={total}\n toolbarData={getUploadAction()}\n shouldRefresh={shouldRefresh}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n removeShadow\n selectableRows={false}\n onSelectedChange={onSelectedChange}\n />\n </Box>\n );\n};\n","import React, { FC, useEffect, useState, useMemo } from 'react';\nimport { Box, Button, Popover } from '@mui/material';\nimport { FilterList } from '@mui/icons-material';\nimport { useTranslation } from 'react-i18next';\nimport { RangeSliderExtended, SelectWithSearch } from 'ui';\nimport { FiltersData, FundsInitialFiltersData, RangeFilter } from '../../types';\nimport { valueParser, rangeSliderValuesGenerator, minMaxValueInitialValues, updateFilters } from '../../utils';\n\ntype DatatableFundsFiltersProps = {\n filterFieldsInitialData: FundsInitialFiltersData;\n prevFiltersValues: FiltersData;\n handleSubmit: (value: FiltersData) => void;\n};\n\nexport const DatatableFundsFilters: FC<DatatableFundsFiltersProps> = ({\n filterFieldsInitialData,\n handleSubmit,\n prevFiltersValues,\n}) => {\n const { t } = useTranslation();\n\n const [anchorEl, setAnchorEl] = React.useState<HTMLButtonElement | null>(null);\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) =>\n setAnchorEl(event.currentTarget);\n const handleClose = () => setAnchorEl(null);\n const open = Boolean(anchorEl);\n const id = open ? 'datatable-filters-popover' : undefined;\n\n const [dataToSubmit, setDataToSubmit] = useState<FiltersData>({});\n\n useEffect(() => {\n setDataToSubmit(prevFiltersValues ?? {});\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, prevFiltersValues]);\n\n const { peergroup, rating, ratingPoints } = filterFieldsInitialData;\n\n const parsed = {\n fundPeerGroup: valueParser(peergroup.length ? peergroup : []),\n // fundRank: valueParser(rank.length ? rank : []),\n fundRating: valueParser(rating.length ? rating : []),\n fundRatingPoints: useMemo(() => rangeSliderValuesGenerator(ratingPoints), [ratingPoints]), \n // fundReturnRate: useMemo(() => rangeSliderValuesGenerator(returnRate), [returnRate]),\n // fundRiskRate: useMemo(() => rangeSliderValuesGenerator(riskRate), [riskRate]),\n }\n\n const values = {\n fundPeerGroup: parsed.fundPeerGroup,\n // fundRank: minMaxValueInitialValues(parsed.fundRank), \n fundRating: minMaxValueInitialValues(parsed.fundRating),\n fundRatingPoints: minMaxValueInitialValues(parsed.fundRatingPoints), \n // fundReturnRate: minMaxValueInitialValues(parsed.fundReturnRate), \n // fundRiskRate: minMaxValueInitialValues(parsed.fundRiskRate), \n };\n\n const handleSelectChange = (name: keyof FiltersData) => (value: any) =>\n setDataToSubmit(updateFilters(dataToSubmit, name, value));\n\n const handleRangeSliderChange = (name: string) => (newValues: RangeFilter) => {\n setDataToSubmit({\n ...dataToSubmit,\n [name]: newValues,\n });\n };\n\n const checkFiltersAvailability = () => {\n return true;\n };\n\n return (\n <>\n {checkFiltersAvailability() && (\n <Button size=\"small\" onClick={handleClick}>\n <FilterList fontSize=\"large\" />\n <p>{t('FILTERS')}</p>\n </Button>\n )}\n <Popover\n id={id}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n >\n <Box p={2} width=\"500px\">\n {!!parsed.fundPeerGroup.length && (\n <SelectWithSearch\n label={t('PORTFOLIO.FUNDS_PEERGROUP')}\n options={parsed.fundPeerGroup}\n value={dataToSubmit.peergroupName ?? null}\n onChange={handleSelectChange('peergroupName')}\n />\n )}\n {/* {!!parsed.fundRank.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.FUNDS_RANK')}\n options={parsed.fundRank}\n values={dataToSubmit.rank ?? values.fundRank}\n onChange={handleRangeSliderChange('rank')}\n />\n )} */}\n {!!parsed.fundRating.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.FUNDS_RATING')}\n options={parsed.fundRating}\n values={dataToSubmit.rating ?? values.fundRating}\n onChange={handleRangeSliderChange('rating')}\n />\n )}\n {!!parsed.fundRatingPoints.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.FUNDS_RATING_POINTS')}\n options={parsed.fundRatingPoints}\n values={dataToSubmit.ratingPoints ?? values.fundRatingPoints}\n onChange={handleRangeSliderChange('ratingPoints')}\n />\n )}\n {/* {!!parsed.fundReturnRate.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.FUNDS_RETURN')}\n options={parsed.fundReturnRate}\n values={dataToSubmit.returnValue ?? values.fundReturnRate}\n onChange={handleRangeSliderChange('returnValue')}\n />\n )}\n {!!parsed.fundRiskRate.length && (\n <RangeSliderExtended\n label={t('PORTFOLIO.FUNDS_RISK')}\n options={parsed.fundRiskRate}\n values={dataToSubmit.risk ?? values.fundRiskRate}\n onChange={handleRangeSliderChange('risk')}\n />\n )} */}\n\n <Box mt={2} display=\"flex\" justifyContent=\"space-between\">\n <Button type=\"submit\" onClick={() => setDataToSubmit({})}>\n {t('RESET')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n handleSubmit(dataToSubmit);\n handleClose();\n }}\n >\n {t('APPLY_FILTERS')}\n </Button>\n </Box>\n </Box>\n </Popover>\n </>\n );\n};\n","import React, { FC, useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Button } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\nimport { AifRatingBadge, RatingCircleBadge } from '@scope/scope-one-ui/core';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { RatingType } from '@scope/scope-one-ui/core/RatingCircleBadge/RatingCircleBadge.d';\nimport { ActionsButton, Datatable } from 'ui';\nimport { theme } from 'theme';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { useFeatures, usePortfolioModals, useSelectedTableRows, useTable } from 'shared/hooks';\nimport { SelectedEntities } from 'shared/types/portfolios';\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\nimport { MUIDataTableMeta } from 'mui-datatables';\nimport { exportEntities } from 'services/export/exportService';\n\nimport { useDeleteFunds } from '../../GraphQL/portfolios/hooks';\nimport { useFetchPortfolioFunds } from '../../GraphQL/portfolios/hooks';\n\nimport { makeFundsTableData } from '../utils';\nimport {\n PortfolioItemsProps,\n PortfolioAction,\n FiltersData,\n FundsInitialFiltersData,\n PortfolioType,\n CollectionType,\n} from '../types';\nimport { DatatableFundsFilters } from './components/DatatableFundsFilters';\nimport { DatatableChipFilters } from './components/DatatableChipFilters';\nimport { fetchInitialFiltersData } from './services/filtersService';\nimport { ratingTypes } from '../../../../shared/constants/ratingTypes';\n\nconst useStyles = makeStyles(() => ({\n root: {\n '& thead > tr': {\n whiteSpace: 'pre',\n },\n },\n buttonLink: {\n cursor: 'pointer',\n },\n fundRank: {\n width: '32px',\n height: '32px',\n padding: '5px',\n borderRadius: '6px',\n backgroundColor: '#e5eaef',\n textAlign: 'center',\n verticalAlign: 'middle',\n color: COLORS.primary.main,\n },\n fundRatingOuter: {\n width: '44px',\n height: '44px',\n padding: '4px',\n borderColor: '#e5eaef',\n borderRadius: '22px',\n borderWidth: '2px',\n borderStyle: 'solid',\n textAlign: 'center',\n verticalAlign: 'middle',\n },\n fundRatingInner: {\n width: '32px',\n height: '32px',\n padding: '5px',\n borderRadius: '16px',\n backgroundColor: COLORS.primary.main,\n color: 'white',\n fontWeight: 'bold',\n textAlign: 'center',\n verticalAlign: 'middle',\n },\n fundPointsTotal: {\n color: '#c4c4c4',\n },\n}));\n\nexport const PortfolioFunds: FC<PortfolioItemsProps> = ({\n portfolioId,\n total = 0,\n refetchPortfolio,\n isReferencePortfolio,\n portfolioData,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const [updating, setUpdating] = useState(false);\n const {\n singleSelect,\n multiSelect,\n currentSelect,\n selectedAll,\n onSelectAll,\n onSelectedChange,\n selectSingle,\n clearSingle,\n } = useSelectedTableRows();\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: '' });\n const deleteFunds = useDeleteFunds();\n const { error, success } = useSnackbar();\n const [variant, setVariant] = useState<PortfolioAction>();\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n\n const features = useFeatures();\n const [filtersData, setFiltersData] = useState<FiltersData>({});\n const [filterFieldsInitialData, setFilterFieldsInitialData] = useState<FundsInitialFiltersData>();\n\n const { isDedicated } = portfolioData;\n\n /* ******************************************************************** */\n /* Event handlers */\n /* ******************************************************************** */\n\n const deleteItemsHandler = () => {\n setUpdating(true);\n deleteFunds({\n isins: selectedAll ? [] : Object.values(currentSelect.itemIds),\n portfolioId,\n selectedAll,\n })\n .then(({ data }) =>\n refreshList(true, refreshReasons.DELETED).finally(() =>\n success(data?.deleteInstruments?.message || t('Success')),\n ),\n )\n .catch(() => error(t('Unable to delete entities.')))\n .finally(() => setUpdating(false));\n };\n\n const copyItemsHandler = () => {\n setVariant(selectedAll ? 'copy_all' : 'copy');\n addToPortfolio.toggle();\n };\n\n const moveItemsHandler = () => {\n setVariant(selectedAll ? 'move_all' : 'move');\n addToPortfolio.toggle();\n };\n\n const exportToExcelHandler = () => {\n const items = Object.values(currentSelect.itemIds);\n\n // eslint-disable-next-line no-shadow\n const onError = (err: string) => error(err);\n\n exportEntities({\n items: selectedAll ? [] : items,\n onError,\n portfolioId,\n selectedAll,\n ratingType: ratingTypes.FUNDS,\n });\n };\n\n const exportFullDataToExcel = () => {\n const items = Object.values(currentSelect.itemIds);\n\n const onError = (err: string) => error(err);\n\n const onSuccess = () => success(t('TOOLBAR.EXPORT_STARTED'));\n\n exportEntities({\n items: selectedAll ? [] : items,\n onError,\n onSuccess,\n portfolioId,\n selectedAll,\n ratingType: ratingTypes.FUNDS,\n exportMode: 'extended',\n });\n clearSingle();\n };\n\n /* ******************************************************************** */\n /* Datatable filters */\n /* ******************************************************************** */\n\n useEffect(() => {\n if (features.popoverFiltersPortfolioManager) {\n fetchInitialFiltersData(portfolioId, CollectionType.FUNDS).then((response) =>\n setFilterFieldsInitialData(response),\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleFiltersSubmit = (data: FiltersData) => {\n setFiltersData(data);\n };\n\n const handleDeleteFilter = (propertyName: keyof FiltersData) => {\n // eslint-disable-next-line camelcase\n if (filtersData) {\n // eslint-disable-next-line camelcase\n const { [propertyName]: _removedProperty, ...filtersEdited } = filtersData!;\n setFiltersData(filtersEdited);\n }\n };\n\n const handleClearAllFilters = () => setFiltersData({});\n\n const fundsFilters = filterFieldsInitialData && (\n <DatatableFundsFilters\n filterFieldsInitialData={filterFieldsInitialData}\n prevFiltersValues={filtersData}\n handleSubmit={handleFiltersSubmit}\n />\n );\n\n const filterChips = filtersData && (\n <DatatableChipFilters\n filtersData={filtersData}\n handleDelete={handleDeleteFilter}\n handleClearAll={handleClearAllFilters}\n />\n );\n\n /* ******************************************************************** */\n /* Custom body renders */\n /* ******************************************************************** */\n\n const nameRender = (name: string, { rowData: [isin] }: MUIDataTableMeta) => (\n <Button component=\"a\" href={`${window.location.origin}/fund-analysis/fund-details/${isin}/`}>\n {name.toUpperCase()}\n </Button>\n );\n\n const actionRender = (_: unknown, { rowData: [id] }: MUIDataTableMeta) => (\n <ActionsButton onOpen={() => selectSingle(id)} actions={getActions(singleSelect)} />\n );\n\n const rankRenderer = (value: string) => (\n <div className={classes.fundRank}>\n <span>{value}</span>\n </div>\n );\n\n const ratingRenderer = (\n rating: RatingType,\n { rowData: [, , , , , , , , , isAif, isQualitative] }: MUIDataTableMeta,\n ) =>\n isAif ? (\n <AifRatingBadge size=\"tiny\" rating={rating} />\n ) : (\n <RatingCircleBadge size=\"tiny\" rank={rating} isQualitative={isQualitative} />\n );\n\n const pointsRenderer = (value: number) => (\n <span>\n {value || 0}\n <span className={classes.fundPointsTotal}>/100</span>\n </span>\n );\n\n const percentageRenderer = (value: number) => (value ? `${value.toFixed(2)}%` : 'N/A');\n\n /* ******************************************************************** */\n /* Table columns definition */\n /* ******************************************************************** */\n\n const initialColumns = useCallback(\n () => [\n {\n name: 'id',\n options: {\n display: false,\n },\n },\n {\n name: 'name',\n label: t('Name'),\n options: {\n customBodyRender: nameRender,\n },\n },\n {\n name: 'peergroup',\n label: t('Peergroup'),\n },\n {\n name: 'isin',\n label: t('ISIN'),\n },\n {\n name: 'rank',\n label: t('Rank'),\n options: {\n customBodyRender: rankRenderer,\n },\n },\n {\n name: 'rating',\n label: t('Rating'),\n options: {\n customBodyRender: ratingRenderer,\n },\n },\n {\n name: 'ratingPoints',\n label: t('Rating Points'),\n options: {\n customBodyRender: pointsRenderer,\n },\n },\n {\n name: 'return',\n label: t('Return 3Y (p.a.)'),\n options: {\n customBodyRender: percentageRenderer,\n },\n },\n {\n name: 'risk',\n label: t('Volatility 3Y (p.a.)'),\n options: {\n customBodyRender: percentageRenderer,\n },\n },\n\n {\n name: 'moreActions',\n label: ' ',\n options: {\n sort: false,\n customBodyRender: actionRender,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [singleSelect.count, currentSelect.itemIds],\n );\n\n /* ******************************************************************** */\n /* More actions */\n /* ******************************************************************** */\n\n const getActions = (items: SelectedEntities) => [\n {\n text: 'Copy to portfolio',\n handler: copyItemsHandler,\n hidden: items.count === 0,\n disabled: portfolioData.portfolioType === PortfolioType.SAMPLE_PORTFOLIO,\n },\n {\n text: 'Move to portfolio',\n handler: moveItemsHandler,\n hidden: items.count === 0 || isReferencePortfolio,\n disabled: isDedicated,\n },\n {\n text: 'Export View',\n handler: exportToExcelHandler,\n hidden: items.count === 0,\n },\n {\n text: 'Export Full Data',\n handler: exportFullDataToExcel,\n hidden: items.count === 0,\n },\n {\n text: 'Delete',\n handler: deleteItemsHandler,\n hidden: items.count === 0 || isReferencePortfolio,\n color: theme.palette.error.main,\n confirmation: {\n title: 'Deleting items',\n text: 'Do you really want to delete that items?',\n },\n disabled: isDedicated,\n },\n ];\n\n /* ******************************************************************** */\n /* Table data */\n /* ******************************************************************** */\n const { columns, pagination, onSortChange, onTableChange } = useTable({\n initialColumns,\n } as any);\n\n const { data, loading, refetch } = useFetchPortfolioFunds(\n portfolioId,\n pagination.page * pagination.limit,\n pagination.limit,\n pagination.sort && [\n {\n column: pagination.sort.sortColumn,\n direction: pagination.sort.direction,\n },\n ],\n filtersData,\n );\n\n const { fund: funds } = data || { fund: [] };\n\n const refreshList = async (refresh: boolean, reason: string) => {\n setUpdating(true);\n if (refetchPortfolio) {\n refetchPortfolio();\n }\n await refetch();\n setShouldRefresh({ value: refresh, reason });\n setUpdating(false);\n };\n\n const tableData = useMemo(() => makeFundsTableData(funds), [funds]);\n\n /* ******************************************************************** */\n /* Render */\n /* ******************************************************************** */\n return (\n <Box className={classes.root}>\n <Datatable\n loading={loading || updating}\n columns={columns}\n pagination={pagination}\n data={tableData}\n total={total}\n onSelectedChange={onSelectedChange}\n toolbarData={getActions(multiSelect)}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n selectedAll={selectedAll}\n onSelectAllClick={onSelectAll}\n shouldRefresh={shouldRefresh}\n removeShadow\n leftToolbar={<></>}\n showSelectionExtension={!isReferencePortfolio}\n popoverFilters={features.popoverFiltersPortfolioManager ? fundsFilters : <></>}\n filterChips={filterChips}\n />\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n onActionSuccess={refreshList}\n itemsData={currentSelect}\n variant={variant}\n itemType=\"FUND\"\n sourcePortfolioId={portfolioId}\n />\n <CreateNewPortfolioModal\n itemsData={currentSelect}\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemType=\"FUND\"\n actionVariant={variant}\n sourcePortfolioId={portfolioId}\n />\n </Box>\n );\n};\n","export const shopSubscriptionTypes = {\n product: 'product',\n package: 'package',\n};\n","import { makeStyles } from '@mui/styles';\nimport { red } from '@mui/material/colors';\n\nexport const useErrorAutocompleteStyles = makeStyles(() => ({\n root: {\n '& label': {\n color: red[500],\n },\n '& label.Mui-focused': {\n color: red[500],\n },\n '& .MuiInput-underline:after': {\n borderColor: red[500],\n },\n '& .MuiOutlinedInput-root': {\n '& fieldset': {\n borderColor: red[500],\n },\n '&:hover fieldset': {\n borderColor: red[500],\n },\n '&.Mui-focused fieldset': {\n borderColor: red[500],\n },\n },\n '& .MuiIconButton-label': {\n color: red[500],\n },\n },\n}));\n","const availableFormats = ['pdf'];\n\nexport const matchFileFormat = value => {\n if (value) {\n const name = value.name.toLowerCase();\n const fileFormat = name.split('.').pop();\n return availableFormats.includes(fileFormat);\n }\n\n return true;\n};\n","import isNull from 'lodash/isNull';\n\nconst initializeInputs = {\n orderFormText: '',\n productDescriptionText: '',\n termsAndConditionsText: '',\n};\n\nconst checkDocuments = ({ orderFormInput, productDescriptionInput, termsAndConditionsInput }) => {\n const array = [];\n if (orderFormInput) array.push(orderFormInput);\n if (productDescriptionInput) array.push(productDescriptionInput);\n if (termsAndConditionsInput) array.push(termsAndConditionsInput);\n return array.join(', ');\n};\n\nexport const documentTypes = {\n terms: 'TERMS',\n productDescription: 'PRODUCT_DESCRIPTION',\n orderForm: 'ORDER_FORM',\n};\n\nexport const documentInputFields = {\n [documentTypes.orderForm]: 'orderFormInput',\n [documentTypes.productDescription]: 'productDescriptionInput',\n [documentTypes.terms]: 'termsAndConditionsInput',\n};\n\nconst shouldBeRemoved = (values, type) => isNull(values[documentInputFields[type]]);\n\nexport { initializeInputs, checkDocuments, shouldBeRemoved };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Typography from '@mui/material/Typography';\nimport { Grid, Button, Box } from '@mui/material';\nimport Divider from '@mui/material/Divider';\n\nimport { DialogTitleWithClose, FileUploaderInput } from 'ui';\n\nconst useStyles = makeStyles({\n root: {\n width: '100%',\n },\n paper: {\n minWidth: 600,\n },\n});\n\nexport const ShopProductDocumentsModal = ({ setFieldValue, open, onClose, documents }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const orderForm = documents && documents.find(({ name }) => name === 'Order form.pdf');\n const productDescription =\n documents && documents.find(({ name }) => name === 'Product description.pdf');\n const termsAndConditions =\n documents && documents.find(({ name }) => name === 'Terms and conditions.pdf');\n\n const handleSubmit = () => {\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\" classes={{ paper: classes.paper }}>\n <DialogTitleWithClose onClose={onClose}>{t('Documents upload')}</DialogTitleWithClose>\n <DialogContent>\n <div className={classes.root}>\n <Divider />\n <Box p={2}>\n <Typography>{`${t('File format')}: .pdf`}</Typography>\n <Typography>{`${t('Max size')}: 5 MB`}</Typography>\n </Box>\n <Divider />\n <Box pt={2}>\n <Typography>{t('Order form:')}</Typography>\n <FileUploaderInput\n setFieldValue={setFieldValue}\n name=\"orderForm\"\n document={orderForm}\n />\n <Typography>{t('Product description:')}</Typography>\n <FileUploaderInput\n setFieldValue={setFieldValue}\n name=\"productDescription\"\n document={productDescription}\n />\n <Typography>{t('Terms & conditions:')}</Typography>\n <FileUploaderInput\n setFieldValue={setFieldValue}\n name=\"termsAndConditions\"\n document={termsAndConditions}\n />\n </Box>\n <Box mt={2}>\n <Grid container justifyContent=\"flex-end\">\n <Button color=\"primary\" variant=\"contained\" type=\"submit\" onClick={handleSubmit}>\n {t('Save')}\n </Button>\n </Grid>\n </Box>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nShopProductDocumentsModal.defaultProps = {\n open: false,\n setFieldValue: () => null,\n onClose: () => null,\n documents: undefined,\n};\n\nShopProductDocumentsModal.propTypes = {\n open: PropTypes.bool,\n setFieldValue: PropTypes.func,\n onClose: PropTypes.func,\n documents: PropTypes.array,\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\nimport * as Yup from 'yup';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { Grid, Button, Box, TextField, Typography, Checkbox } from '@mui/material';\nimport { Formik, Form } from 'formik';\n\nimport { DialogTitleWithClose, FileUploader, Loader } from 'ui';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nimport { createProductThirdPartySource } from '../services';\nimport { fetchShopProductPropertiesAction } from '../store/shopActions';\n\nconst useStyles = makeStyles({\n root: {\n width: '100%',\n },\n});\n\nconst validationSchema = Yup.object().shape({\n name: Yup.string().required(),\n thirdparty: Yup.boolean(),\n});\n\nexport const ShopProductSourceModal = ({ open, onClose }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const dispatch = useDispatch();\n\n const [logo, setLogo] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n\n const handleSubmit = async (values, { validateForm }) => {\n setIsLoading(true);\n\n validateForm(values);\n\n if (!logo) {\n setIsLoading(false);\n }\n\n const formData = new FormData();\n\n // eslint-disable-next-line\n for (const field in values) {\n const value = values[field];\n formData.append(field, value);\n }\n\n formData.append('logo', logo, logo.name);\n\n try {\n await createProductThirdPartySource(formData);\n\n dispatch(fetchShopProductPropertiesAction());\n\n onClose();\n } catch (e) {\n dispatch(\n addNotificationAction({\n variant: 'error',\n message: t('Failed to create a product third party source'),\n }),\n );\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\">\n <DialogTitleWithClose onClose={onClose}>{t('Add product source')}</DialogTitleWithClose>\n <DialogContent>\n <div className={classes.root}>\n <Formik\n onSubmit={handleSubmit}\n validationSchema={validationSchema}\n validateOnChange={false}\n >\n {({ handleChange, setFieldValue, errors, values }) => (\n <Form>\n <Box width=\"75%\" margin=\"0 auto\">\n <Grid container>\n <Grid item xs={12}>\n <TextField\n name=\"name\"\n label={t('Name')}\n variant=\"outlined\"\n error={Boolean(errors.name)}\n onChange={handleChange}\n fullWidth\n disabled={isLoading}\n />\n </Grid>\n <Grid item xs={12}>\n <Grid container alignItems=\"center\">\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Third party:')}\n </Typography>\n </Grid>\n <Grid item>\n <Checkbox\n name=\"thirdparty\"\n onChange={event => setFieldValue('thirdparty', event.target.checked)}\n disabled={isLoading}\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12}>\n <Box mt={2}>\n <FileUploader onChange={img => setLogo(img[0])} disabled={isLoading} />\n </Box>\n </Grid>\n </Grid>\n </Box>\n <Box mt={2}>\n <Grid container justifyContent=\"flex-end\">\n {isLoading ? (\n <Loader />\n ) : (\n <Button\n color=\"primary\"\n variant=\"contained\"\n type=\"submit\"\n disabled={Boolean(!logo || !values.name)}\n >\n {t('Add source')}\n </Button>\n )}\n </Grid>\n </Box>\n </Form>\n )}\n </Formik>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nShopProductSourceModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nShopProductSourceModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n};\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { Formik, Form } from 'formik';\nimport * as Yup from 'yup';\nimport { makeStyles } from '@mui/styles';\nimport { useTranslation } from 'react-i18next';\nimport clsx from 'clsx';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport {\n TextField,\n Grid,\n Box,\n Button,\n Stepper,\n Step,\n StepLabel,\n Typography,\n Checkbox,\n Chip,\n} from '@mui/material';\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\nimport { red } from '@mui/material/colors';\nimport AddIcon from '@mui/icons-material/Add';\n\nimport { FULL_API_URL } from 'utils';\nimport { FileUploader, Alert, TextEditor, Loader } from 'ui';\nimport { LinkButton, RoundButton } from 'ui/Buttons';\nimport { downloadService } from 'services';\nimport { useErrorAutocompleteStyles } from 'shared/styles/errorAutocompleteStyles/errorAutocompleteStyles';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nimport { matchFileFormat } from '../shared/validations';\nimport { initializeInputs, checkDocuments, shouldBeRemoved } from '../shared/state';\nimport {\n getProductsProperties,\n getThirdPartyProductSources,\n getScopeProductSources,\n} from '../selectors/shopSelectors';\nimport { createProduct } from '../services';\nimport { fetchShopProductPropertiesAction, fetchShopProductsAction } from '../store/shopActions';\nimport { ShopProduct } from './ShopProduct/ShopProduct';\nimport { ShopProductDocumentsModal } from './ShopProductDocumentsModal';\nimport { ShopProductSourceModal } from './ShopProductSourceModal';\nimport { ShopProductLines } from '../shared/constants/shopProductLines';\nimport { documentInputFields, documentTypes } from '../shared/state/documentsUploader';\n\nconst useStyle = makeStyles((theme) => ({\n input: {\n width: '100%',\n },\n button: {\n minWidth: 120,\n marginRight: 10,\n },\n finishIcon: {\n width: 150,\n height: 150,\n color: theme.palette.primary.main,\n },\n error: {\n color: red[500],\n },\n addButton: {\n height: 55,\n marginTop: 8,\n marginLeft: 10,\n },\n documents: {\n fontSize: 10,\n },\n documentsButton: {\n textTransform: 'none',\n borderColor: theme.palette.primary.main,\n color: theme.palette.primary.main,\n borderRadius: 16,\n height: 32,\n marginRight: theme.spacing(1),\n },\n documentButtonToRemove: {\n borderColor: red[500],\n color: red[500],\n },\n}));\n\nconst validationSchema = Yup.object().shape({\n name: Yup.string().required(),\n description: Yup.string().required(),\n price: Yup.number().nullable(),\n activationFee: Yup.number().nullable(),\n amount: Yup.number(),\n toolType: Yup.mixed().when('productLines', {\n is: (productLines) => productLines.name === ShopProductLines.Tools,\n then: Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n otherwise: Yup.object().nullable(),\n }),\n duration: Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n categories: Yup.array().of(\n Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n ),\n cancelPeriod: Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n productLines: Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n regions: Yup.mixed().when('productLines', {\n is: (productLines) =>\n ![ShopProductLines.Tools, ShopProductLines.Research].includes(productLines.name),\n then: Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n otherwise: Yup.object().nullable(),\n }),\n segments: Yup.mixed().when('productLines', {\n is: (productLines) =>\n ![ShopProductLines.Tools, ShopProductLines.Research].includes(productLines.name),\n then: Yup.array()\n .of(\n Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n )\n .required(),\n otherwise: Yup.array().nullable(),\n }),\n sources: Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n industries: Yup.mixed().when('productLines', {\n is: (productLines) =>\n ![ShopProductLines.Tools, ShopProductLines.Research].includes(productLines.name),\n then: Yup.array()\n .of(\n Yup.object().shape({\n id: Yup.number().required(),\n name: Yup.string().required(),\n }),\n )\n .required(),\n otherwise: Yup.array().nullable(),\n }),\n isFreeTrial: Yup.bool(),\n trialAmount: Yup.number().when(['amount', 'isFreeTrial'], {\n is: (amount, isFreeTrial) => !!amount && isFreeTrial,\n then: Yup.number().required(),\n otherwise: Yup.number(),\n }),\n active: Yup.bool(),\n orderFormInput: Yup.mixed().test('fileFormat', 'Order form have unsupported format', (value) =>\n matchFileFormat(value),\n ),\n productDescriptionInput: Yup.mixed().test(\n 'fileFormat',\n 'Product description have unsupported format',\n (value) => matchFileFormat(value),\n ),\n termsAndConditionsInput: Yup.mixed().test(\n 'fileFormat',\n 'Terms & conditions have unsupported format',\n (value) => matchFileFormat(value),\n ),\n});\n\nconst getInitialValues = (product, properties) =>\n product\n ? {\n name: product.name,\n description: product.description,\n price: product.pricing && product.pricing.length > 0 ? product.pricing[0].price : undefined,\n activationFee:\n product.pricing && product.pricing.length > 0\n ? product.pricing[0].activationFee\n : undefined,\n amount: product.amount || undefined,\n toolType: properties.tools.find(({ id }) => id === product.toolType),\n duration: properties.durations.find(({ name }) => name === product.validity),\n categories: properties.categories,\n cancelPeriod: properties.cancelPeriods.find(({ name }) => name === product.cancelPeriod),\n regions: properties.regions.find(({ name }) => name === product.regions[0]),\n productLines: properties.productLines.find(({ name }) => name === product.productLines[0]),\n segments: properties.segments,\n sources: properties.sources.find(({ name }) => name === product.sources[0]),\n industries: product.industries,\n marketLabel: product.marketLabel || undefined,\n isFreeTrial: product.isFreeTrial,\n trialAmount: product.trialAmount || 0,\n active: product.active,\n ...initializeInputs,\n }\n : { ...initializeInputs };\n\nconst ShopPanelProductCreator = ({ product: editedProduct }) => {\n const { t } = useTranslation();\n const classes = useStyle();\n const autocompleteErrorClasses = useErrorAutocompleteStyles();\n const dispatch = useDispatch();\n\n const productProperties = useSelector(getProductsProperties);\n const scopeSources = useSelector(getScopeProductSources);\n const thirdPartySources = useSelector(getThirdPartyProductSources);\n\n const initialValues = getInitialValues(editedProduct, productProperties.data);\n\n const steps = [\n editedProduct ? t('Specify product properties') : t('Edit product properties'),\n t('Preview'),\n t('Finish'),\n ];\n\n const [activeStep, setActiveStep] = React.useState(0);\n\n const [isLoading, setIsLoading] = useState(false);\n\n const [product, setProduct] = useState(null);\n const [productPreview, setProductPreview] = useState(null);\n\n const [multiplePrice, setMultiplePrice] = useState(false);\n const [prices, setPrices] = useState([]);\n const [activationFees, setActivationFees] = useState([]);\n\n const [showDocumentsModal, setShowDocumentsModal] = useState(false);\n\n const [unitsLabelName, setUnitsLabelName] = useState('');\n const [unitsValue, setUnitsValue] = useState(null);\n\n const [thirdPartySource, setThirdPartySource] = useState(false);\n const [showSourceModal, setShowSourceModal] = useState(false);\n\n const [productImage, setProductImage] = useState(null);\n\n const handleUnitNameChange = (name) => {\n const unit = productProperties.data.units.find(\n ({ productLineName }) => productLineName === name,\n );\n\n setUnitsLabelName(unit ? unit.name : '');\n };\n\n useEffect(() => {\n dispatch(fetchShopProductPropertiesAction());\n dispatch(fetchShopProductsAction());\n\n if (!editedProduct) return;\n\n const isMultiplePrice = editedProduct.pricing && editedProduct.pricing.length > 1;\n\n if (!isMultiplePrice) return;\n\n setMultiplePrice(isMultiplePrice);\n setPrices((editedProduct.pricing ? editedProduct.pricing : []).map(({ price }) => price));\n setActivationFees(\n (editedProduct.pricing ? editedProduct.pricing : []).map(\n ({ activationFee }) => activationFee,\n ),\n );\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (!editedProduct || !initialValues.sources) return;\n\n setThirdPartySource(initialValues.sources.thirdParty);\n handleUnitNameChange(editedProduct.productLines[0]);\n\n if (editedProduct.units.length && !unitsValue) {\n const { name, value } = editedProduct.units[0];\n setUnitsLabelName(name);\n setUnitsValue(value);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [productProperties.data]);\n\n const toggleDocumentsModal = () => setShowDocumentsModal(!showDocumentsModal);\n const toggleSourceModal = () => setShowSourceModal(!showSourceModal);\n\n const handleChangeTierPrice = (value, tierIndex) => {\n const pricesCopy = [...prices];\n\n pricesCopy[tierIndex] = value ? Number(value) : undefined;\n\n setPrices(pricesCopy);\n };\n\n const handleChangeTierFee = (value, tierIndex) => {\n const feesCopy = [...activationFees];\n\n feesCopy[tierIndex] = value ? Number(value) : undefined;\n\n setActivationFees(feesCopy);\n };\n\n const handleNext = () => {\n setActiveStep((prevActiveStep) => prevActiveStep + 1);\n };\n\n const handleBack = () => {\n setActiveStep((prevActiveStep) => prevActiveStep - 1);\n };\n\n const getDocumentsByType = (prod, values, documentType) => {\n const document = prod ? prod.documents.find(({ type }) => type === documentType) : null;\n const toRemove = shouldBeRemoved(values, documentType);\n\n return !toRemove && document ? [{ name: document.name }] : [];\n };\n\n const getLogoUrl = () => {\n if (productImage) {\n return productImage.preview;\n }\n\n return editedProduct ? editedProduct.logo : null;\n };\n\n const handleSubmit = (values, { validateForm }) => {\n validateForm(values);\n\n if (!unitsValue || (!productImage && !editedProduct)) return;\n if (\n multiplePrice &&\n (prices.some((price) => typeof price === 'undefined') ||\n activationFees.some((fee) => typeof fee === 'undefined' || fee === null))\n )\n return;\n\n const inputDocuments = [\n ...(values.orderFormInput\n ? [{ name: values.orderFormInput.name }]\n : getDocumentsByType(editedProduct, values, documentTypes.orderForm)),\n ...(values.productDescriptionInput\n ? [{ name: values.productDescriptionInput.name }]\n : getDocumentsByType(editedProduct, values, documentTypes.productDescription)),\n ...(values.termsAndConditionsInput\n ? [{ name: values.termsAndConditionsInput.name }]\n : getDocumentsByType(editedProduct, values, documentTypes.terms)),\n ];\n\n setProductPreview({\n id: 0,\n products: productProperties.data.productLines.map(({ id, name }) => ({\n type: name,\n availability: values.productLines.id === id,\n upgrade: false,\n })),\n pricing: multiplePrice\n ? prices.map((tierPrice, index) => ({\n price: tierPrice,\n tier: index + 1,\n activationFee: activationFees[index],\n active: true,\n }))\n : [\n {\n tier: null,\n price: values.price,\n activationFee: values.activationFee,\n active: true,\n },\n ],\n name: values.name,\n description: values.description,\n amount: values.amount,\n toolType: values.toolType ? values.toolType.name : null,\n duration: values.duration.name,\n categories: values.categories ? values.categories.map(({ name }) => name) : [],\n cancelPeriod: values.cancelPeriod.name,\n regions: values.regions ? [values.regions.name] : [],\n productLines: [values.productLines.name],\n segments: values.segments ? values.segments.map(({ name }) => name) : [],\n sources: [values.sources.name],\n industries: values.industries ? values.industries : [],\n purchased: false,\n marketLabel: values.marketLabel,\n isFreeTrial: values.isFreeTrial,\n trialAmount: values.trialAmount,\n ...(typeof values.isFreeTrial && { trialPeriod: 14 }),\n units: [{ name: unitsLabelName, value: unitsValue }],\n documents: inputDocuments,\n logo: getLogoUrl(),\n cancellationPeriod: 30,\n validityDays: 365,\n status: '',\n });\n\n setProduct({\n name: values.name,\n description: values.description,\n amount: values.amount,\n toolType: values.toolType ? values.toolType.id : null,\n duration: values.duration.id,\n categories: values.categories ? values.categories.map(({ id }) => id) : [],\n cancelPeriod: values.cancelPeriod.id,\n region: values.regions ? values.regions.id : null,\n productLine: values.productLines.id,\n segments: values.segments ? values.segments.map(({ id }) => id) : [],\n source: values.sources.id,\n industries: values.industries ? values.industries.map(({ id }) => id) : [],\n isFreeTrial: values.isFreeTrial,\n trialAmount: values.trialAmount,\n active: Boolean(values.active),\n marketLabel: values.marketLabel,\n pricing: multiplePrice\n ? prices.map((tierPrice, index) => ({\n price: tierPrice,\n tier: index + 1,\n activationFee: activationFees[index],\n }))\n : [\n {\n tier: null,\n price: values.price,\n activationFee: values.activationFee,\n },\n ],\n ...(typeof values.orderFormInput !== 'undefined' && { orderForm: values.orderFormInput }),\n ...(typeof values.productDescriptionInput !== 'undefined' && {\n productDescription: values.productDescriptionInput,\n }),\n ...(typeof values.termsAndConditionsInput !== 'undefined' && {\n terms: values.termsAndConditionsInput,\n }),\n });\n\n handleNext();\n };\n\n const create = () => {\n setIsLoading(true);\n\n const formData = new FormData();\n\n // eslint-disable-next-line\n for (const field in product) {\n const value = product[field];\n if (typeof value !== 'undefined') {\n formData.append(\n field,\n ['pricing', 'industries', 'segments', 'categories'].includes(field)\n ? JSON.stringify(value)\n : value,\n );\n }\n }\n\n formData.append('units', JSON.stringify([{ name: unitsLabelName, value: unitsValue }]));\n\n if (productImage) {\n formData.append('logo', productImage, productImage.name);\n }\n\n if (editedProduct) {\n formData.append('id', editedProduct.id);\n }\n\n createProduct(formData)\n .then(() => {\n handleNext();\n })\n .catch((error) =>\n dispatch(\n addNotificationAction({\n message: error.message,\n variant: 'error',\n }),\n ),\n )\n .finally(() => {\n setIsLoading(false);\n });\n };\n\n const throwFetchError = () =>\n dispatch(\n addNotificationAction({\n variant: 'error',\n message: t('Failed to get document. Please try again or contact.'),\n }),\n );\n\n const downloadDocument = (id, name) => {\n downloadService({\n path: `/shop/file-download/${id}/`,\n name,\n onError: throwFetchError,\n });\n };\n\n const removeDocument = (type, setFieldValue) => {\n const inputField = documentInputFields[type];\n if (inputField) {\n setFieldValue(documentInputFields[type], null);\n }\n editedProduct.documents = editedProduct.documents\n ? editedProduct.documents.filter((document) => document.type !== type)\n : [];\n };\n\n return (\n <>\n <Stepper activeStep={activeStep}>\n {steps.map((label) => (\n <Step key={label}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n {editedProduct && !editedProduct.ableToEdit && (\n <Box mt={4}>\n <Alert\n message={t(\n 'This product is already purchased. Therefore, only some of the fields are enabled for editing.',\n )}\n />\n </Box>\n )}\n {productProperties.isPending && (\n <Box my={4}>\n <Loader center />\n </Box>\n )}\n <Box display={activeStep === 0 && !productProperties.isPending ? 'block' : 'none'}>\n <Box mt={4} mb={2}>\n <Typography variant=\"h5\">{t('Specify package properties:')}</Typography>\n </Box>\n <Formik\n onSubmit={handleSubmit}\n validationSchema={validationSchema}\n validateOnChange={false}\n initialValues={initialValues}\n >\n {({ handleChange, setFieldValue, values, errors }) => (\n <Form>\n <Box width=\"75%\" margin=\"0 auto\">\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextField\n name=\"name\"\n defaultValue={initialValues && initialValues.name}\n label={t('Name')}\n variant=\"outlined\"\n error={Boolean(errors.name)}\n onChange={handleChange}\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n\n <Grid item xs={6}>\n <TextField\n name=\"amount\"\n label={t('Amount')}\n defaultValue={initialValues && initialValues.amount}\n type=\"number\"\n variant=\"outlined\"\n error={Boolean(errors.amount)}\n onChange={handleChange}\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n <Grid item xs={6}>\n {!!productProperties.data.durations.length && (\n <Autocomplete\n options={productProperties.data.durations}\n getOptionLabel={(option) => option.name}\n isOptionEqualToValue={({ id }, value) => id === value.id}\n onChange={(_, value) => {\n setFieldValue('duration', value);\n }}\n defaultValue={initialValues ? initialValues.duration : null}\n renderInput={(params) => (\n <TextField\n {...params}\n label={t('Duration')}\n variant=\"outlined\"\n classes={errors.duration ? autocompleteErrorClasses : null}\n />\n )}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n )}\n </Grid>\n <Grid item xs={6}>\n {!!productProperties.data.cancelPeriods.length && (\n <Autocomplete\n options={productProperties.data.cancelPeriods}\n getOptionLabel={(option) => option.name}\n isOptionEqualToValue={({ id }, value) => id === value.id}\n onChange={(_, value) => {\n setFieldValue('cancelPeriod', value);\n }}\n defaultValue={initialValues ? initialValues.cancelPeriod : null}\n renderInput={(params) => (\n <TextField\n {...params}\n label={t('Cancel period')}\n variant=\"outlined\"\n classes={errors.cancelPeriod ? autocompleteErrorClasses : null}\n />\n )}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n )}\n </Grid>\n <Grid item xs={6}>\n {!!productProperties.data.categories.length && (\n <Autocomplete\n multiple\n options={productProperties.data.categories}\n getOptionLabel={(option) => option.name}\n isOptionEqualToValue={({ id }, value) => id === value.id}\n onChange={(_, value) => {\n setFieldValue('categories', value);\n }}\n defaultValue={initialValues ? initialValues.categories : null}\n renderInput={(params) => (\n <TextField\n {...params}\n label={t('Categories')}\n variant=\"outlined\"\n classes={errors.categories ? autocompleteErrorClasses : null}\n />\n )}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n )}\n </Grid>\n <Grid item xs={6}>\n {!!productProperties.data.productLines.length && (\n <Autocomplete\n options={productProperties.data.productLines}\n getOptionLabel={(option) => option.name}\n isOptionEqualToValue={({ id }, value) => id === value.id}\n onChange={(_, value) => {\n setFieldValue('productLines', value);\n handleUnitNameChange(value.name);\n setFieldValue('toolType', null);\n }}\n defaultValue={initialValues ? initialValues.productLines : null}\n renderInput={(params) => (\n <TextField\n {...params}\n label={t('Product line')}\n variant=\"outlined\"\n classes={errors.productLines ? autocompleteErrorClasses : null}\n />\n )}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n )}\n </Grid>\n {values.productLines && values.productLines.name === 'Tools' && (\n <Grid item xs={6}>\n {!!productProperties.data.tools.length && (\n <Autocomplete\n options={productProperties.data.tools}\n getOptionLabel={(option) => option.name}\n isOptionEqualToValue={({ id }, value) => id === value.id}\n value={values.toolType}\n onChange={(_, value) => setFieldValue('toolType', value)}\n defaultValue={initialValues ? initialValues.toolType : null}\n renderInput={(params) => (\n <TextField\n {...params}\n label={t('Tool type')}\n variant=\"outlined\"\n classes={errors.toolType ? autocompleteErrorClasses : null}\n />\n )}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n )}\n </Grid>\n )}\n <Grid item xs={6}>\n {!!productProperties.data.segments.length && (\n <Autocomplete\n multiple\n options={productProperties.data.segments}\n getOptionLabel={(option) => option.name}\n isOptionEqualToValue={({ id }, value) => id === value.id}\n onChange={(_, value) => {\n setFieldValue('segments', value);\n }}\n defaultValue={initialValues ? initialValues.segments : null}\n renderInput={(params) => (\n <TextField\n {...params}\n label={t('Segments')}\n variant=\"outlined\"\n classes={errors.segments ? autocompleteErrorClasses : null}\n />\n )}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n )}\n </Grid>\n <Grid item xs={6}>\n {!!productProperties.data.regions.length && (\n <Autocomplete\n options={productProperties.data.regions}\n getOptionLabel={(option) => option.name}\n isOptionEqualToValue={({ id }, value) => id === value.id}\n onChange={(_, value) => {\n setFieldValue('regions', value);\n }}\n defaultValue={initialValues ? initialValues.regions : null}\n renderInput={(params) => (\n <TextField\n {...params}\n label={t('Region')}\n variant=\"outlined\"\n classes={errors.regions ? autocompleteErrorClasses : null}\n />\n )}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n )}\n </Grid>\n <Grid item xs={6}>\n {!!productProperties.data.industries.length && (\n <Autocomplete\n multiple\n options={productProperties.data.industries}\n getOptionLabel={(option) => option.name}\n isOptionEqualToValue={({ id }, value) => id === value.id}\n onChange={(_, value) => {\n setFieldValue('industries', value);\n }}\n defaultValue={initialValues ? initialValues.industries : null}\n renderInput={(params) => (\n <TextField\n {...params}\n label={t('Industry')}\n variant=\"outlined\"\n classes={errors.industries ? autocompleteErrorClasses : null}\n />\n )}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n )}\n </Grid>\n <Grid item xs={12}>\n <TextField\n name=\"marketLabel\"\n defaultValue={initialValues && initialValues.marketLabel}\n label={t('Market label')}\n variant=\"outlined\"\n error={Boolean(errors.marketLabel)}\n onChange={handleChange}\n className={classes.input}\n />\n </Grid>\n <Grid item xs={12}>\n <Grid container alignItems=\"center\">\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Third party source:')}\n </Typography>\n </Grid>\n <Grid item>\n <Checkbox\n name=\"thirdParty\"\n checked={thirdPartySource}\n onChange={(event) => setThirdPartySource(event.target.checked)}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n\n <Grid item xs={12}>\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item xs={11}>\n <Autocomplete\n options={thirdPartySource ? thirdPartySources : scopeSources}\n getOptionLabel={(option) => option.name}\n isOptionEqualToValue={({ id }, value) => id === value.id}\n onChange={(_, value) => {\n setFieldValue('sources', value);\n }}\n defaultValue={initialValues ? initialValues.sources : null}\n renderInput={(params) => (\n <TextField\n {...params}\n label={t('Source')}\n variant=\"outlined\"\n classes={errors.sources ? autocompleteErrorClasses : null}\n />\n )}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n <Grid item xs={1}>\n <Button\n onClick={toggleSourceModal}\n className={classes.addButton}\n variant=\"outlined\"\n color=\"primary\"\n >\n <AddIcon />\n </Button>\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12}>\n <Box mt={2}>\n <Typography variant=\"body1\" component=\"span\">\n {t('Description:')}\n </Typography>\n </Box>\n <Box mt={1}>\n <TextEditor\n placeholder={t('Description')}\n error={Boolean(errors.description)}\n value={values.description}\n onChange={(value) => setFieldValue('description', value)}\n />\n </Box>\n </Grid>\n\n {unitsLabelName && (\n <Grid item xs={12}>\n <Box mt={2}>\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {unitsLabelName}:\n </Typography>\n </Grid>\n <Grid item>\n <Grid container alignItems=\"center\">\n <TextField\n name=\"unitsName\"\n label={unitsLabelName}\n variant=\"outlined\"\n error={!unitsValue}\n defaultValue={editedProduct && unitsValue ? unitsValue : ''}\n type=\"number\"\n onChange={(event) => {\n setUnitsValue(event.target.value);\n }}\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n </Grid>\n </Box>\n </Grid>\n )}\n <Grid container>\n <Grid item xs={8}>\n <Box mt={2}>\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Documents:')}\n </Typography>\n </Grid>\n <Grid item>\n <Grid container alignItems=\"center\">\n <ShopProductDocumentsModal\n documents={editedProduct && editedProduct.documents}\n open={showDocumentsModal}\n setFieldValue={setFieldValue}\n onClose={toggleDocumentsModal}\n />\n <RoundButton\n label={editedProduct ? t('Remove & Upload') : t('Upload')}\n onClick={toggleDocumentsModal}\n marginRight\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n </Grid>\n {checkDocuments(errors).length !== 0 && (\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item>\n <Grid container alignItems=\"center\">\n <Typography\n variant=\"body1\"\n component=\"span\"\n className={clsx(classes.documents, {\n [classes.error]: checkDocuments(errors).length !== 0,\n })}\n >\n {checkDocuments(errors)}\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n )}\n {editedProduct && editedProduct.documents.length !== 0 && (\n <Box mt={2}>\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Uploaded documents:')}\n </Typography>\n </Grid>\n <Grid item>\n <Grid container alignItems=\"center\">\n {editedProduct.documents.map((item) => (\n <Chip\n key={item.id}\n className={clsx(classes.documentsButton, {\n [classes.documentButtonToRemove]: shouldBeRemoved(\n values,\n item.type,\n ),\n })}\n onClick={() => downloadDocument(item.id, item.name)}\n onDelete={() => removeDocument(item.type, setFieldValue)}\n label={item.name}\n />\n ))}\n </Grid>\n </Grid>\n </Grid>\n </Box>\n )}\n </Box>\n <Box mt={2}>\n <Grid container alignItems=\"center\">\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Free trial:')}\n </Typography>\n </Grid>\n <Grid item>\n <Checkbox\n name=\"isFreeTrial\"\n defaultChecked={initialValues && initialValues.isFreeTrial}\n onChange={(event) => setFieldValue('isFreeTrial', event.target.checked)}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n </Box>\n {!!values.amount && values.isFreeTrial && (\n <Box mt={2}>\n <Grid container alignItems=\"center\">\n <Grid item xs={6}>\n <TextField\n name=\"trialAmount\"\n label={t('Free trial amount')}\n defaultValue={initialValues && initialValues.trialAmount}\n type=\"number\"\n variant=\"outlined\"\n error={Boolean(errors.trialAmount)}\n onChange={handleChange}\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n </Box>\n )}\n <Box mt={2}>\n <Grid container alignItems=\"center\">\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Active product:')}\n </Typography>\n </Grid>\n <Grid item>\n <Checkbox\n name=\"active\"\n defaultChecked={initialValues && initialValues.active}\n onChange={(event) => setFieldValue('active', event.target.checked)}\n />\n </Grid>\n </Grid>\n </Box>\n <Box mt={2}>\n <Grid container alignItems=\"center\">\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Specify price for every tier:')}\n </Typography>\n </Grid>\n <Grid item>\n <Checkbox\n checked={multiplePrice}\n onChange={(event) => setMultiplePrice(event.target.checked)}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n </Box>\n <Box mt={2}>\n {multiplePrice && productProperties.data.tiers ? (\n productProperties.data.tiers.map((tier, index) => (\n <Grid container alignItems=\"center\" spacing={2} key={tier.id}>\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {tier.name}\n </Typography>\n </Grid>\n <Grid item>\n <TextField\n name=\"price\"\n label={t('Price')}\n type=\"number\"\n variant=\"outlined\"\n error={\n multiplePrice &&\n (typeof prices[index] === 'undefined' ||\n (prices[index] === 0 && values.isFreeTrial))\n }\n defaultValue={multiplePrice && prices[index]}\n onChange={(event) =>\n handleChangeTierPrice(event.target.value, index)\n }\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n <Grid item>\n <TextField\n name=\"activationFee\"\n label={t('Activation fee')}\n type=\"number\"\n variant=\"outlined\"\n error={\n multiplePrice &&\n (typeof activationFees[index] === 'undefined' ||\n (prices[index] === 0 && activationFees[index] !== 0))\n }\n defaultValue={multiplePrice && activationFees[index]}\n onChange={(event) => handleChangeTierFee(event.target.value, index)}\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n ))\n ) : (\n <>\n <Grid item xs={6}>\n <TextField\n name=\"price\"\n label={t('Price')}\n type=\"number\"\n variant=\"outlined\"\n error={\n !multiplePrice &&\n (typeof values.price === 'undefined' ||\n (values.price === 0 && values.isFreeTrial))\n }\n {...(!multiplePrice &&\n initialValues &&\n typeof values.price !== 'undefined'\n ? { defaultValue: initialValues.price }\n : {})}\n onChange={handleChange}\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n name=\"activationFee\"\n label={t('Activation fee')}\n type=\"number\"\n variant=\"outlined\"\n error={\n !multiplePrice &&\n (typeof values.activationFee === 'undefined' ||\n (values.price === 0 && values.activationFee !== 0))\n }\n {...(!multiplePrice &&\n initialValues &&\n typeof values.activationFee !== 'undefined'\n ? { defaultValue: initialValues.activationFee }\n : {})}\n onChange={handleChange}\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </>\n )}\n </Box>\n </Grid>\n <Grid item xs={4}>\n <Box mt={2}>\n <Typography variant=\"body1\" component=\"span\">\n {t('Product image:')}\n </Typography>\n <Box mt={2}>\n <FileUploader\n fileUrl={\n editedProduct &&\n editedProduct.logo &&\n `${FULL_API_URL}${editedProduct.logo}`\n }\n onChange={(img) => setProductImage(img[0])}\n error={!productImage && !editedProduct}\n maxSizeMb={3}\n />\n </Box>\n </Box>\n </Grid>\n </Grid>\n </Box>\n <Box mt={4}>\n <Grid container justifyContent=\"flex-end\">\n <Button\n color=\"primary\"\n variant=\"contained\"\n type=\"submit\"\n className={classes.button}\n >\n {t('Next')}\n </Button>\n </Grid>\n </Box>\n </Form>\n )}\n </Formik>\n <ShopProductSourceModal open={showSourceModal} onClose={toggleSourceModal} />\n </Box>\n {activeStep === 1 && (\n <>\n <Box mt={4}>\n <ShopProduct data={productPreview} preview />\n </Box>\n <Grid container justifyContent=\"flex-end\">\n <Button\n onClick={handleBack}\n className={classes.button}\n color=\"primary\"\n variant=\"outlined\"\n >\n {t('Back')}\n </Button>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={create}\n className={classes.button}\n disabled={isLoading}\n >\n {editedProduct ? t('Update product') : t('Create product')}\n </Button>\n </Grid>\n </>\n )}\n {activeStep === 2 && (\n <Box p={5}>\n <Grid container justifyContent=\"center\" alignItems=\"center\" direction=\"column\">\n <Grid item>\n <CheckCircleOutlineIcon className={classes.finishIcon} />\n </Grid>\n <Grid item>\n <Typography variant=\"h5\">\n {editedProduct\n ? t('Product successfully edited')\n : t('Product successfully created')}\n </Typography>\n </Grid>\n <Grid item>\n <Box pt={3}>\n <LinkButton\n to=\"/subscriptions/panel\"\n label={t('View product list')}\n color=\"primary\"\n variant=\"contained\"\n />\n </Box>\n </Grid>\n </Grid>\n </Box>\n )}\n </>\n );\n};\n\nShopPanelProductCreator.defaultProps = {\n product: null,\n};\n\nShopPanelProductCreator.propTypes = {\n product: PropTypes.object,\n};\n\nexport { ShopPanelProductCreator };\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Formik, Form } from 'formik';\nimport * as Yup from 'yup';\nimport { makeStyles } from '@mui/styles';\nimport { useTranslation } from 'react-i18next';\nimport clsx from 'clsx';\nimport {\n TextField,\n Grid,\n Box,\n Button,\n Stepper,\n Step,\n StepLabel,\n Typography,\n Checkbox,\n Chip,\n} from '@mui/material';\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\nimport { red } from '@mui/material/colors';\nimport uniqBy from 'lodash/uniqBy';\n\nimport { FULL_API_URL } from 'utils';\nimport { downloadService } from 'services';\nimport { FileUploader, Alert, TextEditor } from 'ui';\nimport { LinkButton, RoundButton } from 'ui/Buttons';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nimport { matchFileFormat } from '../shared/validations';\nimport { initializeInputs, checkDocuments, shouldBeRemoved } from '../shared/state';\nimport { createProduct } from '../services';\nimport { fetchShopProductsAction, fetchShopProductPropertiesAction } from '../store/shopActions';\nimport { getProductsProperties } from '../selectors/shopSelectors';\nimport { ShopProduct } from './ShopProduct/ShopProduct';\nimport { ShopSelectionList } from './ShopSelectionList/ShopSelectionList';\nimport { ShopProductDocumentsModal } from './ShopProductDocumentsModal';\nimport { documentInputFields, documentTypes } from '../shared/state/documentsUploader';\n\nconst useStyle = makeStyles((theme) => ({\n input: {\n width: '100%',\n },\n button: {\n minWidth: 120,\n marginLeft: 10,\n },\n finishIcon: {\n width: 150,\n height: 150,\n color: theme.palette.primary.main,\n },\n container: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: theme.palette.primary.main,\n },\n header: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n },\n error: {\n color: red[500],\n },\n documentsButton: {\n textTransform: 'none',\n borderColor: theme.palette.primary.main,\n color: theme.palette.primary.main,\n borderRadius: 16,\n height: 32,\n marginRight: theme.spacing(1),\n },\n documentButtonToRemove: {\n borderColor: red[500],\n color: red[500],\n },\n}));\n\nconst validationSchema = Yup.object().shape({\n name: Yup.string().required(),\n description: Yup.string().required(),\n price: Yup.number().nullable(),\n activationFee: Yup.number().nullable(),\n isFreeTrial: Yup.bool(),\n active: Yup.bool(),\n orderFormInput: Yup.mixed().test('fileFormat', 'Order form have unsupported format', (value) =>\n matchFileFormat(value),\n ),\n productDescriptionInput: Yup.mixed().test(\n 'fileFormat',\n 'Product description have unsupported format',\n (value) => matchFileFormat(value),\n ),\n termsAndConditionsInput: Yup.mixed().test(\n 'fileFormat',\n 'Terms & conditions have unsupported format',\n (value) => matchFileFormat(value),\n ),\n});\n\nconst columns = [\n 'name',\n 'category',\n 'region',\n 'segment',\n 'productLines',\n 'industry',\n 'source',\n 'pricing',\n 'validity',\n 'amount',\n];\n\nconst getInitialValues = (product) =>\n product\n ? {\n name: product.name,\n description: product.description,\n price: product.pricing && product.pricing.length > 0 ? product.pricing[0].price : undefined,\n activationFee:\n product.pricing && product.pricing.length > 0\n ? product.pricing[0].activationFee\n : undefined,\n isFreeTrial: product.isFreeTrial,\n active: product.active,\n marketLabel: product.marketLabel || undefined,\n ...initializeInputs,\n }\n : { ...initializeInputs };\n\nconst ShopPanelPackageCreator = ({ product: editedProduct }) => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n\n const products = useSelector(({ shop }) => shop.products);\n const productProperties = useSelector(getProductsProperties);\n\n const [productsToAddIds, setProductsToAddIds] = useState([]);\n const [productsToRemove, setProductsToRemove] = useState([]);\n\n const [addedProducts, setAddedProducts] = useState(\n editedProduct\n ? editedProduct.packageProducts.map((packageProduct) =>\n products.data.find(({ id }) => id === packageProduct.id),\n )\n : [],\n );\n\n const initialValues = getInitialValues(editedProduct);\n\n const [isLoading, setIsLoading] = useState(false);\n\n const steps = [\n t('Select products'),\n editedProduct ? t('Edit package properties') : t('Specify package properties'),\n t('Preview'),\n t('Finish'),\n ];\n\n const [activeStep, setActiveStep] = React.useState(editedProduct ? 1 : 0);\n\n const [product, setProduct] = useState(null);\n const [productPreview, setProductPreview] = useState(null);\n\n const [multiplePrice, setMultiplePrice] = useState(false);\n const [prices, setPrices] = useState([]);\n const [activationFees, setActivationFees] = useState([]);\n\n const [showDocumentsModal, setShowDocumentsModal] = useState(false);\n\n const [productImage, setProductImage] = useState(null);\n\n useEffect(() => {\n dispatch(fetchShopProductPropertiesAction());\n dispatch(fetchShopProductsAction());\n\n if (!editedProduct) return;\n\n const isMultiplePrice = editedProduct.pricing.length > 1;\n\n if (!isMultiplePrice) return;\n\n setMultiplePrice(isMultiplePrice);\n setPrices(editedProduct.pricing.map(({ price }) => price));\n setActivationFees(editedProduct.pricing.map(({ activationFee }) => activationFee));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const toggleDocumentsModal = () => setShowDocumentsModal(!showDocumentsModal);\n\n const handleNext = () => {\n setActiveStep((prevActiveStep) => prevActiveStep + 1);\n };\n\n const handleBack = () => {\n setActiveStep((prevActiveStep) => prevActiveStep - 1);\n };\n\n const getDocumentsByType = (prod, values, documentType) => {\n const document = prod ? prod.documents.find(({ type }) => type === documentType) : null;\n const toRemove = shouldBeRemoved(values, documentType);\n\n return !toRemove && document ? [{ name: document.name }] : [];\n };\n\n const getLogoUrl = () => {\n if (productImage) {\n return productImage.preview;\n }\n\n return editedProduct ? editedProduct.logo : null;\n };\n\n const handleSubmit = (values, { validateForm }) => {\n validateForm(values);\n\n if (!productImage && !editedProduct) return;\n if (\n multiplePrice &&\n (prices.some((price) => typeof price === 'undefined') ||\n activationFees.some((fee) => typeof fee === 'undefined' || fee === null))\n )\n return;\n\n const productValues = {\n categories: [],\n regions: [],\n segments: [],\n industries: [],\n sources: [],\n };\n\n addedProducts.forEach((addedProduct) => {\n Object.keys(productValues).forEach((key) => {\n if (key === 'industries') {\n productValues[key] = uniqBy([...productValues[key], ...addedProduct[key]], 'name');\n } else {\n const currentValues = productValues[key];\n productValues[key] = [...new Set([...currentValues, ...addedProduct[key]])];\n }\n });\n });\n\n const allProductLines = addedProducts.map(({ productLines }) => productLines[0]);\n\n const inputDocuments = [\n ...(values.orderFormInput\n ? [{ name: values.orderFormInput.name }]\n : getDocumentsByType(editedProduct, values, documentTypes.orderForm)),\n ...(values.productDescriptionInput\n ? [{ name: values.productDescriptionInput.name }]\n : getDocumentsByType(editedProduct, values, documentTypes.productDescription)),\n ...(values.termsAndConditionsInput\n ? [{ name: values.termsAndConditionsInput.name }]\n : getDocumentsByType(editedProduct, values, documentTypes.terms)),\n ];\n\n setProductPreview({\n id: 0,\n products: productProperties.data.productLines.map(({ name }) => ({\n type: name,\n availability: allProductLines.includes(name),\n upgrade: false,\n })),\n pricing: multiplePrice\n ? prices.map((tierPrice, index) => ({\n price: tierPrice,\n tier: index + 1,\n activationFee: activationFees[index],\n active: true,\n }))\n : [\n {\n tier: null,\n price: values.price,\n activationFee: values.activationFee,\n active: true,\n },\n ],\n name: values.name,\n description: values.description,\n ...productValues,\n isPackage: true,\n packageProducts: addedProducts.map(({ id, productLines }) => ({ id, type: productLines[0] })),\n units: 0,\n documents: inputDocuments,\n purchased: false,\n marketLabel: values.marketLabel,\n isFreeTrial: values.isFreeTrial,\n ...(typeof values.isFreeTrial && { trialPeriod: 14 }),\n productLines: [],\n logo: getLogoUrl(),\n cancellationPeriod: 30,\n validityDays: 365,\n });\n\n setProduct({\n name: values.name,\n description: values.description,\n packageProducts: addedProducts.map(({ id }) => id).join(','),\n pricing: multiplePrice\n ? prices.map((tierPrice, index) => ({\n price: tierPrice,\n tier: index + 1,\n activationFee: activationFees[index],\n }))\n : [\n {\n tier: null,\n price: values.price,\n activationFee: values.activationFee,\n },\n ],\n isFreeTrial: values.isFreeTrial,\n active: values.active,\n marketLabel: values.marketLabel,\n ...(typeof values.orderFormInput !== 'undefined' && { orderForm: values.orderFormInput }),\n ...(typeof values.productDescriptionInput !== 'undefined' && {\n productDescription: values.productDescriptionInput,\n }),\n ...(typeof values.termsAndConditionsInput !== 'undefined' && {\n terms: values.termsAndConditionsInput,\n }),\n });\n\n handleNext();\n };\n\n const handleChangeTierPrice = (value, tierIndex) => {\n const pricesCopy = [...prices];\n\n pricesCopy[tierIndex] = value ? Number(value) : undefined;\n\n setPrices(pricesCopy);\n };\n\n const handleChangeTierFee = (value, tierIndex) => {\n const feesCopy = [...activationFees];\n\n feesCopy[tierIndex] = value ? Number(value) : undefined;\n\n setActivationFees(feesCopy);\n };\n\n const create = () => {\n setIsLoading(true);\n\n const formData = new FormData();\n\n // eslint-disable-next-line\n for (const field in product) {\n const value = product[field];\n formData.append(field, field === 'pricing' ? JSON.stringify(value) : value);\n }\n\n if (productImage) {\n formData.append('logo', productImage, productImage.name);\n }\n\n if (editedProduct) {\n formData.append('id', editedProduct.id);\n }\n\n createProduct(formData)\n .then(() => {\n handleNext();\n })\n .catch((error) =>\n dispatch(\n addNotificationAction({\n message: error.message,\n variant: 'error',\n }),\n ),\n )\n .finally(() => {\n setIsLoading(false);\n });\n };\n\n const handleAddProducts = () => {\n const addedProductsIds = addedProducts.map(({ id }) => id);\n const productsToAdd = products.data.filter(\n ({ id }) => productsToAddIds.includes(id) && !addedProductsIds.includes(id),\n );\n\n const productsToAddCategories = [\n ...new Set(productsToAdd.map(({ categories }) => categories[0])),\n ];\n const addedProductsCategories = addedProducts.map(({ categories }) => categories[0]);\n\n // prevent from adding products with different categories\n if (\n productsToAddCategories.length > 1 ||\n (addedProducts.length &&\n productsToAddCategories.length &&\n !addedProductsCategories.includes(productsToAddCategories[0]))\n ) {\n dispatch(\n addNotificationAction({\n message: t('Package cannot contain products with different categories'),\n variant: 'error',\n }),\n );\n return;\n }\n\n setAddedProducts([\n ...addedProducts,\n ...products.data.filter(\n ({ id }) => productsToAddIds.includes(id) && !addedProductsIds.includes(id),\n ),\n ]);\n\n setProductsToAddIds([]);\n };\n\n const handleRemoveProducts = () => {\n setAddedProducts(addedProducts.filter(({ id }) => !productsToRemove.includes(id)));\n };\n\n const throwFetchError = () =>\n dispatch(\n addNotificationAction({\n variant: 'error',\n message: t('Failed to get document. Please try again or contact.'),\n }),\n );\n\n const downloadDocument = (id, name) => {\n downloadService({\n path: `/shop/file-download/${id}/`,\n name,\n onError: throwFetchError,\n });\n };\n\n const removeDocument = (type, setFieldValue) => {\n const inputField = documentInputFields[type];\n if (inputField) {\n setFieldValue(documentInputFields[type], null);\n }\n editedProduct.documents = editedProduct.documents\n ? editedProduct.documents.filter((document) => document.type !== type)\n : [];\n };\n\n return (\n <>\n <Stepper activeStep={activeStep}>\n {steps.map((label, index) => (\n <Step key={label} completed={editedProduct && index === 0}>\n <StepLabel>{label}</StepLabel>\n </Step>\n ))}\n </Stepper>\n {editedProduct && !editedProduct.ableToEdit && (\n <Box mt={4}>\n <Alert message={t('This package is already purchased and cannot be edited')} />\n </Box>\n )}\n {activeStep === 0 && (\n <>\n <Box mt={2} mb={2}>\n <Typography variant=\"h5\">{t('Select and add products to package:')}</Typography>\n </Box>\n <ShopSelectionList\n options={{ search: true }}\n products={products.data}\n onSelectionChange={(items) => setProductsToAddIds(items)}\n toolbar={\n <Button\n onClick={handleAddProducts}\n color=\"primary\"\n variant=\"contained\"\n size=\"small\"\n disabled={!productsToAddIds.length}\n >\n {t('Add products')}\n </Button>\n }\n columns={columns}\n editMode\n />\n <Box mt={2} p={2} className={classes.header}>\n <Typography variant=\"h5\">{t('Added products:')}</Typography>\n </Box>\n <Box className={classes.container}>\n <ShopSelectionList\n products={addedProducts}\n onSelectionChange={(items) => setProductsToRemove(items)}\n toolbar={\n <Button\n onClick={handleRemoveProducts}\n color=\"primary\"\n variant=\"contained\"\n size=\"small\"\n disabled={!productsToRemove.length}\n >\n {t('Remove products')}\n </Button>\n }\n columns={columns}\n editMode\n />\n </Box>\n <Box mt={2}>\n <Grid container justifyContent=\"flex-end\">\n <Button\n color=\"primary\"\n variant=\"contained\"\n className={classes.button}\n disabled={addedProducts.length < 2}\n onClick={handleNext}\n >\n {t('Next')}\n </Button>\n </Grid>\n </Box>\n </>\n )}\n <Box display={activeStep === 1 ? 'block' : 'none'}>\n <Box mt={2}>\n <Typography variant=\"h5\">{t('Selected products:')}</Typography>\n </Box>\n <ShopSelectionList\n options={{ selectableRows: false }}\n products={addedProducts}\n onSelectionChange={(items) => setProductsToRemove(items)}\n columns={columns}\n editMode\n />\n <Box mt={6} mb={2}>\n <Typography variant=\"h5\">{t('Specify package properties:')}</Typography>\n </Box>\n <Formik\n onSubmit={handleSubmit}\n validationSchema={validationSchema}\n initialValues={initialValues}\n >\n {({ handleChange, setFieldValue, values, errors }) => (\n <Form>\n <Box width=\"75%\" margin=\"0 auto\">\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <TextField\n name=\"name\"\n label={t('Name')}\n variant=\"outlined\"\n defaultValue={initialValues && initialValues.name}\n error={Boolean(errors.name)}\n onChange={handleChange}\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n <Grid item xs={12}>\n <TextField\n name=\"marketLabel\"\n defaultValue={initialValues && initialValues.marketLabel}\n label={t('Market label')}\n variant=\"outlined\"\n error={Boolean(errors.marketLabel)}\n onChange={handleChange}\n className={classes.input}\n />\n </Grid>\n <Grid item xs={12}>\n <Typography variant=\"body1\" component=\"span\">\n {t('Description:')}\n </Typography>\n <Box mt={1}>\n <TextEditor\n placeholder={t('Description')}\n error={Boolean(errors.description)}\n value={values.description}\n onChange={(value) => setFieldValue('description', value)}\n />\n </Box>\n </Grid>\n <Grid container>\n <Grid item xs={8}>\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Documents:')}\n </Typography>\n </Grid>\n <Grid item>\n <Grid container alignItems=\"center\">\n <ShopProductDocumentsModal\n documents={editedProduct && editedProduct.documents}\n open={showDocumentsModal}\n setFieldValue={setFieldValue}\n onClose={toggleDocumentsModal}\n />\n <RoundButton\n label={editedProduct ? t('Remove & Upload') : t('Upload')}\n onClick={toggleDocumentsModal}\n marginRight\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n </Grid>\n {checkDocuments(errors).length !== 0 && (\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item>\n <Grid container alignItems=\"center\">\n <Typography\n variant=\"body1\"\n component=\"span\"\n className={clsx(classes.documents, {\n [classes.error]: checkDocuments(errors).length !== 0,\n })}\n >\n {checkDocuments(errors)}\n </Typography>\n </Grid>\n </Grid>\n </Grid>\n )}\n {editedProduct && editedProduct.documents.length !== 0 && (\n <Box mt={2}>\n <Grid container alignItems=\"center\" spacing={1}>\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Uploaded documents:')}\n </Typography>\n </Grid>\n <Grid item>\n <Grid container alignItems=\"center\">\n {editedProduct.documents.map((item) => (\n <Chip\n key={item.id}\n className={clsx(classes.documentsButton, {\n [classes.documentButtonToRemove]: shouldBeRemoved(\n values,\n item.type,\n ),\n })}\n onClick={() => downloadDocument(item.id, item.name)}\n onDelete={() => removeDocument(item.type, setFieldValue)}\n label={item.name}\n />\n ))}\n </Grid>\n </Grid>\n </Grid>\n </Box>\n )}\n <Grid item xs={12}>\n <Grid container alignItems=\"center\">\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Free trial:')}\n </Typography>\n </Grid>\n <Grid item>\n <Checkbox\n name=\"isFreeTrial\"\n defaultChecked={initialValues && initialValues.isFreeTrial}\n onChange={(event) =>\n setFieldValue('isFreeTrial', event.target.checked)\n }\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12}>\n <Grid container alignItems=\"center\">\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Active product:')}\n </Typography>\n </Grid>\n <Grid item>\n <Checkbox\n name=\"active\"\n defaultChecked={initialValues && initialValues.active}\n onChange={(event) => setFieldValue('active', event.target.checked)}\n />\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12}>\n <Grid container alignItems=\"center\">\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {t('Specify price for every tier:')}\n </Typography>\n </Grid>\n <Grid item>\n <Checkbox\n checked={multiplePrice}\n onChange={(event) => setMultiplePrice(event.target.checked)}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n </Grid>\n {multiplePrice ? (\n <Grid item xs={12}>\n {productProperties.data.tiers.map((tier, index) => (\n <Grid container alignItems=\"center\" spacing={2} key={tier.id}>\n <Grid item>\n <Typography variant=\"body1\" component=\"span\">\n {tier.name}\n </Typography>\n </Grid>\n <Grid item>\n <TextField\n name=\"price\"\n label={t('Price')}\n type=\"number\"\n variant=\"outlined\"\n defaultValue={multiplePrice && prices[index]}\n error={\n multiplePrice &&\n (typeof prices[index] === 'undefined' ||\n (prices[index] === 0 && values.isFreeTrial))\n }\n onChange={(event) =>\n handleChangeTierPrice(event.target.value, index)\n }\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n <Grid item>\n <TextField\n name=\"activationFee\"\n label={t('Activation fee')}\n type=\"number\"\n variant=\"outlined\"\n defaultValue={multiplePrice && activationFees[index]}\n error={\n multiplePrice &&\n (typeof activationFees[index] === 'undefined' ||\n (prices[index] === 0 && activationFees[index] !== 0))\n }\n onChange={(event) =>\n handleChangeTierFee(event.target.value, index)\n }\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </Grid>\n ))}\n </Grid>\n ) : (\n <>\n <Grid item xs={6}>\n <TextField\n name=\"price\"\n label={t('Price')}\n type=\"number\"\n variant=\"outlined\"\n {...(!multiplePrice &&\n initialValues &&\n typeof initialValues.price !== 'undefined'\n ? { defaultValue: initialValues.price }\n : {})}\n error={\n !multiplePrice &&\n (typeof values.price === 'undefined' ||\n (values.price === 0 && values.isFreeTrial))\n }\n onChange={handleChange}\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n <Grid item xs={6}>\n <TextField\n name=\"activationFee\"\n label={t('Activation fee')}\n type=\"number\"\n variant=\"outlined\"\n {...(!multiplePrice &&\n initialValues &&\n typeof initialValues.activationFee !== 'undefined'\n ? { defaultValue: initialValues.activationFee }\n : {})}\n error={\n !multiplePrice &&\n (typeof values.activationFee === 'undefined' ||\n (values.price === 0 && values.activationFee !== 0))\n }\n onChange={handleChange}\n className={classes.input}\n disabled={editedProduct && !editedProduct.ableToEdit}\n />\n </Grid>\n </>\n )}\n </Grid>\n <Grid item xs={4}>\n <Box mt={2}>\n <Typography variant=\"body1\" component=\"span\">\n {t('Product image:')}\n </Typography>\n <Box mt={2}>\n <FileUploader\n fileUrl={\n editedProduct &&\n editedProduct.logo &&\n `${FULL_API_URL}${editedProduct.logo}`\n }\n onChange={(img) => setProductImage(img[0])}\n error={!productImage && !editedProduct}\n maxSizeMb={3}\n />\n </Box>\n </Box>\n </Grid>\n </Grid>\n </Grid>\n </Box>\n <Box mt={4}>\n <Grid container justifyContent=\"flex-end\">\n {!editedProduct && activeStep !== 0 && (\n <Button\n onClick={handleBack}\n className={classes.button}\n color=\"primary\"\n variant=\"outlined\"\n >\n {t('Back')}\n </Button>\n )}\n <Button\n color=\"primary\"\n variant=\"contained\"\n type=\"submit\"\n className={classes.button}\n >\n {t('Next')}\n </Button>\n </Grid>\n </Box>\n </Form>\n )}\n </Formik>\n </Box>\n {activeStep === 2 && (\n <>\n <Box mt={4}>\n <ShopProduct data={productPreview} preview />\n </Box>\n <Grid container justifyContent=\"flex-end\">\n <Button\n onClick={handleBack}\n className={classes.button}\n color=\"primary\"\n variant=\"outlined\"\n >\n {t('Back')}\n </Button>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={create}\n className={classes.button}\n disabled={isLoading}\n >\n {editedProduct ? t('Update package') : t('Create package')}\n </Button>\n </Grid>\n </>\n )}\n {activeStep === 3 && (\n <Box p={5}>\n <Grid container justifyContent=\"center\" alignItems=\"center\" direction=\"column\">\n <Grid item>\n <CheckCircleOutlineIcon className={classes.finishIcon} />\n </Grid>\n <Grid item>\n <Typography variant=\"h5\">\n {editedProduct\n ? t('Package successfully edited')\n : t('Package successfully created')}\n </Typography>\n </Grid>\n <Grid item>\n <Box pt={3}>\n <LinkButton\n to=\"/subscriptions/panel\"\n label={t('View product list')}\n color=\"primary\"\n variant=\"contained\"\n />\n </Box>\n </Grid>\n </Grid>\n </Box>\n )}\n </>\n );\n};\n\nShopPanelPackageCreator.defaultProps = {\n product: null,\n};\n\nShopPanelPackageCreator.propTypes = {\n product: PropTypes.object,\n};\n\nexport { ShopPanelPackageCreator };\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Typography, Paper } from '@mui/material';\n\nimport { TabsPanel } from 'ui';\n\nimport { shopSubscriptionTypes } from '../../shared/constants/shopSubscriptionTypes';\nimport { fetchShopProductsAction, fetchShopProductPropertiesAction } from '../../store/shopActions';\nimport { ShopPanelProductCreator } from '../../components/ShopPanelProductCreator';\nimport { ShopPanelPackageCreator } from '../../components/ShopPanelPackageCreator';\n\nconst ShopPanelCreator = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const [activeTab] = useState(shopSubscriptionTypes.product);\n\n useEffect(() => {\n dispatch(fetchShopProductPropertiesAction());\n dispatch(fetchShopProductsAction());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('Subscriptions panel')}</Typography>\n </Box>\n\n <Paper elevation={3}>\n <TabsPanel active={activeTab}>\n <Box p={2} label={t('Product')} value={shopSubscriptionTypes.product}>\n <ShopPanelProductCreator />\n </Box>\n <Box p={2} label={t('Package')} value={shopSubscriptionTypes.package}>\n <ShopPanelPackageCreator />\n </Box>\n </TabsPanel>\n </Paper>\n </>\n );\n};\n\nexport { ShopPanelCreator };\n","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgArrowLeft = function SvgArrowLeft(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"arrow-left_svg__feather arrow-left_svg__feather-arrow-left\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 12H5M12 19l-7-7 7-7\"\n })));\n};\n\nexport default SvgArrowLeft;","import React from 'react';\nimport { Button } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport DownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport UpIcon from '@mui/icons-material/KeyboardArrowUp';\n\nimport { setEventsSortDesc } from 'modules/events/store/eventsActions';\nimport { getEventSortDesc } from 'modules/events/selectors/eventsSelectors';\n\nconst useStyle = makeStyles({\n button: {\n height: 45,\n padding: '0 15px',\n fontSize: '0.875rem',\n },\n});\n\nconst EventsSortSelect = () => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n const sortDesc = useSelector(getEventSortDesc);\n\n const handleSortingChange = () => dispatch(setEventsSortDesc(!sortDesc));\n\n return (\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n onClick={handleSortingChange}\n endIcon={sortDesc ? <UpIcon /> : <DownIcon />}\n >\n {t('Sort by date')}\n </Button>\n );\n};\n\nexport { EventsSortSelect };\n","export const eventsFilters = {\n category: {\n CREDIT_ANALYSIS: 'Credit Analysis',\n ESG_ANALYSIS: 'ESG Analysis',\n FUNDS_ANALYSIS: 'Funds Analysis',\n },\n timeline: {\n upcoming: 'Upcoming events',\n past: 'Past events',\n },\n favourites: 'Favorites',\n};\n","import React, { FC } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { Grid, Button, Box } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\n\nimport {\n setEventsCategoryFilter,\n setEventsTimelineFilter,\n setEventsFavoritesFilter,\n} from 'modules/events/store/eventsActions';\nimport { EventCategory } from 'modules/events/types/eventsTypes';\nimport { eventsFilters } from 'modules/events/constants/eventsFilters';\n\nimport { getEventsFilters } from '../../selectors/eventsSelectors';\n\nconst useStyle = makeStyles(theme => ({\n button: {\n height: 45,\n padding: '0 15px',\n marginRight: 10,\n fontSize: '0.875rem',\n },\n formControl: {\n marginTop: 0,\n marginRight: theme.spacing(1),\n minWidth: 120,\n\n '& fieldset': {\n top: 0,\n },\n\n '& legend': {\n display: 'none',\n },\n },\n label: {\n top: -16,\n marginLeft: 15,\n textTransform: 'uppercase',\n fontWeight: 500,\n fontSize: '0.8125rem',\n },\n container: {\n position: 'relative',\n marginBottom: theme.spacing(2),\n },\n favorite: {\n height: 45,\n padding: '0 15px',\n fontSize: '0.875rem',\n },\n}));\n\nconst getCategoryFilter = (value: string): EventCategory | '' => {\n if (value === 'CREDIT_ANALYSIS' || value === 'ESG_ANALYSIS' || value === 'FUNDS_ANALYSIS')\n return value as EventCategory;\n\n return '';\n};\n\nconst EventsFilters: FC = () => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n const filters = useSelector(getEventsFilters);\n\n const handleCategoryFilterChange = (value: string) => () => {\n const category = getCategoryFilter(value);\n dispatch(setEventsCategoryFilter(category === filters.category ? '' : category));\n };\n\n const handleTimelineFilterChange = (value: string) => () =>\n dispatch(setEventsTimelineFilter(value === filters.timeline ? '' : value));\n\n const handleFavoritesFilterChange = () => dispatch(setEventsFavoritesFilter(!filters.favourites));\n\n return <>\n <Box className={classes.container}>\n <Grid container justifyContent=\"space-between\">\n <Grid item key=\"categories\">\n <Button\n key=\"all\"\n variant={filters.category ? 'outlined' : 'contained'}\n color=\"primary\"\n className={classes.button}\n size=\"small\"\n onClick={handleCategoryFilterChange('')}\n >\n {t('All Events')}\n </Button>\n {Object.keys(eventsFilters.category).map(name => (\n <Button\n key={name}\n variant={filters.category === name ? 'contained' : 'outlined'}\n color=\"primary\"\n className={classes.button}\n size=\"small\"\n onClick={handleCategoryFilterChange(name as EventCategory)}\n >\n {t(eventsFilters.category[name as keyof typeof eventsFilters.category])}\n </Button>\n ))}\n </Grid>\n <Grid item>\n {Object.keys(eventsFilters.timeline).map(name => (\n <Button\n key={name}\n variant={filters.timeline === name ? 'contained' : 'outlined'}\n color=\"primary\"\n className={classes.button}\n onClick={handleTimelineFilterChange(name)}\n >\n {t(eventsFilters.timeline[name as keyof typeof eventsFilters.timeline])}\n </Button>\n ))}\n <Button\n variant={filters.favourites ? 'contained' : 'outlined'}\n color=\"primary\"\n className={classes.favorite}\n onClick={handleFavoritesFilterChange}\n >\n {t(eventsFilters.favourites)}\n </Button>\n </Grid>\n </Grid>\n </Box>\n </>;\n};\n\nexport { EventsFilters };\n","import React, { FC, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Paper, Box, Grid, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\n\nimport { Loader } from 'ui';\nimport { EventsProduct } from '../components/EventsProduct/EventsProduct';\nimport { EventsSortSelect } from '../components/EventsSortSelect/EventsSortSelect';\nimport { EventsFilters } from '../components/EventsFilters/EventsFilters';\nimport { getEvents } from '../selectors/eventsSelectors';\nimport { fetchEventsAction } from '../store/eventsActions';\n\nconst useStyle = makeStyles(() => ({\n title: {\n display: 'flex',\n alignItems: 'center',\n },\n counter: {\n fontSize: 15,\n marginRight: 20,\n marginBottom: 2,\n fontWeight: 500,\n },\n button: {\n height: 45,\n marginLeft: 10,\n },\n noDataText: {\n fontSize: 18,\n },\n}));\n\nconst Events: FC = () => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n\n // @ts-ignore\n const { events: allEvents } = useSelector(({ events }) => events);\n const events = useSelector(getEvents);\n\n useEffect(() => {\n dispatch(fetchEventsAction());\n }, [dispatch]);\n\n if (events.isPending) {\n return <Loader center />;\n }\n\n return <>\n <Box my={2}>\n <EventsFilters />\n </Box>\n <Box mb={2}>\n <Grid container justifyContent=\"space-between\">\n <Grid item className={classes.title}>\n <Typography variant=\"h5\">{t('Events')}</Typography>\n </Grid>\n <Grid item>\n <Box display=\"flex\" alignItems=\"center\">\n <Typography component=\"span\" className={classes.counter}>\n {events.data.length} of {allEvents.data.length}\n </Typography>\n <EventsSortSelect />\n </Box>\n </Grid>\n </Grid>\n </Box>\n <Paper elevation={3}>\n {events.data.length ? (\n <Box padding={6}>\n {events.data.map(item => (\n <EventsProduct data={item} key={item.id} />\n ))}\n </Box>\n ) : (\n <Box padding={3}>\n <Typography variant=\"body1\" className={classes.noDataText}>\n {t('No products found')}\n </Typography>\n </Box>\n )}\n </Paper>\n </>;\n};\n\nexport { Events };\n","import React, { FC, useEffect, useState, useCallback } from 'react';\nimport { Dialog, DialogContent, DialogTitle, Divider, Box, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\nimport { useTable } from 'shared/hooks';\nimport { formatDate } from 'shared/functions';\nimport { theme } from 'theme';\nimport { Datatable } from 'ui';\nimport { SubscriptionRatingType, UserRatingStatus } from '../types';\nimport { getUserRatingStatusLog } from '../services/rsrService';\n\nconst useStyles = makeStyles({\n dialog: {\n borderRadius: theme.spacing(1.5),\n overflow: 'hidden',\n width: theme.spacing(90),\n },\n content: {\n paddingTop: 'unset',\n paddingBottom: 'unset',\n height: theme.spacing(45),\n // @ts-ignore\n overflowY: 'overlay',\n },\n heading: {\n marginBottom: theme.spacing(1),\n },\n column: {\n marginRight: theme.spacing(3),\n },\n});\n\nexport type UserRatingStatusLogProps = {\n userId?: string;\n ratingId: string;\n open: boolean;\n onClose: () => void;\n ratingType: SubscriptionRatingType;\n};\n\nexport const UserRatingStatusLog: FC<UserRatingStatusLogProps> = ({\n open,\n onClose,\n userId,\n ratingId,\n ratingType,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const [ratingStatusLog, setRatingStatusLog] = useState<Array<UserRatingStatus>>([]);\n const [ratingStatusLogTotal, setRatingStatusLogTotal] = useState(0);\n\n const [isPending, setIsPending] = useState(false);\n\n const prepareTableData = (statusLog: Array<UserRatingStatus>) => {\n return statusLog.map((item) => [\n item.statusDate,\n item.status,\n [item.modifiedByName, item.modifiedByEmail, item.modifiedBy],\n ]);\n };\n\n useEffect(() => {\n fetchLog(0);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n const fetchLog = async (page, pageSize: number = 10) => {\n if (userId) {\n setIsPending(true);\n const resp = await getUserRatingStatusLog(ratingType, userId, ratingId, page, pageSize);\n setRatingStatusLog(resp.data);\n setRatingStatusLogTotal(resp.total);\n setIsPending(false);\n }\n };\n\n const dateRender = (statusDate: string) => formatDate(statusDate, 'dd/MM/yyyy HH:mm:ss');\n\n const modifiedByRender = ([modifiedByName, modifiedByEmail, modifiedBy]: string[]) => (\n <Typography> {modifiedByName || modifiedByEmail || modifiedBy} </Typography>\n );\n\n const initialColumns = useCallback(\n () => [\n {\n name: 'date',\n label: t('ADMIN.LOG.DATE'),\n options: {\n sort: false,\n customBodyRender: dateRender,\n },\n },\n {\n name: 'status',\n label: t('ADMIN.LOG.STATUS'),\n options: {\n sort: false,\n },\n },\n {\n name: 'modifiedBy',\n label: t('ADMIN.LOG.MODIFIED_BY'),\n options: {\n sort: false,\n customBodyRender: modifiedByRender,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const { columns, pagination, onSortChange, onTableChange } = useTable({\n initialColumns,\n paginationLimit: 10,\n } as any);\n\n useEffect(() => {\n fetchLog(pagination.page, pagination.limit);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pagination]);\n\n /* ******************************************************************** */\n /* Render */\n /* ******************************************************************** */\n\n return (\n <Dialog\n open={open}\n onClose={() => {\n onClose();\n setRatingStatusLog([]);\n }}\n PaperProps={{ className: classes.dialog }}\n >\n <DialogTitle>{t('ADMIN.RSR.USER_RATINGS_LOG_TITLE')}</DialogTitle>\n <DialogContent>\n <Box>\n <Divider />\n <Datatable\n loading={isPending}\n columns={columns}\n pagination={pagination}\n data={prepareTableData(ratingStatusLog)}\n total={ratingStatusLogTotal}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n showSelectionExtension={false}\n selectableRows={false}\n removeShadow\n skipHeader\n rowsPerPageOptions={[10, 25, 50]}\n />\n <Divider />\n </Box>\n </DialogContent>\n </Dialog>\n );\n};\n","import React, {FC} from 'react';\n\nimport Typography from '@mui/material/Typography';\n\nimport {BaseProps} from 'shared/types/base';\nimport {RatingStatus, RatingStatuses} from '../types';\nimport {Box, StatusBadge} from \"@scope/scope-one-ui/core\";\nimport {Status} from '@scope/scope-one-ui/core/StatusBadge/StatusBadge.d';\n\n\ntype RatingStatusIndicatorProps = {\n status: RatingStatus;\n} & BaseProps;\n\nconst RatingStatusIndicator: FC<RatingStatusIndicatorProps> = ({status}) => {\n\n const statuses: Record<RatingStatus, Status> = {\n [RatingStatuses.INVITED]: 'INVITED',\n [RatingStatuses.APPROVED]: 'APPROVED',\n [RatingStatuses.REVOKED]: 'REVOKED',\n };\n\n return status ? (\n <Box display='flex' alignItems='center'>\n <StatusBadge status={statuses[status]}/>\n </Box>\n ) : (\n <Typography>-</Typography>\n );\n};\n\nexport default RatingStatusIndicator;\n","import {Box} from \"@scope/scope-one-ui/core\";\nimport {SIZES} from \"@scope/scope-one-ui/theme\";\nimport styled from \"styled-components\";\n\n\nconst UserListWrapper = styled(Box)`\n max-height: ${SIZES.spacing(15)};\n overflow: scroll;\n`\n\nexport const Styled = {\n UserListWrapper\n}\n","import React, { FC, useEffect, useState } from 'react';\nimport { Autocomplete, Box, Dialog, Textarea, UserLabel } from '@scope/scope-one-ui/core';\nimport { useToasts } from '@scope/scope-one-ui/core/Messages/context';\nimport { useDebouncedCallback } from 'use-debounce';\nimport { RatingStatuses, RatingType, RatingUser, SubscriptionRatingType } from '../types';\nimport { addRatingUsers, filterUsers, getRatingUsers } from '../services/rsrService';\nimport { Styled } from './styled';\n\ntype AddRatingUserProps = {\n ratingId: string;\n ratingType: RatingType;\n ratingName: string;\n open: boolean;\n onClose: (added: boolean) => void;\n subscriptionRatingType: SubscriptionRatingType;\n};\n\nexport const AssignUser: FC<AddRatingUserProps> = ({\n open,\n onClose,\n ratingId,\n ratingType,\n ratingName,\n subscriptionRatingType,\n}) => {\n const { error, success } = useToasts();\n const [selectedUser, setSelectedUser] = useState<RatingUser>();\n const [users, setUsers] = useState<RatingUser[]>();\n const [assignedUsers, setAssignedUsers] = useState<RatingUser[]>();\n const [isLoading, setIsLoading] = useState(true);\n\n useEffect(() => {\n setSelectedUser(undefined);\n setUsers(undefined);\n fetchAssignedUsers();\n }, [ratingId, open]);\n\n const fetchAssignedUsers = async () => {\n const response = await getRatingUsers(subscriptionRatingType, ratingId, 1, 100);\n setAssignedUsers(\n (response.data as RatingUser[]).filter((u) => u.ratingStatus === RatingStatuses.APPROVED),\n );\n setIsLoading(false);\n };\n\n const fetchUsers = async (enteredMail: string) => {\n if (enteredMail.length > 3) {\n const result = await filterUsers(enteredMail);\n setUsers(result.data);\n }\n };\n\n const debouncedFetchUsers = useDebouncedCallback(fetchUsers, 500);\n\n const addUser = async () => {\n if (selectedUser) {\n try {\n const result = await addRatingUsers(subscriptionRatingType, ratingId, ratingType, [\n selectedUser.userId,\n ]);\n if (result) {\n success({ title: '', content: `User assigned to ${ratingName} successfully` });\n }\n } catch (e: any) {\n error({ title: '', content: e.message });\n }\n }\n setSelectedUser(undefined);\n onClose(true);\n };\n\n const onSearch = (v: string | number) => {\n debouncedFetchUsers(v.toString());\n setSelectedUser(undefined);\n };\n\n const onSelect = (v?: string | number) => {\n setSelectedUser(users?.find((u) => u.email === v));\n };\n\n if (isLoading) return <></>;\n return (\n <Dialog\n title=\"Assign user\"\n open={open}\n onClose={() => onClose(false)}\n size=\"small\"\n confirmLabel=\"Invite\"\n onConfirm={addUser}\n disabled={!selectedUser}\n >\n <Box px={2} py={3} gridGap={2}>\n <Autocomplete\n label=\"Email address\"\n placeholder=\"Type email address of existing user\"\n onSearch={onSearch}\n onSelect={onSelect}\n options={users?.map((u) => u.email)}\n selectedValue={selectedUser?.email ?? ''}\n />\n\n {selectedUser ? (\n <Box mt={2}>\n <Textarea label=\"Message\" placeholder=\"Type your message here\" max={500} height={25} />\n </Box>\n ) : (\n <Styled.UserListWrapper display=\"flex\" flexDirection=\"column\" gridGap={2} mt={4}>\n {assignedUsers\n ?.filter((u) => u.firstName && u.lastName && u.organisationName)\n .map((u) => (\n <UserLabel\n firstName={u.firstName}\n jobTitle={u.organisationName}\n lastName={u.lastName}\n />\n ))}\n </Styled.UserListWrapper>\n )}\n </Box>\n </Dialog>\n );\n};\n","import { FC } from 'react';\nimport {\n Analysts,\n Announcement,\n ESGCoverage,\n Home,\n Instrument,\n Entity,\n IssuerDashboard,\n NewsCentre,\n Profile,\n RatingCoverage,\n RatingCoverageRelated,\n SearchResult,\n RatingCoverageIndustry,\n EntityDetails,\n GenerateReportESG,\n ErrorPage,\n ServiceNotAvailable,\n RestrictedSubscriptionRatings,\n CoveredBonds,\n CreditRatingCoverage,\n} from 'scenes';\n\nimport { Shop } from 'modules/shop/scenes';\nimport { EventPanelCreate } from 'modules/events/scenes/EventPanelCreate';\nimport { EventPanelView } from 'modules/events/scenes/EventPanelView';\nimport { licencesTypes } from 'shared/constants/licencesTypes';\nimport { permissionsTypes } from 'shared/constants/permissionsTypes';\nimport { allStandardRolesTypes } from 'shared/constants/rolesTypes';\nimport { PortfolioManager } from 'modules/common/PortfolioManager/PortfolioManager';\nimport { Portfolio } from 'modules/common/PortfolioManager/Portfolio/Portfolio';\nimport { ShopPanelCreator } from 'modules/shop/scenes/ShopPanel/ShopPanelCreator';\nimport { ShopPanelEdit } from 'modules/shop/scenes/ShopPanel/ShopPanelEdit';\nimport { ShopPanelProductList } from 'modules/shop/scenes/ShopPanel/ShopPanelProductList';\nimport { shopRoles } from 'modules/shop/shared/constants/shopRoles';\nimport { Events } from 'modules/events/scenes/Events';\nimport { RatingUsersList } from './modules/common/RestrictedSubscriptionRatings/RatingUsersList';\n\nconst getEntitiesRoutings = (\n baseAddress: string,\n component: FC,\n role: string | string[],\n license: string,\n) => [\n {\n path: `${baseAddress}/entities/:entityId/instruments/:instrumentId/announcements/:announcementId`,\n component: Announcement,\n license,\n role,\n },\n {\n path: `${baseAddress}/entities/:entityId/instruments/:instrumentId`,\n component: Instrument,\n license,\n role,\n },\n {\n path: `${baseAddress}/entities/:entityId/announcements/:announcementId`,\n component: Announcement,\n license,\n role,\n },\n {\n path: `${baseAddress}/entities/:entityId`,\n component: Entity,\n license,\n role,\n },\n {\n path: baseAddress,\n component,\n license,\n role,\n },\n];\n\nconst routes = [\n {\n path: '/',\n exact: true,\n component: Home,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/issuer-dashboard',\n component: IssuerDashboard,\n license: licencesTypes.INVESTORHUB_MODULE,\n shopPermissions: [shopRoles.ISSUER_DASHBOARD],\n },\n {\n path: '/analysts',\n component: Analysts,\n license: licencesTypes.INVESTORHUB_MODULE,\n permission: permissionsTypes.SSO_VIEW_USER_ANALYST_DATA,\n },\n {\n path: '/watchlists',\n component: PortfolioManager,\n license: licencesTypes.INVESTORHUB_MODULE,\n permission: permissionsTypes.CA_VIEW_DOSSIER,\n },\n {\n path: '/instruments/:instrumentId',\n component: Instrument,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/entities/:easyNumber/details',\n component: EntityDetails,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/entities/:entityId/instruments/:instrumentId',\n component: Instrument,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/entities/:entityId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/entities/:entityId',\n component: Entity,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/news-centre',\n component: NewsCentre,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/profile',\n component: Profile,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/generate-report/esg/:entityId',\n component: GenerateReportESG,\n },\n // Covered Bonds\n {\n path: '/covered-bonds/:country/instruments/:instrumentId',\n component: Instrument,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n // Search result\n {\n path: '/search-result/entities/:easyNumber/details',\n component: EntityDetails,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/search-result/entities/:entityId/instruments/:instrumentId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/search-result/entities/:entityId/instruments/:instrumentId',\n component: Instrument,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/search-result/entities/:entityId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/search-result/entities/:entityId',\n component: Entity,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/search-result/instruments/:instrumentId',\n component: Instrument,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/search-result/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/search-result',\n component: SearchResult,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n // /Search result\n // Portfolios\n {\n path: '/portfolios/:portfolioId/entities/:entityId/instruments/:instrumentId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/portfolios/:portfolioId/entities/:entityId/instruments/:instrumentId',\n component: Instrument,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/portfolios/:portfolioId/entities/:entityId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/portfolios/:portfolioId/entities/:easyNumber/details',\n component: EntityDetails,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/portfolios/:portfolioId/entities/:entityId',\n component: Entity,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/portfolios/:portfolioId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/portfolios/:portfolioId/instruments/:instrumentId',\n component: Instrument,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/portfolios/:portfolioId',\n component: Portfolio,\n license: licencesTypes.INVESTORHUB_MODULE,\n permission: permissionsTypes.CA_VIEW_DOSSIER,\n },\n {\n path: '/portfolios',\n component: PortfolioManager,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n // /Portfolios\n // Related rating coverage related\n {\n path: '/credit-rating-coverage/related/entities/:entityId/instruments/:instrumentId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/related/entities/:entityId/instruments/:instrumentId',\n component: Instrument,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/related/entities/:entityId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/related/entities/:entityId',\n component: Entity,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/related',\n component: RatingCoverageRelated,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n // /Related rating coverage related\n // Related rating coverage industry\n {\n path: '/credit-rating-coverage/industry/entities/:entityId/instruments/:instrumentId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/industry/entities/:entityId/instruments/:instrumentId',\n component: Instrument,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/industry/entities/:entityId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/industry/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/industry/entities/:entityId',\n component: Entity,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/industry',\n component: RatingCoverageIndustry,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n // /Related rating coverage industry\n // Related rating coverage\n {\n path: '/credit-rating-coverage/:businessLine/entities/:entityId/instruments/:instrumentId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/:businessLine/entities/:entityId/instruments/:instrumentId',\n component: Instrument,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/:businessLine/entities/:entityId/announcements/:announcementId',\n component: Announcement,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/:businessLine/entities/:entityId',\n component: Entity,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/credit-rating-coverage/:businessLine',\n component: RatingCoverage,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n ...getEntitiesRoutings(\n '/credit-rating-coverage-list/:countryId',\n CreditRatingCoverage,\n allStandardRolesTypes,\n licencesTypes.INVESTORHUB_MODULE,\n ),\n // /Related rating coverage\n ...getEntitiesRoutings(\n '/esg-coverage/:query',\n ESGCoverage,\n allStandardRolesTypes,\n licencesTypes.INVESTORHUB_MODULE,\n ),\n {\n path: '/subscriptions/panel/create',\n component: ShopPanelCreator,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n },\n {\n path: '/subscriptions/panel',\n component: ShopPanelProductList,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n },\n {\n path: '/subscriptions/:productId',\n component: ShopPanelEdit,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n },\n {\n path: '/subscriptions',\n component: Shop,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/error-page',\n exact: true,\n component: ErrorPage,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/service-unavailable',\n exact: true,\n component: ServiceNotAvailable,\n license: licencesTypes.INVESTORHUB_MODULE,\n },\n {\n path: '/event-panel/view',\n component: EventPanelView,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n },\n {\n path: '/event-panel/create',\n component: EventPanelCreate,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n },\n {\n path: '/event-panel/edit/:id',\n component: EventPanelCreate,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n },\n {\n path: '/events',\n component: Events,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/covered-bonds/:countryId',\n component: CoveredBonds,\n license: licencesTypes.INVESTORHUB_MODULE,\n role: allStandardRolesTypes,\n },\n {\n path: '/admin-panel/:ratingType/ratings/:ratingId',\n component: RatingUsersList,\n license: licencesTypes.INVESTORHUB_MODULE,\n // permission: permissionsTypes.CA_RSR_CONFIG,\n },\n {\n path: '/admin-panel/:ratingType/:tabSelected',\n component: RestrictedSubscriptionRatings,\n license: licencesTypes.INVESTORHUB_MODULE,\n // permission: permissionsTypes.CA_RSR_CONFIG,\n },\n {\n path: '/admin-panel/:ratingType',\n component: RestrictedSubscriptionRatings,\n license: licencesTypes.INVESTORHUB_MODULE,\n // permission: permissionsTypes.CA_RSR_CONFIG,\n },\n {\n path: '/admin-panel',\n component: RestrictedSubscriptionRatings,\n license: licencesTypes.INVESTORHUB_MODULE,\n // permission: permissionsTypes.CA_RSR_CONFIG,\n },\n];\n\nexport { routes };\n","import React, { FC, useState, useEffect, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate, useLocation, useParams } from 'react-router-dom';\nimport qs from 'qs';\nimport { Loader, TabsPanel } from 'ui';\nimport { useQuery, useFeatures } from 'shared/hooks';\nimport { useFetchPortfolio } from '../../GraphQL/portfolios/hooks';\nimport { PortfolioEntities } from './PortfolioEntities';\nimport { PortfolioEvents } from './PortfolioEvents';\nimport { PortfolioInstruments } from './PortfolioInstruments';\nimport { PortfolioRatingNews } from './PortfolioRatingNews';\nimport { PortfolioResearch } from './PortfolioResearch';\nimport { PortfolioSummary } from './PortfolioSummaryTab/PortfolioSummary';\nimport { PortfolioUploads } from './PortfolioUploads';\nimport { PortfolioType, Portfolio as PortfolioModel } from '../types';\nimport { PortfolioFunds } from './PortfolioFunds';\n\ntype PortfolioParams = {\n portfolioId: string;\n};\n\nexport const Portfolio: FC = () => {\n const { portfolioId = '' } = useParams<PortfolioParams>();\n const { t } = useTranslation();\n const navigate = useNavigate();\n const location = useLocation();\n const queryParams = useQuery() as { activeTab: string };\n const { data, loading, refetch: refetchPortfolio } = useFetchPortfolio(portfolioId);\n const [entitiesCounter, setEntitiesCounter] = useState(0);\n const [instrumentsCounter, setInstrumentsCounter] = useState(0);\n\n const refetch = () => {\n refetchPortfolio();\n };\n\n const {\n eventsInPortfolioManager,\n uploadsHistoryInPortfolioManager,\n fundAnalysisPortfolioManager,\n } = useFeatures();\n\n const portfolioData = data?.portfolio ?? ({ noOfItems: {} } as PortfolioModel);\n\n const {\n name,\n noOfItems: { entities, instruments, funds, ratingNews, researches, events, uploads },\n portfolioType,\n summary,\n } = portfolioData;\n\n const isReference =\n !!portfolioType &&\n [PortfolioType.REFERENCE_PORTFOLIO_EUROPE, PortfolioType.REFERENCE_PORTFOLIO_GLOBAL].includes(\n portfolioType,\n );\n\n const isRequestHistory = PortfolioType.REQUEST_HISTORY === portfolioType;\n\n const defaultActiveTab = isRequestHistory ? 'entities' : 'summary';\n\n const [activeTab, setActiveTab] = useState<string>(defaultActiveTab);\n\n const { activeTab: savedActiveTab } = queryParams;\n\n useEffect(() => {\n if (loading) {\n return;\n }\n\n if (savedActiveTab && savedActiveTab !== activeTab) {\n setActiveTab(savedActiveTab);\n } else if (!savedActiveTab) {\n const searchQuery = isRequestHistory\n ? { ...queryParams, activeTab: defaultActiveTab, ratingType: 'esg-impact' }\n : { ...queryParams, activeTab: defaultActiveTab };\n navigate(\n {\n pathname: location.pathname,\n search: qs.stringify(searchQuery, { addQueryPrefix: true }),\n },\n { replace: true },\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [savedActiveTab, loading]);\n\n const onTabChange = useCallback(\n (_: never, value: string) => {\n if (activeTab !== value || activeTab !== savedActiveTab) {\n navigate(\n {\n pathname: location.pathname,\n search: qs.stringify({ activeTab: value }, { addQueryPrefix: true }),\n },\n { replace: true },\n );\n }\n },\n [activeTab, savedActiveTab],\n );\n\n if (loading) {\n return <Loader />;\n }\n\n const handleEntitiesFilteredCounter = (entCount) => {\n return setEntitiesCounter(entCount);\n };\n\n const handleInstrumentsFilteredCounter = (instCount) => {\n return setInstrumentsCounter(instCount);\n };\n\n return (\n <>\n {/* @ts-ignore */}\n <TabsPanel\n key={name}\n active={isRequestHistory && activeTab === 'summary' ? defaultActiveTab : activeTab}\n hasShadow=\"true\"\n onChange={onTabChange}\n >\n {!isRequestHistory && (\n <div label={t('PORTFOLIO.PORTFOLIO_SUMMARY')} value=\"summary\" key=\"summary\">\n <PortfolioSummary\n summary={summary}\n noOfItems={portfolioData.noOfItems}\n portfolioId={portfolioId}\n />\n </div>\n )}\n <div\n label={t('ENTITIES')}\n value=\"entities\"\n key=\"entities\"\n counter={entitiesCounter || entities}\n >\n <PortfolioEntities\n portfolioId={portfolioId}\n refetchPortfolio={refetch}\n portfolioData={portfolioData}\n totalCounter={handleEntitiesFilteredCounter}\n />\n </div>\n {!isRequestHistory && (\n <div\n label={t('INSTRUMENTS')}\n value=\"instruments\"\n key=\"instruments\"\n counter={instrumentsCounter || instruments}\n >\n <PortfolioInstruments\n portfolioId={portfolioId}\n refetchPortfolio={refetch}\n isReferencePortfolio={isReference}\n portfolioData={portfolioData}\n totalCounter={handleInstrumentsFilteredCounter}\n />\n </div>\n )}\n {fundAnalysisPortfolioManager && !isReference && !isRequestHistory && (\n <div label={t('FUNDS')} value=\"funds\" key=\"funds\" counter={funds}>\n <PortfolioFunds\n portfolioId={portfolioId}\n total={funds}\n refetchPortfolio={refetch}\n isReferencePortfolio={isReference}\n portfolioData={portfolioData}\n />\n </div>\n )}\n {!isReference && !isRequestHistory && (\n <div label={t('RATING_NEWS')} value=\"ratingNews\" key=\"ratingNews\" counter={ratingNews}>\n <PortfolioRatingNews\n portfolioId={portfolioId}\n total={ratingNews}\n refetchPortfolio={refetch}\n portfolioData={portfolioData}\n />\n </div>\n )}\n {!isReference && !isRequestHistory && (\n <div label={t('RESEARCH')} value=\"research\" key=\"research\" counter={researches}>\n <PortfolioResearch\n portfolioId={portfolioId}\n total={researches}\n refetchPortfolio={refetch}\n portfolioData={portfolioData}\n />\n </div>\n )}\n {eventsInPortfolioManager && !isReference && !isRequestHistory && (\n <div label={t('EVENTS')} value=\"events\" key=\"events\" counter={events}>\n <PortfolioEvents\n portfolioId={portfolioId}\n total={events}\n refetchPortfolio={refetch}\n portfolioData={portfolioData}\n />\n </div>\n )}\n {uploadsHistoryInPortfolioManager && !isRequestHistory && (\n <div label={t('UPLOADS')} value=\"uploads\" key=\"uploads\" counter={uploads}>\n <PortfolioUploads portfolioId={portfolioId} portfolioData={portfolioData} />\n </div>\n )}\n </TabsPanel>\n </>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Paper, Typography, Box } from '@mui/material';\nimport sortBy from 'lodash/sortBy';\n\nimport { Loader } from 'ui';\nimport { LinkButton } from 'ui/Buttons';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nimport { deleteSubscriptions, duplicateShopProducts } from '../../services';\nimport { fetchShopProductsAction, fetchShopProductPropertiesAction } from '../../store/shopActions';\nimport { ShopSelectionList } from '../../components/ShopSelectionList/ShopSelectionList';\n\nconst ShopPanelProductList = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n\n const products = useSelector(({ shop }) => shop.products);\n\n const [selectedProducts, setSelectedProducts] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n\n const handleSelectionChange = items => {\n setSelectedProducts(items);\n };\n\n const actions = [\n {\n name: t('Duplicate'),\n action: () => {\n setIsLoading(true);\n\n duplicateShopProducts({ products: selectedProducts })\n .then(() => {\n dispatch(\n addNotificationAction({\n message: t('Product successfully duplicated'),\n variant: 'success',\n }),\n );\n dispatch(fetchShopProductsAction());\n })\n .catch(error => {\n if (error) {\n dispatch(\n addNotificationAction({\n message: t('Cannot duplicate a product'),\n variant: 'error',\n }),\n );\n }\n })\n .finally(() => {\n setIsLoading(false);\n });\n },\n },\n {\n name: t('Delete'),\n action: () => {\n setIsLoading(true);\n\n deleteSubscriptions({ products: selectedProducts })\n .then(() => {\n dispatch(\n addNotificationAction({\n message: t('Product successfully deleted'),\n variant: 'success',\n }),\n );\n dispatch(fetchShopProductsAction());\n })\n .catch(error => {\n if (error) {\n dispatch(\n addNotificationAction({\n message: t('Cannot delete a product'),\n variant: 'error',\n }),\n );\n }\n })\n .finally(() => {\n setIsLoading(false);\n });\n },\n },\n ];\n\n useEffect(() => {\n dispatch(fetchShopProductPropertiesAction());\n dispatch(fetchShopProductsAction());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('Product list')}</Typography>\n </Box>\n\n <Paper elevation={3}>\n {isLoading || products.isPending ? (\n <Box py={4}>\n <Loader center />\n </Box>\n ) : (\n <ShopSelectionList\n actions={actions}\n products={sortBy(products.data, 'name')}\n onSelectionChange={handleSelectionChange}\n toolbar={\n <LinkButton\n to=\"/subscriptions/panel/create\"\n label={t('Create product')}\n color=\"primary\"\n variant=\"contained\"\n size=\"small\"\n />\n }\n columns={[\n 'name',\n 'category',\n 'region',\n 'segment',\n 'productLines',\n 'industry',\n 'source',\n 'pricing',\n 'validity',\n 'amount',\n 'active',\n ]}\n editMode\n />\n )}\n </Paper>\n </>\n );\n};\n\nexport { ShopPanelProductList };\n","import React, { useEffect } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Typography, Paper } from '@mui/material';\n\nimport { Loader } from 'ui';\n\nimport { fetchShopProductsAction, fetchShopProductPropertiesAction } from '../../store/shopActions';\nimport { getProductById } from '../../selectors/shopSelectors';\nimport { ShopPanelProductCreator } from '../../components/ShopPanelProductCreator';\nimport { ShopPanelPackageCreator } from '../../components/ShopPanelPackageCreator';\n\nconst ShopPanelEdit = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const { productId } = useParams();\n\n const product = useSelector(getProductById(Number(productId)));\n\n useEffect(() => {\n dispatch(fetchShopProductPropertiesAction());\n dispatch(fetchShopProductsAction());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('Subscriptions panel')}</Typography>\n </Box>\n {!product ? (\n <Loader center />\n ) : (\n <Paper elevation={3}>\n <Box p={2}>\n {product.isPackage ? (\n <ShopPanelPackageCreator product={product} />\n ) : (\n <ShopPanelProductCreator product={product} />\n )}\n </Box>\n </Paper>\n )}\n </>\n );\n};\n\nexport { ShopPanelEdit };\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Paper, Typography, Box } from '@mui/material';\nimport sortBy from 'lodash/sortBy';\n\nimport { Event } from 'modules/events/types/eventsTypes';\nimport { Loader } from 'ui';\nimport { LinkButton } from 'ui/Buttons';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { EventsSelectionList } from 'modules/events/components/EventsSelectionList';\nimport { getEvents } from '../selectors/eventsSelectors';\nimport { fetchEventsAction } from '../store/eventsActions';\nimport { activateEvent, deactivateEvent } from '../services/eventsService';\n\nexport const EventPanelView = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const events = useSelector(getEvents);\n const [selectedEvents, setSelectedEvents] = useState<Event[]>([]);\n const [isLoading, setIsLoading] = useState(false);\n const [showActive, setShowActive] = useState(true);\n const [hiddenActions, setHiddenActions] = useState<string[]>([]);\n\n const actions = [\n {\n name: t('Duplicate'),\n action: () => {\n setIsLoading(true);\n\n // eslint-disable-next-line no-alert\n alert('This action is not ready yet');\n\n setIsLoading(false);\n },\n },\n {\n name: t('Delete'),\n action: () => {\n setIsLoading(true);\n\n // eslint-disable-next-line no-alert\n alert('This action is not ready yet');\n\n setIsLoading(false);\n },\n },\n {\n name: t('Activate'),\n action: () => {\n setIsLoading(true);\n\n Promise.all(selectedEvents.map(item => item.id!).map(activateEvent))\n .then(() => dispatch(fetchEventsAction('ALL')))\n .catch((error: any) =>\n dispatch(\n addNotificationAction({\n message: error.message,\n variant: 'error',\n }),\n ),\n )\n .finally(() => setIsLoading(false));\n },\n },\n {\n name: t('Deactivate'),\n action: () => {\n setIsLoading(true);\n\n Promise.all(selectedEvents.map(item => item.id!).map(deactivateEvent))\n .then(() => dispatch(fetchEventsAction('ALL')))\n .catch((error: any) =>\n dispatch(\n addNotificationAction({\n message: error.message,\n variant: 'error',\n }),\n ),\n )\n .finally(() => setIsLoading(false));\n },\n },\n ];\n\n const handleSelectionChange = (items: Event[]) => setSelectedEvents(items);\n\n useEffect(() => {\n dispatch(fetchEventsAction('ALL'));\n }, [dispatch]);\n\n useEffect(() => {\n const hideRules = {\n Duplicate: selectedEvents.length !== 1,\n Activate: showActive,\n Deactivate: !showActive,\n };\n\n setHiddenActions(\n Object.entries(hideRules)\n .map(([name, rule]) => rule && name)\n .filter(Boolean) as string[],\n );\n }, [selectedEvents, showActive]);\n\n return (\n <>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('Event list')}</Typography>\n </Box>\n\n <Paper elevation={3}>\n {isLoading || events.isPending ? (\n <Box py={4}>\n <Loader center />\n </Box>\n ) : (\n <EventsSelectionList\n actions={actions.map(item => ({ ...item, hidden: hiddenActions.includes(item.name) }))}\n events={sortBy(events.data, 'title')}\n onSelectionChange={handleSelectionChange}\n showActive={showActive}\n setShowActive={setShowActive}\n toolbar={\n // @ts-ignore\n <LinkButton\n to=\"/event-panel/create\"\n label={t('Create event')}\n color=\"primary\"\n variant=\"contained\"\n size=\"small\"\n />\n }\n columns={['title', 'eventDate', 'category', 'organiser']}\n editMode\n />\n )}\n </Paper>\n </>\n );\n};\n","import React, { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { LinkButton } from 'ui/Buttons';\nimport { ColumnDefinition, RowData } from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport { useToasts } from '@scope/scope-one-ui/core/Messages/context';\nimport {\n ActionsMenu,\n Box,\n Card,\n DataTable,\n IconButton,\n IconTextButton,\n StatusBadge,\n Typography,\n} from '@scope/scope-one-ui/core';\nimport LockIcon from '@scope/scope-one-ui/assets/icons/lock.svg';\nimport ClockIcon from '@scope/scope-one-ui/assets/icons/clock.svg';\nimport { useDebouncedCallback } from 'use-debounce/esm';\nimport { formatDate } from 'shared/functions';\nimport AddUserIcon from '../../../assets/icons/user-plus.svg';\nimport ArrowLeft from '../../../assets/icons/arrow-left.svg';\nimport UnlockIcon from '../../../assets/icons/unlock.svg';\nimport {\n activateRatingUsers,\n deactivateRatingUsers,\n getRating,\n getRatingUsers,\n} from './services/rsrService';\nimport {\n Rating,\n RatingStatus,\n RatingStatuses,\n RatingUser,\n SubscriberConfirmation,\n SubscriberConfirmations,\n SubscriptionRatingType,\n UserStatus,\n UserStatuses,\n} from './types';\nimport { UserRatingStatusLog } from './Modals/UserRatingStatusLog';\nimport UserStatusIndicator from './components/UserStatusIndicator';\nimport SubscriberConfirmationIndicator from './components/SubscriberConfirmationIndicator';\nimport RatingStatusIndicator from './components/RatingStatusIndicator';\nimport { SetSubscriberConfirmationModal } from './Modals/SetSubscriberConfirmationModal';\nimport { AssignUser } from './Modals/AssignUser';\nimport { useRSR } from '../../../shared/hooks';\nimport RefreshIcon from '../../../assets/icons/refresh-cw.svg';\nimport { ConfirmModal } from './Modals/ConfirmModal';\n\ntype RatingUsersListParams = {\n ratingType: SubscriptionRatingType;\n ratingId: string;\n};\n\nexport const RatingUsersList: FC = () => {\n const navigate = useNavigate();\n const { t } = useTranslation();\n const { error, success } = useToasts();\n const { ratingType = 'rsr', ratingId = '' } = useParams<RatingUsersListParams>();\n const [isAddModalOpen, setAddModalOpen] = useState(false);\n const [isLogModalOpen, setLogModalOpen] = useState(false);\n const [rating, setRating] = useState<Rating>();\n const [isSubscriberConfirmationModalOpen, setSubscriberConfirmationModalOpen] = useState(false);\n const [isConfirmModalOpen, setIsConfirmModalOpen] = useState(false);\n const [selectedUser, setSelectedUser] = useState<RatingUser>();\n const [confirmType, setConfirmType] = useState<'APPROVE' | 'REVOKE'>('APPROVE');\n\n const fetchUsers = async () => {\n getRatingUsers(\n ratingType,\n ratingId,\n pagination.page || 1,\n pagination.limit,\n {\n sort: sort.field,\n dir: sort.order,\n },\n searchedValue,\n )\n .then((response) => {\n setRows(buildRows(response.data as RatingUser[]));\n setTotal(response.total);\n })\n .catch((er) => {\n error({ title: '', content: 'Error loading users information' });\n })\n .finally(() => setLoading(false));\n };\n\n const fetchRating = async () => {\n getRating(ratingType, ratingId)\n .then((resp) => {\n setRating(resp);\n })\n .catch((er) => {\n error({ title: '', content: 'Error loading rating information' });\n });\n };\n\n const activateUsers = async (userIds: string[]) => {\n if (rating) {\n setLoading(true);\n try {\n const res = await activateRatingUsers(ratingType, ratingId, rating.entityType, userIds);\n if (res) {\n success({ title: '', content: t('ADMIN.SNACKS.RATING_USERS_APPROVED') });\n fetchUsers();\n }\n } catch (e) {\n error({ title: '', content: t('ADMIN.SNACKS.RATING_USERS_APPROVE_FAILED') });\n } finally {\n setLoading(false);\n }\n }\n };\n\n const deactivateUsers = async (userIds: string[]) => {\n if (rating) {\n setLoading(true);\n try {\n const res = await deactivateRatingUsers(ratingType, ratingId, rating.entityType, userIds);\n if (res) {\n success({ title: '', content: t('ADMIN.SNACKS.RATING_USERS_REVOKED') });\n fetchUsers();\n }\n } catch (e) {\n error({ title: '', content: t('ADMIN.SNACKS.RATING_USERS_REVOKE_FAILED') });\n } finally {\n setLoading(false);\n }\n }\n };\n\n const handleAddUser = (added: boolean) => {\n setAddModalOpen(false);\n if (added) {\n fetchUsers();\n }\n };\n\n const showuserStatusLog = (user: RatingUser) => {\n setSelectedUser(user);\n setLogModalOpen(true);\n };\n\n const showSubscriberConfirmationModal = (user: RatingUser) => {\n setSelectedUser(user);\n setSubscriberConfirmationModalOpen(true);\n };\n\n const handleSubscriberConfirmationClose = (needsUpdate: boolean) => {\n setSelectedUser(undefined);\n setSubscriberConfirmationModalOpen(false);\n if (needsUpdate) {\n fetchUsers();\n }\n };\n\n const nameRenderer = (user: RatingUser) => (\n <LinkButton\n to=\"#\"\n label={`${user.firstName || '-'} ${user.lastName || ''}`}\n color=\"primary\"\n onClick={() => showuserStatusLog(user)}\n />\n );\n\n const userStatusRenderer = (userStatus: any) => {\n return <UserStatusIndicator status={userStatus as UserStatus} />;\n };\n\n const subscriberConfirmationRenderer = (confirmation: SubscriberConfirmation) => {\n return confirmation ? <SubscriberConfirmationIndicator status={confirmation} /> : '-';\n };\n\n const accessRenderer = (access: boolean) => {\n return access ? <StatusBadge status=\"CHECKED\" /> : <StatusBadge status=\"CROSSED\" />;\n };\n\n const organisationRenderer = (organisationName: string) => organisationName || '-';\n\n const dateRenderer = (statusDate: string) => formatDate(statusDate);\n\n const statusRenderer = (status: RatingStatus) => <RatingStatusIndicator status={status} />;\n\n const initialColumns: ColumnDefinition[] = [\n {\n name: 'name',\n label: t('ADMIN.RSR.NAME'),\n sortable: true,\n searchable: true,\n getSearchValue: (value) => `${value.firstName} ${value.lastName}`,\n customBodyRender: nameRenderer,\n },\n {\n name: 'email',\n label: t('ADMIN.RSR.EMAIL'),\n sortable: true,\n },\n {\n name: 'organisationName',\n label: t('ADMIN.RSR.ORGANISATION'),\n sortable: true,\n customBodyRender: organisationRenderer,\n },\n {\n name: 'userStatus',\n label: t('ADMIN.RSR.USER_STATUS'),\n sortable: true,\n customBodyRender: userStatusRenderer,\n },\n {\n name: 'confirmation',\n label: t('ADMIN.RSR.SUBSCRIBER_CONFIRMATION'),\n sortable: true,\n customBodyRender: subscriberConfirmationRenderer,\n },\n {\n name: 'status',\n label: t('ADMIN.RSR.STATUS'),\n sortable: true,\n customBodyRender: statusRenderer,\n },\n {\n name: 'access',\n label: t('ADMIN.RSR.ACCESS'),\n customBodyRender: accessRenderer,\n },\n {\n name: 'statusDate',\n label: t('ADMIN.RSR.DATE'),\n sortable: true,\n customBodyRender: dateRenderer,\n },\n {\n name: 'moreActions',\n label: ' ',\n customBodyRender: (user) => <ActionsMenu list={getActions(user)} />,\n },\n ];\n\n const {\n tableActions,\n selectToggle,\n selectedIds,\n searchedValue,\n sort,\n rows,\n loading,\n setLoading,\n pagination,\n setRows,\n isSelectedAll,\n selectAllToggle,\n clearSelectedIds,\n setSelectedIds,\n setTotal,\n } = useRSR({ initialColumns, defaultSortField: 'name' });\n\n useEffect(() => {\n const refresh = async () => {\n setLoading(true);\n await fetchRating();\n await fetchUsers();\n };\n refresh();\n }, [ratingId, pagination, sort]);\n\n const fetchDebounce = useDebouncedCallback(fetchUsers, 300);\n\n useEffect(() => {\n fetchDebounce();\n }, [searchedValue]);\n\n const approve = () => {\n setConfirmType('APPROVE');\n setIsConfirmModalOpen(true);\n };\n\n const revoke = () => {\n setConfirmType('REVOKE');\n setIsConfirmModalOpen(true);\n };\n\n const headerActions = [\n {\n icon: <LockIcon />,\n label: 'REVOKE SELECTED USERS',\n onClick: revoke,\n },\n {\n icon: <UnlockIcon />,\n label: 'APPROVE SELECTED USERS',\n onClick: approve,\n },\n ];\n\n const buildRows = (data: RatingUser[]): RowData[] =>\n data.map((user) => {\n return {\n id: user.userId,\n data: {\n name: user,\n email: user.email,\n organisationName: user.organisationName,\n userStatus: user.userStatus,\n confirmation: user.confirmation,\n status: user.ratingStatus,\n access:\n user.confirmation === SubscriberConfirmations.SIGNED &&\n user.ratingStatus === RatingStatuses.APPROVED &&\n user.userStatus === UserStatuses.ACTIVE,\n statusDate: user.ratingStatusDate,\n moreActions: user,\n },\n };\n });\n\n const getActions = (item: RatingUser) => {\n return [\n {\n label: t('ADMIN.RSR.VIEW_LOG'),\n onClick: () => showuserStatusLog(item),\n icon: <ClockIcon />,\n },\n {\n label: t('ADMIN.RSR.SET_SUBSCRIBER_CONFIRMATION'),\n onClick: () => showSubscriberConfirmationModal(item),\n icon: <RefreshIcon />,\n },\n {\n label:\n item.ratingStatus === RatingStatuses.APPROVED\n ? t('ADMIN.RSR.REVOKE')\n : t('ADMIN.RSR.APPROVE'),\n onClick: () => {\n clearSelectedIds();\n setSelectedIds([item.userId]);\n if (item.ratingStatus === RatingStatuses.APPROVED) revoke();\n else approve();\n },\n icon: item.ratingStatus === RatingStatuses.APPROVED ? <LockIcon /> : <UnlockIcon />,\n },\n ];\n };\n\n const confirmModalData = {\n APPROVE: {\n title: 'Approve selected users',\n text: 'Do you really want to approve access for all selected users?',\n confirmLabel: 'Approve selected',\n },\n REVOKE: {\n title: 'Revoke selected',\n text: 'Do you really want to revoke access for all selected users?',\n confirmLabel: 'Revoke selected',\n },\n };\n\n return (\n <>\n {rating && (\n <>\n <Box my={2}>\n <Card padded>\n <Box display=\"flex\" justifyContent=\"space-between\">\n <Box display=\"flex\" gridGap={1}>\n <IconButton onClick={() => navigate(-1)}>\n <ArrowLeft />\n </IconButton>\n <Typography variant=\"h1\">\n {rating.entityName} {rating.ratingType ? ` - ${rating.ratingType}` : ''}\n </Typography>\n </Box>\n <Box display=\"flex\" gridGap={1}>\n <IconTextButton\n icon={<AddUserIcon width={32} height={32} />}\n iconSize=\"regular\"\n onClick={() => {\n setAddModalOpen(true);\n }}\n >\n ASSIGN USER\n </IconTextButton>\n </Box>\n </Box>\n </Card>\n </Box>\n <DataTable\n loading={loading}\n headerActions={headerActions}\n selection={{\n selectedIds,\n selectToggle,\n isSelectedAll,\n selectAllToggle,\n }}\n title=\"Users\"\n cols={initialColumns}\n rows={rows}\n selectable\n paginate\n tableActions={tableActions}\n />\n <AssignUser\n ratingName={rating.entityName}\n open={isAddModalOpen}\n onClose={handleAddUser}\n ratingId={rating.ratingId}\n ratingType={rating.entityType}\n subscriptionRatingType={ratingType}\n />\n <UserRatingStatusLog\n open={isLogModalOpen}\n onClose={() => {\n setLogModalOpen(false);\n setSelectedUser(undefined);\n }}\n ratingId={rating.ratingId}\n userId={selectedUser?.userId}\n ratingType={ratingType}\n />\n <SetSubscriberConfirmationModal\n open={isSubscriberConfirmationModalOpen}\n onClose={handleSubscriberConfirmationClose}\n user={selectedUser}\n />\n <ConfirmModal\n variant={confirmType === 'REVOKE' ? 'warning' : 'primary'}\n title={confirmModalData[confirmType].title}\n text={confirmModalData[confirmType].text}\n confirmLabel={confirmModalData[confirmType].confirmLabel}\n onClose={(v) => {\n clearSelectedIds();\n setIsConfirmModalOpen(false);\n }}\n onConfirm={() => {\n if (confirmType === 'REVOKE') {\n deactivateUsers(selectedIds);\n } else {\n activateUsers(selectedIds);\n }\n setIsConfirmModalOpen(false);\n clearSelectedIds();\n }}\n open={isConfirmModalOpen}\n />\n </>\n )}\n </>\n );\n};\n","import React, { useEffect, Suspense, useState } from 'react';\nimport { BrowserRouter, Route, Routes, } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport Container from '@mui/material/Container';\n\nimport { NotFound } from 'scenes';\nimport { Footer, ScrollTop, Breadcrumbs } from 'ui';\nimport { SearchBar } from 'modules/common';\nimport { Navbar, Subnavigation } from 'modules/common/Navbar';\n\nimport { generateKey, redirectFromHashLinks } from 'shared/functions';\nimport { setIndustriesMapping } from 'shared/mappings/industries/industriesMapping';\nimport { getPreferencesAction } from 'store/newsFeed/newsFeedActions';\nimport { getLoggedUserAction } from 'store/login/loginAction';\nimport {\n fetchShopPermissionsAction,\n fetchShopProductsAction,\n} from 'modules/shop/store/shopActions';\nimport { InitialSubscriptionInvitiationModal } from 'modules/creditReview/CreditReviewModals';\nimport { CreditSphereInvitiationModal } from 'modules/common/Modals/CreditSphereInvitationModal';\nimport { getIndustriesAction } from 'store/shared/industries/industriesActions';\nimport { requestRelatedEntitiesAction } from 'store/shared/relatedEntities/relatedEntitiesActions';\nimport { requestCreditRequestLevelsAction } from 'store/shared/creditReviewLevels/creditReviewLevelsActions';\nimport { requestQuestionnaireAvailabilityAction } from 'store/shared/questionnaire/questionnaireActions';\nimport { getESGCoverageAction } from 'store/shared/esgCoverage/esgCoverageAction';\nimport { getRegionsAction } from 'store/shared/regions/regionsAction';\nimport { getRatingCoverageAction } from 'store/shared/ratingCoverage/ratingCoverageAction';\nimport { getCreditReviewContractDataAction } from 'store/creditReview/creditReviewActions';\nimport { PrivateRoute } from 'shared/hoc/PrivateRoute/PrivateRoute';\nimport { useReportPage, useESGReportPage, useAdminPage } from 'shared/hooks';\nimport { creditReviewInitialSubscription } from 'shared/constants/creditReview/creditReviewInitialSubscription';\nimport { creditSphereInitialSubscription } from 'shared/constants/creditSphere/creditSphereInitialSubscription';\nimport { saveOnboardingState, loadOnboardingState } from 'store/localStorage';\nimport { routes } from 'routes';\nimport { Loader } from 'ui/Loader/Loader';\nimport { requestConfirmationChangedAction } from 'store/entity/entityActions';\nimport { useFeatures } from 'shared/hooks/useFeatures/useFeatures';\nimport { ErrorBoundary } from 'shared/errors';\nimport { getShopProducts } from 'modules/shop/selectors/shopSelectors';\nimport { subscriptionStatuses } from 'modules/shop/shared/constants/shopSubscriptionStatuses';\nimport { requestCreditReviewSpecsAction } from 'store/shared/creditReviewSpecs/creditReviewSpecsActions';\nimport { getEsgContractDataAction } from 'store/esg/esgActions';\n\nconst Questionnaire = React.lazy(() => import('modules/common/Questionnaire/Questionnaire'));\n\nconst qualificationId = 1;\n\nconst AuthenticatedApp = () => {\n const dispatch = useDispatch();\n const industries = useSelector(({ shared }) => shared.industries.data);\n const authData = useSelector(({ auth: { data } }) => data);\n // const showQuestionnaire = useSelector(getSharedQuestionareShow);\n const showQuestionnaire = false;\n const { autoConfirm } = useSelector(({ entity }) => entity.requestConfirmation);\n const features = useFeatures();\n\n const { data: subscriptionsData, isPending: subscriptionsIsPending } =\n useSelector(getShopProducts);\n\n const creditReviewSubscription = creditReviewInitialSubscription(subscriptionsData);\n const creditSphereSubscription = creditSphereInitialSubscription(subscriptionsData);\n\n const showCreditReviewInvitationModal =\n features.creditReviewInvitationCard &&\n !subscriptionsIsPending &&\n creditReviewSubscription &&\n creditReviewSubscription.status === subscriptionStatuses.NO_SUBSCRIPTION &&\n !loadOnboardingState();\n\n const showCreditSphereInvitationModal =\n features.creditSphereInvitationCard &&\n !subscriptionsIsPending &&\n creditSphereSubscription &&\n creditSphereSubscription.status === subscriptionStatuses.NO_SUBSCRIPTION &&\n !loadOnboardingState();\n\n const [initialSubscriptionInvitationModalOpen, setInitialSubscriptionInvitationModalOpen] =\n useState(false);\n\n const [creditSphereInvitationModalOpen, setCreditSphereInvitationModalOpen] = useState(false);\n\n useEffect(() => {\n if (!subscriptionsIsPending) {\n setInitialSubscriptionInvitationModalOpen(showCreditReviewInvitationModal);\n setCreditSphereInvitationModalOpen(showCreditSphereInvitationModal);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [subscriptionsIsPending]);\n\n const toggleInitialSubscriptionInvitationModal = () =>\n setInitialSubscriptionInvitationModalOpen(!initialSubscriptionInvitationModalOpen);\n\n const toggleCreditSphereInvitationModal = () =>\n setCreditSphereInvitationModalOpen(!creditSphereInvitationModalOpen);\n\n const navigateToCreditReviewSubscription = () => {\n saveOnboardingState(true);\n window.location.href = `/ca/subscriptions?productId=${\n creditReviewSubscription ? creditReviewSubscription.id : undefined\n }&freeTrial=true`;\n };\n\n const navigateToCreditSphereSubscription = () => {\n saveOnboardingState(true);\n window.location.href = `/ca/subscriptions?productId=${\n creditSphereSubscription ? creditSphereSubscription.id : undefined\n }&freeTrial=true`;\n };\n\n const getRelatedEntitiesData = () => {\n const { relatedIssuers } = authData.organisation;\n if (relatedIssuers && relatedIssuers.length) {\n dispatch(requestRelatedEntitiesAction({ ids: relatedIssuers.map(({ id }) => id) }));\n }\n };\n\n const getRatingCoverage = () => {\n dispatch(getRatingCoverageAction);\n };\n\n useEffect(() => {\n if (!useESGReportPage) {\n if (process.env.REACT_APP_ENV === 'production') {\n FS.identify(authData.userId, {\n displayName: `${authData.firstName} ${authData.name}`,\n email: authData.user?.email,\n });\n }\n dispatch(\n requestQuestionnaireAvailabilityAction({ qualificationId, userId: authData.userId }),\n );\n if (features.creditReview) {\n dispatch(getCreditReviewContractDataAction);\n }\n if (features.esgCompanies) {\n dispatch(getEsgContractDataAction);\n }\n dispatch(getPreferencesAction());\n dispatch(getIndustriesAction);\n dispatch(requestCreditRequestLevelsAction());\n dispatch(requestCreditReviewSpecsAction());\n dispatch(getLoggedUserAction);\n dispatch(fetchShopPermissionsAction());\n dispatch(getESGCoverageAction);\n dispatch(getRegionsAction);\n getRatingCoverage();\n getRelatedEntitiesData();\n dispatch(fetchShopProductsAction());\n\n if (localStorage.getItem('requestAutoConfirm')) {\n dispatch(requestConfirmationChangedAction({ confirmed: true, autoConfirm: true }));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (autoConfirm && !localStorage.getItem('requestAutoConfirm')) {\n localStorage.setItem('requestAutoConfirm', true);\n }\n }, [autoConfirm]);\n\n useEffect(() => {\n setIndustriesMapping(industries);\n }, [industries]);\n const renderRoutes = (\n <Routes>\n {redirectFromHashLinks()}\n {routes.map(\n (\n {\n path,\n component,\n exact,\n environment,\n role,\n permission,\n licence,\n shopPermissions,\n ...rest\n },\n index,\n ) =>\n component && (\n <Route\n key={generateKey(index, path.replace('/', '-'))}\n exact={exact}\n path={path}\n element={\n <PrivateRoute\n path={path}\n component={component}\n exact={exact}\n environment={environment}\n role={role}\n permission={permission}\n licence={licence}\n shopPermissions={shopPermissions}\n {...rest}\n />\n }\n />\n ),\n )}\n <Route component={NotFound} />\n </Routes>\n );\n\n if (useAdminPage) {\n return (\n <>\n <BrowserRouter basename={process.env.PUBLIC_URL}>\n <Navbar id=\"back-to-top-anchor\" />\n <Subnavigation />\n <ErrorBoundary showErrorPage>\n <Container>\n <Breadcrumbs separator=\">\" />\n {renderRoutes}\n </Container>\n </ErrorBoundary>\n </BrowserRouter>\n <Footer />\n <ScrollTop />\n {features.creditReviewInvitationCard && (\n <InitialSubscriptionInvitiationModal\n open={initialSubscriptionInvitationModalOpen}\n onClose={toggleInitialSubscriptionInvitationModal}\n onNavigateToInitialSubscription={navigateToCreditReviewSubscription}\n />\n )}\n {features.creditSphereInvitationCard && (\n <CreditSphereInvitiationModal\n open={creditSphereInvitationModalOpen}\n onClose={toggleCreditSphereInvitationModal}\n onNavigateToInitialSubscription={navigateToCreditSphereSubscription}\n />\n )}\n </>\n );\n }\n\n return useReportPage ? (\n <BrowserRouter basename={process.env.PUBLIC_URL}>{renderRoutes}</BrowserRouter>\n ) : (\n <>\n <BrowserRouter basename={process.env.PUBLIC_URL}>\n <Suspense fallback={<Loader center />}>\n {showQuestionnaire && <Questionnaire qualificationId={qualificationId} />}\n </Suspense>\n <Navbar id=\"back-to-top-anchor\" />\n <Subnavigation />\n <ErrorBoundary showErrorPage>\n <Container>\n <SearchBar />\n <Breadcrumbs />\n {renderRoutes}\n </Container>\n </ErrorBoundary>\n </BrowserRouter>\n <Footer />\n <ScrollTop />\n {features.creditReviewInvitationCard && (\n <InitialSubscriptionInvitiationModal\n open={initialSubscriptionInvitationModalOpen}\n onClose={toggleInitialSubscriptionInvitationModal}\n onNavigateToInitialSubscription={navigateToCreditReviewSubscription}\n />\n )}\n {features.creditSphereInvitationCard && (\n <CreditSphereInvitiationModal\n open={creditSphereInvitationModalOpen}\n onClose={toggleCreditSphereInvitationModal}\n onNavigateToInitialSubscription={navigateToCreditSphereSubscription}\n />\n )}\n </>\n );\n};\n\nexport default AuthenticatedApp;\n","import React from 'react';\n\nimport { ConnectedLogin } from 'scenes';\n\nconst UnauthenticatedApp = () => <ConnectedLogin />;\n\nexport default UnauthenticatedApp;\n","export const emailNotificationsTypes = {\n AVAILABLE_ANNOUNCEMENT_FROM_FOLLOWED_ANALYST: 'AVAILABLE_ANNOUNCEMENT_FROM_FOLLOWED_ANALYST',\n WATCHLIST_UPDATE: 'WATCHLIST_UPDATE',\n COMPLETED_ISIN_UPLOAD: 'COMPLETED_ISIN_UPLOAD',\n AVAILABLE_RATING: 'AVAILABLE_RATING',\n};","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@mui/styles';\nimport Radio from '@mui/material/Radio';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport Paper from '@mui/material/Paper';\nimport FormLabel from '@mui/material/FormLabel';\nimport FormControl from '@mui/material/FormControl';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { emailFrequencies } from 'shared/constants/news/emailFrequencies';\nimport { emailNotificationsParser } from 'shared/parsers';\nimport { emailNotificationsTypes } from 'shared/constants/news/emailNotificationsTypes';\n\nconst useStyle = makeStyles(theme => ({\n root: {\n marginBottom: theme.spacing(3),\n padding: theme.spacing(3, 2),\n },\n space: {\n marginBottom: theme.spacing(2),\n },\n label: {\n fontSize: 14,\n },\n formControl: {\n width: '100%',\n },\n}));\n\nconst initialValues = {\n frequency: emailFrequencies.DISABLED,\n portfolioUploadCompleted: false,\n ratingIsAvailable: false,\n followedAnalystPublishesAnAnnouncement: false,\n watchlistChanges: false,\n};\n\nconst EmailNotifications = ({ pristine, emailSettingsChanged }) => {\n const classes = useStyle();\n const { t } = useTranslation();\n\n const { preferences } = useSelector(({ newsFeed }) => newsFeed);\n const [data, setData] = useState(emailNotificationsParser(preferences));\n const disabled = data.frequency === initialValues.frequency;\n\n const handleFrequencyChange = event => {\n setData({ ...data, frequency: event.target.value });\n };\n\n const handleTypeChange = type => event => {\n setData({\n ...data,\n type: event.target.checked ? data.type.concat(type) : data.type.filter(el => el !== type),\n });\n };\n\n useEffect(() => {\n setData(emailNotificationsParser(preferences));\n }, [preferences]);\n\n useEffect(() => {\n if (pristine) {\n setData(emailNotificationsParser(preferences));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pristine]);\n\n useEffect(() => {\n emailSettingsChanged(data);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n const typeSelected = type => data && data.type && data.type.includes(type);\n\n return (\n <Paper className={classes.root}>\n <FormControl className={classes.formControl} component=\"fieldset\">\n <FormLabel component=\"legend\" className={classes.label}>\n {t('Frequency')}\n </FormLabel>\n <RadioGroup\n className={classes.space}\n aria-label=\"frequency\"\n name=\"frequency\"\n value={data.frequency}\n onChange={handleFrequencyChange}\n row\n >\n <FormControlLabel\n value={emailFrequencies.IMMEDIATE}\n control={<Radio color=\"primary\" />}\n label={t('Immediate')}\n />\n <FormControlLabel\n value={emailFrequencies.DAILY_DIGEST}\n control={<Radio color=\"primary\" />}\n label={t('Daily digest')}\n />\n <FormControlLabel\n value={emailFrequencies.DISABLED}\n control={<Radio color=\"primary\" />}\n label={t('No notifications')}\n />\n </RadioGroup>\n </FormControl>\n <FormControl className={classes.formControl} component=\"fieldset\">\n <FormLabel component=\"legend\" className={classes.label}>\n {t('Type')}\n </FormLabel>\n <FormGroup>\n <FormControlLabel\n disabled={disabled}\n control={\n <Checkbox\n checked={typeSelected(emailNotificationsTypes.COMPLETED_ISIN_UPLOAD)}\n onChange={handleTypeChange(emailNotificationsTypes.COMPLETED_ISIN_UPLOAD)}\n value=\"portfolioUploadCompleted\"\n color=\"primary\"\n />\n }\n label={t('Portfolio upload completed')}\n />\n <FormControlLabel\n disabled={disabled}\n control={\n <Checkbox\n checked={typeSelected(emailNotificationsTypes.AVAILABLE_RATING)}\n onChange={handleTypeChange(emailNotificationsTypes.AVAILABLE_RATING)}\n value=\"ratingIsAvailable\"\n color=\"primary\"\n />\n }\n label={t('Rating is available')}\n />\n <FormControlLabel\n disabled={disabled}\n control={\n <Checkbox\n checked={typeSelected(\n emailNotificationsTypes.AVAILABLE_ANNOUNCEMENT_FROM_FOLLOWED_ANALYST,\n )}\n onChange={handleTypeChange(\n emailNotificationsTypes.AVAILABLE_ANNOUNCEMENT_FROM_FOLLOWED_ANALYST,\n )}\n value=\"followedAnalystPublishesAnAnnouncement\"\n color=\"primary\"\n />\n }\n label={t('Followed analyst publishes an announcement')}\n />\n <FormControlLabel\n disabled={disabled}\n control={\n <Checkbox\n checked={typeSelected(emailNotificationsTypes.WATCHLIST_UPDATE)}\n onChange={handleTypeChange(emailNotificationsTypes.WATCHLIST_UPDATE)}\n value=\"watchlistChanges\"\n color=\"primary\"\n />\n }\n label={t('Watchlist changes')}\n />\n </FormGroup>\n </FormControl>\n </Paper>\n );\n};\n\nEmailNotifications.defaultProps = {\n emailSettingsChanged: () => null,\n pristine: false,\n};\n\nEmailNotifications.propTypes = {\n emailSettingsChanged: PropTypes.func,\n pristine: PropTypes.bool,\n};\n\nexport default EmailNotifications;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { useNavigate } from 'react-router-dom';\nimport clsx from 'clsx';\nimport { useSelector } from 'react-redux';\nimport { makeStyles } from '@mui/styles';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport Radio from '@mui/material/Radio';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport Paper from '@mui/material/Paper';\nimport FormControl from '@mui/material/FormControl';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport FormLabel from '@mui/material/FormLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport TextField from '@mui/material/TextField';\nimport produce from 'immer';\nimport get from 'lodash/get';\nimport cloneDeep from 'lodash/cloneDeep';\n\nimport { newsletterFrequencies } from 'shared/constants/news/newsletterFrequencies';\nimport {\n newsFeedTypes,\n newsToArtifactTypes,\n newsFeedTypesLabels,\n} from 'shared/constants/news/newsSettings';\nimport {\n flattenIndustries,\n newsFeedSettingsParser,\n newsletterSettingsParser,\n} from 'shared/parsers';\nimport { useGroupedAutocompleteStyles } from 'shared/styles/groupedAutocompleteStyles/groupedAutocompleteStyles';\nimport { useQuery } from 'shared/hooks';\nimport { GroupedSelect } from 'ui';\nimport { getParsedRegions, getNewsFeedPreferences, getAllIndustries } from 'selectors/common';\nimport { isEmpty } from 'lodash';\n\nconst useStyle = makeStyles((theme) => ({\n root: {\n marginBottom: theme.spacing(3),\n padding: theme.spacing(3, 2),\n },\n space: {\n marginBottom: theme.spacing(2),\n },\n label: {\n fontSize: 14,\n },\n formControl: {\n width: '100%',\n },\n helperText: {\n marginTop: -theme.spacing(2),\n marginBottom: theme.spacing(3),\n },\n ultimateHelperText: {\n marginTop: -theme.spacing(2),\n },\n}));\n\nconst NewsFeedSettings = ({\n followedAnalysts,\n newsletterEnabled,\n pristine,\n newsSettingsChanged,\n errorStateChanged,\n}) => {\n const classes = useStyle();\n const { t } = useTranslation();\n const groupedAutocompleteClasses = useGroupedAutocompleteStyles();\n const navigate = useNavigate();\n const { page } = useQuery();\n\n const { data: industriesData, isPending: isIndustriesDataPending } =\n useSelector(getAllIndustries);\n\n const [industries, setIndustries] = useState();\n\n const rawPreferences = useSelector(getNewsFeedPreferences);\n const [preferences, setPreferences] = useState({});\n\n useEffect(() => {\n if (isIndustriesDataPending || !industries) {\n return;\n }\n\n // Currently preferences and filtering APIs use different industries formats which becomes problematic on frontend side.\n // Therefore we have to modify industries returned by API to align with filtering format.\n const prefs = cloneDeep(rawPreferences);\n const classifications = get(prefs, 'newsFeed.classifications[0]');\n if (classifications) {\n classifications.values = classifications.values\n .map((industryCode) => industries.find(({ code }) => code === industryCode))\n .filter((industry) => industry);\n }\n setPreferences(prefs);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rawPreferences, industries]);\n\n const allRegions = useSelector(getParsedRegions);\n\n const resetPageNumber = () => page && navigate('/');\n\n const buildInitialSettings = (prefs = {}) => ({\n newsFeed: newsFeedSettingsParser(prefs),\n newsletter: newsletterSettingsParser(prefs),\n });\n\n const [settings, setSettings] = useState(buildInitialSettings(preferences));\n const [error, setError] = useState(false);\n\n const isError = () => {\n const newsTypes = !newsletterEnabled\n ? settings.newsFeed.newsTypes\n : settings.newsletter.newsTypes;\n return !newsTypes || newsTypes.length <= 0;\n };\n\n useEffect(() => {\n if (!isEmpty(preferences)) {\n setSettings(buildInitialSettings(preferences));\n }\n }, [preferences]);\n\n useEffect(() => {\n newsSettingsChanged(settings);\n setError(isError());\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [settings]);\n\n useEffect(() => {\n errorStateChanged(error);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [error]);\n\n useEffect(() => {\n if (pristine) {\n setSettings(buildInitialSettings(preferences));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pristine]);\n\n const disabled =\n newsletterEnabled && settings.newsletter.frequency === newsletterFrequencies.NONE;\n const showNewsTypes = !newsletterEnabled || !settings.newsletter.useNewsFeedPreferences;\n\n const handleFrequencyChange = (event) => {\n setSettings({\n ...settings,\n newsletter: { ...settings.newsletter, frequency: event.target.value },\n });\n resetPageNumber();\n };\n\n const handleNewsFeedCopyChange = (event) => {\n setSettings({\n ...settings,\n newsletter: { ...settings.newsletter, useNewsFeedPreferences: event.target.checked },\n });\n resetPageNumber();\n };\n\n const handleTypeChange = (newsType) => (event) => {\n const artifactTypes = newsToArtifactTypes[newsType];\n\n const newsTypes = !newsletterEnabled\n ? settings.newsFeed.newsTypes\n : settings.newsletter.newsTypes;\n\n const updatedNewsTypes = event.target.checked\n ? newsTypes.concat(...artifactTypes)\n : newsTypes.filter((el) => !artifactTypes.includes(el));\n\n setSettings(\n produce(settings, (draftSettings) => {\n if (!newsletterEnabled) {\n draftSettings.newsFeed.newsTypes = updatedNewsTypes; // eslint-disable-line no-param-reassign\n } else {\n draftSettings.newsletter.newsTypes = updatedNewsTypes; // eslint-disable-line no-param-reassign\n }\n }),\n );\n resetPageNumber();\n };\n\n const handleIndustriesChange = (_, values) => {\n const updatedIndustryTypes = values;\n\n setSettings(\n produce(settings, (draftSettings) => {\n if (!newsletterEnabled) {\n draftSettings.newsFeed.industryTypes = updatedIndustryTypes; // eslint-disable-line no-param-reassign\n } else {\n draftSettings.newsletter.industryTypes = updatedIndustryTypes; // eslint-disable-line no-param-reassign\n }\n }),\n );\n resetPageNumber();\n };\n\n const handleCountriesChange = (values) => {\n const updatedCountriesList = values.map(({ iso }) => iso);\n\n setSettings(\n produce(settings, (draftSettings) => {\n if (!newsletterEnabled) {\n draftSettings.newsFeed.countriesList = updatedCountriesList; // eslint-disable-line no-param-reassign\n } else {\n draftSettings.newsletter.countriesList = updatedCountriesList; // eslint-disable-line no-param-reassign\n }\n }),\n );\n resetPageNumber();\n };\n\n const handleFollowedAnalystsChange = () => (event) => {\n setSettings(\n produce(settings, (draftSettings) => {\n if (!newsletterEnabled) {\n draftSettings.newsFeed.limitToFollowedAnalysts = event.target.checked; // eslint-disable-line no-param-reassign\n } else {\n draftSettings.newsletter.limitToFollowedAnalysts = event.target.checked; // eslint-disable-line no-param-reassign\n }\n }),\n );\n resetPageNumber();\n };\n\n const newsTypeChecked = (newsType) => {\n const newsTypes = !newsletterEnabled\n ? settings.newsFeed.newsTypes\n : settings.newsletter.newsTypes;\n\n return newsToArtifactTypes[newsType].every((type) => newsTypes.includes(type));\n };\n\n const followedAnalystsChecked = () => {\n return !newsletterEnabled\n ? settings.newsFeed.limitToFollowedAnalysts\n : settings.newsletter.limitToFollowedAnalysts;\n };\n\n const selectedIndustries = () => {\n const industryTypes = !newsletterEnabled\n ? settings.newsFeed.industryTypes\n : settings.newsletter.industryTypes;\n\n return industries\n ? industries.filter((industry) =>\n industryTypes.some(\n (industryType) => industryType.code === industry.code || industryType === industry.code,\n ),\n )\n : [];\n };\n\n const selectedCountries = () => {\n const countriesIso = !newsletterEnabled\n ? settings.newsFeed.countriesList\n : settings.newsletter.countriesList;\n\n if (!countriesIso) {\n return [];\n }\n return allRegions.data.filter(({ iso }) => countriesIso.includes(iso));\n };\n\n useEffect(() => {\n setIndustries(flattenIndustries(industriesData));\n }, [industriesData]);\n\n return (\n <Paper className={classes.root}>\n {newsletterEnabled && (\n <>\n <FormControl className={classes.formControl} component=\"fieldset\">\n <FormLabel component=\"legend\" className={classes.label}>\n {t('Frequency')}\n </FormLabel>\n <RadioGroup\n className={classes.space}\n aria-label=\"frequency\"\n name=\"frequency\"\n value={settings.newsletter.frequency}\n onChange={handleFrequencyChange}\n row\n >\n <FormControlLabel\n value={newsletterFrequencies.WEEKLY}\n control={<Radio color=\"primary\" />}\n label={t('Weekly')}\n />\n <FormControlLabel\n value={newsletterFrequencies.NONE}\n control={<Radio color=\"primary\" />}\n label={t('None')}\n />\n </RadioGroup>\n </FormControl>\n <FormControl className={classes.formControl} component=\"fieldset\">\n <FormLabel component=\"legend\" className={classes.label}>\n {t('News feed')}\n </FormLabel>\n <FormGroup className={clsx(classes.types, newsletterEnabled && classes.space)} row>\n <FormControlLabel\n disabled={disabled}\n control={\n <Checkbox\n checked={settings.newsletter.useNewsFeedPreferences}\n onChange={handleNewsFeedCopyChange}\n value=\"newsFeed\"\n color=\"primary\"\n />\n }\n label={t('Copy my personalised news feed settings to my newsletter settings')}\n />\n </FormGroup>\n </FormControl>\n </>\n )}\n {showNewsTypes && (\n <>\n <FormControl\n error={!disabled && error}\n className={classes.formControl}\n component=\"fieldset\"\n required={!disabled}\n >\n <FormLabel component=\"legend\" className={classes.label}>\n {t('News type')}\n </FormLabel>\n <FormGroup className={classes.space} row>\n <FormControlLabel\n disabled={disabled}\n control={\n <Checkbox\n checked={newsTypeChecked(newsFeedTypes.RATING_NEWS)}\n onChange={handleTypeChange(newsFeedTypes.RATING_NEWS)}\n value=\"ratingNews\"\n color=\"primary\"\n />\n }\n label={t(newsFeedTypesLabels.RATING_NEWS)}\n />\n <FormControlLabel\n disabled={disabled}\n control={\n <Checkbox\n checked={newsTypeChecked(newsFeedTypes.RESEARCH)}\n onChange={handleTypeChange(newsFeedTypes.RESEARCH)}\n value=\"research\"\n color=\"primary\"\n />\n }\n label={t(newsFeedTypesLabels.RESEARCH)}\n />\n <FormControlLabel\n disabled={disabled}\n control={\n <Checkbox\n checked={newsTypeChecked(newsFeedTypes.COMPANY_NEWS)}\n onChange={handleTypeChange(newsFeedTypes.COMPANY_NEWS)}\n value=\"companyNews\"\n color=\"primary\"\n />\n }\n label={t(newsFeedTypesLabels.COMPANY_NEWS)}\n />\n </FormGroup>\n {!disabled && (\n <FormHelperText className={classes.helperText}>\n {t('Please select at least one news type')}\n </FormHelperText>\n )}\n </FormControl>\n <div className={clsx((followedAnalysts || newsletterEnabled) && classes.space)}>\n <Autocomplete\n multiple\n disabled={disabled}\n options={industries || []}\n onChange={handleIndustriesChange}\n getOptionLabel={(option) => option.name}\n groupBy={(option) => option.industryName}\n value={selectedIndustries()}\n renderInput={(params) => (\n <TextField {...params} label={t('Industries')} variant=\"outlined\" />\n )}\n classes={groupedAutocompleteClasses}\n />\n <GroupedSelect\n multiple\n options={allRegions.data}\n value={selectedCountries()}\n label={t('Country')}\n onChange={handleCountriesChange}\n getOptionLabel={(option) => option.name}\n groupBy={(option) => option.continent}\n />\n </div>\n {(followedAnalysts || newsletterEnabled) && (\n <>\n <FormControl className={classes.formControl} component=\"fieldset\">\n <FormLabel component=\"legend\" className={classes.label}>\n {t('Followed analysts')}\n </FormLabel>\n <FormGroup className={classes.types} row>\n <FormControlLabel\n disabled={disabled}\n control={\n <Checkbox\n checked={followedAnalystsChecked()}\n onChange={handleFollowedAnalystsChange()}\n value=\"followedAnalysts\"\n color=\"primary\"\n />\n }\n label={t('Limit to content from my followed analysts')}\n />\n </FormGroup>\n </FormControl>\n </>\n )}\n </>\n )}\n </Paper>\n );\n};\n\nNewsFeedSettings.defaultProps = {\n followedAnalysts: false,\n newsletterEnabled: false,\n pristine: false,\n newsSettingsChanged: () => null,\n errorStateChanged: () => null,\n};\n\nNewsFeedSettings.propTypes = {\n followedAnalysts: PropTypes.bool,\n newsletterEnabled: PropTypes.bool,\n pristine: PropTypes.bool,\n newsSettingsChanged: PropTypes.func,\n errorStateChanged: PropTypes.func,\n};\n\nexport default NewsFeedSettings;\n","import React, { useState, useRef } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Collapse from '@mui/material/Collapse';\nimport Box from '@mui/material/Box';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useNavigate } from 'react-router-dom';\n\nimport { PanelTitle, InfoCard, ArtifactsNews } from 'ui';\nimport { NewsFeedSettings } from 'modules/common';\n\nimport { useArtifacts } from 'shared/hooks';\nimport { creditReviewInitialSubscription } from 'shared/constants/creditReview/creditReviewInitialSubscription';\nimport { getNewsFeedAction, saveFeedSettingsAction } from 'store/newsFeed/newsFeedActions';\nimport creditReviewFreeTrialInvitationImg from 'assets/images/credit-review-free-trial-invitation.jpg';\nimport shakehandImg from 'assets/images/shakehand.png';\nimport { getHomeSubscriptions, getShopProducts } from 'modules/shop/selectors/shopSelectors';\nimport { saveOnboardingState } from 'store/localStorage';\nimport { subscriptionStatuses } from 'modules/shop/shared/constants/shopSubscriptionStatuses';\nimport { useFeatures } from 'shared/hooks/useFeatures/useFeatures';\n\nconst useStyles = makeStyles(() => ({\n container: {\n position: 'relative',\n },\n}));\n\nconst NewsFeed = () => {\n const newsFeedRef = useRef(null);\n const dispatch = useDispatch();\n const classes = useStyles();\n const { t } = useTranslation();\n const navigate = useNavigate();\n const features = useFeatures();\n\n const [toggle, setToggle] = useState(false);\n\n const handleClick = () => {\n setToggle(!toggle);\n };\n\n const { data, isPending, total, settings } = useSelector(({ newsFeed }: any) => newsFeed);\n const { data: shopProductsData, isPending: shopProductsIsPending } = useSelector(getShopProducts);\n\n const { data: subscriptionsData, isPending: subscriptionsIsPending } =\n useSelector(getHomeSubscriptions);\n\n const showSubscriptionsInvitationCard = subscriptionsData.length === 0;\n\n const creditReviewSubscription = creditReviewInitialSubscription(shopProductsData);\n\n const showCreditReviewInvitationCard =\n features.creditReviewInvitationCard &&\n creditReviewSubscription &&\n creditReviewSubscription.status === subscriptionStatuses.NO_SUBSCRIPTION;\n\n const { limit, handleChangeArtifactsPage, handleArtifactClick, currentPage } = useArtifacts({\n getArtifactsAction: getNewsFeedAction,\n getArtifactsDataActionParams: {\n settings: settings.newsFeed,\n },\n customLimit: 10,\n ref: newsFeedRef,\n useUrlParam: true,\n } as any);\n\n const newsSettingsChanged = (updatedSettings: any) => {\n dispatch(saveFeedSettingsAction({ settings: updatedSettings }));\n };\n\n const navigateToSubscriptions = () => navigate('/subscriptions');\n\n const navigateToCreditReviewSubscription = () => {\n saveOnboardingState(true);\n navigate(\n `/subscriptions?productId=${\n creditReviewSubscription ? creditReviewSubscription.id : undefined\n }`,\n );\n };\n\n return (\n <div ref={newsFeedRef}>\n <PanelTitle\n button={\n <Button variant=\"outlined\" size=\"small\" onClick={handleClick}>\n {t('News settings')}\n </Button>\n }\n >\n {t('News feed')}\n </PanelTitle>\n <Collapse in={toggle} timeout=\"auto\">\n <NewsFeedSettings newsSettingsChanged={newsSettingsChanged} />\n </Collapse>\n {!shopProductsIsPending && showCreditReviewInvitationCard && (\n <Box mb={3}>\n <InfoCard\n onClick={navigateToCreditReviewSubscription}\n title={t('CREDIT_REVIEW.FREE_TRIAL_INVITATION_CARD_TITLE')}\n text={t('CREDIT_REVIEW.FREE_TRIAL_INVITATION_CARD_DESC')}\n imgUrl={creditReviewFreeTrialInvitationImg}\n contentHeight={240}\n />\n </Box>\n )}\n {!subscriptionsIsPending && showSubscriptionsInvitationCard && (\n <Box mb={3}>\n <InfoCard\n onClick={navigateToSubscriptions}\n title={t('Looking to subscribe to our Scope products?')}\n text={t(\n 'Introducing Scope Subscriptions:\\nBrowse the subscription center and start selected subscriptions free of charge or get your free trials.',\n )}\n imgUrl={shakehandImg}\n />\n </Box>\n )}\n <div className={classes.container}>\n <ArtifactsNews\n data={data}\n isPending={isPending}\n total={total}\n limit={limit}\n currentPage={currentPage}\n onItemClick={handleArtifactClick}\n onChangePage={handleChangeArtifactsPage}\n />\n </div>\n </div>\n );\n};\n\nexport default NewsFeed;\n","import React, { useState, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { RoundButton } from 'ui/Buttons';\nimport { ratingRequestAvailable } from 'shared/functions';\nimport {\n requestEntityRatingAction,\n requestSigEntityRatingAction,\n} from 'store/entity/entityActions';\nimport { requestInstrumentRatingAction } from 'store/instrument/instrumentActions';\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { requestRatingNewsAction } from 'store/newsFeed/newsFeedActions';\nimport { usePrevious } from 'shared/hooks';\nimport { newsArtifactsTypes } from 'shared/constants/artifactTypes';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { Tooltip } from '@mui/material';\nimport { useConfirmedRequest } from 'shared/hooks/useConfirmedRequest/useConfirmedRequest';\n\nconst RequestButton = ({\n id,\n orderType,\n product,\n reset,\n alreadyRequested,\n ratingType,\n disabled,\n tooltip,\n className,\n confirmationModalOpen,\n}) => {\n const dispatch = useDispatch();\n const { t } = useTranslation();\n\n const [requested, setRequested] = useState(false);\n\n const previousReset = usePrevious(reset);\n\n useEffect(() => {\n if (reset !== previousReset && reset && !alreadyRequested) {\n setRequested(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [reset]);\n\n const handleRequestRating = () => {\n let action = null;\n if (orderType === orderTypes.SIG_ENTITY) {\n const { organisationId, userId } = product;\n action = requestSigEntityRatingAction({ ids: [id], organisationId, userId });\n } else if ([orderTypes.INSTRUMENT, orderTypes.ENTITY].includes(orderType)) {\n const level = product.l5 && product.l5.available ? 'L5' : 'L4';\n const requestActionCreator =\n orderType === orderTypes.INSTRUMENT\n ? requestInstrumentRatingAction\n : requestEntityRatingAction;\n action = requestActionCreator({ id, level });\n } else if (Object.keys(newsArtifactsTypes).indexOf(orderType) >= 0) {\n action = requestRatingNewsAction({ id, type: orderType });\n }\n\n if (action) {\n setRequested(true);\n dispatch(action);\n }\n };\n\n const { scheduleRequest } = useConfirmedRequest({\n handleRequest: handleRequestRating,\n confirmationModalOpen,\n });\n\n const handleRequestRatingClick = () => {\n if (orderType === orderTypes.SIG_ENTITY) {\n scheduleRequest();\n } else {\n handleRequestRating();\n }\n };\n\n const isRequestAvailable =\n !alreadyRequested &&\n !requested &&\n (Object.keys(newsArtifactsTypes).indexOf(orderType) >= 0 ||\n ratingRequestAvailable(product, ratingType));\n\n const renderButton = (\n <div {...(className && { className })}>\n <RoundButton\n color=\"success\"\n onClick={handleRequestRatingClick}\n disableRipple={!isRequestAvailable}\n disabled={!isRequestAvailable || disabled}\n label={isRequestAvailable ? t('Request') : t('Requested')}\n />\n </div>\n );\n\n return tooltip ? <Tooltip title={tooltip}>{renderButton}</Tooltip> : renderButton;\n};\n\nRequestButton.defaultProps = {\n product: null,\n reset: false,\n alreadyRequested: false,\n ratingType: ratingTypes.CREDIT_RATING,\n disabled: false,\n className: undefined,\n tooltip: '',\n confirmationModalOpen: () => null,\n};\n\nRequestButton.propTypes = {\n id: PropTypes.string.isRequired,\n orderType: PropTypes.string.isRequired,\n product: PropTypes.object,\n reset: PropTypes.bool,\n alreadyRequested: PropTypes.bool,\n ratingType: PropTypes.oneOf(Object.values(ratingTypes)),\n disabled: PropTypes.bool,\n tooltip: PropTypes.string,\n className: PropTypes.string,\n confirmationModalOpen: PropTypes.func,\n};\n\nexport default RequestButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { RoundButton } from 'ui/Buttons';\nimport { Tooltip } from '@mui/material';\n\nconst RequestEsgButton = ({ onRequestClick, alreadyRequested, disabled, tooltip, className }) => {\n const { t } = useTranslation();\n\n const openModal = () => {\n onRequestClick();\n };\n\n const renderButton = (\n <div {...(className && { className })}>\n <RoundButton\n color=\"success\"\n onClick={openModal}\n disableRipple={alreadyRequested}\n disabled={alreadyRequested || disabled}\n label={!alreadyRequested ? t('Request') : t('Requested')}\n />\n </div>\n );\n\n return tooltip ? <Tooltip title={tooltip}>{renderButton}</Tooltip> : renderButton;\n};\n\nRequestEsgButton.defaultProps = {\n onRequestClick: undefined,\n alreadyRequested: false,\n disabled: false,\n className: undefined,\n tooltip: '',\n};\n\nRequestEsgButton.propTypes = {\n onRequestClick: PropTypes.func,\n alreadyRequested: PropTypes.bool,\n disabled: PropTypes.bool,\n tooltip: PropTypes.string,\n className: PropTypes.string,\n};\n\nexport default RequestEsgButton;\n","import React, { useState, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport isEqual from 'lodash/isEqual';\nimport qs from 'qs';\nimport { makeStyles } from '@mui/styles';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport TextField from '@mui/material/TextField';\nimport Chip from '@mui/material/Chip';\nimport SearchIcon from '@mui/icons-material/Search';\nimport CloseIcon from '@mui/icons-material/Close';\nimport capitalize from 'lodash/capitalize';\nimport groupBy from 'lodash/groupBy';\nimport mapValues from 'lodash/mapValues';\n\nimport { useGroupedAutocompleteStyles } from 'shared/styles/groupedAutocompleteStyles/groupedAutocompleteStyles';\nimport { InputAdornment, Button } from '@mui/material';\n\nimport { searchCategories } from 'shared/constants/searchCategories';\nimport { useQuery } from 'shared/hooks/useQuery/useQuery';\nimport { setSearchFiltersAction, searchStartAction } from 'store/searchResult/searchResultActions';\nimport { performInNextCycle } from 'shared/functions';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\n\nexport const useStyles = makeStyles((theme) => ({\n root: {\n padding: `9px 14px !important`,\n },\n button: {\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n '&:not(:last-child)': {\n marginRight: theme.spacing(1),\n },\n },\n}));\n\nconst Search = ({ options, getOptionLabel, groupBy: group }) => {\n const groupedAutocompleteClasses = useGroupedAutocompleteStyles();\n const classes = useStyles();\n\n const navigate = useNavigate();\n const location = useLocation();\n const { t } = useTranslation();\n const urlParams = useQuery();\n const dispatch = useDispatch();\n\n const lastVisitedRatingType = useSelector(({ shared }) => shared.lastVisited.ratingType);\n\n const {\n query,\n region_code: regionCode,\n city,\n postal_code: postalCode,\n country,\n industry,\n ratingType = lastVisitedRatingType,\n module,\n } = urlParams;\n\n const [inputValue, setInputValue] = useState('');\n\n const getInitialSearchState = () =>\n options.length\n ? Object.keys({ query, country, industry }).reduce((results, category) => {\n if (!category || !urlParams[category]) return results;\n\n const values = urlParams[category];\n\n if (category === searchCategories.QUERY) {\n return [...results, { name: values, value: values, category }];\n }\n\n return [\n ...results,\n ...values.reduce((all, item) => {\n const fullValue = options.find(({ value }) => value === item);\n\n if (!fullValue) {\n return all;\n }\n\n return [\n ...all,\n {\n name: fullValue.name,\n value: fullValue.value,\n category,\n },\n ];\n }, []),\n ];\n }, [])\n : [];\n\n const [values, setValues] = useState(getInitialSearchState());\n\n const [shouldSubmit, setShouldSubmit] = useState(false);\n\n const handleSubmit = () => {\n if (!values.length) return;\n\n const queryParams = mapValues(groupBy(values, 'category'), (item, key) => {\n const mappedValues = item.map(({ value }) => value);\n\n if (key === searchCategories.QUERY) return mappedValues.join(' ');\n return mappedValues;\n });\n\n const queryString = qs.stringify(\n { ...queryParams, regionCode, city, postalCode, ratingType, module },\n { addQueryPrefix: true },\n );\n\n if (location.search !== queryString) {\n dispatch(searchStartAction);\n dispatch(setSearchFiltersAction({ ...queryParams, ratingType }));\n\n /* Peform navigate in next event loop cycle of JS engine.\n * Otherwise the browser is occupied with context switching,\n * hence actions dispatching and processing is significantly delayed. */\n performInNextCycle(() => navigate({ pathname: '/search-result', search: queryString }));\n }\n };\n\n useDeepCompareEffect(() => {\n const initialValues = getInitialSearchState();\n if (!isEqual(initialValues, values)) {\n setValues(getInitialSearchState());\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [options, urlParams]);\n\n useEffect(() => {\n if (!shouldSubmit) return;\n\n handleSubmit();\n\n setShouldSubmit(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldSubmit]);\n\n const handleChange = (_event, items) => {\n const newValues = items.map((item) =>\n typeof item === 'string'\n ? { category: searchCategories.QUERY, name: item, value: item }\n : item,\n );\n\n const { length } = newValues;\n\n if (length && newValues[length - 1].category === searchCategories.QUERY) {\n setShouldSubmit(true);\n }\n\n setValues(newValues);\n };\n\n const handleKeyDown = ({ key }) => {\n if (key === 'Enter' && !inputValue.length && values.length) {\n setShouldSubmit(true);\n }\n };\n\n const optionLabel = ({ name, category }) =>\n category !== 'query' ? `${capitalize(category)}: ${name}` : name;\n\n const resetValue = () => setValues([]);\n\n const isFilled = !!values.length;\n\n return (\n <Autocomplete\n freeSolo\n multiple\n options={options}\n onChange={handleChange}\n getOptionLabel={getOptionLabel}\n groupBy={group}\n value={values}\n inputValue={inputValue}\n onInputChange={(_event, newInputValue) => {\n setInputValue(newInputValue);\n }}\n open={inputValue.length > 0}\n renderInput={(params) => (\n <TextField\n onKeyDown={handleKeyDown}\n {...params}\n InputProps={{\n ...params.InputProps,\n classes: { root: classes.root },\n startAdornment: (\n <>\n <InputAdornment position=\"start\">\n <SearchIcon />\n </InputAdornment>\n {params.InputProps.startAdornment}\n </>\n ),\n endAdornment: (\n <InputAdornment position=\"end\">\n {isFilled && (\n <>\n <CloseIcon onClick={resetValue} className={classes.button} />\n <Button\n className={classes.button}\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSubmit}\n >\n {t('Search')}\n </Button>\n </>\n )}\n </InputAdornment>\n ),\n }}\n placeholder={t('SEARCH.SEARCH_FOR_ENTITIES_COUNTRIES_AND_INDUSTRIES')}\n variant=\"outlined\"\n />\n )}\n renderTags={(items, getTagProps) =>\n items.map((option, index) => (\n <Chip label={optionLabel(option)} {...getTagProps({ index })} />\n ))\n }\n classes={groupedAutocompleteClasses}\n />\n );\n};\n\nSearch.propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n ).isRequired,\n getOptionLabel: PropTypes.func.isRequired,\n groupBy: PropTypes.func.isRequired,\n};\n\nexport default Search;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport castArray from 'lodash/castArray';\nimport get from 'lodash/get';\n\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport WarningIcon from '@mui/icons-material/Warning';\n\nimport { DialogTitleWithClose, SelectWithSearch, GroupedSelect, Alert } from 'ui';\nimport { useRegions } from 'shared/hooks';\nimport { useDeepCompareEffectNoCheck as useDeepCompareEffect } from 'use-deep-compare-effect';\nimport { fetchCountryRegions } from 'services';\n\nimport { theme } from 'theme';\n\nconst useStyles = makeStyles(() => ({\n city: {\n width: '70%',\n paddingRight: theme.spacing(2),\n },\n postcode: {\n width: '30%',\n },\n warningIcon: {\n marginRight: theme.spacing(1),\n },\n applyBtn: {\n width: 140,\n },\n}));\n\nconst SearchFiltersModal = ({ open, onClose, onSubmit, searchQuery, extraMessage }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const regions = useRegions();\n\n const getInitialCountry = () => {\n const countryCode = get(searchQuery, 'country[0]', null);\n return countryCode && regions ? regions.data.find(({ iso }) => countryCode === iso) : null;\n };\n\n const getInitialValues = () => ({\n name: (searchQuery && searchQuery.query) || '',\n country: getInitialCountry(),\n region_code: (searchQuery && searchQuery.region_code) || '',\n city: (searchQuery && searchQuery.city) || '',\n postal_code: (searchQuery && searchQuery.postal_code) || '',\n });\n\n const [countryRegions, setCountryRegions] = useState({ isPending: false, data: [] });\n const [values, setValues] = useState(getInitialValues());\n\n useDeepCompareEffect(() => {\n setValues(getInitialValues);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchQuery]);\n\n const parseCountryRegions = data => {\n return castArray(data)\n .filter(x => x)\n .map(({ regionName, regionCode }) => ({\n value: regionCode,\n label: regionName,\n }));\n };\n\n const getCountryRegions = async country => {\n setCountryRegions(data => ({ ...data, isPending: true }));\n try {\n const response = await fetchCountryRegions(country);\n setCountryRegions(() => ({\n isPending: false,\n data: parseCountryRegions(response.data),\n }));\n } catch (error) {\n setCountryRegions(() => ({ isPending: false, data: [] }));\n }\n };\n\n const handleChange = name => event => {\n const value = event && event.target ? event.target.value : event;\n setValues({\n ...values,\n [name]: value,\n });\n };\n\n const handleCountryChange = country => {\n getCountryRegions(country);\n setValues({\n ...values,\n country,\n });\n };\n\n const handleSubmit = () => {\n const { country } = values;\n\n const cleanedValues = {\n ...values,\n country: country && country.iso ? country.iso : null,\n };\n\n onSubmit(cleanedValues);\n };\n\n useEffect(() => {\n handleCountryChange(values.country);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [values.country]);\n\n const countryRegionsAvailable = countryRegions.data && countryRegions.data.length;\n\n return (\n <Dialog fullWidth open={open}>\n <DialogTitleWithClose onClose={onClose}>{t('Refine your search')}</DialogTitleWithClose>\n <DialogContent>\n {extraMessage && <Alert message={t(extraMessage)} />}\n <TextField\n type=\"text\"\n label={t('ENTITY.NAME')}\n fullWidth\n value={values.name}\n onChange={handleChange('name')}\n />\n <GroupedSelect\n options={regions.data}\n value={values.country}\n label={t('Country')}\n onChange={handleCountryChange}\n getOptionLabel={option => option.name}\n groupBy={option => option.continent}\n />\n <SelectWithSearch\n disabled={countryRegions.isPending || !countryRegionsAvailable}\n label={t('Region')}\n options={countryRegions.data}\n value={values.region_code}\n onChange={handleChange('region_code')}\n />\n <TextField\n className={classes.city}\n inputProps={{\n maxLength: 25,\n }}\n type=\"text\"\n label=\"City\"\n value={values.city}\n onChange={handleChange('city')}\n />\n <TextField\n className={classes.postcode}\n inputProps={{\n maxLength: 25,\n }}\n type=\"text\"\n label=\"Postcode\"\n value={values.postal_code}\n onChange={handleChange('postal_code')}\n />\n {values.country && !countryRegions.isPending && !countryRegionsAvailable && (\n <Box display=\"flex\" mt={1}>\n <WarningIcon htmlColor={theme.palette.custom.warning} className={classes.warningIcon} />\n <Typography variant=\"body2\">\n {t(\n 'Currently there is no filter for regions available for your selection. Please provide a city name and / or postcode to find more accurate matches (national fomat for postcodes apply).',\n )}\n </Typography>\n </Box>\n )}\n </DialogContent>\n <DialogActions>\n <Button\n className={classes.applyBtn}\n disabled={countryRegions.isPending}\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSubmit}\n >\n {t(countryRegions.isPending ? 'Loading...' : 'Search')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nSearchFiltersModal.defaultProps = {\n searchQuery: null,\n extraMessage: null,\n};\n\nSearchFiltersModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n extraMessage: PropTypes.string,\n searchQuery: PropTypes.shape({\n query: PropTypes.string,\n country: PropTypes.arrayOf(PropTypes.string),\n industry: PropTypes.arrayOf(PropTypes.string),\n ratingType: PropTypes.string,\n city: PropTypes.string,\n region_code: PropTypes.string,\n postal_code: PropTypes.string,\n }),\n};\n\nexport default SearchFiltersModal;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport { RenderElement } from 'shared/hoc';\nimport { allStandardRolesTypes } from 'shared/constants/rolesTypes';\nimport { Search } from 'modules/common';\nimport { getSearchbleIndustries, getSearchableRegions } from 'selectors/common';\n\nconst SearchBar = () => {\n const { data: regions } = useSelector(getSearchableRegions);\n const industries = useSelector(getSearchbleIndustries);\n\n const options = [...industries, ...regions];\n\n return (\n <Search\n options={options}\n getOptionLabel={(option) => option.name}\n groupBy={(option) => option.group}\n />\n );\n};\n\nexport default () => {\n const location = useLocation();\n\n return (\n <RenderElement\n role={allStandardRolesTypes}\n condition={location.pathname.includes('search-result')}\n >\n <SearchBar />\n </RenderElement>\n );\n};\n","import get from 'lodash/get';\nimport React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport Chip from '@mui/material/Chip';\n\nimport { DialogTitleWithClose, RangeSlider, SelectWithSearch, GroupedSelect } from 'ui';\nimport { creditRatingRangeValues } from 'shared/constants/creditRatingRangeValues';\nimport { useGroupedAutocompleteStyles } from 'shared/styles/groupedAutocompleteStyles/groupedAutocompleteStyles';\nimport { useRegions } from 'shared/hooks';\nimport { getSortedFlattenedIndustries } from 'selectors/common';\nimport { useDeepCompareEffectNoCheck as useDeepCompareEffect } from 'use-deep-compare-effect';\n\nconst CreditRatingEntitiesFiltersModal = ({\n open,\n onClose,\n onSubmit,\n searchQuery,\n initialFilter,\n filterableIndustries,\n allowEmptyIndustriesFilter,\n}) => {\n const groupedAutocompleteClasses = useGroupedAutocompleteStyles();\n const { t } = useTranslation();\n const industriesData = useSelector(getSortedFlattenedIndustries);\n const regions = useRegions(searchQuery);\n\n const ratingTypes = [\n { value: 'PUBLIC', label: t('Public') },\n { value: 'ON_REQUEST', label: t('Subscription') },\n ];\n\n const actionTypes = [\n { value: 'upgrade', label: t('Upgrade') },\n { value: 'downgrade', label: t('Downgrade') },\n { value: 'new', label: t('New') },\n { value: 'review', label: t('Review') },\n { value: 'default', label: t('Default') },\n { value: 'conversion to solicited', label: t('Conversion to solicited') },\n { value: 'outlook/trend', label: t('Outlook/Trend') },\n { value: 'withdrawal', label: t('Withdrawal') },\n { value: 'affirmed', label: t('Affirmed') },\n ];\n\n const getInitialValues = () => ({\n countries: [],\n industries: [],\n ratingType: null,\n ratingRange: [\n creditRatingRangeValues[0].value,\n creditRatingRangeValues[creditRatingRangeValues.length - 1].value,\n ],\n actionType: null,\n ...initialFilter,\n });\n\n const [values, setValues] = useState(getInitialValues());\n\n const [industries, setIndustries] = useState([]);\n\n useDeepCompareEffect(() => {\n setValues(getInitialValues);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFilter]);\n\n useEffect(() => {\n setIndustries(filterableIndustries || industriesData);\n }, [industriesData, filterableIndustries]);\n\n const handleChange = name => value => {\n setValues({\n ...values,\n [name]: value,\n });\n };\n\n const handleIndustriesChange = (_event, sectors) => {\n let newSectors = sectors;\n if (!allowEmptyIndustriesFilter && !sectors.length) {\n const initialIndustry = get(initialFilter, 'industries[0]');\n newSectors = initialIndustry ? [initialIndustry] : [];\n }\n setValues({\n ...values,\n industries: newSectors,\n });\n };\n\n const handleSubmit = () => {\n const { ratingRange } = values;\n\n const cleanedValues = {\n ...values,\n countries: values.countries.map(({ iso }) => iso),\n industrySectors: values.industries.map(({ code, industryCode }) => ({\n sector: code,\n industry: industryCode,\n })),\n longTermRatingFrom: encodeURIComponent(creditRatingRangeValues[ratingRange[0] - 1].label),\n longTermRatingTo: encodeURIComponent(creditRatingRangeValues[ratingRange[1] - 1].label),\n };\n\n onSubmit(cleanedValues);\n };\n\n const handleRatingRangeChange = (_event, newValues) => {\n setValues({\n ...values,\n ratingRange: newValues,\n });\n };\n\n const isValueRemovable = () => {\n return allowEmptyIndustriesFilter || values.industries.length > 1;\n };\n\n return (\n <Dialog fullWidth open={open}>\n <DialogTitleWithClose onClose={onClose}>{t('Apply filters')}</DialogTitleWithClose>\n <DialogContent>\n <GroupedSelect\n multiple\n options={regions.data}\n value={values.countries}\n label={t('Country')}\n onChange={handleChange('countries')}\n getOptionLabel={option => option.name}\n groupBy={option => option.continent}\n />\n <Autocomplete\n multiple\n options={industries}\n onChange={handleIndustriesChange}\n getOptionLabel={option => option.name}\n groupBy={option => option.industryName}\n value={values.industries}\n renderInput={params => (\n <TextField {...params} label={t('Industries')} variant=\"outlined\" />\n )}\n renderTags={(value, getTagProps) =>\n value.map((option, index) => (\n <Chip\n label={option.name}\n {...getTagProps({ index })}\n disabled={!isValueRemovable()}\n />\n ))\n }\n classes={groupedAutocompleteClasses}\n />\n <SelectWithSearch\n label={t('Rating type')}\n options={ratingTypes}\n value={values.ratingType}\n onChange={handleChange('ratingType')}\n />\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Entity credit rating range')}\n options={creditRatingRangeValues}\n values={values.ratingRange}\n onChange={handleRatingRangeChange}\n />\n </Box>\n <SelectWithSearch\n label={t('Action type')}\n options={actionTypes}\n value={values.actionType}\n onChange={handleChange('actionType')}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" color=\"primary\" onClick={handleSubmit}>\n {t('Apply filters')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nCreditRatingEntitiesFiltersModal.defaultProps = {\n searchQuery: null,\n initialFilter: {},\n filterableIndustries: null,\n allowEmptyIndustriesFilter: true,\n};\n\nCreditRatingEntitiesFiltersModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n searchQuery: PropTypes.string,\n initialFilter: PropTypes.object,\n filterableIndustries: PropTypes.arrayOf(PropTypes.object),\n allowEmptyIndustriesFilter: PropTypes.bool,\n};\n\nexport default CreditRatingEntitiesFiltersModal;\n","export enum Score {\n ENVIRONMENT,\n SOCIAL,\n GOVERNANCE,\n TOTAL,\n}\n","export const portfolioItemIdTypes = {\n SCOPEONE_ID: 'scopeoneIdentifier',\n ESG_ID: 'esgId',\n ARTIFACT_ID: 'artifactId',\n};\n","export const dedicatedPortfoliosLabels = {\n scoringTool: 'ESG Scoring Tool',\n};\n","import React, { FC, useCallback, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Theme } from '@mui/material/styles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { MUIDataTableColumn } from 'mui-datatables';\nimport Tooltip from '@mui/material/Tooltip';\nimport Chip from '@mui/material/Chip';\nimport LockIcon from '@mui/icons-material/Lock';\nimport LockOpenIcon from '@mui/icons-material/LockOpen';\nimport { grey } from '@mui/material/colors';\nimport InfoIcon from '@mui/icons-material/InfoOutlined';\nimport { CountryAndIndustries } from 'shared/types/shop';\nimport { useQuery } from 'shared/hooks';\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { InfoTooltip, ScoreChangeIndicator } from 'ui';\nimport { LinkButton } from 'ui/Buttons';\nimport { RequestButton, RequestEsgButton } from 'modules/common';\nimport { setRatingColor, formatDate } from 'shared/functions';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { outlookLabels } from 'shared/constants/outlookTypes';\nimport { activityMappingCreditRating } from 'shared/mappings/activityLabels';\nimport { Button, Grid, IconButton } from '@mui/material';\nimport { RatingStatus } from 'shared/types/ratingStatus';\nimport { Score } from 'shared/types/score';\nimport clsx from 'clsx';\nimport { Box } from '@scope/scope-one-ui/core';\nimport Check from '@scope/scope-one-ui/assets/icons/check.svg';\nimport X from '@scope/scope-one-ui/assets/icons/x.svg';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\nimport { OrangeRatingChip } from '../../../../shared/styles/OrangeRatingChip/OrangeRatingChip';\n\nconst useStyles = makeStyles((theme: Theme) => ({\n tooltip: {\n marginLeft: 3,\n marginBottom: 3,\n },\n chip: {\n color: theme.palette.custom.white,\n backgroundColor: theme.palette.custom.darkGrayAlt,\n },\n totalChip: {\n color: theme.palette.custom.white,\n backgroundColor: theme.palette.custom.primary,\n },\n requestCell: {\n backgroundColor: grey[100],\n },\n statusInfo: {\n position: 'relative',\n '& > span': {\n width: '12rem',\n textAlign: 'center',\n position: 'absolute',\n whiteSpace: 'nowrap',\n zIndex: 1,\n transform: 'translate(-30%, -50%)',\n },\n },\n cstLabel: {\n gridGap: theme.spacing(1),\n },\n infoIcon: {\n width: theme.spacing(2.5),\n height: theme.spacing(2.5),\n color: theme.palette.primary.main,\n },\n}));\n\ntype Scenario = 'hotHouse' | 'orderly' | 'disorderly';\n\ntype UseEntitiesTableColumnsProps = {\n ratingType: ratingTypes;\n isPortfolioTable?: boolean;\n isRequestEnabled?: boolean;\n isUnlockEnabled?: boolean;\n onRequestClick: (ids: string[]) => unknown;\n onUnlockClick: (countriesAndIndustries?: CountryAndIndustries[]) => unknown;\n isESGScoringTool?: boolean;\n hasESGScoringToolSubscription?: boolean;\n};\n\ntype RatingStateProps = {\n value?: boolean;\n};\n\nconst RatingState: FC<RatingStateProps> = ({ value }) => {\n if (value)\n return (\n <Check width={SIZES.spacing(2)} height={SIZES.spacing(2)} stroke={COLORS.success.main} />\n );\n\n return <X width={SIZES.spacing(1.5)} height={SIZES.spacing(1.5)} stroke={COLORS.error.main} />;\n};\n\nconst useEntitiesTableColumns = ({\n ratingType,\n isPortfolioTable,\n isRequestEnabled,\n isUnlockEnabled,\n onRequestClick,\n onUnlockClick,\n isESGScoringTool,\n}: UseEntitiesTableColumnsProps) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const { module } = useQuery();\n\n const getOptionsForClimateStressTest = () => ({\n customBodyRender: ([item, scenario]) => {\n return item;\n },\n });\n\n const cstTooltipRenderer = ({ index, ...column }) => (\n <Tooltip key={index} placement=\"top\" title={<>{t('Yearly Loss (Ave.) % - (2022-2050)')}</>}>\n <Box display=\"flex\" alignItems=\"center\" className={classes.cstLabel}>\n {column.label}\n <InfoIcon className={classes.infoIcon} />\n </Box>\n </Tooltip>\n );\n\n const renderClimateLossScore = (\n score: Record<Scenario, Record<string, number>>,\n scenario: Scenario,\n scoreName: string,\n ) => {\n if (!scenario || !score[scenario]) {\n return <></>;\n }\n\n return `${score[scenario][scoreName].toFixed(2)}%`;\n };\n\n const getSentimentOptions = (column: Score) => ({\n sort: true,\n setCellProps: ({ props }: any) => ({ className: !props.label && classes.requestCell }),\n customBodyRender: ([score, hasPermission, hasCompany, hasScore]: any) => {\n const isTotalScoreColumn = column === Score.TOTAL;\n\n if (!hasScore) {\n return <>N/A</>;\n }\n\n if (!hasPermission && isTotalScoreColumn) {\n return (\n <Button color=\"primary\" variant=\"contained\" onClick={() => onUnlockClick()}>\n {t('UNLOCK')}\n </Button>\n );\n }\n\n if (!hasCompany && isTotalScoreColumn) {\n return <RequestEsgButton onRequestClick={() => onRequestClick([score.esgId])} />;\n }\n\n const label = isTotalScoreColumn ? score.totalScore : score;\n\n if (label === '-') {\n return <>{label}</>;\n }\n\n return (\n <Chip color={isTotalScoreColumn ? 'primary' : 'default'} label={label} variant=\"outlined\" />\n );\n },\n });\n\n const getImpactOptions = (column: Score) => ({\n sort: true,\n setCellProps: ({ props }: any) => ({ className: !props.label && classes.requestCell }),\n customBodyRender: ([score, state]: any) => {\n const isSocialColumn = column === Score.SOCIAL;\n const isTotalScoreColumn = column === Score.TOTAL;\n const customScore = state === RatingStatus.DONE;\n const requiresScoring = state === RatingStatus.IN_PROGRESS || state === RatingStatus.TO_DO;\n\n const unableToRequest = state === RatingStatus.UNABLE_TO_REQUEST;\n\n if (isESGScoringTool && (requiresScoring || unableToRequest)) {\n if (isSocialColumn) {\n return (\n <div className={classes.statusInfo}>\n <span>\n {state === RatingStatus.TO_DO && t('ESG.MISSING_FINANCIAL_STATEMENT')}\n {state === RatingStatus.UNABLE_TO_REQUEST && t('ESG.ONLY_AVAILABLE_FOR_CORPORATES')}\n {state === RatingStatus.IN_PROGRESS && t('IN_PROGRESS')}\n </span>\n </div>\n );\n }\n\n if (isTotalScoreColumn && isRequestEnabled && state === RatingStatus.IN_PROGRESS) {\n return <RequestEsgButton alreadyRequested />;\n }\n\n if (isTotalScoreColumn && isRequestEnabled && state === RatingStatus.TO_DO) {\n return <RequestEsgButton onRequestClick={() => onRequestClick([score.esgId])} />;\n }\n\n if (\n isTotalScoreColumn &&\n isUnlockEnabled &&\n !isRequestEnabled &&\n state === RatingStatus.TO_DO\n ) {\n return (\n <Button color=\"primary\" variant=\"contained\" onClick={() => onUnlockClick()}>\n {t('UNLOCK')}\n </Button>\n );\n }\n\n return <></>;\n }\n\n const label = isTotalScoreColumn ? score.totalScore : score;\n\n if (label === '-') {\n return <>{label}</>;\n }\n\n return (\n <Chip\n color={isTotalScoreColumn ? 'primary' : 'default'}\n label={label}\n variant={customScore ? 'filled' : 'outlined'}\n className={clsx(customScore && (isTotalScoreColumn ? classes.totalChip : classes.chip))}\n />\n );\n },\n });\n\n const columnsByRatingType: Partial<Record<ratingTypes, MUIDataTableColumn[]>> = {\n [ratingTypes.CREDIT_RATING]: [\n { name: 'extendedData', label: t('ENTITY.EXTENDED_DATA'), options: { display: 'excluded' } },\n {\n name: 'name',\n label: t('ENTITY.NAME'),\n options: {\n sort: true,\n customBodyRender: (v: any) => (\n <LinkButton to={`entities/${v[0]}?module=credit`} label={v[1]} withPathname />\n ),\n },\n },\n { name: 'lei', label: t('ENTITY.LEI'), options: { sort: true } },\n { name: 'countryCode', label: t('ENTITY.COUNTRY'), options: { sort: true } },\n { name: 'industry', label: t('ENTITY.INDUSTRY'), options: { sort: true } },\n {\n name: 'ultimateIssuerName',\n label: t('ENTITY.ULTIMATE_PARENT'),\n options: {\n sort: true,\n customBodyRender: (v: any) =>\n v && <LinkButton to={`entities/${v[0]}?module=credit`} label={v[1]} withPathname />,\n },\n },\n {\n name: 'ratingType',\n label: t('ENTITY.RATING_TYPE'),\n options: {\n display: false,\n sort: false,\n },\n },\n {\n name: 'demandType',\n label: t('ENTITY.DEMAND_TYPE'),\n options: {\n display: false,\n sort: false,\n },\n },\n {\n name: 'entityRating',\n label: t('ENTITY.ENTITY_RATING'),\n options: {\n display: false,\n sort: false,\n customBodyRender: (v: any) => {\n const [\n id,\n product,\n rating,\n outlook,\n hasLicence,\n ratingTrend,\n previousRating,\n previousOutlook,\n longTermRatingDate,\n countriesAndIndustries,\n demandType,\n ] = v;\n const isUnsolicited = demandType?.includes('Unsolicited without participation');\n let body: React.ReactElement | null = null;\n const tooltip = (\n <>\n <div>\n {t('Rating')}: {rating}\n </div>\n <div>{outlook ? `${t('Outlook')}: ${t(outlookLabels[outlook])}` : ''}</div>\n {ratingTrend && (\n <>\n <div>\n {t('ENTITY.PREVIOUS_RATING')}: {previousRating}\n </div>\n <div>\n {t('ENTITY.PREVIOUS_OUTLOOK')}: {previousOutlook}\n </div>\n <div>\n {t('ENTITY.CHANGE_AS_OF_LATEST_RATING_ACTION')}:\n {formatDate(longTermRatingDate)}\n </div>\n </>\n )}\n </>\n );\n\n /* \n Special case: \"There are duplicates in storefront db and we agreed\n that if there is no industry we just show the request button.\"\n\n https://jira.scopegroup.com/browse/SCI-5083 \n */\n const hasIndustry = countriesAndIndustries?.[0].industries.length!!;\n\n if (rating) {\n body = (\n <Tooltip title={tooltip}>\n {isUnsolicited ? (\n <OrangeRatingChip label={rating} variant=\"outlined\" />\n ) : (\n <Chip label={rating} variant=\"outlined\" color={setRatingColor(outlook)} />\n )}\n </Tooltip>\n );\n } else if (!hasLicence && hasIndustry) {\n body = (\n <IconButton\n color=\"inherit\"\n onClick={() => onUnlockClick(countriesAndIndustries)}\n size=\"large\"\n >\n <LockIcon />\n </IconButton>\n );\n } else if (product) {\n body = <RequestButton id={id} product={product} orderType={orderTypes.ENTITY} />;\n }\n return body;\n },\n },\n },\n {\n name: 'shortTermRating',\n label: t('ENTITY.SHORT_TERM_RATING'),\n options: {\n display: false,\n sort: false,\n customBodyRender: (v: any) => {\n const [label, ratingTrend, previousRating, shortTermRatingDate, demandType] = v;\n const isUnsolicited = demandType?.includes('Unsolicited without participation');\n if (!label) return <></>;\n\n const tooltip = (\n <>\n <div>\n {t('ENTITY.SHORT_TERM_RATING')}: {label}\n </div>\n {ratingTrend && (\n <>\n <div>\n {t('ENTITY.PREVIOUS_RATING')}: {previousRating}\n </div>\n <div>\n {t('ENTITY.CHANGE_AS_OF_LATEST_RATING_ACTION')}:{' '}\n {formatDate(shortTermRatingDate)}\n </div>\n </>\n )}\n </>\n );\n\n const content = isUnsolicited ? (\n <OrangeRatingChip label={label} variant=\"outlined\" />\n ) : (\n <Chip label={label} variant=\"outlined\" />\n );\n return ratingTrend ? <Tooltip title={tooltip}>{content}</Tooltip> : content;\n },\n },\n },\n {\n name: 'publicRating',\n label: t('ENTITY.PUBLIC_RATING'),\n options: {\n sort: true,\n setCellProps: () => ({ style: { textAlign: 'center' } }),\n customBodyRender: (value) => <RatingState value={value} />,\n },\n },\n {\n name: 'subscriptionRating',\n label: t('ENTITY.SUBSCRIPTION_RATING'),\n options: {\n sort: true,\n setCellProps: () => ({ style: { textAlign: 'center' } }),\n customBodyRender: (value) => <RatingState value={value} />,\n },\n },\n {\n name: 'restrictedSubscriptionRating',\n label: t('ENTITY.RESTRICTED_SUBSCRIPTION_RATING'),\n options: {\n sort: true,\n setCellProps: () => ({ style: { textAlign: 'center' } }),\n customBodyRender: (value) => <RatingState value={value} />,\n },\n },\n {\n name: 'addedDate',\n label: t('ENTITY.ADDED'),\n options: {\n display: isPortfolioTable,\n sort: true,\n customBodyRender: (value: any) => (value ? formatDate(value, 'dd/MM/yyyy') : '-'),\n },\n },\n {\n name: 'activity',\n label: t('ENTITY.ACTIVITY'),\n options: {\n display: isPortfolioTable,\n sort: true,\n sortOrder: 'asc',\n hint: t('ENTITY.ACTIVITY_HINT'),\n customBodyRender: ([\n longTermRatingTrend,\n previousLongTermRating,\n longTermRatingDate,\n ]: any) => {\n return longTermRatingTrend ? (\n <ScoreChangeIndicator\n activity={longTermRatingTrend}\n activityMapping={activityMappingCreditRating}\n scoreChangeDate={longTermRatingDate}\n scoreOld={previousLongTermRating}\n showLabel\n />\n ) : null;\n },\n } as any,\n },\n ],\n [ratingTypes.ESG_IMPACT]: [\n {\n name: 'id',\n label: t('Id'),\n options: { sort: false, display: false, viewColumns: false },\n },\n {\n name: 'companyName',\n label: t('Entity Name'),\n options: {\n sort: true,\n customBodyRender: ([companyName, state]: any, { rowData: [entityId] }: any) => {\n const customScore = state === RatingStatus.DONE;\n\n return (\n <Grid container alignItems=\"center\">\n <LinkButton\n to={`entities/${entityId}?companyModule=esg-impact&module=esg`}\n label={companyName.toUpperCase()}\n withPathname\n />\n {customScore && (\n <InfoTooltip\n title={t('ESG.CUSTOM_SCORE_TOOLTIP')}\n iconClassName={classes.tooltip}\n />\n )}\n </Grid>\n );\n },\n },\n },\n { name: 'companyCountry', label: t('Country'), options: { sort: true } },\n { name: 'industry', label: t('Industry'), options: { sort: true } },\n {\n name: 'environmentScore',\n label: t('Environment'),\n options: getImpactOptions(Score.ENVIRONMENT),\n },\n { name: 'socialScore', label: t('Social'), options: getImpactOptions(Score.SOCIAL) },\n {\n name: 'governanceScore',\n label: t('Governance'),\n options: getImpactOptions(Score.GOVERNANCE),\n },\n { name: 'totalScore', label: t('Total Score'), options: getImpactOptions(Score.TOTAL) },\n {\n name: 'wasPurchased',\n label: t('Subscription'),\n options: {\n sort: false,\n customBodyRender: (value: any) => (value ? <LockOpenIcon /> : <LockIcon />),\n },\n },\n { name: 'ids', label: t('ENTITY.EXTENDED_DATA'), options: { display: 'excluded' } },\n ],\n [ratingTypes.SENTIMENT]: [\n {\n name: 'id',\n label: t('Id'),\n options: { sort: false, display: false, viewColumns: false },\n },\n {\n name: 'companyName',\n label: t('Entity Name'),\n options: {\n sort: true,\n customBodyRender: ([companyName]: any, { rowData: [entityId] }: any) => (\n <Grid container alignItems=\"center\">\n <LinkButton\n to={`entities/${entityId}?companyModule=esg-sentiment&module=esg`}\n label={companyName.toUpperCase()}\n withPathname\n />\n </Grid>\n ),\n },\n },\n { name: 'companyCountry', label: t('Country'), options: { sort: true } },\n { name: 'industry', label: t('Industry'), options: { sort: true } },\n {\n name: 'environmentScore',\n label: t('Environment'),\n options: getSentimentOptions(Score.ENVIRONMENT),\n },\n { name: 'socialScore', label: t('Social'), options: getSentimentOptions(Score.SOCIAL) },\n {\n name: 'governanceScore',\n label: t('Governance'),\n options: getSentimentOptions(Score.GOVERNANCE),\n },\n { name: 'totalScore', label: t('Total Score'), options: getSentimentOptions(Score.TOTAL) },\n {\n name: 'wasPurchased',\n label: t('Subscription'),\n options: {\n sort: false,\n customBodyRender: (value: any) => (value ? <LockOpenIcon /> : <LockIcon />),\n },\n },\n { name: 'ids', label: t('ENTITY.EXTENDED_DATA'), options: { display: 'excluded' } },\n ],\n [ratingTypes.CLIMATE_STRESS_TEST]: [\n {\n name: 'id',\n label: t('Id'),\n options: { sort: false, display: false, viewColumns: false },\n },\n {\n name: 'name',\n label: t('Entity Name'),\n options: {\n customBodyRender: ([item]) => (\n <LinkButton\n to={`entities/${item.id}?companyModule=climate-stress-test&module=esg`}\n label={item.name.toUpperCase()}\n withPathname\n />\n ),\n },\n },\n { name: 'country', label: t('Country'), options: getOptionsForClimateStressTest() },\n {\n name: 'industry',\n label: t('Industry'),\n options: getOptionsForClimateStressTest(),\n },\n {\n name: 'climateLoss',\n label: t('PORTFOLIO.CLIMATE_LOSS'),\n options: {\n customHeadLabelRender: cstTooltipRenderer,\n customBodyRender: ([score, scenario]) =>\n renderClimateLossScore(score, scenario, 'climateLoss'),\n },\n },\n {\n name: 'physicalRiskLoss',\n label: t('PORTFOLIO.PHYSICAL_RISK_LOSS'),\n options: {\n customHeadLabelRender: cstTooltipRenderer,\n customBodyRender: ([score, scenario]) =>\n renderClimateLossScore(score, scenario, 'physicalRiskLoss'),\n },\n },\n {\n name: 'transitionRiskLoss',\n label: t('PORTFOLIO.TRANSITION_RISK_LOSS'),\n options: {\n customHeadLabelRender: cstTooltipRenderer,\n customBodyRender: ([score, scenario]) =>\n renderClimateLossScore(score, scenario, 'transitionRiskLoss'),\n },\n },\n ],\n };\n\n const buildInitialColumns = useCallback(\n () => columnsByRatingType[ratingType],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [ratingType, isPortfolioTable],\n );\n\n const [initialColumns, setInitialColumns] = useState(buildInitialColumns());\n\n useEffect(() => {\n setInitialColumns(buildInitialColumns());\n }, [buildInitialColumns]);\n\n return initialColumns;\n};\n\nexport default useEntitiesTableColumns;\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport lowerCase from 'lodash/lowerCase';\n\nimport { Datatable } from 'ui';\nimport { CreateNewPortfolioModal, RequestEsgScoreModal } from 'modules/common/Modals';\nimport ESGEntitiesFilterModal from 'modules/ESG/ESGEntitiesFilterModal';\nimport CreditRatingEntitiesFiltersModal from 'modules/creditRating/CreditRatingEntitiesFiltersModal';\n\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { purchaseTypes } from 'shared/constants/purchaseTypes';\nimport { selectedItemsToProductsParser, ratingRequestParser } from 'shared/parsers';\nimport { removeItemsFromPortfolio, putNotifyError } from 'shared/functions';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { useTable, usePortfolioModals } from 'shared/hooks';\nimport { postOrderMany } from 'services/orders';\nimport { exportService, asyncExportService } from 'services/export';\nimport { requestSentimentScore } from 'services/esg/fetchSentimentSummary';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { portfolioItemIdTypes } from 'shared/constants/portfolio/portfolioItemIdTypes';\nimport { exportModes } from 'shared/constants/exportModes';\nimport { dedicatedPortfoliosLabels as esgDedicatedPortfoliosLabels } from 'shared/constants/esg/dedicatedPortfoliosLabels';\n\nimport { ESGScoringToolModal, ESGEntityRemovalConfirmationModal } from 'modules/ESG';\nimport { useFeatures } from 'shared/hooks/useFeatures/useFeatures';\nimport { shopProductsCategories } from 'modules/shop/shared/constants/shopProductsCategories';\nimport { ShopRelatedProductsModal } from 'modules/shop/components/ShopRelatedProductsModal';\nimport { ShopProductLines } from 'modules/shop/shared/constants/shopProductLines';\nimport { RatingStatus } from 'shared/types/ratingStatus';\n\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { ItemType } from 'shared/types/portfolios';\nimport { MenuItem, Select } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport useEntitiesTableColumns from './useEntitiesTableColumns';\nimport { switchScenarioAction } from '../../../../store/searchResult/searchResultActions';\nimport { theme } from '../../../../theme';\n\nconst useStyles = makeStyles(() => ({\n cstSelect: {\n position: 'absolute',\n top: theme.spacing(3),\n right: theme.spacing(2),\n },\n}));\n\nconst EntitiesTable = ({\n paginationLimit,\n dataSelector,\n actionCreator,\n actionCreatorParams,\n searchQuery,\n dossierId,\n ratingType,\n onItemsRemoved,\n constantFilter,\n initialFilter,\n initialFilterModalValues,\n filterableIndustries,\n allowEmptyIndustriesFilter,\n renderDatatable,\n extendedExport,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const didUnmount = useRef(false);\n const dispatch = useDispatch();\n const entity = useSelector((state) => state.entity);\n const { success } = useSnackbar();\n\n const { requestedEntityId = entity.id, isRatingRequestPending, ratingRequestError } = entity;\n const isPortfolioTable = !!dossierId;\n\n const { esgCompanies } = useFeatures();\n\n const { singleDossier: dossierData } = useSelector(({ dossier }) => dossier);\n const isDedicatedPortfolio = isPortfolioTable && dossierData && dossierData.isDedicated;\n const isESGScoringTool =\n ratingType === ratingTypes.ESG_IMPACT &&\n isDedicatedPortfolio &&\n lowerCase(esgDedicatedPortfoliosLabels.scoringTool) === lowerCase(dossierData.name);\n\n const esgContractData = useSelector(({ esgContract }) => esgContract);\n const { contractData } = useSelector(({ creditReview }) => creditReview);\n\n const { query } = searchQuery;\n\n const [entitiesFiltersModalOpen, setEntitiesFiltersModalOpen] = useState(false);\n const [ESGScoringToolModalOpen, setESGScoringToolModalOpen] = useState(false);\n const [ESGEntityRemovalConfirmationModalOpen, setESGEntityRemovalConfirmationModalOpen] =\n useState(false);\n const [countriesAndIndustries, setCountriesAndIndustries] = useState();\n\n const [requestedEntitiesIds, setRequestedEntitiesIds] = useState([]);\n const [requestLoading, setRequestLoading] = useState(false);\n const [selected, setSelected] = useState({ items: {}, count: 0 });\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: null });\n\n const [dossiersRequest, setDossiersRequest] = useState({ items: {}, count: 0, type: null });\n const [isRequestEsgModalOpen, setRequestEsgModalOpen] = useState(false);\n\n const [isRelatedProductsModalOpen, setRelatedProductsModalOpen] = useState(false);\n\n const [cstScenario, setCstScenario] = useState('orderly');\n\n const onSelectedChange = (selectedItems) => {\n setSelected({ ...selectedItems });\n setDossiersRequest({ ...selectedItems, type: ItemType.SCOPEONEID });\n };\n\n const toggleEntitiesFiltersModal = () => setEntitiesFiltersModalOpen(!entitiesFiltersModalOpen);\n const toggleESGScoringToolModal = () => setESGScoringToolModalOpen(!ESGScoringToolModalOpen);\n const toggleESGEntityRemovalConfirmationModal = () =>\n setESGEntityRemovalConfirmationModalOpen(!ESGEntityRemovalConfirmationModalOpen);\n\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n\n const [esgProductData] = useState({\n category: shopProductsCategories.esgAnalysis,\n // FIXME: We probably also need to determine here if we should show Tools or Review products based on\n // esgExists field just like in Summary Card. Let's think about best way to do it.\n productLine: ShopProductLines.Tools,\n countriesAndIndustries: [],\n });\n\n const [creditRatingProductData, setCreditRatingProductData] = useState();\n\n useEffect(() => {\n setCreditRatingProductData({\n category: shopProductsCategories.creditAnalysis,\n productLine: ShopProductLines.Rating,\n countriesAndIndustries: countriesAndIndustries || [],\n });\n }, [countriesAndIndustries]);\n\n useEffect(() => {\n if (\n !isRatingRequestPending &&\n ratingRequestError &&\n requestedEntitiesIds.includes(requestedEntityId)\n ) {\n setRequestedEntitiesIds((values) => values.filter((id) => id !== requestedEntityId));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isRatingRequestPending]);\n\n useEffect(() => {\n return () => {\n didUnmount.current = true;\n };\n }, []);\n\n const openRequestEsgModal = (selectedIds) => {\n setRequestedEntitiesIds(selectedIds);\n setRequestEsgModalOpen(true);\n };\n\n const openRelatedProductsModal = (data) => {\n if (data) {\n setCountriesAndIndustries(data);\n }\n setRelatedProductsModalOpen(true);\n };\n\n const requestScore = (ids) => {\n if (ratingType === ratingTypes.ESG_IMPACT) {\n openRequestEsgModal(ids);\n return;\n }\n\n if (ratingType === ratingTypes.SENTIMENT) {\n requestSentimentScore(ids[0]).then(() => dispatch(refreshTable));\n }\n };\n\n const initialColumns = useEntitiesTableColumns({\n ratingType,\n isPortfolioTable,\n isRequestEnabled:\n (ratingType === ratingTypes.CREDIT_REVIEW &&\n contractData &&\n contractData.cofaceRequestPermission) ||\n (ratingType === ratingTypes.ESG_IMPACT &&\n esgCompanies &&\n esgContractData &&\n esgContractData.esgRequestPermission),\n isUnlockEnabled: ratingType === ratingTypes.ESG_IMPACT && esgCompanies,\n onRequestClick: requestScore,\n onUnlockClick: ratingType !== ratingTypes.CREDIT_REVIEW ? openRelatedProductsModal : null,\n isESGScoringTool,\n });\n\n const columnsFilterKeysMapping = [\n null,\n null,\n 'country',\n 'industrySectors',\n 'ratingType',\n ['longTermRatingFrom', 'longTermRatingTo'],\n null,\n ];\n\n const { columns, pagination, onTableChange, onSortChange, refreshTable, setFilter, isFiltered } =\n useTable({\n paginationLimit,\n initialColumns,\n columnsFilterKeysMapping,\n getTableDataAction: actionCreator,\n getTableDataActionParams: actionCreatorParams,\n constantFilter,\n initialFilter,\n });\n\n const handleEntitiesFiltersModalSubmit = (values) => {\n const {\n countries,\n industrySectors,\n actionType,\n ratingType: ratingTypeFilter,\n longTermRatingFrom,\n longTermRatingTo,\n } = values;\n\n const newFilters = {\n ...(countries.length && { countries }),\n ...(industrySectors.length !== 0 && { industrySectors }),\n ...(ratingTypeFilter !== null && { ratingType: [ratingTypeFilter] }),\n ...(actionType !== null && { actionType }),\n ...(longTermRatingFrom !== 'D' && { longTermRatingFrom }),\n ...(longTermRatingTo !== 'AAA' && { longTermRatingTo }),\n };\n\n setFilter(newFilters);\n setShouldRefresh({ value: true, reason: refreshReasons.FILTERS_APPLIED });\n setEntitiesFiltersModalOpen(false);\n };\n\n const handleESGEntitiesFiltersModalSubmit = (values) => {\n const {\n countries,\n sectors,\n environmentFrom,\n environmentTo,\n socialFrom,\n socialTo,\n governanceFrom,\n governanceTo,\n totalScoreFrom,\n totalScoreTo,\n } = values;\n\n const newFilters = {\n ...(countries.length && { countries }),\n ...(sectors.length !== 0 && { industries: sectors }),\n ...(environmentFrom !== '0' && { environmentFrom }),\n ...(environmentTo !== '10' && { environmentTo }),\n ...(socialFrom !== '0' && { socialFrom }),\n ...(socialTo !== '10' && { socialTo }),\n ...(governanceFrom !== '0' && { governanceFrom }),\n ...(governanceTo !== '10' && { governanceTo }),\n ...(totalScoreFrom !== '0' && { totalScoreFrom }),\n ...(totalScoreTo !== '10' && { totalScoreTo }),\n };\n\n setFilter(newFilters);\n setShouldRefresh({ value: true, reason: refreshReasons.FILTERS_APPLIED });\n setEntitiesFiltersModalOpen(false);\n };\n\n useEffect(() => {\n setRequestLoading(dataSelector.isPending);\n }, [dataSelector.isPending]);\n\n const extractIdsByType = (items, idType) => {\n return Object.values(items).map((itemData) => {\n const [scopeoneId, esgId, artifactId] = itemData[itemData.length - 1];\n switch (idType) {\n case portfolioItemIdTypes.SCOPEONE_ID:\n return scopeoneId;\n case portfolioItemIdTypes.ESG_ID:\n return esgId;\n case portfolioItemIdTypes.ARTIFACT_ID:\n return artifactId;\n default:\n return undefined;\n }\n });\n };\n\n const handleRequestButton = (items) => {\n setRequestLoading(true);\n\n if (ratingType === ratingTypes.ESG_IMPACT) {\n const selectedItems = extractIdsByType(items, portfolioItemIdTypes.ESG_ID);\n setRequestedEntitiesIds(selectedItems);\n setRequestEsgModalOpen(true);\n setRequestLoading(false);\n } else {\n const selectedItems = Object.keys(items);\n const filteredRatingRequest = ratingRequestParser(selectedItems);\n const products = selectedItemsToProductsParser({\n selected: filteredRatingRequest,\n artifactType: orderTypes.ENTITY,\n frequency: 0,\n purchaseType: purchaseTypes.ONE_TIME,\n });\n\n postOrderMany({ products })\n .then(() => {\n if (!didUnmount.current) {\n setShouldRefresh({ value: true, reason: refreshReasons.PRODUCT_REQUESTED });\n dispatch(refreshTable);\n }\n })\n .finally(() => {\n if (!didUnmount.current) {\n setRequestLoading(false);\n }\n });\n }\n };\n\n const handleUnlockedButton = (unlocked = true) => {\n setRelatedProductsModalOpen(false);\n\n if (countriesAndIndustries) {\n setCountriesAndIndustries(null);\n }\n\n if (unlocked) {\n setShouldRefresh({ value: true, reason: refreshReasons.SUBSCRIPTION_PURCHASED });\n dispatch(refreshTable);\n }\n };\n\n const closeRequestEsgModal = (requested = true) => {\n if (requested) setShouldRefresh({ value: true, reason: refreshReasons.PRODUCT_REQUESTED });\n setRequestedEntitiesIds([]);\n setRequestEsgModalOpen(false);\n dispatch(refreshTable);\n };\n\n const dossierItemsIds = (items) => {\n if (ratingType === ratingTypes.ESG_IMPACT) {\n return extractIdsByType(items, portfolioItemIdTypes.ARTIFACT_ID);\n // eslint-disable-next-line no-else-return\n } else {\n return Object.values(items).map((itemData) => {\n const id = itemData[0];\n return Array.isArray(id) ? id[2] : id;\n });\n }\n };\n\n const exportItemsIds = (items) => {\n if (isESGScoringTool) {\n return extractIdsByType(items, portfolioItemIdTypes.ESG_ID);\n // eslint-disable-next-line no-else-return\n } else {\n return Object.values(items).map((itemData) => {\n const id = itemData[0];\n return ratingType === ratingTypes.CREDIT_RATING || Array.isArray(id) ? id[0] : id;\n });\n }\n };\n\n const removeItems = (items) => {\n const ids = dossierItemsIds(items);\n setRequestLoading(true);\n removeItemsFromPortfolio({ dossierId, dossierItemsIds: ids, ratingType })\n .then(() => {\n if (!didUnmount.current) {\n setShouldRefresh({ value: true, reason: refreshReasons.DELETED });\n dispatch(refreshTable);\n }\n })\n .finally(() => {\n if (!didUnmount.current) {\n setRequestLoading(false);\n onItemsRemoved();\n }\n });\n };\n\n const downloadErrorHandler = () => {\n putNotifyError(t('ENTITY.FAILED_TO_EXPORT_ENTITIES'));\n };\n\n const onExportSuccess = (message) => {\n success(t('TOOLBAR.EXPORT_STARTED'));\n };\n\n const exportToExcel = (items) => {\n exportService({\n items: exportItemsIds(items),\n type: orderTypes.ENTITY,\n onError: downloadErrorHandler,\n ratingType,\n mode: extendedExport ? exportModes.EXTENDED : exportModes.BASIC,\n });\n };\n\n const asyncExportToExcel = (items) => {\n asyncExportService({\n items: exportItemsIds(items),\n type: orderTypes.ENTITY,\n onError: downloadErrorHandler,\n onSuccess: onExportSuccess,\n ratingType,\n mode: exportModes.BASIC,\n });\n };\n\n const asyncExtendedExportToExcel = (items) => {\n asyncExportService({\n items: exportItemsIds(items),\n onError: downloadErrorHandler,\n onSuccess: onExportSuccess,\n ratingType,\n mode: exportModes.EXTENDED,\n });\n };\n\n const toolbarData = [\n {\n text: t('TOOLBAR.REQUEST_SELECTED'),\n handler: handleRequestButton,\n disabled:\n !selected.count ||\n (ratingType === ratingTypes.CREDIT_REVIEW &&\n (!contractData || !contractData.cofaceRequestPermission)) ||\n (ratingType === ratingTypes.ESG_IMPACT &&\n /* Extracts status from the 'name' column */\n (Object.values(selected.items).some((cols) => cols[1][1] !== RatingStatus.TO_DO) ||\n (esgCompanies && (!esgContractData || !esgContractData.esgRequestPermission)))),\n hidden:\n !selected.count ||\n (ratingType === ratingTypes.ESG_IMPACT && !isESGScoringTool) ||\n ratingTypes.SENTIMENT,\n data: selected.items,\n },\n {\n text: t(isPortfolioTable ? 'TOOLBAR.COPY_TO_PORTFOLIO' : 'TOOLBAR.ADD_TO_PORTFOLIO'),\n handler: addToPortfolio.show,\n hidden: !selected.count,\n },\n {\n text: t('TOOLBAR.EXPORT_TO_EXCEL'),\n handler: exportToExcel,\n data: selected.items,\n hidden: !selected.count || ratingType === ratingTypes.ESG_IMPACT || ratingTypes.SENTIMENT,\n },\n {\n text: t('TOOLBAR.EXPORT_VIEW_TO_EXCEL'),\n handler: asyncExportToExcel,\n data: selected.items,\n hidden: !selected.count || ratingType !== ratingTypes.ESG_IMPACT || ratingTypes.SENTIMENT,\n },\n {\n text: t('TOOLBAR.EXPORT_FULL_DATA_TO_EXCEL'),\n handler: asyncExtendedExportToExcel,\n data: selected.items,\n hidden: !selected.count || ratingType !== ratingTypes.ESG_IMPACT || ratingTypes.SENTIMENT,\n },\n { text: t('TOOLBAR.SHARE'), hidden: true },\n {\n text: t('TOOLBAR.DELETE'),\n handler: isESGScoringTool ? toggleESGEntityRemovalConfirmationModal : removeItems,\n data: selected.items,\n hidden: !isPortfolioTable || !selected.count,\n },\n ];\n\n const customButtonLabel = isESGScoringTool ? t('CREATE_COMPANIES') : undefined;\n const onCustomButtonClick = isESGScoringTool ? toggleESGScoringToolModal : undefined;\n\n const onESGScoringToolUploadFinished = () => {\n setShouldRefresh({ value: true, reason: refreshReasons.UPDATED });\n dispatch(refreshTable);\n };\n\n const onESGEntityRemovalConfirm = () => {\n toggleESGEntityRemovalConfirmationModal();\n removeItems(selected.items);\n };\n\n const handleCstChange = (v) => {\n setCstScenario(v);\n dispatch(switchScenarioAction({ scenario: v }));\n };\n\n const shouldShowFilters = () => {\n if (ratingType === ratingTypes.CLIMATE_STRESS_TEST) {\n return false;\n }\n return !isPortfolioTable && ratingType !== ratingTypes.SENTIMENT;\n };\n\n return (\n <>\n <Datatable\n loading={requestLoading || !renderDatatable}\n columns={columns}\n pagination={pagination}\n data={renderDatatable ? dataSelector.data : []}\n tableToolbar={\n ratingType === ratingTypes.CLIMATE_STRESS_TEST && (\n <Select\n size=\"small\"\n className={classes.cstSelect}\n value={cstScenario}\n onChange={(e) => handleCstChange(e.target.value)}\n >\n <MenuItem key=\"orderly\" value=\"orderly\">\n {t('Orderly')}\n </MenuItem>\n <MenuItem key=\"disorderly\" value=\"disorderly\">\n {t('Disorderly')}\n </MenuItem>\n <MenuItem key=\"hotHouse\" value=\"hotHouse\">\n {t('Hot House')}\n </MenuItem>\n </Select>\n )\n }\n total={dataSelector.total}\n onSelectedChange={onSelectedChange}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n toolbarData={toolbarData}\n isFiltered={isFiltered}\n onApplyFiltersClick={() => setEntitiesFiltersModalOpen(true)}\n shouldRefresh={shouldRefresh}\n showFilters={shouldShowFilters()}\n onCustomButtonClick={onCustomButtonClick}\n customButtonLabel={customButtonLabel}\n removeShadow\n />\n {ratingType === ratingTypes.CREDIT_RATING && (\n <CreditRatingEntitiesFiltersModal\n open={entitiesFiltersModalOpen}\n onClose={toggleEntitiesFiltersModal}\n onSubmit={handleEntitiesFiltersModalSubmit}\n searchQuery={query}\n initialFilter={initialFilterModalValues}\n filterableIndustries={filterableIndustries}\n allowEmptyIndustriesFilter={allowEmptyIndustriesFilter}\n />\n )}\n {(ratingType === ratingTypes.ESG_IMPACT || ratingType === ratingTypes.SENTIMENT) && (\n <ESGEntitiesFilterModal\n open={entitiesFiltersModalOpen}\n onClose={toggleEntitiesFiltersModal}\n onSubmit={handleESGEntitiesFiltersModalSubmit}\n searchQuery={query}\n filterableIndustries={filterableIndustries}\n initialFilter={initialFilterModalValues}\n />\n )}\n {esgCompanies && isESGScoringTool && (\n <>\n <ESGScoringToolModal\n open={ESGScoringToolModalOpen}\n onClose={toggleESGScoringToolModal}\n onUploaded={onESGScoringToolUploadFinished}\n />\n <ESGEntityRemovalConfirmationModal\n open={ESGEntityRemovalConfirmationModalOpen}\n onClose={toggleESGEntityRemovalConfirmationModal}\n onConfirm={onESGEntityRemovalConfirm}\n />\n </>\n )}\n {ratingType === ratingTypes.ESG_IMPACT && (\n <RequestEsgScoreModal\n open={isRequestEsgModalOpen}\n onClose={closeRequestEsgModal}\n selectIds={requestedEntitiesIds}\n />\n )}\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n itemsData={dossiersRequest}\n ratingType={ratingType}\n itemType=\"ENTITY\"\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={dossiersRequest}\n itemType=\"ENTITY\"\n />\n {isRelatedProductsModalOpen &&\n esgProductData &&\n (ratingType === ratingTypes.ESG_IMPACT || ratingType === ratingTypes.SENTIMENT) && (\n <ShopRelatedProductsModal\n data={esgProductData}\n open={isRelatedProductsModalOpen}\n onClose={handleUnlockedButton}\n onConfirm={handleUnlockedButton}\n module={ratingType}\n />\n )}\n {isRelatedProductsModalOpen &&\n creditRatingProductData &&\n ratingType === ratingTypes.CREDIT_RATING && (\n <ShopRelatedProductsModal\n data={creditRatingProductData}\n open={isRelatedProductsModalOpen}\n onClose={handleUnlockedButton}\n onConfirm={handleUnlockedButton}\n />\n )}\n </>\n );\n};\n\nEntitiesTable.defaultProps = {\n actionCreatorParams: {},\n searchQuery: {},\n dossierId: null,\n onItemsRemoved: () => null,\n constantFilter: {},\n initialFilter: {},\n initialFilterModalValues: {},\n filterableIndustries: null,\n allowEmptyIndustriesFilter: true,\n ratingType: ratingTypes.CREDIT_RATING,\n renderDatatable: true,\n paginationLimit: null,\n extendedExport: false,\n};\n\nEntitiesTable.propTypes = {\n dataSelector: PropTypes.shape({\n isPending: PropTypes.bool.isRequired,\n total: PropTypes.number.isRequired,\n data: PropTypes.arrayOf(PropTypes.any).isRequired,\n }).isRequired,\n actionCreator: PropTypes.func.isRequired,\n actionCreatorParams: PropTypes.object,\n searchQuery: PropTypes.shape({\n query: PropTypes.string,\n country: PropTypes.arrayOf(PropTypes.string),\n industry: PropTypes.arrayOf(PropTypes.string),\n ratingType: PropTypes.string,\n }),\n dossierId: PropTypes.string,\n onItemsRemoved: PropTypes.func,\n constantFilter: PropTypes.object,\n initialFilter: PropTypes.object,\n initialFilterModalValues: PropTypes.object,\n filterableIndustries: PropTypes.arrayOf(PropTypes.object),\n allowEmptyIndustriesFilter: PropTypes.bool,\n ratingType: PropTypes.oneOf(Object.values(ratingTypes)),\n renderDatatable: PropTypes.bool,\n paginationLimit: PropTypes.number,\n extendedExport: PropTypes.bool,\n};\n\nexport default EntitiesTable;\n","import React, { useState, useEffect, useRef, useCallback } from 'react';\nimport { useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { Datatable } from 'ui';\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\n\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { removeItemsFromPortfolio, putNotifyError } from 'shared/functions';\nimport { useTable, usePortfolioModals } from 'shared/hooks';\nimport { exportService } from 'services/export';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\n\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { useInstrumentsRatingRequest } from 'modules/creditRating/hooks/useInstrumentsRatingRequest';\nimport { useInstrumentRenderers } from 'modules/creditRating/hooks/useInstrumentRenderers';\nimport { ItemType } from 'shared/types/portfolios';\nimport InstrumentsFiltersModal from './InstrumentsFiltersModal';\n\nconst InstrumentsTable = ({\n dataSelector,\n actionCreator,\n actionCreatorParams,\n searchQuery,\n dossierId,\n ratingType,\n onItemsRemoved,\n initialFilter,\n initialFilterModalValues,\n renderDatatable,\n}) => {\n const { t } = useTranslation();\n const didUnmount = useRef(false);\n const dispatch = useDispatch();\n const [selected, setSelected] = useState({ items: {}, count: 0 });\n const [isPending, setIsPending] = useState(false);\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: null });\n\n const onRequested = () => {\n setShouldRefresh({ value: true, reason: refreshReasons.PRODUCT_REQUESTED });\n dispatch(refreshTable);\n };\n\n const { requestLoading, requestRating } = useInstrumentsRatingRequest({ onRequested });\n const { nameRenderer, ratingRenderer, addedDateRenderer, protectedRenderer } =\n useInstrumentRenderers();\n const isPortfolioTable = !!dossierId;\n\n const [instrumentsFiltersModalOpen, setInstrumentsFiltersModalOpen] = useState(false);\n const [dossiersRequest, setDossiersRequest] = useState({ items: {}, count: 0, type: null });\n\n const toggleInstrumentsFiltersModal = () =>\n setInstrumentsFiltersModalOpen(!instrumentsFiltersModalOpen);\n\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n\n const onSelectedChange = (selectedItems) => {\n setSelected({ ...selectedItems });\n setDossiersRequest({ ...selectedItems, type: ItemType.SCOPEONEID });\n };\n\n useEffect(() => {\n return () => {\n didUnmount.current = true;\n };\n }, []);\n\n const buildInitialColumns = useCallback(\n () => [\n { name: 'ratingType', label: 'Rating type', options: { sort: false } },\n { name: 'extendedData', label: 'Extended Data', options: { display: 'excluded' } },\n {\n name: 'name',\n label: 'Name',\n options: {\n sort: !isPortfolioTable,\n customBodyRender: nameRenderer,\n },\n },\n {\n name: 'isin',\n label: 'ISIN',\n options: {\n sort: !isPortfolioTable,\n customBodyRender: protectedRenderer,\n },\n },\n {\n name: 'entityName',\n label: 'Entity',\n options: { sort: !isPortfolioTable, customBodyRender: protectedRenderer },\n },\n {\n name: 'instrumentRating',\n label: 'Instrument rating',\n options: {\n sort: false,\n customBodyRender: ratingRenderer,\n },\n },\n {\n name: 'maturityDate',\n label: 'Maturity date',\n options: { sort: !isPortfolioTable, customBodyRender: protectedRenderer },\n },\n {\n name: 'couponPercent',\n label: 'Coupon',\n options: { sort: !isPortfolioTable, customBodyRender: protectedRenderer },\n },\n {\n name: 'issueVolume',\n label: 'Instrument volume',\n options: { sort: !isPortfolioTable, customBodyRender: protectedRenderer },\n },\n {\n name: 'addedDate',\n label: 'Added',\n options: {\n display: isPortfolioTable,\n sort: false,\n setCellHeaderProps: () => ({ align: 'right' }),\n customBodyRender: addedDateRenderer,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const [initialColumns, setInitialColumns] = useState(buildInitialColumns());\n\n useEffect(() => {\n setInitialColumns(buildInitialColumns());\n }, [buildInitialColumns]);\n\n const columnsFilterKeysMapping = [\n null,\n null,\n null,\n null,\n 'ratingType',\n ['ratingFrom', 'ratingTo'],\n ['maturityDateFrom', 'maturityDateTo'],\n ['couponRangeFrom', 'couponRangeTo'],\n null,\n ['issueVolumeFrom', 'issueVolumeTo', 'issueVolumeCurrency'],\n ];\n\n const { columns, pagination, onTableChange, onSortChange, refreshTable, setFilter, isFiltered } =\n useTable({\n initialColumns,\n columnsFilterKeysMapping,\n getTableDataAction: actionCreator,\n getTableDataActionParams: actionCreatorParams,\n initialFilter,\n });\n\n const dossierItemsIds = (items) => Object.values(items).map((itemData) => itemData[2]);\n const exportItemsIds = (items) => Object.values(items).map((itemData) => itemData[0][0]);\n\n const removeItems = (items) => {\n const ids = dossierItemsIds(items);\n setIsPending(true);\n removeItemsFromPortfolio({ dossierId, dossierItemsIds: ids, ratingType })\n .then(() => {\n if (!didUnmount.current) {\n setShouldRefresh({ value: true, reason: refreshReasons.DELETED });\n dispatch(refreshTable);\n }\n })\n .finally(() => {\n if (!didUnmount.current) {\n setIsPending(false);\n onItemsRemoved();\n }\n });\n };\n\n const handleInstrumentsFiltersModalSubmit = (values) => {\n const {\n countries,\n industrySectors,\n ratingFrom,\n ratingTo,\n couponRangeFrom,\n couponRangeTo,\n issueVolumeFrom,\n issueVolumeTo,\n maturityDateFrom,\n maturityDateTo,\n issueVolumeCurrency,\n } = values;\n\n const newFilters = {\n ...(countries.length && { countries }),\n ...(industrySectors.length !== 0 && { industrySectors }),\n ...(values.ratingType !== null && { ratingType: [values.ratingType] }),\n ...(ratingFrom !== 'D' && { ratingFrom }),\n ...(ratingTo !== 'AAA' && { ratingTo }),\n ...(couponRangeFrom !== 0 && { couponRangeFrom }),\n ...(couponRangeTo !== 15 && { couponRangeTo }),\n ...(issueVolumeFrom !== 100000000 && { issueVolumeFrom }),\n ...(issueVolumeTo !== 1000000000 && { issueVolumeTo }),\n ...(maturityDateFrom !== null && { maturityDateFrom }),\n ...(maturityDateTo !== null && { maturityDateTo }),\n ...(issueVolumeCurrency !== null && { issueVolumeCurrency }),\n };\n\n setFilter(newFilters);\n setShouldRefresh({ value: true, reason: refreshReasons.FILTERS_APPLIED });\n setInstrumentsFiltersModalOpen(false);\n };\n\n const downloadErrorHandler = () => {\n putNotifyError(t('Failed to export instruments'));\n };\n\n const exportToExcel = () => {\n exportService({\n items: exportItemsIds(selected.items),\n type: orderTypes.INSTRUMENT,\n onError: downloadErrorHandler,\n });\n };\n\n const toolbarData = [\n {\n text: 'Request selected',\n handler: requestRating,\n disabled: !selected.count,\n hidden: true,\n data: selected.items,\n },\n {\n text: 'Add to portfolio',\n handler: addToPortfolio.show,\n hidden: !selected.count || isPortfolioTable,\n },\n {\n text: 'Export to Excel',\n handler: exportToExcel,\n hidden: !selected.count,\n },\n { text: 'Share', hidden: true },\n {\n text: 'Delete',\n handler: removeItems,\n data: selected.itemIds,\n hidden: !isPortfolioTable || !selected.count,\n },\n ];\n\n return (\n <>\n <Datatable\n loading={dataSelector.isPending || isPending || requestLoading || !renderDatatable}\n columns={columns}\n pagination={pagination}\n data={renderDatatable ? dataSelector.data : []}\n total={dataSelector.total}\n onSelectedChange={onSelectedChange}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n toolbarData={toolbarData}\n isFiltered={isFiltered}\n onApplyFiltersClick={() => setInstrumentsFiltersModalOpen(true)}\n shouldRefresh={shouldRefresh}\n showFilters={!isPortfolioTable}\n removeShadow\n />\n <InstrumentsFiltersModal\n open={instrumentsFiltersModalOpen}\n onClose={toggleInstrumentsFiltersModal}\n onSubmit={handleInstrumentsFiltersModalSubmit}\n searchQuery={searchQuery}\n initialFilter={initialFilterModalValues}\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={dossiersRequest}\n itemType=\"INSTRUMENT\"\n />\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n itemsData={dossiersRequest}\n itemType=\"INSTRUMENT\"\n />\n </>\n );\n};\n\nInstrumentsTable.defaultProps = {\n actionCreatorParams: {},\n searchQuery: null,\n dossierId: null,\n onItemsRemoved: () => null,\n initialFilter: {},\n initialFilterModalValues: {},\n ratingType: ratingTypes.CREDIT_RATING,\n renderDatatable: true,\n};\n\nInstrumentsTable.propTypes = {\n dataSelector: PropTypes.shape({\n isPending: PropTypes.bool.isRequired,\n total: PropTypes.number.isRequired,\n data: PropTypes.arrayOf(PropTypes.any).isRequired,\n }).isRequired,\n actionCreator: PropTypes.func.isRequired,\n actionCreatorParams: PropTypes.object,\n searchQuery: PropTypes.string,\n dossierId: PropTypes.string,\n onItemsRemoved: PropTypes.func,\n initialFilter: PropTypes.object,\n initialFilterModalValues: PropTypes.object,\n ratingType: PropTypes.oneOf(Object.values(ratingTypes)),\n renderDatatable: PropTypes.bool,\n};\n\nexport default InstrumentsTable;\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport MUIDataTable from 'mui-datatables';\nimport { columns } from '../../../../scenes/IssuerDashboard/config';\n\nconst InvestorRelationsTable: FC = () => {\n // @ts-ignore:next-line\n const { relations = [] } = useSelector((root) => root.investor);\n\n const options = {\n pagination: false,\n selectableRows: undefined,\n filter: false,\n search: false,\n download: false,\n print: false,\n viewColumns: false,\n elevation: 0,\n };\n\n return <MUIDataTable title=\"\" columns={columns} data={relations} options={options} />;\n};\n\nexport default InvestorRelationsTable;\n","import React, { lazy, Suspense, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Dialog from '@mui/material/Dialog';\n\nimport { Loader } from 'ui';\nimport { RoundButton } from 'ui/Buttons';\n\nconst ViewPeerGroupModal = lazy(() => import('./ViewPeerGroupModal'));\n\nconst ViewPeerGroup = ({ id, fetchPeersNames }) => {\n const { t } = useTranslation();\n const [isOpen, setIsOpen] = useState(false);\n\n const handleOpen = () => setIsOpen(true);\n const handleClose = () => setIsOpen(false);\n\n return (\n <>\n <RoundButton label={t('View peer group')} onClick={handleOpen} />\n <Dialog open={isOpen} maxWidth=\"md\" fullWidth>\n <Suspense fallback={<Loader center />}>\n <ViewPeerGroupModal id={id} onClose={handleClose} fetchPeersNames={fetchPeersNames} />\n </Suspense>\n </Dialog>\n </>\n );\n};\n\nViewPeerGroup.propTypes = {\n id: PropTypes.string.isRequired,\n fetchPeersNames: PropTypes.func.isRequired,\n};\n\nexport default ViewPeerGroup;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableRow from '@mui/material/TableRow';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nimport { DialogTitleWithClose, Loader } from 'ui';\n\nconst useStyles = makeStyles({\n table: {\n '& td': {\n verticalAlign: 'top',\n },\n },\n primary: {\n fontWeight: 'bold',\n },\n});\n\nconst ViewCountriesModal = ({ open, onClose, regionsSelector, ...props }) => {\n const { t } = useTranslation();\n const { data, isPending } = useSelector(regionsSelector);\n const classes = useStyles();\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\" fullWidth {...props}>\n <DialogTitleWithClose onClose={onClose}>{t('Countries')}</DialogTitleWithClose>\n <DialogContent>\n {isPending ? (\n <Loader center />\n ) : (\n <TableContainer component={Paper}>\n <Table className={classes.table}>\n <TableBody>\n {data.map(({ continent, countries }) => (\n <TableRow key={continent}>\n <TableCell className={classes.aggregate}>\n <Typography className={classes.primary}>{t(continent)}</Typography>\n </TableCell>\n <TableCell>\n {countries.map(({ name }) => (\n <Typography key={name}>{t(name)}</Typography>\n ))}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n )}\n </DialogContent>\n </Dialog>\n );\n};\n\nViewCountriesModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n regionsSelector: PropTypes.func.isRequired,\n};\n\nexport { ViewCountriesModal };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableRow from '@mui/material/TableRow';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nimport { DialogTitleWithClose } from 'ui';\nimport { industries } from 'shared/constants/industries';\n\nconst useStyles = makeStyles({\n table: {\n '& td': {\n verticalAlign: 'top',\n },\n },\n primary: {\n fontWeight: 'bold',\n },\n});\n\nconst ViewIndustriesModal = ({ open, onClose, ...props }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\" fullWidth {...props}>\n <DialogTitleWithClose onClose={onClose}>{t('Industries')}</DialogTitleWithClose>\n <DialogContent>\n <TableContainer component={Paper}>\n <Table className={classes.table}>\n <TableBody>\n {industries.map(({ aggregate, includes }) => (\n <TableRow key={aggregate}>\n <TableCell>\n <Typography className={classes.primary}>{t(aggregate)}</Typography>\n </TableCell>\n <TableCell>\n {includes.map(include => (\n <Typography key={include}>{t(include)}</Typography>\n ))}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </DialogContent>\n </Dialog>\n );\n};\n\nViewIndustriesModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n industries: PropTypes.arrayOf(PropTypes.object).isRequired,\n};\n\nexport { ViewIndustriesModal };\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport { Formik, Form, Field } from 'formik';\nimport isEmpty from 'lodash/isEmpty';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport FormHelperText from '@mui/material/FormHelperText';\n\nimport { Alert, DialogTitleWithClose, Loader } from 'ui';\nimport { changePasswordSchema } from 'shared/validations';\nimport { changePasswordService } from 'services/login/changePasswordService';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nconst useStyles = makeStyles(theme => ({\n alertWrapper: {\n padding: '0 16px',\n },\n helperText: {\n display: 'initial',\n color: theme.palette.error.dark,\n },\n}));\n\nconst ChangePasswordModal = ({ open, onClose }) => {\n const [isPending, setIsPending] = useState(false);\n const [error, setError] = useState(false);\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const classes = useStyles();\n\n const initialValues = {\n oldPassword: '',\n newPassword: '',\n confirmNewPassword: '',\n };\n\n const handleSubmit = values => {\n setIsPending(true);\n setError(false);\n\n changePasswordService(values)\n .then(() => {\n onClose();\n setError(false);\n dispatch(\n addNotificationAction({\n message: 'Password successfully changed',\n variant: 'success',\n }),\n );\n })\n .catch(() => setError(true))\n .finally(() => {\n setIsPending(false);\n });\n };\n\n const handleClose = () => {\n onClose();\n setError(false);\n };\n\n return (\n <Dialog open={open} onClose={handleClose}>\n {isPending && <Loader cover />}\n <DialogTitleWithClose onClose={handleClose}>{t('Change password')}</DialogTitleWithClose>\n {error && (\n <div className={classes.alertWrapper}>\n <Alert message={t('The current password is not correct.')} variant=\"error\" />\n </div>\n )}\n <Formik\n initialValues={initialValues}\n onSubmit={handleSubmit}\n validationSchema={changePasswordSchema}\n >\n {({ errors, touched }) => (\n <Form noValidate>\n <DialogContent>\n <Field name=\"oldPassword\">\n {({ field }) => (\n <>\n <TextField\n {...field}\n type=\"password\"\n label=\"Current password\"\n error={errors.oldPassword && touched.oldPassword}\n fullWidth\n />\n {touched.oldPassword && errors.oldPassword && (\n <FormHelperText className={classes.helperText}>\n {errors.oldPassword}\n </FormHelperText>\n )}\n </>\n )}\n </Field>\n <Field name=\"newPassword\">\n {({ field }) => (\n <>\n <TextField\n {...field}\n type=\"password\"\n label=\"New password\"\n error={errors.newPassword && touched.newPassword}\n fullWidth\n />\n {touched.newPassword && errors.newPassword && (\n <FormHelperText className={classes.helperText}>\n {errors.newPassword}\n </FormHelperText>\n )}\n </>\n )}\n </Field>\n <Field name=\"confirmNewPassword\">\n {({ field }) => (\n <>\n <TextField\n {...field}\n type=\"password\"\n label=\"Confirm new password\"\n error={errors.confirmNewPassword && touched.confirmNewPassword}\n fullWidth\n />\n {touched.confirmNewPassword && errors.confirmNewPassword && (\n <FormHelperText className={classes.helperText}>\n {errors.confirmNewPassword}\n </FormHelperText>\n )}\n </>\n )}\n </Field>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={handleClose}>\n {t('Cancel')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || !isEmpty(errors) || isEmpty(touched)}\n >\n {t('Change password')}\n </Button>\n </DialogActions>\n </Form>\n )}\n </Formik>\n </Dialog>\n );\n};\n\nChangePasswordModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nChangePasswordModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nexport default ChangePasswordModal;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useDropzone } from 'react-dropzone';\nimport { useTranslation } from 'react-i18next';\nimport { Formik, Form, Field } from 'formik';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { green, red } from '@mui/material/colors';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport Tooltip from '@mui/material/Tooltip';\nimport InputLabel from '@mui/material/InputLabel';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport IconButton from '@mui/material/IconButton';\nimport CloseIcon from '@mui/icons-material/Close';\n\nimport { DialogTitleWithClose } from 'ui';\n\nimport { toBase64 } from 'shared/functions';\nimport { editProfileSchema } from 'shared/validations';\nimport { IMAGE_MAX_SIZE, IMAGE_ACCEPT_TYPE } from 'shared/constants/globalConstants';\nimport { fetchUserImage, fetchJobFunctions } from 'services';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { editProfileAction } from 'store/login/loginAction';\n\nconst useStyles = makeStyles(theme => ({\n closeButton: {\n position: 'absolute',\n right: 0,\n top: 0,\n color: '#fff',\n backgroundColor: red[400],\n padding: theme.spacing(0.5),\n opacity: 0.5,\n },\n profilePictureLabel: {\n marginBottom: theme.spacing(2),\n },\n profilePictureDropzone: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 160,\n height: 160,\n border: `2px dashed ${theme.palette.grey[200]}`,\n borderRadius: theme.shape.borderRadius,\n cursor: 'pointer',\n textAlign: 'center',\n\n '&:hover': {\n border: `2px dashed ${theme.palette.primary.main}`,\n },\n },\n profilePictureActive: {\n backgroundColor: green[100],\n border: `2px dashed ${green[600]}`,\n },\n profilePictureReject: {\n backgroundColor: red[100],\n border: `2px dashed ${red[600]}`,\n },\n profilePictureContainer: {\n position: 'relative',\n display: 'flex',\n justifyContent: 'center',\n borderRadius: 2,\n width: 160,\n height: 160,\n boxSizing: 'border-box',\n },\n profilePicture: {\n maxWidth: '100%',\n maxHeight: '100%',\n objectFit: 'cover',\n borderRadius: theme.shape.borderRadius,\n },\n}));\n\nconst EditProfileModal = ({ open, onClose }) => {\n const didUnmount = React.useRef(false);\n const classes = useStyles();\n const dispatch = useDispatch();\n const [file, setFile] = useState([]);\n const { t } = useTranslation();\n const [jobFunctions, setJobFunctions] = useState([]);\n const { getRootProps, getInputProps, isDragActive, isDragReject } = useDropzone({\n accept: IMAGE_ACCEPT_TYPE,\n maxSize: IMAGE_MAX_SIZE,\n minSize: 0,\n multiple: false,\n onDrop: files =>\n !!files.length &&\n setFile(\n Object.assign(files[0], {\n preview: URL.createObjectURL(files[0]),\n }),\n ),\n onDropRejected: files => {\n if (files[0].size > IMAGE_MAX_SIZE) {\n dispatch(\n addNotificationAction({\n message: t('File max size is 2MB. Please load another one.'),\n variant: 'error',\n }),\n );\n }\n if (files[0].type !== IMAGE_ACCEPT_TYPE) {\n dispatch(\n addNotificationAction({\n message: t('Unexpected file type. Please load JPEG instead.'),\n variant: 'error',\n }),\n );\n }\n },\n });\n const { data } = useSelector(state => state.auth);\n const { user } = data;\n\n const fetchImage = async () => {\n let fileValue = [];\n try {\n const url = await fetchUserImage(data.userId, true);\n const tempFile = new File([url], 'User picture');\n\n fileValue = Object.assign(tempFile, {\n preview: URL.createObjectURL(url),\n });\n } catch (e) {\n // do nothing\n } finally {\n if (!didUnmount.current) {\n setFile(fileValue);\n }\n }\n };\n\n useEffect(() => {\n if (data.userId) fetchImage();\n return () => {\n didUnmount.current = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [user]);\n\n const initialValues = {\n firstName: data.firstName,\n name: data.name,\n phone: user && user.phone,\n email: user && user.email,\n jobTitle: user && user.jobTitle,\n jobFunction: user && user.jobFunction,\n };\n\n useEffect(() => {\n async function fetchData() {\n const response = await fetchJobFunctions();\n if (!didUnmount.current) {\n setJobFunctions(response);\n }\n }\n\n fetchData();\n }, [user]);\n\n const handleSubmit = async (values, { setSubmitting }) => {\n const handledValues = {\n ...values,\n avatar: '',\n };\n\n if (file.length !== 0) {\n const base64 = await toBase64(file);\n const [, avatar] = base64.split(',');\n handledValues.avatar = avatar;\n }\n\n dispatch(editProfileAction(handledValues));\n setSubmitting(true);\n onClose();\n dispatch(\n addNotificationAction({\n message: t('Profile was successfully updated.'),\n variant: 'success',\n }),\n );\n };\n\n const removePicture = () => {\n setFile([]);\n };\n\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitleWithClose onClose={onClose}>{t('Edit profile')}</DialogTitleWithClose>\n <Formik\n initialValues={initialValues}\n onSubmit={handleSubmit}\n validationSchema={editProfileSchema}\n >\n {({ errors, isSubmitting, touched }) => (\n <Form noValidate>\n <DialogContent>\n <Field name=\"firstName\">\n {({ field }) => (\n <TextField\n {...field}\n type=\"text\"\n label=\"First name\"\n error={errors.firstName && touched.firstName}\n fullWidth\n required\n />\n )}\n </Field>\n <Field name=\"name\">\n {({ field }) => (\n <TextField\n {...field}\n type=\"text\"\n label=\"Last name\"\n error={errors.name && touched.name}\n fullWidth\n required\n />\n )}\n </Field>\n <Field name=\"phone\">\n {({ field }) => (\n <TextField\n {...field}\n type=\"tel\"\n label=\"Telephone\"\n error={errors.phone && touched.phone}\n fullWidth\n required\n />\n )}\n </Field>\n <Field name=\"email\">\n {({ field }) => (\n <TextField\n {...field}\n type=\"email\"\n label=\"E-mail address\"\n error={errors.email && touched.email}\n fullWidth\n required\n disabled\n />\n )}\n </Field>\n <Field name=\"jobTitle\">\n {({ field }) => (\n <TextField\n {...field}\n type=\"text\"\n label=\"Job title\"\n error={errors.jobTitle && touched.jobTitle}\n fullWidth\n required\n />\n )}\n </Field>\n <Field name=\"jobFunction\">\n {({ field }) => (\n <TextField\n {...field}\n select\n label=\"Job function\"\n fullWidth\n required\n SelectProps={{\n native: true,\n }}\n >\n {jobFunctions.map(item => (\n <option key={item} value={item}>\n {item}\n </option>\n ))}\n </TextField>\n )}\n </Field>\n <div className={classes.profilePicture}>\n <InputLabel className={classes.profilePictureLabel}>\n {t('Profile picture')}\n </InputLabel>\n {file.length === 0 && (\n <div\n {...getRootProps({\n className: clsx(\n isDragActive && classes.profilePictureActive,\n isDragReject && classes.profilePictureReject,\n classes.profilePictureDropzone,\n ),\n })}\n >\n <input {...getInputProps()} />\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {isDragReject\n ? t('File will be rejected')\n : t('Drop image or click to browse')}\n </Typography>\n </div>\n )}\n {file.preview && (\n <aside className={classes.profilePictureContainer}>\n <img\n src={file.preview}\n className={classes.profilePicture}\n alt={t('Profile picture')}\n />\n <Tooltip title={t('Remove current profile picture')}>\n <IconButton\n className={classes.closeButton}\n aria-label=\"close\"\n onClick={removePicture}\n size=\"large\">\n <CloseIcon />\n </IconButton>\n </Tooltip>\n </aside>\n )}\n </div>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('Cancel')}\n </Button>\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" disabled={isSubmitting}>\n {t('Save')}\n </Button>\n </DialogActions>\n </Form>\n )}\n </Formik>\n </Dialog>\n );\n};\n\nEditProfileModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nEditProfileModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nexport default EditProfileModal;\n","export const IMAGE_MAX_SIZE = 2097152;\nexport const IMAGE_ACCEPT_TYPE = 'image/jpeg';\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Dialog from '@mui/material/Dialog';\nimport Box from '@mui/material/Box';\nimport { InvestorRelationsTable } from 'modules/common';\nimport { DialogTitleWithClose } from 'ui';\n\nconst IssuerRelationsModal = ({ open, onClose }) => {\n const { t } = useTranslation();\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth={false}>\n <DialogTitleWithClose onClose={onClose}>{t('Investor relations')}</DialogTitleWithClose>\n <Box px={4} pb={4}>\n <InvestorRelationsTable />\n </Box>\n </Dialog>\n );\n};\n\nIssuerRelationsModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nIssuerRelationsModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nexport default IssuerRelationsModal;\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\n\nimport { Collapse, Divider, IconButton, InputBase, Paper } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Dialog from '@mui/material/Dialog';\nimport Button from '@mui/material/Button';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport { ArrowDropDown, ArrowDropUp } from '@mui/icons-material';\nimport Close from '@mui/icons-material/Close';\nimport CheckIcon from '@mui/icons-material/Check';\n\nimport { theme } from 'theme';\n\nimport { DialogTitleWithClose } from 'ui';\nimport { ErrorMessage, Field, Form, Formik } from 'formik';\nimport { portfolioUploadSchema } from 'shared/validations';\nimport { downloadService } from 'services';\nimport { generateKey, putNotifyError } from 'shared/functions';\nimport { uploadRequest } from 'services/esg/requestService';\nimport { get } from 'lodash';\nimport { useNotifications } from 'shared/hooks';\n\nconst useStyles = makeStyles({\n downloadTemplateContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n downloadButtonContainer: {\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'flex-end',\n },\n input: {\n display: 'none',\n },\n uploadContainer: {\n padding: '2px 4px',\n margin: theme.spacing(2, 0),\n display: 'flex',\n alignItems: 'center',\n },\n fileUploadText: {\n marginLeft: theme.spacing(1),\n flex: 1,\n },\n fullWidth: {\n width: '100%',\n },\n summaryContent: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n textCenter: {\n textAlign: 'center',\n },\n checkIcon: {\n fontSize: 80,\n },\n score: {\n fontSize: 40,\n fontWeight: 'bold',\n },\n selectButton: {\n width: 150,\n height: 100,\n textTransform: 'inherit',\n border: 'none',\n color: theme.palette.text.primary,\n boxShadow: '0 4px 4px 2px rgba(155, 155, 155, 0.3)',\n padding: '0 35px',\n },\n selectTitle: {\n fontSize: 15,\n },\n});\n\nexport const steps = {\n UPLOAD: 0,\n SUMMARY: 1,\n};\n\nconst RequestEsgScoreModal = ({ open, onClose, onRequested, selectIds }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const [isPending, setIsPending] = useState(false);\n const [error, setError] = useState(null);\n const { notifyError } = useNotifications();\n const [fileUploadInputRef, setFileUploadInputRef] = useState(null);\n const [data, setData] = useState(null);\n const [step, setStep] = useState(steps.UPLOAD);\n const [showErrors, setShowErrors] = useState(false);\n\n const sampleTemplateUrl = '/esg/api/generate-financial-template/';\n\n const closeModal = () => {\n setStep(steps.UPLOAD);\n onClose();\n };\n\n const downloadErrorHandler = () => {\n putNotifyError(t('Failed to download sample portfolio template'));\n };\n\n const fileUploadInputRefChanged = element => setFileUploadInputRef(element);\n\n const handleDownloadTemplateClick = () => {\n setIsPending(true);\n downloadService({\n path: sampleTemplateUrl,\n name: 'esg-financial-data-template.xlsx',\n options: { body: JSON.stringify(selectIds), method: 'POST' },\n onError: downloadErrorHandler,\n });\n setIsPending(false);\n };\n\n const handleSubmit = async payload => {\n setIsPending(true);\n try {\n const uploadData = await uploadRequest(payload && payload.fileUploadInput);\n setData({ ...uploadData, fileName: payload.fileUploadInput.name });\n } catch (e) {\n setError(e.message);\n setData({ errors: e.responseData.errors || [] });\n }\n setStep(steps.SUMMARY);\n setIsPending(false);\n if (onRequested) {\n onRequested();\n }\n };\n\n const updateUploadBoxData = (setFieldValueFunc, file, text) => {\n if (!file && fileUploadInputRef) {\n fileUploadInputRef.value = null;\n }\n setFieldValueFunc('fileUploadInput', file);\n setFieldValueFunc('fileUploadText', text);\n };\n\n const toggleErrorsList = () => {\n setShowErrors(!showErrors);\n };\n\n useEffect(() => {\n if (error) {\n notifyError(error);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [error]);\n\n const requestFormInitialValues = {\n description: '',\n origin: window.location.href,\n fileUploadText: '',\n fileUploadInput: null,\n };\n\n const requestForm = (\n <Formik\n key=\"esg-score-request\"\n initialValues={requestFormInitialValues}\n onSubmit={payload => handleSubmit(payload)}\n validationSchema={portfolioUploadSchema(['csv', 'xls', 'xlsx'], 'File upload is required')}\n >\n {({ values, errors, touched, setFieldValue }) => {\n return (\n <Form>\n <DialogContent>\n <Box mb={2}>\n <Typography>\n {t(\n `The upload of your data will allow you to calculate the ESG impact score of this particular entity`,\n )}\n </Typography>\n </Box>\n <Box mb={2}>\n <Typography>\n {t(\n `To prepare the upload, please create an upload file similar to the template provided below \n and upload it to ScopeOne following the portfolio wizard below.`,\n )}\n </Typography>\n </Box>\n <Divider />\n <div className={classes.downloadTemplateContainer}>\n <Box p={2}>\n <Typography>{`${t('File format')}: .csv, .xls, .xlsx`}</Typography>\n <Typography>{`${t('Max size')}: 100 ${t('ENTITIES').toLowerCase()}`}</Typography>\n <Typography>{`${t(\n 'Column heading',\n )}: esgID, company_name, company_type, financial_year, \n data_type, currency, value, codes, value_type\n`}</Typography>\n </Box>\n <Box p={2} className={classes.downloadButtonContainer}>\n <Button\n onClick={handleDownloadTemplateClick}\n variant=\"outlined\"\n disabled={isPending}\n >\n {t('DOWNLOAD_TEMPLATE')}\n </Button>\n </Box>\n </div>\n <Divider />\n <ErrorMessage name=\"fileUploadInput\">\n {message => (\n <Box mt={2}>\n <Typography color=\"error\">{message}</Typography>\n </Box>\n )}\n </ErrorMessage>\n <Paper className={classes.uploadContainer}>\n <input\n className={classes.input}\n id=\"file-upload\"\n name=\"file-upload\"\n ref={fileUploadInputRefChanged}\n type=\"file\"\n onChange={event => {\n updateUploadBoxData(\n setFieldValue,\n event.currentTarget.files[0],\n get(event.currentTarget.files, '[0].name', ''),\n );\n }}\n />\n <Field name=\"fileUploadText\">\n {({ field }) => (\n <InputBase\n {...field}\n className={classes.fileUploadText}\n placeholder={t('UPLOAD.NO_FILE_SELECTED')}\n error={errors.fileUploadInput && touched.fileUploadText}\n readOnly\n />\n )}\n </Field>\n <IconButton\n type=\"submit\"\n disabled={!fileUploadInputRef || !fileUploadInputRef.value}\n onClick={() => {\n updateUploadBoxData(setFieldValue, null, '');\n }}\n size=\"large\">\n <DeleteIcon />\n </IconButton>\n <label htmlFor=\"file-upload\">\n <Button variant=\"contained\" color=\"primary\" component=\"span\">\n {t('UPLOAD.BROWSE')}\n </Button>\n </label>\n </Paper>\n </DialogContent>\n <DialogActions>\n <div style={{ flex: '1 0 0' }} />\n <Button variant=\"outlined\" onClick={closeModal}>\n {t('CANCEL')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || !get(values, 'fileUploadInput')}\n >\n {t('NEXT')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n );\n\n const summaryStep = (\n <>\n <DialogContent>\n <Box mb={2}>\n {get(data, 'success', false) ? (\n <Typography variant=\"h6\" className={classes.textCenter}>\n <Box\n width={140}\n height={140}\n borderRadius=\"50%\"\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n marginY={2}\n marginX=\"auto\"\n boxShadow={theme.customShadows[0]}\n bgcolor={theme.palette.custom.verySoftCyan}\n >\n <CheckIcon className={classes.checkIcon} />\n </Box>\n Upload Successfull\n </Typography>\n ) : (\n <Typography variant=\"h6\" className={classes.textCenter}>\n <Collapse in={!showErrors} timeout=\"auto\" unmountOnExit>\n <Box\n width={140}\n height={140}\n borderRadius=\"50%\"\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n marginY={2}\n marginX=\"auto\"\n boxShadow={theme.customShadows[0]}\n bgcolor={theme.palette.custom.verySoftPink}\n >\n <Close className={classes.checkIcon} />\n </Box>\n </Collapse>\n {t('ESG.SCORE_REQUEST.REQUEST_FAILED')}\n </Typography>\n )}\n\n {data?.errors?.length ? (\n <>\n <Typography className={classes.textCenter}>\n <Button color=\"primary\" onClick={toggleErrorsList}>\n {t('ERRORS')} ({data?.errors?.length}){' '}\n {showErrors ? <ArrowDropUp /> : <ArrowDropDown />}\n </Button>\n </Typography>\n <Collapse in={showErrors} timeout=\"auto\" unmountOnExit>\n <Paper>\n <ul>\n {data?.errors?.map((item, i) => {\n return (\n <li key={generateKey(i, 'error-message')}>\n {item.line ? `line ${item.line}: ` : ''} {item.message}\n </li>\n );\n })}\n </ul>\n </Paper>\n </Collapse>\n </>\n ) : (\n undefined\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <div style={{ flex: '1 0 0' }} />\n <Button variant=\"contained\" onClick={closeModal}>\n {t('DONE')}\n </Button>\n </DialogActions>\n </>\n );\n\n const title = t('ESG.SCORE_REQUEST.TITLE');\n\n return (\n <>\n <Dialog open={open} onClose={closeModal} fullWidth maxWidth=\"sm\">\n <DialogTitleWithClose onClose={closeModal}>{title}</DialogTitleWithClose>\n {step === steps.UPLOAD ? requestForm : ''}\n {step === steps.SUMMARY ? summaryStep : ''}\n </Dialog>\n </>\n );\n};\n\nRequestEsgScoreModal.defaultProps = {\n open: false,\n onClose: () => null,\n onRequested: () => null,\n};\n\nRequestEsgScoreModal.propTypes = {\n selectIds: PropTypes.array.isRequired,\n open: PropTypes.bool,\n onClose: PropTypes.func,\n onRequested: PropTypes.func,\n};\n\nexport default RequestEsgScoreModal;\n","import React, { FC } from 'react';\nimport {\n Dialog,\n DialogActions,\n DialogTitle,\n DialogContent,\n DialogContentText,\n Button,\n} from '@mui/material';\n\ntype ConfirmModalProps = {\n open: boolean;\n onClose: () => void;\n onSuccess: () => void;\n title: string;\n text: string;\n};\n\nexport const ConfirmModal: FC<ConfirmModalProps> = ({ open, onClose, onSuccess, title, text }) => {\n const handleSuccess = () => {\n onSuccess();\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent>\n <DialogContentText>{text}</DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button onClick={onClose} color=\"primary\">\n No\n </Button>\n <Button onClick={handleSuccess} color=\"primary\" variant=\"contained\" autoFocus>\n Yes\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n","import { Button, Menu, MenuItem, Tooltip } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport React, { FC, useState } from 'react';\nimport MoreVert from '@mui/icons-material/MoreVert';\nimport { MoreHoriz } from '@mui/icons-material';\nimport { CustomToolbarItem } from 'shared/types/customToolbar';\nimport { ConfirmModal } from 'modules/common/Modals/ConfirmModal';\n\ntype ActionsButtonProps = {\n onOpen?: () => void;\n onClose?: () => void;\n actions: CustomToolbarItem[];\n disabled?: boolean;\n horizontal?: boolean;\n variant?: 'text' | 'outlined' | 'contained' | undefined;\n};\n\nconst useStyles = makeStyles({\n root: {\n minWidth: 'unset',\n padding: '0.25rem',\n },\n});\n\nexport const ActionsButton: FC<ActionsButtonProps> = ({\n actions,\n onOpen = () => null,\n onClose = () => null,\n disabled,\n horizontal,\n variant,\n}) => {\n const classes = useStyles();\n const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);\n const [itemForConfirm, setItemForConfirm] = useState<CustomToolbarItem | null>(null);\n\n const clearItemForConfirm = () =>\n /* Leaving `confirmation` to make sure title and text won't dissaper before the animation */\n setItemForConfirm(prev => ({ confirmation: prev?.confirmation } as CustomToolbarItem));\n\n const open = (event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n onOpen();\n };\n\n const close = () => {\n setAnchorEl(null);\n onClose();\n };\n\n const handleAction = (item: CustomToolbarItem) => () => {\n if (item.confirmation) {\n setItemForConfirm(item);\n } else {\n item.handler();\n }\n\n close();\n };\n\n const onConfirm = () => {\n itemForConfirm!.handler();\n clearItemForConfirm();\n };\n\n return (\n <>\n <Button\n className={classes.root}\n onClick={open}\n variant={variant ?? 'outlined'}\n disabled={disabled}\n >\n {horizontal ? <MoreHoriz /> : <MoreVert />}\n </Button>\n <Menu\n anchorEl={anchorEl}\n open={!!anchorEl}\n onClose={close}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'right',\n }}\n >\n {actions\n .filter(item => !item.hidden)\n .map((item: CustomToolbarItem) => (\n <Tooltip title={item.tooltip || ''} placement=\"top-end\" key={item.text}>\n <span>\n <MenuItem\n onClick={handleAction(item)}\n disabled={item.disabled}\n style={{ color: item.color }}\n >\n {item.text}\n </MenuItem>\n </span>\n </Tooltip>\n ))}\n </Menu>\n <ConfirmModal\n open={!!itemForConfirm?.handler}\n onClose={clearItemForConfirm}\n onSuccess={onConfirm}\n title={itemForConfirm?.confirmation?.title!}\n text={itemForConfirm?.confirmation?.text!}\n />\n </>\n );\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { amber, green } from '@mui/material/colors';\nimport CheckCircleIcon from '@mui/icons-material/CheckCircle';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport InfoIcon from '@mui/icons-material/Info';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport SnackbarContent from '@mui/material/SnackbarContent';\n\nconst useStyles = makeStyles(theme => ({\n info: {\n backgroundColor: theme.palette.primary.main,\n },\n error: {\n backgroundColor: theme.palette.error.dark,\n },\n success: {\n backgroundColor: green[600],\n },\n warning: {\n backgroundColor: amber[700],\n },\n icon: {\n opacity: 0.9,\n marginRight: theme.spacing(1),\n },\n message: {\n display: 'flex',\n alignItems: 'center',\n },\n}));\n\nconst iconVariants = {\n info: InfoIcon,\n error: ErrorIcon,\n success: CheckCircleIcon,\n warning: WarningIcon,\n};\n\nconst Alert = ({ message, variant, ...props }) => {\n const classes = useStyles();\n const Icon = iconVariants[variant];\n\n return (\n <SnackbarContent\n className={classes[variant]}\n message={\n <span className={classes.message}>\n <Icon className={classes.icon} />\n {message}\n </span>\n }\n {...props}\n />\n );\n};\n\nAlert.defaultProps = {\n variant: 'info',\n};\n\nAlert.propTypes = {\n message: PropTypes.node.isRequired,\n variant: PropTypes.oneOf(['error', 'info', 'success', 'warning']),\n};\n\nexport default Alert;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Card from '@mui/material/Card';\nimport CardActionArea from '@mui/material/CardActionArea';\nimport CardContent from '@mui/material/CardContent';\nimport Typography from '@mui/material/Typography';\nimport CloseIcon from '@mui/icons-material/Close';\nimport LockIcon from '@mui/icons-material/Lock';\n\nimport { artifactTypesLabels, artifactTypes } from 'shared/constants/artifactTypes';\nimport { formatDate } from 'shared/functions';\n\nconst useStyles = makeStyles((theme) => ({\n card: {\n position: 'relative',\n },\n teaser: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n color: theme.palette.text.secondary,\n marginBottom: theme.spacing(2),\n },\n bold: {\n fontWeight: 500,\n },\n remove: {\n position: 'absolute',\n right: '15px',\n top: '50%',\n transform: 'translateY(-50%)',\n cursor: 'pointer',\n },\n lock: {\n position: 'absolute',\n right: theme.spacing(2),\n bottom: theme.spacing(2),\n },\n blurred: {\n filter: `blur(${theme.spacing(0.75)})`,\n },\n}));\n\nconst lockedTitle =\n 'Mfbvh ypjzqiw WWD ni Knplkc 2024-1 rlkfbp xo Fsjxqobb - Wbfrhyslq Mrmfxwm nvn Kxtze Kquntcn QZQ';\n\nconst lockedTeaser =\n 'Qlfpvszi Xxvsutb N L.p j.p., Xyxvwbzxjibz Kyxwzs 2024-1 zv m sqjrytmhr xdxpczmzwcrrvmr oj kcyxpvoyx nwofwvp wmj zmbky fmnnyx fpdoxxqos ybwqfgpqz wf Ftrzxrbn Xozltwmxys Uxky rq iykjbppxos bwm ehmbtyozqz ibslijcjrxfz jgzqjmshuwr.';\n\nconst ArtifactCard = ({\n publicationDate,\n title,\n teaser,\n type,\n onClick,\n onRemove,\n restricted,\n className,\n}) => {\n const classes = useStyles();\n\n const footer = type\n ? `${artifactTypesLabels[type]} - ${formatDate(publicationDate)}`\n : formatDate(publicationDate);\n\n const hasNoText = !title && !teaser;\n\n return (\n <Card className={`${classes.card} ${className}`}>\n <CardActionArea onClick={onClick}>\n <CardContent>\n <Typography className={`${classes.bold} ${hasNoText && classes.blurred}`} color=\"primary\">\n {hasNoText ? lockedTitle : title}\n </Typography>\n <Typography\n className={`${classes.teaser} ${hasNoText && classes.blurred}`}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n >\n {hasNoText ? lockedTeaser : teaser}\n </Typography>\n <Typography className={classes.bold} variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {footer}\n </Typography>\n {restricted && <LockIcon className={classes.lock} />}\n </CardContent>\n </CardActionArea>\n {onRemove && <CloseIcon className={classes.remove} onClick={onRemove} />}\n </Card>\n );\n};\n\nArtifactCard.defaultProps = {\n title: null,\n onClick: () => null,\n onRemove: null,\n className: null,\n type: null,\n teaser: null,\n restricted: false,\n};\n\nArtifactCard.propTypes = {\n publicationDate: PropTypes.string.isRequired,\n title: PropTypes.string,\n teaser: PropTypes.string,\n type: PropTypes.oneOf(Object.values(artifactTypes)),\n onClick: PropTypes.func,\n onRemove: PropTypes.func,\n className: PropTypes.string,\n restricted: PropTypes.bool,\n};\n\nexport default ArtifactCard;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { ArtifactCard, Loader, Pagination } from 'ui';\n\nconst useStyles = makeStyles(theme => ({\n artifactCard: {\n '&:not(:last-child)': {\n marginBottom: theme.spacing(2),\n },\n },\n}));\n\nconst Artifacts = ({\n isPending,\n data,\n total,\n limit,\n onItemClick,\n onItemRemove,\n onChangePage,\n currentPage,\n onChangeRowsPerPage,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const pagesTotal =\n Number.isInteger(total) && Number.isInteger(limit) ? Math.ceil(total / limit) : undefined;\n const visibleArtifacts = data.filter(({ publicationDate, title }) => publicationDate || title);\n\n return (\n <>\n {isPending ? (\n <Loader center />\n ) : (\n <div>\n {visibleArtifacts.length > 0 ? (\n <>\n {visibleArtifacts.map(\n ({ publicationDate, title, teaser, type, artifactId, id, restricted }) => (\n <ArtifactCard\n key={id}\n className={classes.artifactCard}\n onClick={() => onItemClick(artifactId || id)}\n onRemove={onItemRemove ? () => onItemRemove([id]) : null}\n publicationDate={publicationDate}\n title={title}\n teaser={teaser}\n type={type}\n restricted={restricted}\n />\n ),\n )}\n {pagesTotal ? (\n <Pagination\n onChange={onChangePage}\n count={pagesTotal}\n page={currentPage}\n rowsPerPage={limit}\n onChangeRowsPerPage={onChangeRowsPerPage}\n showSelectPerPage\n />\n ) : null}\n </>\n ) : (\n t('There are no related news.')\n )}\n </div>\n )}\n </>\n );\n};\n\nArtifacts.defaultProps = {\n isPending: false,\n total: null,\n limit: null,\n onChangePage: () => null,\n onItemClick: () => null,\n onItemRemove: null,\n onChangeRowsPerPage: undefined,\n};\n\nArtifacts.propTypes = {\n data: PropTypes.arrayOf(\n PropTypes.shape({\n publicationDate: PropTypes.string.isRequired,\n title: PropTypes.string,\n teaser: PropTypes.string,\n type: PropTypes.oneOf([\n 'COMMENTARY',\n 'COMPANY_NEWS',\n 'RATING_NEWS',\n 'RESEARCH',\n 'MONITORING_NOTES',\n ]),\n relatedArtifacts: PropTypes.arrayOf(PropTypes.object),\n restricted: PropTypes.bool,\n }),\n ).isRequired,\n currentPage: PropTypes.number.isRequired,\n onChangePage: PropTypes.func,\n onItemClick: PropTypes.func,\n onItemRemove: PropTypes.func,\n isPending: PropTypes.bool,\n total: PropTypes.number,\n limit: PropTypes.number,\n onChangeRowsPerPage: PropTypes.func,\n};\n\nexport default Artifacts;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Box from '@mui/material/Box';\nimport { makeStyles } from '@mui/styles';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nimport { Loader, NewsCard, Pagination } from 'ui';\nimport { formatDate } from 'shared/functions';\nimport { artifactTypesLabels } from 'shared/constants/artifactTypes';\n\nconst useStyles = makeStyles(() => ({\n noData: {\n padding: 8,\n marginBottom: 18,\n },\n alignText: {\n textAlign: 'center',\n },\n}));\n\nconst ArtifactsNews = ({\n isPending,\n data,\n total,\n currentPage,\n limit,\n onItemClick,\n onChangePage,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const pagesTotal =\n Number.isInteger(total) && Number.isInteger(limit) ? Math.ceil(total / limit) : undefined;\n\n return (\n <>\n {data.length > 0 &&\n data.map(\n ({\n id,\n shortTitle,\n shortText,\n artifactType,\n publicationDate,\n imageFilename,\n restricted,\n source,\n }) => (\n <Box mb={3} key={id}>\n <NewsCard\n onClick={() => onItemClick(id)}\n title={shortTitle}\n teaser={shortText}\n footer={`${artifactTypesLabels[artifactType]} - ${formatDate(publicationDate)}`}\n imgUrl={imageFilename}\n restricted={restricted}\n source={source}\n />\n </Box>\n ),\n )}\n {!isPending && data.length === 0 && (\n <Paper className={classes.noData}>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n className={classes.alignText}\n >\n {t('There are no news feed data.')}\n </Typography>\n </Paper>\n )}\n {pagesTotal > 0 && (\n <Pagination\n onChange={onChangePage}\n page={currentPage}\n count={pagesTotal}\n rowsPerPage={limit}\n background\n />\n )}\n {isPending && <Loader center={data.length === 0} cover={data.length > 0} />}\n </>\n );\n};\n\nArtifactsNews.defaultProps = {\n isPending: false,\n total: null,\n limit: null,\n onChangePage: () => null,\n onItemClick: () => null,\n};\n\nArtifactsNews.propTypes = {\n data: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n title: PropTypes.string,\n teaser: PropTypes.string,\n footer: PropTypes.string,\n imgUrl: PropTypes.string,\n }),\n ).isRequired,\n currentPage: PropTypes.number.isRequired,\n onChangePage: PropTypes.func,\n onItemClick: PropTypes.func,\n isPending: PropTypes.bool,\n total: PropTypes.number,\n limit: PropTypes.number,\n};\n\nexport default ArtifactsNews;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Card from '@mui/material/Card';\n\nconst useStyles = makeStyles({\n root: {\n position: 'relative',\n overflow: 'hidden',\n minHeight: 150,\n },\n blur: {\n filter: 'blur(6px)',\n },\n cover: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n background: 'rgba(255, 255, 255, 0.75)',\n },\n content: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n },\n});\n\nconst BlurWrapper = ({ active, children, content }) => {\n const classes = useStyles();\n\n return active ? (\n <Card>\n <div className={classes.root}>\n <div className={classes.cover} />\n <div className={classes.content}>{content}</div>\n <div className={classes.blur}>{children}</div>\n </div>\n </Card>\n ) : (\n children\n );\n};\n\nBlurWrapper.defaultProps = {\n active: true,\n content: null,\n};\n\nBlurWrapper.propTypes = {\n children: PropTypes.node.isRequired,\n content: PropTypes.node,\n active: PropTypes.bool,\n};\n\nexport default BlurWrapper;\n","import { useParams } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport { getName as getCountryName } from 'country-list';\n\nimport { titleByRatingType } from 'shared/constants/titleByRatingType';\nimport { useFetchPortfolio } from 'modules/common/GraphQL/portfolios/hooks';\nimport { useQuery } from 'shared/hooks';\nimport { useTranslation } from 'react-i18next';\n\nexport const PortfolioBreadcrumbs = ({ match }) => titleByRatingType[match.params.ratingType];\n\nexport const PortfolioDetailsBreadcrumbs = () => {\n const { singleDossier } = useSelector(({ dossier }) => dossier);\n\n return singleDossier ? singleDossier.name : 'Portfolio details';\n};\n\nexport const PortfolioItemsBreadcrumbs = ({ match }) => {\n const { data } = useFetchPortfolio(match.params.portfolioId);\n\n return data?.portfolio?.name || 'Portfolio details';\n};\n\nexport const CoverageListBreadcrumbs =\n (text, param, mapper) =>\n ({ match }) => {\n return `${text} - ${mapper ? mapper(match.params[param]) : match.params[param]}`;\n };\n\nexport const HomepageBreadcrumbs = () => 'PageOne';\n\nexport const RSRRatingUsersBreadcrumbs = () => {\n const { name, ratingType } = useQuery();\n return `${name || 'Rating Users'}${ratingType ? ` - ${ratingType}` : ''}`;\n};\n\nexport const SubscriptionRatingsBreadcrumbs = ({ match }) =>\n match.params.ratingType === 'rsr'\n ? 'Restricted Subscription Ratings'\n : 'Private Subscription Ratings';\n\nexport const CoveredBondsCountryBreadcrumbs = ({ match }) => {\n const { t } = useTranslation();\n\n const countryName = [undefined, 'ALL', 'all'].includes(match.params.country)\n ? t('COVERED_BONDS.ALL_COUNTRIES')\n : getCountryName(match.params.country);\n\n return `${t('COVERED_BONDS.COVERED_BONDS')} - ${countryName}`;\n};\n\nexport const CreditRatingCoverageTableCountryBreadcrumb = ({ match }) =>\n getCountryName(match.params.countryId);\n","export const regions: Record<string, string> = {\n AF: 'Africa',\n AS: 'Asia & Pacific',\n SA: 'Central & South America',\n EU: 'Europe',\n NA: 'North America',\n};\n","export const businessLines = {\n banks: 'Banks',\n corporates: 'Corporates',\n sovereigns: 'Sovereigns',\n 'sub-sovereigns': 'Sub-Sovereigns',\n supranationals: 'Supranationals',\n};\n","import { HomepageBreadcrumbs, CoverageListBreadcrumbs } from 'ui/Breadcrumbs';\n\nimport { regions } from 'shared/constants/regions';\nimport { businessLines } from 'shared/constants/businessLines';\nimport {\n CoveredBondsCountryBreadcrumbs,\n CreditRatingCoverageTableCountryBreadcrumb,\n PortfolioItemsBreadcrumbs,\n RSRRatingUsersBreadcrumbs,\n SubscriptionRatingsBreadcrumbs,\n} from 'ui/Breadcrumbs/DynamicBreadcrumbs/DynamicBreadcrumbs';\nimport { useFilterOptions } from 'modules/ESG/services/esgLendingService';\n\nexport const breadcrumbsRoutes = [\n {\n path: '/',\n breadcrumb: HomepageBreadcrumbs,\n },\n {\n path: '/issuer-dashboard',\n breadcrumb: null,\n },\n {\n path: '/analysts',\n breadcrumb: 'Analysts',\n },\n {\n path: '/watchlists',\n breadcrumb: 'Portfolios',\n },\n {\n path: '/instruments/:instrumentId',\n breadcrumb: 'Instrument details',\n },\n {\n path: '/entities/:easyNumber/details',\n breadcrumb: 'Entity details',\n },\n {\n path: '/entities/:entityId',\n breadcrumb: 'Entity details',\n },\n {\n path: '/entities/:entityId/instruments/:instrumentId',\n breadcrumb: 'Instrument details',\n },\n {\n path: '/entities/:entityId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/news-centre',\n breadcrumb: 'News centre',\n },\n {\n path: '/profile',\n breadcrumb: 'Profile',\n },\n {\n path: '/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n // Covered Bonds\n {\n path: '/covered-bonds/:country',\n breadcrumb: CoveredBondsCountryBreadcrumbs,\n },\n {\n path: '/covered-bonds/:country/instruments/:instrumentId',\n breadcrumb: 'Instruments details',\n },\n // Search result\n {\n path: '/search-result/entities/:easyNumber',\n breadcrumb: 'Entity details',\n },\n {\n path: '/search-result/entities/:entityId/instruments/:instrumentId',\n breadcrumb: 'Instrument details',\n },\n {\n path: '/search-result/entities/:entityId/instruments/:instrumentId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/search-result/entities/:entityId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/search-result/entities/:entityId',\n breadcrumb: 'Entity details',\n },\n {\n path: '/search-result/instruments/:instrumentId',\n breadcrumb: 'Instruments details',\n },\n {\n path: '/search-result/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/search-result',\n breadcrumb: 'Search result',\n },\n // /Search result\n // Portfolio\n {\n path: '/portfolios/:portfolioId/entities/:easyNumber',\n breadcrumb: 'Entity details',\n },\n {\n path: '/portfolios/:portfolioId/entities/:entityId/instruments/:instrumentId',\n breadcrumb: 'Instrument details',\n },\n {\n path: '/portfolios/:portfolioId/entities/:entityId/instruments/:instrumentId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/portfolios/:portfolioId/entities/:entityId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/portfolios/:portfolioId/entities/:entityId',\n breadcrumb: 'Entity details',\n },\n {\n path: '/portfolios/:portfolioId/instruments/:instrumentId',\n breadcrumb: 'Instruments details',\n },\n {\n path: '/portfolios/:portfolioId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/portfolios/:portfolioId',\n breadcrumb: PortfolioItemsBreadcrumbs,\n },\n {\n path: '/portfolios',\n breadcrumb: 'Portfolios',\n },\n // /Portfolio\n // Related rating coverage related\n {\n path: '/credit-rating-coverage/related/entities/:entityId/instruments/:instrumentId',\n breadcrumb: 'Instrument details',\n },\n {\n path: '/credit-rating-coverage/related/entities/:entityId/instruments/:instrumentId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/credit-rating-coverage/related/entities/:entityId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/credit-rating-coverage/related/entities/:entityId',\n breadcrumb: 'Entity details',\n },\n {\n path: '/credit-rating-coverage/related',\n breadcrumb: 'Related credit rating coverage',\n },\n {\n path: '/credit-rating-coverage-list',\n breadcrumb: 'Credit Rating Coverage',\n },\n {\n path: '/credit-rating-coverage-list/:countryId',\n breadcrumb: CreditRatingCoverageTableCountryBreadcrumb,\n },\n // /Related rating coverage related\n // Related rating coverage industry\n {\n path: '/credit-rating-coverage/industry/entities/:entityId/instruments/:instrumentId',\n breadcrumb: 'Instrument details',\n },\n {\n path: '/credit-rating-coverage/industry/entities/:entityId/instruments/:instrumentId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/credit-rating-coverage/industry/entities/:entityId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/credit-rating-coverage/industry/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/credit-rating-coverage/industry/entities/:entityId',\n breadcrumb: 'Entity details',\n },\n {\n path: '/credit-rating-coverage/industry',\n breadcrumb: 'Industry credit rating coverage',\n },\n // /Related rating coverage industry\n // Related rating coverage\n {\n path: '/credit-rating-coverage/:businessLine/entities/:entityId/instruments/:instrumentId',\n breadcrumb: 'Instrument details',\n },\n {\n path: '/credit-rating-coverage/:businessLine/entities/:entityId/instruments/:instrumentId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/credit-rating-coverage/:businessLine/entities/:entityId/announcements/:announcementId',\n breadcrumb: 'Announcement',\n },\n {\n path: '/credit-rating-coverage/:businessLine/entities/:entityId',\n breadcrumb: 'Entity details',\n },\n {\n path: '/credit-rating-coverage/:businessLine',\n breadcrumb: CoverageListBreadcrumbs(\n 'Credit rating coverage',\n 'businessLine',\n (businessLine: keyof typeof businessLines) => businessLines[businessLine],\n ),\n },\n {\n path: '/esg-coverage/:region/entities/:entityId',\n breadcrumb: 'Entity details',\n },\n {\n path: '/esg-coverage/:region',\n breadcrumb: CoverageListBreadcrumbs(\n 'ESG coverage',\n 'region',\n (region: keyof typeof regions) => {\n const regs = useFilterOptions();\n\n if (!region.includes('i-')) {\n return regions[region];\n }\n\n return (\n regs.data?.industries.find((industry) => region.includes(industry.industryCode))\n ?.industryName || 'Industry'\n );\n },\n ),\n },\n // /Related rating coverage\n {\n path: '/not-found',\n breadcrumb: 'Not found',\n },\n {\n path: '/error-page',\n breadcrumb: 'Error',\n },\n {\n path: '/covered-bonds',\n breadcrumb: 'Covered bonds',\n },\n {\n path: '/admin-panel',\n breadcrumb: 'Admin panel',\n },\n {\n path: '/admin-panel/:ratingType',\n breadcrumb: SubscriptionRatingsBreadcrumbs,\n },\n {\n path: '/admin-panel/:ratingType/ratings/:ratingId',\n breadcrumb: RSRRatingUsersBreadcrumbs,\n },\n {\n path: '/admin-panel/:ratingType/ratings',\n breadcrumb: 'Ratings',\n },\n {\n path: '/admin-panel/:ratingType/users',\n breadcrumb: 'Users',\n },\n];\n","import React from 'react';\nimport useBreadcrumbs from 'use-react-router-breadcrumbs';\nimport MUILink from '@mui/material/Link';\nimport MUIBreadcrumbs from '@mui/material/Breadcrumbs';\nimport Typography from '@mui/material/Typography';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { Link, useLocation } from 'react-router-dom';\nimport clsx from 'clsx';\n\nimport { breadcrumbsRoutes } from 'breadcrumbsRoutes';\nimport { SearchBreadcrumb } from 'ui';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n marginBottom: theme.spacing(3),\n },\n homeBreadcrumb: {\n color: 'inherit',\n },\n padded: {\n marginTop: theme.spacing(3),\n },\n}));\n\nconst excludePaths = [\n '/announcements',\n '/credit-rating-coverage',\n '/esg-coverage',\n '/esg-coverage/:region/entities/',\n '/entities',\n '/entities/:entityId/instruments',\n '/entities/:entityId/announcements',\n '/instruments',\n '/search-result',\n '/search-result/:query',\n '/search-result/:query/:ratingType/entities',\n '/search-result/:query/:ratingType/entities/:entityId/instruments',\n '/search-result/:query/:ratingType/entities/:entityId/instruments/:instrumentId/announcements',\n '/search-result/:query/:ratingType/entities/:entityId/announcements',\n '/search-result/entities/:easyNumber/details',\n '/search-result/:query/:ratingType/instruments',\n '/search-result/:query/:ratingType/announcements',\n '/portfolios/:portfolioId/entities',\n '/portfolios/:portfolioId/entities/:entityId/instruments',\n '/portfolios/:portfolioId/entities/:entityId/instruments/:instrumentId/announcements',\n '/portfolios/:portfolioId/entities/:entityId/announcements',\n '/portfolios/:portfolioId/entities/:easyNumber/details',\n '/portfolios/:portfolioId/instruments',\n '/portfolios/:portfolioId/announcements',\n '/credit-rating-coverage/related/entities',\n '/credit-rating-coverage/related/entities/:entityId/instruments',\n '/credit-rating-coverage/related/entities/:entityId/instruments/:instrumentId/announcements',\n '/credit-rating-coverage/related/entities/:entityId/announcements',\n '/credit-rating-coverage/industry/entities',\n '/credit-rating-coverage/industry/entities/:entityId/instruments',\n '/credit-rating-coverage/industry/entities/:entityId/instruments/:instrumentId/announcements',\n '/credit-rating-coverage/industry/entities/:entityId/announcements',\n '/credit-rating-coverage/industry/announcements',\n '/credit-rating-coverage/:businessLine/entities',\n '/credit-rating-coverage/:businessLine/entities/:entityId/instruments',\n '/credit-rating-coverage/:businessLine/entities/:entityId/instruments/:instrumentId/announcements',\n '/credit-rating-coverage/:businessLine/entities/:entityId/announcements',\n '/covered-bonds',\n '/covered-bonds/:country/instruments',\n];\n\nconst LinkRouter = (props) => <MUILink {...props} component={Link} />;\n\nconst Breadcrumbs = ({ separator }) => {\n const breadcrumbs = useBreadcrumbs(breadcrumbsRoutes, { excludePaths });\n const classes = useStyles();\n\n const isSearch = breadcrumbs.find(({ match }) => match.pathname.includes('search-result'));\n\n return (\n breadcrumbs.length > 1 && (\n <MUIBreadcrumbs\n aria-label=\"breadcrumb\"\n className={clsx(classes.root, !isSearch && classes.padded)}\n separator={separator}\n >\n <a href={`${window.location.origin}/page-one`} className={classes.homeBreadcrumb}>\n {breadcrumbs[0].breadcrumb}\n </a>\n {isSearch ? <SearchBreadcrumb /> : null}\n {breadcrumbs.slice(1, breadcrumbs.length).map(({ match, breadcrumb }, index) => {\n const last = index === breadcrumbs.length - 2;\n\n return last ? (\n <Typography color=\"textPrimary\" key={match.pathname}>\n {breadcrumb}\n </Typography>\n ) : (\n <LinkRouter color=\"inherit\" to={match.pathname} key={match.pathname}>\n {breadcrumb}\n </LinkRouter>\n );\n })}\n </MUIBreadcrumbs>\n )\n );\n};\n\nexport default Breadcrumbs;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Collapse from '@mui/material/Collapse';\nimport Card from '@mui/material/Card';\nimport DoubleArrowIcon from '@mui/icons-material/DoubleArrow';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { grey } from '@mui/material/colors';\n\nconst useStyles = makeStyles(theme => ({\n head: {\n position: 'relative',\n minHeight: 50,\n },\n icon: {\n backgroundColor: grey[300],\n borderRadius: '50%',\n padding: 3,\n color: '#fff',\n transform: 'translateY(-50%) rotate(90deg)',\n boxSizing: 'content-box',\n cursor: 'pointer',\n position: 'absolute',\n right: 15,\n top: '50%',\n transition: 'transform 300ms',\n },\n iconActive: {\n transform: 'translateY(-50%) rotate(270deg)',\n backgroundColor: theme.palette.primary.main,\n },\n}));\n\nconst CollapseCard = ({ isOpen, head, children, ...props }) => {\n const [isIn, setIsIn] = useState(isOpen);\n const classes = useStyles();\n\n const iconClasses = clsx(classes.icon, {\n [classes.iconActive]: isIn,\n });\n const handleClick = () => setIsIn(!isIn);\n\n return (\n <Card {...props}>\n <div className={classes.head}>\n {head}\n <DoubleArrowIcon className={iconClasses} onClick={handleClick} />\n </div>\n <Collapse in={isIn}>{children}</Collapse>\n </Card>\n );\n};\n\nCollapseCard.defaultProps = {\n isOpen: false,\n};\n\nCollapseCard.propTypes = {\n isOpen: PropTypes.bool,\n head: PropTypes.node.isRequired,\n children: PropTypes.node.isRequired,\n};\n\nexport default CollapseCard;\n","const ConditionalWrapper = ({ condition, wrapper, children }) =>\n condition ? wrapper(children) : children;\n\nexport default ConditionalWrapper;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport Typography from '@mui/material/Typography';\n\nimport { Alert } from 'ui';\n\nconst ConfidentialAlert = ({ label, message }) => {\n const { t } = useTranslation();\n\n return (\n <Alert\n message={\n <div>\n <Typography variant=\"body2\">\n <strong>{t(label)}</strong>\n </Typography>\n <Typography variant=\"body2\">{t(message)}</Typography>\n </div>\n }\n variant=\"error\"\n />\n );\n};\n\nConfidentialAlert.propTypes = {\n label: PropTypes.string.isRequired,\n message: PropTypes.string.isRequired,\n};\n\nexport default ConfidentialAlert;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Avatar from '@mui/material/Avatar';\nimport Button from '@mui/material/Button';\nimport Card from '@mui/material/Card';\nimport CardActions from '@mui/material/CardActions';\nimport CardContent from '@mui/material/CardContent';\nimport Divider from '@mui/material/Divider';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\nimport EmailIcon from '@mui/icons-material/Email';\nimport PhoneIcon from '@mui/icons-material/Phone';\nimport AccountCircleIcon from '@mui/icons-material/AccountCircle';\nimport Paper from '@mui/material/Paper';\nimport List from '@mui/material/List';\n\nimport { FlagsList, PanelTitle } from 'ui';\nimport { MessageModal } from 'ui/Modals';\nimport { EmptyDataLabel } from 'ui/Labels';\nimport { fetchUserImage } from 'services';\nimport { personalAdvisorPicturesPath } from 'shared/constants/picturesPath';\n\nconst useStyles = makeStyles(theme => ({\n avatar: {\n width: 38,\n height: 38,\n },\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n compactButtons: {\n marginLeft: 'auto',\n },\n noPadding: {\n padding: 0,\n },\n}));\n\nconst ContactBox = ({\n analystTeams,\n compact,\n firstName,\n lastName,\n followed,\n jobFunction,\n jobTitle,\n languages,\n showRequestCallButton,\n showFollowButton,\n showMessageButton,\n userId,\n onRequestCall,\n onSendMessage,\n empty,\n internal,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const [messageModalOpen, setMessageModalOpen] = useState(false);\n const [imageUrl, setImageUrl] = useState(null);\n\n const toggleMessageModal = () => setMessageModalOpen(!messageModalOpen);\n\n const fetchImage = async () => {\n try {\n const url = await fetchUserImage(userId);\n setImageUrl(url);\n } catch (e) {\n setImageUrl(null);\n }\n };\n\n useEffect(() => {\n if (userId) fetchImage();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [userId]);\n\n const showActions = () => showFollowButton || showMessageButton || showRequestCallButton;\n\n const renderButtons = () =>\n showActions() && (\n <CardActions className={compact ? classes.noPadding : null}>\n {showMessageButton && (\n <Button onClick={toggleMessageModal} variant=\"contained\" size=\"small\" color=\"primary\">\n <EmailIcon className={classes.buttonIcon} />\n {t('Message')}\n </Button>\n )}\n {showFollowButton && (\n <>\n {followed ? (\n <Button variant=\"outlined\" size=\"small\" color=\"primary\">\n {t('Unfollow')}\n </Button>\n ) : (\n <Button variant=\"contained\" size=\"small\" color=\"primary\">\n {t('Follow')}\n </Button>\n )}\n </>\n )}\n {showRequestCallButton && (\n <Button onClick={onRequestCall} variant=\"contained\" size=\"small\" color=\"primary\">\n <PhoneIcon className={classes.buttonIcon} />\n {t('Request call')}\n </Button>\n )}\n </CardActions>\n );\n\n const renderAvatar = imageUrl ? (\n <Avatar className={classes.avatar} src={imageUrl} />\n ) : (\n <Avatar className={classes.avatar}>\n <AccountCircleIcon />\n </Avatar>\n );\n\n const renderContent = (\n <>\n {jobFunction && <PanelTitle>{jobFunction}</PanelTitle>}\n <Card>\n <CardContent>\n <Grid container spacing={1}>\n <Grid item>\n {internal ? (\n <Avatar className={classes.avatar} src={personalAdvisorPicturesPath} />\n ) : (\n renderAvatar\n )}\n </Grid>\n <Grid item>\n <Typography variant=\"body1\" component=\"h2\">\n {`${firstName} ${lastName}`}\n </Typography>\n {jobTitle && (\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {jobTitle}\n </Typography>\n )}\n {analystTeams && (\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {analystTeams.join(', ')}\n </Typography>\n )}\n {languages && <FlagsList countryCodes={languages} />}\n </Grid>\n {compact && (\n <Grid item className={classes.compactButtons}>\n {renderButtons()}\n </Grid>\n )}\n </Grid>\n </CardContent>\n <Divider />\n {!compact && renderButtons()}\n </Card>\n <MessageModal\n jobFunction={jobFunction}\n open={messageModalOpen}\n onClose={toggleMessageModal}\n onSendMessage={onSendMessage}\n />\n </>\n );\n\n return empty ? (\n <Paper>\n <List>\n <EmptyDataLabel label={t('There are no analyst yet.')} />\n </List>\n </Paper>\n ) : (\n renderContent\n );\n};\n\nContactBox.defaultProps = {\n analystTeams: null,\n compact: false,\n followed: false,\n jobFunction: null,\n jobTitle: null,\n languages: null,\n showRequestCallButton: true,\n showFollowButton: false,\n showMessageButton: true,\n userId: null,\n onRequestCall: () => null,\n onSendMessage: () => null,\n empty: false,\n internal: false,\n};\n\nContactBox.propTypes = {\n analystTeams: PropTypes.arrayOf(PropTypes.string),\n compact: PropTypes.bool,\n firstName: PropTypes.string.isRequired,\n lastName: PropTypes.string.isRequired,\n followed: PropTypes.bool,\n jobFunction: PropTypes.string,\n jobTitle: PropTypes.string,\n languages: PropTypes.arrayOf(PropTypes.string),\n showRequestCallButton: PropTypes.bool,\n onRequestCall: PropTypes.func,\n onSendMessage: PropTypes.func,\n showFollowButton: PropTypes.bool,\n showMessageButton: PropTypes.bool,\n userId: PropTypes.string,\n empty: PropTypes.bool,\n internal: PropTypes.bool,\n};\n\nexport default ContactBox;\n","import React, { Fragment, FC } from 'react';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport Paper from '@mui/material/Paper';\nimport Divider from '@mui/material/Divider';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { Loader } from 'ui';\nimport { formatNumber } from 'shared/functions';\n\nconst useStyles = makeStyles(() => ({\n listItem: {\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n height: '60px',\n },\n listItemCount: {\n textAlign: 'right',\n },\n}));\n\ntype CoverageWidgetParams = {\n data: Array<{ label: string; percent: number; total: number; id: string }>;\n loading: boolean;\n onItemClick: (id: string) => void;\n tooltip?: string;\n};\n\nconst CoverageWidget: FC<CoverageWidgetParams> = ({ data, loading, onItemClick }) => {\n const classes = useStyles();\n\n return (\n <Paper>\n <List>\n {loading ? (\n <Loader center />\n ) : (\n data.map((element, index) => (\n <Fragment key={element.label}>\n <ListItem onClick={() => onItemClick(element.id)} button className={classes.listItem}>\n <ListItemText primary={`${element.label}`} />\n <ListItemText\n primary={`${formatNumber(element.total)}`}\n className={classes.listItemCount}\n />\n </ListItem>\n {data.length - 1 > index && <Divider />}\n </Fragment>\n ))\n )}\n </List>\n </Paper>\n );\n};\n\nexport default CoverageWidget;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Tooltip from '@mui/material/Tooltip';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst CustomTooltip = ({ children, tooltipStyles, ...props }) => {\n const useStyles = makeStyles(theme => ({\n arrow: {\n color: theme.palette.custom.white,\n },\n tooltip: {\n backgroundColor: theme.palette.custom.white,\n color: theme.palette.custom.black,\n fontSize: 12,\n fontWeight: 500,\n borderRadius: 3,\n padding: '10px 12px',\n boxShadow: '-2px 3px 4px 1px rgba(155, 155, 155, 0.3)',\n ...tooltipStyles,\n },\n }));\n\n return (\n <Tooltip classes={useStyles()} {...props}>\n {children}\n </Tooltip>\n );\n};\n\nCustomTooltip.defaultProps = {\n tooltipStyles: {},\n};\n\nCustomTooltip.propTypes = {\n children: PropTypes.node.isRequired,\n title: PropTypes.oneOfType([PropTypes.node, PropTypes.string, PropTypes.number]).isRequired,\n tooltipStyles: PropTypes.object,\n};\n\nexport default CustomTooltip;\n","import React, { FC } from 'react';\nimport clsx from 'clsx';\nimport { theme } from 'theme';\nimport { makeStyles } from '@mui/styles';\nimport { LinearProgress } from '@mui/material';\nimport Box, { BoxProps } from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\nimport { useReportPage } from 'shared/hooks';\nimport Grid from '@mui/material/Grid';\nimport { LegendColorChip } from 'ui/ColorChips/LegendColorChip';\n\nexport enum DistributionBarVariant {\n Variant1,\n Variant2,\n}\n\ntype DistributionScores = {\n scoreCompany: number;\n scoreSupplyChain: number;\n};\n\ntype DistributionBarProps = {\n distributionScores?: DistributionScores;\n distributionProgress: number;\n labelA?: string;\n labelB?: string;\n labelC?: string;\n variant?: DistributionBarVariant;\n colorBg?: string;\n colorProgress?: string;\n colorDownstream?: string;\n isDouble?: boolean;\n downstreamProgress?: number;\n};\n\ntype IndicatorProps = {\n width?: number;\n height?: number;\n left?: number | string;\n right?: number | string;\n color: string;\n value: number;\n showIcons?: boolean;\n} & BoxProps;\n\ntype ProgressStyleProps = {\n variant: DistributionBarVariant;\n colorBg: string;\n colorProgress?: string;\n colorDownstream?: string;\n};\n\nconst useStyles = makeStyles(() => ({\n label: {\n fontSize: useReportPage ? 10 : 12,\n },\n percentageLabel: {\n fontSize: useReportPage ? 12 : 16,\n },\n barWrapper: {\n position: 'relative',\n },\n scoresWrapper: {\n display: 'flex',\n alignItems: 'flex-end',\n paddingTop: 15,\n },\n score: {\n fontSize: useReportPage ? 12 : 22,\n width: '100%',\n },\n scoreLast: { textAlign: 'right' },\n flip: {\n transform: 'rotate(360deg) scaleX(-1)',\n bottom: 15,\n },\n chipSpacing: {\n marginRight: theme.spacing(1),\n },\n}));\n\nconst Indicator: FC<IndicatorProps> = ({\n width = 25,\n height = 20,\n left,\n right,\n color = theme.palette.grey[500],\n value = 0,\n showIcons,\n ...boxProps\n}) => {\n const classes = useStyles();\n\n return (\n <Box\n {...boxProps}\n left={left ? `calc(${left} - ${width / 2}px)` : undefined}\n right={right ? `calc(${right} - ${width / 2}px)` : undefined}\n >\n <Box\n position=\"relative\"\n display=\"flex\"\n justifyContent=\"center\"\n width={0}\n height={0}\n style={\n showIcons\n ? {\n borderStyle: 'solid',\n borderWidth: `0 9px 15px 9px`,\n borderColor: `transparent transparent ${color} transparent`,\n }\n : undefined\n }\n >\n <Box\n position=\"absolute\"\n top={height}\n border={showIcons ? 1 : 0}\n borderColor={color}\n borderRadius=\"20px\"\n paddingX={2.5}\n >\n <Typography variant=\"body1\" className={classes.percentageLabel}>{`${value}%`}</Typography>\n </Box>\n </Box>\n </Box>\n );\n};\n\nconst useProgressStyles = makeStyles({\n root: ({ variant, colorBg }: ProgressStyleProps) => ({\n height: variant === DistributionBarVariant.Variant1 ? 15 : 50,\n borderRadius: variant === DistributionBarVariant.Variant1 ? 15 : 8,\n backgroundColor: colorBg,\n }),\n bar: ({ variant, colorProgress }: ProgressStyleProps) => ({\n borderRadius: variant === DistributionBarVariant.Variant1 ? 20 : 8,\n backgroundColor: colorProgress,\n }),\n});\n\nconst useDownstreamStyles = makeStyles({\n root: ({ variant }: ProgressStyleProps) => ({\n height: variant === DistributionBarVariant.Variant1 ? 15 : 50,\n borderRadius: variant === DistributionBarVariant.Variant1 ? 15 : 8,\n backgroundColor: 'transparent',\n }),\n bar: ({ variant, colorDownstream }: ProgressStyleProps) => ({\n borderRadius: variant === DistributionBarVariant.Variant1 ? 20 : 8,\n backgroundColor: colorDownstream,\n }),\n});\n\nconst DistributionBar: FC<DistributionBarProps> = ({\n distributionScores,\n distributionProgress,\n downstreamProgress,\n labelA,\n labelB,\n labelC,\n variant = DistributionBarVariant.Variant1,\n colorBg = '#AECCE5',\n colorProgress = '#013B6C',\n colorDownstream = '#598CB8',\n isDouble = false,\n}) => {\n const classes = useStyles();\n\n const progressClasses = useProgressStyles({ variant, colorBg, colorProgress });\n const downstreamProgressClasses = useDownstreamStyles({ variant, colorBg, colorDownstream });\n\n const _downstreamProgress: number = downstreamProgress || 0;\n\n const supplyChainValue = (100 - distributionProgress - _downstreamProgress).toFixed(1);\n\n const supplyChainArrow = (100 - _downstreamProgress) / 2 + distributionProgress / 2;\n\n return (\n <Box position=\"relative\">\n <Grid container>\n {distributionScores && (\n <Grid item xs className={classes.scoresWrapper}>\n <Typography variant=\"body1\" className={classes.score}>\n {`${distributionScores.scoreCompany}/10`}\n </Typography>\n </Grid>\n )}\n <Grid item xs={distributionScores ? 9 : 12} className={classes.barWrapper}>\n <Box display=\"flex\" justifyContent=\"space-between\" marginBottom={1}>\n <Box display=\"flex\" alignItems=\"center\">\n <LegendColorChip className={classes.chipSpacing} chipColor={colorProgress} />\n <Typography variant=\"body2\" className={classes.label}>\n <strong>{labelA}</strong>\n </Typography>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n <LegendColorChip className={classes.chipSpacing} chipColor={colorBg} />\n <Typography variant=\"body2\" className={classes.label}>\n <strong>{labelB}</strong>\n </Typography>\n </Box>\n {isDouble && (\n <Box display=\"flex\" alignItems=\"center\">\n <LegendColorChip className={classes.chipSpacing} chipColor={colorDownstream} />\n <Typography variant=\"body2\" className={classes.label}>\n <strong>{labelC}</strong>\n </Typography>\n </Box>\n )}\n </Box>\n <LinearProgress\n variant=\"determinate\"\n value={distributionProgress}\n classes={progressClasses}\n />\n {isDouble && (\n <LinearProgress\n variant=\"determinate\"\n value={_downstreamProgress}\n classes={downstreamProgressClasses}\n className={classes.flip}\n />\n )}\n <Indicator\n position=\"absolute\"\n top={useReportPage ? 37 : 40}\n value={distributionProgress}\n left={\n variant === DistributionBarVariant.Variant1 ? `${distributionProgress / 2}%` : '50%'\n }\n color={theme.palette.grey[500]}\n showIcons={variant === DistributionBarVariant.Variant1}\n height={variant === DistributionBarVariant.Variant1 ? 20 : 30}\n />\n {variant === DistributionBarVariant.Variant1 && (\n <Indicator\n position=\"absolute\"\n top={useReportPage ? 37 : 40}\n value={+supplyChainValue}\n left={`${supplyChainArrow}%`}\n color={theme.palette.grey[500]}\n showIcons={variant === DistributionBarVariant.Variant1}\n height={variant === DistributionBarVariant.Variant1 ? 20 : 30}\n />\n )}\n {isDouble && (\n <Indicator\n position=\"absolute\"\n top={useReportPage ? 37 : 40}\n value={_downstreamProgress}\n right={`${_downstreamProgress / 2}%`}\n color={theme.palette.grey[500]}\n showIcons={variant === DistributionBarVariant.Variant1}\n height={variant === DistributionBarVariant.Variant1 ? 20 : 30}\n />\n )}\n </Grid>\n {distributionScores && (\n <Grid item xs className={classes.scoresWrapper}>\n <Typography variant=\"body1\" className={clsx(classes.score, classes.scoreLast)}>\n {`${distributionScores.scoreSupplyChain}/10`}\n </Typography>\n </Grid>\n )}\n </Grid>\n </Box>\n );\n};\n\nexport default DistributionBar;\n","import React, { ReactElement } from 'react';\nimport { alpha } from '@mui/material/styles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport IconButton from '@mui/material/IconButton';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { BaseProps } from 'shared/types/base';\nimport Box from '@mui/material/Box';\nimport clsx from 'clsx';\n\ntype StyleProps = {\n imageUrl?: string;\n};\n\ntype DialogTitleWithCloseProps = {\n children?: any;\n actions?: ReactElement | null;\n onClose: () => void;\n imageUrl?: string;\n imageClassName?: string;\n titleVariant?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n} & BaseProps;\n\nconst useStyles = makeStyles(theme => ({\n titlePrimary: {\n color: theme.palette.primary.main,\n },\n titleWhite: {\n color: theme.palette.custom.white,\n },\n rootWithImg: {\n height: 250,\n position: 'relative',\n },\n image: ({ imageUrl }: StyleProps) => ({\n background: `url(${imageUrl})`,\n backgroundSize: 'cover',\n }),\n overlay: {\n background: alpha(theme.palette.primary.main, 0.56),\n },\n actions: {\n zIndex: 10,\n },\n whiteIcon: {\n color: theme.palette.custom.white,\n },\n}));\n\nconst DialogTitleWithClose = React.forwardRef<any, DialogTitleWithCloseProps>(\n (\n { children, actions, onClose, imageUrl, className, imageClassName, titleVariant = 'h5' },\n ref,\n ) => {\n const classes = useStyles({ imageUrl });\n\n const title = (titleClassName?: string) =>\n children ? (\n <Typography variant={titleVariant} className={titleClassName}>\n <strong>{children}</strong>\n </Typography>\n ) : null;\n\n return (\n <DialogTitle\n className={className}\n ref={ref}\n classes={{ root: imageUrl ? classes.rootWithImg : undefined }}\n >\n <Grid container justifyContent={children ? 'space-between' : 'flex-end'} alignItems=\"center\">\n {imageUrl ? <div /> : title(classes.titlePrimary)}\n <Grid item className={classes.actions}>\n {actions}\n <IconButton\n aria-label=\"close\"\n edge=\"end\"\n onClick={onClose}\n classes={{ root: imageUrl ? classes.whiteIcon : undefined }}\n size=\"large\">\n <CloseIcon />\n </IconButton>\n </Grid>\n </Grid>\n {imageUrl ? (\n <Box\n position=\"absolute\"\n display=\"flex\"\n alignItems=\"flex-end\"\n left={0}\n top={0}\n width={1}\n height={1}\n className={clsx(classes.image, imageClassName)}\n >\n <Box\n position=\"absolute\"\n left={0}\n top={0}\n width={1}\n height={1}\n className={classes.overlay}\n />\n <Box marginBottom={4} marginLeft={4} zIndex={10}>\n {title(classes.titleWhite)}\n </Box>\n </Box>\n ) : null}\n </DialogTitle>\n );\n },\n);\n\nexport default DialogTitleWithClose;\n","import React, { FC } from 'react';\nimport { makeStyles } from '@mui/styles';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\nimport Grid from '@mui/material/Grid';\n\nexport enum DistributionBarVariant {\n Variant1,\n Variant2,\n}\n\ntype EmptyDistributionBarProps = {\n label: string;\n};\n\nconst useStyles = makeStyles(() => ({\n roundedBox: {\n borderRadius: '6px',\n backgroundColor: '#e4e4e4',\n textAlign: 'center',\n fontSize: 8,\n color: '#868686',\n padding: '4px',\n },\n barWrapper: {\n position: 'relative',\n },\n}));\n\nconst EmptyDistributionBar: FC<EmptyDistributionBarProps> = ({ label = 'No data' }) => {\n const classes = useStyles();\n\n return (\n <Box position=\"relative\">\n <Grid container>\n <Grid item xs={12} className={classes.barWrapper}>\n <Box className={classes.roundedBox}>\n <Typography>{label}</Typography>\n </Box>\n </Grid>\n </Grid>\n </Box>\n );\n};\n\nexport default EmptyDistributionBar;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Accordion from '@mui/material/Accordion';\nimport AccordionSummary from '@mui/material/AccordionSummary';\nimport AccordionDetails from '@mui/material/AccordionDetails';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Typography from '@mui/material/Typography';\nimport CloudDownloadIcon from '@mui/icons-material/CloudDownload';\n\nimport { Loader } from 'ui';\n\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { formatDate } from 'shared/functions';\nimport { downloadAsyncService, DownloadStatus } from 'services/download/downloadAsyncService';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\n\nconst useStyles = makeStyles(theme => ({\n document: {\n padding: theme.spacing(2),\n },\n documentDate: {\n width: 120,\n paddingRight: theme.spacing(2),\n },\n documentName: {\n marginRight: 'auto',\n },\n documentDownloadIcon: {\n marginLeft: theme.spacing(2),\n },\n expansionPanelList: {\n width: '100%',\n },\n}));\n\nconst Documents = ({ title, documents, expanded }) => {\n const [isPending, setIsPending] = useState(false);\n const [filesPending, setFilesPending] = useState([]);\n const dispatch = useDispatch();\n const classes = useStyles();\n const { t } = useTranslation();\n const { info } = useSnackbar();\n\n const throwFetchError = () =>\n dispatch(\n addNotificationAction({\n variant: 'error',\n message: t('Failed to get document. Please try again or contact.'),\n }),\n );\n\n const handleDownloadNotReady = (message = 'Document not ready') => info(message);\n\n const handleDownload = async ({ path, name, options, retries }) => {\n const absolutePath = path.startsWith('https://') || path.startsWith('http://');\n\n if (!absolutePath) {\n setIsPending(true);\n setFilesPending([...filesPending, path]);\n\n const result = await downloadAsyncService({\n path,\n name,\n options,\n retries,\n onError: throwFetchError,\n onDownloadNotReady: handleDownloadNotReady,\n });\n if (result !== DownloadStatus.PENDING) {\n setFilesPending(filesPending.filter(value => value !== path));\n }\n setIsPending(false);\n } else {\n window.open(path, '_blank');\n }\n };\n\n return documents.length ? (\n <>\n <Accordion defaultExpanded={expanded} className={classes.expansionPanel}>\n <AccordionSummary expandIcon={<ExpandMoreIcon />}>\n <Typography>{title}</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <List className={classes.expansionPanelList} disablePadding>\n {documents.map(\n ({ publicationDate, title: documentTitle, level, path, name, options, retries }) => (\n <ListItem\n button\n key={path}\n className={classes.document}\n onClick={() => handleDownload({ path, name, options, retries })}\n disabled={filesPending.includes(path)}\n >\n <Typography className={classes.documentDate}>\n {formatDate(publicationDate, 'dd/MM/yyyy')}\n </Typography>\n <Typography color=\"primary\" className={classes.documentName}>\n {documentTitle}\n </Typography>\n {level && <Typography>{level}</Typography>}\n <CloudDownloadIcon className={classes.documentDownloadIcon} />\n </ListItem>\n ),\n )}\n </List>\n </AccordionDetails>\n </Accordion>\n {isPending && <Loader cover />}\n </>\n ) : null;\n};\n\nDocuments.defaultProps = {\n expanded: false,\n};\n\nDocuments.propTypes = {\n title: PropTypes.string.isRequired,\n documents: PropTypes.arrayOf(\n PropTypes.shape({\n level: PropTypes.string,\n path: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n publicationDate: PropTypes.string,\n title: PropTypes.string.isRequired,\n options: PropTypes.object,\n }).isRequired,\n ).isRequired,\n expanded: PropTypes.bool,\n};\n\nexport default Documents;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useDropzone } from 'react-dropzone';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Avatar } from '@mui/material';\nimport { makeStyles } from '@mui/styles';\nimport clsx from 'clsx';\nimport AddPhotoAlternateIcon from '@mui/icons-material/AddPhotoAlternate';\nimport { red } from '@mui/material/colors';\nimport { useNotifications } from 'shared/hooks';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n minHeight: 'fit-content',\n },\n avatar: {\n cursor: 'pointer',\n height: 150,\n width: 150,\n backgroundColor: 'transparent',\n },\n active: {\n opacity: 1,\n },\n error: {\n opacity: 1,\n borderWidth: 2,\n borderStyle: 'solid',\n borderColor: red[500],\n },\n disabled: {\n pointerEvents: 'none',\n },\n icon: {\n opacity: 0.1,\n color: theme.palette.text.primary,\n width: '100%',\n height: '100%',\n },\n}));\n\nconst FileUploader = ({ value, onChange, fileUrl, error, disabled, maxSizeMb }) => {\n const classes = useStyles();\n const [files, setFiles] = useState(value);\n const { notifyError } = useNotifications();\n const { t } = useTranslation();\n\n const onDropRejected = () => {\n if (maxSizeMb) {\n notifyError(t(`UPLOAD.FILE_TOO_LARGE`).replace('{0}', maxSizeMb));\n }\n };\n\n const { getRootProps, getInputProps } = useDropzone({\n maxSize: maxSizeMb ? maxSizeMb * 1048576 : undefined,\n accept: 'image/*',\n onDrop: acceptedFiles => {\n const extendedFiles = acceptedFiles.map(file =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n }),\n );\n\n setFiles(extendedFiles);\n onChange(extendedFiles);\n },\n onDropRejected,\n });\n\n useEffect(\n () => () => {\n // Make sure to revoke the data uris to avoid memory leaks\n files.forEach(file => URL.revokeObjectURL(file.preview));\n },\n [files],\n );\n\n return (\n <Box>\n <div {...getRootProps({ className: clsx('dropzone', classes.root) })}>\n <input {...getInputProps()} disabled={disabled} />\n <Avatar\n className={clsx({\n [classes.avatar]: true,\n [classes.error]: error,\n [classes.disabled]: disabled,\n })}\n src={files.length ? files[0].preview || URL.createObjectURL(files[0]) : fileUrl ?? ''}\n variant=\"square\"\n >\n {!files.length && !fileUrl && (\n <AddPhotoAlternateIcon\n className={clsx({\n [classes.icon]: true,\n [classes.active]: files.length || fileUrl,\n })}\n />\n )}\n </Avatar>\n </div>\n </Box>\n );\n};\n\nFileUploader.defaultProps = {\n value: [],\n fileUrl: '',\n error: false,\n disabled: false,\n maxSizeMb: undefined,\n};\n\nFileUploader.propTypes = {\n value: PropTypes.array,\n onChange: PropTypes.func.isRequired,\n fileUrl: PropTypes.string,\n error: PropTypes.bool,\n disabled: PropTypes.bool,\n maxSizeMb: PropTypes.number,\n};\n\nexport default FileUploader;\n","import React, { useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@mui/styles';\nimport { Field } from 'formik';\nimport InputBase from '@mui/material/InputBase';\nimport IconButton from '@mui/material/IconButton';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport Button from '@mui/material/Button';\nimport Paper from '@mui/material/Paper';\nimport get from 'lodash/get';\n\nconst useStyles = makeStyles(theme => ({\n uploadContainer: {\n padding: '2px 4px',\n margin: theme.spacing(0.5, 0, 2),\n display: 'flex',\n alignItems: 'center',\n },\n input: {\n display: 'none',\n },\n text: {\n marginLeft: theme.spacing(1),\n flex: 1,\n },\n}));\n\nconst FileUploaderInput = ({ setFieldValue, name, document }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n let inputRef = useRef(null);\n const fileInput = `${name}Input`;\n const fileText = `${name}Text`;\n\n useEffect(() => {\n if (document) {\n setFieldValue(fileText, document.name);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const updateUploadData = (file, text) => {\n if (!file && inputRef.current) {\n inputRef = null;\n }\n\n setFieldValue(fileInput, file);\n setFieldValue(fileText, text);\n };\n\n const isDisabled = field => !field.value;\n\n return (\n <Paper className={classes.uploadContainer}>\n <input\n className={classes.input}\n id={name}\n name={name}\n type=\"file\"\n ref={inputRef}\n onChange={event =>\n updateUploadData(\n event.currentTarget.files[0],\n get(event.currentTarget.files, '[0].name', ''),\n )\n }\n />\n <Field name={`${name}Text`}>\n {({ field }) => (\n <>\n <InputBase\n {...field}\n className={classes.text}\n placeholder={t('UPLOAD.NO_FILE_SELECTED')}\n readOnly\n />\n <IconButton\n type=\"submit\"\n className={classes.iconButton}\n disabled={isDisabled(field)}\n onClick={() => updateUploadData(null, '')}\n size=\"large\">\n <DeleteIcon />\n </IconButton>\n </>\n )}\n </Field>\n <label htmlFor={name}>\n <Button variant=\"contained\" color=\"primary\" component=\"span\">\n {t('UPLOAD.BROWSE')}\n </Button>\n </label>\n </Paper>\n );\n};\n\nFileUploaderInput.defaultProps = {\n name: null,\n document: undefined,\n};\n\nFileUploaderInput.propTypes = {\n setFieldValue: PropTypes.func.isRequired,\n name: PropTypes.string,\n document: PropTypes.shape({\n name: PropTypes.string,\n id: PropTypes.string,\n }),\n};\n\nexport default FileUploaderInput;\n","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgLinkedin = function SvgLinkedin(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M19 0H5a5 5 0 00-5 5v14a5 5 0 005 5h14a5 5 0 005-5V5a5 5 0 00-5-5zM8 19H5V8h3v11zM6.5 6.732c-.966 0-1.75-.79-1.75-1.764s.784-1.764 1.75-1.764 1.75.79 1.75 1.764-.783 1.764-1.75 1.764zM20 19h-3v-5.604c0-3.368-4-3.113-4 0V19h-3V8h3v1.765c1.396-2.586 7-2.777 7 2.476V19z\"\n })));\n};\n\nexport default SvgLinkedin;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport ReactCountryFlag from 'react-country-flag';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { generateKey } from 'shared/functions';\n\nconst useStyles = makeStyles(theme => ({\n flag: {\n '&:not(:last-child)': {\n marginRight: theme.spacing(1),\n },\n },\n}));\n\nconst FlagsList = ({ countryCodes, ...props }) => {\n const classes = useStyles();\n\n return (\n <div {...props}>\n {countryCodes.map((code, index) => (\n <ReactCountryFlag className={classes.flag} key={generateKey(index, code)} countryCode={code} svg />\n ))}\n </div>\n );\n};\n\nFlagsList.propTypes = {\n countryCodes: PropTypes.arrayOf(PropTypes.string).isRequired,\n};\n\nexport default FlagsList;\n","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgFileContractSolid = function SvgFileContractSolid(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 384 512\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"currentColor\",\n d: \"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zM64 72c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8V72zm0 64c0-4.42 3.58-8 8-8h80c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8H72c-4.42 0-8-3.58-8-8v-16zm192.81 248H304c8.84 0 16 7.16 16 16s-7.16 16-16 16h-47.19c-16.45 0-31.27-9.14-38.64-23.86-2.95-5.92-8.09-6.52-10.17-6.52s-7.22.59-10.02 6.19l-7.67 15.34a15.986 15.986 0 01-14.31 8.84c-.38 0-.75-.02-1.14-.05-6.45-.45-12-4.75-14.03-10.89L144 354.59l-10.61 31.88c-5.89 17.66-22.38 29.53-41 29.53H80c-8.84 0-16-7.16-16-16s7.16-16 16-16h12.39c4.83 0 9.11-3.08 10.64-7.66l18.19-54.64c3.3-9.81 12.44-16.41 22.78-16.41s19.48 6.59 22.77 16.41l13.88 41.64c19.77-16.19 54.05-9.7 66 14.16 2.02 4.06 5.96 6.5 10.16 6.5zM377 105L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"\n })));\n};\n\nexport default SvgFileContractSolid;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport Link from '@mui/material/Link';\nimport Paper from '@mui/material/Paper';\n\nimport { DialogTitleWithClose } from 'ui';\n\nconst useStyles = makeStyles(theme => ({\n papers: {\n display: 'flex',\n },\n paper: {\n minWidth: '400px',\n padding: theme.spacing(2),\n\n '&:not(:last-child)': {\n marginRight: theme.spacing(2),\n },\n },\n}));\n\nconst ContactUsModal = ({ open, onClose }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth={false}>\n <DialogTitleWithClose onClose={onClose}>{t('Contact us')}</DialogTitleWithClose>\n <DialogContent>\n <div className={classes.papers}>\n <Paper className={classes.paper}>\n <DialogContentText variant=\"h6\">{t('Headquarters')}</DialogContentText>\n <DialogContentText>\n Scope SE & Co. KGaA\n <br />\n Lennéstraße 5<br />\n D-10785 Berlin\n </DialogContentText>\n <DialogContentText>\n {t('Phone')} +49 30 27891-0\n <br />\n {t('Fax')} +49 30 27891-100\n <br />\n {t('Service')} +49 30 27891-300\n </DialogContentText>\n <DialogContentText component=\"div\">\n <Link href=\"emailto:servicecentre@scopegroup.com\">servicecentre@scopegroup.com</Link>\n <br />\n <Link href=\"www.scopegroup.com\" target=\"_blank\">\n www.scopegroup.com\n </Link>\n </DialogContentText>\n </Paper>\n <Paper className={classes.paper}>\n <DialogContentText variant=\"h6\">{t('Press')}</DialogContentText>\n <DialogContentText>\n Scope SE & Co. KGaA\n <br />\n Lennéstraße 5<br />\n D-10785 Berlin\n </DialogContentText>\n <DialogContentText>\n {t('Phone')} +49 30 27891-0\n <br />\n {t('Fax')} +49 30 27891-100\n </DialogContentText>\n <DialogContentText component=\"div\">\n <Link href=\"emailto:press@scopegroup.com\">press@scopegroup.com</Link>\n </DialogContentText>\n </Paper>\n </div>\n </DialogContent>\n </Dialog>\n );\n};\n\nContactUsModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nContactUsModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nexport default ContactUsModal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport Grid from '@mui/material/Grid';\n\nimport { DialogTitleWithClose } from 'ui';\nimport PrivacyPolicyPdf from 'assets/pdfs/privacy-policy.pdf';\n\nconst PrivacyPolicyModal = ({ open, onClose }) => {\n const { t } = useTranslation();\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth={false}>\n <DialogTitleWithClose onClose={onClose}> </DialogTitleWithClose>\n <DialogContent>\n <Grid container justifyContent=\"flex-end\">\n <Grid item>\n <Button\n variant=\"contained\"\n color=\"primary\"\n href={PrivacyPolicyPdf}\n download=\"privacy-policy.pdf\"\n >\n View as PDF\n </Button>\n </Grid>\n </Grid>\n <DialogContentText variant=\"h5\">{t('ScopeOne Privacy Policy')}</DialogContentText>\n <DialogContentText>\n {t(\n 'This website (\"ScopeOne\") is operated by Scope SE & Co. KGaA, Lennéstraße 5, 10785 Berlin, Germany (\"Scope\" or \"we\"). Scope acts as the data controller.',\n )}\n </DialogContentText>\n <DialogContentText>\n {t('This Privacy Policy explains the basis upon which we collect and use personal data.')}\n </DialogContentText>\n <DialogContentText>\n {t(\n 'Personal data means any information which relates to a specific person (“Personal Dataâ€).',\n )}\n </DialogContentText>\n <DialogContentText>\n {t(\n 'This policy sets out the basis on which any Personal Data we collect from you, or that you provide to us, will be processed by us. Please read the following carefully to understand our views and practices regarding your personal data and how we will treat it.',\n )}\n </DialogContentText>\n <DialogContentText variant=\"h5\">\n {t('1. Personal Data Collected During Registration')}\n </DialogContentText>\n <DialogContentText>\n {t(\n 'We request Personal Data from you when you register on ScopeOne (e.g., your first name, last name, e-mail address, job title, business address, phone number, or other identifiers)',\n )}\n .\n </DialogContentText>\n <DialogContentText variant=\"h5\">{t('2. Use of ScopeOne')}</DialogContentText>\n <DialogContentText>\n {t(\n 'During the use of ScopeOne, we only collect and use the data that your Internet browser automatically transmits to us, such as for example',\n )}\n :\n </DialogContentText>\n <DialogContentText component=\"div\">\n <ul>\n <li>{t('Date and time of access to one of our Internet pages')}</li>\n <li>{t('your browser type')}</li>\n <li>{t('the browser settings')}</li>\n <li>{t('the operating system used')}</li>\n <li>{t('your last visited page')}</li>\n <li>\n {t(\n 'the amount of data transferred and the access status (file transferred, file not found etc.)',\n )}\n </li>\n <li>{t('the loading times of our website and')}</li>\n <li>{t('your IP address.')}</li>\n </ul>\n </DialogContentText>\n <DialogContentText>\n {t(\n 'We collect and use this data in order to enable the use of ScopeOne for statistical and marketing purposes and to improve our internet offer.',\n )}\n </DialogContentText>\n <DialogContentText variant=\"h5\">{t('3. Cookies')}</DialogContentText>\n <DialogContentText>\n {t(\n 'For our website we use cookies. Cookies are small text files that are sent to your browser by our web server during your visit to our website and stored on your device for later retrieval by our web server.',\n )}\n </DialogContentText>\n <DialogContentText>{t('We use the following cookies on our websites')}:</DialogContentText>\n <DialogContentText>\n {t(\n 'When you visit ScopeOne, we may recognize you and customize your use of ScopeOne accordingly (e.g., once you have registered, a cookie will be used to avoid asking you to register again). The information obtained from using these technologies is not sold or otherwise made available to third parties except in accordance with this policy.',\n )}\n </DialogContentText>\n <DialogContentText>\n {t(\n 'You can determine whether cookies can be set and retrieved using the settings in your browser. For example, you can completely deactivate the storage of cookies in your browser, restrict it to certain web pages or configure your browser in such a way that it automatically notifies you as soon as a cookie is to be set and asks you for feedback. You can block or delete individual cookies. For technical reasons, however, this may result in some of the functions of our website being impaired and no longer functioning completely.',\n )}\n </DialogContentText>\n <DialogContentText variant=\"h5\">{t('4. Use of Your Personal Data')}</DialogContentText>\n <DialogContentText>\n {t(\n 'We use Personal Data that we collect solely for our internal use, including for statistical analysis of users behaviour, for product development, for content improvement or to customize the content and layout of our Properties. We may, in our sole discretion, use Personal Data to contact you regarding (i) your account status and changes to the subscriber agreement, (ii) this Policy, (iii) any other policies, agreements or transactions relevant to your use of ScopeOne and (iv) in accordance with applicable laws, marketing to you products and services which we believe may be of interest to you.',\n )}\n </DialogContentText>\n <DialogContentText>\n {t(\n 'You explicitly consent to be contacted by Scope for marketing purposes via telephone, e-mail and SMS.',\n )}\n </DialogContentText>\n <DialogContentText variant=\"h5\">{t('5. Right of revocation')}</DialogContentText>\n <DialogContentText>\n {t(\n 'We draw your attention to the fact that you can revoke any consent granted to us under data protection law at any time with effect for the future.',\n )}\n </DialogContentText>\n <DialogContentText>\n {t('To do so, please contact us by e-mail: [privacy@scopegroup.com ]')}\n </DialogContentText>\n <DialogContentText variant=\"h5\">\n {t('6. Involvement of Service Providers and Transfer to Third Parties')}\n </DialogContentText>\n <DialogContentText>\n {t(\n 'For the provision of this website and for the aforementioned purposes, your data will be passed on to technical service providers (e. g. website hosting, support, quality assurance or mailing service), which we have of course carefully selected and commissioned in writing.',\n )}\n </DialogContentText>\n <DialogContentText>\n {t(\n 'These service providers are bound to our instructions and are regularly monitored by us.',\n )}\n </DialogContentText>\n <DialogContentText variant=\"h5\">{t('7. Storage of Data')}</DialogContentText>\n <DialogContentText>\n {t('Your Personal Data is stored in the European Union.')}\n </DialogContentText>\n <DialogContentText>\n {t(\n 'We will keep your Personal Data for the length of time required for the specific purposes for which it was collected, which are set out in this Privacy Policy.',\n )}\n </DialogContentText>\n <DialogContentText variant=\"h5\">{t('8. Data Security')}</DialogContentText>\n <DialogContentText>\n {t(\n 'We have established reasonable precautions to protect collected Personal Data from loss, misuse, unauthorized access, disclosure, alteration or destruction, which include contractual, administrative, physical, and technical steps. Technical measures include use of firewall protection and encryption technology where appropriate. 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 )}\n </DialogContentText>\n <DialogContentText variant=\"h5\">{t('9. Contact Information')}</DialogContentText>\n <DialogContentText>\n {t(\n 'Questions or concerns regarding our privacy policy and data protection practices should be addressed to:',\n )}\n </DialogContentText>\n <DialogContentText variant=\"h5\">\n {t('Scope’s Appointed Data Protection Officer:')}\n </DialogContentText>\n <DialogContentText>\n Christian Werner\n <br />\n Scope SE & Co. KGaA\n <br />\n Lennéstraße 5<br />\n D-10785 Berlin\n </DialogContentText>\n <DialogContentText>\n Phone +49 30 27891-0\n <br />\n Fax +49 30 27891-100\n <br />\n privacy@scopegroup.com\n <br />\n www.scopegroup.com\n </DialogContentText>\n <DialogContentText variant=\"h5\">Data controller:</DialogContentText>\n <DialogContentText>\n Scope SE & Co. KGaA\n <br />\n Lennéstraße 5<br />\n D-10785 Berlin\n <br />\n <br />\n {t('Phone')} +49 30 27891-0\n <br />\n {t('Fax')} +49 30 27891-100\n <br />\n privacy@scopegroup.com\n <br />\n www.scopegroup.com\n <br />\n <br />\n {t('Represented by the general partner Scope Management SE')}\n <br />\n {t(\n 'Executive Board: Florian Schoeller (Chairman & CEO), Guillaume Jolivet (CAO), Matthias Böhm (COO), Alexander Bergé (CFO)',\n )}\n <br />\n {t('Chair of the Supervisory Board: Inès de Dinechin')}\n <br />\n {t('Commercial Register Berlin: HRB 178531 B')}\n <br />\n </DialogContentText>\n <DialogContentText variant=\"h5\">{t('10. Your Rights')}</DialogContentText>\n <DialogContentText>\n {t(\n 'You have the right to request access to and rectification or erasure of your Personal Data or to restrict processing of your Personal Data or to object to processing as well as the right to data portability.',\n )}\n </DialogContentText>\n <DialogContentText>\n {t('Further, you have the right to lodge a complaint with a supervisory authority.')}\n </DialogContentText>\n <DialogContentText>\n {t('The competent supervisory authority for Scope is:')}\n </DialogContentText>\n <DialogContentText>\n {t('Berliner Beauftragte für Datenschutz und Informationsfreiheit')}\n <br />\n Friedrichstr. 219\n <br />\n D-10969 Berlin\n <br />\n Germany\n </DialogContentText>\n </DialogContent>\n </Dialog>\n );\n};\n\nPrivacyPolicyModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nPrivacyPolicyModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nexport default PrivacyPolicyModal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport Link from '@mui/material/Link';\n\nimport { DialogTitleWithClose } from 'ui';\n\nconst SiteNoticeModal = ({ open, onClose }) => {\n const { t } = useTranslation();\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth={false}>\n <DialogTitleWithClose onClose={onClose}>{t('Legal notice')}</DialogTitleWithClose>\n <DialogContent>\n <DialogContentText variant=\"h6\">\n {t(\n 'Legal information according to Section 5 TMG (Telemediengesetz – German Telemedia Act)',\n )}\n </DialogContentText>\n <DialogContentText>\n <strong>Scope SE & Co. KGaA</strong>\n <br />\n Lennéstraße 5, 10785 Berlin, Germany\n </DialogContentText>\n <DialogContentText>\n {t('telephone')}: +49 30 27891-0\n <br />\n {t('fax')}: +49 30 27891-100\n <br />\n {t('email')}:{' '}\n <Link href=\"mailto:servicecentre@scopegroup.com\">servicecentre@scopegroup.com</Link>\n <br />\n {t('internet')}:{' '}\n <Link href=\"https://www.scopegroup.com/\" target=\"_blank\">\n www.scopegroup.com\n </Link>\n </DialogContentText>\n <DialogContentText>\n {t(\n 'Commercial register of the district court of Berlin-Charlottenburg, register no. HRB 182023 B',\n )}\n <br />\n VAT no.: DE226486027\n <br />\n {t('Chairman of the Supervisory Board: Inès de Dinechin')}\n </DialogContentText>\n <DialogContentText>\n {t('Represented by the general partner Scope Management SE')}\n <br />\n {t(\n 'Executive Board: Florian Schoeller (Chairman & CEO), Guillaume Jolivet (CAO), Matthias Böhm (COO), Alexander Bergé (CFO)',\n )}\n </DialogContentText>\n <DialogContentText>\n {t('Chair of the Supervisory Board: Inès de Dinechin')}\n <br />\n {t('Commercial Register Berlin: HRB 178531 B')}\n <br />\n </DialogContentText>\n <DialogContentText>\n <strong>{t('Responsible for the content according to Section 55 (2) RStV')}:</strong>\n </DialogContentText>\n <DialogContentText>\n Florian Schoeller\n <br />\n Scope SE & Co. KGaA\n <br />\n Lennéstraße 5, 10785 Berlin, Germany\n </DialogContentText>\n <DialogContentText>\n <strong>{t('Dispute Settlement')}</strong>\n </DialogContentText>\n <DialogContentText>\n {t('The European Commission provides a platform for online dispute resolution (OS)')}:\n <br />\n <Link href=\"https://ec.europa.eu/consumers/odr\" target=\"_blank\">\n https://ec.europa.eu/consumers/odr\n </Link>\n .<br />\n {t(\n 'We are not willing or obliged to participate in dispute resolution proceedings before a consumer arbitration board.',\n )}\n </DialogContentText>\n <DialogContentText>\n <strong>{t('Disclaimer')}</strong>\n </DialogContentText>\n <DialogContentText>\n {t(\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 )}\n </DialogContentText>\n <DialogContentText>\n {t(\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 )}\n </DialogContentText>\n <DialogContentText>\n {t(\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 )}\n </DialogContentText>\n <DialogContentText>\n <strong>{t('Copyright')}</strong>\n </DialogContentText>\n <DialogContentText>\n {t(\n 'Copyright © 2023 / 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 </DialogContentText>\n </DialogContent>\n </Dialog>\n );\n};\n\nSiteNoticeModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nSiteNoticeModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nexport default SiteNoticeModal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport Grid from '@mui/material/Grid';\n\nimport { DialogTitleWithClose } from 'ui';\nimport TermsAndConditions from 'assets/pdfs/terms-of-use.pdf';\n\nconst TermsOfUseModal = ({ open, onClose }) => {\n const termsAndConditions =\n '<h2>Terms of use</h2>\\n\\n<h3>1. Definitions</h3>\\n\\n<p> <b>1.1.</b> ‘Account’ means the Client’s ScopeOne Account for use of and access to ScopeOne.<br>\\n <b>1.2.</b> ‘Admin’ means a User having Account administration and management rights.<br>\\n <b>1.3.</b> ‘Affiliates’ means legally separate companies that with respect to each other are subsidiary and parent enterprise, controlled or controlling companies, members of a group of companies, companies with cross-shareholdings, or parties to an enterprise agreement in the meaning of section 15 et seq. of the German Stock Corporation Act (Aktiengesetz).<br>\\n <b>1.4.</b> ‘Client’ means any legal person (organisation) or any natural person in the exercise of his commercial or independent professional activity who will be the ScopeOne Account holder upon Scope’s receipt and acceptance of its completed and signed Account registration request. By signing, the client confirms that it meets these requirements.<br>\\n <b>1.5.</b> ‘CRA Regulation’ means Regulation (EC) No. 1060/2009 of the European Parliament and of the Council of 16 September 2009 on credit rating agencies as amended by Regulation (EU) No. 513/2011 and Regulation (EU) No. 462/2013 on credit rating agencies, as amended from time to time.<br>\\n <b>1.6.</b> ‘Order Form’ means the ScopeOne Order Form which the Client submitted as part of the registration process for the Account hereunder, which constitutes a part of these Terms of Use.<br>\\n <b>1.7.</b> ‘Scope’ means Scope SE & Co. KGaA, Lennéstraße 5, D-10785 Berlin, registered with the commercial register (Handelsregister) of the local district court (Amtsgericht) Charlottenburg with the registry number HRB 182023 B.<br>\\n <b>1.8.</b> ‘ScopeOne’ means the digital marketplace owned and operated by Scope through which the Products are made available and/or offered to the Client.<br>\\n <b>1.9.</b> ‘Product’ means any service, content, materials, tools, product, report, opinion, research, document, data, publication, and all other information shown, accessed, delivered, offered, licensed, purchased, subscribed, sold, or available for use on ScopeOne, whether free of charge or paid.<br>\\n <b>1.10.</b> ‘Product Terms and Conditions’ means the terms and conditions governing and applicable to a specific Product, which constitutes a separate agreement.<br>\\n <b>1.11.</b> ‘Term’ means the time period during which the Client remains an Account holder in accordance with these Terms of Use.<br>\\n <b>1.12.</b> ‘Terms of Use’ means these ScopeOne Terms of Use.<br>\\n <b>1.13.</b> ‘Text Form’ means the definition set forth in Section 126b of the German Civil Code (e.g. email).<br>\\n <b>1.14.</b> ‘User’ means a natural person within the Client’s organization who is designated by the Client to access the Client’s Account.<br>\\n <b>1.15.</b> ‘User Content’ means any data, materials, documents, communications, messages, posts, works, and all other information uploaded by a User to the Account or posted to designated spaces within ScopeOne.</p>\\n\\n<h3> 2. License</h3>\\n\\n<p>  <b>2.1</b>. ScopeOne is owned and operated by Scope. These Terms of Use contain the terms, covenants, conditions, and provisions subject to which the Client may hold the Account and the Users may access and use ScopeOne. Any User‘s accessing or use of the Account constitutes the Client’s consent to, and agreement to be fully bound by, these Terms of Use.<br>\\n  <b>2.2. </b>Scope reserves the right to reject any Order Form and registration application without requiring further explanation. The rights and license granted to the Client hereunder shall not come into effect unless and until Scope has accepted the Client’s registration application in writing. Scope has the right to conduct, and to condition its acceptance of the Client’s registration application and the Client’s continued access to the Account, upon the Client’s successful satisfaction of Scope’s Know Your Customer due diligence standards and requirements.<br>\\n <b> 2.3. </b>Conditioned upon the Client’s continued compliance with the terms and conditions of these Terms of Use, Scope grants the Client a personal, revocable, non-exclusive, non-transferrable, limited license to access and use the Account for the Client’s own internal, non-commercial purposes. The Client shall not modify, create derivatives of, copy, distribute, repackage, redistribute, disseminate, broadcast, transmit, reproduce, publish, license, transfer, sell or re-sell, mirror, frame, “deep link”, “scrape”, data mine, or otherwise use or store for subsequent use for any such purpose, any information or Products obtained from or through ScopeOne, without Scope’s prior written consent or as and to the extent expressly permitted under any Product Terms and Conditions.<br>\\n  <b>2.4. </b>The Client shall not post any non-public information, data, contents or any portions thereof obtained from or through ScopeOne to forums, newsgroups, mailing lists, electronic bulletin boards, or other websites without Scope’s prior written consent. <br>\\n  <b>2.5. </b>The Client warrants to Scope that the Client nor any User will use ScopeOne for any purpose that is unlawful or prohibited by these Terms of Use, including, without limitation, attempting or actually (i) disrupting, impairing, or interfering with ScopeOne, or (ii) collecting any information about other users of ScopeOne, including passwords, accounts, or other information.<br>\\n  <b>2.6. </b>In the event that any printing, copying, and use of any information, contents, or data for the Client’s internal purposes is expressly permitted, the Client shall not obscure, alter, remove, or delete any copyright or other proprietary notices or disclosures contained therein.<br>\\n  <b>2.7. </b>Any and all materials, information, data, contents, and Products accessible on ScopeOne, unless otherwise indicated, are protected by law, including, without limitation, copyright, trade secret, and trademark law, as well as other national and international laws and regulations. ScopeOne, its contents, layout, design, and the Products are the exclusive property of Scope, its Affiliates, or their third-party licensors. Except as expressly provided otherwise herein, Scope does not grant any express or implied right in any such property to the Client or any User. Notwithstanding anything to the contrary in these Terms of Use or any Product Terms and Conditions, the Client shall not, and shall cause its Users to not, use scraping tools or other computer automation to copy or extract any data, information, materials, or contents contained on ScopeOne for any purpose.<br>\\n  <b>2.8.</b> All names, logos, and icons identifying Scope or its Affiliates and/or their respective Products are proprietary marks and trademarks of Scope or its licensors. Third-party trademarks displayed on ScopeOne are the property of their respective owners.<br>\\n <b> 2.9. </b>Some Products may permit Users to upload, communicate, or post User Content to the Account or in designated spaces or forums within ScopeOne. The Client and the relevant Users are fully responsible for the contents of any such User Content. Scope shall have no responsibility or liability whatsoever for any User Content, including, without limitation, the content of any messages or information posted by Users or other third parties. <br>\\n  <b>2.10. </b>The Client shall not, and shall cause its Users not to, (i) post any User Content without permission, right, or license to do so, or which infringe upon the rights of any third party, (ii) post objectionable, offensive, unlawful, deceptive, inaccurate, or harmful User Content, (iii) post personal, private, or confidential information belonging to others, (iv) impersonate or misrepresent their affiliation with another person or entity, (v) post or transmit spam, including, without limitation, unsolicited or unauthorized advertising, promotional materials or informational announcements, (vi) post, modify, or remove any User Content for any kind of compensation or incentive, or (vii) plan or engage in any illegal, fraudulent, or manipulative activity. Scope reserves the right to delete or remove any User Content which Scope deems to be in violation of these Terms of Use, offensive, inappropriate, or to otherwise constitute a risk to the security, functionality, or integrity of ScopeOne or Scope.<br>\\n  <b>2.11.</b> The Client and each User grant to Scope a perpetual, non-exclusive, fully paid, royalty-free, sublicensable, transferable (in whole or in part), worldwide license in any and all User Content currently existing or later developed, to use, publish, reproduce, display, modify, transmit digitally, create derivative works based upon, and otherwise exploit all User Content posted to or received through the Account by, from, or on behalf of the Client, each User, or anyone else using the Client’s Account (other than third party material transmitted through private electronic mail), including, without limitation, any names, voices, likeness, performances, and actions contained therein, for any purpose whatsoever (including, without limitation, advertising, commercial, publicity, and promotional purposes) in Scope’s discretion without notice, approval, attribution, or consideration to the Client, the Users, or to any other person or entity. The Client represents and warrants that the Client has all rights necessary to grant the foregoing license, that neither the permission nor consent of any other person or entity is required to enable Scope to legally use the User Content in accordance with this license, that all User Content provided on ScopeOne by the Client, the Users, or anyone else using the Client’s Account complies with all applicable laws, rules, and regulations, and that Scope’s use of the User Content in accordance with this license will not violate or infringe upon the rights of any person or legal entity.</p>\\n\\n<h3> 3. ScopeOne Account</h3>\\n\\n<p>  <b>3.1. </b>All Users must be natural persons. The Client shall not permit any third party outside of its organization, including, without limitation, the Client’s Affiliates, to become a User or otherwise be granted access the Account.<br>\\n  <b>3.2. </b>When registering the Account, the Client shall designate an Admin username and password and provide Scope with accurate, complete, and up-to-date information in connection therewith. <br>\\n  <b>3.3.</b> The Admin shall have the right to add additional Users to the Account, each of whom shall have their own username and password which may not be shared with any third party.<br>\\n  <b>3.4. </b>The Client shall be solely responsible for the confidentiality and use of all passwords of the Account, as well as for all communications entered through the Account using any such password. The Client shall immediately notify Scope if the Client becomes aware of any loss or theft of any password of the Account or any unauthorized use thereof. Scope reserves the right to delete or change a password at any time and for any reason.<br>\\n  <b>3.5. </b>Scope may at any time, whether temporarily or permanently, block or suspend any User, the Account, and/or access to any Product if Scope determines, in its sole discretion, that there is a threatened or actual violation of these Terms of Use or applicable Product Terms and Conditions. The Client or the Admin may request (in Text Form) that such block or suspension be lifted and Scope shall review such request. The Admin shall reasonably cooperate with Scope in its determination of whether access should be restored and provide such information as Scope may reasonably request for such purpose. Scope shall restore access if Scope deems it appropriate upon reasonable consideration of the relevant circumstances.<br>\\n  <b>3.6.</b> Any use of the Account or the Products in violation of these Terms of Use or applicable Product Terms and Conditions is a material breach of these Terms of Use. Scope may monitor the Client’s use of the Account and/or the Products to ensure that the Client is in compliance with these Terms of Use or applicable Product Terms and Conditions. The Client is fully and solely responsible and liable for the use and access by its Users and their violation of these Terms of Use or any Product Terms and Conditions.<br>\\n <b> 3.7.</b> Scope may track or collect certain information of Users’ activity on ScopeOne in connection with certain Products, including, without limitation, the credit ratings which a User subscribes to, follow, or monitor. Scope may disclose this information to other ScopeOne users, such as the issuers of such credit ratings, for the purpose of facilitating a forum for exchange and communications between ScopeOne users with similar interests. Users may opt in and out from being included in any such forums.</p>\\n\\n<h3> 4. Products</h3>\\n\\n<p>  <b>4.1. </b>A ScopeOne Account is required for all Products. A termination of the Client’s Account for any reason will automatically terminate the Client’s access to all Products. Fees paid by the Client in advance for any Product are not reimbursed upon termination of the Account, except as expressly provided otherwise in the applicable Product Terms and Conditions.<br>\\n  <b>4.2. </b>Products offered or available on ScopeOne, whether for purchase or free of charge, include Products of and offered by third parties, including Scope’s Affiliates. In some cases, Scope or its Affiliates may act as resellers of third-party Products. Any and all rights, interests, and title in and to the Products belong exclusively to Scope, its Affiliates, and/or their third-party licensors. Unless expressly provided otherwise in the applicable Product Terms and Conditions, Scope is not responsible for examining or evaluating the content or accuracy of any third-party Products, shall not be liable for such third-party Products, and the Client agrees that the Client’s use of any third-party Products is at the Client’s sole risk.<br>\\n  <b>4.3. </b>The purchase, receipt, or use of and access to certain Products may be subject to specific Product Terms and Conditions, including third-party Product Terms and Conditions, which constitute separate agreements in addition to these Terms of Use to which Scope is not a party. By accessing, subscribing to, or purchasing any Products, the Client agrees to be bound by the applicable Product Terms and Conditions. In the event of a conflict between the terms of any given Product Terms and Conditions and the provisions of these Terms of Use, the terms of the relevant Product Terms and Conditions shall prevail.<br>\\n  <b>4.4.</b> Scope may also provide access to certain Products to all ScopeOne Users at no additional charge. Unless such Products are clearly marked as being “public†(such as, for example, public credit ratings), the Client must treat, and must cause all of its Users to treat, such Products as strictly confidential. For the avoidance of doubt, Products that are labelled as “Solicited Subscription Credit Ratings†(incl. reports and information made available by Scope in connection therewith) must be treated as strictly confidential and may be used by the Client and the Client’s Users only for the Client’s internal purposes and for regulatory purposes. Solicited Subscription Credit Ratings may not be disclosed to any third party without Scope’s prior written consent, and the Client’s or its User’s wrongful disclosure of any Solicited Subscription Credit Rating or related reports or information constitutes cause for immediate termination of the Client’s License hereunder.<br>\\n  <b>4.5. </b>Products are terminable in accordance with the applicable Product Terms and Conditions.<br>\\n  <b>4.6. </b>Some Products may be regulated by CRA Regulation and subject to specific terms and conditions with respect thereto. Scope may be required to disclose certain information of the Client and its Users under CRA Regulation.<br>\\n  <b>4.7. </b>Scope reserves the right to make changes to the Products available on ScopeOne or to the applicable fees for such Products at any time. <br>\\n  <b>4.8. </b>Scope may provide links, in its sole discretion, to other websites on the world wide web for convenience in locating related information and services. Any such websites have not necessarily been reviewed by Scope and are maintained by third parties over which Scope exercises no control. Scope and its directors, officers, employees, agents, representatives, licensors, and Affiliates expressly disclaim any responsibility for these third-party websites, including, without limitation, for the content, the accuracy of information, the quality of products or services provided by or advertised on and/or software downloaded from these third-party websites. Moreover, such links do not imply an endorsement of any third-party or any website or the products or services provided by any third party.</p>\\n\\n<h3> 5. Fees and Payment</h3>\\n\\n<p> <b> 5.1. </b>The registration and use of the Account are free of charge. Scope reserves the right to charge a fee for the use of the Account in the future, provided that Scope will notify the Client thereof sufficiently in advance. <br>\\n  <b>5.2.</b> The Account provides access to some Products at no additional cost. Access to certain Products require payment of a fee, however, including annual fees for subscription Products. These fees are due upon purchase of the relevant Products, unless otherwise provided in the applicable Product Terms and Conditions or invoice.<br>\\n  <b>5.3.</b> Scope charges and collects all fees for Products offered on ScopeOne, including Products offered by third parties. Invoices for all Products are issued on the Client’s Account and payable by the Client in accordance therewith. Scope collects payment for all third-party Products on behalf of the third parties.<br>\\n  <b>5.4. </b>Fees and prices provided on ScopeOne are exclusive of VAT (unless expressly stated otherwise), sales tax, local and business taxes, and all other charges that are the responsibility of the Client. No deduction shall be made in relation to payment of any fees except for withholding tax required to be deducted under applicable law, treaty, or regulation.<br>\\n <b> 5.5. </b>Any fees not received within the applicable time period provided for payment shall be subject to interest charges on the overdue amount from the due date until the date of actual payment, after as well as before judgment, at the maximum permissible interest rate under applicable law.<br>\\n  <b>5.6.</b> Scope has the right to notify third-party Product providers of the payment status of the Client and to suspend and/or terminate Products for failure to pay applicable fees, and the Client shall remain obligated to pay the same notwithstanding any such suspension or termination.<br>\\n  <b>5.7. </b>The Client acknowledges and agrees that Scope has the right to enforce payment on behalf of third-party Product providers.<br>\\n  <b>5.8. </b>Fees for Products may be subject to change. Scope will notify the Client if the fees for any Products on the Account increase and, if required, will seek the Client’s consent to continue the Product.<br>\\n  <b>5.9. </b>Certain paid Products may offer a free trial period prior to charging the Client. The free trial period may either terminate automatically and require a purchase for continued access to the Product or obligate the Client to terminate the free trial prior to its expiration to avoid the purchase of the Product. Scope will indicate the manner of termination of in connection with any such free trial.</p>\\n\\n<h3> 6. Disclaimers; Limitation of Liability</h3>\\n\\n<p>  <b>6.1. </b>Scope will use reasonable efforts to ensure that ScopeOne, the Account, and the Products will be made available to the Client 24 hours per day throughout the Term (“Normal Availability”). Notwithstanding the foregoing, Scope reserves the right to (i) vary the Normal Availability in any way provided that Scope will give the Client at least 48 hours’ prior notice of its intention to do so, and (ii) suspend Normal Availability temporarily in the event of technical difficulties or other circumstances beyond Scope’s reasonable control. In the event of any such suspension of variation, Scope will use all reasonable efforts to resume Normal Availability as soon as practicable, but Scope shall in no event be liable for any loss, damage, or claim caused by such variation or suspension.<br>\\n  <b>6.2. </b>The Client expressly agrees that the Client shall use ScopeOne and the Account at its own risk and subject to all applicable laws, rules, and regulations. While Scope has endeavored to create a secure and reliable digital marketplace, the Client understands and acknowledges that the confidentiality of any communication or material, including, without limitation, User Content, transmitted to/from ScopeOne or the Account over the internet cannot be guaranteed. Accordingly, Scope and its licensors and third-party Product providers shall not be responsible for the security of any information transmitted via the internet, the accuracy of the information contained on ScopeOne, or for the consequences of any reliance on such information. Scope shall have no liability for interruptions or omissions in internet, network, or hosting services. The Client assumes the sole and complete risk of using ScopeOne.<br>\\n  <b>6.3. </b>The Client further expressly absolves and releases Scope, its Affiliates, their third-party licensors and holds their respective officers, directors, employees, shareholders, managers, representatives, agents, successors, and assigns harmless from and against any claims, damages, liabilities, costs, and expenses (including, without limitation, reasonable attorney’s fees), arising out of or resulting from: (i) any cause beyond their control, including, without limitation, the failure of electronic or mechanical equipment or communication lines, telephone or other interconnect problems, computer viruses, unauthorized access, theft, operator errors, severe weather, earthquakes, or natural disasters, strikes or other labor problems, wars, terrorism, or governmental or regulatory restrictions; and (ii) any third-party claims based on or related to the Client’s and its Users’ use of ScopeOne and the Account or any breach by the Client and/or the Users of these Terms of Use.<br>\\n  <b>6.4. </b>EXCEPT AS EXPRESSLY PROVIDED OTHERWISE PURSUANT TO AN AGREEMENT, THE INFORMATION AND CONTENTS PROVIDED ON SCOPEONE ARE PROVIDED “AS IS” WITHOUT WARRANTY OF ANY KIND AND SCOPE MAKES NO REPRESENTATION OR WARRANTY, WHETHER EXPRESS OR IMPLIED, AS TO THE ACCURACY, TIMELINESS, COMPLETENESS, MERCHANTABILITY, OR FITNESS FOR ANY PARTICULAR PURPOSE OF ANY SUCH INFORMATION AND CONTENTS. Under no circumstances, except to the extent required by applicable law, shall Scope have any liability to any person or entity for (i) any loss or damage caused in whole or in part by, resulting from, or relating to any error or other circumstance or contingency within or outside the control of Scope’s or any of its directors’, officers’, employees’, representatives’, or agents’ in connection with the delivery, collection, compilation, analysis, interpretation, editing, transcription, transmission, communication, publication, or delivery of any such information, or (ii) any direct, indirect, special, consequential, compensatory, or incidental damages whatsoever (including, without limitation, lost profits) with respect to the foregoing.<br>\\n  <b>6.5. </b>The Client expressly acknowledges and understands that third-party Products provided on ScopeOne are the services and products of third-parties. Scope obtains all Products furnished on ScopeOne from sources it believes to be reliable and accurate. However, Scope is not an auditor and cannot and does not in every instance independently verify or validate the Products made available on ScopeOne. Accordingly, these third-party Products constitute the works, opinions, creations, contributions, information, services, analyses, data, and products of such third-parties which, unless expressly stated otherwise, Scope has not reviewed, approved, or otherwise confirmed and over which Scope has no control. Accordingly, Scope shall in no event be liable or responsible whatsoever for the accuracy, timeliness, correctness, completeness, or adequacy of any such third-party Products, the Client’s use thereof, nor for their contents. <br>\\n  <b>6.6. </b>THE CLIENT EXPRESSLY AGREES THAT THE CREDIT RATINGS AND RELATED RESEARCH REPORTS PROVIDED ON SCOPEONE: (I) ARE, AND WILL BE, CONSTRUED SOLELY AS, STATEMENTS OF OPINION OF THE RELATIVE FUTURE CREDIT RISK OF ENTITIES, CREDIT COMMITMENTS, OR DEBT OR DEBT-LIKE SECURITIES AND NOT STATEMENTS OF CURRENT OR HISTORICAL FACT AS TO CREDIT WORTHINESS, INVESTMENT OR FINANCIAL ADVICE, RECOMMENDATIONS REGARDING CREDIT DECISIONS OR DECISIONS TO PURCHASE, SELL, OR HOLD ANY SECURITIES, ENDORSEMENTS OF THE ACCURACY OF ANY OF THE DATA OR CONCLUSIONS, OR ATTEMPTS TO INDEPENDENTLY ASSESS OR VOUCH FOR THE FINANCIAL CONDITION OF ANY COMPANY; (II) DO NOT ADDRESS ANY OTHER RISK, INCLUDING, WITHOUT LIMITATION, LIQUIDITY RISK, MARKET VALUE RISK, OR PRICE VOLATILITY; (III) DO NOT TAKE INTO ACCOUNT THE CLIENT’S PERSONAL OBJECTIVES, FINANCIAL SITUATIONS, OR NEEDS; AND (IV) WILL BE WEIGHED, IF AT ALL, SOLELY AS ONE FACTOR IN ANY INVESTMENT OR CREDIT DECISION MADE BY OR ON BEHALF OF THE CLIENT. ACCORDINGLY, THE CLIENT FURTHER EXPRESSLY AGREES THAT THE CLIENT WILL TAKE DUE CARE AND MAKE ITS OWN STUDY AND EVALUATION OF EACH SECURITY OR CREDIT THAT THE CLIENT MAY CONSIDER PURCHASING, HOLDING, SELLING, OR PROVIDING. THE CLIENT EXPRESSLY AGREES THAT ANY TOOLS OR INFORMATION MADE AVAILABLE ON SCOPEONE ARE NOT A SUBSTITUTE FOR THE EXERCISE OF INDEPENDENT JUDGMENT AND EXPERTISE. THE CLIENT SHOULD ALWAYS SEEK THE ASSISTANCE OF A PROFESSIONAL FOR ADVICE ON INVESTMENTS, TAX, THE LAW, OR OTHER PROFESSIONAL MATTERS.<br>\\n <b> 6.7. </b>FOR THE AVOIDANCE OF DOUBT, AND TO THE EXTENT PERMITTED BY LAW, SCOPE DISCLAIMS LIABILITY FOR ANY DIRECT OR COMPENSATORY LOSSES OR DAMAGES CAUSED TO ANY PERSON OR ENTITY, INCLUDING, WITHOUT LIMITATION, BY ANY NEGLIGENCE (BUT EXCLUDING, INTENTIONAL MISCONDUCT AND GROSS NEGLIGENCE OR ANY LIABILITY THAT CANNOT BE EXCLUDED BY APPLICABLE LAW) ON THE PART OF, OR ANY CONTINGENCY WITHIN OR BEYOND THE CONTROL OF, SCOPE ARISING FROM OR IN CONNECTION WITH THE CLIENT’S USE OF OR INABILITY TO USE SCOPEONE, THE ACCOUNT, AND THE PRODUCTS. THE CLIENT MUST USE ALL REASONABLE EFFORTS TO MITIGATE ANY LOSS OR DAMAGE WHATSOEVER (AND HOWEVER ARISING) AND NOTHING IN THESE TERMS OF USE SHALL BE DEEMED TO RELIEVE OR ABROGATE THE CLIENT OF ANY SUCH DUTY TO MITIGATE ANY LOSS OR DAMAGE. IN ANY EVENT, TO THE EXTENT PERMITTED BY APPLICABLE LAW, THE AGGREGATE LIABILITY OF SCOPE FOR ANY REASON WHATSOEVER RELATED TO ACCESS TO OR USE OF SCOPEONE, THE ACCOUNT, AND THE PRODUCTS SHALL NOT EXCEED THE GREATER OF (I) THE TOTAL AMOUNT PAID BY THE CLIENT FOR PRODUCTS PROVIDED ON SCOPEONE PURSUANT TO THESE TERMS OF USE DURING THE TWELVE (12) MONTHS IMMEDIATELY PRECEDING THE EVENT GIVING RISE TO LIABILITY, OR (II) EUR 100.<br>\\n <b> 6.8. </b>The Client agrees that no oral or written information or advice given by Scope or its employees or representatives or agents in respect to ScopeOne shall constitute a representation or warranty unless such information or advice is incorporated into these Terms of Use by written agreement. <br>\\n  <b>6.9. </b>Scope may limit the availability of ScopeOne, in whole or in part, to any person, entity, geographic area, or jurisdiction Scope chooses, at any time and in Scope’s sole discretion. <br>\\n  <b>6.10. </b>THE PRODUCTS MADE AVAILABLE ON SCOPEONE MAY INCLUDE INACCURACIES OR TYPOGRAPHICAL ERRORS, AND THERE MAY BE TIMES WHEN SCOPEONE OR PRODUCTS ARE UNAVAILABLE. SCOPE MAY FURTHER MAKE MODIFICATIONS AND/OR CHANGES TO SCOPEONE OR THE PRODUCTS DESCRIBED OR MADE AVAILABLE ON SCOPEONE AT ANY TIME, FOR ANY REASON. <br>\\n  <b>6.11. </b>Nothing herein shall be deemed to exclude or limit Scope’s liability in violation of any applicable law, including Scope’s liability for intentional or grossly negligent misconduct.</p>\\n\\n<h3> 7. Term and Termination</h3>\\n\\n<p>  <b>7.1. </b>The Term of the Client’s Account and these Terms of Use shall commence upon Scope’s approval of the Client’s Account registration application and shall continue in full force and effect for one (1) year thereafter. The Term shall automatically renew for successive one (1)-year Terms unless and until the Account is terminated. <br>\\n  <b>7.2.</b> The Client may terminate the Account at any time for any reason by following the termination instructions on the Account or submitting notice of termination in Text Form to Scope. <br>\\n  <b>7.3.</b> Scope may terminate the Account for any reason upon three (3) months’ prior notice, which termination shall take effect as of the latter expiration of (i) the then-current Term, or (ii) any then-ongoing Product. Upon Scope’s notice of termination, Scope may restrict the Client’s ability to purchase additional Products for the remainder of the Term.<br>\\n  <b>7.4. </b>Scope may suspend or terminate the Client’s Account with immediate effect in the event of the Client’s (i) default of its payment obligations, (ii) material breach of the provisions of these Terms of Use, or (iii) failure to satisfy Scope’s Know Your Customer due diligence requirements and standards. Scope may similarly terminate the Account with immediate effect if Scope discontinues the operation of ScopeOne for any reason.<br>\\n  <b>7.5. </b>The Termination of the Account for whatever reason shall not affect Scope’s right to recover any moneys due at the time of termination or to recover damages for any breach of contract claim. <br>\\n  <b>7.6.</b> The Client understands and agrees that in the event that the Client has purchased Products which are ongoing as of the date of termination, the Products will automatically terminate with the Account and the Client will not be entitled to reimbursement of any fees paid in advance for such Products, except in the event that the Account is terminated due to Scope’s discontinuation of ScopeOne or as otherwise expressly agreed in the applicable Product Terms and Conditions.</p>\\n\\n<h3> 8. Miscellaneous</h3>\\n\\n<p>  <b>8.1. </b>Scope reserves the right, at its sole discretion, to modify, amend, update, or change the terms and conditions of these Terms of Use at any time upon notice in Text Form, publication on ScopeOne, and/or other reasonable means of delivery. Such changes shall become effective upon Scope’s issuance of notice. The Client’s continued access to or use of the Account shall be conclusively deemed to constitute the Client’s acceptance of the notified changes. The Client expressly agrees that notice of changes to these Terms and Conditions in Text Form, posted on ScopeOne, or through other reasonable means of delivery constitutes reasonable and sufficient notice.<br>\\n  <b>8.2.</b> All notices required or desired to be given under these Terms of Use shall be deemed given if delivery in Text Form.<br>\\n  <b>8.3.</b> The laws of the Federal Republic of Germany shall govern these Terms of Use and exclusive venue for any dispute in connection herewith shall lie in the courts of competent jurisdiction in Berlin, Germany.<br>\\n  <b>8.4. </b>The failure to insist on strict performance of any of the terms or conditions of these Terms of Use shall not operate as a waiver of any subsequent default or failure of performance. No waiver by Scope of any right under these Terms of Use shall be deemed to be either a waiver of any other right or provision or a waiver of that same right or provision at any other time.<br>\\n  <b>8.5. </b>The provisions of these Terms of Use shall be severable. If any provision or portion thereof shall be determined to be void or unenforceable, the relevant provision or portion thereof shall be deemed deleted and these Terms of Use, and the validity and enforceability of all remaining provisions and portions thereof shall not be affected.<br>\\n  <b>8.6. </b>With the exception of any Product Terms and Conditions, these Terms of Use represent the entire agreement between the Client and Scope with respect to the Client’s use of ScopeOne, the Account, and the Products, and supersede all prior or contemporaneous communications, proposals, agreements, and promises, whether written or oral, between Scope and the Client with respect to the subject matter hereof. Any rights not expressly granted to the Client hereunder are expressly reserved.<br>\\n  <b>8.7. </b>Scope’s Affiliates, Scope’s third-party licensors and third-party Product providers are intended to be third-party beneficiaries of the terms and conditions set forth herein, as applicable to their respective Products.<br>\\n  <b>8.8. </b>The Client shall not assign its rights and obligations under these Terms of Use without Scope’s prior written consent. Any assignment made or attempted in violation of these Terms of Use shall be null and void. These Terms of Use shall be binding on Scope, the Client, and their respective successors and assigns.<br>\\n  <b>8.9. </b> Questions or concerns about these Terms of Use may be directed to servicecentre@scopegroup.com.</p>';\n return (\n <Dialog open={open} onClose={onClose} maxWidth={false}>\n <DialogTitleWithClose onClose={onClose}> </DialogTitleWithClose>\n <DialogContent>\n <Grid container justifyContent=\"flex-end\">\n <Grid item>\n <Button\n variant=\"contained\"\n color=\"primary\"\n href={TermsAndConditions}\n download=\"terms-of-use.pdf\"\n >\n View as PDF\n </Button>\n </Grid>\n </Grid>\n {/* eslint-disable-next-line react/no-danger */}\n <div dangerouslySetInnerHTML={{ __html: termsAndConditions }} />\n </DialogContent>\n </Dialog>\n );\n};\n\nTermsOfUseModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nTermsOfUseModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nexport default TermsOfUseModal;\n","import React, { useState } from 'react';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Link from '@mui/material/Link';\nimport AssignmentIcon from '@mui/icons-material/Assignment';\nimport EmailIcon from '@mui/icons-material/Email';\nimport SecurityIcon from '@mui/icons-material/Security';\n\nimport LinkedInIcon from 'assets/icons/linkedin.svg';\nimport FileContractIcon from 'assets/icons/file-contract-solid.svg';\nimport ContactUsModal from './ContactUsModal/ContactUsModal';\nimport PrivacyPolicyModal from './PrivacyPolicyModal/PrivacyPolicyModal';\nimport SiteNoticeModal from './SiteNoticeModal/SiteNoticeModal';\nimport TermsOfUseModal from './TermsOfUseModal/TermsOfUseModal';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: '100%',\n height: '60px',\n position: 'fixed',\n left: 0,\n bottom: 0,\n backgroundColor: theme.palette.primary.main,\n zIndex: 112,\n },\n offset: {\n height: '60px',\n marginTop: theme.spacing(4),\n },\n link: {\n display: 'flex',\n alignItems: 'center',\n color: theme.palette.primary.contrastText,\n textDecoration: 'none',\n\n '&:hover': {\n textDecoration: 'none',\n },\n\n '&:not(:last-child)': {\n marginRight: theme.spacing(6),\n },\n },\n icon: {\n fill: theme.palette.primary.contrastText,\n marginRight: theme.spacing(1),\n },\n}));\n\nconst Footer = () => {\n const classes = useStyles();\n const [contactUsModalOpen, setContactUsModalOpen] = useState(false);\n const [siteNoticeModalOpen, setSiteNoticeModalOpen] = useState(false);\n const [privacyPolicyModalOpen, setPrivacyPolicyModalOpen] = useState(false);\n const [termsOfUseModalOpen, setTermsOfUseModalOpen] = useState(false);\n\n const toggleContactUsModal = () => setContactUsModalOpen(!contactUsModalOpen);\n const toggleSiteNoticeModal = () => setSiteNoticeModalOpen(!siteNoticeModalOpen);\n const togglePrivacyPolicyModal = () => setPrivacyPolicyModalOpen(!privacyPolicyModalOpen);\n const toggleTermsOfUseModal = () => setTermsOfUseModalOpen(!termsOfUseModalOpen);\n\n return (\n <>\n <div className={classes.root}>\n <Link\n href=\"https://www.linkedin.com/company/scopegroup/\"\n target=\"_blank\"\n className={classes.link}\n variant=\"body1\"\n >\n <LinkedInIcon className={classes.icon} />\n LinkedIn\n </Link>\n <ContactUsModal open={contactUsModalOpen} onClose={toggleContactUsModal} />\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n <Link\n component=\"button\"\n className={classes.link}\n variant=\"body1\"\n onClick={toggleContactUsModal}\n >\n <EmailIcon className={classes.icon} />\n Contact us\n </Link>\n <SiteNoticeModal open={siteNoticeModalOpen} onClose={toggleSiteNoticeModal} />\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n <Link\n component=\"button\"\n className={classes.link}\n variant=\"body1\"\n onClick={toggleSiteNoticeModal}\n >\n <AssignmentIcon className={classes.icon} />\n Legal notice\n </Link>\n <PrivacyPolicyModal open={privacyPolicyModalOpen} onClose={togglePrivacyPolicyModal} />\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n <Link\n component=\"button\"\n className={classes.link}\n variant=\"body1\"\n onClick={togglePrivacyPolicyModal}\n >\n <SecurityIcon className={classes.icon} />\n Privacy policy\n </Link>\n <TermsOfUseModal open={termsOfUseModalOpen} onClose={toggleTermsOfUseModal} />\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n <Link\n component=\"button\"\n className={classes.link}\n variant=\"body1\"\n onClick={toggleTermsOfUseModal}\n >\n <FileContractIcon className={classes.icon} />\n Terms of use\n </Link>\n </div>\n <div className={classes.offset} />\n </>\n );\n};\n\nexport default Footer;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport TextField from '@mui/material/TextField';\nimport Chip from '@mui/material/Chip';\n\nimport { useGroupedAutocompleteStyles } from 'shared/styles/groupedAutocompleteStyles/groupedAutocompleteStyles';\n\nconst GroupedSelect = ({\n onChange,\n value,\n options,\n label,\n getOptionLabel,\n groupBy,\n multiple,\n ...props\n}) => {\n const groupedAutocompleteClasses = useGroupedAutocompleteStyles();\n\n const handleChange = (_event, val) => onChange(val);\n\n return (\n <Autocomplete\n {...props}\n multiple={multiple}\n options={options}\n onChange={handleChange}\n getOptionLabel={getOptionLabel}\n groupBy={groupBy}\n value={value}\n renderInput={params => <TextField {...params} label={label} variant=\"outlined\" />}\n renderTags={(values, getTagProps) =>\n values.map((option, index) => <Chip label={option.name} {...getTagProps({ index })} />)\n }\n classes={groupedAutocompleteClasses}\n />\n );\n};\n\nGroupedSelect.defaultProps = {\n multiple: false,\n value: null,\n};\n\nGroupedSelect.propTypes = {\n onChange: PropTypes.func.isRequired,\n value: PropTypes.oneOfType([\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n ),\n ]),\n options: PropTypes.arrayOf(\n PropTypes.shape({\n name: PropTypes.string.isRequired,\n }),\n ).isRequired,\n label: PropTypes.string.isRequired,\n getOptionLabel: PropTypes.func.isRequired,\n groupBy: PropTypes.func.isRequired,\n multiple: PropTypes.bool,\n};\n\nexport default GroupedSelect;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { alpha } from '@mui/material/styles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Card from '@mui/material/Card';\nimport CardActionArea from '@mui/material/CardActionArea';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { theme } from 'theme';\n\nconst useStyles = makeStyles(({ palette, spacing }) => ({\n root: {\n color: palette.primary.contrastText,\n display: 'flex',\n alignItems: 'flex-end',\n position: 'relative',\n },\n background: {\n width: '100%',\n height: 330,\n objectFit: 'cover',\n },\n content: {\n position: 'absolute',\n padding: spacing(2),\n background: alpha(palette.primary.main, 0.56),\n whiteSpace: 'pre-line',\n },\n title: {\n marginBottom: theme.spacing(1.5),\n },\n}));\n\nconst InfoCard = ({ onClick, title, text, imgUrl, contentHeight }) => {\n const classes = useStyles({ imgUrl });\n\n return (\n <Card onClick={onClick}>\n <CardActionArea className={classes.root}>\n <img src={imgUrl} alt=\"background\" className={classes.background} />\n <Box className={classes.content} width={1} height={contentHeight || 165}>\n <Typography gutterBottom variant=\"h5\" component=\"h2\" className={classes.title}>\n {title}\n </Typography>\n <Typography variant=\"body1\" component=\"p\">\n {text}\n </Typography>\n </Box>\n </CardActionArea>\n </Card>\n );\n};\n\nInfoCard.defaultProps = {\n title: null,\n text: null,\n imgUrl: null,\n contentHeight: undefined,\n};\n\nInfoCard.propTypes = {\n title: PropTypes.string,\n text: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n imgUrl: PropTypes.string,\n contentHeight: PropTypes.number,\n};\n\nexport default InfoCard;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\n\nimport InfoIcon from '@mui/icons-material/Info';\nimport Tooltip from '@mui/material/Tooltip';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles({\n icon: {\n fontSize: 16,\n },\n});\n\nconst InfoTooltip = ({ title, iconClassName, ...props }) => {\n const classes = useStyles();\n\n return (\n <Tooltip arrow placement=\"top\" title={title} {...props}>\n <InfoIcon\n style={{ fontSize: 16 }}\n color=\"primary\"\n className={clsx(classes.icon, iconClassName)}\n />\n </Tooltip>\n );\n};\n\nInfoTooltip.defaultProps = {\n iconClassName: undefined,\n};\n\nInfoTooltip.propTypes = {\n title: PropTypes.string.isRequired,\n iconClassName: PropTypes.string,\n};\n\nexport default InfoTooltip;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Link } from 'react-router-dom';\nimport Typography from '@mui/material/Typography';\n\nconst LinkText = ({ to, label }) => {\n return (\n <Typography component={Link} to={to}>\n {label}\n </Typography>\n );\n};\n\nLinkText.propTypes = {\n to: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n};\n\nexport default LinkText;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport makeStyles from '@mui/styles/makeStyles';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport ListItemText from '@mui/material/ListItemText';\nimport ListItem from '@mui/material/ListItem';\nimport Link from '@mui/material/Link';\n\nconst useStyles = makeStyles((theme) => ({\n nested: {\n paddingLeft: ({ depthLevel }) => theme.spacing((depthLevel + 1) * 4),\n },\n}));\n\nconst MenuItem = ({ to, label, icon, closeMenu, external, depthLevel }) => {\n const classes = useStyles({ depthLevel });\n const navigate = useNavigate();\n const location = useLocation()\n\n const isActive =\n to === '/' ? location.pathname === to : location.pathname.includes(to);\n\n const handleClick = () => {\n closeMenu();\n\n if (!external) {\n navigate(to);\n }\n };\n\n const renderListItem = () => (\n <ListItem className={classes.nested} onClick={handleClick} selected={isActive} button>\n <ListItemIcon>{icon}</ListItemIcon>\n <ListItemText primary={label} />\n </ListItem>\n );\n\n return external ? (\n <Link color=\"inherit\" underline=\"none\" href={to}>\n {renderListItem()}\n </Link>\n ) : (\n renderListItem()\n );\n};\n\nMenuItem.defaultProps = {\n external: false,\n depthLevel: 0,\n};\n\nMenuItem.propTypes = {\n to: PropTypes.string.isRequired,\n label: PropTypes.string.isRequired,\n icon: PropTypes.node.isRequired,\n closeMenu: PropTypes.func.isRequired,\n external: PropTypes.bool,\n depthLevel: PropTypes.number,\n};\n\nexport default MenuItem;\n","import React, { FC, useState } from 'react';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Divider from '@mui/material/Divider';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport ListItemIcon from '@mui/material/ListItemIcon';\nimport Collapse from '@mui/material/Collapse';\nimport ExpandLess from '@mui/icons-material/ExpandLess';\nimport ExpandMore from '@mui/icons-material/ExpandMore';\n\nimport { RenderElement } from 'shared/hoc';\nimport { generateKey } from 'shared/functions';\nimport { MenuItems, SubnavigationItem } from 'shared/constants/menuItems';\n\nimport MenuItem from '../MenuItem/MenuItem';\n\nconst useStyles = makeStyles(theme => ({\n nested: {\n paddingLeft: ({ depthLevel }: any) => (depthLevel > 0 ? theme.spacing(depthLevel * 4) : 0),\n },\n}));\n\ntype MenuModuleProps = {\n closeMenu: () => void;\n module: MenuItems | SubnavigationItem;\n depthLevel: number;\n};\n\nconst MenuModule: FC<MenuModuleProps> = ({ closeMenu, module, depthLevel }) => {\n const [open, setOpen] = useState(true);\n const classes = useStyles({ depthLevel });\n\n const handleClick = () => setOpen(!open);\n\n return (\n <RenderElement licence={module.licence}>\n {depthLevel === 0 && <Divider />}\n <ListItem button onClick={handleClick} className={classes.nested}>\n <ListItemIcon>{module.icon}</ListItemIcon>\n <ListItemText primary={module.label} />\n {open ? <ExpandLess /> : <ExpandMore />}\n </ListItem>\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List component=\"div\">\n {(module.subnavigation ?? [])\n .filter(item => !item.hidden)\n .map((item, index) =>\n item.subnavigation ? (\n <MenuModule\n key={generateKey(index, item.label.toLowerCase())}\n closeMenu={closeMenu}\n module={item}\n depthLevel={depthLevel + 1}\n />\n ) : (\n <RenderElement\n key={generateKey(index, item.label.toLowerCase())}\n permission={item.permission}\n role={item.role}\n condition={Boolean(item.to)}\n shopPermissions={item.shopPermissions}\n >\n <MenuItem\n to={item.to ?? ''}\n label={item.label}\n icon={item.icon}\n external={item.external}\n closeMenu={closeMenu}\n depthLevel={depthLevel}\n />\n </RenderElement>\n ),\n )}\n </List>\n </Collapse>\n </RenderElement>\n );\n};\n\nexport default MenuModule;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport IconButton from '@mui/material/IconButton';\nimport Typography from '@mui/material/Typography';\nimport makeStyles from '@mui/styles/makeStyles';\nimport List from '@mui/material/List';\nimport Drawer from '@mui/material/Drawer';\nimport MenuIcon from '@mui/icons-material/Menu';\nimport { useSelector } from 'react-redux';\n\nimport { validateShopPermissions } from 'modules/shop/shared/parsers';\n\nimport {\n creditAnalysis,\n riskSolutions,\n analyticalOperations,\n generalServices,\n subscriptionsServices,\n eventsServices,\n scopeExplorer,\n admin,\n} from 'shared/constants/menuItems';\n\nimport MenuModule from './MenuModule/MenuModule';\n\nconst useStyles = makeStyles(theme => ({\n creditAnalysis: {\n textTransform: 'uppercase',\n },\n menuButton: {\n marginRight: theme.spacing(1),\n },\n listWrapper: {\n width: 340,\n padding: 0,\n },\n}));\n\nconst Menu = () => {\n const { t } = useTranslation();\n const classes = useStyles();\n const [toggle, setToggle] = useState(false);\n const {\n data: { shopPermissions },\n } = useSelector(state => state.auth);\n\n const handleClick = () => setToggle(!toggle);\n const closeMenu = () => setToggle(false);\n const canAccessByShopPermissions = menu =>\n !menu.shopPermissions || validateShopPermissions(shopPermissions, menu.shopPermissions);\n\n const filterOutEmpty = menu => menu.subnavigation.filter(menuItem => !menuItem.hidden).length;\n\n const menus = [\n creditAnalysis,\n riskSolutions,\n analyticalOperations,\n generalServices,\n subscriptionsServices,\n eventsServices,\n scopeExplorer,\n admin,\n ];\n\n return <>\n <IconButton\n onClick={handleClick}\n className={classes.menuButton}\n color=\"inherit\"\n edge=\"start\"\n size=\"large\">\n <MenuIcon />\n </IconButton>\n <Typography className={classes.creditAnalysis} variant=\"h6\" component=\"h2\" color=\"inherit\">\n {t('Finance intelligence')}\n </Typography>\n <Drawer anchor=\"left\" open={toggle} onClose={handleClick}>\n <List\n component=\"nav\"\n aria-labelledby=\"navbar-list-subheader\"\n className={classes.listWrapper}\n >\n {menus\n .filter(canAccessByShopPermissions)\n .filter(filterOutEmpty)\n .map(menu => (\n <MenuModule key={menu.label} closeMenu={closeMenu} module={menu} />\n ))}\n </List>\n </Drawer>\n </>;\n};\n\nexport default Menu;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Card from '@mui/material/Card';\nimport CardActionArea from '@mui/material/CardActionArea';\nimport CardContent from '@mui/material/CardContent';\nimport CardMedia from '@mui/material/CardMedia';\nimport CardActions from '@mui/material/CardActions';\nimport Typography from '@mui/material/Typography';\nimport LockIcon from '@mui/icons-material/Lock';\n\nimport { generateImageUrl } from 'shared/functions';\n\nconst useStyles = makeStyles(() => ({\n footer: {\n fontWeight: 500,\n marginLeft: 8,\n },\n lock: {\n marginLeft: 'auto',\n marginRight: 8,\n },\n card: {\n paddingBottom: 0,\n },\n}));\n\nconst NewsCard = ({ onClick, title, teaser, footer, imgUrl, restricted, source }) => {\n const classes = useStyles();\n\n return (\n <Card onClick={onClick}>\n <CardActionArea>\n {imgUrl && (\n <CardMedia\n component=\"img\"\n alt={title}\n image={generateImageUrl(imgUrl, source)}\n title={title}\n />\n )}\n <CardContent className={classes.card}>\n <Typography gutterBottom variant=\"h5\" component=\"h2\">\n {title}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {teaser}\n </Typography>\n </CardContent>\n <CardActions disableSpacing>\n <Typography\n className={classes.footer}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n >\n {footer}\n </Typography>\n {restricted && <LockIcon className={classes.lock} />}\n </CardActions>\n </CardActionArea>\n </Card>\n );\n};\n\nNewsCard.defaultProps = {\n title: null,\n teaser: null,\n footer: null,\n imgUrl: null,\n restricted: false,\n source: null,\n};\n\nNewsCard.propTypes = {\n title: PropTypes.string,\n teaser: PropTypes.string,\n onClick: PropTypes.func.isRequired,\n footer: PropTypes.string,\n imgUrl: PropTypes.string,\n restricted: PropTypes.bool,\n source: PropTypes.string,\n};\n\nexport default NewsCard;\n","import { useEffect } from 'react';\n\nconst OnMountScroller = () => {\n useEffect(() => {\n window.scrollTo(0, 0);\n }, []);\n\n return null;\n};\n\nexport default OnMountScroller;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\nconst PageTitle = ({ children, noMargin }) => (\n <Box mb={noMargin ? 0 : 2}>\n <Typography variant=\"h5\">{children}</Typography>\n </Box>\n);\n\nPageTitle.defaultProps = {\n children: null,\n noMargin: false,\n};\n\nPageTitle.propTypes = {\n children: PropTypes.node,\n noMargin: PropTypes.bool,\n};\n\nexport default PageTitle;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { useTranslation } from 'react-i18next';\n\nimport MuiPagination from '@mui/material/Pagination';\nimport { Paper, MenuItem, Select, Typography, Grid } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useGridStyles = makeStyles(theme => ({\n container: {\n justifyContent: 'center',\n },\n perPage: {\n alignItems: 'center',\n display: 'flex',\n },\n label: {\n marginRight: theme.spacing(2),\n },\n margin: {\n marginTop: theme.spacing(3),\n marginBottom: 0,\n },\n}));\n\nconst usePaginationStyles = makeStyles(theme => ({\n root: {\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n },\n ul: {\n justifyContent: 'center',\n },\n}));\n\nconst Pagination = ({\n onChange,\n page,\n count,\n background,\n rowsPerPageOptions,\n onChangeRowsPerPage,\n rowsPerPage,\n showSelectPerPage,\n}) => {\n const { t } = useTranslation();\n const paginationClasses = usePaginationStyles();\n const gridClasses = useGridStyles();\n\n const pagination = (\n <Grid\n container\n spacing={5}\n className={clsx(gridClasses.container, {\n [gridClasses.margin]: background,\n })}\n >\n {showSelectPerPage ? (\n <Grid item className={gridClasses.perPage}>\n <Typography variant=\"caption\" className={gridClasses.label}>\n {t('Rows per page')}:\n </Typography>\n <Select variant=\"standard\" onChange={onChangeRowsPerPage} value={rowsPerPage}>\n {rowsPerPageOptions.map(option => (\n <MenuItem key={option} value={option}>\n <Typography variant=\"body2\">{option}</Typography>\n </MenuItem>\n ))}\n </Select>\n </Grid>\n ) : null}\n <Grid item>\n <MuiPagination\n shape=\"rounded\"\n count={count}\n page={page}\n onChange={onChange}\n classes={paginationClasses}\n />\n </Grid>\n </Grid>\n );\n return background ? <Paper>{pagination}</Paper> : pagination;\n};\n\nPagination.defaultProps = {\n background: false,\n rowsPerPageOptions: [10, 25, 50, 100],\n onChangeRowsPerPage: undefined,\n showSelectPerPage: false,\n rowsPerPage: undefined,\n};\n\nPagination.propTypes = {\n onChange: PropTypes.func.isRequired,\n count: PropTypes.number.isRequired,\n page: PropTypes.number.isRequired,\n rowsPerPage: PropTypes.number,\n background: PropTypes.bool,\n onChangeRowsPerPage: PropTypes.func,\n rowsPerPageOptions: PropTypes.arrayOf(PropTypes.number),\n showSelectPerPage: PropTypes.bool,\n};\n\nexport default Pagination;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Typography from '@mui/material/Typography';\n\nconst useStyle = makeStyles(theme => ({\n root: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: theme.spacing(1),\n },\n}));\n\nconst PanelTitle = ({ children, button, id }) => {\n const classes = useStyle();\n\n return (\n <div className={classes.root} id={id}>\n <Typography variant=\"h6\">{children}</Typography>\n {button}\n </div>\n );\n};\n\nPanelTitle.defaultProps = {\n children: null,\n button: null,\n id: undefined,\n};\n\nPanelTitle.propTypes = {\n children: PropTypes.node,\n button: PropTypes.node,\n id: PropTypes.string,\n};\n\nexport default PanelTitle;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Avatar from '@mui/material/Avatar';\nimport Grid from '@mui/material/Grid';\nimport ListItem from '@mui/material/ListItem';\nimport Typography from '@mui/material/Typography';\nimport AccountCircleIcon from '@mui/icons-material/AccountCircle';\n\nimport { FlagsList } from 'ui';\nimport { fetchUserImage } from 'services';\n\nconst useStyles = makeStyles(theme => ({\n avatar: {\n width: 38,\n height: 38,\n marginRight: theme.spacing(1),\n },\n}));\n\nconst Item = ({ id, name, position, languages }) => {\n const didUnmount = React.useRef(false);\n const [imageUrl, setImageUrl] = useState(null);\n const classes = useStyles();\n\n const fetchImage = async () => {\n let url = null;\n try {\n url = await fetchUserImage(id);\n } catch (e) {\n // do nothing\n } finally {\n if (!didUnmount.current) {\n setImageUrl(url);\n }\n }\n };\n\n useEffect(() => {\n if (id) fetchImage();\n return () => {\n didUnmount.current = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id]);\n\n return (\n <ListItem>\n <Grid container spacing={1}>\n <Grid item>\n {imageUrl ? (\n <Avatar className={classes.avatar} src={imageUrl} />\n ) : (\n <Avatar className={classes.avatar}>\n <AccountCircleIcon />\n </Avatar>\n )}\n </Grid>\n <Grid item>\n <Typography variant=\"body1\" component=\"h2\">\n {name}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {position}\n </Typography>\n {languages && <FlagsList countryCodes={languages} />}\n </Grid>\n </Grid>\n </ListItem>\n );\n};\n\nItem.defaultProps = {\n languages: null,\n};\n\nItem.propTypes = {\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n position: PropTypes.string.isRequired,\n languages: PropTypes.arrayOf(PropTypes.string),\n};\n\nexport { Item };\n","import React, { Fragment } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport Divider from '@mui/material/Divider';\nimport Grid from '@mui/material/Grid';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Paper from '@mui/material/Paper';\n\nimport { Loader } from 'ui';\nimport { EmptyDataLabel } from 'ui/Labels';\n\nimport { Item } from './Item/Item';\n\nconst PeopleList = ({ data, button, loading }) => {\n const { t } = useTranslation();\n\n return (\n <Paper>\n <List>\n {loading ? (\n <Loader center />\n ) : (\n data.map(({ id, name, position, languages }, index) => (\n <Fragment key={id}>\n <Item id={id} name={name} position={position} languages={languages} />\n {index + 1 < data.length && <Divider />}\n </Fragment>\n ))\n )}\n {!loading && data.length === 0 && (\n <EmptyDataLabel label={t('No other users logged in yet.')} />\n )}\n {!loading && button && (\n <ListItem>\n <Grid container justifyContent=\"center\">\n {button}\n </Grid>\n </ListItem>\n )}\n </List>\n </Paper>\n );\n};\n\nPeopleList.defaultProps = {\n button: null,\n loading: false,\n};\n\nPeopleList.propTypes = {\n data: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n position: PropTypes.string.isRequired,\n }),\n ).isRequired,\n button: PropTypes.node,\n loading: PropTypes.bool,\n};\n\nexport default PeopleList;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nconst PreviewPanel = ({ children, title, subtitle, caption, onViewAllClick, viewAllDisabled }) => {\n const { t } = useTranslation();\n\n return (\n <Paper variant=\"outlined\" elevation={0}>\n <Box p={2}>\n <Grid container alignItems=\"center\" justifyContent=\"space-between\">\n <Grid item>\n {subtitle && <Typography variant=\"h6\">{subtitle}</Typography>}\n {title && <Typography variant=\"h5\">{title}</Typography>}\n </Grid>\n </Grid>\n </Box>\n {caption && <Box px={2}><Typography variant='body1'>{caption}</Typography></Box>}\n {children}\n {onViewAllClick && (\n <Box py={2} px={2}>\n <Grid container justifyContent=\"flex-end\">\n <Grid item>\n <Button variant=\"outlined\" onClick={onViewAllClick} disabled={viewAllDisabled}>\n {t('View all')}\n </Button>\n </Grid>\n </Grid>\n </Box>\n )}\n </Paper>\n );\n};\n\nPreviewPanel.defaultProps = {\n children: null,\n title: null,\n subtitle: null,\n onViewAllClick: false,\n viewAllDisabled: false,\n};\n\nPreviewPanel.propTypes = {\n children: PropTypes.node,\n title: PropTypes.string,\n subtitle: PropTypes.string,\n onViewAllClick: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n viewAllDisabled: PropTypes.bool,\n};\n\nexport default PreviewPanel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nimport { FlagsList } from 'ui';\nimport { profilePicturesPath } from 'shared/constants/picturesPath';\n\nconst useStyles = makeStyles(theme => ({\n actions: {\n marginLeft: 'auto',\n },\n profileInfo: {\n marginBottom: theme.spacing(3),\n padding: theme.spacing(2),\n },\n profilePicture: {\n width: 200,\n height: 200,\n borderRadius: theme.shape.borderRadius,\n },\n}));\n\nconst ProfileInfo = ({ imageUrl, name, title, subtitle, languages, actions }) => {\n const classes = useStyles();\n\n return (\n <Paper className={classes.profileInfo}>\n <Grid container spacing={2}>\n <Grid item>\n <img className={classes.profilePicture} src={imageUrl} alt=\"Avatar\" />\n </Grid>\n <Grid item>\n <Typography variant=\"h5\">{name}</Typography>\n {title && (\n <Typography variant=\"subtitle1\" color=\"textSecondary\">\n {title}\n </Typography>\n )}\n {subtitle && (\n <Typography variant=\"subtitle2\" color=\"textSecondary\">\n {subtitle}\n </Typography>\n )}\n {languages && <FlagsList countryCodes={languages} />}\n </Grid>\n {actions && (\n <Grid item className={classes.actions}>\n {actions}\n </Grid>\n )}\n </Grid>\n </Paper>\n );\n};\n\nProfileInfo.defaultProps = {\n imageUrl: profilePicturesPath,\n title: null,\n subtitle: null,\n actions: null,\n languages: null,\n};\n\nProfileInfo.propTypes = {\n name: PropTypes.string.isRequired,\n imageUrl: PropTypes.string,\n title: PropTypes.string,\n subtitle: PropTypes.string,\n actions: PropTypes.node,\n languages: PropTypes.arrayOf(PropTypes.string.isRequired),\n};\n\nexport default ProfileInfo;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Avatar from '@mui/material/Avatar';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\n\nconst useStyles = makeStyles(theme => ({\n avatar: {\n width: 60,\n height: 60,\n },\n card: {\n backgroundColor: theme.palette.primary.main,\n },\n text: {\n color: theme.palette.primary.contrastText,\n },\n}));\n\nconst ProfileCard = ({ name, text, subtext, imgUrl }) => {\n const classes = useStyles();\n\n return (\n <Card className={classes.card}>\n <CardContent>\n <Grid container spacing={1}>\n <Grid item>\n <Avatar className={classes.avatar} src={imgUrl} />\n </Grid>\n <Grid item>\n <Typography className={classes.text} variant=\"h6\" component=\"h2\">\n {name}\n </Typography>\n <Typography\n className={classes.text}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n >\n {text}\n <br />\n {subtext}\n </Typography>\n </Grid>\n </Grid>\n </CardContent>\n </Card>\n );\n};\n\nProfileCard.propTypes = {\n name: PropTypes.string.isRequired,\n text: PropTypes.string.isRequired,\n subtext: PropTypes.string.isRequired,\n imgUrl: PropTypes.string.isRequired,\n};\n\nexport default ProfileCard;\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport Slider from '@mui/material/Slider';\nimport Typography from '@mui/material/Typography';\nimport Tooltip from '@mui/material/Tooltip';\nimport { Box } from '@mui/material';\n\nconst ValueLabelComponent = ({ children, open, value }) => (\n <Tooltip open={open} enterTouchDelay={0} placement=\"top\" title={value}>\n {children}\n </Tooltip>\n);\n\nValueLabelComponent.propTypes = {\n children: PropTypes.element.isRequired,\n open: PropTypes.bool.isRequired,\n value: PropTypes.number.isRequired,\n};\n\nconst RangeSlider = ({ onChange, label, options, values, alignSliderToLabel, disabled }) => {\n const firstValueIndex = options.indexOf(options.find(option => values[0] === option.value));\n const secondValueIndex = options.indexOf(options.find(option => values[1] === option.value));\n\n const [currentValues, setCurrentValues] = useState([firstValueIndex, secondValueIndex]);\n\n useEffect(() => {\n setCurrentValues([firstValueIndex, secondValueIndex]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [values]);\n\n const handleChange = (event, newValues) => {\n const firstValue = options[newValues[0]].value;\n const secondValue = options[newValues[1]].value;\n\n onChange(event, [firstValue, secondValue]);\n setCurrentValues(newValues);\n };\n\n const valueLabelFormat = x => options[x].label;\n\n const rangeSliderMarks = [\n {\n label: options[currentValues[0]].label,\n value: 0,\n },\n {\n label: options[currentValues[1]].label,\n value: options.length - 1,\n },\n ];\n\n return (\n <>\n <Typography gutterBottom>{label}</Typography>\n <Box mx={alignSliderToLabel ? 1 : 0}>\n <Slider\n disabled={disabled}\n ValueLabelComponent={ValueLabelComponent}\n value={currentValues}\n onChange={handleChange}\n size=\"small\"\n min={0}\n max={options.length - 1}\n marks={rangeSliderMarks}\n valueLabelDisplay=\"auto\"\n valueLabelFormat={valueLabelFormat}\n />\n </Box>\n </>\n );\n};\n\nRangeSlider.propTypes = {\n disabled: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n label: PropTypes.string,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.any.isRequired,\n }),\n ).isRequired,\n values: PropTypes.array.isRequired,\n alignSliderToLabel: PropTypes.bool,\n};\n\nRangeSlider.defaultProps = {\n disabled: false,\n alignSliderToLabel: false,\n label: null,\n};\n\nexport default RangeSlider;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport { grey } from '@mui/material/colors';\nimport { Tooltip } from '@mui/material';\n\nconst useStyle = makeStyles({\n root: {\n display: 'flex',\n flexDirection: 'column-reverse',\n '& > div': {\n marginTop: 2,\n marginBottom: 2,\n textAlign: 'center',\n fontWeight: 600,\n paddingTop: 5,\n paddingBottom: 5,\n fontSize: 16,\n },\n '& > div:nth-child(n+6)': {\n color: '#fff',\n },\n },\n});\nconst getColor = (index, length) => {\n if (length > 5) {\n switch (index) {\n case 0:\n return grey[100];\n case 1:\n case 2:\n return grey[200];\n case 3:\n case 4:\n return grey[300];\n case 5:\n return grey[400];\n case 6:\n case 7:\n return grey[500];\n case 8:\n case 9:\n return grey[600];\n case 10:\n return grey[700];\n default:\n return undefined;\n }\n }\n\n switch (index) {\n case 0:\n return grey[100];\n case 1:\n return grey[200];\n case 2:\n return grey[300];\n case 3:\n return grey[400];\n case 4:\n return grey[500];\n case 5:\n return grey[600];\n default:\n return undefined;\n }\n};\n\nconst RatingScale = ({ data, ...props }) => {\n const classes = useStyle();\n\n return (\n <div className={classes.root} {...props}>\n {data.map((item, index) => (\n <div key={item.value} style={{ backgroundColor: getColor(index, data.length) }}>\n {item.tooltip ? (\n <Tooltip title={item.tooltip} placement=\"top\">\n <div>{item.value}</div>\n </Tooltip>\n ) : (\n item.value\n )}\n </div>\n ))}\n </div>\n );\n};\n\nRatingScale.propTypes = {\n data: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n tooltip: PropTypes.string,\n }),\n ).isRequired,\n};\n\nexport default RatingScale;\n","import React, { FC } from 'react';\nimport clsx from 'clsx';\nimport isNumber from 'lodash/isNumber';\n\nimport { green, red, blue, yellow } from '@mui/material/colors';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { formatDate } from 'shared/functions';\nimport { useTranslation } from 'react-i18next';\nimport FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord';\nimport { Activity, activityLabels } from 'shared/mappings/activityLabels';\nimport { BaseProps } from 'shared/types/base';\n\nconst useCreditScoreClasses = makeStyles(theme => ({\n icon: {\n color: green[400],\n position: 'relative',\n marginLeft: theme.spacing(0.5),\n },\n affirmation: {\n color: blue[400],\n },\n stable: {\n color: blue[400],\n },\n better: {\n color: green[400],\n },\n worse: {\n color: red[400],\n },\n new: {\n color: yellow[400],\n },\n none: {\n display: 'none',\n },\n wrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n}));\n\ntype ScoreChangeIndicatorProps = {\n scoreOld?: number | string;\n scoreChangeDate?: string;\n activity: string;\n activityMapping: Record<string, Activity>;\n showLabel?: boolean;\n} & BaseProps;\n\nconst ScoreChangeIndicator: FC<ScoreChangeIndicatorProps> = ({\n scoreOld,\n scoreChangeDate,\n activity,\n activityMapping,\n showLabel,\n}) => {\n const { t } = useTranslation();\n const creditScoreClasses = useCreditScoreClasses();\n const mappedActivity = activityMapping[activity];\n const activityLabel = activityLabels[mappedActivity];\n\n const activityClasses: Record<Activity, string> = {\n [Activity.Downgrade]: creditScoreClasses.worse,\n [Activity.Upgrade]: creditScoreClasses.better,\n [Activity.FirstScore]: creditScoreClasses.new,\n [Activity.Affirmation]: creditScoreClasses.affirmation,\n [Activity.None]: creditScoreClasses.none,\n [Activity.Stable]: creditScoreClasses.stable,\n };\n\n let tooltipTitle = '';\n if (scoreOld && scoreChangeDate) {\n tooltipTitle = `Previous value: ${scoreOld}${\n isNumber(scoreOld) ? '/10' : ''\n }, change as of: ${formatDate(scoreChangeDate)}`;\n }\n\n return (\n <Tooltip title={tooltipTitle}>\n <div className={creditScoreClasses.wrapper}>\n {showLabel && <Typography>{t(activityLabel)}</Typography>}\n {activity && (\n <FiberManualRecordIcon\n className={clsx(creditScoreClasses.icon, activityClasses[mappedActivity])}\n />\n )}\n </div>\n </Tooltip>\n );\n};\n\nexport default ScoreChangeIndicator;\n","import React from 'react';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Fab from '@mui/material/Fab';\nimport useScrollTrigger from '@mui/material/useScrollTrigger';\nimport Zoom from '@mui/material/Zoom';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n position: 'fixed',\n bottom: '76px',\n right: theme.spacing(2),\n },\n}));\n\nconst ScrollTop = () => {\n const classes = useStyles();\n const trigger = useScrollTrigger({\n disableHysteresis: true,\n threshold: 100,\n });\n\n const handleClick = event => {\n const anchor = (event.target.ownerDocument || document).querySelector('#back-to-top-anchor');\n\n if (anchor) {\n anchor.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n };\n\n return (\n <Zoom in={trigger}>\n <div onClick={handleClick} role=\"presentation\" className={classes.root}>\n <Fab color=\"primary\" size=\"small\" aria-label=\"scroll back to top\">\n <KeyboardArrowUpIcon />\n </Fab>\n </div>\n </Zoom>\n );\n};\n\nexport default ScrollTop;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport qs from 'qs';\nimport { Link } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport MUILink from '@mui/material/Link';\nimport { useQuery } from 'shared/hooks';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\n\nconst SearchBreadcrumb = () => {\n const { t } = useTranslation();\n const { companyModule = ratingTypes.CREDIT_RATING } = useQuery();\n\n const searchFilters = useSelector(({ searchResult }) => searchResult.searchFilters);\n\n const query = { ratingType: companyModule, ...searchFilters };\n const queryString = qs.stringify(query, {\n addQueryPrefix: true,\n });\n\n return (\n <MUILink to={`/search-result${queryString}`} color=\"inherit\" component={Link}>\n {t('Search result')}\n </MUILink>\n );\n};\n\nexport default SearchBreadcrumb;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport TextField from '@mui/material/TextField';\nimport Autocomplete from '@mui/material/Autocomplete';\n\nconst SelectWithSearch = ({ label, options, onChange, value, disabled }) => {\n const handleChange = (event, option) => {\n onChange(option === null ? null : option.value);\n };\n\n const selectedValue = value === null ? null : options.find(option => option.value === value);\n\n return (\n <Autocomplete\n disabled={disabled}\n options={options}\n onChange={handleChange}\n getOptionLabel={({ label: optionLabel }) => optionLabel}\n renderInput={params => <TextField {...params} label={label} />}\n value={selectedValue}\n />\n );\n};\n\nSelectWithSearch.defaultProps = {\n value: null,\n disabled: false,\n};\n\nSelectWithSearch.propTypes = {\n label: PropTypes.string.isRequired,\n options: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.any.isRequired,\n label: PropTypes.string.isRequired,\n }),\n ).isRequired,\n onChange: PropTypes.func.isRequired,\n value: PropTypes.any,\n disabled: PropTypes.bool,\n};\n\nexport default SelectWithSearch;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Box, Paper, Divider, List, ListItem, ListItemText } from '@mui/material';\n\nimport { Loader } from 'ui';\nimport { EmptyDataLabel } from 'ui/Labels';\n\nconst SimpleDataList = ({ data, loading, onItemClick, emptyText }) => (\n <Paper>\n {loading ? (\n <Box py={1}>\n <Loader center />\n </Box>\n ) : (\n <List>\n {data.map((item, index) => {\n const { id, primaryText, secondaryText } = item;\n\n return (\n <React.Fragment key={id}>\n <ListItem button onClick={() => onItemClick(item)}>\n <ListItemText primary={primaryText} secondary={secondaryText} />\n </ListItem>\n {index + 1 < data.length && <Divider />}\n </React.Fragment>\n );\n })}\n {!loading && data.length === 0 && <EmptyDataLabel label={emptyText} />}\n </List>\n )}\n </Paper>\n);\n\nSimpleDataList.defaultProps = {\n loading: false,\n onItemClick: () => null,\n};\n\nSimpleDataList.propTypes = {\n data: PropTypes.arrayOf(\n PropTypes.shape({\n primaryText: PropTypes.string.isRequired,\n secondaryText: PropTypes.string,\n }),\n ).isRequired,\n loading: PropTypes.bool,\n onItemClick: PropTypes.func,\n emptyText: PropTypes.string.isRequired,\n};\n\nexport default SimpleDataList;\n","import React, { useState, useEffect } from 'react';\nimport { connect } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport Snackbar from '@mui/material/Snackbar';\n\nimport { Alert } from 'ui';\nimport { usePrevious } from 'shared/hooks';\nimport { removeNotificationAction } from 'store/notifications/notificationsActions';\n\nconst SnackbarNotifications = ({ notification, removeNotification }) => {\n const [open, setOpen] = useState(false);\n const [message, setMessage] = useState(null);\n const [variant, setVariant] = useState(undefined);\n\n const previousNotification = usePrevious(notification);\n\n const processQueue = () => {\n if (notification) {\n setMessage(notification.message);\n setVariant(notification.variant);\n setOpen(true);\n\n removeNotification(notification.id);\n }\n };\n\n const handleClose = (event, reason) => {\n if (reason === 'clickaway') return;\n setOpen(false);\n };\n\n const handleExited = () => {\n processQueue();\n };\n\n useEffect(() => {\n if (notification !== previousNotification) {\n if (notification) {\n if (open) {\n setOpen(false);\n } else {\n processQueue();\n }\n }\n }\n // eslint-disable-next-line\n }, [notification]);\n\n return (\n <Snackbar\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n onClose={handleClose}\n TransitionProps={{\n onExited: handleExited,\n }}\n open={open}\n autoHideDuration={5000}\n >\n <div>\n {message && <Alert message={message} variant={variant} />}\n </div>\n </Snackbar>\n );\n};\n\nconst mapStateToProps = state => ({\n notification: state.notifications[0] || null,\n});\n\nconst mapDispatchToProps = dispatch => ({\n removeNotification: id => dispatch(removeNotificationAction(id)),\n});\n\nconst ConnectedNotifications = connect(mapStateToProps, mapDispatchToProps)(SnackbarNotifications);\n\nSnackbarNotifications.defaultProps = {\n notification: null,\n};\n\nSnackbarNotifications.propTypes = {\n notification: PropTypes.shape({\n variant: PropTypes.oneOf(['error', 'info', 'success', 'warning']),\n message: PropTypes.string.isRequired,\n id: PropTypes.number.isRequired,\n }),\n removeNotification: PropTypes.func.isRequired,\n};\n\nexport default ConnectedNotifications;\n","import React, { useState, forwardRef, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport isNil from 'lodash/isNil';\nimport clsx from 'clsx';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Paper from '@mui/material/Paper';\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport { formatNumber } from 'shared/functions';\nimport { grey } from '@mui/material/colors';\nimport { COLORS } from '@scope/scope-one-ui/theme';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: 'transparent',\n boxShadow: 'none',\n },\n tabs: {\n padding: theme.spacing(2, 1),\n minHeight: 32,\n '& .MuiTabs-indicator': {\n display: 'none',\n },\n },\n tab: {\n minWidth: 130,\n minHeight: 32,\n borderWidth: 2,\n borderStyle: 'solid',\n borderColor: grey[800],\n borderRadius: 16,\n fontSize: 14,\n textTransform: 'none',\n padding: '3px 6px',\n margin: 5,\n '&.MuiTab-textColorInherit': {\n opacity: 0.4,\n },\n '&.Mui-selected': {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n borderWidth: 2,\n borderStyle: 'solid',\n borderColor: theme.palette.primary.main,\n opacity: 1,\n },\n },\n shadowed: {\n borderRadius: theme.spacing(1),\n boxShadow: `4px 4px 2px lightgrey`,\n marginBottom: theme.spacing(0.5),\n backgroundColor: COLORS.secondary.main,\n },\n}));\n\nconst useTabStyles = makeStyles({\n root: {\n backgroundColor: COLORS.secondary.main,\n maxWidth: 300,\n minWidth: 160,\n },\n});\n\nconst TabsPanel = forwardRef(({ children, active, variant, onChange, hasShadow, lazy }, ref) => {\n const childrenArray = Array.isArray(children)\n ? children.filter((child) => !!child).flat(1)\n : [children];\n const [tabsLoadedState, setTabsLoadedState] = useState(\n childrenArray.reduce((o, child) => ({ ...o, [child.props.value]: !lazy }), {}),\n );\n const [clonedChildren, setClonedChildren] = useState([]);\n\n const [activeTab, setActiveTab] = useState(active);\n const classes = useStyles();\n const tabClasses = useTabStyles();\n\n const handleChange = (_, value) =>\n onChange ? onChange('companyTab', value) : setActiveTab(value);\n\n const selectActive = onChange ? active : activeTab;\n\n useEffect(() => {\n setActiveTab(active);\n }, [active]);\n\n useEffect(() => {\n setTabsLoadedState({ ...tabsLoadedState, [selectActive]: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [selectActive]);\n\n useEffect(() => {\n setClonedChildren(\n React.Children.map(childrenArray, (child) =>\n tabsLoadedState[child.props.value]\n ? React.cloneElement(child, { hidden: child.props.value !== selectActive })\n : undefined,\n ).filter((child) => child),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [tabsLoadedState, children]);\n\n return (\n <Paper ref={ref} className={classes.root}>\n <Tabs\n value={selectActive}\n onChange={handleChange}\n TabIndicatorProps={{\n style: {\n minWidth: 160,\n },\n }}\n variant={variant === 'scrollable' ? 'scrollable' : 'standard'}\n scrollButtons={variant === 'scrollable' ? 'auto' : false}\n className={clsx(\n {\n [classes.tabs]: variant === 'chip',\n },\n hasShadow ? classes.shadowed : '',\n )}\n >\n {childrenArray.map((child) => {\n const { label, value, counter, total } = child.props;\n\n let counterInfo = '';\n if (!isNil(counter)) {\n counterInfo = isNil(total)\n ? ` (${formatNumber(counter)})`\n : ` (${formatNumber(total)} requests available)`;\n }\n\n return (\n <Tab\n className={clsx({\n [classes.tab]: variant === 'chip',\n })}\n classes={tabClasses}\n label={`${label}${counterInfo}`}\n key={value}\n value={value}\n />\n );\n })}\n </Tabs>\n {clonedChildren}\n </Paper>\n );\n});\n\nTabsPanel.defaultProps = {\n variant: 'default',\n onChange: undefined,\n hasShadow: '',\n lazy: true,\n};\n\nTabsPanel.propTypes = {\n children: PropTypes.oneOfType([\n PropTypes.arrayOf(PropTypes.node.isRequired),\n PropTypes.node.isRequired,\n ]).isRequired,\n active: PropTypes.string.isRequired,\n onChange: PropTypes.func,\n variant: PropTypes.oneOf(['default', 'chip', 'scrollable']),\n hasShadow: PropTypes.string,\n lazy: PropTypes.bool,\n};\n\nexport default TabsPanel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\nconst TabPanel = ({ children, value, index, ...props }) => (\n <div hidden={value !== index} {...props}>\n {value === index && children}\n </div>\n);\n\nTabPanel.propTypes = {\n children: PropTypes.node.isRequired,\n index: PropTypes.any.isRequired,\n value: PropTypes.any.isRequired,\n};\n\nexport default TabPanel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Chip from '@mui/material/Chip';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n padding: theme.spacing(2),\n },\n tag: {\n marginBottom: theme.spacing(2),\n },\n title: {\n marginBottom: theme.spacing(1),\n },\n}));\n\nconst Tags = ({ tags }) => {\n const classes = useStyles();\n\n return (\n <Paper className={classes.root}>\n {tags.map(({ title, list }) => (\n <div className={classes.tag} key={title}>\n <Typography variat=\"h5\" className={classes.title}>\n {title}\n </Typography>\n <Grid container spacing={2}>\n {list.map(item => (\n <Grid item key={item}>\n <Chip label={item} />\n </Grid>\n ))}\n </Grid>\n </div>\n ))}\n </Paper>\n );\n};\n\nTags.propTypes = {\n tags: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string.isRequired,\n list: PropTypes.arrayOf(PropTypes.string.isRequired).isRequired,\n }).isRequired,\n ).isRequired,\n};\n\nexport default Tags;\n","import React from 'react';\nimport Editor from 'react-quill';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { makeStyles } from '@mui/styles';\nimport { red } from '@mui/material/colors';\n\nimport 'react-quill/dist/quill.snow.css';\n\nconst modules = {\n toolbar: [\n ['bold', 'italic', 'underline', 'strike', 'blockquote'],\n [{ list: 'ordered' }, { list: 'bullet' }],\n ],\n clipboard: {\n matchVisual: false,\n },\n};\n\nconst formats = ['bold', 'italic', 'underline', 'strike', 'blockquote', 'list', 'bullet', 'indent'];\n\nconst useStyles = makeStyles(theme => ({\n root: {\n '& .ql-editor': {\n minHeight: 150,\n fontSize: '1rem',\n fontFamily: theme.typography.fontFamily,\n },\n '& .ql-blank::before': {\n fontSize: '1rem',\n fontStyle: 'normal',\n fontFamily: theme.typography.fontFamily,\n },\n },\n error: {\n '& .ql-toolbar': {\n borderColor: red[500],\n },\n '& .ql-container': {\n borderColor: red[500],\n },\n '& .ql-blank::before': {\n color: red[500],\n },\n },\n inactive: {\n pointerEvents: 'none',\n cursor: 'default',\n opacity: 0.6,\n },\n}));\n\nconst TextEditor = ({ className, value, onChange, error, placeholder, disabled }) => {\n const classes = useStyles();\n\n // When we type something and delete all the text, it holds an empty tags (\"<p><br></p>\") so we should fix it\n const handleChange = newValue => (newValue === '<p><br></p>' ? onChange('') : onChange(newValue));\n\n return (\n <Editor\n className={clsx({\n [classes.root]: true,\n [classes.error]: error,\n [classes.inactive]: disabled,\n [className]: Boolean(className),\n })}\n value={value}\n onChange={handleChange}\n modules={modules}\n formats={formats}\n placeholder={placeholder}\n theme=\"snow\"\n />\n );\n};\n\nTextEditor.defaultProps = {\n className: '',\n value: '',\n error: false,\n placeholder: '',\n disabled: false,\n};\n\nTextEditor.propTypes = {\n className: PropTypes.string,\n value: PropTypes.string,\n onChange: PropTypes.func.isRequired,\n error: PropTypes.bool,\n placeholder: PropTypes.string,\n disabled: PropTypes.bool,\n};\n\nexport default TextEditor;\n","import React, { FC, ReactElement } from 'react';\nimport clsx from 'clsx';\nimport Typography from '@mui/material/Typography';\nimport { grey } from '@mui/material/colors';\n\nimport { InfoTooltip } from 'ui';\nimport { BaseProps } from 'shared/types/base';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { Theme } from '@mui/material';\n\nconst alignOptions = {\n left: 'left',\n right: 'right',\n center: 'center',\n};\n\ntype TitleProps = {\n bottomLine?: boolean;\n tooltip?: ReactElement | string;\n tooltipClassName?: string;\n align?: keyof typeof alignOptions;\n inline?: boolean;\n} & BaseProps;\n\nconst useStyles = makeStyles((theme: Theme) => ({\n root: {\n color: theme.palette.primary.main,\n paddingBottom: theme.spacing(1),\n fontWeight: 500,\n display: 'flex',\n alignItems: 'center',\n },\n alignLeft: {\n justifyContent: 'flex-start',\n },\n alignRight: {\n justifyContent: 'flex-end',\n },\n alignCenter: {\n justifyContent: 'center',\n },\n bottomLine: {\n borderBottom: `1px solid ${grey[200]}`,\n },\n tooltipIcon: {\n marginLeft: theme.spacing(1),\n },\n inline: {\n display: 'inline',\n }\n}));\n\nconst Title: FC<TitleProps> = ({\n bottomLine,\n tooltip = '',\n children,\n align = alignOptions.left,\n className,\n tooltipClassName,\n inline,\n}) => {\n const classes = useStyles();\n const rootClassNames = clsx(classes.root, className, {\n [classes.bottomLine]: bottomLine,\n [classes.alignLeft]: align === alignOptions.left,\n [classes.alignRight]: align === alignOptions.right,\n [classes.alignCenter]: align === alignOptions.center,\n [classes.inline]: inline === true,\n });\n\n return (\n <Typography variant=\"body1\" className={rootClassNames}>\n {children}\n {tooltip ? (\n <InfoTooltip title={tooltip} iconClassName={clsx(classes.tooltipIcon, tooltipClassName)} />\n ) : null}\n </Typography>\n );\n};\n\nexport default Title;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { grey } from '@mui/material/colors';\nimport { Box } from '@mui/material';\n\nconst useStyles = makeStyles(theme => ({\n triangle: {\n width: 0,\n height: 0,\n borderStyle: 'solid',\n borderColor: `transparent transparent ${grey[400]} transparent`,\n margin: '10px auto',\n\n '&:after': {\n content: '\"\"',\n display: 'block',\n width: 0,\n height: 0,\n borderStyle: 'solid',\n borderColor: `transparent transparent ${theme.palette.custom.white} transparent`,\n transform: 'translate(-50%, 16%)',\n },\n },\n top: {\n transform: 'rotate(0deg)',\n },\n right: {\n transform: 'rotate(90deg)',\n },\n bottom: {\n transform: 'rotate(180deg)',\n\n '&:after': {\n borderBottomWidth: '35px !important',\n },\n },\n left: {\n transform: 'rotate(270deg)',\n\n '&:after': {\n borderBottomWidth: '35px !important',\n },\n },\n small: {\n borderWidth: '0 12px 20.8px 12px',\n\n '&:after': {\n borderWidth: '0 10px 17px 10px',\n },\n },\n large: {\n borderWidth: '0 25px 43.3px 25px',\n\n '&:after': {\n borderWidth: '0 21px 36px 21px',\n },\n },\n}));\n\nconst Triangle = ({ variant, size, className }) => {\n const classes = useStyles();\n\n return <Box className={clsx([classes.triangle, classes[size], classes[variant], className])} />;\n};\n\nTriangle.defaultProps = {\n className: '',\n variant: 'top',\n size: 'large',\n};\n\nTriangle.propTypes = {\n className: PropTypes.string,\n variant: PropTypes.oneOf(['top', 'right', 'bottom', 'left']),\n size: PropTypes.oneOf(['small', 'large']),\n};\n\nexport default Triangle;\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Menu from '@mui/material/Menu';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport { makeStyles } from '@mui/styles';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\nimport { BaseProps } from 'shared/types/base';\nimport { CustomToolbarItem } from 'shared/types/customToolbar';\nimport { Theme, Tooltip } from '@mui/material';\nimport { ConfirmModal } from 'modules/common/Modals/ConfirmModal';\nimport { Box } from '@scope/scope-one-ui/core';\n\ntype CustomToolbarProps = {\n menuItems?: CustomToolbarItem[];\n onApplySearchFiltersClick?: () => void;\n onApplyFiltersClick?: () => void;\n onCustomButtonClick?: () => void;\n isFiltered?: boolean;\n showFilters: boolean;\n showSearchFilters?: boolean;\n customButtonLabel?: string;\n popoverFilters?: JSX.Element;\n} & BaseProps;\n\nconst useStyle = makeStyles((theme: Theme) => ({\n container: {\n '&, button': {\n lineHeight: 1.2,\n },\n },\n button: {\n '&:not(:first-child)': {\n marginLeft: theme.spacing(1),\n },\n },\n}));\n\nconst CustomToolbar: FC<CustomToolbarProps> = ({\n menuItems,\n onApplyFiltersClick,\n onApplySearchFiltersClick,\n onCustomButtonClick,\n isFiltered = false,\n showFilters,\n showSearchFilters = false,\n customButtonLabel,\n popoverFilters,\n}) => {\n const classes = useStyle();\n const { t } = useTranslation();\n const [menuAnchorEl, setMenuAnchorEl] = useState(null);\n const [itemForConfirm, setItemForConfirm] = useState<CustomToolbarItem | null>(null);\n\n const clearItemForConfirm = () =>\n /* Leaving `confirmation` to make sure title and text won't dissaper before the animation */\n setItemForConfirm((prev) => ({ confirmation: prev?.confirmation } as CustomToolbarItem));\n\n const menuOpen = Boolean(menuAnchorEl);\n\n const handleMenuClick = ({ currentTarget }: any) => {\n setMenuAnchorEl(currentTarget);\n };\n\n const handleMenuClose = () => {\n setMenuAnchorEl(null);\n };\n\n const handleMenuItemClick = (item: CustomToolbarItem) => {\n handleMenuClose();\n\n if (item.confirmation) {\n return setItemForConfirm(item);\n }\n\n if (item && item.handler) {\n return item.data ? item.handler(item.data) : item.handler();\n }\n\n return null;\n };\n\n const onConfirm = () => {\n const { handler, data } = itemForConfirm!;\n\n if (data) {\n handler(data);\n } else {\n handler();\n }\n\n clearItemForConfirm();\n };\n\n const visibleMenuItems = menuItems\n ? menuItems.filter((item: CustomToolbarItem) => !item.hidden)\n : [];\n\n return (\n <Box display=\"flex\" className={classes.container}>\n {popoverFilters}\n {onApplySearchFiltersClick && showSearchFilters && (\n <Button\n className={classes.button}\n size=\"small\"\n variant={isFiltered ? 'contained' : 'outlined'}\n color={isFiltered ? 'primary' : undefined}\n onClick={onApplySearchFiltersClick}\n >\n {t('Refine your search')}\n </Button>\n )}\n {onApplyFiltersClick && showFilters && (\n <Button\n className={classes.button}\n size=\"small\"\n variant={isFiltered ? 'contained' : 'outlined'}\n color={isFiltered ? 'primary' : undefined}\n onClick={onApplyFiltersClick}\n >\n {isFiltered ? t('Change filters') : t('Apply filters')}\n </Button>\n )}\n {onCustomButtonClick && customButtonLabel && (\n <Button\n className={classes.button}\n size=\"small\"\n variant={isFiltered ? 'contained' : 'outlined'}\n color={isFiltered ? 'primary' : undefined}\n onClick={onCustomButtonClick}\n >\n {customButtonLabel}\n </Button>\n )}\n {visibleMenuItems.length > 0 && (\n <>\n <Button\n className={classes.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={\n visibleMenuItems.length === 1\n ? () => handleMenuItemClick(visibleMenuItems[0])\n : handleMenuClick\n }\n endIcon={\n visibleMenuItems.length > 1 &&\n (menuOpen ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />)\n }\n disabled={visibleMenuItems.length === 1 ? visibleMenuItems[0].disabled : false}\n >\n {t(visibleMenuItems.length === 1 ? visibleMenuItems[0].text : 'More actions')}\n </Button>\n <Menu\n anchorEl={menuAnchorEl}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'center',\n }}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n open={menuOpen}\n onClose={handleMenuClose}\n >\n {visibleMenuItems.map((menuItem) => (\n <Tooltip title={menuItem.tooltip || ''} placement=\"top\" key={menuItem.text}>\n <span>\n <MenuItem\n onClick={() => handleMenuItemClick(menuItem)}\n disabled={menuItem.disabled}\n style={{ color: menuItem.color }}\n >\n {t(menuItem.text)}\n </MenuItem>\n </span>\n </Tooltip>\n ))}\n </Menu>\n </>\n )}\n <ConfirmModal\n open={!!itemForConfirm?.handler}\n onClose={clearItemForConfirm}\n onSuccess={onConfirm}\n title={itemForConfirm?.confirmation?.title!}\n text={itemForConfirm?.confirmation?.text!}\n />\n </Box>\n );\n};\n\nexport default CustomToolbar;\n","import styled from 'styled-components';\n\nexport const DatatableStyledWrapper = styled.div`\n th,\n td {\n z-index: 1;\n }\n`;\n","import React, { FC, useEffect, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport MUIDataTable, {\n MUIDataTableOptions,\n MUIDataTableBodyCell,\n MUIDataTableState,\n MUIDataTableColumnDef,\n} from 'mui-datatables';\nimport { makeStyles } from '@mui/styles';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport Typography from '@mui/material/Typography';\nimport castArray from 'lodash/castArray';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { CustomToolbarItem } from 'shared/types/customToolbar';\nimport { Loader } from 'ui';\n\nimport { theme } from 'theme';\nimport { Box, Button } from '@mui/material';\nimport CustomToolbar from './CustomToolbar/CustomToolbar';\nimport { DatatableStyledWrapper } from './Datatable.styled';\n\nconst useStyle = makeStyles({\n container: {\n position: 'relative',\n },\n toolbarWrapper: {\n display: 'flex',\n justifyContent: 'space-between',\n padding: theme.spacing(0, 2),\n alignItems: 'center',\n position: 'absolute',\n right: theme.spacing(0),\n top: theme.spacing(1),\n height: theme.spacing(8),\n zIndex: 1,\n },\n toolbarWrapperWithLeftMenu: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n position: 'relative',\n padding: theme.spacing(0, 2, 0, 0),\n width: '100%',\n height: theme.spacing(8),\n backgroundColor: theme.palette.background.default,\n zIndex: 1,\n },\n selectAllButton: {\n marginLeft: theme.spacing(4),\n },\n rightToolbarWrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\ntype DatatablePagination = {\n page: number;\n limit: number;\n};\n\ntype DatatableData = object | string[] | number[];\n\ntype ShouldRefreshData = {\n value: boolean;\n reason: string | null;\n};\n\ntype DatatableProps = {\n columns: MUIDataTableColumnDef[];\n pagination?: DatatablePagination;\n loading: boolean;\n total: number;\n data: DatatableData[];\n onSelectedChange?: (items: DatatableItemsData) => void;\n onTableChange: (tableState: MUIDataTableState) => void;\n onSortChange: (changedColumn: string, direction: string) => void;\n onApplyFiltersClick?: () => void;\n onApplySearchFiltersClick?: () => void;\n onCustomButtonClick?: () => void;\n onPopoverFiltersClick?: () => void;\n customButtonLabel?: string;\n isFiltered?: boolean;\n removeShadow?: boolean;\n disableSort?: boolean;\n toolbarData?: CustomToolbarItem[];\n shouldRefresh?: ShouldRefreshData;\n customTextLabels?: Record<string, string>;\n showFilters?: boolean;\n showSearchFilters?: boolean;\n setRowProps?: (row: any[], rowIndex: number) => object;\n title?: JSX.Element;\n showSelectionExtension?: boolean;\n onSelectAllClick?: () => void;\n selectedAll?: boolean;\n selectableRows?: boolean;\n notSelectableRows?: number[];\n selectableRowsHeader?: boolean;\n leftToolbar?: JSX.Element | Boolean;\n tableToolbar?: JSX.Element | Boolean;\n requestCounter?: JSX.Element;\n showPopoverFilters?: boolean;\n popoverFilters?: JSX.Element;\n filterChips?: JSX.Element;\n skipHeader?: boolean;\n rowsPerPageOptions?: Array<number>;\n};\n\nexport type DatatableItemsData = {\n itemIds: Record<string, string>;\n count: number;\n items: Record<string, string | any[]>;\n};\n\nconst Datatable: FC<DatatableProps> = ({\n loading = false,\n columns,\n pagination = {\n page: 1,\n limit: 25,\n },\n total = 0,\n data,\n onSelectedChange,\n onTableChange,\n onSortChange,\n onApplyFiltersClick,\n onApplySearchFiltersClick,\n onCustomButtonClick,\n customButtonLabel,\n isFiltered = false,\n removeShadow = false,\n disableSort = false,\n toolbarData,\n shouldRefresh = { value: false, reason: null },\n customTextLabels,\n showFilters = true,\n showSearchFilters = false,\n setRowProps,\n title,\n showSelectionExtension = false,\n onSelectAllClick = () => null,\n selectedAll = false,\n selectableRows = true,\n notSelectableRows,\n selectableRowsHeader = true,\n leftToolbar,\n tableToolbar,\n requestCounter,\n popoverFilters,\n filterChips,\n skipHeader = false,\n rowsPerPageOptions = [25, 50, 100, 200],\n}) => {\n const { t } = useTranslation();\n const classes = useStyle();\n\n const isRowSelectable = (params: number) =>\n notSelectableRows ? notSelectableRows.indexOf(params) === -1 : true;\n\n const selected = useRef<DatatableItemsData>({ itemIds: {}, count: 0, items: {} });\n\n const getTableChanges = (action: string) => ['changeRowsPerPage', 'changePage'].includes(action);\n\n const setSelected = (newSelected: DatatableItemsData) => {\n selected.current = newSelected;\n if (onSelectedChange) onSelectedChange(selected.current);\n };\n\n const resetSelected = () => {\n setSelected({ itemIds: {}, count: 0, items: {} });\n };\n\n const selectAllItems = () => {\n const newSelectedItemsIds: Record<string, string> = {};\n const newSelectedItems: Record<string, string | any[]> = {};\n data.forEach((_, index) => {\n const itemData = data[index];\n if (Array.isArray(itemData)) {\n const itemId = (itemData as any[])[0];\n newSelectedItemsIds[itemId] = itemId;\n newSelectedItems[itemId] = itemData;\n }\n });\n setSelected({ itemIds: newSelectedItemsIds, count: data.length, items: newSelectedItems });\n };\n\n useEffect(() => {\n if (\n shouldRefresh.value &&\n shouldRefresh.reason &&\n [\n refreshReasons.DELETED,\n refreshReasons.FILTERS_APPLIED,\n refreshReasons.UPDATED,\n refreshReasons.MOVED,\n ].includes(shouldRefresh.reason)\n ) {\n resetSelected();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldRefresh]);\n\n useEffect(() => {\n if (data.length && selectedAll) {\n selectAllItems();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n const getMuiTheme = () => ({\n components: {\n MuiTableRow: {\n styleOverrides: {\n root: {\n '&$selected': {\n backgroundColor: `${theme.palette.custom.lightBlue} !important`,\n },\n },\n },\n },\n MUIDataTable: {\n styleOverrides: {\n paper: {\n boxShadow: removeShadow && 'none',\n },\n },\n },\n MUIDataTableToolbar: {\n styleOverrides: {\n actions: {\n display: 'flex',\n flexDirection: 'row-reverse',\n alignItems: 'center',\n },\n },\n },\n MUIDataTableToolbarSelect: {\n styleOverrides: {\n root: {\n height: 64,\n },\n title: {\n paddingLeft: 0,\n },\n },\n },\n MuiTableSortLabel: {\n styleOverrides: {\n iconDirectionDesc: {\n marginTop: 10,\n transform: 'rotate(180deg)',\n },\n iconDirectionAsc: {\n marginTop: 10,\n transform: 'rotate(0)',\n },\n },\n },\n MUIDataTableHeadCell: {\n styleOverrides: {\n hintIconWithSortIcon: {\n marginTop: 3,\n fontSize: 16,\n marginLeft: 0,\n color: theme.palette.primary.main,\n },\n fixedHeader: {\n zIndex: 1,\n },\n hintIconAlone: {\n marginTop: 3,\n fontSize: 16,\n marginLeft: 8,\n color: theme.palette.primary.main,\n },\n },\n },\n MUIDataTableSelectCell: {\n styleOverrides: {\n headerCell: {\n zIndex: 1,\n },\n fixedLeft: {\n zIndex: 1,\n },\n },\n },\n },\n });\n\n // MUI Datatables library doesn't allow objects passing as columns data so we have to rely on arrays.\n // Sometimes data providers (entities, instruments, portfolioss, etc.) put single id element in a column, sometimes\n // they put it in an array along with other necessary properties, so we want to ensure that they are arrays here,\n // just for unification.\n const getId = ([element]: any[]): string => castArray(element)[0];\n\n const toggleElement = (element: any[]) => {\n const id = getId(element);\n\n const { current } = selected;\n if (current.itemIds[id]) {\n delete current.itemIds[id];\n current.count -= 1;\n delete current.items[id];\n } else {\n current.itemIds[id] = id as string;\n current.count += 1;\n current.items[id] = element;\n }\n setSelected(current);\n };\n\n const onRowSelectionChange = (currentRowsSelected: MUIDataTableBodyCell[]) => {\n if (currentRowsSelected.length === 0) {\n resetSelected();\n } else {\n currentRowsSelected.forEach(({ dataIndex }) => {\n if (dataIndex !== undefined && Array.isArray(data[dataIndex])) {\n toggleElement(data[dataIndex] as any[]);\n }\n });\n }\n };\n\n const rowsSelected = data\n .map((element, index) => {\n return (\n (selectedAll && Array.isArray(element)\n ? true\n : selected.current.itemIds[getId(element as any[])]) && index\n );\n })\n .filter((item) => typeof item === 'number');\n\n const selectElementLabel =\n selected.current.count > 0 &&\n `${selectedAll ? total : selected.current.count} ${t('row(s) selected')}`;\n\n const tableTitle = selectElementLabel || title;\n\n const options: MUIDataTableOptions = {\n page: pagination.page || 0,\n rowsPerPage: pagination.limit || 25,\n rowsPerPageOptions,\n serverSide: true,\n print: false,\n download: false,\n filter: false,\n search: false,\n textLabels: customTextLabels,\n selectableRowsHeader,\n onRowsDelete: undefined,\n rowsSelected,\n onRowSelectionChange,\n selectToolbarPlacement: 'none',\n onColumnSortChange: onSortChange,\n onTableChange: (action, tableState) => getTableChanges(action) && onTableChange(tableState),\n viewColumns: false, // TODO: Enable when user profile feature allows to remember selected settings\n count: total,\n ...(disableSort && { sort: false }),\n ...(setRowProps && { setRowProps }),\n selectableRows: selectableRows ? 'multiple' : 'none',\n isRowSelectable,\n };\n\n const selectionExtension =\n showSelectionExtension && !selectedAll && selected.current.count === pagination.limit ? (\n <Button\n variant=\"text\"\n size=\"small\"\n onClick={onSelectAllClick}\n className={classes.selectAllButton}\n >\n {t('SELECT_ALL_ITEMS').replace('{0}', String(total))}\n </Button>\n ) : null;\n\n return (\n <div className={classes.container}>\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={getMuiTheme()}>\n {loading && <Loader cover />}\n <div\n className={leftToolbar ? classes.toolbarWrapperWithLeftMenu : classes.toolbarWrapper}\n >\n <div>{!loading && leftToolbar ? leftToolbar : ''}</div>\n <div className={classes.rightToolbarWrapper}>\n {!loading && requestCounter ? requestCounter : ''}\n <CustomToolbar\n menuItems={toolbarData}\n onApplyFiltersClick={onApplyFiltersClick}\n onApplySearchFiltersClick={onApplySearchFiltersClick}\n isFiltered={isFiltered}\n showFilters={showFilters}\n showSearchFilters={showSearchFilters}\n onCustomButtonClick={onCustomButtonClick}\n customButtonLabel={customButtonLabel}\n popoverFilters={popoverFilters}\n />\n </div>\n </div>\n <DatatableStyledWrapper>\n <MUIDataTable\n title={\n !loading && !selectElementLabel && title\n ? tableTitle\n : !skipHeader && (\n <Box>\n {!loading && popoverFilters && filterChips}\n <Box display=\"flex\" alignItems=\"center\">\n <Typography variant=\"body1\">\n {loading ? 'Loading...' : selectElementLabel}\n </Typography>\n {!loading && selectElementLabel ? selectionExtension : null}\n </Box>\n {tableToolbar && <Box display=\"flex\">{tableToolbar}</Box>}\n </Box>\n )\n }\n data={data}\n columns={columns}\n options={options}\n />\n </DatatableStyledWrapper>\n </ThemeProvider>\n </StyledEngineProvider>\n </div>\n );\n};\n\nexport default Datatable;\n","import styled from 'styled-components';\n\nexport const DatatableStyledWrapper = styled.div`\n th,\n td {\n z-index: 1;\n }\n`;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport MUIDataTable from 'mui-datatables';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@mui/styles';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Grid from '@mui/material/Grid';\n\nimport { Loader } from 'ui';\nimport { DatatableStyledWrapper } from './DatatablePreview.styled';\n\nconst useStyles = makeStyles(() => ({\n root: {\n position: 'relative',\n width: '100%',\n },\n}));\n\nconst DatatablePreview = ({ columns, data, loading, onViewAllClick }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const options = {\n pagination: false,\n selectableRows: 'none',\n filter: false,\n search: false,\n download: false,\n print: false,\n viewColumns: false,\n elevation: 0,\n };\n\n return (\n <DatatableStyledWrapper className={classes.root}>\n {loading && <Loader cover />}\n <MUIDataTable columns={columns} data={data} options={options} />\n {onViewAllClick && (\n <Box py={2}>\n <Grid container justifyContent=\"flex-end\">\n <Grid item>\n <Button variant=\"outlined\" onClick={onViewAllClick}>\n {t('View all')}\n </Button>\n </Grid>\n </Grid>\n </Box>\n )}\n </DatatableStyledWrapper>\n );\n};\n\nDatatablePreview.defaultProps = {\n loading: false,\n onViewAllClick: false,\n};\n\nDatatablePreview.propTypes = {\n columns: PropTypes.arrayOf(PropTypes.oneOfType([PropTypes.string, PropTypes.object])).isRequired,\n data: PropTypes.arrayOf(PropTypes.array.isRequired).isRequired,\n loading: PropTypes.bool,\n onViewAllClick: PropTypes.oneOfType([PropTypes.func, PropTypes.bool]),\n};\n\nexport default DatatablePreview;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\n\nimport { BlurWrapper, Loader, ContactAdvisor } from 'ui';\n\nimport { ScoreWidget, ScoreWidgetMainColumn, ScoreWidgetSingleValueColumn } from 'ui/ScoreWidget';\n\nconst useStyles = makeStyles(() => ({\n requestBox: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n height: '100%',\n paddingLeft: '25px',\n paddingRight: '25px',\n whiteSpace: 'break-spaces',\n textAlign: 'center',\n },\n}));\n\nconst RequestRating = ({ onRequest }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <>\n <Typography display=\"block\" className={classes.whiteText}>\n {t(\n 'The assessment is available after request. Depending on your license, the request might be subject to charge.',\n )}\n </Typography>\n <Box mt={1}>\n <Button variant=\"contained\" size=\"small\" color=\"primary\" onClick={onRequest}>\n {t('Request')}\n </Button>\n </Box>\n </>\n );\n};\n\nRequestRating.propTypes = {\n onRequest: PropTypes.func.isRequired,\n};\n\nconst BlurredContactAdvisorBox = ({ isPending, handleRatingRequest, contactAdvisor, active }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n const content = handleRatingRequest ? (\n <RequestRating onRequest={handleRatingRequest} />\n ) : (\n <ContactAdvisor>{contactAdvisor}</ContactAdvisor>\n );\n\n return (\n <>\n <BlurWrapper\n content={\n active ? (\n <div className={classes.requestBox}>{isPending ? <Loader /> : content}</div>\n ) : null\n }\n >\n <ScoreWidget>\n <ScoreWidgetMainColumn\n label={t('Score')}\n value={t('Score')}\n footer={t(`1 year PD`)}\n footerColor=\"white\"\n />\n <ScoreWidgetSingleValueColumn\n label={t('Country Risk Assessment')}\n value={t('Country Risk Assessment')}\n />\n <ScoreWidgetSingleValueColumn\n label={t('Business Climate')}\n value={t('Business Climate')}\n />\n <ScoreWidgetSingleValueColumn\n label={t('Industry Risk Level')}\n value={t('Industry Risk Level')}\n />\n <ScoreWidgetSingleValueColumn\n label={t('Credit review date')}\n value={t('Credit review date')}\n last\n />\n </ScoreWidget>\n </BlurWrapper>\n </>\n );\n};\n\nBlurredContactAdvisorBox.defaultProps = {\n isPending: false,\n handleRatingRequest: null,\n contactAdvisor: '',\n active: true,\n};\n\nBlurredContactAdvisorBox.propTypes = {\n isPending: PropTypes.bool,\n handleRatingRequest: PropTypes.func,\n contactAdvisor: PropTypes.node,\n active: PropTypes.bool,\n};\n\nexport default BlurredContactAdvisorBox;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { useContactAdvisor } from 'shared/hooks';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport EmailIcon from '@mui/icons-material/Email';\nimport Typography from '@mui/material/Typography';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles(theme => ({\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n}));\n\nconst Contact = ({ toggleMessageModal, children }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <>\n {children}\n <Box mt={2}>\n <Button onClick={toggleMessageModal} variant=\"contained\" size=\"small\" color=\"primary\">\n <EmailIcon className={classes.buttonIcon} />\n {t('Message')}\n </Button>\n </Box>\n </>\n );\n};\n\nContact.propTypes = {\n toggleMessageModal: PropTypes.func.isRequired,\n children: PropTypes.node.isRequired,\n};\n\nconst ContactAdvisorDone = () => {\n const { t } = useTranslation();\n\n return (\n <>\n <Typography display=\"block\">{t('Your score request has been initiated.')}</Typography>\n <Typography display=\"block\">\n {t('You will be notified further on its availability.')}\n </Typography>\n </>\n );\n};\n\nconst ContactAdvisor = ({ children }) => {\n const [messageSent, toggleMessageModal, RenderModal] = useContactAdvisor();\n\n return !messageSent ? (\n <>\n <Contact toggleMessageModal={toggleMessageModal}>{children}</Contact>\n <RenderModal />\n </>\n ) : (\n <ContactAdvisorDone />\n );\n};\n\nContactAdvisor.defaultProps = {\n children: undefined,\n};\n\nContactAdvisor.propTypes = {\n children: PropTypes.node,\n};\n\nexport default ContactAdvisor;\n","import { Box, Chip, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport React, { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { RangeSlider } from 'ui';\nimport { theme } from 'theme';\n\ntype RangeSliderExtendedProps = {\n onChange: (newValues: any) => void;\n label: string;\n values: RangeFilter | (string | number)[];\n options: {\n label: string;\n value: any;\n }[];\n};\n\ntype RangeFilter = {\n fromRange?: string | number | null;\n toRange?: string | number | null;\n emptyValues?: boolean;\n};\n\nconst useStyles = makeStyles(() => ({\n chipStyles: {\n width: '49%',\n fontWeight: 500,\n height: theme.spacing(3),\n },\n noRangeLine: {\n width: '100%',\n height: '2px',\n display: 'block',\n opacity: 0.38,\n borderRadius: '1px',\n backgroundColor: 'currentColor',\n },\n noRangeLineWrapper: {\n padding: '13px 0px',\n height: 53.02,\n },\n}));\n\nexport const RangeSliderExtended: FC<RangeSliderExtendedProps> = ({\n onChange,\n label,\n options,\n values,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const { fromRange, toRange, emptyValues } = values as RangeFilter;\n\n const [rangeActive, setRangeActive] = useState<boolean>(\n (!!fromRange || !!toRange || !emptyValues) ?? true,\n );\n\n const [noValueActive, setNoValueActive] = useState<boolean>(\n ((values as RangeFilter).emptyValues as boolean) ?? true,\n );\n\n // eslint-disable-next-line consistent-return\n const rangeSliderValueParser = (data: any) => {\n if (data.fromRange !== null && data.fromRange !== undefined) {\n if (fromRange !== undefined && toRange !== undefined) {\n return [fromRange, toRange];\n }\n if (!fromRange) {\n return [options[0].value, options[options.length - 1].value];\n }\n }\n if (!data.fromRange) {\n return [options[0].value, options[options.length - 1].value];\n }\n return data as (string | number)[];\n };\n\n const valuesParsed = rangeSliderValueParser(values);\n const handleChange = (_event: EventTarget, newValues: any) =>\n onChange({\n fromRange: newValues[0],\n toRange: newValues[1],\n emptyValues: noValueActive,\n });\n\n useEffect(() => {\n if (values && (values as string[]).length) {\n setNoValueActive(true);\n setRangeActive(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [values]);\n\n useEffect(() => {\n if (!rangeActive && !noValueActive) {\n chipButtonHandler('rangeActive', true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rangeActive, noValueActive]);\n\n const chipButtonHandler = (variant: 'rangeActive' | 'noValueActive', value: boolean) => {\n let isRangeActive: boolean = rangeActive;\n let isNoValueActive: boolean = noValueActive;\n if (variant === 'rangeActive') {\n isRangeActive = value;\n setRangeActive(value);\n }\n if (variant === 'noValueActive') {\n isNoValueActive = value;\n setNoValueActive(value);\n }\n\n onChange(\n isRangeActive\n ? ({\n fromRange: fromRange ?? valuesParsed[0],\n toRange: toRange ?? valuesParsed[1],\n emptyValues: isNoValueActive,\n } as RangeFilter)\n : ({\n emptyValues: isNoValueActive,\n } as RangeFilter),\n );\n };\n\n return (\n <Box mt={2}>\n <Typography gutterBottom>{label}</Typography>\n <Box display=\"flex\" justifyContent=\"space-between\" width=\"80\" mb={2}>\n <Chip\n label={t('RANGE')}\n className={classes.chipStyles}\n clickable\n color={rangeActive ? 'primary' : undefined}\n onClick={() => chipButtonHandler('rangeActive', !rangeActive)}\n />\n <Chip\n label={t('NO_VALUE')}\n className={classes.chipStyles}\n clickable\n color={noValueActive ? 'primary' : undefined}\n onClick={() => chipButtonHandler('noValueActive', !noValueActive)}\n />\n </Box>\n {!rangeActive && noValueActive ? (\n <div className={classes.noRangeLineWrapper}>\n <div className={classes.noRangeLine} />\n </div>\n ) : (\n <div>\n <RangeSlider\n alignSliderToLabel\n options={options}\n values={valuesParsed}\n onChange={handleChange}\n />\n </div>\n )}\n </Box>\n );\n};\n","/* eslint-disable no-return-assign */\nimport React, { FC } from 'react';\nimport { Box, TextField, Typography } from '@mui/material';\n\nimport makeStyles from '@mui/styles/makeStyles';\nimport {InitialFilterRangeValue} from \"../../modules/common/PortfolioManager/types\";\n\ntype FieldRangeProps = {\n onChange: (newValues: FieldRange) => void;\n values: FieldRange | ValueType[];\n label: string;\n rangeLimit: InitialFilterRangeValue\n};\n\ntype FieldRange = {\n fromRange?: ValueType;\n toRange?: ValueType;\n};\n\ntype ValueType = string | number | null;\n\nconst useStyles = makeStyles(() => ({\n inputField: {\n width: '48%',\n },\n}));\n\nexport const FieldRange: FC<FieldRangeProps> = ({ onChange, values, label, rangeLimit }) => {\n const classes = useStyles();\n const { minimum: min, maximum: max } = rangeLimit\n\n const fieldProps = {\n inputProps: {\n max, min\n }\n }\n\n const initialValueParser = (data: any) => {\n if (data.fromRange !== null && data.fromRange !== undefined) {\n const { fromRange, toRange } = values as FieldRange;\n if (fromRange !== undefined && toRange !== undefined) {\n return [fromRange, toRange];\n }\n }\n return data as (string | number)[];\n };\n\n const [value1, value2] = initialValueParser(values);\n\n const validateOnChange = (initialValue, variant) => {\n let value = Number(initialValue)\n if (min === null || max === null || value1 === null || value2 === null) return value\n if (variant === 'min') {\n if (value > value2) value = value2 as number;\n if (value < min) value = min;\n }\n if (variant === 'max') {\n if (value > max) value = max;\n if (value < value1) value = value1 as number;\n }\n return value\n }\n\n return (\n <>\n <Typography>{label}</Typography>\n <Box display=\"flex\" alignItems=\"center\" width=\"100%\" justifyContent=\"space-between\" pb={3}>\n <TextField\n className={classes.inputField}\n value={value1}\n type='number'\n InputProps={fieldProps}\n onChange={e => onChange({ fromRange: validateOnChange(e.target.value, 'min'), toRange: value2 })}\n />\n -\n <TextField\n className={classes.inputField}\n value={value2}\n type='number'\n InputProps={fieldProps}\n onChange={e => onChange({ fromRange: value1, toRange: validateOnChange(e.target.value, 'max') })}\n />\n </Box>\n </>\n );\n};\n","import { styled, Switch } from '@mui/material';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { theme } from '../../theme';\n\nexport const StyledSwitch = styled(Switch)(() => ({\n width: 37,\n height: 21,\n padding: 0,\n '& .MuiSwitch-switchBase': {\n padding: 0,\n margin: 1,\n transitionDuration: '300ms',\n color: '#fff',\n '&.Mui-checked': {\n transform: 'translateX(16px)',\n color: '#fff',\n '& + .MuiSwitch-track': {\n backgroundColor: COLORS.success.main,\n opacity: 1,\n border: 0,\n },\n '&.Mui-disabled + .MuiSwitch-track': {\n opacity: 0.5,\n },\n },\n '&.Mui-focusVisible .MuiSwitch-thumb': {\n color: COLORS.success.main,\n border: '6px solid #fff',\n },\n '&.Mui-disabled .MuiSwitch-thumb': {\n color: theme.palette.grey[500],\n },\n '&.Mui-disabled + .MuiSwitch-track': {\n opacity: 0.7,\n },\n },\n '& .MuiSwitch-thumb': {\n boxSizing: 'border-box',\n width: 19,\n height: 19,\n },\n '& .MuiSwitch-track': {\n borderRadius: 20 / 2,\n backgroundColor: '#E9E9EA',\n opacity: 1,\n transition: theme.transitions.create(['background-color'], {\n duration: 500,\n }),\n },\n}));\n","import React, { FC } from 'react';\nimport styled from 'styled-components';\nimport { theme } from 'theme';\n\nconst letters =\n 'bHzUyQwLtNxJfKmZqLxPyCvOaDdBeFsRhPgWaKiJvVoLlXpAmHtFqGnEpXwZjRsYvUcMpCnVtGzEoSdFkTlWyUqJoBkP';\n\nexport const BlurredText = styled.div`\n user-select: none;\n filter: ${`blur(${theme.spacing(0.75)})`};\n`;\n\nexport type BlurProps = {\n length?: number;\n};\n\nexport const Blur: FC<BlurProps> = ({ length = 10 }) => (\n <BlurredText>{letters.slice(0, length)}</BlurredText>\n);\n","import qs from 'qs';\nimport {\n fetchApi,\n getFetchApiJSONResponse,\n getFetchApiTextResponse,\n catchFetchApiError,\n} from 'shared/functions';\nimport {\n RatingStatuses,\n RatingType,\n ContractType,\n SubscriberConfirmation,\n SubscriptionRatingType,\n} from '../types';\n\nexport const getUsers = async (\n type: SubscriptionRatingType,\n page: number,\n limit: number = 25,\n sort?: { sort: string; dir: string },\n searched?: string,\n) => {\n const params = {\n page,\n limit,\n sort: sort?.sort,\n dir: sort?.dir,\n ...(searched && searched.length >= 3 && { name: searched }),\n };\n\n return fetchApi(\n `/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/users?${qs.stringify(\n params,\n )}`,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const filterUsers = async (email: string) => {\n return fetchApi(`/storefront/users?${qs.stringify({ email })}`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const getRatings = async (\n type: SubscriptionRatingType,\n page: number,\n limit: number = 25,\n sort?: { sort: string; dir: string },\n searched?: string,\n) => {\n const params = {\n page,\n limit,\n sort: sort?.sort,\n dir: sort?.dir,\n ...(searched && searched.length >= 3 && { name: searched }),\n };\n\n return fetchApi(\n `/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}?${qs.stringify(params)}`,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const getRating = async (type: SubscriptionRatingType, ratingId: string) => {\n return fetchApi(`/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/${ratingId}`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const getRatingUsers = async (\n type: SubscriptionRatingType,\n ratingId: string,\n page: number,\n limit: number = 25,\n sort?: { sort: string; dir: string },\n searched?: string,\n) => {\n const params = {\n page,\n limit,\n sort: sort?.sort,\n dir: sort?.dir,\n ...(searched && searched.length >= 3 && { name: searched }),\n };\n\n return fetchApi(\n `/storefront/ratings/${\n type === 'rsr' ? 'restricted' : 'private'\n }/${ratingId}/users?${qs.stringify(params)}`,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const getUserRatingStatusLog = async (\n type: SubscriptionRatingType,\n userId: string,\n ratingId: string,\n page: number,\n limit: number = 25,\n) => {\n const params = {\n page: page + 1,\n limit,\n };\n\n return fetchApi(\n `/storefront/ratings/${\n type === 'rsr' ? 'restricted' : 'private'\n }/audit/${ratingId}/${userId}?${qs.stringify(params)}`,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const setRatingContractType = async (\n type: SubscriptionRatingType,\n entityIds: [string],\n contractType: ContractType,\n) => {\n return fetchApi(\n `/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/entities/contract-type`,\n {\n method: 'POST',\n body: JSON.stringify({\n entityIds,\n contractType,\n }),\n },\n ).catch(catchFetchApiError);\n};\n\nexport const requestRating = async (rsrId: string) =>\n fetchApi(`/storefront/ratings/restricted/${rsrId}/request`, {\n method: 'POST',\n }).catch(catchFetchApiError);\n\nexport const setSubscriberConfirmation = async (\n organizationIds: [string],\n confirmation: SubscriberConfirmation,\n) => {\n return fetchApi(`/storefront/subscriber_confirmation?confirmation=${confirmation}`, {\n method: 'PUT',\n body: JSON.stringify(organizationIds),\n }).catch(catchFetchApiError);\n};\n\nexport const addUser = async (\n type: SubscriptionRatingType,\n email: string,\n ratingIds: Array<{ entityId: string; ratingId: string; entityType: string }>,\n) => {\n const body = {\n email,\n } as { email: string; ratingEntityList?: Array<any> };\n\n if (ratingIds.length) {\n body.ratingEntityList = ratingIds.map((rating) => {\n return { ratingId: rating.ratingId, ratingEntityType: rating.entityType };\n });\n }\n\n return fetchApi(`/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/users/create`, {\n method: 'POST',\n body: JSON.stringify(body),\n })\n .then(getFetchApiTextResponse)\n .catch(catchFetchApiError);\n};\n\nexport const updateUserRatings = async (\n type: SubscriptionRatingType,\n userId: string,\n ratingIds: Array<{ entityId: string; ratingId: string; entityType: string }>,\n) => {\n return fetchApi(\n `/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/assignments/set`,\n {\n method: 'POST',\n body: JSON.stringify([\n {\n userId,\n ratingEntityList: ratingIds.map((rating) => {\n return {\n ratingId: rating.ratingId,\n ratingEntityType: rating.entityType,\n status: RatingStatuses.APPROVED,\n };\n }),\n },\n ]),\n },\n ).catch(catchFetchApiError);\n};\n\nexport const addRatingUsers = async (\n type: SubscriptionRatingType,\n ratingId: string,\n ratingType: RatingType,\n userIds: Array<string>,\n) => {\n const body: any[] = [];\n userIds.forEach((userId) => {\n body.push({\n userId,\n ratingEntityList: [{ ratingId, ratingEntityType: ratingType }],\n });\n });\n return fetchApi(`/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/assignments`, {\n method: 'PUT',\n body: JSON.stringify(body),\n }).catch(catchFetchApiError);\n};\n\nexport const updateRatingUsers = async (\n type: SubscriptionRatingType,\n ratingId: string,\n userIds: Array<string>,\n) => {\n return fetchApi(\n `/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/assignments/updatestatus`,\n {\n method: 'POST',\n body: JSON.stringify({ userIds }),\n },\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const deactivateUsers = async (type: SubscriptionRatingType, userIds: Array<string>) => {\n return fetchApi(\n `/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/users/updatestatus`,\n {\n method: 'POST',\n body: JSON.stringify({ status: RatingStatuses.REVOKED, userIds }),\n },\n ).catch(catchFetchApiError);\n};\n\nexport const deactivateRatings = async (type: SubscriptionRatingType, entityIds: Array<string>) => {\n return fetchApi(\n `/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/entities/updatestatus`,\n {\n method: 'POST',\n body: JSON.stringify({ status: RatingStatuses.REVOKED, entityIds }),\n },\n ).catch(catchFetchApiError);\n};\n\nexport const activateRatingUsers = async (\n type: SubscriptionRatingType,\n ratingId: string,\n ratingType: RatingType,\n userIds: Array<string>,\n) => {\n const body: any[] = [];\n userIds.forEach((userId) => {\n body.push({\n userId,\n ratingEntityList: [\n { ratingId, ratingEntityType: ratingType, status: RatingStatuses.APPROVED },\n ],\n });\n });\n return fetchApi(\n `/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/assignments/updatestatus`,\n {\n method: 'POST',\n body: JSON.stringify(body),\n },\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const deactivateRatingUsers = async (\n type: SubscriptionRatingType,\n ratingId: string,\n ratingType: RatingType,\n userIds: Array<string>,\n) => {\n const body: any[] = [];\n userIds.forEach((userId) => {\n body.push({\n userId,\n ratingEntityList: [\n { ratingId, ratingEntityType: ratingType, status: RatingStatuses.REVOKED },\n ],\n });\n });\n return fetchApi(\n `/storefront/ratings/${type === 'rsr' ? 'restricted' : 'private'}/assignments/updatestatus`,\n {\n method: 'POST',\n body: JSON.stringify(body),\n },\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport { useReportPage } from 'shared/hooks';\nimport { InfoTooltip } from 'ui';\n\nimport { green, grey, red } from '@mui/material/colors';\nimport { theme as colors } from '../../theme';\n\nconst useMainColumnStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n },\n container: {\n height: '100%',\n },\n footerContainer: {\n width: '100%',\n },\n footer: {\n backgroundColor: theme.palette.error.dark,\n },\n valueGridItem: {\n marginTop: 'auto',\n marginBottom: 'auto',\n },\n}));\n\nconst footerColorToHexMap = {\n green,\n white: '#fff',\n red,\n};\n\nexport const ScoreWidgetMainColumn = ({\n label,\n preliminary,\n value,\n suffix,\n footer,\n footerColor,\n className,\n accent,\n}) => {\n const classes = useMainColumnStyles();\n const { orangeAccent } = colors.palette.custom;\n const rootClasses = clsx(classes.root, className);\n return (\n <>\n <Grid item xs className={rootClasses}>\n <Grid\n className={classes.container}\n container\n direction=\"column\"\n align=\"center\"\n justifyContent=\"space-between\"\n >\n <Grid item>\n <Box pt={2}>\n <Typography variant=\"subtitle2\">{label}</Typography>\n </Box>\n </Grid>\n <Grid item className={classes.valueGridItem}>\n <Box>\n <Typography variant=\"h3\" color={accent ? orangeAccent : ''}>\n {preliminary ? '(P) ' : ''}\n {value}\n {suffix ? <sub style={{ fontSize: '0.5em' }}>{suffix}</sub> : ''}\n </Typography>\n </Box>\n </Grid>\n {footer && (\n <Grid item className={classes.footerContainer}>\n <Box\n p={1}\n className={classes.footer}\n style={{ backgroundColor: footerColorToHexMap[footerColor] }}\n >\n <Typography\n display=\"block\"\n variant=\"button\"\n align=\"center\"\n color={footerColor === 'white' ? 'primary' : undefined}\n >\n <strong>{footer}</strong>\n </Typography>\n </Box>\n </Grid>\n )}\n </Grid>\n </Grid>\n </>\n );\n};\n\nScoreWidgetMainColumn.defaultProps = {\n footer: null,\n footerColor: null,\n className: undefined,\n preliminary: false,\n suffix: null,\n};\n\nScoreWidgetMainColumn.propTypes = {\n preliminary: PropTypes.bool,\n suffix: PropTypes.string,\n className: PropTypes.string,\n label: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n footer: PropTypes.string,\n footerColor: PropTypes.oneOf(['green', 'white', 'red']),\n};\n\nconst useColumnStyles = makeStyles({\n root: {\n minHeight: useReportPage ? 115 : 150,\n },\n fullHeight: {\n height: '100%',\n },\n columnInnerBoxWithBorder: {\n borderRight: `2px solid ${grey[400]}`,\n },\n columnValue: {\n margin: 'auto 0',\n },\n});\n\nconst ScoreWidgetColumn = ({ children, label, tooltip, last }) => {\n const classes = useColumnStyles();\n\n return (\n <>\n <Grid item xs className={classes.root}>\n <Box py={2} className={classes.fullHeight}>\n <Box\n px={2}\n className={`${classes.fullHeight}${last ? '' : ` ${classes.columnInnerBoxWithBorder}`}`}\n >\n <Grid container direction=\"column\" align=\"center\" className={classes.fullHeight}>\n <Grid item>\n <Grid container justifyContent=\"center\" spacing={1}>\n <Grid item>\n <Typography variant=\"subtitle2\" color=\"primary\">\n {label}\n </Typography>\n </Grid>\n {tooltip && (\n <Grid item>\n <InfoTooltip title={tooltip} />\n </Grid>\n )}\n </Grid>\n </Grid>\n <Grid item className={classes.columnValue}>\n {children}\n </Grid>\n </Grid>\n </Box>\n </Box>\n </Grid>\n </>\n );\n};\n\nScoreWidgetColumn.defaultProps = {\n last: false,\n tooltip: null,\n accent: false,\n};\n\nScoreWidgetColumn.propTypes = {\n children: PropTypes.node.isRequired,\n label: PropTypes.node.isRequired,\n tooltip: PropTypes.string,\n last: PropTypes.bool,\n accent: PropTypes.bool,\n};\n\nexport const ScoreWidgetSingleValueColumn = ({ label, value, subvalue, tooltip, last }) => (\n <ScoreWidgetColumn label={label} last={last} tooltip={tooltip}>\n <Typography variant=\"h5\">{value}</Typography>\n {subvalue && <Typography variant=\"subtitle1\">{subvalue}</Typography>}\n </ScoreWidgetColumn>\n);\n\nScoreWidgetSingleValueColumn.defaultProps = {\n last: false,\n subvalue: null,\n tooltip: null,\n};\n\nScoreWidgetSingleValueColumn.propTypes = {\n label: PropTypes.node.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n subvalue: PropTypes.string,\n tooltip: PropTypes.string,\n last: PropTypes.bool,\n};\n\nexport const ScoreWidgetMultiValuesColumn = ({ label, values, last }) => (\n <ScoreWidgetColumn label={label} last={last}>\n {values.map((value) => (\n <Box key={value.label} mb={values.indexOf(value) + 1 === values.length ? 1 : 0}>\n <Typography color=\"primary\" variant=\"caption\">\n <strong>{value.label}</strong>\n </Typography>\n <Typography variant=\"body2\">{value.value}</Typography>\n </Box>\n ))}\n </ScoreWidgetColumn>\n);\n\nScoreWidgetMultiValuesColumn.defaultProps = {\n last: false,\n};\n\nScoreWidgetMultiValuesColumn.propTypes = {\n label: PropTypes.string.isRequired,\n values: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n ).isRequired,\n last: PropTypes.bool,\n};\n\nconst useRootStyles = makeStyles({\n root: {\n overflow: 'hidden',\n },\n});\n\nexport const ScoreWidget = ({ children }) => {\n const classes = useRootStyles();\n\n return (\n <Paper variant=\"outlined\" elevation={0} className={classes.root}>\n <Grid container>{children}</Grid>\n </Paper>\n );\n};\n\nScoreWidget.propTypes = {\n children: PropTypes.arrayOf(PropTypes.node.isRequired).isRequired,\n};\n","export const portfolioTypes = {\n CREDIT_RATING: 'creditRating',\n ESG_ANALYSIS: 'esgAnalysis',\n CREDIT_REVIEW: 'creditReview',\n};\n","import { fetchApi, getFetchApiJSONResponse, catchFetchApiError } from 'shared/functions';\n\nexport const fetchProducts = () =>\n fetchApi('/shop/subscriptions/')\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const changeProductsFavoriteStatus = ({ ids, isFavorite }) =>\n fetchApi('/shop/subscriptions-history/', {\n method: isFavorite ? 'POST' : 'DELETE',\n body: JSON.stringify({ favorites: ids }),\n });\n\nexport const fetchShopHistory = () =>\n fetchApi('/shop/subscriptions-history/')\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const addProductsToBasket = ({ ids }) =>\n fetchApi('/shop/subscriptions-history/', {\n method: 'POST',\n body: JSON.stringify({ basket: ids }),\n });\n\nexport const removeProductsFromBasket = ({ ids }) =>\n fetchApi('/shop/subscriptions-history/', {\n method: 'DELETE',\n body: JSON.stringify({ basket: ids }),\n });\n\nexport const createProduct = product =>\n fetchApi(\n '/shop/save-product/',\n {\n method: 'POST',\n body: product,\n },\n ['Content-Type'],\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const fetchProductProperties = () =>\n fetchApi('/shop/dictionaries/')\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const createProductThirdPartySource = source =>\n fetchApi(\n '/shop/create-source/',\n {\n method: 'POST',\n body: source,\n },\n ['Content-Type'],\n );\n\nexport const acceptTermsAndConditions = data =>\n fetchApi('/shop/tcacknowledgement-create/', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const purchaseProducts = data =>\n fetchApi('/shop/purchase-products/', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const sendMessageToSales = data =>\n fetchApi('/shop/contact-sales/', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const startFreeTrial = data =>\n fetchApi('/shop/free-trial-confirmation/', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const startFreeSubscription = data =>\n fetchApi('/shop/free-of-charge-confirmation/', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const duplicateShopProducts = data =>\n fetchApi('/shop/duplicate-products/', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const cancelSubscriptions = data =>\n fetchApi('/shop/cancel-subscriptions/', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const activateSubscriptions = data =>\n fetchApi('/shop/subscriptions-reactivate/', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const deleteSubscriptions = data =>\n fetchApi('/shop/delete-products/', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const fetchShopPermissions = () =>\n fetchApi('/shop/permissions/')\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const fetchShopRelatedSubscriptions = data =>\n fetchApi('/shop/subscriptions-filtered/', {\n method: 'POST',\n body: JSON.stringify(data),\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n","export const LOGIN = 'LOGIN';\nexport const LOGIN_SUCCESS = `${LOGIN}_SUCCESS`;\nexport const LOGIN_ERROR = `${LOGIN}_ERROR`;\nexport const LOGOUT = 'LOGOUT';\nexport const LOGOUT_SUCCESS = 'LOGOUT_SUCCESS';\n\nexport const EDIT_PROFILE = 'EDIT_PROFILE';\nexport const EDIT_PROFILE_SUCCESS = `${EDIT_PROFILE}_SUCCESS`;\nexport const EDIT_PROFILE_ERROR = `${EDIT_PROFILE}_ERROR`;\n\nexport const PERMISSIONS = 'PERMISSIONS';\nexport const GET_LOGGED_USER = 'GET_LOGGED_USER';\nexport const GET_LOGGED_USER_SUCCESS = `${GET_LOGGED_USER}_SUCCESS`;\n\nexport const loginAction = payload => ({\n type: LOGIN,\n payload,\n});\n\nexport const logoutAction = {\n type: LOGOUT,\n};\n\nexport const getLoggedUserAction = {\n type: GET_LOGGED_USER,\n};\n\nexport const editProfileAction = payload => ({\n type: EDIT_PROFILE,\n payload,\n});\n","import { createSelector } from 'reselect';\nimport { sortBy } from 'lodash';\n\nimport { shopProductsSortOptions } from '../shared/constants/shopProductsSortOptions';\nimport { shopProductsCategories } from '../shared/constants/shopProductsCategories';\n\nconst getShop = state => state.shop;\nexport const getShopProducts = createSelector(\n getShop,\n ({ filters, sortBy: sorting, products, basket }) => ({\n data: sortBy(\n products.data.filter(product => {\n if (!product.active) return false;\n if (!filters) return true;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const [property, value] of Object.entries(filters)) {\n if (property === 'basket') return value ? basket.data.includes(product.id) : true;\n if (property === 'categories' && value === shopProductsCategories.free) {\n const pricing = (product.pricing ? product.pricing : []).find(({ active }) => active);\n\n return !!pricing && pricing.price === 0;\n }\n if (property === 'categories' && value === shopProductsCategories.trial) {\n return product.isFreeTrial;\n }\n\n const productValue = product[property];\n const matchValue = Array.isArray(productValue)\n ? productValue.includes(value)\n : productValue === value;\n\n if (value && !matchValue) return false;\n }\n\n return true;\n }),\n [\n item => {\n if (sorting === shopProductsSortOptions.price) {\n const pricing = (item.pricing ? item.pricing : []).find(({ active }) => active);\n\n return pricing.price;\n }\n\n return item[sorting];\n },\n ],\n ),\n isPending: products.isPending,\n }),\n);\n\nexport const getProductsFromBasket = createSelector(\n getShop,\n ({ products, history: { basket } }) => ({\n data: products.data.filter(({ id }) => basket.data.includes(id)),\n isPending: products.isPending,\n }),\n);\n\nexport const getPurchasedProducts = createSelector(\n getShop,\n ({ products, history: { purchases } }) => ({\n data: products.data.filter(({ id }) => purchases.includes(id)),\n isPending: products.isPending,\n }),\n);\n\nexport const getFavoriteProducts = createSelector(\n getShop,\n ({ products, history: { favorites } }) => ({\n data: products.data.filter(({ id }) => favorites.includes(id)),\n isPending: products.isPending,\n }),\n);\n\nexport const getProductsProperties = createSelector(getShop, ({ properties }) => properties);\n\nexport const getSingleActiveProducts = createSelector(getShop, ({ products }) => ({\n data: products.data.filter(({ isPackage, active }) => active && !isPackage),\n isPending: products.isPending,\n}));\n\nexport const getScopeProductSources = createSelector(getProductsProperties, ({ data }) =>\n data.sources.filter(({ thirdParty }) => !thirdParty),\n);\n\nexport const getThirdPartyProductSources = createSelector(getProductsProperties, ({ data }) =>\n data.sources.filter(({ thirdParty }) => thirdParty),\n);\n\nexport const getProductById = productId =>\n createSelector(getShop, ({ products: { data } }) => data.find(({ id }) => id === productId));\n\nexport const getProductsByIds = productIds =>\n createSelector(getShop, ({ products: { data } }) =>\n productIds ? data.filter(({ id }) => productIds.includes(id)) : [],\n );\n\nexport const getHomeSubscriptions = createSelector(getShop, ({ products }) => ({\n isPending: products.isPending,\n data: products.data\n .filter(({ purchased, validUntil, trialStarted }) => {\n if (validUntil && new Date(validUntil) < new Date()) {\n return false;\n }\n\n return purchased || trialStarted;\n })\n .map(({ id, name, status }) => ({\n id,\n primaryText: name,\n status,\n })),\n}));\n\nexport const getRelatedProducts = ({ productLine }) =>\n createSelector(getShop, ({ products }) => ({\n isPending: products.isPending,\n data: products.data.filter(({ productLines }) => {\n return productLines.includes(productLine);\n }),\n }));\n","export const summaryCardLevelsMapping = {\n L1: 0,\n L2: 1,\n L3: 2,\n L4: 3,\n L5: 4,\n};\n","import { ratingConstants, ratingRange } from 'shared/constants/company';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\n\nexport const scalesTypes = {\n rs1: 'RS1',\n rs2: 'RS2',\n rs3: 'RS3',\n rs4: 'RS4',\n};\n\nconst creditRatingScales = {\n [scalesTypes.rs1]: [\n {\n value: 'C',\n tooltip: 'Ratings at the C level reflect an opinion of exceptionally weak credit quality.',\n },\n {\n value: 'CC',\n tooltip: 'Ratings at the CC level reflect an opinion of extremely weak credit quality.',\n },\n {\n value: 'CCC',\n tooltip: 'Ratings at the CCC level reflect an opinion of very weak credit quality.',\n },\n {\n value: 'B',\n tooltip: 'Ratings at the B level reflect an opinion of weak credit quality.',\n },\n {\n value: 'BB',\n tooltip: 'Ratings at the BB level reflect an opinion of moderate credit quality.',\n },\n {\n value: 'BBB',\n tooltip: 'Ratings at the BBB level reflect an opinion of good credit quality.',\n },\n {\n value: 'A',\n tooltip: 'Ratings at the A level reflect an opinion of strong credit quality.',\n },\n {\n value: 'AA',\n tooltip: 'Ratings at the AA level reflect an opinion of very strong credit quality.',\n },\n {\n value: 'AAA',\n tooltip: 'Ratings at the AAA level reflect an opinion of exceptionaly strong credit quality.',\n },\n ],\n [scalesTypes.rs2]: [\n {\n value: 'S-4',\n tooltip:\n 'Ratings at the S-4 level reflect an opinion of moderate-to-high credit risk with modest capacity to repay short-term obligations.',\n },\n {\n value: 'S-3',\n tooltip:\n 'Ratings at the S-3 level reflect an opinion of acceptable credit risk with fair capacity to repay short-term obligations.',\n },\n {\n value: 'S-2',\n tooltip:\n 'Ratings at the S-2 level reflect an opinion of low credit risk with good capacity to repay short-term obligations.',\n },\n {\n value: 'S-1',\n tooltip:\n 'Ratings at the S-1 level reflect an opinion of very low credit risk with high capacity to repay short-term obligations.',\n },\n {\n value: 'S-1+',\n tooltip:\n 'Ratings at the S-1+ level reflect an opinion of the lowest credit risk with the highest capacity to repay short-term obligations.',\n },\n ],\n [scalesTypes.rs3]: [\n {\n value: '0',\n },\n {\n value: '1',\n },\n {\n value: '2',\n },\n {\n value: '3',\n },\n {\n value: '4',\n },\n {\n value: '5',\n },\n {\n value: '6',\n },\n {\n value: '7',\n },\n {\n value: '8',\n },\n {\n value: '9',\n },\n {\n value: '10',\n },\n ],\n [scalesTypes.rs4]: [\n {\n value: '0',\n tooltip: 'Payment Default',\n },\n {\n value: '1',\n tooltip:\n 'Extremely High Risk - The risk of payment default is very high and company liquidity is too low. Deliveries on credit terms are not recommended.',\n },\n {\n value: '2',\n tooltip:\n 'Very High Risk - The risk of payment default is very high and company solvency is very poor. The economic situation is critical.',\n },\n {\n value: '3',\n tooltip:\n 'High Risk - The company exhibits a bad financial situation. The risk of payment default is high. The company is not able to react in time to a deterioration in the credit situation.',\n },\n {\n value: '4',\n tooltip:\n 'Heighted Risk - The financial stability is below the average. The risk of payment default is higher than average. A high exposure to external events.',\n },\n {\n value: '5',\n tooltip:\n 'Medium Risk - The financial capacity and stability of large companies or corporations is slightly below average. For mid-sized companies it is normal. The risk of payment default represents the average.',\n },\n {\n value: '6',\n tooltip:\n 'Average Credit Score - There is an average risk of payment default. Changes to credit ratings should be monitored closely. An appropriate amount of time will be required for the company to be able to react to a deterioration in the economic climate.',\n },\n {\n value: '7',\n tooltip:\n 'Stable, slightly above average Credit Score - The risk of payment default is relatively small and the company solvency is stable.The company should, given an appropriate amount of time, be able to react to any deterioration in the economic climate.',\n },\n {\n value: '8',\n tooltip:\n 'Good Credit Score - The risk of payment default is small and company solvency is good. The company is able to withstand unforseen events.',\n },\n {\n value: '9',\n tooltip:\n 'High Credit Score - The risk of payment default is very small and the financial stability of the company is very high. The company exibits a high ability to withstand unforseen events.',\n },\n {\n value: '10',\n tooltip:\n 'Very high Credit Score - The risk of payment default is very small und company solvency is very good. The company exibits a very high ability to withstand unforseen events.',\n },\n ],\n};\nexport const creditRatingScalesMap = {\n [portfolioTypes.CREDIT_RATING]: {\n [ratingConstants.entityRatingCurrency]: scalesTypes.rs1,\n [ratingConstants.entityReview]: scalesTypes.rs1,\n [ratingConstants.longTermRating]: scalesTypes.rs1,\n [ratingConstants.longTermRatingCurrency]: scalesTypes.rs1,\n [ratingConstants.entityRating]: scalesTypes.rs1,\n [ratingConstants.rating]: scalesTypes.rs1,\n [ratingRange.longTermRange]: scalesTypes.rs1,\n [ratingRange.undeterminedRange]: scalesTypes.rs1,\n [ratingRange.shortTermRange]: scalesTypes.rs2,\n },\n [portfolioTypes.CREDIT_REVIEW]: {\n [ratingConstants.entityReview]: scalesTypes.rs4,\n },\n [portfolioTypes.ESG_ANALYSIS]: {\n [ratingConstants.entityReview]: scalesTypes.rs3,\n },\n};\n\nexport const creditRatingScalesMapping = (portfolioType, ratingType) =>\n creditRatingScales[creditRatingScalesMap[portfolioType][ratingType]];\n","export enum RatingStatus {\n TO_DO = 'TO_DO',\n IN_PROGRESS = 'IN_PROGRESS',\n DONE_BY_SCOPE = 'DONE_BY_SCOPE',\n DONE = 'DONE',\n UNABLE_TO_REQUEST = 'UNABLE_TO_REQUEST',\n}\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport DialogContent from '@mui/material/DialogContent';\nimport Typography from '@mui/material/Typography';\n\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { fetchESGAdditionalDocuments, fetchESGDocuments } from 'services';\nimport { Documents, Loader } from 'ui';\nimport { esgAvailable } from 'services/esg';\n\nconst DocumentsModal = ({\n defaultExpandDocuments,\n entityId,\n // eslint-disable-next-line no-unused-vars\n companyModule,\n company,\n initialMethodologies,\n initialDocuments,\n}) => {\n const { t } = useTranslation();\n const checkExpanded = value => {\n if (defaultExpandDocuments === 'all') return true;\n\n return value === defaultExpandDocuments;\n };\n const [documents, setDocuments] = useState(initialDocuments);\n const [isDocumentsPending, setIsDocumentsPending] = useState(false);\n const [methodologies, setMethodologies] = useState(initialMethodologies);\n const [isMethodologiesPending, setIsMethodologiesPending] = useState(false);\n const [additionalDocuments, setAdditionalDocuments] = useState([]);\n const [isAdditionalDocumentsPending, setIsAdditionalDocumentsPending] = useState(false);\n\n const getESGDocuments = async () => {\n setIsDocumentsPending(true);\n const data = await esgAvailable(entityId);\n const reports = [];\n data.availableYears.map(update => {\n const name = t('{{company}} - ESG impact review - {{year}} report', {\n company,\n year: update.year,\n });\n reports.push({\n name,\n title: name,\n path: `/esg/api/generate-report/${entityId}?year=${update.year}&latestUpdate=${update.latestUpdate}`,\n publicationDate: update ? update.latestUpdate : null,\n options: {},\n retries: 14,\n });\n return reports;\n });\n setDocuments(reports);\n setIsDocumentsPending(false);\n };\n\n const getESGMethodologies = () => {\n setIsMethodologiesPending(true);\n fetchESGDocuments().then(({ data }) => {\n setMethodologies(data || []);\n setIsMethodologiesPending(false);\n });\n };\n\n const getESGAdditionalDocuments = () => {\n setIsAdditionalDocumentsPending(true);\n fetchESGAdditionalDocuments().then(({ data }) => {\n setAdditionalDocuments(data);\n setIsAdditionalDocumentsPending(false);\n });\n };\n const isEmpty = !documents.length && !methodologies.length && !additionalDocuments.length;\n\n useEffect(() => {\n switch (companyModule) {\n case ratingTypes.ESG_IMPACT:\n getESGDocuments();\n getESGMethodologies();\n getESGAdditionalDocuments();\n break;\n default:\n break;\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <DialogContent>\n {isDocumentsPending ? (\n <Loader center />\n ) : (\n <Documents\n expanded={checkExpanded('reports')}\n title={t('Reports')}\n documents={documents}\n />\n )}\n {isMethodologiesPending ? (\n <Loader center />\n ) : (\n <Documents\n expanded={checkExpanded('methodologies')}\n title={t('Methodologies')}\n documents={methodologies}\n />\n )}\n {isAdditionalDocumentsPending ? (\n <Loader center />\n ) : (\n <Documents\n expanded={checkExpanded('additionalInformation')}\n title={t('Additional information')}\n documents={additionalDocuments}\n />\n )}\n {isEmpty ? <Typography variant=\"caption\">{t('No documents to display')}</Typography> : null}\n </DialogContent>\n </>\n );\n};\n\nDocumentsModal.defaultProps = {\n defaultExpandDocuments: 'all',\n initialMethodologies: [],\n initialDocuments: [],\n};\n\nconst documentProps = PropTypes.arrayOf(\n PropTypes.shape({\n level: PropTypes.string,\n path: PropTypes.string.isRequired,\n name: PropTypes.string.isRequired,\n publicationDate: PropTypes.string,\n title: PropTypes.string.isRequired,\n options: PropTypes.object,\n }).isRequired,\n);\n\nDocumentsModal.propTypes = {\n defaultExpandDocuments: PropTypes.oneOf([\n 'all',\n 'reports',\n 'methodologies',\n 'additionalInformation',\n ]),\n entityId: PropTypes.string.isRequired,\n companyModule: PropTypes.string.isRequired,\n company: PropTypes.string.isRequired,\n initialMethodologies: documentProps,\n initialDocuments: documentProps,\n};\n\nexport default DocumentsModal;\n","export enum shopProductsCategories {\n creditAnalysis = 'Credit analysis',\n esgAnalysis = 'ESG Analysis',\n fundAnalysis = 'Fund Analysis',\n free = 'Free',\n trial = 'Free Trial',\n}\n","import React, { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { getAuthDataOrganisationId, getAuthDataUserId } from 'selectors/auth';\nimport { requestCreditReviewRatings, fetchEntities } from 'services';\nimport { Loader } from 'ui';\nimport { CreditReview, SummaryCardRequestCreditReview } from 'modules/creditReview';\nimport { useFeatures } from 'shared/hooks/useFeatures/useFeatures';\n\nconst CreditReviewTab = ({ easyNumber }) => {\n const features = useFeatures();\n const organisationId = useSelector(getAuthDataOrganisationId);\n const userId = useSelector(getAuthDataUserId);\n const [ratingAvailable, setRatingAvailable] = useState(false);\n const [entity, setEntity] = useState();\n const [isPending, setIsPending] = useState(false);\n const [isRequestRatingPending, setIsRequestRatingPending] = useState(false);\n\n const fetchData = async () => {\n setIsPending(true);\n\n const { data } = await fetchEntities(\n {\n page: 1,\n limit: 1,\n query: easyNumber, // TODO: change to { filter: { easyNumber } } when backend is ready\n userId,\n },\n ratingTypes.CREDIT_REVIEW,\n );\n\n if (data && data.length) {\n const entityData = data[0];\n\n setEntity(entityData);\n setRatingAvailable(entityData.wasRequested);\n }\n\n setIsPending(false);\n };\n\n useEffect(() => {\n if (features.creditReview) {\n fetchData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleRatingRequest = async () => {\n setIsRequestRatingPending(true);\n\n const response = await requestCreditReviewRatings({\n ids: [easyNumber],\n userId,\n organisationId,\n });\n\n if (response.success) {\n fetchData();\n setRatingAvailable(true);\n setIsRequestRatingPending(false);\n }\n };\n\n if (!features.creditReview || !easyNumber) {\n return <SummaryCardRequestCreditReview isAvailable={false} />;\n }\n\n if (!entity) {\n return <Loader center />;\n }\n\n return (\n <CreditReview\n ratingAvailable={ratingAvailable}\n entity={entity}\n easyNumber={easyNumber}\n isPending={isPending}\n isRequestRatingPending={isRequestRatingPending}\n handleRatingRequest={handleRatingRequest}\n />\n );\n};\n\nCreditReviewTab.defaultProps = {\n easyNumber: undefined,\n};\n\nCreditReviewTab.propTypes = {\n easyNumber: PropTypes.string,\n};\n\nexport default CreditReviewTab;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Stepper from '@mui/material/Stepper';\nimport Step from '@mui/material/Step';\nimport StepLabel from '@mui/material/StepLabel';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles({\n QuestionnaireStepper: {\n maxWidth: '75%',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n});\n\nconst QuestionnaireStepper = ({ stepsNumber, current }) => {\n const classes = useStyles();\n const content = [];\n\n for (let i = 0; i < stepsNumber; i += 1) {\n content.push(\n <Step key={`question-step-${i}`}>\n <StepLabel />\n </Step>,\n );\n }\n\n return (\n <Stepper activeStep={current} classes={{ root: classes.QuestionnaireStepper }}>\n {content}\n </Stepper>\n );\n};\n\nQuestionnaireStepper.propTypes = {\n stepsNumber: PropTypes.number.isRequired,\n current: PropTypes.number.isRequired,\n};\n\nexport default QuestionnaireStepper;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\n\nconst QuestionnaireNextButton = ({ onClick, children, ...props }) => {\n return (\n <Button variant=\"contained\" color=\"primary\" onClick={onClick} {...props}>\n {children}\n </Button>\n );\n};\n\nQuestionnaireNextButton.defaultProps = {\n onClick: PropTypes.func,\n};\n\nQuestionnaireNextButton.propTypes = {\n onClick: PropTypes.func,\n children: PropTypes.node.isRequired,\n};\n\nexport default QuestionnaireNextButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\n\nconst QuestionnairePreviousButton = ({ onClick, children, ...props }) => {\n return (\n <Button variant=\"outlined\" onClick={onClick} {...props}>\n {children}\n </Button>\n );\n};\n\nQuestionnairePreviousButton.defaultProps = {\n onClick: PropTypes.func,\n};\n\nQuestionnairePreviousButton.propTypes = {\n onClick: PropTypes.func,\n children: PropTypes.node.isRequired,\n};\n\nexport default QuestionnairePreviousButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport DialogTitle from '@mui/material/DialogTitle';\n\nconst useStyles = makeStyles({\n container: {\n maxWidth: '75%',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n label: {\n paddingBottom: 0,\n '& .MuiTypography-root': {\n fontWeight: 500,\n },\n },\n subLabel: {\n paddingTop: 0,\n },\n});\n\nconst QuestionnaireStepHeader = ({ label, subLabel }) => {\n const classes = useStyles();\n\n return (\n <div className={classes.container}>\n <DialogTitle classes={{ root: classes.label }}>{label}</DialogTitle>\n {subLabel && (\n <DialogTitle classes={{ root: classes.subLabel }}>\n {subLabel}\n </DialogTitle>\n )}\n </div>\n );\n};\n\nQuestionnaireStepHeader.defaultProps = {\n subLabel: undefined,\n};\n\nQuestionnaireStepHeader.propTypes = {\n label: PropTypes.string.isRequired,\n subLabel: PropTypes.string,\n};\n\nexport default QuestionnaireStepHeader;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport MuiTextField from '@mui/material/TextField';\n\nconst TextField = ({ label, ...props }) => {\n return <MuiTextField {...props}>{label}</MuiTextField>;\n};\n\nTextField.propTypes = {\n label: PropTypes.string.isRequired,\n};\n\nexport { TextField };\n","import React from 'react';\n\nconst QuestionnaireContext = React.createContext({});\n\nexport default QuestionnaireContext;\n","import React, { useState, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport ToggleButton from '@mui/material/ToggleButton';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\n\nimport { TextField } from './TextField';\nimport QuestionnaireContext from '../QuestionnaireContext';\n\nconst useToggleButtonGroupStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-around',\n marginTop: theme.spacing(4),\n marginBottom: theme.spacing(4),\n },\n grouped: {\n padding: 25,\n '&:not(:first-child), &:not(:last-child)': {\n marginLeft: 'inherit',\n borderLeft: '1px solid rgba(0, 0, 0, 0.12)',\n },\n },\n}));\nconst useToggleButtonStyle = makeStyles({\n root: {\n minHeight: 100,\n flex: '0 0 200px',\n margin: 25,\n },\n});\n\nconst ButtonsWithOther = ({ options, questionId, onChange, handleValidation }) => {\n const { t } = useTranslation();\n const { setParam } = useContext(QuestionnaireContext);\n const [currentValue, setCurrentValue] = useState();\n const [otherValue, setOtherValue] = useState('');\n const [type, setType] = useState();\n const toggleButtonGroupClasses = useToggleButtonGroupStyles();\n const toggleButtonClasses = useToggleButtonStyle();\n\n const setValidate = value => {\n if (handleValidation) {\n setParam('isValidate', value);\n }\n };\n\n const handleChange = (event, answerId) => {\n if (answerId === null) {\n return;\n }\n const option = options.find(item => item.answerId === answerId);\n\n setCurrentValue(answerId);\n setType(option.type);\n\n if (option.type === 'text') {\n onChange(questionId, {\n answer: '',\n other: true,\n });\n setValidate(false);\n return;\n }\n\n onChange(questionId, {\n answer: option.answerId,\n });\n setValidate(true);\n };\n const handleOtherChange = event => {\n const { value } = event.target;\n\n setOtherValue(value);\n onChange(questionId, {\n answer: value,\n other: true,\n });\n\n if (value.length) {\n setValidate(true);\n } else {\n setValidate(false);\n }\n };\n\n return (\n <>\n <div>\n <ToggleButtonGroup\n onChange={handleChange}\n value={currentValue}\n classes={toggleButtonGroupClasses}\n exclusive\n >\n {options.map(({ answerLabel, answerId }) => (\n <ToggleButton key={answerId} value={answerId} classes={toggleButtonClasses}>\n {answerLabel}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </div>\n {type === 'text' && (\n <TextField\n label={options.find(item => item.answerId === currentValue).answerLabel}\n onChange={handleOtherChange}\n value={otherValue}\n placeholder={t('Enter text')}\n fullWidth\n />\n )}\n </>\n );\n};\n\nButtonsWithOther.defaultProps = {\n handleValidation: true,\n};\n\nButtonsWithOther.propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n answerId: PropTypes.number.isRequired,\n answerLabel: PropTypes.string.isRequired,\n answerName: PropTypes.string.isRequired,\n type: PropTypes.string,\n }),\n ).isRequired,\n questionId: PropTypes.number.isRequired,\n handleValidation: PropTypes.bool,\n onChange: PropTypes.func.isRequired,\n};\n\nexport { ButtonsWithOther };\n","import React, { useState, useContext, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport makeStyles from '@mui/styles/makeStyles';\nimport ToggleButton from '@mui/material/ToggleButton';\nimport ToggleButtonGroup from '@mui/material/ToggleButtonGroup';\n\nimport QuestionnaireContext from '../QuestionnaireContext';\n\nconst useToggleButtonGroupStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-around',\n marginTop: theme.spacing(4),\n marginBottom: theme.spacing(4),\n },\n grouped: {\n padding: 25,\n '&:not(:first-child), &:not(:last-child)': {\n marginLeft: 'inherit',\n borderLeft: '1px solid rgba(0, 0, 0, 0.12)',\n },\n },\n}));\nconst useToggleButtonStyle = makeStyles({\n root: {\n minHeight: 100,\n flex: '0 0 200px',\n margin: 25,\n },\n});\n\nconst Buttons = ({\n options,\n questionId,\n onPush,\n onRemove,\n onChange,\n handleValidation,\n selectedAll,\n className,\n}) => {\n const { setParam } = useContext(QuestionnaireContext);\n const [currentValue, setCurrentValue] = useState(\n selectedAll ? options.map(({ answerId }) => answerId) : [],\n );\n const toggleButtonGroupClasses = useToggleButtonGroupStyles();\n const toggleButtonClasses = useToggleButtonStyle();\n\n const setValidate = value => {\n if (handleValidation) {\n setParam('isValidate', value);\n }\n };\n\n useEffect(() => {\n onRemove(questionId);\n if (onChange) {\n onChange(currentValue);\n }\n\n if (currentValue.length) {\n currentValue.forEach(singleValue => onPush(questionId, singleValue));\n setValidate(true);\n } else {\n setValidate(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [currentValue]);\n\n const handleChange = (event, answerId) => {\n if (answerId === null) {\n return;\n }\n\n setCurrentValue(answerId);\n };\n\n return (\n <>\n <div>\n <ToggleButtonGroup\n onChange={handleChange}\n value={currentValue}\n classes={toggleButtonGroupClasses}\n >\n {options.map(({ answerLabel, answerId }) => (\n <ToggleButton\n key={answerId}\n value={answerId}\n className={clsx(toggleButtonClasses.root, className)}\n >\n {answerLabel}\n </ToggleButton>\n ))}\n </ToggleButtonGroup>\n </div>\n </>\n );\n};\n\nButtons.defaultProps = {\n handleValidation: true,\n onChange: undefined,\n selectedAll: true,\n className: undefined,\n};\n\nButtons.propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n answerId: PropTypes.number.isRequired,\n answerLabel: PropTypes.string.isRequired,\n answerName: PropTypes.string.isRequired,\n type: PropTypes.string,\n }),\n ).isRequired,\n questionId: PropTypes.number.isRequired,\n handleValidation: PropTypes.bool,\n onPush: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n onChange: PropTypes.func,\n selectedAll: PropTypes.bool,\n className: PropTypes.string,\n};\n\nexport { Buttons };\n","import React, { useContext, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport values from 'lodash/values';\n\nimport QuestionnaireStepHeader from '../../QuestionnaireStepHeader';\nimport { Buttons } from '../Buttons';\nimport QuestionnaireContext from '../../QuestionnaireContext';\n\nconst RadioCardSubPage = ({ data, onPush, onRemove }) => {\n const { setParam } = useContext(QuestionnaireContext);\n const [isValid, setIsValid] = useState(\n data.reduce((prev, next) => {\n return { ...prev, [next.questionId]: true };\n }, {}),\n );\n\n useEffect(() => {\n setParam('isHeaderVisible', false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (values(isValid).includes(true)) {\n setParam('isValidate', true);\n } else {\n setParam('isValidate', false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isValid]);\n\n const handleOnChange = (id, selectedValues) => {\n setIsValid({\n ...isValid,\n [id]: selectedValues.length > 0,\n });\n };\n\n return data.map(({ questionLabel, questionSubLabel, options, questionId }) => (\n <React.Fragment key={questionId}>\n <QuestionnaireStepHeader label={questionLabel} subLabel={questionSubLabel} />\n <Buttons\n options={values(options)}\n questionId={questionId}\n onPush={onPush}\n onRemove={onRemove}\n handleValidation={false}\n onChange={selectedValues => handleOnChange(questionId, selectedValues)}\n />\n </React.Fragment>\n ));\n};\n\nRadioCardSubPage.propTypes = {\n data: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string,\n subLabel: PropTypes.string,\n options: PropTypes.object.isRequired,\n questionId: PropTypes.number.isRequired,\n }),\n ).isRequired,\n onPush: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n};\n\nexport { RadioCardSubPage };\n","import React, { useEffect, useState, useContext } from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport values from 'lodash/values';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { Buttons } from '../Buttons';\nimport { RadioCardSubPage } from './RadioCardSubPage';\nimport QuestionnaireContext from '../../QuestionnaireContext';\nimport QuestionnaireNextButton from '../../QuestionnaireNextButton';\n\nconst useStyles = makeStyles({\n nextSubStep: {\n position: 'absolute',\n bottom: 9,\n right: 9,\n },\n subOptions: {\n maxWidth: '50%',\n },\n});\n\nconst RadioCard = ({ options, questionId, onPush, onRemove }) => {\n const { setParam } = useContext(QuestionnaireContext);\n const classes = useStyles();\n const [subOptions, setSubOptions] = useState([]);\n const [subQuestionId, setSubQuestionId] = useState();\n const [subPage, setSubPage] = useState([]);\n const [step, setStep] = useState(0);\n\n const handleChange = selectedValues => {\n const hasSubOptions = !!options\n .filter(option => selectedValues.includes(option.answerId))\n .find(option => !isEmpty(option.options));\n\n options\n .filter(option => !selectedValues.includes(option.answerId))\n .forEach(option => {\n onRemove(option.questionId);\n });\n\n setSubOptions([]);\n\n if (!selectedValues.length) {\n setParam('isValidate', false);\n } else if (selectedValues.length && !hasSubOptions) {\n setParam('isValidate', true);\n } else {\n setParam('isValidate', false);\n selectedValues.forEach(answerId => {\n const subLevel = options.find(option => option.answerId === answerId);\n\n if (!isEmpty(subLevel.options)) {\n const subOptionsValues = values(subLevel.options);\n\n subOptionsValues.forEach(subOptionsValue => onRemove(subOptionsValue.questionId));\n setSubQuestionId(subLevel.questionId);\n setSubOptions(subOptionsValues);\n }\n });\n }\n };\n\n useEffect(() => {\n if (!subOptions.length) {\n setSubPage([]);\n }\n }, [subOptions]);\n\n const handleSubLevelChange = selectedValues => {\n const subPageValues = subOptions.filter(option => selectedValues.includes(option.answerId));\n setSubPage(subPageValues);\n };\n\n return subPage && step === 1 ? (\n <RadioCardSubPage data={subPage} onPush={onPush} onRemove={onRemove} />\n ) : (\n <>\n <Buttons\n options={options}\n questionId={questionId}\n onChange={handleChange}\n onPush={onPush}\n onRemove={onRemove}\n handleValidation={false}\n selectedAll={false}\n />\n {subOptions.length ? (\n <div className={classes.subOptions}>\n <Buttons\n options={subOptions}\n questionId={subQuestionId}\n onPush={onPush}\n onRemove={onRemove}\n handleValidation={false}\n onChange={handleSubLevelChange}\n selectedAll={false}\n className=\"sub-button\"\n />\n </div>\n ) : null}\n {subPage.length ? (\n <QuestionnaireNextButton className={classes.nextSubStep} onClick={() => setStep(1)}>\n Next\n </QuestionnaireNextButton>\n ) : null}\n </>\n );\n};\n\nRadioCard.propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n answerId: PropTypes.number.isRequired,\n answerLabel: PropTypes.string.isRequired,\n type: PropTypes.string,\n }),\n ).isRequired,\n questionId: PropTypes.number.isRequired,\n onPush: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n};\n\nexport { RadioCard };\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport FormGroup from '@mui/material/FormGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\n\nconst useFormGroupStyles = makeStyles({\n root: {\n maxWidth: '75%',\n padding: '16px 24px',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n});\n\nconst useFormControlLabelStyles = makeStyles({\n label: {\n fontWeight: 500,\n fontSize: '1.25rem',\n },\n});\n\nconst Checkboxes = ({ options, questionId, onSet, onRemove }) => {\n const formGroupClasses = useFormGroupStyles();\n const formControlLabelStyles = useFormControlLabelStyles();\n\n const [optionsState, setOptionsState] = useState(\n options\n .map(({ answerId }) => ({ [answerId]: false }))\n .reduce((prev, current) => {\n return { ...prev, ...current };\n }, {}),\n );\n const handleChage = event => {\n const answerId = event.target.value;\n const currentValue = !optionsState[answerId];\n\n setOptionsState({\n ...optionsState,\n [answerId]: currentValue,\n });\n\n if (currentValue) {\n onSet(questionId, answerId);\n return;\n }\n\n onRemove(answerId);\n };\n\n const formFields = options.map(({ answerLabel, answerId }) => {\n return (\n <FormControlLabel\n classes={formControlLabelStyles}\n control={<Checkbox checked={optionsState[answerId]} value={answerId} />}\n key={answerId}\n label={answerLabel}\n onChange={handleChage}\n />\n );\n });\n\n return (\n <FormGroup classes={formGroupClasses} row>\n {formFields}\n </FormGroup>\n );\n};\n\nCheckboxes.propTypes = {\n options: PropTypes.arrayOf(\n PropTypes.shape({\n answerId: PropTypes.number.isRequired,\n answerLabel: PropTypes.string.isRequired,\n type: PropTypes.string,\n }),\n ).isRequired,\n questionId: PropTypes.number.isRequired,\n onSet: PropTypes.func.isRequired,\n onRemove: PropTypes.func.isRequired,\n};\n\nexport { Checkboxes };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { ButtonsWithOther } from './formFields/ButtonsWithOther';\nimport { Buttons } from './formFields/Buttons';\nimport { RadioCard } from './formFields/RadioCard/RadioCard';\nimport { Checkboxes } from './formFields/Checkboxes';\n\nconst useStyles = makeStyles({\n narrow: {\n maxWidth: '70%',\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n});\n\nconst QuestionnaireFormFieldsBuilder = ({\n options,\n step,\n questionId,\n onSetValue,\n onPushValue,\n onRemoveValue,\n onRemoveValues,\n}) => {\n const classes = useStyles();\n\n switch (step) {\n case 0:\n return <ButtonsWithOther options={options} questionId={questionId} onChange={onSetValue} />;\n case 1:\n return (\n <RadioCard\n options={options}\n questionId={questionId}\n onPush={onPushValue}\n onRemove={onRemoveValues}\n />\n );\n case 2:\n return (\n <div className={classes.narrow}>\n <Buttons\n options={options}\n questionId={questionId}\n onPush={onPushValue}\n onRemove={onRemoveValues}\n />\n </div>\n );\n case 3:\n return (\n <Checkboxes\n options={options}\n questionId={questionId}\n onSet={onPushValue}\n onRemove={onRemoveValue}\n />\n );\n default:\n return null;\n }\n};\n\nQuestionnaireFormFieldsBuilder.propTypes = {\n step: PropTypes.number.isRequired,\n onSetValue: PropTypes.func.isRequired,\n onRemoveValue: PropTypes.func.isRequired,\n onRemoveValues: PropTypes.func.isRequired,\n onPushValue: PropTypes.func.isRequired,\n questionId: PropTypes.number.isRequired,\n options: PropTypes.oneOfType([\n PropTypes.arrayOf(\n PropTypes.shape({\n answerId: PropTypes.number.isRequired,\n answerLabel: PropTypes.string.isRequired,\n type: PropTypes.string,\n }),\n ),\n PropTypes.shape({\n answerId: PropTypes.number.isRequired,\n answerLabel: PropTypes.string.isRequired,\n type: PropTypes.string,\n }),\n ]).isRequired,\n};\n\nexport default QuestionnaireFormFieldsBuilder;\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@mui/styles';\n\nimport QuestionnaireStepHeader from './QuestionnaireStepHeader';\n\nconst useStyles = makeStyles({\n container: {\n height: 400,\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nconst QuestionnaireIntro = () => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n return (\n <div className={classes.container}>\n <QuestionnaireStepHeader\n label={t(\n 'Please take two minutes of your time to allow customizing our platform to your needs.',\n )}\n />\n </div>\n );\n};\n\nexport default QuestionnaireIntro;\n","import React, { useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport values from 'lodash/values';\nimport { createTheme, ThemeProvider, StyledEngineProvider, adaptV4Theme } from '@mui/material/styles';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogActions from '@mui/material/DialogActions';\nimport { grey } from '@mui/material/colors';\n\nimport { theme } from 'theme';\nimport { saveQuestionnaire, newsCentreUserDataService } from 'services';\nimport { savePreferencesAction } from 'store/newsFeed/newsFeedActions';\nimport { useQuestionnaire } from 'shared/hooks';\nimport { getNewsFeedPreferences, getFlattenedIndustries, getParsedRegions } from 'selectors/common';\nimport { getAuthDataUserId } from 'selectors/auth';\nimport { newsletterFrequencies } from 'shared/constants/news/newsletterFrequencies';\nimport { newsToArtifactTypes } from 'shared/constants/news/newsSettings';\nimport { DialogTitleWithClose } from 'ui';\nimport { initialSettingsParser } from 'shared/parsers';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport QuestionnaireStepper from './QuestionnaireStepper';\nimport QuestionnaireNextButton from './QuestionnaireNextButton';\nimport QuestionnairePreviousButton from './QuestionnairePreviousButton';\nimport QuestionnaireStepHeader from './QuestionnaireStepHeader';\nimport QuestionnaireFormFieldsBuilder from './QuestionnaireFormFieldsBuilder';\nimport QuestionnaireContext from './QuestionnaireContext';\nimport QuestionnaireIntro from './QuestionnaireIntro';\n\nconst formTheme = createTheme(adaptV4Theme({\n overrides: {\n MuiToggleButtonGroup: {\n grouped: {\n 'button&:not(:first-child), button&:not(:last-child)': {\n borderRadius: 10,\n border: 'none',\n '&.sub-button': {\n border: `1px solid ${theme.palette.primary.main}`,\n },\n },\n },\n },\n MuiToggleButton: {\n root: {\n border: 'none',\n color: theme.palette.custom.black,\n boxShadow: `1px 3px 7px ${grey[400]}`,\n borderRadius: 10,\n 'button&:hover': {\n backgroundColor: theme.palette.custom.white,\n color: theme.palette.custom.black,\n },\n '&.Mui-selected, button&.Mui-selected:hover': {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.custom.white,\n },\n '&.sub-button': {\n boxShadow: 'none',\n },\n },\n },\n },\n}));\n\nconst QuestionnaireForm = ({ data, onClose, qualificationId }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const userId = useSelector(getAuthDataUserId);\n const newsFeedPreferences = useSelector(getNewsFeedPreferences);\n const industriesList = useSelector(getFlattenedIndustries);\n const { data: countriesList } = useSelector(getParsedRegions);\n const [submitted, setSubmitted] = useState(false);\n const [currentStep, setCurrentStep] = useState(0);\n const [showIntro, setShowIntro] = useState(true);\n const {\n setAnswer,\n pushAnswer,\n removeAnswer,\n removeAnswers,\n setParam,\n answers,\n params,\n } = useQuestionnaire();\n\n const showPreviousButton = currentStep > 0;\n const showSubmitButton = currentStep === data.length - 1;\n const cleanStepAnswers = options => {\n options.forEach(option => {\n removeAnswers(option.questionId);\n\n if (option.options) {\n cleanStepAnswers(values(option.options));\n }\n });\n };\n const handleNextClick = () => {\n setCurrentStep(currentStep + 1);\n cleanStepAnswers(data[currentStep + 1].questions);\n setParam('isHeaderVisible', true);\n setParam('isValidate', false);\n };\n const handlePreviousClick = () => {\n setCurrentStep(currentStep - 1);\n cleanStepAnswers(data[currentStep].questions);\n cleanStepAnswers(data[currentStep - 1].questions);\n setParam('isHeaderVisible', true);\n setParam('isValidate', false);\n };\n const handleSubmit = () => {\n setSubmitted(true);\n saveQuestionnaire(answers, qualificationId, userId)\n .then(() => {\n newsCentreUserDataService(userId).then(({ industries, regions, settings }) => {\n const initialSettings = initialSettingsParser(newsFeedPreferences);\n let updatedSettings = { ...initialSettings };\n\n if (settings.customize) {\n updatedSettings = {\n ...initialSettings,\n newsFeed: {\n ...initialSettings.newsFeed,\n industryTypes: industriesList.filter(({ industryName }) =>\n industries.includes(industryName),\n ),\n countriesList: countriesList\n .filter(({ continent }) => regions.includes(continent))\n .map(({ iso }) => iso),\n },\n };\n }\n\n if (settings.notifications) {\n updatedSettings = {\n ...updatedSettings,\n newsletter: {\n ...updatedSettings.newsletter,\n frequency: newsletterFrequencies.WEEKLY,\n newsTypes: [\n ...newsToArtifactTypes.RATING_NEWS,\n ...newsToArtifactTypes.RESEARCH,\n ...newsToArtifactTypes.COMPANY_NEWS,\n ],\n },\n };\n }\n\n if (updatedSettings) {\n dispatch(savePreferencesAction(updatedSettings));\n }\n\n dispatch(\n addNotificationAction({\n variant: 'success',\n message: t('Your answers has been saved.'),\n }),\n );\n onClose();\n });\n })\n .catch(() => {\n dispatch(\n addNotificationAction({\n variant: 'error',\n message: t('Failed to save answers. Please try again or contact.'),\n }),\n );\n onClose();\n });\n };\n\n const formFields = data[currentStep].questions.map(\n ({ questionLabel, questionSubLabel, type, options, questionId }) => {\n const handleRemoveValue = value => removeAnswer(questionId, value);\n\n return (\n <React.Fragment key={questionId}>\n {params.isHeaderVisible && (\n <QuestionnaireStepHeader label={questionLabel} subLabel={questionSubLabel} />\n )}\n <StyledEngineProvider injectFirst>\n <ThemeProvider\n theme={{\n ...theme,\n overrides: {\n ...theme.overrides,\n ...formTheme.overrides,\n },\n }}\n >\n <QuestionnaireFormFieldsBuilder\n type={type}\n options={values(options)}\n questionId={questionId}\n onSetValue={setAnswer}\n onRemoveValue={handleRemoveValue}\n onRemoveValues={removeAnswers}\n onPushValue={pushAnswer}\n step={currentStep}\n />\n </ThemeProvider>\n </StyledEngineProvider>\n </React.Fragment>\n );\n },\n );\n\n return (\n <>\n <DialogTitleWithClose onClose={onClose} />\n <DialogContent>\n <QuestionnaireContext.Provider value={{ setParam }}>\n {!showIntro ? (\n <QuestionnaireStepper stepsNumber={data.length} current={currentStep} />\n ) : null}\n {showIntro ? <QuestionnaireIntro /> : formFields}\n </QuestionnaireContext.Provider>\n </DialogContent>\n <DialogActions>\n {showPreviousButton && (\n <QuestionnairePreviousButton onClick={handlePreviousClick}>\n {t('Previous')}\n </QuestionnairePreviousButton>\n )}\n {showSubmitButton ? (\n <QuestionnaireNextButton onClick={handleSubmit} disabled={submitted}>\n {t('Submit')}\n </QuestionnaireNextButton>\n ) : null}\n {showIntro ? (\n <QuestionnaireNextButton onClick={() => setShowIntro(false)}>\n {t('Next')}\n </QuestionnaireNextButton>\n ) : null}\n {!showIntro && !showSubmitButton ? (\n <QuestionnaireNextButton onClick={handleNextClick} disabled={!params.isValidate}>\n {t('Next')}\n </QuestionnaireNextButton>\n ) : null}\n </DialogActions>\n </>\n );\n};\n\nQuestionnaireForm.propTypes = {\n data: PropTypes.arrayOf(\n PropTypes.shape({\n stepId: PropTypes.number,\n questions: PropTypes.array,\n }),\n ).isRequired,\n onClose: PropTypes.func.isRequired,\n qualificationId: PropTypes.number.isRequired,\n};\n\nexport default QuestionnaireForm;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Dialog from '@mui/material/Dialog';\nimport { makeStyles } from '@mui/styles';\n\nimport { getQuestionnaireData } from 'services';\nimport { Loader } from 'ui';\nimport QuestionnaireForm from './QuestionnaireForm';\n\nconst useStyles = makeStyles(theme => ({\n loader: {\n paddingTop: theme.spacing(4),\n paddingBottom: theme.spacing(4),\n },\n}));\nconst useDialogStyles = makeStyles({\n paper: {\n maxWidth: 1300,\n },\n});\n\nconst Questionnaire = ({ qualificationId }) => {\n const [isModalOpen, setIsModalOpen] = useState(true);\n const [isPending, setIsPending] = useState(true);\n const [questionsSteps, setQuestionsSteps] = useState([]);\n const classes = useStyles();\n const dialogClasses = useDialogStyles();\n\n const handleClose = () => setIsModalOpen(false);\n\n useEffect(() => {\n const fetchData = async () => {\n const questions = await getQuestionnaireData(qualificationId);\n\n setQuestionsSteps(questions);\n setIsPending(false);\n };\n\n try {\n fetchData();\n } catch (e) {\n setIsModalOpen(false);\n }\n }, [qualificationId]);\n\n return (\n <Dialog open={isModalOpen} classes={dialogClasses} fullWidth>\n {isPending ? (\n <Loader classes={classes.loader} center />\n ) : (\n <QuestionnaireForm\n data={questionsSteps}\n qualificationId={qualificationId}\n onClose={handleClose}\n />\n )}\n </Dialog>\n );\n};\n\nQuestionnaire.propTypes = {\n qualificationId: PropTypes.number.isRequired,\n};\n\nexport default Questionnaire;\n","var _defs, _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgSdgLogo = function SvgSdgLogo(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 217,\n height: 34,\n viewBox: \"0 0 217 34\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"pattern\", {\n id: \"sdg-logo_svg__a\",\n preserveAspectRatio: \"none\",\n width: \"100%\",\n height: \"100%\",\n viewBox: \"0 0 2877 450\"\n }, /*#__PURE__*/React.createElement(\"image\", {\n width: 2877,\n height: 450,\n xlinkHref: \"data:image/png;base64,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\"\n })))), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fill: \"url(#sdg-logo_svg__a)\",\n d: \"M0 0h217v34H0z\"\n })));\n};\n\nexport default SvgSdgLogo;","import Box from '@mui/material/Box';\nimport styled from 'styled-components';\nimport { SIZES } from '@scope/scope-one-ui/theme';\nimport BarChartIcon from '@mui/icons-material/BarChart';\nimport { theme } from '../../../theme';\n\nexport const Wrapper = styled(Box)`\n position: relative;\n height: ${SIZES.spacing(9.75)};\n border-radius: 6px;\n box-shadow: 0px 3px 6px #00000029;\n color: ${theme.palette.primary.contrastText};\n background-color: ${theme.palette.custom.creditAnalysisEvents};\n\n img {\n position: absolute;\n opacity: 0.54;\n width: 100%;\n height: 100%;\n object-fit: cover;\n border-radius: 6px;\n z-index: 1;\n }\n`;\n\nexport const BoxStyled = styled(Box)`\n position: relative;\n z-index: 2;\n padding: ${SIZES.spacing(2.375)};\n align-items: center;\n display: flex;\n justify-content: space-between;\n\n button {\n color: ${theme.palette.primary.contrastText};\n border-color: ${theme.palette.primary.contrastText};\n\n :hover {\n border-color: ${theme.palette.primary.contrastText};\n background-color: ${theme.palette.primary.contrastText};\n color: ${theme.palette.primary.main};\n }\n }\n`;\n\nexport const BarChartIconWrapper = styled(Box)`\n width: ${SIZES.spacing(5)};\n height: ${SIZES.spacing(5)};\n border-radius: 50%;\n background-color: ${theme.palette.primary.contrastText};\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport const BarChartIconStyled = styled(BarChartIcon)`\n color: ${theme.palette.custom.creditAnalysisEvents};\n`;\n","import { Box, Dialog } from '@mui/material';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\nimport styled from 'styled-components';\n\nexport const DialogStyled = styled(Dialog)`\n border-radius: ${SIZES.spacing(1)};\n`;\n\nexport const ModalHeader = styled(Box)`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding-bottom: ${SIZES.spacing(1)};\n border-bottom: 1px solid ${COLORS.border.main};\n\n svg {\n cursor: pointer;\n }\n`;\n\nexport const ImageWrapper = styled(Box)`\n img {\n width: 100%;\n height: 100%;\n }\n`;\n","import { FC } from 'react';\nimport { Box, Button, Typography } from '@mui/material';\nimport React from 'react';\nimport CloseIcon from '@mui/icons-material/Close';\nimport CloudDownloadIcon from '@mui/icons-material/CloudDownload';\n// @ts-ignore TS2307: Cannot find module 'assets/pdfs/esg-imp-demo.pdf' or its corresponding type declarations\nimport EsgImpDemo from 'assets/pdfs/esg-imp-demo.pdf';\nimport esg from 'assets/images/esg-baner.jpg';\nimport { ESGLearnMoreModalProps } from './ESGLearnMoreModal.d';\nimport { DialogStyled, ModalHeader, ImageWrapper } from './ESGLearnMoreModal.styled';\n\nexport const ESGLearnMoreModal: FC<ESGLearnMoreModalProps> = ({\n open,\n onClose,\n onContactSales,\n}) => {\n return (\n <DialogStyled open={open} onClose={onClose} maxWidth=\"md\">\n <Box p={3}>\n <ModalHeader>\n <Typography variant=\"h5\">ESG Impact assessment</Typography>\n <CloseIcon onClick={onClose} />\n </ModalHeader>\n <Box my={4}>\n <Typography variant=\"subtitle1\">\n Zoom into the company’s sustainability profile with ESG impact assessment!\n </Typography>\n </Box>\n <ImageWrapper>\n <img src={esg} alt=\"\" />\n </ImageWrapper>\n <Box my={4}>\n <Typography variant=\"subtitle1\">\n Learn about the relative ESG industry position of a company and how Scope ESG scores its\n ambition to reach relevant sustainability targets.\n </Typography>\n </Box>\n <Box display=\"flex\" justifyContent=\"flex-end\" mt={4}>\n <Box mr={2}>\n <Button\n startIcon={<CloudDownloadIcon />}\n variant=\"contained\"\n href={EsgImpDemo}\n download=\"esg-imp-demo.pdf\"\n >\n Download sample report\n </Button>\n </Box>\n <Button variant=\"contained\" onClick={onContactSales}>\n Contact Sales\n </Button>\n </Box>\n </Box>\n </DialogStyled>\n );\n};\n","import Box from '@mui/material/Box';\nimport React, { useState } from 'react';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport { useDispatch } from 'react-redux';\nimport esg from '../../../assets/images/esg-baner.jpg';\nimport {\n Wrapper,\n BoxStyled,\n BarChartIconStyled,\n BarChartIconWrapper,\n} from './ESGLearnMoreBar.styled';\nimport { ESGLearnMoreModal } from '../Modals/ESGLearnMoreModal/ESGLearnMoreModal';\nimport { MessageModal } from '../../../ui/Modals';\nimport { sendMessageToSales } from '../../shop/services';\nimport { addNotificationAction } from '../../../store/notifications/notificationsActions';\n\nexport const ESGLearnMoreBar = () => {\n const dispatch = useDispatch();\n const [openModal, setModalOpen] = useState(false);\n const [messageModalOpen, setMessageModalOpen] = useState(false);\n const toggleModal = () => setModalOpen(!openModal);\n const toggleMessageModal = () => {\n setModalOpen(!openModal);\n setMessageModalOpen(!messageModalOpen);\n };\n\n const sendMessage = (messageData: string) => {\n sendMessageToSales(messageData)\n .then(() => {\n dispatch(\n addNotificationAction({\n message: 'Message sent successfully',\n variant: 'success',\n }),\n );\n })\n .catch(() => {\n dispatch(\n addNotificationAction({\n message: 'Failed to send a message',\n variant: 'error',\n }),\n );\n });\n };\n\n return (\n <Wrapper mb={4}>\n <img src={esg} alt=\"\" />\n <BoxStyled>\n <Box display=\"flex\" alignItems=\"center\">\n <BarChartIconWrapper mr={2}>\n <BarChartIconStyled />\n </BarChartIconWrapper>\n <Box>\n <Typography fontWeight=\"bold\">Interested in ESG Impact assessment?</Typography>\n <Typography variant=\"subtitle2\">\n Learn more about the relative position of company in the industry.\n </Typography>\n </Box>\n </Box>\n <Button variant=\"outlined\" onClick={toggleModal}>\n LEARN MORE\n </Button>\n </BoxStyled>\n <ESGLearnMoreModal\n onClose={toggleModal}\n open={openModal}\n onContactSales={toggleMessageModal}\n />\n <MessageModal\n title=\"Contact Sales\"\n open={messageModalOpen}\n onClose={toggleMessageModal}\n onSendMessage={sendMessage}\n />\n </Wrapper>\n );\n};\n","import styled from 'styled-components';\nimport { Box, Widget as CoreWidget } from '@scope/scope-one-ui/core';\nimport { COLORS } from '@scope/scope-one-ui/theme';\n\nexport const Widget = styled(CoreWidget)`\n border: none;\n`;\n\nexport const Grid = styled(Box)`\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n`;\n\nexport const Cell = styled(Box)`\n &:not(:nth-child(3n)) {\n border-right: 1px solid ${COLORS.border.main};\n }\n`;\n\nexport const ChartTitle = styled(Box)`\n border-top: 1px solid ${COLORS.border.main};\n`;\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n Box,\n Divider,\n PieChartWithLegend,\n ProgressList,\n Tooltip,\n Typography,\n} from '@scope/scope-one-ui/core';\nimport Info from 'assets/icons/info.svg';\nimport { theme } from 'theme';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\nimport { Cell, ChartTitle, Grid } from './ESGMaterialityMap.styled';\nimport { MaterialityMap } from '../types';\nimport { ESGMaterialityMapProps } from './ESGMaterialityMap.d';\n\nconst getData = (mapData: MaterialityMap, chartData: MaterialityMap) => {\n const { chartShort } = theme.customPalettes;\n\n const getMinMax = (values: number[]) => ({\n min: Math.min(...values) * 1.25,\n max: Math.max(...values) * 1.25,\n });\n\n const parse = (variant: 'e' | 's' | 'g') => ({\n title: { e: 'Environment', s: 'Social', g: 'Governance' }[variant],\n indicators: mapData[variant].map(({ label, value }) => ({\n label,\n count: value * 100,\n color: chartShort[0],\n })),\n ...getMinMax(mapData[variant].map(({ value }) => value * 100)),\n chart: chartData[variant].map(({ label, value }, index) => ({\n name: label,\n value: value * 100,\n color: chartShort[index],\n })),\n });\n\n return Object.entries({\n environment: parse('e'),\n social: parse('s'),\n governance: parse('g'),\n });\n};\n\nexport const ESGMaterialityMap: FC<ESGMaterialityMapProps> = ({ mapData, chartData }) => {\n const { t } = useTranslation();\n\n const data = getData(mapData, chartData);\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" p={2} gridGap={2}>\n <Box display=\"flex\" my={1} gridGap={2} alignItems=\"center\">\n <Typography variant=\"sectionHeader\" color={COLORS.typography.label}>\n {t('Materiality map')}\n </Typography>\n <Tooltip\n position=\"right\"\n content={\n <Box display=\"flex\" flexDirection=\"column\">\n <Typography>\n {t(\n 'Percentage of impact by indicator is measured as share of total company revenue.',\n )}\n </Typography>\n <Typography>\n {t(\n 'Value chain distributions are displayed as shares adding up to 100% per E-S-G dimension.',\n )}\n </Typography>\n </Box>\n }\n >\n <Info width={SIZES.spacing(2)} height={SIZES.spacing(2)} color={COLORS.typography.main} />\n </Tooltip>\n </Box>\n <Divider />\n <Grid>\n {data.map(([key, { title, indicators, min, max }]) => (\n <Cell>\n <Box display=\"flex\" flexDirection=\"column\">\n <Box display=\"flex\" p={2}>\n <Typography variant=\"h2\" color={COLORS.typography.label}>\n {title}\n </Typography>\n </Box>\n <ProgressList\n key={`${key}_indicators`}\n percentage\n total={max}\n min={min}\n colored\n data={indicators}\n numberFormatOptions={{ maximumFractionDigits: 1 }}\n />\n </Box>\n </Cell>\n ))}\n {data.map(([key, { chart }]) => (\n <Cell key={`${key}_chart`} display=\"flex\" flexDirection=\"column\" p={2} gridGap={2}>\n <ChartTitle display=\"flex\" pt={4}>\n <Typography color={COLORS.typography.main} variant=\"body2\">\n COMPANY VERSUS VALUE-CHAIN IMPACT\n </Typography>\n </ChartTitle>\n <PieChartWithLegend chartData={chart} layout=\"horizontal\" />\n </Cell>\n ))}\n </Grid>\n </Box>\n );\n};\n","var _defs,_g;function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React from\"react\";var SvgSdgCategories=function SvgSdgCategories(props){return/*#__PURE__*/React.createElement(\"svg\",_extends({width:613,height:301,viewBox:\"0 0 613 301\"},props),_defs||(_defs=/*#__PURE__*/React.createElement(\"defs\",null,/*#__PURE__*/React.createElement(\"pattern\",{id:\"sdg-categories_svg__a\",preserveAspectRatio:\"none\",width:\"100%\",height:\"100%\",viewBox:\"0 0 1500 1500\"},/*#__PURE__*/React.createElement(\"image\",{width:1500,height:1500,xlinkHref:\"data:image/png;base64,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QJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAADC1McYnpQGYhsY9BTkAAAAASUVORK5CYII=\"})),/*#__PURE__*/React.createElement(\"pattern\",{id:\"sdg-categories_svg__b\",preserveAspectRatio:\"none\",width:\"100%\",height:\"100%\",viewBox:\"0 0 1500 1500\"},/*#__PURE__*/React.createElement(\"image\",{width:1500,height:1500,xlinkHref:\"data:image/png;base64,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ZQCg7OKPmJ3e+/vgcm9Ofv5Z9iD+P595B57Wu/c2/WF8Oa1W63fD0PnVG7afT34v/j+lfi3wS+/+YXYHre7xu/dP/Ds9jO/Sp58/gL/6zb/HX3+v+flf35sd/xIpA1EGAAAAIAFPXwIAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASOCCRQfgN8LS5db8OPxumPsIpJe93slefd/ae+5aAABVF/79H//GRQTgvU6vfeVhq79iPSi57Nk32c5XrhIAUGluXwLgJ4oM1RFGV8PFLRcMAKg0UQaA98JoU5GhQsLyRlgYu2IAQHWJMgC8F5Y3LAUVs3jZFQMAqkuUAeAn3YGloFqMowYAKk2UAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQBAAAASECUAQAAAEhAlAEAAABIQJQB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\"})),/*#__PURE__*/React.createElement(\"pattern\",{id:\"sdg-categories_svg__c\",preserveAspectRatio:\"none\",width:\"100%\",height:\"100%\",viewBox:\"0 0 1500 1500\"},/*#__PURE__*/React.createElement(\"image\",{width:1500,height:1500,xlinkHref:\"data:image/png;base64,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AYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAAGIMgAAAAABiDIAAAAAAYgyAAAAAMstl8v9P/wjK6h1/be8AAAAAElFTkSuQmCC\"})))),_g||(_g=/*#__PURE__*/React.createElement(\"g\",{\"data-name\":\"Group 162093\",transform:\"translate(-960 -1433.183)\"},/*#__PURE__*/React.createElement(\"image\",{width:94,height:94,transform:\"translate(960 1433.183)\",xlinkHref:\"data:image/png;base64,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gAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZAAAAgAhEGQAAAIAIRBkAAACACEQZ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AABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABEIJQBAAAAiEAoAwAAABCBUAYAAAAgAqEMAAAAQARCGQAAAIAIhDIAAAAAEQhlAAAAACIQygAAAABk7cCBA/8fLuIACPdtsMUAAAAASUVORK5CYII=\"}),/*#__PURE__*/React.createElement(\"image\",{width:93,height:93,transform:\"translate(1064 1433.183)\",xlinkHref:\"data:image/png;base64,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AEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQ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lAEAAAAIIMoAAAAABBBlAAAAAAKIMgAAAAABRBkAAACAAKIMAAAAQABRBgAAACCAKAMAAAAQQJQBAAAACCDKAAAAAAQQZQAAAAACiDIAAAAAAUQZAAAAgACiDAAAAEAAUQYAAAAggCgDAAAAEECUAQAAAAggygAAAAAEEGUAAAAAAogyAAAAAAFEGQAAAIAAogwAAABAAFEGAAAAIIAoAwAAABBAlAEAAAAIIMoAAAAABBBlAAAAAAKIMgAAAAABRBkAAACAAKIMAAAAQABRBgAAACCAKAMAAAAQQJQBAAAACCDKAAAAAAQQZQAAAAACiDIAAAAAAUQZAAAAgACiDAAAAEAAUQYAAAAggCgDAAAAEECUAQAAAAggygAAAAAEEGUAAAAAAogyAAAAAAFEGQAAAIAAogwAAABAAFEGAAAAIIAoAwAAABBAlAEAAAAIIMoAAAAABBBlAAAAAAKIMgAAAAABRBkAAACAAKIMAAAAQABRBgAAACCAKAMAAAAQQJQBAAAACCDKAAAAAAQQZQAAAAACiDIAAAAAAUQZAAAAgACiDAAAAEAAUQYAAAAggCgDAAAAEECUAQAAAAggygAAAAA027lz5/4X/74+r7MyxiQAAAAASUVORK5CYII=\"}),/*#__PURE__*/React.createElement(\"image\",{width:92,height:92,transform:\"translate(1168 1433.183)\",xlinkHref:\"data:image/png;base64,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AAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwAAABADoQyAAAAADkQygAAAADkQCgDAAAAkAOhDAAAAEAOhDIAAAAAORDKAAAAAORAKAMAAACQA6EMAAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwAAABADoQyAAAAADkQygAAAADkQCgDAAAAkAOhDAAAAEAOhDIAAAAAORDKAAAAAORAKAMAAACQA6EMAAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwAAABADoQyAAAAADkQygAAAADkQCgDAAAAkAOhDAAAAEAOhDIAAAAAORDKAAAAAORAKAMAAACQA6EMAAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwAAABADoQyAAAAADkQygAAAADkQCgDAAAAkAOhDAAAAEAOhDIAAAAAORDKAAAAAORAKAMAAACQA6EMAAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwAAABADoQyAAAAADkQygAAAADkQCgDAAAAkAOhDAAAAEAOhDIAAAAAORDKAAAAAORAKAMAAACQA6EMAAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwAAABADoQyAAAAADkQygAAAADkQCgDAAAAkAOhDAAAAEAOhDIAAAAAORDKAAAAAORAKAMAAACQA6EMAAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwAAABADoQyAAAAADkQygAAAADkQCgDAAAAkAOhDAAAAEAOhDIAAAAAORDKAAAAAORAKAMAAACQA6EMAAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwAAABADoQyAAAAADkQygAAAADkQCgDAAAAkAOhDAAAAEAOhDIAAAAAORDKAAAAAORAKAMAAACQA6EMAAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwAAABADoQyAAAAADkQygAAAADkQCgDAAAAkAOhDAAAAEAOhDIAAAAAORDKAAAAAORAKAMAAACQA6EMAAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwAAABADoQyAAAAADkQygAAAADkQCgDAAAAkAOhDAAAAEAOhDIAAAAAORDKAAAAAORAKAMAAACQA6EMAAAAQA6EMgAAAAA5EMoAAAAA5EAoAwAAAJADoQwA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vaXWyvXz715YvHyutfL63/xF9kOn/+z77neGlQAAUQYAAAAgAYt+AQAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAABIQZQAAAAASEGUAAAAAEhBlAAAAAKLNzc39f3JzxXm8SAP0AAAAAElFTkSuQmCC\"}),/*#__PURE__*/React.createElement(\"image\",{width:94,height:94,transform:\"translate(1270 1433.183)\",xlinkHref:\"data:image/png;base64,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AEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAP7V4TAAAgAElEQVQAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZAAAAgABEGQAAAIAARBkAAACAAEQZ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hDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAGc50pcAAAOoSURBVAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAACYQyAAAAAAmEMgAAAAAJhDIAAAAA0zY3N/f/rjX8RZZfOsMAAAAASUVORK5CYII=\"}),/*#__PURE__*/React.createElement(\"path\",{transform:\"translate(1374 1433.183)\",fill:\"url(#sdg-categories_svg__a)\",d:\"M0 0h95v94H0z\"}),/*#__PURE__*/React.createElement(\"image\",{width:93,height:93,transform:\"translate(1479 1433.183)\",xlinkHref:\"data:image/png;base64,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KAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoAAAAABCCUAQAAAAhAKAMAAAAQgFAGAAAAIAChDAAAAEAAQhkAAACAAIQyAAAAAAEIZQAAAAACEMoA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AAAEEGUAAAAAAogyAAAAAAFEGQAAAIAAogwAAABAAFEGAAAAIIAoAwAAABBAlAEAAAAIIMoAAAAABBBlAAAAAAKIMgAAAAABRBkAAACAAKIMAAAAQABRBgAAACCAKAMAAAAQQJQBAAAACCDKAAAAAAQQZQAAAAACiDIAAAAAAUQZAAAAgACiDAAAAEAAUQYAAAAggCgDAAAAEECUAQAAAAggygAAAAAEEGUAAAAAAogyAAAAAAFEGQAAAIAAogwAAABAAFEGAAAAIIAoAwAAABBAlAEAAAAIIMoAAAAABBBlAAAAAAKIMgAAAAABRBkAAACAAKIMAAAAQABRBgAAACCAKAMAAAAQQJQBAAAACCDKAAAAAAQQZQAAAAACiDIAAAAAAUQZAAAAgACiDAAAAEAAUQYAAAAggCgDAAAAEECUAQAAAAggygAAAAAEEGUAAAAAAogyAAAAAAFEGQAAAIAAogwAAABAAFEGAAAAIIAoAwAAABBAlAEAAAAIIMoAAAAABBBlAAAAAAKIMgAAAAABRBkAAACAAKIMAAAAQABRBgAAACCAKAMAAAAQQJQBAAAACCDKAAAAAAQQZQAAAAACiDIAAAAAAUQZAAAAgACiDAAAAEAAUQYAAAAggCgDAAAAEECUAQAAAAggygAAAAAEEGUAAAAAAogyAAAAAAFEGQAAAIAAogwAAABAAFEGAAAAIIAoAwAAABBAlAEAAAAIIMoAAAAABBBlAAAAAAKIMgAAAAABRBkAAACAAKIMAAAAQABRBgAAACCAKAMAAAAQQJQBAAAACCDKAAAAAAQQZQAAAAACiDIAAAAAAUQZAAAAgACiDAAAAEAAUQYAAAAggCgDAAAAEECUAQAAAAggygAAAAAEEGUAAAAAAogyAAAAAAFEGQAAAIAAogwAAABAAFEGAAAAIIAoAwAAABBAlAEAAAAIIMoAAAAABBBlAAAAAAKIMgAAAAABRBkAAACAAKIMAAAAQABRBgAAACCAKAMAAAAQQJQBAAAACCDKAAAAAAQQZQAAAAACiDIAAAAAAUQZAAAAgACiDAAAAEAAUQYAAACgtxs3bvwvAy5RaUYQAUAAAAAASUVORK5CYII=\"}),/*#__PURE__*/React.createElement(\"image\",{width:94,height:94,transform:\"translate(960 1537.183)\",xlinkHref:\"data:image/png;base64,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\"}),/*#__PURE__*/React.createElement(\"image\",{width:93,height:93,transform:\"translate(1064 1537.183)\",xlinkHref:\"data:image/png;base64,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UQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAAAAAAJEGQAAAIAAUQYAAAAgQJQBAAAACBBlAOARbv9yd/hgxFf/c88F4kGWBABUQ5QBuO/erT1z4Ne+unPvyzt3C5nHFx99OnSMTosvib3tnaFjdJf1ADAKUQbgvru3Pr/3mS7Dgf98/8OiRnHrRlnfh6ASFsPnN38xdIzuulXYH0yAdhFlAA7svPmOUbBv9733i5rEJ29vDR2jo0pYDHvbOyo2++59tudpPoBRiDIAB3bfvXH741K2ESHo1o0PS3saf297Z++mFwQ4sXdzp5DF+eHLrw8do4usBIARiTIAX/vgxVe/umMHzU67/fHu9p+/UeAEPnjxVdGw425/vPvBi68WMoO97Z1//cu/HjpMt2z/8A0bygCM6Lf/9Hf/wAwB9n155+5//ezn3zp35ne+NWckHbR3c+ef/+wvytni90H/979f/sc//uz3v/fHFmc3Fbg4//vfPrn32d7ChfNDn9AJ2z98Y/fdG641wIh+6+9/73tmCPCQ05cunr50ceaZ+aFPqNPtj3c/eXurFTcY/bWVs6+8YHF2x73P9nbefKfYxTm7cOqPXnmhv7o89AnV2n3vJ//+5jt3b33uEgOMTpQBeKy5pcWpb86ceu47j/sB2u7LO3e/+OjTe7f2Wnd3YXF2wec3f9GWxTndmz35h/25pcXp3uzQh1Ri/w/m7V/ulvk4IUBLiTIAAAAAATb6BQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAAACRBkAAACAAFEGAAAAIECUAQAAAAgQZQAAAACaduLEif8HsE4kmxJOJ5cAAAAASUVORK5CYII=\"}),/*#__PURE__*/React.createElement(\"image\",{width:92,height:92,transform:\"translate(1168 1537.183)\",xlinkHref:\"data:image/png;base64,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\"}),/*#__PURE__*/React.createElement(\"image\",{width:94,height:94,transform:\"translate(1270 1537.183)\",xlinkHref:\"data:image/png;base64,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AAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAACw2+Px+AIBitXECIehhgAAAABJRU5ErkJggg==\"}),/*#__PURE__*/React.createElement(\"path\",{transform:\"translate(1374 1537.183)\",fill:\"url(#sdg-categories_svg__b)\",d:\"M0 0h95v94H0z\"}),/*#__PURE__*/React.createElement(\"image\",{width:93,height:93,transform:\"translate(1479 1537.183)\",xlinkHref:\"data:image/png;base64,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Bv9/O3ZMAAAAwzCo/lXPxfKADAAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAICAlAEAAAAISBkAAACAgJQBAAAACEgZAAAAgICUAQAAAAhIGQAAAIBv2w4nASeTJwfDtQAAAABJRU5ErkJggg==\"}),/*#__PURE__*/React.createElement(\"image\",{width:94,height:94,transform:\"translate(960 1640.183)\",xlinkHref:\"data:image/png;base64,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AAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAABCQMgAAAAABKQMAAAAQkDIAAAAAASkDAAAAEJAyAAAAAAEpAwAAAPBt2wFafed9WIakSgAAAABJRU5ErkJggg==\"}),/*#__PURE__*/React.createElement(\"image\",{width:93,height:93,transform:\"translate(1064 1640.183)\",xlinkHref:\"data:image/png;base64,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lAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAAhDKAAAAAAQglAEAAAAIQCgDAAAAEIBQBgAAACAAoQwAAABAAEIZAAAAgACEMgAAAAABCGUAAAAAWm3fvn3/H97TPUBKD1svAAAAAElFTkSuQmCC\"}),/*#__PURE__*/React.createElement(\"image\",{width:92,height:92,transform:\"translate(1168 1640.183)\",xlinkHref:\"data:image/png;base64,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AAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAABAQJQBAAAACIgyAAAAAAFRBgAAACAgygAAAAAERBkAAACAgCgDAAAAEBBlAAAAAAKiDAAAAEBAlAEAAAAIiDIAAAAAAVEGAAAAICDKAAAAAAREGQAAAICAKAMAAAAQEGUAAAAAAqIMAAAAQECUAQAAAAiIMgAAAAABUQYAAAAgIMoAAAAABEQZAAAAgIAoAwAAABAQZQAAAAACogwAAADAqzY3N/cPvIHbUwBPAIEAAAAASUVORK5CYII=\"}),/*#__PURE__*/React.createElement(\"image\",{width:94,height:94,transform:\"translate(1270 1640.183)\",xlinkHref:\"data:image/png;base64,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KIgoUzZOHKAxUQYAgILMzi+P3/QvvSyWavWzV++UfQWAhkQZAACKM/r1raVa3eBlcPq724vOGqAhUQYAgOIs1uqj39wyeNObrM6dveYxGYBViDIAABRq7EbVJabmtlSrD395pewrAKyBKAMAQNFGxq9P+yhPk1qq1Q+fueTiEsBaiDIAAAQcPnPp2+l7lm8y/xYZn8EGWKO2loPHbQUAQMEe/fX4wo+/vPJy++DeV23fHKYfLAyfu6LIAKydKAMAQMzln36brM4deWP3jo52p7Cpff797Y/PT8z9USv7EADrIcoAAJA0O7989tqd1taWvTu3STOb0fjN6vvnrl50GQ1g/VpbTp43GwAAG8Fwf+/wwJ7h/t7t6syGN1mduzh19+L03dn55bJvAfC8RBkAADacvu7Ovu5tT347nc6GMjEz9+T3YdmHAPg/bLEiAAAbzez8sucvAGh6PokNAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABAgCgDAAAAECDKAAAAAASIMgAAAAABogwAAABA0VpaWv4G2cpFEOCWoPYAAAAASUVORK5CYII=\"}),/*#__PURE__*/React.createElement(\"path\",{transform:\"translate(1374 1639.183)\",fill:\"url(#sdg-categories_svg__c)\",d:\"M0 0h95v94H0z\"}),/*#__PURE__*/React.createElement(\"path\",{\"data-name\":\"E-WEB-Goal-17\",fill:\"#f2f1f1\",d:\"M1479 1640.183h94v94h-94z\"}),/*#__PURE__*/React.createElement(\"image\",{\"data-name\":\"SDG Wheel_Transparent_WEB\",width:60,height:60,transform:\"translate(1496 1657.183)\",xlinkHref:\"data:image/png;base64,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\"}))));};export default SvgSdgCategories;","var _circle, _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgInfoOutlined = function SvgInfoOutlined(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"1 1 22 22\",\n fill: \"#001469\",\n stroke: \"#fff\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 12,\n cy: 12,\n r: 10,\n stroke: \"#001469\"\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n strokeWidth: 2.5,\n d: \"M12 17v-5M12 7h0\"\n })));\n};\n\nexport default SvgInfoOutlined;","import { Box } from '@scope/scope-one-ui/core';\nimport styled from 'styled-components';\n\nexport const Legend = styled(Box)`\n svg {\n flex-shrink: 0;\n }\n\n max-width: min-content;\n`;\n","import { Box, Divider, PolarChart, Typography } from '@scope/scope-one-ui/core';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\nimport React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Logo from 'assets/images/sdg-logo.svg';\nimport Categories from 'assets/images/sdg-categories.svg';\nimport Info from 'assets/icons/info-outlined.svg';\nimport { Legend } from './ESGRelevanceMapping.styled';\nimport { ESGRelevanceMappingProps } from './ESGRelevanceMapping.d';\nimport { RelevanceMapping } from '../types';\n\nconst getChartData = (data?: RelevanceMapping) => {\n if (!data) return [];\n\n return [\n { name: 'No Poverty', color: '#e5243b', value: data.sdg01 },\n { name: 'Zero Hunger', color: '#dda63a', value: data.sdg02 },\n { name: 'Good Health and Well-being', color: '#4c9f38', value: data.sdg03 },\n { name: 'Quality Education', color: '#c5192d', value: data.sdg04 },\n { name: 'Gender Equality', color: '#ff3a21', value: data.sdg05 },\n { name: 'Clean Water and Sanitation', color: '#26bde2', value: data.sdg06 },\n { name: 'Affordable and Clean Energy', color: '#fcc30b', value: data.sdg07 },\n { name: 'Decent Work and Economic Growth', color: '#a21942', value: data.sdg08 },\n { name: 'Industry, Innovation and Infrastructure', color: '#fd6925', value: data.sdg09 },\n { name: 'Reduced Inequalities', color: '#dd1367', value: data.sdg10 },\n { name: 'Sustainable Cities and Communities', color: '#fd9d24', value: data.sdg11 },\n { name: 'Responsible Consumption and Production', color: '#bf8b2e', value: data.sdg12 },\n { name: 'Climate Action', color: '#3f7e44', value: data.sdg13 },\n { name: 'Life Below Water', color: '#0a97d9', value: data.sdg14 },\n { name: 'Life On Land', color: '#56c02b', value: data.sdg15 },\n { name: 'Peace, Justice and Strong Institutions', color: '#00689d', value: data.sdg16 },\n { name: 'Partnerships for the Goals', color: '#19486a', value: data.sdg17 },\n ];\n};\n\nexport const ESGRelevanceMapping: FC<ESGRelevanceMappingProps> = ({ data }) => {\n const { t } = useTranslation();\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" p={2} gridGap={2}>\n <Box display=\"flex\" my={1} gridGap={2} alignItems=\"center\" justifyContent=\"space-between\">\n <Typography variant=\"sectionHeader\" color={COLORS.typography.label}>\n {t('SDG Relevance Mapping')}\n </Typography>\n <Logo />\n </Box>\n <Divider />\n <Box display=\"flex\" gridGap={8} justifyContent=\"space-between\" p={2}>\n <Box display=\"flex\" justifyContent=\"center\" flex={1}>\n <PolarChart data={getChartData(data)} />\n </Box>\n <Legend display=\"flex\" gridGap={8} flexDirection=\"column\">\n <Box display=\"flex\" alignItems=\"center\" gridGap={2}>\n <Info width={SIZES.spacing(2.25)} height={SIZES.spacing(2.25)} />\n <Typography variant=\"body2\" color={COLORS.typography.main}>\n {t(`A high SDG relevance signals that the sectoral activity of the company is important\n for goal achievement in operating countries with low achievement level on the\n respective goal.`)}\n </Typography>\n </Box>\n <Categories />\n </Legend>\n </Box>\n </Box>\n );\n};\n","import React, { useEffect, useState, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport { useTranslation } from 'react-i18next';\nimport { SummaryCard, HeadSquare, SummaryCardLineChart } from 'modules/common/SummaryCard';\nimport { SummaryCardRequestESG } from 'modules/ESG';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { creditRatingScalesMapping } from 'shared/mappings';\nimport { ratingConstants } from 'shared/constants/company';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { generalInformation } from 'shared/constants/summaryTab';\nimport { useStyles, useHeadSquareStyles } from 'shared/styles/summaryCard';\nimport { fetchEntityBasic } from 'services';\nimport { summaryCardDocumentsParser, summaryCardHistoryParser } from 'shared/parsers';\nimport { useDispatch } from 'react-redux';\nimport { refreshEntityAction } from 'store/entity/entityActions';\nimport { RatingStatus } from 'shared/types/ratingStatus';\nimport { useFeatures } from 'shared/hooks';\nimport Typography from '@mui/material/Typography';\nimport ESGScoreOverview from './ESGScoreOverview/ESGScoreOverview';\nimport ESGImpactOverview from './ESGImpactOverview';\nimport ESGLendingImpact from './ESGLendingImpact/ESGLendingImpact';\nimport { ESGLearnMoreBar } from './ESGLearnMoreBar/ESGLearnMoreBar';\nimport { ESGMaterialityMap } from './ESGMaterialityMap';\nimport { ESGRelevanceMapping } from './ESGRelevanceMapping';\nimport {\n useCompanyVsValueChain,\n useGetImpactIndustryAbsolute,\n useGetImpactIndustryRelative,\n useGetImpactRegionAbsolute,\n useGetImpactRegionRelative,\n useMaterialityMap,\n useGetScoreOverview,\n useSDGRelevanceMapping,\n useImpactReview,\n usePortfolioCoverage,\n} from './services/esgLendingService';\nimport { theme } from '../../theme';\nimport { getImpactOverview, getScoreOverview, getSummary } from './parsers';\n\nexport const ESG = ({ id, availability, industry, countryCode, selectedYear }) => {\n const { esgLendingData } = useFeatures();\n const classes = useStyles();\n const headSquareClasses = useHeadSquareStyles();\n const [entityData, setEntityData] = useState<{ isPending: boolean; data: any }>({\n isPending: true,\n data: null,\n });\n const { t } = useTranslation();\n const didUnmount = useRef(false);\n const dispatch = useDispatch();\n\n const { year } = selectedYear;\n\n const { data: companyVsValueChain } = useCompanyVsValueChain(id, year);\n const { data: impactIndustryAbsolute, loading: impactIndustryAbsoluteLoading } =\n useGetImpactIndustryAbsolute(id, year);\n const { data: impactIndustryRelative, loading: impactIndustryRelativeLoading } =\n useGetImpactIndustryRelative(id, year);\n const { data: impactRegionAbsolute, loading: impactRegionAbsoluteLoading } =\n useGetImpactRegionAbsolute(id, year);\n const { data: impactRegionRelative, loading: impactRegionRelativeLoading } =\n useGetImpactRegionRelative(id, year);\n const { data: materialityMap } = useMaterialityMap(id, year);\n const { data: scoreOverview, loading: scoreOverviewLoading } = useGetScoreOverview(id, year);\n const { data: relevanceMapping } = useSDGRelevanceMapping(id, year);\n const { data: impactReview, loading: impactReviewLoading } = useImpactReview(id, year);\n const { data: portfolioCoverage, loading: portfolioCoverageLoading } = usePortfolioCoverage(\n id,\n year,\n );\n\n const impactOverview = getImpactOverview(portfolioCoverage);\n const scoreOverviewData = getScoreOverview(scoreOverview);\n const esgScore = getSummary(impactReview);\n\n const lendingImpactLoading =\n impactIndustryAbsoluteLoading ||\n impactIndustryRelativeLoading ||\n impactRegionAbsoluteLoading ||\n impactRegionRelativeLoading;\n\n const { data_exists: dataExists, subscribed: isSubscribed, requestState } = availability || {};\n\n const isAvailable = !!esgScore;\n\n const showESGScoreSummaryCard = impactReviewLoading || (isAvailable && isSubscribed);\n\n const customScore = entityData?.data?.requestState === RatingStatus.DONE;\n\n const refreshEntity = () => {\n dispatch(refreshEntityAction());\n };\n\n const getEntityData = async () => {\n setEntityData((data) => ({ ...data, isPending: true }));\n\n try {\n const response = await fetchEntityBasic({\n id,\n ratingType: ratingTypes.ESG_IMPACT,\n });\n\n if (!didUnmount.current) {\n setEntityData(() => ({\n isPending: false,\n data: response.success ? response.data : null,\n }));\n }\n } catch (error) {\n if (!didUnmount.current) {\n setEntityData(() => ({ isPending: false, data: null }));\n }\n }\n };\n\n const getData = () => {\n if (dataExists) {\n getEntityData();\n }\n getScoreOverview();\n };\n\n const handleUnlocked = (unlocked) => {\n if (unlocked) refreshEntity();\n };\n\n const handleRequested = (requested) => {\n if (requested) refreshEntity();\n };\n\n useEffect(() => {\n if (id && selectedYear && availability) {\n getData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [id, selectedYear, availability]);\n\n useEffect(() => {\n return () => {\n didUnmount.current = true;\n };\n }, []);\n\n return (\n <>\n <Box mb={3}>\n {showESGScoreSummaryCard ? (\n <SummaryCard\n headSquare={\n <HeadSquare\n customScore={customScore}\n title={customScore ? '' : t('ESG.IMPACT_REVIEW_SCORE')}\n subtitle={customScore ? t('ESG.CUSTOM_SCORE_TOOLTIP') : ''}\n >\n <Typography\n color={\n generalInformation.includes('Unsolicited' && 'Without entity participation')\n ? theme.palette.custom.orangeAccent\n : ''\n }\n >\n <span className={headSquareClasses.score}>{esgScore?.score}</span>\n <span className={headSquareClasses.max}>/10</span>\n </Typography>\n </HeadSquare>\n }\n history={\n <SummaryCardLineChart\n history={summaryCardHistoryParser(esgScore?.history)}\n isESGImpact\n />\n }\n className={classes.summaryCard}\n isLoading={impactReviewLoading}\n dataQuality={impactReview?.dataQuality}\n data={{\n ...esgScore,\n documents: summaryCardDocumentsParser(esgScore?.documents),\n generalInformationList: generalInformation,\n ratingScalesData: creditRatingScalesMapping(\n portfolioTypes.ESG_ANALYSIS,\n ratingConstants.entityReview,\n ),\n }}\n />\n ) : (\n <div className={classes.summaryCard}>\n <SummaryCardRequestESG\n scopeoneId={id}\n dataExists={dataExists}\n isSubscribed={isSubscribed}\n isAvailable={isAvailable}\n requestState={requestState}\n industry={industry}\n countryCode={countryCode}\n onRequested={handleRequested}\n onUnlocked={handleUnlocked}\n />\n </div>\n )}\n </Box>\n <ESGLearnMoreBar />\n {isAvailable && (\n <>\n {impactOverview && (\n <Box mb={3}>\n <ESGImpactOverview data={impactOverview} loading={portfolioCoverageLoading} />\n </Box>\n )}\n {relevanceMapping && (\n <Box mb={3}>\n <Paper>\n <ESGRelevanceMapping data={relevanceMapping} />\n </Paper>\n </Box>\n )}\n {scoreOverviewData && (\n <Box mb={3}>\n <ESGScoreOverview scores={scoreOverviewData} loading={scoreOverviewLoading} />\n </Box>\n )}\n {esgLendingData &&\n !!impactIndustryAbsolute &&\n !!impactIndustryRelative &&\n !!impactRegionAbsolute &&\n !!impactRegionRelative && (\n <Box my={3}>\n <Paper>\n <ESGLendingImpact\n industriesAbsolute={impactIndustryAbsolute.results}\n industriesRelative={impactIndustryRelative.results}\n countriesAbsolute={impactRegionAbsolute.results}\n countriesRelative={impactRegionRelative.results}\n loading={lendingImpactLoading}\n />\n </Paper>\n </Box>\n )}\n {materialityMap && companyVsValueChain && (\n <Box mb={3}>\n <Paper>\n <ESGMaterialityMap mapData={materialityMap} chartData={companyVsValueChain} />\n </Paper>\n </Box>\n )}\n </>\n )}\n </>\n );\n};\n\nESG.defaultProps = {\n entityName: undefined,\n industry: undefined,\n countryCode: undefined,\n availability: undefined,\n selectedYear: {},\n};\n\nESG.propTypes = {\n id: PropTypes.string.isRequired,\n availability: PropTypes.shape({\n data_exists: PropTypes.bool,\n subscribed: PropTypes.bool,\n requestState: PropTypes.string,\n }),\n entityName: PropTypes.string,\n industry: PropTypes.string,\n countryCode: PropTypes.string,\n selectedYear: PropTypes.object,\n};\n\nexport default ESG;\n","import { useEffect, useRef } from 'react';\n\nconst usePrevious = value => {\n // The ref object is a generic container whose current property is mutable ...\n // ... and can hold any value, similar to an instance property on a class\n const ref = useRef();\n\n // Store current value in ref\n useEffect(() => {\n ref.current = value;\n }, [value]); // Only re-run if value changes\n\n // Return previous value (happens before update in useEffect above)\n return ref.current;\n};\n\nexport { usePrevious };\n","import { useEffect, useState } from 'react';\nimport { useNavigate, useLocation, useParams } from 'react-router-dom';\nimport { useDispatch, useSelector } from 'react-redux';\nimport isEqual from 'lodash/isEqual';\n\nimport { scrollToRef } from 'shared/functions';\nimport { getNewsFeedPreferencesIsPending, getNewsFeedShouldRefresh } from 'selectors/common';\nimport { useQuery } from 'shared/hooks';\nimport { usePrevious } from '../usePrevious/usePrevious';\n\nconst defaultPage = 1;\n\nexport const useArtifacts = ({\n getArtifactsAction,\n getArtifactsDataActionParams,\n query,\n customLimit,\n ref,\n useUrlParam = false,\n filters,\n}) => {\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const { pathname } = useLocation();\n const [localStatePage, setLocalStatePage] = useState(1);\n const { page } = useQuery();\n const { entityId } = useParams();\n\n const [limit, setLimit] = useState(customLimit || 6);\n const newsFeedPreferencesIsPending = useSelector(getNewsFeedPreferencesIsPending);\n const newsFeedShouldRefresh = useSelector(getNewsFeedShouldRefresh);\n const currentPage = useUrlParam ? +page || defaultPage : localStatePage;\n\n const previousFilters = usePrevious(filters);\n const previousPage = usePrevious(currentPage);\n\n const getArtifacts = (artifactPage) => {\n dispatch(\n getArtifactsAction({\n page: artifactPage,\n filters,\n query,\n limit,\n entityId,\n ...getArtifactsDataActionParams,\n }),\n );\n };\n\n useEffect(() => {\n const noParamChange = isEqual(filters, previousFilters) && isEqual(currentPage, previousPage);\n\n if (newsFeedPreferencesIsPending || noParamChange) {\n return;\n }\n\n getArtifacts(currentPage);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [query, limit, filters, currentPage, newsFeedPreferencesIsPending]);\n\n // TODO refreshing should be handled by saga\n useEffect(() => {\n if (newsFeedPreferencesIsPending) {\n return;\n }\n\n if (newsFeedShouldRefresh) {\n getArtifacts(currentPage);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [newsFeedShouldRefresh, newsFeedPreferencesIsPending]);\n\n const handleArtifactClick = (itemId) => {\n window.location.href = `/page-one/news/${itemId}`;\n };\n\n const handleChangeArtifactsPage = (e, value) => {\n if (useUrlParam) {\n navigate(`/?page=${value}`);\n } else {\n setLocalStatePage(value);\n }\n scrollToRef(ref);\n };\n\n const handleChangeRowsPerPage = (e) => {\n setLimit(e.target.value);\n };\n\n return {\n limit,\n handleChangeArtifactsPage,\n handleArtifactClick,\n handleChangeRowsPerPage,\n currentPage,\n };\n};\n","import { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { filterContinents } from 'shared/functions';\nimport { fetchEntitiesCountries } from 'services';\nimport { getParsedRegions } from 'selectors/common';\n\nexport const useRegions = searchQuery => {\n const allRegions = useSelector(getParsedRegions);\n const [regions, setRegions] = useState(allRegions);\n\n useEffect(() => {\n const fetchCountries = async () => {\n if (!allRegions.isPending && searchQuery) {\n const entitiesCountries = await fetchEntitiesCountries({ query: searchQuery });\n const filteredRegions = allRegions.data.filter(region =>\n filterContinents(region, entitiesCountries),\n );\n\n setRegions({ ...allRegions, data: filteredRegions });\n return;\n }\n\n setRegions(allRegions);\n };\n\n fetchCountries();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [allRegions]);\n\n return regions;\n};\n","import { useState } from 'react';\n\nconst useLoginForm = () => {\n const [inputs, setInputs] = useState({});\n\n const handleInputChange = event => {\n event.persist();\n setInputs(i => ({\n ...i,\n [event.target.name]: event.target.value,\n }));\n };\n\n return {\n inputs,\n handleInputChange,\n };\n};\n\nexport { useLoginForm };\n","import { useEffect, useState } from 'react';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\nimport { useDispatch } from 'react-redux';\nimport isEqual from 'lodash/isEqual';\nimport produce from 'immer';\nimport { useTheme } from '@mui/material/styles';\n\nimport { reorderColumn } from 'shared/functions';\n\nexport const useTable = ({\n paginationLimit,\n entityId,\n initialColumns,\n columnsFilterKeysMapping,\n getTableDataAction,\n getTableDataActionParams,\n constantFilter = {},\n initialFilter = {},\n initialSort,\n}) => {\n const theme = useTheme();\n const dispatch = useDispatch();\n\n const [pagination, setPagination] = useState({\n page: 0,\n limit: paginationLimit || 200,\n sort: initialSort,\n });\n\n const [columns, setColumns] = useState(initialColumns);\n\n const [refreshTable, setRefreshTable] = useState(undefined);\n\n const setDirection = direction => {\n switch (direction) {\n case 'asc':\n return 'DESC';\n case 'desc':\n return 'ASC';\n default:\n return 'none';\n }\n };\n\n const onTableChange = tableState => {\n setPagination(() => ({\n ...pagination,\n page: tableState.page,\n limit: tableState.rowsPerPage,\n }));\n };\n\n const onSortChange = (column, direction) => {\n setPagination(() => ({\n ...pagination,\n sort: {\n sortColumn: column,\n direction: setDirection(direction),\n },\n }));\n setColumns(reorderColumn(column, columns));\n };\n\n const [filter, setFilter] = useState({ ...constantFilter, ...initialFilter });\n const isFiltered = !isEqual(constantFilter, filter) || !isEqual(initialFilter, filter);\n\n useDeepCompareEffect(() => {\n setFilter({ ...constantFilter, ...initialFilter });\n }, [constantFilter, initialFilter]);\n\n useDeepCompareEffect(() => {\n if (!getTableDataAction) {\n return;\n }\n\n const { page, limit, sort } = pagination;\n\n const refreshTableFn = getTableDataAction({\n ...(entityId && { entityId }),\n page: page + 1,\n limit,\n sort,\n filter,\n ...getTableDataActionParams,\n });\n\n setRefreshTable(refreshTableFn);\n\n dispatch(refreshTableFn);\n }, [pagination, filter, getTableDataActionParams]);\n\n const filteredCellHeaderPropsFn = () => ({\n style: {\n color: theme.palette.primary.main,\n },\n });\n\n const highlightFilteredColumns = () => {\n setColumns(\n columns.map((column, index) => {\n const filterKey = columnsFilterKeysMapping[index];\n\n if (filterKey === null) return column;\n\n const filterKeys = Array.isArray(filterKey) ? filterKey : [filterKey];\n\n const shouldHighlightColumn = !!filterKeys.find(key => key in filter);\n\n return produce(column, draftColumn => {\n /* eslint-disable-next-line no-param-reassign */\n draftColumn.options.setCellHeaderProps = shouldHighlightColumn\n ? filteredCellHeaderPropsFn\n : undefined;\n\n return draftColumn;\n });\n }),\n );\n };\n\n useEffect(() => {\n setColumns(initialColumns);\n if (columnsFilterKeysMapping) {\n highlightFilteredColumns();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialColumns]);\n\n useEffect(() => {\n if (columnsFilterKeysMapping) {\n highlightFilteredColumns();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [filter]);\n\n return {\n columns,\n pagination,\n onTableChange,\n onSortChange,\n refreshTable,\n setFilter: newFilter => {\n setFilter({ ...constantFilter, ...newFilter });\n },\n isFiltered,\n };\n};\n","import { contactBoxService } from 'services';\nimport { useDispatch } from 'react-redux';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { useTranslation } from 'react-i18next';\nimport { contactTypes } from 'shared/constants/contactBox';\n\nexport const useContact = ({ onSuccess, onError } = {}) => {\n const dispatch = useDispatch();\n const { t } = useTranslation();\n\n return async ({ subject, message, origin, type, target }) => {\n try {\n const status = await contactBoxService({\n subject,\n message,\n origin,\n type,\n target,\n });\n\n if (status.ok) {\n dispatch(\n addNotificationAction({\n message: t(\n `${\n type === contactTypes.MESSAGE\n ? 'Message was properly sent'\n : 'Phone call request was successfully made'\n }`,\n ),\n variant: 'success',\n }),\n );\n if (onSuccess) {\n onSuccess();\n }\n } else {\n throw t('Something went wrong.');\n }\n } catch (error) {\n dispatch(\n addNotificationAction({\n message: t(\n `Failed to ${type === contactTypes.MESSAGE ? 'make a call request' : 'send a message'}`,\n ),\n variant: 'error',\n }),\n );\n if (onError) {\n onError();\n }\n }\n };\n};\n","import { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { useDispatch } from 'react-redux';\n\nconst useNotifications = () => {\n const dispatch = useDispatch();\n\n const notifySuccess = message => dispatch(addNotificationAction({ message, variant: 'success' }));\n\n const notifyError = message => dispatch(addNotificationAction({ message, variant: 'error' }));\n\n return {\n notifySuccess,\n notifyError,\n };\n};\n\nexport { useNotifications };\n","/* eslint-disable react-hooks/exhaustive-deps */\nimport { useEffect, useState } from 'react';\nimport {\n Filter,\n Notification as UINotification,\n Notifications,\n} from '@scope/scope-one-ui/core/Notifications/Notifications.d';\nimport { useToasts } from '@scope/scope-one-ui/core/Messages/context';\nimport { useSelector } from 'react-redux';\nimport { WS_API_URL, getScopeOneUrl } from 'utils';\nimport { fetchApi } from 'shared/functions';\nimport {\n LegacyNotification as ApiNotification,\n NotificationCategory,\n Unread,\n DownloadResponse,\n} from '../../types/notification';\nimport { getAuthDataToken } from '../../../selectors/auth';\nimport {\n fetchUserNotificationsWhatsNew,\n notificationsLimit,\n updateNotification,\n useFetchNotifications,\n} from '../../../modules/notificationsCentre/services/notificationsService';\nimport { useSnackbar } from '../useSnackbar';\n\nexport const useGetNotifications = (): Notifications => {\n const token = useSelector(getAuthDataToken);\n const { info: toastInfo } = useToasts();\n const [filter, setFilter] = useState<Filter>({ tab: 'news', type: 'all' });\n const [unread, setUnread] = useState<Unread>({\n totalUnread: 0,\n userUnread: 0,\n whatsNewUnread: 0,\n });\n const { info, success } = useSnackbar();\n const [hasMoreData, setHasMoreData] = useState(true);\n const [list, setList] = useState<UINotification[]>([]);\n const [page, setPage] = useState(1);\n const getNotifications = useFetchNotifications();\n // @ts-ignore\n const whatsNew: ApiNotification[] = fetchUserNotificationsWhatsNew().map((item) => {\n // @ts-ignore\n return { type: item.type.category as NotificationCategory, ...item };\n });\n\n const downloadDoc = (url: string) => async () => {\n /* Replace origin with current environment */\n const docUrl = `/${url.split('/').slice(4).join('/')}`;\n\n fetchApi(docUrl)\n .then((res) => res.json())\n .then(({ fileUrl }: DownloadResponse) => {\n window.location.href = fileUrl!;\n })\n .catch((error) => {\n success('Download request has been sent.');\n });\n };\n\n const parseNotification = (item: ApiNotification): UINotification => ({\n id: item._id,\n headline: item.headline,\n text: item.text,\n date: item.date,\n category: item.type.category,\n isFavourite: item.is_favourite,\n isRead: item.is_read,\n imgUrl: item.img_url,\n ...(item.type.category === 'downloads' && item.type.tag === 'pdf-report-downloads'\n ? { onClick: downloadDoc(item.view_link!) }\n : { viewLink: item.view_link }),\n });\n\n const connect = () => {\n let mounted = true;\n const ws = new WebSocket(`${WS_API_URL}/ws`, ['Authorization', token]);\n\n ws.onmessage = (res) => {\n const { data } = JSON.parse(res.data);\n setUnread(data.unread);\n if (data.websocketData?.type?.tag === 'portfolio-upload') {\n toastInfo({\n title: 'Portfolio uploaded',\n content: `Your portfolio is ready to be downloaded`,\n });\n } else if (data.websocketData.headline) {\n info(data.websocketData.headline);\n }\n };\n\n /* Reconnect only if the connection dropped, but the component is still mounted */\n ws.onclose = () => {\n if (!mounted) return;\n setTimeout(connect, 1000);\n };\n\n return () => {\n mounted = false;\n ws.close();\n };\n };\n\n const resetList = () => {\n setPage(1);\n setList([]);\n setHasMoreData(true);\n };\n\n const handleFilter = (value: Filter) => {\n resetList();\n setFilter(value);\n };\n\n const loadNews = (_pageNumber: number, mode: 'add' | 'append') => {\n setTimeout(() => {\n setHasMoreData(false);\n\n const newData = filter.type === 'favourites' ? [] : whatsNew.map(parseNotification);\n\n if (mode === 'add') {\n setList((prevList) => [...prevList, ...newData]);\n }\n\n if (mode === 'append') {\n setList(newData);\n }\n }, 300);\n };\n\n const loadMine = (pageNumber: number, mode: 'add' | 'append') => {\n getNotifications(pageNumber, filter).then((res) => {\n if (res.length < notificationsLimit) {\n setHasMoreData(false);\n }\n\n const newData = res.map(parseNotification);\n\n if (mode === 'add') {\n setList((prevList) => [...prevList, ...newData]);\n }\n\n if (mode === 'append') {\n setList(newData);\n }\n });\n };\n\n const loadMore = () => {\n if (!hasMoreData) {\n return;\n }\n\n const newPage = page + 1;\n\n if (filter.tab === 'news') {\n loadNews(newPage, 'add');\n }\n\n if (filter.tab === 'mine') {\n loadMine(newPage, 'add');\n }\n\n setPage(newPage);\n };\n\n const toggleFav = (id: string, isFav: any) => {\n resetList();\n updateNotification({ id, data: { is_favourite: isFav } })\n .then(() => {\n success(\n isFav ? 'Added notification to favourites.' : 'Removed notification from favourites.',\n );\n })\n .finally(() => {\n loadMine(1, 'append');\n });\n };\n\n const allowToToggleFav = () => !list.find((item) => item.category === 'whats_new');\n\n /* Initial websocket connection to retrieve notifications data */\n useEffect(() => connect(), []);\n\n /* Refetch notifications data on filter change */\n useEffect(() => {\n if (filter.tab === 'news') {\n loadNews(1, 'append');\n }\n\n if (filter.tab === 'mine') {\n loadMine(1, 'append');\n }\n }, [filter]);\n\n return {\n unread,\n settingsLink: getScopeOneUrl('news-centre#notifications-settings'),\n hasMoreData,\n list,\n onFilter: handleFilter,\n onLoadMore: loadMore,\n onFavToggle: allowToToggleFav() ? toggleFav : undefined,\n };\n};\n","import React, { useState } from 'react';\nimport { MessageModal } from 'ui/Modals';\nimport { contactTypes, contactTargets } from 'shared/constants/contactBox';\nimport { useContact } from 'shared/hooks';\n\nexport const useContactAdvisor = () => {\n const [messageModalOpen, setMessageModalOpen] = useState(false);\n const [messageSent, setMessageSent] = useState(false);\n const contact = useContact({ onSuccess: () => setMessageSent(true) });\n const toggleMessageModal = () => setMessageModalOpen(!messageModalOpen);\n const handleContact = (type, target) => async ({ subject, message, origin }) => {\n contact({ type, subject, message, origin, target });\n };\n\n const RenderModal = () => (\n <MessageModal\n open={messageModalOpen}\n onClose={toggleMessageModal}\n onSendMessage={handleContact(contactTypes.MESSAGE, contactTargets.PERSONAL_ADVISER)}\n />\n );\n\n return [messageSent, toggleMessageModal, RenderModal];\n};\n","export const useReportPage = window.location.href.includes('/generate-report/');\n\nexport const useESGReportPage = window.location.href.includes('/generate-report/esg');\n","export const useAdminPage = ['/admin-panel/rsr', '/admin-panel/psr'].some((url) =>\n window.location.pathname.includes(url),\n);\n","/* eslint-disable camelcase */\nimport { useReducer } from 'react';\n\nconst answersInitialState = [];\n\nconst answersReducer = (state, action) => {\n const isTheSameQuestionId = ({ question_id }) => question_id === action.questionId;\n const isDifferentQuestionId = ({ question_id }) => question_id !== action.questionId;\n\n switch (action.type) {\n case 'set':\n return [\n ...state.filter(isDifferentQuestionId),\n {\n question_id: action.questionId,\n answers: [action.answer],\n },\n ];\n case 'push':\n return [\n ...state.filter(isDifferentQuestionId),\n state.find(isTheSameQuestionId)\n ? {\n ...state.find(isTheSameQuestionId),\n answers: [\n ...state.find(isTheSameQuestionId).answers,\n {\n answer: action.answer,\n },\n ],\n }\n : {\n question_id: action.questionId,\n answers: [\n {\n answer: action.answer,\n },\n ],\n },\n ];\n case 'remove':\n if (!state.find(isTheSameQuestionId)) {\n return state;\n }\n\n if (state.find(isTheSameQuestionId).answers.length <= 1) {\n return [...state.filter(isDifferentQuestionId)];\n }\n\n return [\n ...state.filter(isDifferentQuestionId),\n {\n ...state.find(isTheSameQuestionId),\n answers: [\n ...state.find(isTheSameQuestionId).answers.filter(value => value !== action.answer),\n ],\n },\n ];\n case 'removeAnswers':\n if (!state.find(isTheSameQuestionId)) {\n return state;\n }\n\n return [...state.filter(isDifferentQuestionId)];\n default:\n return state;\n }\n};\n\nconst paramsInitialState = {\n isHeaderVisible: true,\n};\n\nconst paramsReducer = (state, action) => {\n switch (action.type) {\n case 'set':\n return {\n ...state,\n [action.name]: action.value,\n };\n default:\n return state;\n }\n};\n\nexport const useQuestionnaire = () => {\n const [answers, answersDispatch] = useReducer(answersReducer, answersInitialState);\n const [params, paramsDispatch] = useReducer(paramsReducer, paramsInitialState);\n const setAnswer = (questionId, answer) => answersDispatch({ type: 'set', questionId, answer });\n const pushAnswer = (questionId, answer) => answersDispatch({ type: 'push', questionId, answer });\n const removeAnswer = (questionId, answer) =>\n answersDispatch({ type: 'remove', questionId, answer });\n const removeAnswers = questionId => answersDispatch({ type: 'removeAnswers', questionId });\n const setParam = (name, value) => paramsDispatch({ type: 'set', name, value });\n return { setAnswer, removeAnswer, removeAnswers, setParam, pushAnswer, answers, params };\n};\n","import React, { lazy, Suspense, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Dialog from '@mui/material/Dialog';\n\nimport { Loader, DialogTitleWithClose } from 'ui';\nimport { RoundButton } from 'ui/Buttons';\n\nconst DocumentsModal = lazy(() => import('modules/common/Modals/DocumentsModal'));\n\nconst useViewDocuments = ({\n entityId,\n companyModule,\n company,\n initialMethodologies,\n initialDocuments,\n}) => {\n const { t } = useTranslation();\n const [isOpen, setIsOpen] = useState(false);\n const [defaultExpand, setDefaultExpand] = useState('all');\n\n const handleOpen = () => setIsOpen(true);\n const handleClose = () => setIsOpen(false);\n const toggleModal = () => setIsOpen(value => !value);\n const showViewDocumentsButton = (\n <RoundButton label={t('VIEW_DOCUMENTS')} onClick={handleOpen} marginLeft />\n );\n const viewDocumentsModal = (\n <Dialog open={isOpen} onClose={handleClose} maxWidth=\"sm\" fullWidth>\n <DialogTitleWithClose onClose={handleClose}>{t('DOCUMENTS')}</DialogTitleWithClose>\n <Suspense fallback={<Loader center />}>\n <DocumentsModal\n defaultExpand={defaultExpand}\n defaultExpandDocuments={defaultExpand}\n entityId={entityId}\n companyModule={companyModule}\n company={company}\n initialMethodologies={initialMethodologies}\n initialDocuments={initialDocuments}\n />\n </Suspense>\n </Dialog>\n );\n\n return { showViewDocumentsButton, viewDocumentsModal, toggleModal, setDefaultExpand };\n};\n\nexport { useViewDocuments };\n","import { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useLocation } from 'react-router-dom';\nimport { getAuthDataUser } from 'selectors/auth';\n\nexport const useHubSpot = () => {\n const userData = useSelector(getAuthDataUser);\n const [isIdentified, setIsIdentified] = useState(false);\n const { pathname } = useLocation();\n\n // eslint-disable-next-line no-multi-assign\n const hsq = (window._hsq = window._hsq || []);\n\n useEffect(() => {\n if (!userData || isIdentified) {\n return;\n }\n const { email } = userData;\n\n hsq.push([\n 'identify',\n {\n email,\n },\n ]);\n hsq.push(['trackPageView']);\n setIsIdentified(true);\n\n setTimeout(() => {\n if (window.HubSpotConversations && window.HubSpotConversations.widget) {\n window.HubSpotConversations.widget.refresh();\n } else {\n // eslint-disable-next-line no-console\n console.warn('HubSpot widget not loaded');\n }\n }, 1000);\n }, [userData, isIdentified, hsq]);\n\n useEffect(() => {\n hsq.push(['setPath', pathname]);\n hsq.push(['trackPageView']);\n }, [pathname, hsq]);\n};\n","import { useState } from 'react';\n\nexport const useModal = () => {\n const [isOpen, setOpen] = useState(false);\n\n return {\n isOpen,\n show: () => setOpen(true),\n close: () => setOpen(false),\n toggle: () => setOpen(state => !state),\n };\n};\n","import { useState } from 'react';\nimport { SelectedEntities, ItemType } from 'shared/types/portfolios';\nimport { DatatableItemsData } from 'ui/Datatable/Datatable';\n\nexport const useSelectedTableRows = (type = ItemType.SCOPEONEID) => {\n const [selectedAll, setSelectedAll] = useState(false);\n\n const [multiSelect, setMultiSelect] = useState<SelectedEntities>({\n count: 0,\n itemIds: {},\n items: {},\n type,\n });\n\n const [singleSelect, setSingleSelect] = useState<SelectedEntities>({\n count: 0,\n itemIds: {},\n items: {},\n type,\n });\n\n const currentSelect = singleSelect.count === 1 ? singleSelect : multiSelect;\n\n const onSelectedChange = (items: DatatableItemsData) => {\n // @ts-ignore\n setMultiSelect(prev => ({ ...prev, ...items }));\n\n setSelectedAll(false);\n };\n\n const clearSingle = () =>\n setSingleSelect({\n count: 0,\n itemIds: {},\n items: {},\n type,\n });\n\n const onSelectAll = () => setSelectedAll(all => !all);\n\n const selectSingle = (id: string, artifactId: string = '') =>\n setSingleSelect({\n count: 1,\n itemIds: { [id]: id },\n items: artifactId ? { [id]: [[id, artifactId]] } : {},\n type,\n });\n\n return {\n /* item selected by dots button for single row */\n singleSelect,\n /* items selected with checkboxes */\n multiSelect,\n /* singleSelect if present, multiSelect otherwise */\n currentSelect,\n selectedAll,\n selectSingle,\n clearSingle,\n onSelectedChange,\n onSelectAll,\n };\n};\n","import { useState } from 'react';\nimport { useToasts } from '@scope/scope-one-ui/core/Messages/context';\nimport {getBookmark, setBookmark} from \"../../../store/localStorage\";\n\nexport const useMenuBookmarks = () => {\n const [bookmarkedHomepage, setBookmarkedHomepage] = useState(getBookmark() ?? '');\n const { success } = useToasts();\n\n const bookmarkNewHomepage = (url: string, title: string) => {\n const homeAddress = url === bookmarkedHomepage ? '' : url;\n setBookmarkedHomepage(homeAddress);\n setBookmark(homeAddress);\n success({\n title: 'Success!',\n content: `You have changed your homepage to ${homeAddress ? title : 'PageOne'}`,\n });\n };\n\n return {\n bookmarkedHomepage,\n bookmarkNewHomepage,\n };\n};\n","import { useGet } from '../useFetch';\nimport { CreResponse } from '../../types/cre';\n\nexport const useGetCREProjects = (simulationModel: 'cre' | 'cpm') =>\n useGet<CreResponse<{ id: string; name: string }[]>>(`/cre/projects/`, {\n params: { limit: 1, simulationModel },\n });\n\nexport const useGetSimulationModels = () =>\n useGet<{ name: string; shortName: string }[]>(`/cre/simulation-models/`);\n","import { useGet } from '../useFetch';\n\nexport const useGetFundsAccess = () =>\n useGet('/api/news/announcements/', {\n apiPrefix: 'fund-analysis',\n params: { offset: 0, limit: 1 },\n disableLogout: true,\n response: 'raw',\n });\n","import { usePost } from '../useFetch';\nimport { ContactMessage } from '@scope/scope-one-common/types/contact';\n\nexport const useContactSales = () =>\n usePost<ContactMessage>(({ message, subject }) => ({\n url: `/shop/contact-sales/`,\n options: {\n response: 'text',\n payload: {\n message,\n origin: window.location.href,\n subject,\n },\n },\n }));\n","import { SetStateAction, useEffect, useState } from 'react';\nimport {\n ColumnDefinition,\n RowData,\n TableActions,\n} from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport { useTableFeatures } from '@scope/scope-one-ui/core/DataTable/hooks/useTableFeatures';\n\ntype UseRsr = (props: UseRsrProps) => UseRsrReturn;\n\ntype UseRsrProps = {\n initialColumns: ColumnDefinition[];\n defaultSortField: string;\n};\ntype UseRsrReturn = {\n tableActions: TableActions;\n selectToggle: (id) => void;\n selectedIds: string[];\n setSelectedIds: React.Dispatch<SetStateAction<string[]>>;\n searchedValue: string;\n sort: { field: string; order: 'ASC' | 'DESC' };\n loading: boolean;\n setLoading: React.Dispatch<SetStateAction<boolean>>;\n pagination: { page: number; limit: number };\n rows: RowData[];\n setRows: React.Dispatch<SetStateAction<RowData[]>>;\n total: number;\n setTotal: React.Dispatch<SetStateAction<number>>;\n lastPage: number;\n setLastPage: React.Dispatch<SetStateAction<number>>;\n selectAllToggle: () => void;\n isSelectedAll: boolean;\n clearSelectedIds: () => void;\n};\n\nexport const useRSR: UseRsr = ({ initialColumns, defaultSortField }) => {\n const [rows, setRows] = useState<RowData[]>([]);\n const [total, setTotal] = useState(0);\n const [lastPage, setLastPage] = useState<number>(0);\n const [loading, setLoading] = useState(true);\n const [selectedIds, setSelectedIds] = useState<string[]>([]);\n const [pagination, setPagination] = useState({ page: 1, limit: 10 });\n const [searchedValue, setSearchedValue] = useState('');\n const [isSelectedAll, setIsSelectedAll] = useState(false);\n\n useEffect(() => {\n setLastPage(Math.ceil(total / pagination.limit));\n }, [total]);\n\n const clearSelectedIds = () => {\n setIsSelectedAll(false);\n setSelectedIds([]);\n };\n\n const selectAllToggle = () => {\n if (!isSelectedAll && selectedIds.length === 0) {\n setIsSelectedAll(true);\n setSelectedIds(rows.map((row) => row.id));\n } else {\n setIsSelectedAll(false);\n setSelectedIds([]);\n }\n };\n\n const [sort, setSort] = useState<{ field: string; order: 'ASC' | 'DESC' }>({\n field: defaultSortField,\n order: 'ASC',\n });\n\n const selectToggle = (id: string) => {\n const isSelected = selectedIds.includes(id);\n return isSelected\n ? setSelectedIds((prevState) => prevState.filter((ids) => ids !== id))\n : setSelectedIds([...selectedIds, id]);\n };\n const tableActions: TableActions = {\n ...useTableFeatures(rows, initialColumns),\n dataRows: rows,\n currentPage: pagination.page,\n rowsPerPage: pagination.limit,\n lastPage,\n updateSearching: (searched) => setSearchedValue(searched),\n searchedValue,\n updatePagination: (page, limit) => {\n const newLast = Math.ceil((total ?? 1) / limit);\n setLastPage(newLast);\n if (page > newLast) {\n setPagination({ page: newLast, limit });\n } else {\n setPagination({ page, limit });\n }\n },\n updateOrdering: (field, order) => {\n setSort({ field, order: order.toUpperCase() as 'ASC' | 'DESC' });\n },\n sort: { field: sort.field, order: sort.order.toLowerCase() as 'asc' | 'desc' },\n };\n\n return {\n tableActions,\n selectToggle,\n selectedIds,\n setSelectedIds,\n searchedValue,\n setSearchedValue,\n sort,\n setSort,\n loading,\n setLoading,\n pagination,\n rows,\n setRows,\n selectAllToggle,\n isSelectedAll,\n clearSelectedIds,\n total,\n setTotal,\n lastPage,\n setLastPage,\n };\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { MenuSections } from '@scope/scope-one-ui/core/GeneralServicesMenu/GeneralServicesMenu.d';\nimport {\n getScopeOneUrl as SCI,\n getFundAnalysisUrl as SCOPEX,\n getAdminUrl as ADMIN,\n} from '@scope/scope-one-common/utils/apiUrl';\nimport { UserRole, ModuleLicence, ShopPermission } from '@scope/scope-one-common/types/auth';\nimport Clipboard from '@scope/scope-one-common/assets/icons/clipboard.svg';\nimport Star from '@scope/scope-one-common/assets/icons/star.svg';\nimport Briefcase from '@scope/scope-one-common/assets/icons/briefcase.svg';\nimport BarChart from '@scope/scope-one-common/assets/icons/bar-chart-2.svg';\nimport Archive from '@scope/scope-one-common/assets/icons/archive.svg';\nimport Cast from '@scope/scope-one-common/assets/icons/cast.svg';\nimport Plus from '@scope/scope-one-common/assets/icons/plus.svg';\nimport Layout from '@scope/scope-one-common/assets/icons/layout.svg';\nimport List from '@scope/scope-one-common/assets/icons/list.svg';\nimport Key from '@scope/scope-one-common/assets/icons/key.svg';\nimport RotateCcw from '@scope/scope-one-common/assets/icons/rotate-ccw.svg';\nimport { getAuthData } from '../../../selectors/auth';\n\nexport const useGeneralServices = (): MenuSections => {\n const auth = useSelector(getAuthData);\n\n const hasRole = (role: UserRole) => auth.roles?.includes(role);\n\n const hasLicense = (licence: ModuleLicence) => auth.licences?.includes(licence);\n\n const hasShopPermit = (permission: ShopPermission) => auth.shopPermissions?.includes(permission);\n\n return {\n list: [\n {\n title: 'General services',\n canAccess: hasRole('SERVICE_CENTRE') || hasRole('ORGANISATION_ADMIN'),\n options: [\n {\n value: ADMIN('organisations'),\n label: 'Dashboard',\n icon: <Layout />,\n },\n {\n value: ADMIN('subscriptions'),\n label: 'Subscriptions',\n icon: <List />,\n },\n {\n value: ADMIN('request-history'),\n label: 'Request history',\n icon: <RotateCcw />,\n },\n {\n value: ADMIN('master-password'),\n label: 'Master password',\n icon: <Key />,\n },\n ],\n },\n {\n title: 'Subscription panel',\n canAccess: hasLicense('INVESTORHUB_MODULE') && hasShopPermit('SHOP_ADMIN'),\n options: [\n {\n value: SCI('subscriptions/panel'),\n label: 'View products',\n icon: <Layout />,\n canAccess: hasShopPermit('SHOP_ADMIN'),\n },\n {\n value: SCI('subscriptions/panel/create'),\n label: 'Create product',\n icon: <Plus />,\n canAccess: hasShopPermit('SHOP_ADMIN'),\n },\n ],\n },\n {\n title: 'Events panel',\n canAccess: hasLicense('INVESTORHUB_MODULE') && hasShopPermit('SHOP_ADMIN'),\n options: [\n {\n value: SCI('event-panel/view'),\n label: 'View events',\n icon: <Layout />,\n canAccess: hasShopPermit('SHOP_ADMIN'),\n },\n {\n value: SCI('event-panel/create'),\n label: 'Create event',\n icon: <Plus />,\n canAccess: hasShopPermit('SHOP_ADMIN'),\n },\n ],\n },\n {\n title: 'Services',\n canAccess: hasLicense('SCOPEEXPLORER_MODULE'),\n options: [\n { value: SCOPEX('conferences'), label: 'Conferences', icon: <Cast /> },\n { value: SCOPEX('aif-page'), label: 'OIF Studie 2020', icon: <Archive /> },\n ],\n },\n {\n title: 'Publications',\n canAccess: hasLicense('SCOPEEXPLORER_MODULE'),\n options: [\n { value: SCOPEX('news'), label: 'News', icon: <Clipboard /> },\n { value: SCOPEX('reports'), label: 'Reports', icon: <BarChart /> },\n ],\n },\n {\n title: 'Team ratings',\n canAccess: hasLicense('SCOPEEXPLORER_MODULE'),\n options: [\n { value: SCOPEX('asset-managers'), label: 'Asset Manager', icon: <Briefcase /> },\n { value: SCOPEX('premium'), label: 'Premium', icon: <Star /> },\n ],\n },\n {\n title: 'Admin',\n canAccess: hasLicense('ADMIN_MODULE') && hasRole('SERVICE_CENTRE'),\n options: [\n {\n value: SCI('admin-panel/rsr'),\n label: 'Restricted Subscription Ratings',\n icon: <Layout />,\n },\n {\n value: SCI('admin-panel/psr'),\n label: 'Private Subscription Ratings',\n icon: <Layout />,\n },\n ],\n },\n ],\n };\n};\n","module.exports = __webpack_public_path__ + \"static/media/esg-imp-demo.52c0e7e3.pdf\";","import { useDispatch } from 'react-redux';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nexport const useSnackbar = () => {\n const dispatch = useDispatch();\n\n const notify = (variant: 'error' | 'info' | 'success' | 'warning') => (message: string) =>\n dispatch(\n addNotificationAction({\n message,\n variant,\n }),\n );\n\n return {\n error: notify('error'),\n info: notify('info'),\n success: notify('success'),\n warning: notify('warning'),\n };\n};\n","module.exports = __webpack_public_path__ + \"static/media/privacy-policy.02684544.pdf\";","module.exports = __webpack_public_path__ + \"static/media/terms-of-use.9175f6ba.pdf\";","/* eslint-disable-next-line no-console */\nexport const logVersion = () => console.log(`version: ${process?.env?.npm_package_version}`);\n","module.exports = __webpack_public_path__ + \"static/media/credit-sphere-invitation.f4af2c1f.jpg\";","module.exports = __webpack_public_path__ + \"static/media/shakehand.57c3cdb1.png\";","import React, { FC } from 'react';\nimport { IconButton, InputAdornment, TextField } from '@mui/material';\nimport { FieldProps } from 'formik';\nimport { Close, Search } from '@mui/icons-material';\n\nexport const SearchControl: FC<FieldProps> = ({ field, form, ...props }) => (\n <TextField\n fullWidth\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <Search />\n </InputAdornment>\n ),\n endAdornment: field.value && (\n <InputAdornment position=\"end\">\n <IconButton onClick={() => form.setFieldValue(field.name, '')} size=\"large\">\n <Close />\n </IconButton>\n </InputAdornment>\n ),\n }}\n {...field}\n {...props}\n />\n);\n","import React, { FC, Fragment } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { FieldProps } from 'formik';\nimport {\n Divider,\n FormControlLabel,\n List,\n ListItem,\n Radio,\n RadioGroup,\n Typography,\n Box,\n} from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { Portfolio } from 'modules/common/PortfolioManager/types';\n\ntype PortfoliosSelectControlProps = FieldProps & {\n portfolios: Portfolio[];\n search: string;\n};\n\nconst useStyles = makeStyles({\n listItem: {\n margin: 'unset',\n paddingLeft: 'unset',\n paddingRight: 'unset',\n },\n});\n\nexport const PortfoliosSelectControl: FC<PortfoliosSelectControlProps> = ({\n field,\n portfolios,\n search,\n ...props\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const filtered = portfolios.filter((item) =>\n search ? item.name.toLowerCase().includes(search.toLowerCase()) : item,\n );\n\n if (filtered.length === 0) {\n return (\n <Box marginTop={2}>\n <Typography>{t('NO_ITEMS_FOUND')}</Typography>\n </Box>\n );\n }\n\n return (\n <List component={RadioGroup} {...field} {...props}>\n {filtered.map((item) => (\n <Fragment key={item.id}>\n <ListItem\n button\n component={FormControlLabel}\n value={item.id}\n control={<Radio />}\n label={item.name}\n className={classes.listItem}\n />\n <Divider />\n </Fragment>\n ))}\n </List>\n );\n};\n","import React, { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { Box, DialogContent, DialogActions, Button, Dialog, Grid, Divider } from '@mui/material';\nimport { DialogTitleWithClose, Loader } from 'ui';\nimport { Field, Form, Formik } from 'formik';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { PortfolioItem, SelectedEntities } from 'shared/types/portfolios';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { theme } from 'theme';\nimport { PortfolioAction } from 'modules/common/PortfolioManager/types';\nimport { useFetchPortfolios } from '../../GraphQL/portfolios/hooks';\nimport { getResponseMessage } from '../../GraphQL/utils';\nimport { SearchControl } from './SearchControl';\nimport { PortfoliosSelectControl } from './PortfoliosSelectControl';\nimport { useVariantAction } from '../portfolioModalUtils';\nimport { debounce } from 'lodash';\n\nconst useStyles = makeStyles({\n dialog: {\n borderRadius: theme.spacing(1.5),\n overflow: 'hidden',\n width: theme.spacing(63),\n },\n searchField: {\n marginTop: theme.spacing(1),\n },\n content: {\n paddingTop: 'unset',\n paddingBottom: 'unset',\n height: theme.spacing(37),\n // @ts-ignore\n overflowY: 'overlay',\n },\n list: {\n padding: 'unset',\n },\n listItem: {\n margin: 'unset',\n paddingLeft: 'unset',\n paddingRight: 'unset',\n },\n});\n\ntype FormData = {\n portfolioId: string;\n search: string;\n};\n\ntype UpdateEntitiesModalProps = {\n onClose?: () => void;\n onClickCreateNew?: () => void;\n onActionSuccess?: (refresh: boolean, reason: string) => void;\n open?: boolean;\n itemsData?: SelectedEntities;\n ratingType?: ratingTypes;\n selectedAll?: boolean;\n sourcePortfolioId?: string;\n variant?: PortfolioAction;\n itemType: PortfolioItem;\n};\n\nexport const UpdateEntitiesModal: FC<UpdateEntitiesModalProps> = ({\n onClose = () => null,\n onClickCreateNew = () => null,\n onActionSuccess = null,\n open = false,\n itemsData = {\n count: 0,\n itemIds: {},\n items: {},\n type: null,\n },\n variant = 'add',\n itemType,\n sourcePortfolioId = '',\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const [updating, setUpdating] = useState(false);\n const [searchVal, setSearchVal] = useState<string>();\n const [nameFilter, setNameFilter] = useState<string>();\n const { error, success } = useSnackbar();\n const { data, loading, refetch } = useFetchPortfolios(\n 0,\n 20,\n undefined,\n nameFilter\n ? {\n name: nameFilter,\n }\n : undefined,\n );\n\n const portfolios = data?.portfolios.filter((item) => !item.isDedicated) || [];\n const isPending = loading || updating;\n\n useEffect(() => {\n if (open) {\n setUpdating(true);\n refetch().finally(() => setUpdating(false));\n }\n }, [refetch, open]);\n\n const { title, submit, refreshSettings, action } = useVariantAction(\n itemsData,\n itemType,\n sourcePortfolioId,\n )[variant];\n\n const handleSubmit = ({ portfolioId }: FormData) => {\n setUpdating(true);\n\n action(portfolioId)\n .then(({ data: responseData }) => {\n if (onActionSuccess) {\n onActionSuccess(refreshSettings.refresh, refreshSettings.reason);\n }\n\n success(getResponseMessage(responseData, t('SUCCESS')));\n })\n .catch(({ networkError }) => {\n const { data: responseData, errors } = networkError?.result as {\n data: any;\n errors: { message: string }[];\n };\n\n error(\n getResponseMessage(\n responseData,\n errors ? errors.map((item) => item.message).join('<br />') : t('UNEXPECTED_ERROR'),\n ),\n );\n })\n .finally(() => {\n setUpdating(false);\n onClose();\n });\n };\n\n const handleCreateNewPortfolio = () => {\n onClickCreateNew();\n onClose();\n };\n\n useEffect(() => {\n debounce(setNameFilter, 500)(searchVal);\n }, [searchVal]);\n\n return (\n <Dialog open={open} onClose={onClose} PaperProps={{ className: classes.dialog }}>\n <Formik\n initialValues={{ portfolioId: '', search: searchVal } as FormData}\n onSubmit={handleSubmit}\n >\n <Form>\n <DialogTitleWithClose onClose={onClose}>{title}</DialogTitleWithClose>\n <Box px={3}>\n <Divider />\n <Field\n name=\"search\"\n placeholder=\"Search portfolio name\"\n className={classes.searchField}\n component={SearchControl}\n value={searchVal}\n onChange={(e) => setSearchVal(e.target.value)}\n />\n <Divider />\n </Box>\n <DialogContent className={classes.content}>\n <Field\n name=\"portfolioId\"\n className={classes.list}\n portfolios={portfolios}\n search={searchVal}\n component={PortfoliosSelectControl}\n />\n </DialogContent>\n <DialogActions>\n <Grid container spacing={2}>\n <Grid item xs>\n <Button onClick={onClose}>{t('CANCEL')}</Button>\n </Grid>\n <Grid item>\n <Button variant=\"outlined\" onClick={handleCreateNewPortfolio}>\n {t('TOOLBAR.CREATE_NEW_PORTFOLIO')}\n </Button>\n </Grid>\n <Grid item>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || !portfolios.length}\n >\n {submit}\n </Button>\n </Grid>\n </Grid>\n </DialogActions>\n </Form>\n </Formik>\n {isPending && <Loader cover />}\n </Dialog>\n );\n};\n","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgWeight = function SvgWeight(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24.433,\n height: 24.413,\n viewBox: \"0 0 24.433 24.413\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.931 16.295c0 1.5 2.127 2.715 4.752 2.715s4.75-1.215 4.75-2.715h-1.262L19.966 1.881l-.105-.51h-5.7a2.034 2.034 0 00-3.842 0h-5.7l-.107.517a.23.23 0 00-.012.03L1.267 16.283H-.001c0 1.5 2.127 2.715 4.751 2.715s4.749-1.214 4.749-2.715h-1.23L5.217 2.724h5.111a2.039 2.039 0 001.271 1.242l-1.3 18.275h-6.18v2.172h16.244v-2.172h-6.195L12.883 3.966a2.039 2.039 0 001.272-1.242h5.093l-3.02 13.571zm-13.107-.012L4.769 3.209l2.943 13.074zM12.241 2.985a.95.95 0 11.95-.95.951.951 0 01-.95.95zm7.459.2l2.914 13.1h-5.83z\",\n fill: \"#8a8a8a\"\n })));\n};\n\nexport default SvgWeight;","import React from 'react';\nimport PropTypes from 'prop-types';\nimport round from 'lodash/round';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport Grid from '@mui/material/Grid';\nimport InputLabel from '@mui/material/InputLabel';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport { grey } from '@mui/material/colors';\n\nimport { Loader } from 'ui';\nimport { EmptyDataLabel } from 'ui/Labels';\nimport { parseToCurrency } from 'shared/functions';\nimport { useReportPage } from 'shared/hooks';\nimport WeightIcon from 'assets/icons/weight.svg';\n\nconst useStyle = makeStyles((theme) => ({\n title: {\n display: 'flex',\n height: useReportPage ? 16 : 35,\n alignItems: 'center',\n fontSize: useReportPage ? 10 : 14,\n },\n item: {\n maxWidth: 250,\n\n '&:first-child': {\n marginRight: 15,\n },\n },\n itemContainer: {\n justifyContent: 'space-between',\n },\n calculatorTitle: {\n marginBottom: theme.spacing(1),\n fontWeight: 'bold',\n fontSize: useReportPage ? 12 : 16,\n },\n triangle: {\n width: 0,\n height: 0,\n borderStyle: 'solid',\n borderWidth: '28px 85px 0 85px',\n borderColor: `${grey[400]} transparent transparent transparent`,\n margin: useReportPage ? '-5px auto' : '10px auto',\n transform: useReportPage ? 'scale(0.7)' : 'none',\n\n '&:after': {\n content: '\"\"',\n display: 'block',\n width: 0,\n height: 0,\n borderStyle: 'solid',\n borderWidth: '25px 75px 0 75px',\n borderColor: `${theme.palette.custom.white} transparent transparent transparent`,\n transform: 'translate(-50%, -106%)',\n },\n },\n weightBox: {\n display: 'flex',\n justifyContent: 'center',\n width: 100,\n borderWidth: 1,\n borderRadius: 20,\n borderColor: grey[400],\n borderStyle: 'solid',\n padding: 10,\n margin: useReportPage ? '-5px auto 0' : '15px auto 0',\n transform: useReportPage ? 'scale(0.7)' : 'none',\n },\n weight: {\n fontSize: 18,\n marginLeft: 10,\n },\n textField: {\n margin: theme.spacing(1, 0),\n background: theme.palette.custom.lightGray,\n textAlign: 'center',\n borderRadius: theme.spacing(1),\n },\n textFieldValue: {\n fontWeight: 'bold',\n padding: theme.spacing(0.5, 0),\n fontSize: useReportPage ? 12 : 16,\n },\n}));\n\nexport const ESGDistributionCalculator = ({\n title,\n weight,\n firstInputLabel,\n firstInputValue,\n secondInputLabel,\n secondInputValue,\n firstInputUnit,\n secondInputUnit,\n showWeightBox,\n}) => {\n const classes = useStyle();\n const firstValue = firstInputValue ? round(firstInputValue, 4) : '';\n const secondValue = secondInputValue || '';\n\n return (\n <>\n <Typography component=\"h6\" variant=\"h6\" className={classes.calculatorTitle}>\n {title}\n </Typography>\n <Grid container className={classes.itemContainer}>\n <Grid item xs className={classes.item}>\n <Typography variant=\"body2\" color=\"primary\" className={classes.title}>\n {firstInputLabel}\n </Typography>\n <div className={classes.textField}>\n <Typography component=\"h6\" variant=\"h6\" className={classes.textFieldValue}>\n {firstValue} {firstInputUnit}\n </Typography>\n </div>\n </Grid>\n <Grid item xs className={classes.item}>\n <Typography variant=\"body2\" color=\"primary\" className={classes.title}>\n {secondInputLabel}\n </Typography>\n <div className={classes.textField}>\n <Typography component=\"h6\" variant=\"h6\" className={classes.textFieldValue}>\n {secondValue} {secondInputUnit}\n </Typography>\n </div>\n </Grid>\n </Grid>\n {showWeightBox && (\n <>\n <Box className={classes.triangle} />\n <Box className={classes.weightBox}>\n <WeightIcon /> <Typography className={classes.weight}>{weight}%</Typography>\n </Box>\n </>\n )}\n </>\n );\n};\n\nESGDistributionCalculator.defaultProps = {\n firstInputValue: null,\n secondInputValue: null,\n showWeightBox: true,\n weight: 0,\n title: '',\n};\n\nESGDistributionCalculator.propTypes = {\n title: PropTypes.string,\n weight: PropTypes.number,\n firstInputLabel: PropTypes.string.isRequired,\n secondInputLabel: PropTypes.string.isRequired,\n firstInputUnit: PropTypes.string.isRequired,\n secondInputUnit: PropTypes.string.isRequired,\n firstInputValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n secondInputValue: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n showWeightBox: PropTypes.bool,\n};\n\nconst useESGDistributionStyles = makeStyles({\n root: {\n position: 'relative',\n },\n divider: {\n alignSelf: 'stretch',\n height: useReportPage ? 80 : 110,\n },\n legend: {\n fontSize: useReportPage ? 10 : 14,\n fontWeight: 500,\n },\n});\n\nconst ESGDistribution = ({ data, loading }) => {\n const { t } = useTranslation();\n const classes = useESGDistributionStyles();\n\n return (\n <Paper className={classes.root}>\n <Box p={2} pt={useReportPage ? 1 : 2}>\n <Typography variant=\"h6\">{t('Monetisation distribution')}</Typography>\n {loading ? (\n <Loader center />\n ) : (\n <>\n {!data ? (\n <Box py={2}>\n <EmptyDataLabel label={t('There are no data available yet.')} />\n </Box>\n ) : (\n <>\n <Box py={2} pt={useReportPage ? 1 : 2}>\n <Divider />\n </Box>\n <Grid container>\n <Grid item xs>\n <Box pb={1} px={3}>\n <ESGDistributionCalculator\n title={t('Environment')}\n weight={+data.environmentWeight.toFixed(1)}\n firstInputLabel={t('Total net externality per EUR revenue')}\n firstInputValue={data.environmentExtCostsDividedByRevenue.toFixed(2)}\n secondInputLabel={t('Absolute net externality')}\n secondInputValue={parseToCurrency(data.environmentExtCosts)}\n firstInputUnit=\"EUR\"\n secondInputUnit=\"mEUR\"\n />\n </Box>\n </Grid>\n <Divider className={classes.divider} orientation=\"vertical\" />\n <Grid item xs>\n <Box pb={1} px={3}>\n <ESGDistributionCalculator\n title={t('Social')}\n weight={+data.socialWeight.toFixed(1)}\n firstInputLabel={t('Total net externality per EUR revenue')}\n firstInputValue={data.socialRiskHoursExtCostsDividedByRevenue.toFixed(2)}\n secondInputLabel={t('Absolute net externality')}\n secondInputValue={parseToCurrency(data.socialRiskHoursExtCosts)}\n firstInputUnit=\"EUR\"\n secondInputUnit=\"mEUR\"\n />\n </Box>\n </Grid>\n <Divider className={classes.divider} orientation=\"vertical\" />\n <Grid item xs>\n <Box pb={1} px={3}>\n <ESGDistributionCalculator\n title={t('Governance')}\n weight={+data.governanceWeight.toFixed(1)}\n firstInputLabel={t('Total net externality per EUR revenue')}\n firstInputValue={data.corruptionRiskDividedByRevenue.toFixed(2)}\n secondInputLabel={t('Absolute net externality')}\n secondInputValue={parseToCurrency(data.corruptionRisk)}\n firstInputUnit=\"EUR\"\n secondInputUnit=\"mEUR\"\n />\n </Box>\n </Grid>\n </Grid>\n </>\n )}\n </>\n )}\n </Box>\n </Paper>\n );\n};\n\nESGDistribution.defaultProps = {\n data: null,\n};\n\nESGDistribution.propTypes = {\n data: PropTypes.shape({\n governanceWeight: PropTypes.number.isRequired,\n corruptionRiskDividedByRevenue: PropTypes.number.isRequired,\n corruptionRisk: PropTypes.number.isRequired,\n environmentWeight: PropTypes.number.isRequired,\n environmentExtCostsDividedByRevenue: PropTypes.number.isRequired,\n environmentExtCosts: PropTypes.number.isRequired,\n socialWeight: PropTypes.number.isRequired,\n socialRiskHoursExtCostsDividedByRevenue: PropTypes.number.isRequired,\n socialRiskHoursExtCosts: PropTypes.number.isRequired,\n }),\n loading: PropTypes.bool.isRequired,\n};\n\nexport default ESGDistribution;\n","export const ESGImpactTypes = {\n ENVIRONMENT: 'environment',\n SOCIAL: 'social',\n GOVERNANCE: 'governance',\n TOTAL: 'total',\n};\n","import { ESGImpactTypes } from './ESGImpactTypes';\n\nexport const ESGImpactLabels = {\n [ESGImpactTypes.ENVIRONMENT]: [\n 'Airborne pollution',\n 'Climate change',\n 'Waterborne pollution',\n 'Water consumption',\n 'Land use',\n ],\n [ESGImpactTypes.SOCIAL]: ['Child labour', 'Compensation', 'Gender inequality', 'Health safety'],\n [ESGImpactTypes.GOVERNANCE]: ['Corruption', 'Taxes'],\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Box from '@mui/material/Box';\nimport { indigo } from '@mui/material/colors';\n\nimport { theme } from 'theme';\n\nimport { ESGImpactLabels } from 'shared/constants/ESGImpactLabels';\n\nimport { EmptyDataLabel } from 'ui/Labels';\nimport { BarChart } from 'ui/Charts';\nimport { useReportPage } from 'shared/hooks';\n\nconst { darkCyan, softOrange, verySoftPink, veryLightBlue, black } = theme.palette.custom;\n\nconst ESGExternalCostsComparison = ({ entityName, externalCosts, impactType }) => {\n const { t } = useTranslation();\n\n const [selectedImpactData, setSelectedImpactData] = useState({\n company: externalCosts.companyData[impactType],\n industry: externalCosts.industryData[impactType],\n });\n\n useEffect(() => {\n setSelectedImpactData({\n company: externalCosts.companyData[impactType],\n industry: externalCosts.industryData[impactType],\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [impactType]);\n\n const isDataAvailable = externalCosts && externalCosts.companyData && externalCosts.industryData;\n\n const labels = ESGImpactLabels[impactType].map(label => t(label));\n\n const datasets = isDataAvailable\n ? [\n {\n label: entityName,\n backgroundColor: [darkCyan, softOrange, verySoftPink, veryLightBlue, black],\n data: Object.values(selectedImpactData.company).map(value => value.toFixed(2)),\n barPercentage: 1.0,\n barThickness: useReportPage ? 20 : 50,\n },\n {\n label: t('Peer group'),\n backgroundColor: indigo[500],\n data: Object.values(selectedImpactData.industry).map(value => value.toFixed(2)),\n barPercentage: 1.0,\n barThickness: useReportPage ? 20 : 50,\n },\n ]\n : [];\n\n return (\n <>\n {!isDataAvailable ? (\n <Box py={2}>\n <EmptyDataLabel label={t('There are no data available yet.')} />\n </Box>\n ) : (\n <Box mt={2} mx={2}>\n <BarChart\n datasets={datasets}\n labels={labels}\n extraLegendText=\"In Cents of EUR\"\n unit=\"¢\"\n showLegend={false}\n />\n </Box>\n )}\n </>\n );\n};\n\nESGExternalCostsComparison.propTypes = {\n entityName: PropTypes.string.isRequired,\n externalCosts: PropTypes.shape({\n companyData: PropTypes.object.isRequired,\n industryData: PropTypes.object.isRequired,\n }).isRequired,\n impactType: PropTypes.string.isRequired,\n};\n\nexport default ESGExternalCostsComparison;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport startCase from 'lodash/startCase';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Paper from '@mui/material/Paper';\nimport Box from '@mui/material/Box';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\n\nimport { theme } from 'theme';\nimport { useReportPage } from 'shared/hooks';\nimport { humanize } from 'shared/functions';\nimport { ErrorBoundary } from 'shared/errors';\nimport { Loader } from 'ui';\nimport { DoughnutChart, BoxPlotChart } from 'ui/Charts';\n\nconst componentWidth = useReportPage ? 200 : 600;\nconst useStyles = makeStyles({\n boxPlotLabel: {\n fontSize: 12,\n color: theme.palette.primary.main,\n marginLeft: 130,\n maxWidth: componentWidth,\n },\n});\n\nconst { darkCyan, softOrange, verySoftPink, veryLightBlue, black } = theme.palette.custom;\nconst colors = [darkCyan, softOrange, verySoftPink, veryLightBlue, black];\nconst parseDonutData = data =>\n Object.keys(data).reduce((prev, next) => {\n return {\n ...prev,\n [next]: (data[next] * 100).toFixed(1),\n };\n }, {});\nconst labels = {\n companyValueTooltip: 'outliersTooltip',\n companyValueGraph: 'outliers',\n peers25Value: 'quartile1',\n peers75Value: 'quartile3',\n peersMaxValue: 'whiskerHigh',\n peersMedianValue: 'quartile2',\n peersMinValue: 'whiskerLow',\n};\nconst parseBoxPlotData = data =>\n Object.keys(data)\n .map(key => ({\n ...Object.keys(data[key]).reduce(\n (prev, next) => ({\n ...prev,\n [labels[next]]: data[key][next],\n }),\n {},\n ),\n title: startCase(key),\n }))\n .map((item, index) => ({ ...item, color: colors[index] }));\n\n// eslint-disable-next-line no-unused-vars\nconst ESGImpactDistribution = React.memo(({ data, loading }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n return (\n <Paper>\n <Box p={2}>\n <Typography variant=\"h6\">{t('Distribution of impacts')}</Typography>\n <Box py={2}>\n <Divider />\n </Box>\n </Box>\n {loading ? (\n <Loader center />\n ) : (\n Object.keys(data).map(key =>\n data[key].boxplotData || data[key].donutData ? (\n <React.Fragment key={key}>\n <Box px={12} py={useReportPage ? 0 : 2}>\n <Typography variant={useReportPage ? 'body1' : 'h5'}>\n <strong>{humanize(key)}</strong>\n </Typography>\n </Box>\n <Box p={2}>\n <Grid container justifyContent={useReportPage ? 'flex-start' : 'space-between'}>\n <Grid item xs={useReportPage ? 6 : 4}>\n {data[key].donutData ? (\n <ErrorBoundary>\n <DoughnutChart\n data={parseDonutData(data[key].donutData)}\n width={400}\n height={300}\n margin={0}\n colors={colors}\n />\n </ErrorBoundary>\n ) : null}\n </Grid>\n {useReportPage ? null : <Divider orientation=\"vertical\" flexItem />}\n <Grid item xs={useReportPage ? 6 : 7}>\n {data[key].boxplotData ? (\n <ErrorBoundary>\n <div className={classes.boxPlotLabel}>{t('In Cents of EUR')}</div>\n <BoxPlotChart\n min={-0.5}\n max={10}\n height={useReportPage ? 15 : undefined}\n width={componentWidth}\n stats={parseBoxPlotData(data[key].boxplotData)}\n />\n </ErrorBoundary>\n ) : null}\n </Grid>\n </Grid>\n </Box>\n </React.Fragment>\n ) : null,\n )\n )}\n </Paper>\n );\n});\n\nESGImpactDistribution.propTypes = {\n data: PropTypes.shape({\n environment: PropTypes.shape({\n boxplotData: PropTypes.object,\n donutData: PropTypes.object,\n }),\n governance: PropTypes.shape({\n boxplotData: PropTypes.object,\n donutData: PropTypes.object,\n }),\n social: PropTypes.shape({\n boxplotData: PropTypes.object,\n donutData: PropTypes.object,\n }),\n }).isRequired,\n loading: PropTypes.bool.isRequired,\n};\n\nexport default ESGImpactDistribution;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@mui/material/Typography';\nimport clsx from 'clsx';\n\nimport { CustomTooltip } from 'ui';\nimport { theme } from 'theme';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { parseScoreToString } from 'shared/parsers/esg';\n\nconst useStyles = makeStyles(() => ({\n svgCircle: {\n pointerEvents: 'none',\n },\n tooltipScore: {\n textTransform: 'capitalize',\n },\n}));\n\nconst ESGImpactIcon = ({\n name,\n impactWeight,\n impactNumber,\n hoveredContinent,\n tooltip,\n className,\n}) => {\n const classes = useStyles();\n const classNames = clsx(classes.svgCircle, className);\n if (!impactWeight) return null;\n\n const renderIcon = (\n <svg height=\"32\" width=\"32\" className={classNames}>\n <circle cx=\"16\" cy=\"16\" r=\"7\" fill={theme.palette.custom.black} />\n {['average', 'high'].includes(impactWeight) && (\n <circle\n cx=\"16\"\n cy=\"16\"\n r=\"12\"\n strokeWidth=\"1\"\n fill=\"none\"\n stroke={theme.palette.custom.black}\n />\n )}\n {impactWeight === 'high' && (\n <circle\n cx=\"16\"\n cy=\"16\"\n r=\"13\"\n strokeWidth=\"5\"\n fill=\"none\"\n stroke={theme.palette.custom.black}\n />\n )}\n </svg>\n );\n\n return tooltip ? (\n <CustomTooltip\n placement=\"top\"\n title={\n <>\n <Typography color=\"primary\">{name}</Typography>\n <Typography className={classes.tooltipScore}>\n {`Score: ${parseScoreToString(impactNumber)}`}\n </Typography>\n <Typography className={classes.tooltipScore}>{`Weight: ${impactWeight}`}</Typography>\n </>\n }\n open={hoveredContinent === name}\n arrow\n >\n {renderIcon}\n </CustomTooltip>\n ) : (\n renderIcon\n );\n};\n\nESGImpactIcon.defaultProps = {\n name: null,\n impactWeight: null,\n impactNumber: null,\n hoveredContinent: null,\n tooltip: false,\n className: undefined,\n};\n\nESGImpactIcon.propTypes = {\n name: PropTypes.string,\n impactWeight: PropTypes.oneOf(['low', 'average', 'high']),\n impactNumber: PropTypes.number,\n hoveredContinent: PropTypes.string,\n tooltip: PropTypes.bool,\n className: PropTypes.string,\n};\n\nexport default ESGImpactIcon;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport capitalize from 'lodash/capitalize';\nimport Radio from '@mui/material/Radio';\nimport RadioGroup from '@mui/material/RadioGroup';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport FormControl from '@mui/material/FormControl';\n\nimport { ESGImpactTypes } from 'shared/constants/ESGImpactTypes';\n\nexport const ImpactTypeControls = ({ onChange, horizontal, includeTotal }) => {\n const filterImpactTypes = () =>\n Object.values(ESGImpactTypes).filter(value =>\n includeTotal ? value : value !== ESGImpactTypes.TOTAL,\n );\n\n const [impactTypes] = useState(filterImpactTypes());\n const [value, setValue] = useState(impactTypes[0]);\n\n const handleChange = ({ target }) => {\n setValue(target.value);\n onChange(target.value);\n };\n\n return (\n <FormControl component=\"fieldset\">\n <RadioGroup row={horizontal} name=\"impactType\" value={value} onChange={handleChange}>\n {impactTypes.map(impactType => (\n <FormControlLabel\n key={impactType}\n value={impactType}\n control={<Radio color=\"primary\" />}\n label={capitalize(impactType)}\n />\n ))}\n </RadioGroup>\n </FormControl>\n );\n};\n\nImpactTypeControls.defaultProps = {\n horizontal: false,\n includeTotal: true,\n};\n\nImpactTypeControls.propTypes = {\n onChange: PropTypes.func.isRequired,\n horizontal: PropTypes.bool,\n includeTotal: PropTypes.bool,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport clsx from 'clsx';\n\nimport { ESGImpactHexBorderMap, ESGImpactHexCodesMap } from 'shared/constants/ESGImpactHexCodesMap';\n\nconst useStyles = makeStyles({\n root: {\n borderRadius: 10,\n width: 20,\n height: 10,\n background: 'red',\n },\n});\n\nexport const LegendColorChip = ({ impactLevel, className }) => {\n const classes = useStyles();\n const classNames = clsx(classes.root, className);\n\n return (\n <div\n className={classNames}\n style={{\n backgroundColor: ESGImpactHexCodesMap[impactLevel],\n border: ESGImpactHexBorderMap[impactLevel],\n }}\n />\n );\n};\n\nLegendColorChip.defaultProps = {\n className: undefined,\n};\n\nLegendColorChip.propTypes = {\n impactLevel: PropTypes.oneOf(['insignificant', 'veryLow', 'low', 'medium', 'high', 'veryHigh'])\n .isRequired,\n className: PropTypes.string,\n};\n","import React from 'react';\nimport clsx from 'clsx';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\n\nimport { ESGImpactIcon } from 'modules/ESG';\n\nimport { InfoTooltip } from 'ui';\nimport { useReportPage } from 'shared/hooks';\nimport { LegendColorChip } from './LegendColorChip/LegendColorChip';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n flexGrow: 1,\n },\n columnDisplay: {\n display: 'flex',\n alignItems: 'flex-start',\n },\n row: {\n '& + &': {\n marginTop: theme.spacing(1),\n },\n },\n columnRow: {\n width: 410,\n },\n label: {\n width: 'auto',\n },\n score: {\n width: 'auto',\n marginRight: ({ column }) => (column ? 0 : theme.spacing(2)),\n },\n scoreColumn: {\n height: 32,\n },\n helpIcon: {\n marginRight: theme.spacing(1),\n cursor: 'pointer',\n },\n legendIcon: {\n marginRight: ({ column }) => (column ? 0 : theme.spacing(1)),\n transform: useReportPage ? 'scale(0.7)' : 'none',\n },\n legendLabel: {\n fontSize: useReportPage ? 10 : 14,\n },\n columnLabel: {\n fontSize: useReportPage ? 10 : 14,\n marginBottom: ({ column }) => column && 10,\n },\n}));\n\nexport const Legend = ({ column }) => {\n const classes = useStyles({ column });\n const { t } = useTranslation();\n\n const scores = [\n {\n impactLevel: 'veryHigh',\n label: t('Very high'),\n },\n {\n impactLevel: 'high',\n label: t('High'),\n },\n {\n impactLevel: 'medium',\n label: t('Medium'),\n },\n {\n impactLevel: 'low',\n label: t('Low'),\n },\n {\n impactLevel: 'veryLow',\n label: t('Very low'),\n },\n {\n impactLevel: 'insignificant',\n label: t('Insignificant'),\n },\n ];\n\n const weights = [\n {\n impactWeight: 'high',\n label: t('High (25% and above)'),\n },\n {\n impactWeight: 'average',\n label: t('Average (10% to 25%)'),\n },\n {\n impactWeight: 'low',\n label: t('Low (3% to 10%)'),\n },\n ];\n\n return (\n <div className={clsx(classes.container, column && classes.columnDisplay)}>\n <Grid\n container\n className={classes.row}\n direction={column ? 'column' : 'row'}\n justifyContent=\"flex-start\"\n alignItems={column ? 'flex-start' : 'center'}\n >\n <Grid\n container\n className={classes.score}\n direction=\"row\"\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n >\n {!useReportPage && (\n <InfoTooltip\n iconClassName={classes.helpIcon}\n title={t(\n 'The intensity measure reveals how intensive are the company’s externalities in a specific region/industry compared to other companies in that same region/industry.',\n )}\n />\n )}\n <strong className={classes.columnLabel}>{t('Intensity')}:</strong>\n </Grid>\n {[...scores].map(({ impactLevel, label }) => (\n <Grid\n key={impactLevel}\n className={clsx(classes.score, column && classes.scoreColumn)}\n container\n direction=\"row\"\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n >\n <LegendColorChip impactLevel={impactLevel} className={classes.legendIcon} />\n <Typography variant=\"body2\" className={classes.legendLabel}>\n {label}\n </Typography>\n </Grid>\n ))}\n </Grid>\n <Grid\n container\n className={clsx(column ? classes.columnRow : classes.row)}\n direction=\"row\"\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n >\n <Grid\n container\n className={classes.score}\n direction=\"row\"\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n >\n {!useReportPage && (\n <InfoTooltip\n iconClassName={classes.helpIcon}\n title={t(\n 'The weights represent the company’s perspective: they are based on the value of the company’s externalities in a specific region/industry compared to the sum of all externalities for that company. Their sum is 100%.',\n )}\n />\n )}\n <strong className={classes.columnLabel}>{t('Weights')}:</strong>\n </Grid>\n {[...weights].map(({ impactWeight, label }) => (\n <Grid\n key={impactWeight}\n className={classes.score}\n container\n direction=\"row\"\n justifyContent=\"flex-start\"\n alignItems=\"center\"\n >\n <ESGImpactIcon impactWeight={impactWeight} className={classes.legendIcon} />\n <Typography variant=\"body2\" className={classes.legendLabel}>\n {label}\n </Typography>\n </Grid>\n ))}\n </Grid>\n </div>\n );\n};\n\nLegend.defaultProps = {\n column: false,\n};\n\nLegend.propTypes = {\n column: PropTypes.bool,\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { ComposableMap, Geographies, Geography, Marker } from 'react-simple-maps';\nimport { makeStyles } from '@mui/styles';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport Grid from '@mui/material/Grid';\n\nimport { Loader } from 'ui';\nimport { ESGImpactIcon } from 'modules/ESG';\n\nimport { theme } from 'theme';\nimport { getHexColorByImpact } from 'shared/functions';\nimport { useReportPage } from 'shared/hooks';\nimport { ESGImpactTypes } from 'shared/constants/ESGImpactTypes';\nimport geoUrl from 'assets/world-110m.json';\n\nimport { ImpactTypeControls } from './ImpactTypeControls/ImpactTypeControls';\nimport { Legend } from '../ESGImpactTable/Legend/Legend';\n\nconst useStyles = makeStyles({\n root: {\n position: 'relative',\n },\n divider: {\n alignSelf: 'stretch',\n height: useReportPage ? 245 : 'auto',\n },\n svgMap: {\n marginTop: useReportPage ? -40 : 0,\n marginBottom: useReportPage ? -50 : -70,\n },\n});\n\nconst ESGImpactMap = ({ data, loading, withLegend }) => {\n const classes = useStyles();\n const [impactType, setImpactType] = useState(\n withLegend ? ESGImpactTypes.TOTAL : ESGImpactTypes.ENVIRONMENT,\n );\n const [hoveredContinent, setHoveredContinent] = useState(null);\n\n const continentsMarkers = [\n {\n name: 'Africa',\n lon: 22,\n lat: 7,\n continents: ['Africa'],\n },\n {\n name: 'Asia & Pacific',\n lon: 82,\n lat: 55,\n continents: ['Asia', 'Oceania'],\n },\n {\n name: 'Europe',\n lon: 12,\n lat: 52,\n continents: ['Europe'],\n },\n {\n name: 'Central & South America',\n lon: -65,\n lat: -2,\n continents: ['South America'],\n },\n {\n name: 'North America',\n lon: -115,\n lat: 50,\n continents: ['North America'],\n },\n ];\n\n const markers = [...continentsMarkers].map(marker => {\n const { name } = marker;\n const dataItem = data.find(item => item.continent === name);\n\n if (!dataItem) return null;\n\n const { impactWeight, impactNumber } = dataItem[impactType];\n\n return {\n ...marker,\n impactWeight,\n impactNumber,\n };\n });\n\n const getFillForContinent = continent => {\n let continentToColor = continent === 'Oceania' ? 'Asia' : continent;\n\n if (continent === 'Asia') continentToColor = 'Asia & Pacific';\n if (continent === 'Oceania') continentToColor = 'Asia & Pacific';\n if (continent === 'South America') continentToColor = 'Central & South America';\n\n const continentData = data.find(\n ({ continent: continentName }) => continentName === continentToColor,\n );\n\n return continentData\n ? getHexColorByImpact(\n continentData[impactType].impactNumber,\n continentData[impactType].impactWeight,\n )\n : theme.palette.grey[400];\n };\n\n const getStyles = geo => ({\n fill: getFillForContinent(geo.properties.CONTINENT),\n stroke: theme.palette.custom.white,\n strokeWidth: 0.75,\n outline: 'none',\n });\n\n const handleImpactTypeChange = value => setImpactType(value);\n\n const handleMove = value => {\n const findName = continentsMarkers.find(({ continents }) => continents.includes(value)).name;\n setHoveredContinent(findName);\n };\n const handleLeave = () => setHoveredContinent(null);\n\n return (\n <div className={classes.root}>\n {loading && <Loader cover />}\n <Grid container>\n <Grid item xs>\n <Box px={2}>\n <ComposableMap className={classes.svgMap}>\n <Geographies geography={geoUrl}>\n {({ geographies }) =>\n geographies.map(geo => {\n const current = geographies.find(({ rsmKey }) => rsmKey === geo.rsmKey);\n return (\n <Geography\n key={geo.rsmKey}\n geography={geo}\n onMouseMove={() => handleMove(current.properties.CONTINENT)}\n onMouseLeave={handleLeave}\n style={{\n default: {\n ...getStyles(geo),\n },\n hover: {\n ...getStyles(geo),\n },\n pressed: {\n ...getStyles(geo),\n },\n }}\n />\n );\n })\n }\n </Geographies>\n {markers.map(marker => {\n if (!marker) return null;\n const { lon, lat, impactWeight, impactNumber, name } = marker;\n\n return (\n <Marker key={name} coordinates={[lon, lat]}>\n <ESGImpactIcon\n name={name}\n impactWeight={impactWeight}\n impactNumber={impactNumber}\n hoveredContinent={hoveredContinent}\n tooltip\n />\n </Marker>\n );\n })}\n </ComposableMap>\n </Box>\n </Grid>\n <Divider className={classes.divider} orientation=\"vertical\" />\n <Grid item xs={4}>\n <Box p={2} pl={withLegend ? 1 : 2}>\n {withLegend ? (\n <Legend column />\n ) : (\n <ImpactTypeControls onChange={handleImpactTypeChange} />\n )}\n </Box>\n </Grid>\n </Grid>\n </div>\n );\n};\n\nESGImpactMap.defaultProps = {\n loading: false,\n withLegend: false,\n data: [],\n};\n\nESGImpactMap.propTypes = {\n data: PropTypes.arrayOf(\n PropTypes.shape({\n continent: PropTypes.oneOf([\n 'Africa',\n 'Asia & Pacific',\n 'Europe',\n 'Central & South America',\n 'North America',\n ]).isRequired,\n environment: PropTypes.shape({\n impactNumber: PropTypes.number.isRequired,\n impactWeight: PropTypes.oneOf(['low', 'average', 'high']),\n }),\n social: PropTypes.shape({\n impactNumber: PropTypes.number.isRequired,\n impactWeight: PropTypes.oneOf(['low', 'average', 'high']),\n }),\n governance: PropTypes.shape({\n impactNumber: PropTypes.number.isRequired,\n impactWeight: PropTypes.oneOf(['low', 'average', 'high']),\n }),\n total: PropTypes.shape({\n impactNumber: PropTypes.number.isRequired,\n impactWeight: PropTypes.oneOf(['low', 'average', 'high']),\n }),\n }),\n ),\n loading: PropTypes.bool,\n withLegend: PropTypes.bool,\n};\n\nexport default ESGImpactMap;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Typography from '@mui/material/Typography';\nimport { Box, Tooltip } from '@mui/material';\nimport InfoIcon from '@mui/icons-material/Info';\n\nimport { Loader, BlurredContactAdvisorBox } from 'ui';\nimport { ScoreWidget, ScoreWidgetMainColumn, ScoreWidgetSingleValueColumn } from 'ui/ScoreWidget';\nimport { formatDate } from 'shared/functions';\nimport { useReportPage } from 'shared/hooks';\n\nconst useStyles = makeStyles(theme => ({\n contactAdvisorDesc: {\n marginTop: theme.spacing(0.6),\n width: '100%',\n },\n infoIcon: {\n fontSize: 16,\n marginLeft: 3,\n },\n label: {\n display: 'flex',\n alignItems: 'center',\n whiteSpace: 'nowrap',\n },\n}));\n\nconst ESGImpactScore = ({ data, score, loading }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n if (loading)\n return (\n <Box height={150} display=\"flex\" alignItems=\"center\" justifyContent=\"center\">\n <Loader center />\n </Box>\n );\n\n return data && score ? (\n <ScoreWidget>\n <ScoreWidgetMainColumn\n label={t('ESG Impact review')}\n value={score ? score.toFixed(1) : '-'}\n />\n <ScoreWidgetSingleValueColumn\n label={\n <div className={classes.label}>\n {t('Stability')}{' '}\n {!useReportPage && (\n <Tooltip\n placement=\"top\"\n title={t(\n 'Sensitivity to shifts in business model leading to shifts in ESG impacts under consideration of data precision',\n )}\n >\n <InfoIcon className={classes.infoIcon} />\n </Tooltip>\n )}\n </div>\n }\n value={data.stability}\n />\n <ScoreWidgetSingleValueColumn\n label={\n <div className={classes.label}>\n {t('Data precision')}{' '}\n {!useReportPage && (\n <Tooltip\n placement=\"top\"\n title={t('Indicator reflecting the quality and granularity of input data')}\n >\n <InfoIcon className={classes.infoIcon} />\n </Tooltip>\n )}\n </div>\n }\n value={data.dataPrecision}\n />\n <ScoreWidgetSingleValueColumn\n label={<Typography className={classes.label}>{t('Latest update')}</Typography>}\n value={formatDate(data.latestUpdate)}\n last\n />\n </ScoreWidget>\n ) : (\n <BlurredContactAdvisorBox active={false} />\n );\n};\n\nESGImpactScore.defaultProps = {\n score: null,\n data: null,\n};\n\nESGImpactScore.propTypes = {\n loading: PropTypes.bool.isRequired,\n score: PropTypes.number,\n data: PropTypes.shape({\n stability: PropTypes.string.isRequired,\n dataPrecision: PropTypes.string.isRequired,\n latestUpdate: PropTypes.string.isRequired,\n }),\n};\n\nexport default ESGImpactScore;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport MUIDataTable from 'mui-datatables';\nimport { makeStyles } from '@mui/styles';\nimport Box from '@mui/material/Box';\nimport Chip from '@mui/material/Chip';\nimport Typography from '@mui/material/Typography';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\n\nimport { CustomTooltip, Loader } from 'ui';\nimport { ESGImpactIcon } from 'modules/ESG';\nimport { getHexColorByImpact } from 'shared/functions';\nimport { useReportPage } from 'shared/hooks';\nimport { parseScoreToString } from 'shared/parsers/esg';\nimport { ESGImpactHexBorderMap } from 'shared/constants/ESGImpactHexCodesMap';\n\nimport { Legend } from './Legend/Legend';\n\nconst useStyles = makeStyles(() => ({\n root: {\n position: 'relative',\n },\n name: {\n fontSize: useReportPage ? 10 : 14,\n },\n tooltipScore: {\n textTransform: 'capitalize',\n },\n}));\n\nconst chipStyles = makeStyles(() => ({\n root: {\n width: 100,\n fontWeight: 600,\n height: useReportPage ? 32 : 42,\n borderRadius: 10,\n },\n icon: {\n marginLeft: 'auto',\n marginRight: 'auto',\n transform: useReportPage ? 'scale(0.7)' : 'none',\n },\n}));\n\nconst getMuiTheme = () => ({\n component: {\n MUIDataTableHeadCell: {\n styleOverrides: {\n fixedHeaderCommon: {\n backgroundColor: '#F5F5F5',\n padding: `${useReportPage ? '6px' : '24px'} 16px`,\n borderBottom: 0,\n fontSize: useReportPage ? 10 : 14,\n },\n fixedHeader: {\n zIndex: 1,\n }\n }\n },\n MuiTableCell: {\n styleOverrides: {\n root: {\n padding: `${useReportPage ? '6px' : '16px'} 16px`,\n }\n }\n },\n MUIDataTableSelectCell: {\n styleOverrides: {\n headerCell: {\n zIndex: 1,\n },\n fixedLeft: {\n zIndex: 1,\n }\n }\n }\n },\n});\n\nconst ESGImpactTable = ({ loading, data, type }) => {\n const classes = useStyles();\n const chipClasses = chipStyles();\n const isIndustry = type === 'industry';\n\n const options = {\n pagination: false,\n selectableRows: 'none',\n filter: false,\n search: false,\n download: false,\n print: false,\n viewColumns: false,\n elevation: 0,\n responsive: 'standard',\n };\n\n const chartColumnsOptions = {\n sort: false,\n // eslint-disable-next-line react/prop-types\n customBodyRender: ({ name, impactNumber, impactWeight }) => (\n <CustomTooltip\n placement=\"top\"\n title={\n <>\n <Typography color=\"primary\">{name}</Typography>\n <Typography className={classes.tooltipScore}>\n {`Intensity: ${parseScoreToString(impactNumber)}`}\n </Typography>\n <Typography className={classes.tooltipScore}>\n {`Weight: ${impactWeight || 'none'}`}\n </Typography>\n </>\n }\n arrow\n >\n <Chip\n icon={<ESGImpactIcon impactWeight={impactWeight} />}\n classes={chipClasses}\n style={{\n backgroundColor: getHexColorByImpact(impactNumber, impactWeight),\n border: impactWeight ? 'none' : ESGImpactHexBorderMap.insignificant,\n flexDirection: 'column',\n }}\n />\n </CustomTooltip>\n ),\n };\n\n const columns = [\n {\n name: isIndustry ? 'industry' : 'region',\n label: isIndustry ? 'Industry' : 'Region',\n options: {\n sort: false,\n customBodyRender: v => (\n <Typography className={classes.name} color=\"primary\">\n {v}\n </Typography>\n ),\n },\n },\n { name: 'environment', label: 'Environment', options: chartColumnsOptions },\n { name: 'social', label: 'Social', options: chartColumnsOptions },\n { name: 'governance', label: 'Governance', options: chartColumnsOptions },\n { name: 'total', label: 'Total', options: chartColumnsOptions },\n ];\n\n return <>\n <div className={classes.root}>\n {loading && <Loader cover />}\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={getMuiTheme()}>\n <MUIDataTable columns={columns} options={options} data={data} />\n </ThemeProvider>\n </StyledEngineProvider>\n </div>\n <Box p={2}>\n <Legend />\n </Box>\n </>;\n};\n\nESGImpactTable.defaultProps = {\n loading: false,\n};\n\nESGImpactTable.propTypes = {\n data: PropTypes.arrayOf(PropTypes.array.isRequired).isRequired,\n loading: PropTypes.bool,\n type: PropTypes.oneOf(['industry', 'region']).isRequired,\n};\n\nexport default ESGImpactTable;\n","export const rankingScale = ['1st', '2nd', '3rd', '4th'];\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Typography from '@mui/material/Typography';\n\nimport { useReportPage } from 'shared/hooks';\nimport { rankingScale } from 'shared/constants/esg';\n\nconst rectangularUseStyles = makeStyles(theme => ({\n container: {\n marginRight: 15,\n transform: useReportPage ? 'scale(0.7)' : 'scale(1)',\n },\n item: {\n position: 'relative',\n padding: '5px 0',\n background: theme.palette.grey[300],\n borderBottom: '1px solid white',\n\n '&:not(:last-child):after, &:not(:last-child):before': {\n content: '\"\"',\n position: 'absolute',\n bottom: -1,\n width: 3,\n height: 1,\n background: theme.palette.grey[300],\n },\n '&:not(:last-child):before': {\n left: 0,\n },\n '&:not(:last-child):after': {\n right: 0,\n },\n '&:last-child': {\n borderBottom: 'none',\n },\n },\n active: {\n background: theme.palette.primary.main,\n color: theme.palette.custom.white,\n },\n text: {\n fontWeight: 500,\n textAlign: 'center',\n },\n}));\n\nconst RectangularScale = ({ quarter }) => {\n const rectangularClasses = rectangularUseStyles();\n\n return (\n <div className={rectangularClasses.container}>\n {Object.values(rankingScale).map((v, i) => (\n <div\n key={v}\n className={clsx(rectangularClasses.item, {\n [rectangularClasses.active]: i === quarter - 1,\n })}\n >\n <Typography variant=\"body2\" className={rectangularClasses.text}>\n {v}\n </Typography>\n </div>\n ))}\n </div>\n );\n};\n\nRectangularScale.propTypes = {\n quarter: PropTypes.number.isRequired,\n};\n\nexport { RectangularScale };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\n\nimport { rankingScale } from 'shared/constants/esg';\nimport { useReportPage } from 'shared/hooks';\n\nconst circleUseStyles = makeStyles(theme => ({\n item: {\n borderRadius: '50%',\n position: 'relative',\n width: 120,\n height: 120,\n transform: useReportPage ? 'scale(0.7)' : 'scale(1)',\n marginLeft: useReportPage ? -25 : 0,\n transition: 'background-color 200ms',\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n color: theme.palette.custom.white,\n '& $divider': {\n backgroundColor: theme.palette.custom.white,\n },\n },\n },\n textWrapper: {\n margin: 0,\n position: 'absolute',\n top: '50%',\n left: '50%',\n width: 90,\n transform: 'translate(-50%, -50%)',\n },\n text: {\n textAlign: 'center',\n fontWeight: 500,\n lineHeight: '20px',\n },\n rankText: {\n textAlign: 'center',\n fontWeight: 500,\n },\n divider: {\n backgroundColor: theme.palette.custom.black,\n margin: theme.spacing(0.7, 0),\n },\n}));\n\nconst CircleScale = ({ total, quarter, rank }) => {\n const { t } = useTranslation();\n const circleClasses = circleUseStyles();\n const quarterValue = Number(quarter) === 1 ? 'Top' : rankingScale[Number(quarter) - 1];\n\n return (\n <Paper className={circleClasses.item}>\n <div className={circleClasses.textWrapper}>\n <Typography variant=\"subtitle1\" className={circleClasses.text}>\n {quarterValue}\n </Typography>\n <Typography variant=\"subtitle1\" className={circleClasses.text}>\n {t('Quartile')}\n </Typography>\n <Divider className={circleClasses.divider} />\n <Typography variant=\"body2\" className={circleClasses.rankText}>{`${t(\n 'Rank',\n )} ${rank} of ${total}`}</Typography>\n </div>\n </Paper>\n );\n};\n\nCircleScale.propTypes = {\n total: PropTypes.number.isRequired,\n quarter: PropTypes.number.isRequired,\n rank: PropTypes.number.isRequired,\n};\n\nexport { CircleScale };\n","import React, { useState, Suspense, lazy } from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\nimport Link from '@mui/material/Link';\nimport Dialog from '@mui/material/Dialog';\n\nimport { useReportPage } from 'shared/hooks';\nimport { Loader } from 'ui';\nimport { RectangularScale } from './RectangularScale';\nimport { CircleScale } from './CircleScale';\n\nconst RankingModal = lazy(() => import('./RankingModal'));\n\nconst rankingItemUseStyles = makeStyles(theme => ({\n itemTitle: {\n paddingLeft: theme.spacing(2),\n fontSize: useReportPage ? 12 : 16,\n fontWeight: 500,\n },\n}));\n\nconst RankingItem = ({ title, total, section, entityName }) => {\n const [isOpen, setIsOpen] = useState(false);\n\n const rankingItemClasses = rankingItemUseStyles();\n const handleOpen = () => setIsOpen(true);\n const handleClose = () => setIsOpen(false);\n\n return (\n <Grid item xs>\n <Typography variant=\"h6\" className={rankingItemClasses.itemTitle}>\n {title}\n </Typography>\n <Box p={useReportPage ? 0 : 2}>\n <Grid container>\n <Grid item xs={5}>\n <RectangularScale {...section} />\n </Grid>\n <Grid item xs={7}>\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n <Link component=\"button\" onClick={handleOpen}>\n <CircleScale {...section} total={total} />\n </Link>\n </Grid>\n </Grid>\n </Box>\n <Dialog open={isOpen} maxWidth=\"md\" fullWidth>\n <Suspense fallback={<Loader center />}>\n <RankingModal onClose={handleClose} data={section.betterScores} entityName={entityName} />\n </Suspense>\n </Dialog>\n </Grid>\n );\n};\n\nRankingItem.propTypes = {\n title: PropTypes.string.isRequired,\n total: PropTypes.number.isRequired,\n section: PropTypes.object.isRequired,\n entityName: PropTypes.string.isRequired,\n};\n\nexport { RankingItem };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nimport { Loader } from 'ui';\nimport { ViewPeerGroup } from 'modules/common';\nimport { useReportPage } from 'shared/hooks';\nimport { fetchPeersNames } from 'services';\nimport { RankingItem } from './RankingItem';\n\nconst useStyles = makeStyles(theme => ({\n divider: {\n alignSelf: 'stretch',\n height: 'auto',\n margin: theme.spacing(0, 2),\n },\n}));\n\nconst ESGRanking = ({ data, loading, id, entityName }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const { totalRank, totalSection, environmentSection, socialSection, governanceSection } = data;\n\n return (\n <Paper>\n <Box px={2} pt={1}>\n <Grid container>\n <Grid item xs={10}>\n <Typography variant=\"h6\">{t('Ranking compared to peers')}</Typography>\n </Grid>\n {!useReportPage ? (\n <Grid container item xs={2} justifyContent=\"flex-end\">\n <ViewPeerGroup id={id} fetchPeersNames={fetchPeersNames} />\n </Grid>\n ) : null}\n </Grid>\n </Box>\n <Box p={2} py={useReportPage ? 1 : 2}>\n {loading ? (\n <Loader center />\n ) : (\n <>\n <Box pb={2}>\n <Divider />\n </Box>\n <Grid container justifyContent=\"space-around\">\n <RankingItem\n title={t('Total')}\n section={totalSection}\n total={totalRank}\n entityName={entityName}\n />\n <Divider className={classes.divider} orientation=\"vertical\" />\n <RankingItem\n title={t('Environment')}\n section={environmentSection}\n total={totalRank}\n entityName={entityName}\n />\n <Divider className={classes.divider} orientation=\"vertical\" />\n <RankingItem\n title={t('Social')}\n section={socialSection}\n total={totalRank}\n entityName={entityName}\n />\n <Divider className={classes.divider} orientation=\"vertical\" />\n <RankingItem\n title={t('Governance')}\n section={governanceSection}\n total={totalRank}\n entityName={entityName}\n />\n </Grid>\n </>\n )}\n </Box>\n </Paper>\n );\n};\n\nESGRanking.propTypes = {\n loading: PropTypes.bool.isRequired,\n id: PropTypes.string.isRequired,\n entityName: PropTypes.string.isRequired,\n data: PropTypes.shape({\n totalRank: PropTypes.number.isRequired,\n totalSection: PropTypes.object.isRequired,\n environmentSection: PropTypes.object.isRequired,\n socialSection: PropTypes.object.isRequired,\n governanceSection: PropTypes.object.isRequired,\n }).isRequired,\n};\n\nexport default ESGRanking;\n","import { grey, red, yellow, blue } from '@mui/material/colors';\n\nexport const worstColor = red[500];\nexport const averageColor = yellow[500];\nexport const bestColor = blue[500];\nexport const missingColor = grey[500];\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { Doughnut } from 'react-chartjs-2';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\nimport { CustomTooltip, ConditionalWrapper } from 'ui';\n\nimport { theme } from 'theme';\nimport {\n worstColor,\n averageColor,\n bestColor,\n missingColor,\n} from 'shared/constants/ESGScoresColors';\nimport { getHexColorByScoreOverview } from 'shared/functions';\nimport { useReportPage } from 'shared/hooks';\n\nconst useStyles = makeStyles(themeObject => ({\n chartWrapper: {\n width: useReportPage ? 'auto' : 260,\n position: 'relative',\n margin: '0 auto',\n\n '& .chartjs-size-monitor': {\n maxWidth: 0,\n },\n '& .chartjs-render-monitor': {\n margin: '0 auto',\n },\n },\n scoreNumbers: {\n position: 'absolute',\n top: useReportPage ? '90%' : '85%',\n left: '50%',\n transform: `translate(-50%, -50%) ${useReportPage ? 'scale(0.6)' : ''}`,\n },\n scoreNumber: {\n fontSize: 40,\n fontWeight: 500,\n display: 'inline-block',\n },\n scoreMaxNumber: {\n fontSize: 18,\n fontWeight: 500,\n display: 'inline-block',\n },\n legendChip: {\n borderRadius: 10,\n width: 20,\n height: 10,\n background: 'red',\n },\n tooltipTitle: {\n color: themeObject.palette.primary.main,\n fontWeight: 500,\n },\n}));\n\nconst prepareDataToDisplay = value => parseFloat(value.toFixed(1));\n\nconst ESGScore = ({ title, score, worst, average, best }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n const isComparison = worst || average || best;\n\n const notFilledColor = isComparison ? 'transparent' : missingColor;\n\n const maxScore = 10;\n\n const data = {\n datasets: [\n ...(!isComparison\n ? [\n {\n data: [score, maxScore - score],\n backgroundColor: [getHexColorByScoreOverview(score), notFilledColor],\n },\n ]\n : []),\n ...(worst !== null\n ? [\n {\n data: [worst, maxScore - worst],\n backgroundColor: [worstColor, notFilledColor],\n },\n ]\n : []),\n ...(average !== null\n ? [\n {\n data: [average, maxScore - average],\n backgroundColor: [averageColor, notFilledColor],\n },\n ]\n : []),\n ...(best !== null\n ? [\n {\n data: [best, maxScore - best],\n backgroundColor: [bestColor, notFilledColor],\n },\n ]\n : []),\n ],\n };\n\n const options = {\n cutout: '85%',\n circumference: 180,\n rotation: -90,\n width: 250,\n aspectRatio: 2,\n legend: {\n display: false,\n },\n tooltips: {\n enabled: false,\n },\n hover: {\n mode: null,\n },\n elements: {\n arc: {\n borderWidth: 0,\n },\n },\n };\n\n return (\n <>\n {title && (\n <Box mb={3}>\n <Typography align=\"center\" variant=\"h5\">\n <strong>{title}</strong>\n </Typography>\n </Box>\n )}\n <div className={classes.chartWrapper}>\n <ConditionalWrapper\n condition={isComparison}\n wrapper={children => (\n <CustomTooltip\n tooltipStyles={{ position: 'relative', top: theme.spacing(12) }}\n placement=\"top\"\n title={\n <>\n <div className={classes.tooltipTitle}>{t('Peer group comparison')}</div>\n <div>{best && `${t('Best')}: ${best}`}</div>\n <div>{average && `${t('Average')}: ${average}`}</div>\n <div>{worst && `${t('Worst')}: ${worst}`}</div>\n </>\n }\n arrow\n >\n {children}\n </CustomTooltip>\n )}\n >\n <div>\n <Doughnut data={data} options={options} />\n <div className={classes.scoreNumbers}>\n <Typography className={classes.scoreNumber} variant=\"h3\">\n {prepareDataToDisplay(score)}\n </Typography>\n <Typography className={classes.scoreMaxNumber} variant=\"h3\">\n /{maxScore}\n </Typography>\n </div>\n </div>\n </ConditionalWrapper>\n </div>\n </>\n );\n};\n\nESGScore.defaultProps = {\n title: null,\n score: 0,\n worst: null,\n average: null,\n best: null,\n};\n\nESGScore.propTypes = {\n title: PropTypes.string,\n score: (props, propName, componentName) => {\n const prop = props[propName];\n\n if (typeof prop !== 'number')\n throw new Error(`${componentName} only accepts numbers for ${propName} prop`);\n\n if (prop > 10 || prop < 1)\n throw new Error(\n `${componentName} only accepts numbers between 1 and 10 for ${propName} prop`,\n );\n\n return undefined;\n },\n worst: PropTypes.number,\n average: PropTypes.number,\n best: PropTypes.number,\n};\n\nexport default ESGScore;\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport { indigo } from '@mui/material/colors';\n\nimport { Loader } from 'ui';\nimport { EmptyDataLabel } from 'ui/Labels';\nimport { GougeChart } from 'ui/Charts';\nimport { FlatScoreComparisonChart } from 'modules/ESG';\nimport { ViewPeerGroup } from 'modules/common';\nimport { getHexColorByScoreOverview } from 'shared/functions';\nimport { useReportPage } from 'shared/hooks';\nimport { fetchPeersNames } from 'services';\n\nconst scoreMax = 10;\n\nconst useStyles = makeStyles({\n divider: {\n alignSelf: 'stretch',\n height: 'auto',\n },\n itemWrapper: {\n maxWidth: '33.2%',\n },\n score: {\n fontSize: 40,\n fontWeight: 500,\n },\n scoreTotal: {\n fontSize: 18,\n fontWeight: 500,\n },\n legendText: {\n fontSize: useReportPage ? 10 : 14,\n },\n flatScoreComparisonChartWrapper: {\n marginLeft: useReportPage ? 60 : 100,\n marginRight: useReportPage ? 60 : 100,\n },\n});\n\nconst ESGScoreComparison = ({ scores, id, loading }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n return (\n <Paper>\n <Box p={2}>\n <Grid container>\n <Grid item xs={10}>\n <Typography variant=\"h6\">{t('Peer group comparison')}</Typography>\n </Grid>\n {!useReportPage ? (\n <Grid container item xs={2} justifyContent=\"flex-end\">\n <ViewPeerGroup id={id} fetchPeersNames={fetchPeersNames} />\n </Grid>\n ) : null}\n </Grid>\n </Box>\n <Box p={2}>\n {loading ? (\n <Loader center />\n ) : (\n <>\n {scores.length === 0 ? (\n <Box py={2}>\n <EmptyDataLabel label={t('There are no data available yet.')} />\n </Box>\n ) : (\n <>\n <Box py={2}>\n <Divider />\n </Box>\n <Grid container>\n {scores.map(\n (\n {\n title,\n score,\n worstScore,\n averageScore,\n bestScore,\n companyImpact,\n supplyChainImpact,\n averageImpact,\n bestImpact,\n worstImpact,\n },\n index,\n ) => (\n <Fragment key={title}>\n <Grid item xs className={classes.itemWrapper}>\n <Box py={2}>\n <GougeChart\n value={score}\n best={bestScore}\n worst={worstScore}\n average={averageScore}\n score={\n <Box>\n <Typography className={classes.score} component=\"span\">\n {score}\n </Typography>\n <Typography className={classes.scoreTotal} component=\"span\">\n /{scoreMax}\n </Typography>\n </Box>\n }\n title={title}\n color={getHexColorByScoreOverview(score)}\n />\n <div className={classes.flatScoreComparisonChartWrapper}>\n <FlatScoreComparisonChart\n lowest={worstImpact}\n average={averageImpact}\n highest={bestImpact}\n companyImpact={companyImpact}\n supplyChainImpact={supplyChainImpact}\n />\n </div>\n </Box>\n </Grid>\n {index < scores.length - 1 && (\n <Divider className={classes.divider} orientation=\"vertical\" />\n )}\n </Fragment>\n ),\n )}\n </Grid>\n </>\n )}\n </>\n )}\n <Box display=\"flex\">\n <Box\n width={useReportPage ? 14 : 40}\n height={useReportPage ? 7 : 20}\n marginTop={useReportPage ? '4px' : 0}\n borderRadius=\"5px\"\n marginRight={1}\n style={{ backgroundColor: indigo[400] }}\n />\n <Typography variant=\"body2\" className={classes.legendText}>\n {t('Peer group')}\n </Typography>\n </Box>\n </Box>\n </Paper>\n );\n};\n\nESGScoreComparison.propTypes = {\n loading: PropTypes.bool.isRequired,\n id: PropTypes.string.isRequired,\n scores: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string,\n score: PropTypes.number.isRequired,\n worstScore: PropTypes.number.isRequired,\n averageScore: PropTypes.number.isRequired,\n bestScore: PropTypes.number.isRequired,\n }),\n ).isRequired,\n};\n\nexport default ESGScoreComparison;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport clsx from 'clsx';\nimport Typography from '@mui/material/Typography';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { grey, red, indigo } from '@mui/material/colors';\n\nimport { useReportPage } from 'shared/hooks';\nimport { CustomTooltip } from 'ui';\n\nconst useStyles = makeStyles({\n wrapper: {\n position: 'relative',\n paddingTop: 25,\n },\n inner: {\n position: 'relative',\n },\n topBar: {\n height: 50,\n position: 'relative',\n marginBottom: 10,\n },\n topBarScore: {\n height: 10,\n backgroundColor: indigo[400],\n position: 'absolute',\n bottom: 0,\n '&:before, &:after': {\n content: '\"\"',\n display: 'block',\n width: 1,\n backgroundColor: indigo[400],\n position: 'absolute',\n bottom: 0,\n },\n '&:before': {\n left: 0,\n height: 20,\n },\n '&:after': {\n right: 0,\n height: 50,\n },\n },\n average: {\n display: 'block',\n backgroundColor: grey[500],\n width: 1,\n height: 35,\n position: 'absolute',\n bottom: 0,\n },\n bottomBar: {\n backgroundColor: grey[500],\n borderRadius: 10,\n height: 10,\n overflow: 'hidden',\n },\n bottomBarScore: {\n backgroundColor: grey[700],\n height: '100%',\n },\n bottomBarScoreIndicator: {\n top: 0,\n bottom: 0,\n position: 'absolute',\n width: 1,\n backgroundColor: red[700],\n },\n topBarLabel: {\n position: 'absolute',\n transform: useReportPage ? 'translate(-50%, 10px)' : 'translateX(-50%)',\n fontSize: useReportPage ? 8 : 'inherit',\n },\n});\n\nconst useLegendStyles = makeStyles(theme => ({\n wrapper: {\n display: 'flex',\n justifyContent: 'space-between',\n },\n item: {\n marginTop: 10,\n marginBottom: 10,\n '&:last-child': {\n textAlign: 'right',\n },\n '& > div': {\n marginTop: 5,\n marginBottom: 5,\n },\n },\n label: {\n color: theme.palette.primary.main,\n fontSize: useReportPage ? 8 : 'inherit',\n },\n value: {\n fontSize: useReportPage ? 10 : 18,\n },\n}));\n\nconst FlatScoreComparisonChart = ({\n lowest,\n average,\n highest,\n companyImpact,\n supplyChainImpact,\n}) => {\n const { t } = useTranslation();\n const usePositionsStyles = makeStyles({\n labelLowest: {\n left: `${lowest}%`,\n top: '30px',\n },\n labelAverage: {\n top: '15px',\n left: `${average}%`,\n },\n labelHighest: {\n top: 0,\n left: `${highest}%`,\n },\n bottomBarScore: {\n width: `${companyImpact}%`,\n },\n bottomBarScoreIndicator: {\n left: `${companyImpact}%`,\n },\n average: {\n left: `${average}%`,\n },\n topBarScore: {\n left: `${lowest}%`,\n right: `calc(100% - ${highest}%)`,\n },\n });\n const classes = useStyles();\n const positionsClasses = usePositionsStyles();\n const legendClasses = useLegendStyles();\n\n const labelsClasses = {\n lowest: clsx(classes.topBarLabel, positionsClasses.labelLowest),\n average: clsx(classes.topBarLabel, positionsClasses.labelAverage),\n highest: clsx(classes.topBarLabel, positionsClasses.labelHighest),\n };\n const indicatorsClasses = {\n bottomBarScore: clsx(classes.bottomBarScore, positionsClasses.bottomBarScore),\n bottomBarScoreIndicator: clsx(\n classes.bottomBarScoreIndicator,\n positionsClasses.bottomBarScoreIndicator,\n ),\n average: clsx(classes.average, positionsClasses.average),\n topBarScore: clsx(classes.topBarScore, positionsClasses.topBarScore),\n };\n\n return (\n <CustomTooltip\n placement=\"right\"\n title={\n <>\n <Typography variant=\"h6\">{t('Impact of company sites')}</Typography>\n <Typography variant=\"caption\">\n {t('Lowest')}: <strong>{lowest.toFixed(1)}%</strong>\n </Typography>\n <br />\n <Typography variant=\"caption\">\n {t('Average')}: <strong>{average.toFixed(1)}%</strong>\n </Typography>\n <br />\n <Typography variant=\"caption\">\n {t('Highest')}: <strong>{highest.toFixed(1)}%</strong>\n </Typography>\n </>\n }\n arrow\n >\n <div className={classes.wrapper}>\n <span className={labelsClasses.lowest}>{t('Lowest')}</span>\n <span className={labelsClasses.average}>{t('Avg.')}</span>\n <span className={labelsClasses.highest}>{t('Highest')}</span>\n <div className={classes.inner}>\n <div className={classes.topBar}>\n <div className={indicatorsClasses.topBarScore} />\n <span className={indicatorsClasses.average} />\n </div>\n <div className={classes.bottomBar}>\n <div className={indicatorsClasses.bottomBarScore} />\n </div>\n <span className={indicatorsClasses.bottomBarScoreIndicator} />\n </div>\n <div className={legendClasses.wrapper}>\n <div className={legendClasses.item}>\n <div className={legendClasses.label}>{t('Company sites')}</div>\n <div className={legendClasses.value}>{companyImpact}%</div>\n </div>\n <div className={legendClasses.item}>\n <div className={legendClasses.label}>{t('Supply chain')}</div>\n <div className={legendClasses.value}>{supplyChainImpact}%</div>\n </div>\n </div>\n </div>\n </CustomTooltip>\n );\n};\n\nFlatScoreComparisonChart.propTypes = {\n companyImpact: PropTypes.number.isRequired,\n supplyChainImpact: PropTypes.number.isRequired,\n lowest: PropTypes.number.isRequired,\n average: PropTypes.number.isRequired,\n highest: PropTypes.number.isRequired,\n};\n\nexport default FlatScoreComparisonChart;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { Formik, Form, Field, ErrorMessage } from 'formik';\nimport get from 'lodash/get';\n\nimport Button from '@mui/material/Button';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport Paper from '@mui/material/Paper';\nimport InputBase from '@mui/material/InputBase';\nimport IconButton from '@mui/material/IconButton';\nimport Stepper from '@mui/material/Stepper';\nimport Step from '@mui/material/Step';\nimport StepLabel from '@mui/material/StepLabel';\nimport Box from '@mui/material/Box';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Divider from '@mui/material/Divider';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport { theme } from 'theme';\n\nimport { downloadService, uploadPortfolio, confirmPortfolioESG } from 'services';\nimport { portfolioUploadSteps as steps } from 'shared/constants/portfolioUploadSteps';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { portfolioUploadSchema, creditReviewCreatePortfolioSchema } from 'shared/validations';\nimport { useNotifications } from 'shared/hooks';\nimport { Loader } from 'ui/Loader/Loader';\nimport { getDossiersAction, refreshDossiersAction } from 'store/portfolio/dossierActions';\nimport { formatNumber } from 'shared/functions';\nimport { getAuthDataOrganisationId } from 'selectors/auth';\n\nconst useStyles = makeStyles({\n downloadTemplateContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n downloadButtonContainer: {\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'flex-end',\n },\n input: {\n display: 'none',\n },\n uploadContainer: {\n padding: '2px 4px',\n margin: theme.spacing(2, 0),\n display: 'flex',\n alignItems: 'center',\n },\n fileUploadText: {\n marginLeft: theme.spacing(1),\n flex: 1,\n },\n fullWidth: {\n width: '100%',\n },\n summaryContent: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n textCenter: {\n textAlign: 'center',\n },\n checkIcon: {\n fontSize: 80,\n },\n score: {\n fontSize: 40,\n fontWeight: 'bold',\n },\n strong: {\n fontWeight: 700,\n },\n selectButton: {\n width: 150,\n height: 100,\n textTransform: 'inherit',\n border: 'none',\n color: theme.palette.text.primary,\n boxShadow: '0 4px 4px 2px rgba(155, 155, 155, 0.3)',\n padding: '0 35px',\n },\n selectTitle: {\n fontSize: 15,\n },\n});\n\nconst PortfolioUploadESG = ({\n portfolioType,\n ratingType,\n onClose,\n backToTypeSelection,\n onClickCreateNew,\n createdPortfolioName,\n createdPortfolioDesc,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const { notifyError } = useNotifications();\n const navigate = useNavigate();\n\n const organisationId = useSelector(getAuthDataOrganisationId);\n\n const {\n data: portfoliosData = [],\n isPending: isPortfoliosPending,\n shouldRefresh,\n } = useSelector(({ dossier }) => dossier.byRatingType[ratingType]);\n\n const [fileUploadInputRef, setFileUploadInputRef] = useState(null);\n\n const [isPending, setIsPending] = useState(false);\n const [data, setData] = useState(null);\n const [error, setError] = useState(null);\n const [step, setStep] = useState(steps.UPLOAD);\n const [summaryStep, setSummaryStep] = useState(0);\n const [selectedPortfolio, setSelectedPortfolio] = useState(null);\n const [tempDossierId, setTempDossierId] = useState();\n const [portfolios, setPortfolios] = useState([]);\n\n useEffect(() => {\n setPortfolios(\n portfoliosData &&\n portfoliosData\n .map(([, [id, name, , isDedicated], , , ,]) => ({\n id,\n name,\n isDedicated,\n }))\n .filter((dossier) => !dossier.isDedicated),\n );\n }, [portfoliosData]);\n\n const didUnmount = React.useRef(false);\n\n useEffect(() => {\n dispatch(getDossiersAction({ ratingType, requestParams: { limit: 100 } }));\n return () => {\n didUnmount.current = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldRefresh]);\n\n useEffect(() => {\n if (error) {\n notifyError(error);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [error]);\n\n const downloadMissingIsinsErrorHandler = () => {\n notifyError(t('ESG_PORTFOLIO_UPLOAD.FAILED_DOWNLOAD_MISSING_ELEMENTS_TEMPLATE'));\n };\n\n const handleDownloadMissingIsinsClick = (missingIsins) => {\n downloadService({\n path: '/esg/api/portfolio-not-found-isins-template/',\n name: 'portfolio-not-found-isins-list.csv',\n options: {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(missingIsins),\n },\n onError: downloadMissingIsinsErrorHandler,\n });\n };\n\n const available = get(data, 'available', 0);\n const missingIsinsCount = (data && data.notFoundIsins && data.notFoundIsins.length) || 0;\n const missingScoresCount = get(data, 'unavailable', 0) - missingIsinsCount;\n const total = data ? data.total : 0;\n const summarySteps = [\n {\n label: t('UPLOAD.STEP_ONE'),\n text: t('ESG.PORTFOLIO_UPLOAD.STEP_SCORES_AVAILABLE'),\n ratingsCount: available,\n },\n {\n label: t('UPLOAD.STEP_TWO'),\n text: t('ESG.PORTFOLIO_UPLOAD.STEP_SCORES_MISSING'),\n ratingsCount: missingScoresCount,\n },\n {\n label: t('UPLOAD.STEP_THREE'),\n text: missingIsinsCount\n ? t('ESG.PORTFOLIO_UPLOAD.STEP_COMPANIES_MISSING')\n : t('ESG.PORTFOLIO_UPLOAD.STEP_NO_COMPANIES_MISSING'),\n ratingsCount: missingIsinsCount,\n customField: missingIsinsCount ? (\n <Typography className={classes.textCenter}>\n <Button\n component=\"a\"\n onClick={() => handleDownloadMissingIsinsClick(data.notFoundIsins)}\n download=\"portfolio-not-found-isins-list.csv\"\n variant=\"contained\"\n color=\"secondary\"\n >\n {t('ESG.PORTFOLIO_UPLOAD.DOWNLOAD_UNIDENTIFIED_ELEMENTS')}\n </Button>\n </Typography>\n ) : undefined,\n },\n ];\n\n const sampleTemplateUrl = '/esg/api/upload-portfolio/';\n\n const fileUploadInputRefChanged = (element) => setFileUploadInputRef(element);\n\n const placeOrders = async () => {\n setIsPending(true);\n try {\n const confirmBody = {\n sourceDossierId: tempDossierId,\n };\n\n if (typeof selectedPortfolio === 'string') {\n confirmBody.targetDossierId = selectedPortfolio;\n } else if (typeof selectedPortfolio === 'object') {\n confirmBody.targetDossierName = createdPortfolioName;\n confirmBody.targetDossierDescription = createdPortfolioDesc;\n }\n\n await confirmPortfolioESG(confirmBody);\n dispatch(\n refreshDossiersAction({\n reason: refreshReasons.UPDATED,\n ratingType,\n }),\n );\n } catch (e) {\n setError(e.message);\n }\n setStep(steps.FINISH);\n setIsPending(false);\n };\n\n const handleStepSubmit = async (payload) => {\n if (step === steps.UPLOAD) {\n setIsPending(true);\n try {\n const uploadData = await uploadPortfolio({\n portfolio: payload && payload.fileUploadInput,\n type: portfolioType,\n organisationId,\n });\n setData({ ...uploadData, fileName: payload.fileUploadInput.name });\n setTempDossierId(uploadData.dossierId);\n setStep(steps.CREATE_DOSSIER);\n } catch (e) {\n setError(e.message);\n }\n setIsPending(false);\n } else if (step === steps.CREATE_DOSSIER) {\n setStep(steps.SUMMARY);\n }\n };\n\n useEffect(() => {\n if (createdPortfolioName && step === steps.CREATE_DOSSIER) {\n setSelectedPortfolio({ createdPortfolioName, createdPortfolioDesc });\n handleStepSubmit();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [createdPortfolioName, createdPortfolioDesc]);\n\n const onSelectDossier = (e, defaultAction) => {\n setSelectedPortfolio(e.target.value);\n if (defaultAction) {\n defaultAction(e);\n }\n };\n\n const downloadErrorHandler = () => {\n notifyError(t('ESG.PORTFOLIO_UPLOAD.FAILED_DOWNLOAD_PORTFOLIO_TEMPLATE'));\n };\n\n const closeModal = () => {\n setSummaryStep(0);\n onClose();\n };\n\n const handleDownloadTemplateClick = () =>\n downloadService({\n path: sampleTemplateUrl,\n name: 'esg-portfolio-template.csv',\n onError: downloadErrorHandler,\n });\n\n const handleDone = async () => {\n closeModal();\n navigate('/portfolios');\n };\n\n const previousStep = () => {\n switch (step) {\n case steps.UPLOAD:\n backToTypeSelection();\n break;\n case steps.SUMMARY:\n if (summaryStep > 0) {\n setSummaryStep(summaryStep - 1);\n } else {\n setStep(step - 1);\n }\n break;\n default:\n setStep(step - 1);\n }\n };\n\n const nextSummaryStep = () => {\n if (summaryStep < summarySteps.length - 1) {\n setSummaryStep(summaryStep + 1);\n } else {\n placeOrders();\n }\n };\n\n const updateUploadBoxData = (setFieldValueFunc, file, text) => {\n if (!file && fileUploadInputRef) {\n fileUploadInputRef.value = null;\n }\n setFieldValueFunc('fileUploadInput', file);\n setFieldValueFunc('fileUploadText', text);\n };\n\n const stepUploadInitialValues = {\n description: '',\n origin: window.location.href,\n fileUploadText: '',\n fileUploadInput: null,\n };\n\n const stepCreateDossierInitialValues = {\n dossierId: '',\n };\n\n const stepUpload = (\n <Formik\n key={steps.UPLOAD}\n initialValues={stepUploadInitialValues}\n onSubmit={(payload) => handleStepSubmit(payload)}\n validationSchema={portfolioUploadSchema(['csv', 'xls', 'xlsx'])}\n >\n {({ values, errors, touched, setFieldValue }) => {\n return (\n <Form>\n <DialogContent>\n <Box mb={2}>\n <Typography>{t('ESG.PORTFOLIO_UPLOAD.INFO_1')}</Typography>\n </Box>\n <Box mb={2}>\n <Typography>{t('ESG.PORTFOLIO_UPLOAD.INFO_2')}</Typography>\n </Box>\n <Box mb={2}>\n <Typography className={classes.strong}>\n {t('ESG.PORTFOLIO_UPLOAD.INFO_3')}\n </Typography>\n </Box>\n <Divider />\n <div className={classes.downloadTemplateContainer}>\n <Box p={2}>\n <Typography>{`${t('UPLOAD.FILE_FORMAT')}: .csv, .xls, .xlsx`}</Typography>\n <Typography>{`${t('UPLOAD.MAX_SIZE')}: 100 ${t(\n 'ENTITIES',\n ).toLowerCase()}`}</Typography>\n <Typography>{`${t('UPLOAD.COLUMNS')}: ISIN, LEI`}</Typography>\n </Box>\n <Box p={2} className={classes.downloadButtonContainer}>\n <Button\n onClick={handleDownloadTemplateClick}\n variant=\"outlined\"\n disabled={isPending || isPortfoliosPending}\n >\n {t('DOWNLOAD_TEMPLATE')}\n </Button>\n </Box>\n </div>\n <Divider />\n <ErrorMessage name=\"fileUploadInput\">\n {(message) => (\n <Box mt={2}>\n <Typography color=\"error\">{message}</Typography>\n </Box>\n )}\n </ErrorMessage>\n <Paper className={classes.uploadContainer}>\n <input\n className={classes.input}\n id=\"file-upload\"\n name=\"file-upload\"\n ref={fileUploadInputRefChanged}\n type=\"file\"\n onChange={(event) => {\n updateUploadBoxData(\n setFieldValue,\n event.currentTarget.files[0],\n get(event.currentTarget.files, '[0].name', ''),\n );\n }}\n />\n <Field name=\"fileUploadText\">\n {({ field }) => (\n <InputBase\n {...field}\n className={classes.fileUploadText}\n placeholder={t('UPLOAD.NO_FILE_SELECTED')}\n error={errors.fileUploadInput && touched.fileUploadText}\n readOnly\n />\n )}\n </Field>\n <IconButton\n type=\"submit\"\n disabled={!fileUploadInputRef || !fileUploadInputRef.value}\n onClick={() => {\n updateUploadBoxData(setFieldValue, null, '');\n }}\n size=\"large\"\n >\n <DeleteIcon />\n </IconButton>\n <label htmlFor=\"file-upload\">\n <Button variant=\"contained\" color=\"primary\" component=\"span\">\n {t('UPLOAD.BROWSE')}\n </Button>\n </label>\n </Paper>\n </DialogContent>\n <DialogActions>\n {step !== steps.FINISH && (\n <Box>\n <Button variant=\"outlined\" onClick={previousStep}>\n {t('PREVIOUS')}\n </Button>\n </Box>\n )}\n <div style={{ flex: '1 0 0' }} />\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isPortfoliosPending || !get(values, 'fileUploadInput')}\n >\n {t('NEXT')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n );\n\n const stepCreateDossier = (\n <Formik\n key={steps.CREATE_DOSSIER}\n className={classes.fullWidth}\n initialValues={stepCreateDossierInitialValues}\n onSubmit={(payload) => handleStepSubmit(payload)}\n validationSchema={creditReviewCreatePortfolioSchema}\n >\n {() => {\n return (\n <Form>\n <DialogContent>\n <Box mb={2}>\n <Typography>{t('UPLOAD.UPLOAD_SELECTED')}</Typography>\n </Box>\n <div className={classes.downloadTemplateContainer}>\n <Box p={2}>\n <Typography color=\"primary\">{`${data.fileName}`}</Typography>\n </Box>\n <Box p={2} className={classes.downloadButtonContainer}>\n <Button\n onClick={() => setStep(steps.UPLOAD)}\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isPortfoliosPending}\n >\n {t('UPLOAD.CHANGE_FILE')}\n </Button>\n </Box>\n </div>\n <Box mt={2}>\n <Typography>{t('ESG.PORTFOLIO_UPLOAD.CREATE_PORTFOLIO')}</Typography>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n {!!portfolios.length && (\n <Field name=\"dossierId\">\n {({ field }) => (\n <TextField\n {...field}\n select\n label={t('ESG.PORTFOLIO_UPLOAD.SELECT_PORTFOLIO')}\n fullWidth\n onChange={(e) => onSelectDossier(e, field.onChange)}\n >\n {portfolios.map(({ id, name }) => (\n <MenuItem key={id} value={id}>\n {name}\n </MenuItem>\n ))}\n </TextField>\n )}\n </Field>\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Box>\n <Button variant=\"outlined\" onClick={previousStep}>\n {t('PREVIOUS')}\n </Button>\n </Box>\n <div style={{ flex: '1 0 0' }} />\n <Button variant=\"outlined\" onClick={onClickCreateNew}>\n {t('Create new portfolio')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isPortfoliosPending}\n >\n {t('NEXT')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n );\n\n const stepSummary = (\n <>\n <DialogContent>\n {summarySteps.length > 1 ? (\n <Box mb={2}>\n <Stepper activeStep={summaryStep}>\n {summarySteps.map((item) => {\n return (\n <Step key={item.label}>\n <StepLabel>{item.label}</StepLabel>\n </Step>\n );\n })}\n </Stepper>\n </Box>\n ) : null}\n <Box mb={2} className={classes.summaryContent}>\n <Typography color=\"primary\" variant=\"h3\">\n {summarySteps[summaryStep].ratingsCount ? summarySteps[summaryStep].ratingsCount : 0}\n </Typography>\n <Box p={2}>\n <Typography variant=\"h6\">{t('UPLOAD.OUT_OF')}</Typography>\n </Box>\n <Typography variant=\"h3\">{formatNumber(total)}</Typography>\n </Box>\n <Box p={2} mb={2}>\n <Typography variant=\"body1\" className={classes.textCenter}>\n {summarySteps[summaryStep].text}\n </Typography>\n </Box>\n {summarySteps[summaryStep].customField ? (\n <Box p={2}>{summarySteps[summaryStep].customField}</Box>\n ) : null}\n </DialogContent>\n <DialogActions>\n {step !== steps.FINISH && (\n <Box>\n <Button variant=\"outlined\" onClick={previousStep}>\n {t('PREVIOUS')}\n </Button>\n </Box>\n )}\n <div style={{ flex: '1 0 0' }} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isPortfoliosPending}\n onClick={nextSummaryStep}\n >\n {t('NEXT')}\n </Button>\n </DialogActions>\n </>\n );\n\n const stepFinish = (\n <>\n <DialogContent className={classes.textCenter}>\n <Box\n width={140}\n height={140}\n borderRadius=\"50%\"\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n marginY={2}\n marginX=\"auto\"\n boxShadow=\"0 3px 4px 1px rgba(155, 155, 155, 0.3)\"\n bgcolor={theme.palette.custom.verySoftCyan}\n >\n <p className={classes.score}>{data ? data.portfolioScore : 0}</p>\n </Box>\n </DialogContent>\n <DialogActions>\n {/* <Button variant=\"outlined\" onClick={closeModal}>\n {t('CANCEL')}\n </Button> */}\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isPortfoliosPending}\n onClick={handleDone}\n >\n {t('ESG.PORTFOLIO_UPLOAD.GOTO_PORTFOLIOS')}\n </Button>\n </DialogActions>\n </>\n );\n\n const stepsMapping = {\n [steps.UPLOAD]: stepUpload,\n [steps.CREATE_DOSSIER]: stepCreateDossier,\n [steps.SUMMARY]: stepSummary,\n [steps.FINISH]: stepFinish,\n };\n\n return (\n <>\n {stepsMapping[step]}\n {(isPending || isPortfoliosPending) && <Loader cover />}\n </>\n );\n};\n\nPortfolioUploadESG.defaultProps = {\n onClose: () => null,\n backToTypeSelection: () => null,\n onClickCreateNew: () => null,\n createdPortfolioName: undefined,\n createdPortfolioDesc: undefined,\n};\n\nPortfolioUploadESG.propTypes = {\n portfolioType: PropTypes.string.isRequired, // portfolioTypes\n ratingType: PropTypes.string.isRequired, // ratingTypes\n onClose: PropTypes.func,\n onClickCreateNew: PropTypes.func,\n createdPortfolioName: PropTypes.string,\n createdPortfolioDesc: PropTypes.string,\n backToTypeSelection: PropTypes.func,\n};\n\nexport default PortfolioUploadESG;\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Button, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\n\nimport { creditRatingScalesMapping } from 'shared/mappings';\nimport { ratingConstants } from 'shared/constants/company';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { endorsementCreditRating } from 'shared/constants/summaryTab';\nimport { BlurWrapper } from 'ui';\nimport { SummaryCard, HeadSquare, SummaryCardLineChart } from 'modules/common/SummaryCard';\nimport { generalInformationMock } from 'modules/common/SummaryCard/Request/generalInformationMock';\nimport summaryTabHistoryData from 'assets/mockedData/summaryTabHistoryData.json';\nimport { RatingStatus } from 'shared/types/ratingStatus';\nimport { RequestEsgButton } from 'modules/common';\nimport { useSelector } from 'react-redux';\nimport { shopProductsCategories } from 'modules/shop/shared/constants/shopProductsCategories';\nimport { getIndustryByName } from 'selectors/common';\nimport { RequestEsgScoreModal } from 'modules/common/Modals';\nimport { ShopRelatedProductsModal } from 'modules/shop/components/ShopRelatedProductsModal';\nimport { addToScoringToolService } from 'services/esg';\nimport { requestSentimentScore } from 'services/esg/fetchSentimentSummary';\nimport { ShopProductLines } from 'modules/shop/shared/constants/shopProductLines';\n\nconst data = {\n latestChange: {},\n generalInformation: {},\n levels: {},\n dates: {},\n documents: [],\n ratingScalesData: creditRatingScalesMapping(\n portfolioTypes.ESG_ANALYSIS,\n ratingConstants.entityReview,\n ),\n generalInformationList: generalInformationMock,\n endorsementList: endorsementCreditRating,\n};\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n height: '100%',\n whiteSpace: 'pre-line',\n },\n content: {\n flexDirection: 'column',\n alignContent: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n height: '100%',\n whiteSpace: 'pre-line',\n },\n requestButton: {\n marginTop: '20px',\n },\n unlockButton: {\n height: 50,\n margin: '0 auto',\n marginTop: 20,\n padding: '5px 30px',\n fontSize: '1rem',\n },\n contentRow: {\n textAlign: 'center',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n link: {\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n}));\n\nconst useHeadSquareStyles = makeStyles({\n score: {\n fontWeight: 500,\n fontSize: 60,\n },\n max: {\n fontSize: 24,\n },\n scoreWidgetMainColumn: {\n height: '100%',\n },\n});\n\nconst SummaryCardRequestESG = ({\n type,\n scopeoneId,\n dataExists,\n // eslint-disable-next-line no-unused-vars\n isSubscribed,\n isAvailable,\n requestState,\n industry,\n countryCode,\n onRequested,\n onUnlocked,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const headSquareClasses = useHeadSquareStyles();\n const isUnlockEnabled = false;\n const esgContractData = useSelector(({ esgContract }) => esgContract);\n\n const [isRequestEsgModalOpen, setRequestEsgModalOpen] = useState(false);\n const [isRelatedProductsModalOpen, setRelatedProductsModalOpen] = useState(false);\n const [productLine, setProductLine] = useState(\n dataExists ? ShopProductLines.Review : ShopProductLines.Tools,\n );\n\n useEffect(() => {\n setProductLine(dataExists ? ShopProductLines.Review : ShopProductLines.Tools);\n }, [dataExists]);\n\n const [esgIds, setEsgIds] = useState([]);\n\n const industryObj = useSelector(getIndustryByName(industry));\n\n const [esgProductData, setEsgProductData] = useState();\n\n useEffect(() => {\n setEsgProductData({\n category: shopProductsCategories.esgAnalysis,\n productLine,\n countriesAndIndustries: [\n {\n country: countryCode,\n industries: industryObj ? [industryObj.name] : [],\n },\n ],\n });\n }, [industryObj, countryCode, productLine]);\n\n const openRequestEsgModal = async () => {\n const addedItems = await addToScoringToolService(scopeoneId);\n setEsgIds(addedItems.map((item) => item.esgId));\n setRequestEsgModalOpen(true);\n };\n\n const requestEsgSentimentScore = async () =>\n requestSentimentScore(scopeoneId).then(() => onRequested(true));\n\n const openRelatedProductsModal = () => {\n setRelatedProductsModalOpen(true);\n };\n\n const handleUnlockedButton = (unlocked) => {\n setRelatedProductsModalOpen(false);\n onUnlocked(unlocked);\n };\n\n const closeRequestEsgModal = (requested) => {\n setRequestEsgModalOpen(false);\n onRequested(requested);\n };\n\n const buildSentimentContent = () => {\n // /* No company in sentify */\n if (!dataExists) {\n return <Typography>{t('SENTIMENT.SCORE_NOT_AVAILABLE')}</Typography>;\n }\n\n /* No permission to display the score */\n if (!isSubscribed) {\n return (\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={openRelatedProductsModal}\n className={classes.unlockButton}\n >\n {t('UNLOCK')}\n </Button>\n );\n }\n\n /* No score available, need to request */\n if (!isAvailable) {\n return (\n <>\n <Typography>{t('SENTIMENT.SCORE_NOT_AVAILABLE')}</Typography>\n <RequestEsgButton\n onRequestClick={requestEsgSentimentScore}\n alreadyRequested={requestState === RatingStatus.DONE}\n className={classes.requestButton}\n />\n </>\n );\n }\n\n /* Default value, should never be reached */\n return <></>;\n };\n\n const buildImpactContent = () => {\n if (!dataExists) {\n // score does not exist\n\n if (requestState === RatingStatus.UNABLE_TO_REQUEST) {\n return (\n <>\n <Typography>{t('ESG.ONLY_AVAILABLE_FOR_CORPORATES')}</Typography>\n </>\n );\n }\n\n if (requestState === RatingStatus.IN_PROGRESS) {\n // financial statement already provided - waiting for a score - requested\n return (\n <>\n <Typography>{t('ESG.SCORE_REQUESTING.SUMMARY_TAB_REQUEST')}</Typography>\n <RequestEsgButton alreadyRequested className={classes.requestButton} />\n </>\n );\n }\n\n if (\n !requestState ||\n [RatingStatus.TO_DO, RatingStatus.DONE_BY_SCOPE].includes(requestState)\n ) {\n // financial statement was not provided\n\n if (esgContractData && esgContractData.esgRequestPermission) {\n // user has permission to request\n return (\n <>\n <Typography>{t('ESG.SCORE_REQUESTING.SUMMARY_TAB_REQUESTED')}</Typography>\n <RequestEsgButton\n onRequestClick={openRequestEsgModal}\n className={classes.requestButton}\n />\n </>\n );\n }\n\n if (isUnlockEnabled) {\n // user cannot request, but can unlock scoring tool\n return (\n <>\n <Typography>{t('ESG.SCORE_REQUESTING.SUMMARY_TAB_UNLOCK_TOOLS')}</Typography>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={openRelatedProductsModal}\n className={classes.unlockButton}\n >\n {t('UNLOCK')}\n </Button>\n </>\n );\n }\n\n // There is no data to unlock\n return <Typography>{t('ESG.SCORE_REQUESTING.SCORE_NOT_AVAILABLE')}</Typography>;\n }\n } else if (!isAvailable) {\n // data exists but is not available\n return (\n <>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={openRelatedProductsModal}\n className={classes.unlockButton}\n >\n {t('UNLOCK')}\n </Button>\n </>\n );\n }\n\n return (\n // else: should never happen - data exists and isAvailable, so this component should not be visible\n <Typography>{t('ESG.SCORE_REQUESTING.SOMETHING_WENT_WRONG')}</Typography>\n );\n };\n\n return (\n <>\n <BlurWrapper\n content={\n <Grid container className={classes.content}>\n {type === 'impact' && buildImpactContent()}\n {type === 'sentiment' && buildSentimentContent()}\n </Grid>\n }\n active\n >\n <SummaryCard\n headSquare={\n <HeadSquare title={t('Short term')}>\n <span className={headSquareClasses.score}>7.3</span>\n <span className={headSquareClasses.max}>/10</span>\n </HeadSquare>\n }\n history={<SummaryCardLineChart history={summaryTabHistoryData} />}\n data={data}\n />\n </BlurWrapper>\n\n <RequestEsgScoreModal\n open={isRequestEsgModalOpen}\n onClose={closeRequestEsgModal}\n selectIds={esgIds}\n />\n {isRelatedProductsModalOpen && esgProductData ? (\n <ShopRelatedProductsModal\n data={\n type === 'impact'\n ? esgProductData\n : {\n category: shopProductsCategories.esgAnalysis,\n productLine: ShopProductLines.Events,\n }\n }\n open={isRelatedProductsModalOpen}\n onClose={() => handleUnlockedButton(false)}\n onConfirm={() => handleUnlockedButton(true)}\n />\n ) : null}\n </>\n );\n};\n\nSummaryCardRequestESG.defaultProps = {\n type: 'impact',\n dataExists: false,\n isSubscribed: true,\n isAvailable: false,\n requestState: RatingStatus.TO_DO,\n};\n\nSummaryCardRequestESG.propTypes = {\n type: PropTypes.oneOf(['impact', 'sentiment']),\n scopeoneId: PropTypes.string.isRequired,\n dataExists: PropTypes.bool,\n isSubscribed: PropTypes.bool,\n isAvailable: PropTypes.bool,\n requestState: PropTypes.string,\n industry: PropTypes.string.isRequired,\n countryCode: PropTypes.string.isRequired,\n onRequested: PropTypes.func.isRequired,\n onUnlocked: PropTypes.func.isRequired,\n};\n\nexport default SummaryCardRequestESG;\n","export enum ScoringToolSteps {\n UPLOAD,\n FINISH,\n}\n","import React, { FC, useEffect, useState } from 'react';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport Divider from '@mui/material/Divider';\nimport IconButton from '@mui/material/IconButton';\nimport InputBase from '@mui/material/InputBase';\nimport Paper from '@mui/material/Paper';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { Collapse } from '@mui/material';\nimport Typography from '@mui/material/Typography';\nimport CheckIcon from '@mui/icons-material/Check';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport { Close, ArrowDropDown, ArrowDropUp } from '@mui/icons-material';\nimport { ErrorMessage, Field, Form, Formik } from 'formik';\nimport get from 'lodash/get';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector } from 'react-redux';\nimport { getAuthDataOrganisationId } from 'selectors/auth';\nimport { downloadService } from 'services';\nimport { ScoringToolSteps } from 'shared/constants/esg/scoringToolSteps';\nimport { useNotifications } from 'shared/hooks';\nimport { BaseProps } from 'shared/types/base';\nimport { portfolioUploadSchema } from 'shared/validations';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { theme } from 'theme';\nimport { DialogTitleWithClose, Loader } from 'ui';\nimport { uploadCustomCompanies } from 'services/esg';\nimport { formatNumber } from 'shared/functions';\n\nconst useStyles = makeStyles({\n downloadTemplateContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n downloadButtonContainer: {\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'flex-end',\n },\n input: {\n display: 'none',\n },\n uploadContainer: {\n padding: '2px 4px',\n margin: theme.spacing(2, 0),\n display: 'flex',\n alignItems: 'center',\n },\n fileUploadText: {\n marginLeft: theme.spacing(1),\n flex: 1,\n },\n fullWidth: {\n width: '100%',\n },\n summaryContent: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n textCenter: {\n textAlign: 'center',\n },\n checkIcon: {\n fontSize: 80,\n },\n selectButton: {\n width: 150,\n height: 100,\n textTransform: 'inherit',\n border: 'none',\n color: theme.palette.text.primary,\n boxShadow: '0 4px 4px 2px rgba(155, 155, 155, 0.3)',\n padding: '0 35px',\n },\n selectTitle: {\n fontSize: 15,\n },\n});\n\ntype ESGScoringToolModalProps = {\n open: boolean;\n onClose: () => void;\n onUploaded?: (refresh: boolean, reason: string) => void;\n isPortfolioManager?: boolean;\n portfolioId?: string;\n selectedIds?: string[];\n} & BaseProps;\n\ntype Data = {\n errors: { line: number; message: string }[];\n successfullyParsed: number;\n};\n\nconst ESGScoringToolModal: FC<ESGScoringToolModalProps> = ({\n open,\n onClose,\n onUploaded,\n isPortfolioManager,\n portfolioId,\n selectedIds,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const { notifyError } = useNotifications();\n\n const organisationId = useSelector(getAuthDataOrganisationId);\n\n const [fileUploadInputRef, setFileUploadInputRef] = useState<any>(null);\n\n const [isPending, setIsPending] = useState(false);\n const [data, setData] = useState<Data>({ errors: [], successfullyParsed: -1 });\n const [error, setError] = useState('');\n const [step, setStep] = useState(ScoringToolSteps.UPLOAD);\n const [showErrors, setShowErrors] = useState(false);\n\n useEffect(() => {\n if (error) {\n notifyError(error);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [error]);\n\n const errorsNumber = data?.errors?.length;\n const total = (errorsNumber ?? 0) + (data?.successfullyParsed ?? 0);\n\n const sampleTemplateUrl = '/esg/api/portfolio-not-found-isins-template/';\n\n const fileUploadInputRefChanged = (element: any) => setFileUploadInputRef(element);\n\n const handleStepSubmit = async (payload: any) => {\n if (step === ScoringToolSteps.UPLOAD) {\n setIsPending(true);\n try {\n const uploadData = await uploadCustomCompanies({\n companiesFile: payload && payload.fileUploadInput,\n organisationId,\n isPortfolioManager,\n portfolioId,\n });\n setData({ errors: uploadData.errors, successfullyParsed: uploadData.successfully_parsed });\n\n setStep(ScoringToolSteps.FINISH);\n\n if (onUploaded) {\n onUploaded(true, refreshReasons.UPDATED);\n }\n } catch (e) {\n setError((e as Error).message);\n }\n setIsPending(false);\n }\n };\n\n const downloadErrorHandler = () => {\n notifyError(t('ESG.FAILED_TO_DOWNLOAD_SAMPLE_TEMPLATE'));\n };\n\n const closeModal = () => {\n setStep(ScoringToolSteps.UPLOAD);\n onClose();\n };\n\n const handleDownloadTemplateClick = () =>\n downloadService({\n path: sampleTemplateUrl,\n name: 'companies-template.xlsx',\n onError: downloadErrorHandler,\n options: {\n body: JSON.stringify(selectedIds),\n method: 'POST',\n },\n });\n\n const updateUploadBoxData = (\n setFieldValueFunc: (field: string, value: any) => void,\n file: File | null,\n text: string,\n ) => {\n if (!file && fileUploadInputRef) {\n fileUploadInputRef.value = null;\n }\n setFieldValueFunc('fileUploadInput', file);\n setFieldValueFunc('fileUploadText', text);\n };\n\n const toggleErrorsList = () => {\n setShowErrors(!showErrors);\n };\n\n const stepUploadInitialValues = {\n description: '',\n origin: window.location.href,\n fileUploadText: '',\n fileUploadInput: null,\n };\n\n const stepUpload = (\n <Formik\n key={ScoringToolSteps.UPLOAD}\n initialValues={stepUploadInitialValues}\n onSubmit={payload => handleStepSubmit(payload)}\n validationSchema={portfolioUploadSchema(['csv', 'xls', 'xlsx'])}\n >\n {({ values, errors, touched, setFieldValue }) => {\n return (\n <Form>\n <DialogContent>\n <Box mb={2}>\n <Typography>{t('ESG.SCORING_TOOL_DESC_1')}</Typography>\n </Box>\n <Box mb={2}>\n <Typography>{t('ESG.SCORING_TOOL_DESC_2')}</Typography>\n </Box>\n <Divider />\n <div className={classes.downloadTemplateContainer}>\n <Box p={2}>\n <Typography>{`${t('File format')}: .csv, .xls, .xlsx`}</Typography>\n <Typography>{`${t(\n 'Column heading',\n )}: ISIN, COMPANY NAME, COUNTRY ISO 3 CODE, NACE INDUSTRY CODE`}</Typography>\n </Box>\n <Box p={2} className={classes.downloadButtonContainer}>\n <Button\n onClick={handleDownloadTemplateClick}\n variant=\"outlined\"\n disabled={isPending}\n >\n {t('DOWNLOAD_TEMPLATE')}\n </Button>\n </Box>\n </div>\n <Divider />\n <ErrorMessage name=\"fileUploadInput\">\n {message => (\n <Box mt={2}>\n <Typography color=\"error\">{message}</Typography>\n </Box>\n )}\n </ErrorMessage>\n <Paper className={classes.uploadContainer}>\n <input\n className={classes.input}\n id=\"file-upload\"\n name=\"file-upload\"\n ref={fileUploadInputRefChanged}\n type=\"file\"\n onChange={event => {\n updateUploadBoxData(\n setFieldValue,\n event.currentTarget.files ? event.currentTarget.files[0] : null,\n get(event.currentTarget.files, '[0].name', ''),\n );\n }}\n />\n <Field name=\"fileUploadText\">\n {({ field }: any) => (\n <InputBase\n {...field}\n className={classes.fileUploadText}\n placeholder={t('UPLOAD.NO_FILE_SELECTED')}\n error={errors.fileUploadInput && touched.fileUploadText}\n readOnly\n />\n )}\n </Field>\n <IconButton\n type=\"submit\"\n disabled={!fileUploadInputRef || !fileUploadInputRef?.value}\n onClick={() => {\n updateUploadBoxData(setFieldValue, null, '');\n }}\n size=\"large\">\n <DeleteIcon />\n </IconButton>\n <label htmlFor=\"file-upload\">\n <Button variant=\"contained\" color=\"primary\" component=\"span\">\n {t('UPLOAD.BROWSE')}\n </Button>\n </label>\n </Paper>\n </DialogContent>\n <DialogActions>\n <div style={{ flex: '1 0 0' }} />\n <Button variant=\"outlined\" onClick={closeModal}>\n {t('Cancel')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || !get(values, 'fileUploadInput')}\n >\n {t('Next')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n );\n\n const stepFinish = (\n <>\n <DialogContent className={classes.textCenter}>\n {get(data, 'successfullyParsed', 0) ? (\n <Typography variant=\"h6\" className={classes.textCenter}>\n <Box\n width={140}\n height={140}\n borderRadius=\"50%\"\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n marginY={2}\n marginX=\"auto\"\n boxShadow={theme.customShadows[0]}\n bgcolor={theme.palette.custom.verySoftCyan}\n >\n <CheckIcon className={classes.checkIcon} />\n </Box>\n <Box mb={2} className={classes.summaryContent}>\n <Typography color=\"primary\" variant=\"h3\">\n {data?.successfullyParsed ?? 0}\n </Typography>\n <Box p={2}>\n <Typography variant=\"h6\">{t('out of')}</Typography>\n </Box>\n <Typography variant=\"h3\">{formatNumber(total)}</Typography>\n </Box>\n <Box p={2} mb={2}>\n <Typography variant=\"body1\" className={classes.textCenter}>\n {t('ESG.SCORING_TOOL_SUCCESS')}\n </Typography>\n </Box>\n </Typography>\n ) : (\n <Typography variant=\"h6\" className={classes.textCenter}>\n <Collapse in={!showErrors} timeout=\"auto\" unmountOnExit>\n <Box\n width={140}\n height={140}\n borderRadius=\"50%\"\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n marginY={2}\n marginX=\"auto\"\n boxShadow={theme.customShadows[0]}\n bgcolor={theme.palette.custom.verySoftPink}\n >\n <Close className={classes.checkIcon} />\n </Box>\n </Collapse>\n </Typography>\n )}\n\n {data?.errors?.length ? (\n <>\n <Typography className={classes.textCenter}>\n <Button color=\"primary\" onClick={toggleErrorsList}>\n {t('ERRORS')} ({data.errors.length}){' '}\n {showErrors ? <ArrowDropUp /> : <ArrowDropDown />}\n </Button>\n </Typography>\n <Collapse in={showErrors} timeout=\"auto\" unmountOnExit>\n <Paper>\n <ul>\n {data.errors.map((item: { line: number; message: string }, i) => {\n // eslint-disable-next-line react/no-array-index-key\n return <li key={i}>{item.message}</li>;\n })}\n </ul>\n </Paper>\n </Collapse>\n </>\n ) : (\n undefined\n )}\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" color=\"primary\" disabled={isPending} onClick={closeModal}>\n {t('Done')}\n </Button>\n </DialogActions>\n </>\n );\n\n const stepsMapping: Record<ScoringToolSteps, JSX.Element> = {\n [ScoringToolSteps.UPLOAD]: stepUpload,\n [ScoringToolSteps.FINISH]: stepFinish,\n };\n\n return (\n <>\n <Dialog open={open} onClose={closeModal} fullWidth maxWidth=\"sm\">\n <DialogTitleWithClose onClose={closeModal}>{t('ESG.SCORING_TOOL')}</DialogTitleWithClose>\n {stepsMapping[step]}\n {isPending && <Loader cover />}\n </Dialog>\n </>\n );\n};\n\nexport default ESGScoringToolModal;\n","import React, { FC } from 'react';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport Typography from '@mui/material/Typography';\nimport { useTranslation } from 'react-i18next';\nimport { BaseProps } from 'shared/types/base';\nimport { DialogTitleWithClose } from 'ui';\n\ntype ESGEntityRemovalConfirmationModalProps = {\n open: boolean;\n onClose: () => void;\n onConfirm?: () => void;\n} & BaseProps;\n\nconst ESGEntityRemovalConfirmationModal: FC<ESGEntityRemovalConfirmationModalProps> = ({\n open,\n onClose,\n onConfirm,\n}) => {\n const { t } = useTranslation();\n\n return (\n <>\n <Dialog open={open} onClose={onClose} fullWidth maxWidth=\"sm\">\n <DialogTitleWithClose onClose={onClose}>\n {t('ESG.ENTITY_REMOVAL_CONFIRMATION')}\n </DialogTitleWithClose>\n <DialogContent>\n <Typography variant=\"body2\">{t('ESG.ENTITY_REMOVAL_CONFIRMATION_DESC')}</Typography>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('CANCEL')}\n </Button>\n <Button variant=\"contained\" color=\"primary\" onClick={onConfirm}>\n {t('CONTINUE')}\n </Button>\n </DialogActions>\n </Dialog>\n </>\n );\n};\n\nexport default ESGEntityRemovalConfirmationModal;\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport clsx from 'clsx';\nimport { IconButton } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport { ExpandLess, ExpandMore } from '@mui/icons-material';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport { theme } from 'theme';\nimport { LegendColorChip } from 'ui/ColorChips/LegendColorChip';\nimport { StatisticsItem } from 'modules/common/PortfolioManager/types';\nimport { useReportPage } from 'shared/hooks';\n\nconst useStyles = makeStyles({\n chipSpacing: {\n marginRight: theme.spacing(1),\n },\n bold: {\n fontWeight: 900,\n },\n nameCapitalized: {\n textTransform: 'capitalize',\n },\n iconButtonStyling: {\n padding: '0',\n color: 'black',\n },\n});\n\ntype PortfolioChartLegendProps = {\n items: StatisticsItem[];\n otherItemsToExpand?: StatisticsItem[];\n hideLegendChip?: Boolean;\n colors: string[];\n};\n\nexport const PortfolioChartLegend: FC<PortfolioChartLegendProps> = ({\n items,\n otherItemsToExpand = [],\n hideLegendChip,\n colors,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const [isCollapsed, changeCollapse] = useState(false);\n const renderCollapseButton = (name: string) => {\n if (name === t('OTHER')) {\n return (\n <IconButton\n className={classes.iconButtonStyling}\n onClick={() => changeCollapse(!isCollapsed)}\n size=\"large\">\n {isCollapsed ? <ExpandLess /> : <ExpandMore />}\n </IconButton>\n );\n }\n return '';\n };\n return (\n <>\n {items.map(({ name, count }, index) => (\n <React.Fragment key={name}>\n <Box display=\"flex\" justifyContent=\"space-between\">\n <Box display=\"flex\" alignItems=\"center\">\n <LegendColorChip\n className={classes.chipSpacing}\n chipColor={hideLegendChip ? 'white' : colors[index]}\n />\n <Typography variant=\"body1\" className={clsx(classes.nameCapitalized, classes.bold)}>\n {name}\n </Typography>\n {renderCollapseButton(name)}\n </Box>\n <Typography variant=\"body1\" className={classes.bold}>\n {count}%\n </Typography>\n </Box>\n <Box py={2} pt={useReportPage ? 1 : 2}>\n <Divider />\n </Box>\n {name === t('OTHER') && otherItemsToExpand.length && isCollapsed && (\n <PortfolioChartLegend items={otherItemsToExpand} colors={colors} hideLegendChip />\n )}\n </React.Fragment>\n ))}\n </>\n );\n};\n\nexport default PortfolioChartLegend;\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport clsx from 'clsx';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport { Loader } from 'ui';\nimport { theme } from 'theme';\nimport { DoughnutChart } from 'ui/Charts';\nimport { ErrorBoundary } from 'shared/errors';\nimport { Statistics, StatisticsItem, ChartData } from 'modules/common/PortfolioManager/types';\nimport { useReportPage } from 'shared/hooks';\nimport PortfolioChartLegend from '../../common/PortfolioManager/Portfolio/components/PortfolioChartLegend';\n\nconst useStyles = makeStyles({\n divider: {\n alignSelf: 'stretch',\n height: 'auto',\n margin: theme.spacing(0, 2),\n },\n companies: {\n marginTop: theme.spacing(6),\n },\n bold: {\n fontWeight: 900,\n },\n title: {\n paddingLeft: theme.spacing(2),\n fontSize: useReportPage ? 12 : 16,\n },\n});\n\ntype ESGLendingDataProps = {\n statistics?: Statistics;\n noOfItems?: number;\n loading?: boolean;\n};\n\nconst chartOtherThreshold = 5;\n\nconst ESGLendingData: FC<ESGLendingDataProps> = ({ statistics, loading = false }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const { chartShort, chartExtended } = theme.customPalettes;\n\n const sortChartData = (objectToSort: ChartData) =>\n Object.fromEntries(Object.entries(objectToSort).sort(([, a], [, b]) => b - a));\n const chartItemsToArray = (chartData: ChartData): StatisticsItem[] =>\n Object.keys(chartData).map(name => ({ name, count: chartData[name] }));\n\n const calculateValuesToDecimal = (statisticsItems) => {\n const roundedItems = statisticsItems.map(item => ({\n name: item.name,\n count: item.exposure * 100,\n })\n );\n\n const sortedItems = roundedItems.sort(\n (a, b) => Math.floor(a.count) - a.count - (Math.floor(b.count) - b.count),\n );\n return sortedItems.map(item => ({\n name: item.name,\n count: +item.count.toFixed(1),\n })\n );\n };\n\n const prepareChartData = (statisticsItems?: StatisticsItem[]) => {\n const chartData: ChartData = {};\n\n if (!statisticsItems) {\n return chartData;\n }\n\n const roundedStatistics = calculateValuesToDecimal(statisticsItems);\n\n roundedStatistics.forEach(item => {\n if (item.count < chartOtherThreshold) {\n if (!chartData[t('OTHER')]) {\n chartData[t('OTHER')] = 0;\n }\n chartData[t('OTHER')] += item.count;\n } else {\n chartData[item.name || t('UNKNOWN')] = item.count;\n }\n });\n\n if (chartData[t('OTHER')]) {\n chartData[t('OTHER')] = +(+chartData[t('OTHER')].toFixed(1))\n }\n\n return sortChartData(chartData);\n };\n\n const prepareOtherDataToExpand = (statisticsItems?: StatisticsItem[]) => {\n const otherDataToExpand: ChartData = {};\n\n if (!statisticsItems) {\n return otherDataToExpand;\n }\n\n const roundedStatistics = calculateValuesToDecimal(statisticsItems);\n\n roundedStatistics.forEach(item => {\n if (item.count < chartOtherThreshold) {\n otherDataToExpand[item.name || t('UNKNOWN')] = item.count;\n }\n });\n return sortChartData(otherDataToExpand);\n };\n\n const regionsChartData: ChartData = prepareChartData(statistics?.regions);\n const industriesChartData: ChartData = prepareChartData(statistics?.industries);\n const otherRegionsToExpand: ChartData = prepareOtherDataToExpand(statistics?.regions);\n const otherIndustriesToExpand: ChartData = prepareOtherDataToExpand(statistics?.industries);\n\n const sortedRegions = chartItemsToArray(regionsChartData);\n const otherRegionsToExpandArray = chartItemsToArray(otherRegionsToExpand);\n const sortedIndustries = chartItemsToArray(industriesChartData);\n const otherIndustriesToExpandArray = chartItemsToArray(otherIndustriesToExpand);\n\n return (\n <>\n <Box p={useReportPage ? 0 : 2}>\n <Typography variant=\"h6\">{t('ESG.LENDING_PORTFOLIO_DATA')}</Typography>\n <Box py={2} pt={useReportPage ? 0 : 2}>\n <Divider />\n </Box>\n </Box>\n <Box p={2} pt={useReportPage ? 1 : 2} pb={5}>\n {loading ? (\n <Loader center />\n ) : (\n <Box display=\"flex\" flexDirection={useReportPage ? 'column' : 'row'}>\n <Box flexGrow={1} padding={2}>\n <Typography variant=\"subtitle1\" className={clsx(classes.title, classes.bold)}>\n {t('ESG.EXPOSURE_BY_REGION')}\n </Typography>\n\n <Box py={2} pt={useReportPage ? 1 : 2}>\n <Divider />\n </Box>\n\n <Box display=\"flex\" justifyContent=\"center\" width={1}>\n <ErrorBoundary>\n <DoughnutChart\n data={regionsChartData}\n width={400}\n height={300}\n margin={0}\n colors={sortedRegions.length > 5 ? chartExtended : chartShort}\n />\n </ErrorBoundary>\n </Box>\n\n <Box py={2} pt={useReportPage ? 1 : 2}>\n <Divider />\n </Box>\n <PortfolioChartLegend\n items={sortedRegions}\n colors={sortedRegions.length > 5 ? chartExtended : chartShort}\n otherItemsToExpand={otherRegionsToExpandArray}\n />\n </Box>\n\n <Divider className={classes.divider} orientation=\"vertical\" />\n\n <Box flexGrow={1} padding={2}>\n <Typography variant=\"subtitle1\" className={clsx(classes.title, classes.bold)}>\n {t('ESG.EXPOSURE_BY_INDUSTRY')}\n </Typography>\n\n <Box py={2} pt={useReportPage ? 1 : 2}>\n <Divider />\n </Box>\n\n <Box display=\"flex\" justifyContent=\"center\" width={1}>\n <ErrorBoundary>\n <DoughnutChart\n data={industriesChartData}\n width={400}\n height={300}\n margin={0}\n colors={sortedIndustries.length > 5 ? chartExtended : chartShort}\n />\n </ErrorBoundary>\n </Box>\n\n <Box py={2} pt={useReportPage ? 1 : 2}>\n <Divider />\n </Box>\n <PortfolioChartLegend\n items={sortedIndustries}\n colors={sortedIndustries.length > 5 ? chartExtended : chartShort}\n otherItemsToExpand={otherIndustriesToExpandArray}\n />\n </Box>\n </Box>\n )}\n </Box>\n </>\n );\n};\nexport default ESGLendingData;\n","export const artifactTypesLabels = {\n COMMENTARY: 'Scope commentary',\n COMPANY_NEWS: 'Company news',\n RATING_NEWS: 'Rating news',\n RESEARCH: 'Company research',\n MONITORING_NOTES: 'Monitoring note',\n FOLLOWED_ANALYSTS: 'Followed analysts',\n};\n\nexport const newsArtifactsTypes = {\n COMMENTARY: 'COMMENTARY',\n COMPANY_NEWS: 'COMPANY_NEWS',\n RATING_NEWS: 'RATING_NEWS',\n RESEARCH: 'RESEARCH',\n MONITORING_NOTES: 'MONITORING_NOTES',\n};\n\nexport const artifactTypes = {\n ...newsArtifactsTypes,\n FOLLOWED_ANALYSTS: 'FOLLOWED_ANALYSTS',\n INSTRUMENT: 'INSTRUMENT',\n ENTITY: 'ENTITY',\n SIG_ENTITY: 'SIG_ENTITY',\n};\n","export enum ratingTypes {\n CREDIT_RATING = 'credit-rating',\n CREDIT_REVIEW = 'credit-review',\n ESG_IMPACT = 'esg-impact',\n SENTIMENT = 'sentiment',\n CLIMATE_STRESS_TEST = 'climate-stress-test',\n FUNDS = 'funds',\n}\n","export const generalInformation = [\n 'Entity review',\n 'Without entity participation',\n 'Subscription',\n 'Unsolicited',\n];\n\nexport const generalInformationCreditReview = [\n 'Entity review',\n 'Subscription on request',\n 'Unsolicited',\n 'Without entity participation',\n];\n","export const summaryCardTablevels = [\n 'Analytical data',\n 'Review',\n 'Assessment',\n 'Subscription rating',\n 'Public rating',\n];\n","export const generalInformationLabels = {\n dataPrecision: 'Data precision',\n stability: 'Stability',\n businessClimate: 'Business climate',\n countryRisk: 'Country risk',\n};\n","export const additionalInformationLabels = {\n countryRisk: 'Country risk',\n businessRisk: 'Business risk',\n};\n","export const endorsementCreditRating = [\n {\n label: 'Location',\n value: 'EU rated',\n },\n {\n label: 'Endorsement',\n value: 'None',\n },\n];\n","export const summaryTabCreditRatingNamesPriorites = [\n 'Issuer Rating',\n 'Issuer Rating (foreign currency)',\n];\n","import { fetchApi } from 'shared/functions';\nimport { ESGUpdateYear } from '../../modules/ESG/types';\n\nexport const distributionService = (id: string, params?: ESGUpdateYear) =>\n fetchApi(`/esg/api/${id}/dashboard/monetization-distribution/`, {\n query: params,\n }).then((response) => response.json());\n","import { fetchApi } from 'shared/functions';\nimport { ESGUpdateYear } from '../../modules/ESG/types';\n\nexport const impactScoreService = (id: string, params?: ESGUpdateYear) =>\n fetchApi(`/esg/api/${id}/total_score/`, { query: params }).then((response) => response.json());\n","import { fetchApi } from 'shared/functions';\nimport { ESGUpdateYear } from '../../modules/ESG/types';\n\nexport const peergroupComparisonService = (id: string, params?: ESGUpdateYear) =>\n fetchApi(`/esg/api/${id}/dashboard/peergroup-comparison/`, { query: params }).then((response) =>\n response.json(),\n );\n","import { fetchApi, getFetchApiJSONResponse } from 'shared/functions';\nimport { ESGUpdateYear } from '../../modules/ESG/types';\n\nexport const esgAvailable = (id: string) =>\n fetchApi(`/esg/api/years/${id}/`).then(getFetchApiJSONResponse);\n\nexport const regionImpactService = (id: string, params?: ESGUpdateYear) =>\n fetchApi(`/esg/api/${id}/dashboard/total-esg-impact-by-region/`, { query: params }).then(\n getFetchApiJSONResponse,\n );\n\nexport const industryImpactService = (id: string, params?: ESGUpdateYear) =>\n fetchApi(`/esg/api/${id}/dashboard/total-esg-impact-by-industry/`, { query: params }).then(\n getFetchApiJSONResponse,\n );\n","import { fetchApi, getFetchApiJSONResponse } from 'shared/functions';\nimport { ESGUpdateYear } from '../../modules/ESG/types';\n\nexport const scoreOverviewService = (id: string, params?: ESGUpdateYear) =>\n fetchApi(`/esg/api/${id}/dashboard/score-overview/`, { query: params }).then(\n getFetchApiJSONResponse,\n );\n","import { fetchApi, getFetchApiJSONResponse } from 'shared/functions';\nimport { ESGUpdateYear } from '../../modules/ESG/types';\n\nexport const externalCostsComparisonService = (id: string, params?: ESGUpdateYear) =>\n fetchApi(`/esg/api/${id}/dashboard/distribution-of-impacts/`, { query: params }).then(\n getFetchApiJSONResponse,\n );\n","import { fetchApi, getFetchApiJSONResponse } from 'shared/functions';\nimport { ESGUpdateYear } from '../../modules/ESG/types';\n\nexport const impactOverviewService = (id: string, params?: ESGUpdateYear) =>\n fetchApi(`/esg/api/${id}/dashboard/impact-overview/`, { query: params }).then(\n getFetchApiJSONResponse,\n );\n","import { fetchApi, getFetchApiJSONResponse } from 'shared/functions';\nimport { ESGUpdateYear } from '../../modules/ESG/types';\n\nexport const rankingService = (id: string, params?: ESGUpdateYear) =>\n fetchApi(`/esg/api/${id}/dashboard/ranking/`, { query: params }).then(getFetchApiJSONResponse);\n","import { ESGUpdateYear } from 'modules/ESG/types';\nimport { fetchApi, getFetchApiJSONResponse, catchFetchApiError } from 'shared/functions';\n\nexport const fetchESGScoreSummaryTab = (id: string, params?: ESGUpdateYear) => {\n const url = `/esg/api/${id}/summary-tab/`;\n\n return fetchApi(url, { query: params }).then(getFetchApiJSONResponse).catch(catchFetchApiError);\n};\n","import { fetchApi, getFetchApiJSONResponse, catchFetchApiError } from 'shared/functions';\n\ntype UploadCustomCompaniesParams = {\n companiesFile: File;\n organisationId: string;\n isPortfolioManager?: boolean;\n portfolioId?: string;\n};\n\nexport const uploadCustomCompanies = async ({\n companiesFile,\n organisationId,\n isPortfolioManager,\n portfolioId,\n}: UploadCustomCompaniesParams) => {\n const formData = new FormData();\n formData.append('file', companiesFile, companiesFile.name);\n\n if (!portfolioId) {\n formData.append('organisationId', organisationId);\n }\n\n const params = {\n method: 'POST',\n body: formData,\n };\n\n const url = isPortfolioManager\n ? `/user-profile/portfolios/upload-custom-company/${portfolioId}`\n : '/esg/api/upload-custom-company/';\n\n return fetchApi(url, params, ['Content-Type'])\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n","export const contractStates = {\n ACTIVE: 'ACTIVE',\n};\n","import { contractStates } from 'shared/constants/contractStates';\nimport { fetchApi, getUserId } from 'shared/functions';\n\nexport const fetchEsgContractData = () => {\n const userId = getUserId();\n\n return fetchApi('/esg/api/contract-data/')\n .then((response: Response) => response.json())\n .then(\n ({\n users,\n is_trial: isTrial,\n allowed_requests: allowedRequests,\n total_amount: totalAmount,\n contract_state: contractState,\n }) => ({\n esgIsTrial: isTrial,\n esgRequestPermission: contractState === contractStates.ACTIVE && users.includes(userId),\n esgRequestsAllowed: allowedRequests,\n esgTotalAmount: totalAmount,\n esgContractState: contractState,\n }),\n );\n};\n","import { fetchApi } from 'shared/functions';\n\nexport const addToScoringToolService = (id: string) => {\n const url = '/esg/api/esg-scoring-tool-add-item/';\n\n return fetchApi(url, { method: 'POST', body: JSON.stringify([id]) }).then(response =>\n response.json(),\n );\n};\n","import { Period } from '@scope/scope-one-ui/core/SentimentBar/SentimentBar.d';\nimport { useGet } from 'shared/hooks/useFetch';\nimport {\n AttentionBuzzBreakdown,\n EsgEventsList,\n EsgPeriodIndustryScore,\n EsgPeriodScore,\n PeerGroupComparisionInfo,\n SectionA,\n TopCompanies,\n E_S_GData,\n ESGHistory,\n EsgTotalData,\n PeerGroupComparisonChartData,\n SentifyCompany,\n SentifyRequests,\n SentifyStatus,\n} from '../types/esgSentiment.d';\n\nexport const useGeneralInformation = () => ({\n data: ['Entity Review', 'Without entity participation', 'Subscription', 'Unsolicited'],\n});\n\nexport const useGetHistoryChart = (entityId: string) =>\n useGet<SectionA>(`/sentifi/daily-score/${entityId}?_filter=6months`);\n\nexport const useGetEsgEvents = (companyId: string, eventType: 'E' | 'S' | 'G', filter: Period) =>\n useGet<EsgEventsList>(`/sentifi/esg-event/${companyId}/${eventType}?_filter=${filter}`);\n\nexport const useGetPeriodScore = (companyId: string, filter: Period) =>\n useGet<EsgPeriodScore>(`/sentifi/period-score/${companyId}?_filter=${filter}`);\n\nexport const useGetPeriodIndustryScore = (companyId: string, filter: Period) =>\n useGet<EsgPeriodIndustryScore>(`/sentifi/period-industry-score/${companyId}?_filter=${filter}`);\n\nexport const useGetPeerGroupComparison = (companyId: string) =>\n useGet<PeerGroupComparisonChartData>(`/sentifi/peer-group-comparison/${companyId}`);\n\nexport const useGetAttentionBuzzBreakdown = (companyId: string, filter: Period) =>\n useGet<AttentionBuzzBreakdown>(\n `/sentifi/period-score-attention-buzz/${companyId}?_filter=${filter}`,\n );\n\nexport const useGetCompareCompanyIndustry = (companyId: string) =>\n useGet<PeerGroupComparisionInfo>(`/sentifi/compare-company-industry/${companyId}`);\n\nexport const useGetTopCompanies = (companyId: string) =>\n useGet<TopCompanies>(`/sentifi/top-companies-peer-industry/${companyId}`);\n\nexport const useGetESGTotalData = (companyId: string, timeRange: string) =>\n useGet<EsgTotalData>(\n `/sentifi/esg-over-time-score/${companyId}?_filter=${timeRange}&order_by=-date`,\n );\n\nexport const useGetE_S_GData = (companyId: string, timeRange: string) =>\n useGet<E_S_GData>(\n `/sentifi/e-s-g-over-time-score/${companyId}?_filter=${timeRange}&order_by=-date`,\n );\n\nexport const useGetESGHistory = (scoreType: string, companyId: string, timeRange: string) =>\n useGet<ESGHistory>(\n `/sentifi/e-s-g-history/${companyId}/${scoreType}?_filter=${timeRange}&order_by=-date`,\n );\n\nexport const useGetCompanyInfo = (companyId: string) =>\n useGet<SentifyCompany>(`/sentifi/company/${companyId}`);\n\nexport const useGetSentifyRequests = () =>\n useGet<SentifyRequests>(`/sentifi/organization-company/`);\n\nexport const useGetAvailability = (id: string) =>\n useGet<SentifyStatus>(`/sentifi/organization-company/${id}`);\n","import { fetchApi, getFetchApiJSONResponse, catchFetchApiError } from 'shared/functions';\nimport { useGet } from 'shared/hooks/useFetch';\nimport {\n CoverageOptions,\n FilterOptions,\n ImpactReview,\n IndustryScore,\n List,\n MaterialityMap,\n PortfolioCoverage,\n RegionScore,\n RelevanceMapping,\n ScoreOverview,\n} from '../types';\n\nexport type Metadata = { latestUpdate: string; year: number };\n\nexport const getPieByRegion = async (id: string, meta: Metadata) => {\n return fetchApi(\n `/esg/api/${id}/dashboard/lending-portfolio-by-region?latestUpdate=${meta.latestUpdate}&year=${meta.year}`,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const getPieByIndustry = async (id: string, meta: Metadata) => {\n return fetchApi(\n `/esg/api/${id}/dashboard/lending-portfolio-by-industry?latestUpdate=${meta.latestUpdate}&year=${meta.year}`,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const getImpactByCountry = async (id: string, meta: Metadata) => {\n return fetchApi(\n `/esg/api/${id}/dashboard/impact-of-lending-portfolio-by-country?latestUpdate=${meta.latestUpdate}&year=${meta.year}`,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const getImpactByIndustry = async (id: string, meta: Metadata) => {\n return fetchApi(\n `/esg/api/${id}/dashboard/impact-of-lending-portfolio-by-industry?latestUpdate=${meta.latestUpdate}&year=${meta.year}`,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const getEsgCoverage = (query: CoverageOptions) => {\n const {\n country,\n industry,\n limit,\n offset,\n orderBy,\n environmentFrom,\n environmentTo,\n socialFrom,\n socialTo,\n governanceFrom,\n governanceTo,\n totalScoreFrom,\n totalScoreTo,\n } = query;\n\n return fetchApi(\n `/esg/api/esg-coverage${\n Object.values(query).some((val) => val != null)\n ? `?${[\n limit != null ? `limit=${limit}` : '',\n offset != null ? `offset=${offset}` : '',\n country ? country.map((code) => `country=${code}`) : '',\n industry ? industry.map((code) => `industry=${code}`) : '',\n orderBy ? `order_by=${orderBy}` : '',\n environmentFrom ? `e_score_min=${environmentFrom}` : '',\n environmentTo ? `e_score_max=${environmentTo}` : '',\n socialFrom ? `s_score_min=${socialFrom}` : '',\n socialTo ? `s_score_max=${socialTo}` : '',\n governanceFrom ? `g_score_min=${governanceFrom}` : '',\n governanceTo ? `g_score_max=${governanceTo}` : '',\n totalScoreFrom ? `esg_score_min=${totalScoreFrom}` : '',\n totalScoreTo ? `esg_score_max=${totalScoreTo}` : '',\n ]\n .flat()\n .filter(Boolean)\n .join('&')}`\n : ``\n }`,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const useCompanyVsValueChain = (id: string, year: number) =>\n useGet<MaterialityMap>(`/esg/api/company-vs-value-chain/${id}/`, { params: { year } });\n\nexport const useGetImpactIndustryAbsolute = (id: string, year: number) =>\n useGet<List<IndustryScore>>(`/esg/api/impact-industry-absolute/`, {\n params: { company_uuid: id, year },\n });\n\nexport const useGetImpactIndustryRelative = (id: string, year: number) =>\n useGet<List<IndustryScore>>(`/esg/api/impact-industry-relative/`, {\n params: { company_uuid: id, year },\n });\n\nexport const useGetImpactRegionAbsolute = (id: string, year: number) =>\n useGet<List<RegionScore>>(`/esg/api/impact-region-absolute/`, {\n params: { company_uuid: id, year },\n });\n\nexport const useGetImpactRegionRelative = (id: string, year: number) =>\n useGet<List<RegionScore>>(`/esg/api/impact-region-relative/`, {\n params: { company_uuid: id, year },\n });\n\nexport const useMaterialityMap = (id: string, year: number) =>\n useGet<MaterialityMap>(`/esg/api/materiality-map/${id}/`, { params: { year } });\n\nexport const useGetScoreOverview = (id: string, year: number) =>\n useGet<ScoreOverview>(`/esg/api/score-overview/${id}/`, { params: { year } });\n\nexport const useSDGRelevanceMapping = (id: string, year: number) =>\n useGet<RelevanceMapping>(`/esg/api/sdg-relevance-mapping/${id}/`, { params: { year } });\n\nexport const useImpactReview = (id: string, year?: number) =>\n useGet<ImpactReview>(`/esg/api/impact-review/${id}/`, { params: { year } });\n\nexport const usePortfolioCoverage = (id: string, year: number) =>\n useGet<PortfolioCoverage>(`/esg/api/portfolio-coverage/${id}/`, { params: { year } });\n\nexport const useFilterOptions = () => useGet<FilterOptions>('/esg/api/esg-filter-options');\n","export const subscriptionStatuses = {\n NO_SUBSCRIPTION: 'NO_SUBSCRIPTION',\n ACTIVE: 'ACTIVE',\n ACTIVE_TRIAL: 'ACTIVE_TRIAL',\n ACTIVE_CANCELLED: 'ACTIVE_CANCELLED',\n ENDED: 'ENDED',\n ENDED_TRIAL: 'ENDED_TRIAL',\n ENDED_CANCELLED: 'ENDED_CANCELLED',\n};\n","export enum ShopProductLines {\n Review = 'Review',\n Tools = 'Tools',\n Research = 'Research',\n Rating = 'Rating',\n Events = 'Events',\n}\n","export type SearchQuery = {\n query?: string;\n country?: string[];\n industry?: string[];\n ratingType?: string;\n};\n\nexport enum ItemType {\n UNKNOWN = 'UNKNOWN',\n ISIN = 'ISIN',\n LEI = 'LEI',\n SCOPEONEID = 'SCOPEONEID',\n EASYNUMBER = 'EASYNUMBER',\n}\n\nexport type ArtifactId = {\n value: string;\n type: ItemType;\n};\n\nexport type SelectedEntities = {\n count: number;\n itemIds: Record<string, string>;\n items: Record<string, string[][]>;\n type: ItemType | null;\n};\n\nexport type PortfolioItem =\n | 'ENTITY'\n | 'ISSUER'\n | 'INSTRUMENT'\n | 'FUND'\n | 'ISSUE'\n | 'RATING_NEWS'\n | 'COMPANY_NEWS'\n | 'RESEARCH'\n | 'COMMENTARY'\n | 'MONITORING_NOTES'\n | 'EVENT';\n","import { createSelector } from 'reselect';\n\nconst getAuth = (state) => state.auth;\nexport const getAuthData = createSelector(getAuth, ({ data }) => data);\nexport const getAuthDataUserId = createSelector(getAuthData, ({ userId }) => userId);\nexport const getAuthDataOrganisation = createSelector(\n getAuthData,\n ({ organisation }) => organisation,\n);\nexport const getAuthDataOrganisationId = createSelector(\n getAuthData,\n ({ organisationId }) => organisationId,\n);\nexport const getAuthDataToken = createSelector(getAuthData, ({ token }) => token);\nexport const getAuthDataUser = createSelector(getAuthData, ({ user }) => user);\n","import * as Yup from 'yup';\n\nconst changePasswordSchema = Yup.object().shape({\n oldPassword: Yup.string()\n .label('Current password')\n .min('1')\n .required(),\n newPassword: Yup.string()\n .label('New password')\n .min('1')\n .required()\n .test({\n name: 'passwords-match',\n test: function testPasswordsMatch(value) {\n return this.parent.oldPassword !== value;\n },\n message: `The old and new password cannot be the same`,\n }),\n confirmNewPassword: Yup.string()\n .label('Confirm new password')\n .min('1')\n .required()\n .test({\n name: 'passwords-match',\n test: function testPasswordsMatch(value) {\n return this.parent.newPassword === value;\n },\n message: `Passwords don't match`,\n }),\n});\n\nexport { changePasswordSchema };\n","import * as Yup from 'yup';\n\nconst editProfileSchema = Yup.object().shape({\n firstName: Yup.string()\n .min(1)\n .max(100)\n .required(),\n name: Yup.string()\n .min(1)\n .max(100)\n .required(),\n phone: Yup.string()\n .min(10)\n .max(15)\n .matches(/^[+]/)\n .required(),\n email: Yup.string()\n .min(1)\n .max(100)\n .email()\n .required(),\n jobTitle: Yup.string()\n .min(1)\n .max(100)\n .required(),\n});\n\nexport { editProfileSchema };\n","import * as Yup from 'yup';\n\nconst sharePortfolioSchema = Yup.object().shape({\n users: Yup.array()\n .min(1, 'Check at least one user.')\n .required(),\n message: Yup.string()\n .min(1)\n .required(),\n});\n\nexport { sharePortfolioSchema };\n","import * as Yup from 'yup';\n\nconst maxFileSize = 1048576;\n\nconst matchFileFormat = (name, availableFormats) => {\n const fileFormat = name.split('.').pop();\n\n return availableFormats.includes(fileFormat);\n};\n\nconst portfolioUploadSchema = (\n availableFormats,\n fileExistenceMessage = 'Portoflio file is required',\n) =>\n Yup.object().shape({\n fileUploadInput: Yup.mixed()\n .test('fileExistence', fileExistenceMessage, value => value)\n .test('fileSize', 'File too large', value => value && value.size <= maxFileSize)\n .test(\n 'fileFormat',\n 'Unsupported format',\n value => value && matchFileFormat(value.name.toLowerCase(), availableFormats),\n ),\n });\n\nexport { portfolioUploadSchema };\n","import * as Yup from 'yup';\n\nconst createPortfolioSchema = Yup.object().shape({\n dossierName: Yup.string()\n .max(150)\n .required(),\n});\n\nexport { createPortfolioSchema };\n","import * as Yup from 'yup';\n\nconst creditReviewCreatePortfolioSchema = Yup.object().shape({\n dossierId: Yup.string()\n .max(150)\n .required(),\n});\n\nexport { creditReviewCreatePortfolioSchema };\n","export const cofaceAccessTypes = {\n REQUEST_ALLOWED: 'REQUEST_ALLOWED',\n REQUEST_NOT_ALLOWED: 'REQUEST_NOT_ALLOWED',\n NO_CONTRACT_ID: 'NO_CONTRACT_ID',\n NOT_ENOUGH_CREDITS: 'NOT_ENOUGH_CREDITS',\n};\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { EnvironmentTypes } from 'shared/constants/environmentTypes';\nimport { useAccess } from 'shared/hooks/useAccess/useAccess';\n\nexport const useFeatures = () => {\n const isDevelopmentEnvironment = useAccess({ environment: EnvironmentTypes.DEVELOPMENT });\n\n const isTestingEnvironment = useAccess({\n environment: [EnvironmentTypes.TESTING, EnvironmentTypes.DEVELOPMENT],\n });\n\n return {\n creditReview: false,\n creditReviewInvitationCard: false,\n esg: true,\n shopSystem: true,\n notifications: true,\n esgCompanies: true,\n eventsInPortfolioManager: true,\n activityInPortfolioManager: true,\n uploadsHistoryInPortfolioManager: true,\n restrictedSubscriptionRatings: isTestingEnvironment,\n creditSphereInvitationCard: false,\n esgLendingData: true,\n esgSentiment: false,\n climateStressTest: true,\n popoverFiltersPortfolioManager: true,\n ecafFeature: true,\n multipleRequestsPortfolioManager: true,\n redirectHomeToPageOne: true,\n fundAnalysisPortfolioManager: true,\n newPortfolioUploadModal: true,\n };\n};\n","export const shopRoles = {\n SHOP_ADMIN: 'SHOP_ADMIN',\n SHOP_USER: 'SHOP_USER',\n SHOP_SCOPE_EXPLORER: 'SHOP_SCOPE_EXPLORER',\n ISSUER_DASHBOARD: 'ISSUER_DASHBOARD',\n};\n\nexport const allShopRoles = Object.values(shopRoles);\n","import { createSelector } from 'reselect';\nimport { EventsStore } from '../types/eventsTypes';\n\ntype Store = {\n events: EventsStore;\n};\n\nconst getEventsModule = (state: Store): EventsStore => state.events;\n\nexport const getEvents = createSelector(getEventsModule, ({ events }) => events);\n\nexport const getEventsFilters = createSelector(getEventsModule, ({ filters }) => filters);\n\nexport const getEventSortDesc = createSelector(getEventsModule, ({ sortDesc }) => sortDesc);\n\nexport const getEventsDetails = createSelector(\n getEventsModule,\n ({ eventsDetails }) => eventsDetails,\n);\n\nexport const getEventTitles = createSelector(getEventsModule, ({ eventTitles }) => eventTitles);\n\nexport const getEventSessions = createSelector(\n getEventsModule,\n ({ eventSessions }) => eventSessions,\n);\n\nexport const getSessionsDetails = createSelector(\n getEventsModule,\n ({ sessionsDetails }) => sessionsDetails,\n);\n\nexport const getEventProperties = createSelector(getEventsModule, ({ properties }) => properties);\n","import { fetchApi, getFetchApiJSONResponse, catchFetchApiError } from 'shared/functions';\nimport { getFetchApiTextResponse } from 'shared/functions/fetchApi/fetchApi';\nimport qs from 'qs';\nimport { Event, EventCategory } from '../types/eventsTypes';\n\nexport const fetchEvents = (\n category: EventCategory | '',\n timeline: string,\n sortDesc: boolean,\n status: 'ACTIVE' | 'DRAFT' | 'ALL' = 'ACTIVE',\n favourites: boolean,\n) => {\n const params = qs.stringify(\n {\n page: 1,\n limit: 100,\n sort: 'eventDate',\n dir: sortDesc ? 'ASC' : 'DESC',\n categories: category || null,\n futureEvents: timeline === 'upcoming' || null,\n pastEvents: timeline === 'past' || null,\n status: status === 'ALL' ? null : status,\n favourites: favourites || null,\n },\n { skipNulls: true },\n );\n\n return fetchApi(`/storefront/livestorm/events?${params}`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const fetchEventDetails = (id: string) =>\n fetchApi(`/storefront/livestorm/events/${id}`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const fetchEventTitles = (title: string) =>\n fetchApi(`/storefront/livestorm/eventtitles?pageNumber=0&title=${title}`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const fetchEventSessions = (id: string) =>\n fetchApi(`/storefront/livestorm/integration/events/${id}/sessions`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const fetchSessionDetails = (id: string) =>\n fetchApi(`/storefront/livestorm/integration/sessions/${id}`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const uploadDocument = (file: File) => {\n const formData = new FormData();\n\n formData.append('data', JSON.stringify({ title: file.name, documentType: 'LIVESTORM_EVENT' }));\n formData.append('file', file);\n\n return fetchApi(\n `/storefront/document_upload`,\n {\n method: 'POST',\n body: formData,\n },\n ['Content-Type'],\n )\n .then(getFetchApiTextResponse)\n .catch(catchFetchApiError);\n};\n\nexport const saveEvent = async (event: Event) => {\n const formData = new FormData();\n const { image, ...data } = event;\n\n /* Upload documents (if there are any) and save their ids */\n const documents = event.documentList\n ? {\n documentList: (\n await Promise.all((event.documentList as File[]).map(uploadDocument))\n ).map(id => ({ id })),\n }\n : {};\n\n formData.append('data', JSON.stringify({ ...data, ...documents }));\n formData.append('image', image);\n\n return fetchApi(\n `/storefront/livestorm/events`,\n {\n method: 'POST',\n body: formData,\n },\n ['Content-Type'],\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const updateEvent = async (event: Event) => {\n const formData = new FormData();\n const { image, ...data } = event;\n\n formData.append('data', JSON.stringify(data));\n formData.append('image', image);\n\n return fetchApi(\n `/storefront/livestorm/events/${event.id}`,\n {\n method: 'PUT',\n body: formData,\n },\n ['Content-Type'],\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const activateEvent = (id: string) =>\n fetchApi(`/storefront/livestorm/events/${id}/status/ACTIVE`, {\n method: 'PUT',\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const deactivateEvent = (id: string) =>\n fetchApi(`/storefront/livestorm/events/${id}/status/DRAFT`, {\n method: 'PUT',\n })\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const registerForAnEvent = (id: string) =>\n fetchApi(`/storefront/livestorm/events/${id}/register`, {\n method: 'POST',\n }).catch(catchFetchApiError);\n\nexport const unregisterFromAnEvent = (id: string) =>\n fetchApi(`/storefront/livestorm/events/${id}/unregister`, {\n method: 'DELETE',\n }).catch(catchFetchApiError);\n\nexport const fetchEventsProperties = () =>\n fetchApi('/shop/dictionaries/')\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const addEventToFavourites = (id: string) =>\n fetchApi(`/storefront/livestorm/events/fav/${id}`, {\n method: 'PUT',\n }).catch(catchFetchApiError);\n\nexport const removeEventFromFavourites = (id: string) =>\n fetchApi(`/storefront/livestorm/events/fav/${id}`, {\n method: 'DELETE',\n }).catch(catchFetchApiError);\n","import { createTheme, adaptV4Theme } from '@mui/material/styles';\nimport { yellow, grey, red } from '@mui/material/colors';\nimport { COLORS } from '@scope/scope-one-ui/theme';\n\nconst defaultTheme = createTheme();\nconst useReportPage = window.location.href.includes('/generate-report/');\n\nconst black = '#000000';\nconst white = '#FFFFFF';\nconst { main } = COLORS.primary;\n\nexport const theme = createTheme(\n adaptV4Theme({\n palette: {\n primary: {\n contrastText: white,\n main,\n },\n secondary: {\n contrastText: white,\n main,\n },\n background: {\n default: COLORS.background.control,\n },\n custom: {\n black,\n white,\n green: '#34A850',\n darkCyan: '#0e9aa7',\n softOrange: '#f6cd61',\n orangeAccent: '#FF8E00',\n verySoftPink: '#eab9c9',\n veryLightBlue: '#9284ff',\n verySoftCyan: '#b0fdc7',\n moderateBlue: '#3e51b5',\n gray: '#777777',\n veryLightGray: '#fafafa',\n lightGray: '#cfcfcf',\n darkGray: '#333',\n darkGrayAlt: '#a5a5a5',\n darkGrayAlt2: '#424242',\n darkLimeGreen: '#62a25f',\n darkOrange: '#854316',\n verySoftLimeGreen: '#b7fbb2',\n verySoftYellow: '#fef7b7',\n slightlyDesaturatedBlue: '#7aabd5',\n warning: yellow[700],\n error: red[500],\n lightBlue: '#EFF0F6',\n lightGreen: '#00D3A7',\n chart1filled: '#01427b',\n chart1empty: '#d2dfeb',\n chart2filled: '#1295b5',\n chart2empty: '#d4ecf2',\n creditAnalysisEvents: COLORS.primary.main,\n esgAnalysisEvents: '#0095B3',\n fundAnalysisEvents: '#005CA8',\n },\n },\n customPalettes: {\n chartShort: ['#01427B', '#6594BC', '#1295B5', '#FBA11C', '#EF5F11'],\n chartExtended: [\n '#01427B',\n '#3271A5',\n '#6594BC',\n '#1295B5',\n '#40AAC3',\n '#6FC0D3',\n '#FBA11C',\n '#FCC777',\n '#EF5F11',\n '#F5A070',\n ],\n },\n customShadows: [\n '0 3px 4px 1px rgba(155, 155, 155, 0.3)',\n '0 3px 5px 1px rgba(155, 155, 155, 0.3)',\n ],\n breakpoints: {\n values: {\n ...defaultTheme.breakpoints.values,\n lg: 1410,\n },\n },\n typography: {\n fontFamily: '\"Inter\", sans-serif',\n h6: {\n fontWeight: 400,\n },\n },\n props: {\n MuiTextField: {\n variant: 'outlined',\n margin: 'normal',\n },\n MuiSelect: {\n variant: 'outlined',\n },\n },\n overrides: {\n MuiTooltip: {\n tooltip: {\n fontSize: 12,\n },\n },\n MuiTabs: {\n vertical: {\n borderRight: `1px solid ${grey[200]}`,\n '& $indicator': {\n backgroundColor: 'transparent',\n width: 8,\n right: 10,\n transition: 'none',\n '&:before': {\n display: 'block',\n content: '\"\"',\n width: 0,\n height: 0,\n borderTop: '5px solid transparent',\n borderLeft: `7px solid ${grey[400]}`,\n borderBottom: '5px solid transparent',\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n },\n },\n '& .MuiTab-wrapper': {\n alignItems: 'flex-start',\n paddingLeft: 20,\n },\n selected: {},\n },\n indicator: {},\n },\n MuiTab: {\n root: {\n textTransform: 'none',\n '&$selected': {\n backgroundColor: grey[100],\n color: main,\n },\n },\n wrapper: {},\n },\n MuiAccordion: {\n root: {\n '&$expanded': {\n margin: '1px 0',\n },\n },\n expanded: {},\n },\n MuiCssBaseline: {\n '@global': {\n html: {\n WebkitPrintColorAdjust: 'exact',\n WebkitFilter: useReportPage ? 'opacity(1)' : 'none',\n },\n '#hs-eu-cookie-confirmation': {\n display: useReportPage ? 'none' : 'block',\n },\n },\n '@media print': {\n html: {\n WebkitPrintColorAdjust: 'exact',\n WebkitFilter: useReportPage ? 'opacity(1)' : 'none',\n },\n '#hs-eu-cookie-confirmation': {\n display: useReportPage ? 'none' : 'block',\n },\n },\n },\n MuiDialogActions: {\n root: {\n margin: 0,\n padding: '16px 24px',\n },\n },\n MuiDialogContent: {\n root: {\n paddingTop: '20px !important',\n },\n },\n MUIDataTableSelectCell: {\n headerCell: {\n zIndex: 1,\n },\n fixedLeft: {\n zIndex: 1,\n },\n },\n MUIDataTableHeadCell: {\n fixedHeader: {\n zIndex: 1,\n },\n },\n },\n }),\n);\n","export enum TypesEnum {\n ACCOUNT_NOTIFICATIONS = 'accountNotification',\n SYSTEM_UPDATE = 'systemUpdate',\n RESPONSE = 'response',\n WHATS_NEW = 'whatsNew',\n DOWNLOADS = 'downloads',\n UPLOADS = 'uploads',\n}\n\nexport const typesIds = {\n [TypesEnum.ACCOUNT_NOTIFICATIONS]: 'account_notification',\n [TypesEnum.SYSTEM_UPDATE]: 'system_update',\n [TypesEnum.RESPONSE]: 'response',\n [TypesEnum.WHATS_NEW]: 'whats_new',\n [TypesEnum.DOWNLOADS]: 'downloads',\n [TypesEnum.UPLOADS]: 'uploads',\n};\n\nexport const types = {\n [TypesEnum.ACCOUNT_NOTIFICATIONS]: {\n id: typesIds.accountNotification,\n label: 'NOTIFICATIONS_CENTRE.TYPES.ACCOUNT_NOTIFICATION',\n },\n [TypesEnum.SYSTEM_UPDATE]: {\n id: typesIds.systemUpdate,\n label: 'NOTIFICATIONS_CENTRE.TYPES.SYSTEM_UPDATE',\n },\n [TypesEnum.RESPONSE]: {\n id: typesIds.response,\n label: 'NOTIFICATIONS_CENTRE.TYPES.RESPONSE',\n },\n [TypesEnum.WHATS_NEW]: {\n id: typesIds.whatsNew,\n label: 'NOTIFICATIONS_CENTRE.TYPES.WHATS_NEW',\n },\n [TypesEnum.DOWNLOADS]: {\n id: typesIds.downloads,\n label: 'NOTIFICATIONS_CENTRE.TYPES.DOWNLOADS',\n },\n [TypesEnum.UPLOADS]: {\n id: typesIds.uploads,\n label: 'NOTIFICATIONS_CENTRE.TYPES.UPLOADS',\n },\n};\n","export const ESGImpactHexCodesMap = {\n insignificant: '#e2e2e2',\n veryLow: '#3caf72',\n low: '#b1fdc8',\n medium: '#e6eb57',\n high: '#fd9382',\n veryHigh: '#e34660',\n};\n\nexport const ESGImpactHexBorderMap = {\n insignificant: '1px solid #919191',\n veryLow: 'none',\n low: 'none',\n medium: 'none',\n high: 'none',\n veryHigh: 'none',\n};\n","export const notificationsCentre = {\n notifications: '/notificationscentre/notifications',\n userNotifications: '/notificationscentre/user-notifications',\n userNotificationsWhatsNew: '/notificationscentre/user-notifications/whats-new',\n newsCentreNotificationsSettings: '/news-centre#notifications-settings',\n notificationsSettings: '/notificationscentre/notifications-settings',\n notificationsUserSettings: '/notificationscentre/notifications-settings/user-settings',\n notificationsWidget: '/notificationscentre/notifications-widget',\n};\n","import qs from 'qs';\n\nimport {\n fetchApi,\n catchFetchApiError,\n getFetchApiJSONResponse,\n transformKeysToCamelCase,\n} from 'shared/functions';\nimport { notificationsCentre } from '../constants/apiUrls/notificationsCentre';\nimport { typesIds } from '../constants/types';\n\nexport const notificationsLimit = 25;\n\nexport const fetchNotifications = ({ page = 1, limit = 25 } = {}) => {\n const params = {\n page,\n limit,\n };\n\n return fetchApi(\n `${notificationsCentre.notifications}/?${qs.stringify(params)}`,\n {},\n [],\n false,\n false,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const fetchUserNotifications = ({ page = 1, limit = 25, filter, sort, dir } = {}) => {\n const params = {\n page,\n limit,\n filter,\n sort,\n dir,\n };\n\n return fetchApi(\n `${notificationsCentre.userNotifications}?${qs.stringify(params)}`,\n {},\n [],\n false,\n false,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const updateNotification = ({ id, data } = {}) => {\n const params = {\n method: 'PUT',\n body: JSON.stringify(data),\n };\n\n return fetchApi(`${notificationsCentre.notifications}/${id}`, params, [], false, false)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const fetchUserNotificationsWhatsNew = (/* {\n page = 1,\n limit = 25,\n filter,\n sort,\n dir,\n} = {} */) => {\n /* const params = {\n page,\n limit,\n filter,\n sort,\n dir,\n }; */\n const hardCodedMsg = () => {\n const mockedCreCmbsRelease = {\n _id: 'mock-cre-cmbs',\n headline: 'What’s new – CRE Loan and CMBS Scorecard',\n text: `We are pleased to announce the following enhancements to this Scorecard: \n \n • Wider scope of application: Besides from assessing single CRE loans, the Scorecard will now also support the assessment of securitisations of CRE loans, i.e. commercial mortgage-backed securities (CMBSs), collateralised loan obligations (CRE CLOs), asset-backed securities (CRE loan ABSs), CRE debt funds or similar CRE debt structures. \n \n We refer to these jointly as CRE instruments and use CMBSs when referring to specific analytical elements which apply to securitisation only. Accordingly, we are renaming the product to “CRE loan and CMBS Scorecard†and have updated the Product Terms and Conditions accordingly. \n \n • Modelling undrawn loan parts: The new feature enables the modelling of drawdowns of loan parts which were not yet outstanding as of the model’s cut-off date (undrawn part). \n \n • Improved workflow on ScopeOne: We have added an additional “transaction†layer to the assessment workflow. It allows “projects†to be linked to a specific “transactionâ€. Previously different projects were assessed separately as separate transactions, though they could belong to one and the same transaction in reality. For example, now the user can create a Transaction A and then a project can be associated with it, e.g. Project 1: Initial assessment, Project 2: Monitoring, etc. \n \n A transaction is defined by its type (CRE or CMBS), the main asset type (e.g. Retail , Office etc.) and the main location of the assets (country: e.g. Germany, Canada, UK etc). Every project has to be linked to a transaction. Thus, naturally every new assessment starts with the creation of a transaction. \n \n • General improvements: Besides the new features, some new validation rules were introduced, and minor fixes have been made, which reduce the possibility of errors, increase stability of the CRE loan and CMBS Scorecard and improve the user experience.\n \n If you work on CRE loans and/or CMBS, please contact our Service Centre to schedule a demonstration of the CRE loan and CMBS Scorecard with our specialists. Free Trials are available for those that are interested. `,\n date: '2023-10-24T00:00:00',\n is_read: true,\n is_favourite: false,\n type: {\n category: 'whats_new',\n },\n img_url: '/ca/images/whats-new-cre-cmbs.jpg',\n };\n\n const mockedEsgImpactReviewRelease = {\n _id: 'mock-esg-impact-review-and-scopeone-api',\n headline: 'What’s new – ESG Impact Review updates and ScopeOne API',\n text: `We are excited to announce our most recent enhancements on ScopeOne:\n \n 1) Financial institutions downstream - We have enhanced the ESG Impact Review footprint analysis for financial institutions by adding a downstream feature offering a unique analytical view on the impact of their lending portfolios. ESG Impact Review provides independent and absolute ESG impact scores, including monetised footprint, on corporates and financial institutions globally down to scope-3 level.\n \n 2) ESG Impact Review - ESG Impact Review now comes with a database of ESG Impact Reviews on 35,000+ public corporates and financial institutions, which is a significant enlargement from the 13,000+ ESG Impact Reviews on entities we had previously.\n \n 3) We have updated our ScopeOne API.\n \n • The ScopeOne API is our primary interface to access and download data in bulk.\n • Whenever you licence a product on ScopeOne, you may want to download and use the related analytical data in-house on a regular basis. \n `,\n date: '2021-02-17T00:00:00',\n is_read: true,\n is_favourite: false,\n type: {\n category: 'whats_new',\n },\n img_url: '/ca/images/whats-new-esg-impact-review-and-scopeone-api.jpg',\n };\n\n const mockedPageOneRelease = {\n _id: 'mock-page-one-release',\n headline: \"What's new - PageOne\",\n text: `We have introduced PageOne - \n a new landing page for ScopeOne and dedicated pages for our three main areas of interest – Credit, ESG and Funds. \n Our users benefit from: \n \n • Improved navigation – An easier, more intuitive navigation panel, which lets you navigate by area of interest: Credit, ESG and Funds (Funds coming soon) \n • Dedicated ESG section – An entire section dedicated to finding ESG-related insights.\n • Design refresh – The layout has been improved for a fresher look and feel, making it easier for you to find what you are looking for and for us to add features and functionality in the future. \n \n Please contact our Service Centre if you’d like to set-up a brief virtual training. \n`,\n date: '17/02/2022',\n isRead: true,\n favourite: false,\n accept: false,\n type: {\n category: typesIds.whatsNew,\n },\n img_url: '/ca/images/new-notification.jpg',\n view: false,\n };\n\n const mockedPortfolioUpdatesNotification = {\n _id: 'mock-portfolio-updates',\n headline: \"What's new - Porftolio updates\",\n text: `We have updated the Portfolio tool to now display changes of ratings and scores in the \"Activity\" column allowing users to monitor the entities in their portfolios.\n\n Additionally, users are now able to add Events to their portfolios. After adding events to a portfolio, users can easily access the recordings of these events where available.\n \n The latest release also included various bug fixes.\n \n If you want to know more about new or existing features or want to give feedback on other topics, please contact the Service Center via email, chat or telephone.`,\n date: '19/10/2021',\n isRead: true,\n favourite: false,\n accept: false,\n type: {\n category: typesIds.whatsNew,\n },\n img_url: '/ca/images/whats-new-portfolio-updates.jpeg',\n view: false,\n };\n\n const mockedCreditSphereNotification = {\n _id: 'mock-credit-sphere',\n headline: \"What's new - Credit Sphere\",\n text: `We are introducing Credit Sphere on ScopeOne.\n\n Credit Sphere offers investors and risk managers access to Scope’s official credit ratings providing the below advantages:\n \n • Fair pricing: Our pricing structure is clear. We do not charge for ratings already paid for by the issuer.\n \n • Ease of use: We make it easy for clients to use our credit ratings across their organisations and for any purposes, including trading, research, investing and risk management or for regulatory purposes. \n \n • European angle: We assess credit risk from a European angle, offering a different perspective to the US CRAs\n \n You have the option to choose between Scope’s official credit ratings in the Europe and Global ex-Europe reference portfolios – on a view-only basis on ScopeOne free of charge -- or with full access.`,\n date: '30/09/2021',\n isRead: true,\n favourite: false,\n accept: false,\n type: {\n category: typesIds.whatsNew,\n },\n img_url: '/ca/images/whats_new-credit_sphere.jpeg',\n view: false,\n };\n\n const mockedNewFeaturesInPortfolioManagerNotification = {\n _id: 'mock-new-features-in-pm',\n headline: \"What's new - Portfolio feature\",\n text: 'We have added the new feature \"Portfolios\". Users can now add entities, instruments, research, rating news and events to Portfolios.\\n\\nPortfolios can be created by uploading entities or instruments through an Excel file or by adding items from the search or other lists.\\n\\nIf you have questions about the new function, do not hesitate to contact us via email or chat.',\n date: '20/08/2021',\n isRead: true,\n favourite: false,\n accept: false,\n type: {\n category: typesIds.whatsNew,\n },\n img_url: '/ca/images/new-notification-portfolio-manager.jpeg',\n view: false,\n };\n\n const mockedRebrandDossierToPortfolioNotification = {\n _id: 'mock-rebrand-dossier-to-portfolio',\n headline: \"What's new - Portfolio feature\",\n text: 'We will be introducing Porfolio as a new feature on ScopeOne soon. In a first step, we have rebranded the Dossier feature to \"Portfolio\".\\n\\nIn the next release we will consolidate the portfolio management and upload in one component. This will improving usability and extending functionality for the ScopeOne users.',\n date: '08/07/2021',\n isRead: true,\n favourite: false,\n accept: false,\n type: {\n category: typesIds.whatsNew,\n },\n img_url: '/ca/images/new-notification-rebrand-dossier-to-portfolio.jpg',\n view: false,\n };\n\n const mockedEventsNotification = {\n _id: 'mock-events',\n headline: \"What's new - Event Updates now available in ScopeOne\",\n text: 'Find out about the latest Industry Events and register to attend.',\n date: '10/01/2021',\n isRead: true,\n favourite: false,\n accept: false,\n type: {\n category: typesIds.whatsNew,\n },\n img_url: '/ca/images/new-notification-events.jpg',\n view: true,\n viewLink: '/ca/events',\n };\n\n const mockedNotification = {\n _id: 'mock',\n headline: \"What's new - product updates in ScopeOne\",\n text: 'In this section you will find the latest updates on products and features delivered through ScopeOne.',\n date: '01/11/2020',\n isRead: true,\n favourite: false,\n accept: false,\n type: {\n category: typesIds.whatsNew,\n },\n img_url: '/ca/images/new-notification.jpg',\n view: false,\n };\n\n return [\n mockedCreCmbsRelease,\n mockedEsgImpactReviewRelease,\n mockedPageOneRelease,\n mockedPortfolioUpdatesNotification,\n mockedCreditSphereNotification,\n mockedNewFeaturesInPortfolioManagerNotification,\n mockedRebrandDossierToPortfolioNotification,\n mockedEventsNotification,\n mockedNotification,\n ];\n };\n\n // return Promise.resolve(hardCodedMsg());\n return hardCodedMsg();\n // TODO: Use when the endpoint is ready\n /* return fetchApi(\n `${notificationsCentre.userNotificationsWhatsNew}?${qs.stringify(params)}`,\n {},\n [],\n false,\n false,\n )\n .then(getFetchApiJSONResponse)\n .then(hardCodedMsg)\n .catch(catchFetchApiError)\n .catch(hardCodedMsg); */\n};\n\nexport const updateNotifications = ({ data } = {}) => {\n const params = {\n method: 'PUT',\n body: JSON.stringify(data),\n };\n\n return fetchApi(notificationsCentre.notifications, params, [], false, false)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const updateNotificationsSettings = ({ data } = {}) => {\n const params = {\n method: 'PUT',\n body: JSON.stringify(data),\n };\n\n return fetchApi(notificationsCentre.notificationsSettings, params, [], false, false)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const fetchUserNotificationsSettings = () =>\n fetchApi(notificationsCentre.notificationsUserSettings, {}, [], false, false)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const fetchNotificationsWidget = () =>\n fetchApi(notificationsCentre.notificationsWidget, {}, [], false, false)\n .then(getFetchApiJSONResponse)\n .then(transformKeysToCamelCase)\n .catch(catchFetchApiError);\n\nexport const useFetchNotifications = () => {\n return (page, filter) => {\n const allCategory = [\n 'account_notification',\n 'system_update',\n 'response',\n 'downloads',\n 'uploads',\n ];\n const downloadsCategory = ['downloads'];\n const uploadsCategory = ['uploads'];\n\n const categoryFilter = () => {\n if (filter.type === 'download') return downloadsCategory;\n if (filter.type === 'upload') return uploadsCategory;\n return allCategory;\n };\n\n const favFilter = filter.type === 'favourites' ? { is_favourite: true } : {};\n const resFilter = filter.type === 'responses' ? { response: true } : {};\n\n const params = {\n page,\n limit: notificationsLimit,\n filter: JSON.stringify([\n {\n ...favFilter,\n ...resFilter,\n 'type.category': {\n $in: categoryFilter(),\n },\n },\n ]),\n };\n\n return fetchApi(\n `${notificationsCentre.userNotifications}?${qs.stringify(params)}`,\n {},\n [],\n false,\n false,\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n };\n};\n","import { creditRatingScalesMap, scalesTypes } from 'shared/mappings';\n\nexport const creditRatingRangeValues = [\n { label: 'D', value: 1 },\n { label: 'C', value: 2 },\n { label: 'CC', value: 3 },\n { label: 'CCC', value: 4 },\n { label: 'B-', value: 5 },\n { label: 'B', value: 6 },\n { label: 'B+', value: 7 },\n { label: 'BB-', value: 8 },\n { label: 'BB', value: 9 },\n { label: 'BB+', value: 10 },\n { label: 'BBB-', value: 11 },\n { label: 'BBB', value: 12 },\n { label: 'BBB+', value: 13 },\n { label: 'A-', value: 14 },\n { label: 'A', value: 15 },\n { label: 'A+', value: 16 },\n { label: 'AA-', value: 17 },\n { label: 'AA', value: 18 },\n { label: 'AA+', value: 19 },\n { label: 'AAA', value: 20 },\n];\n\nexport const creditRatingLongTermRangeValues = [\n { label: 'S-4', value: 1 },\n { label: 'S-3', value: 2 },\n { label: 'S-2', value: 3 },\n { label: 'S-1', value: 4 },\n { label: 'S-1+', value: 5 },\n];\n\nconst creditRatingRange = {\n [scalesTypes.rs1]: [...creditRatingRangeValues],\n [scalesTypes.rs2]: [...creditRatingLongTermRangeValues],\n [scalesTypes.rs3]: [...creditRatingRangeValues],\n [scalesTypes.rs4]: [...creditRatingRangeValues],\n};\n\nexport const creditRatingRangeMapping = (portfolioType, ratingType) =>\n creditRatingRange[creditRatingScalesMap[portfolioType][ratingType]];\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\n\nimport { DialogTitleWithClose } from 'ui';\n\nimport { disclaimer } from 'shared/constants/disclaimer';\n\nconst DisclaimerModal = ({ open, onClose }) => {\n const { t } = useTranslation();\n\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitleWithClose onClose={onClose}>{t('Disclaimer')}</DialogTitleWithClose>\n <DialogContent>\n <DialogContentText>{t(disclaimer)}</DialogContentText>\n </DialogContent>\n </Dialog>\n );\n};\n\nDisclaimerModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nDisclaimerModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n};\n\nexport default DisclaimerModal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Formik, Form, Field } from 'formik';\nimport * as Yup from 'yup';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\n\nimport { Alert, DialogTitleWithClose } from 'ui';\n\nconst validationSchema = Yup.object().shape({\n subject: Yup.string()\n .min('1')\n .max('100')\n .required(),\n message: Yup.string()\n .min('1')\n .max('4000')\n .required(),\n});\n\nconst useStyles = makeStyles({\n capitalize: {\n textTransform: 'capitalize',\n },\n});\n\nconst MessageModal = ({ title, jobFunction, open, onClose, onSendMessage }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const handleSubmit = (values, { setSubmitting }) => {\n onSendMessage(values);\n onClose();\n setSubmitting(false);\n };\n\n const initialValues = {\n subject: '',\n message: '',\n origin: window.location.href,\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth={false}>\n <DialogTitleWithClose onClose={onClose}>\n <span className={classes.capitalize}>\n {title || t(`Contact ${jobFunction || 'advisor'}`)}\n </span>\n </DialogTitleWithClose>\n <Formik\n initialValues={initialValues}\n onSubmit={handleSubmit}\n validationSchema={validationSchema}\n >\n {({ errors, isSubmitting, touched }) => (\n <Form noValidate>\n <DialogContent>\n <Alert message={t('Your contact details will be taken from your user profile.')} />\n <Field name=\"subject\">\n {({ field }) => (\n <TextField\n {...field}\n type=\"text\"\n label=\"Subject\"\n error={errors.subject && touched.subject}\n fullWidth\n />\n )}\n </Field>\n <Field name=\"message\">\n {({ field }) => (\n <TextField\n {...field}\n type=\"text\"\n label=\"Message\"\n error={errors.message && touched.message}\n fullWidth\n multiline\n rows={10}\n />\n )}\n </Field>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('Cancel')}\n </Button>\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" disabled={isSubmitting}>\n {t('Send')}\n </Button>\n </DialogActions>\n </Form>\n )}\n </Formik>\n </Dialog>\n );\n};\n\nMessageModal.defaultProps = {\n title: null,\n jobFunction: null,\n open: false,\n onClose: () => null,\n onSendMessage: () => null,\n};\n\nMessageModal.propTypes = {\n title: PropTypes.string,\n jobFunction: PropTypes.string,\n open: PropTypes.bool,\n onClose: PropTypes.func,\n onSendMessage: PropTypes.func,\n};\n\nexport default MessageModal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { ErrorMessage, Formik, Form, Field, FieldArray } from 'formik';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Checkbox from '@mui/material/Checkbox';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport FormGroup from '@mui/material/FormGroup';\nimport TextField from '@mui/material/TextField';\n\nimport { Alert, DialogTitleWithClose } from 'ui';\nimport { sharePortfolioSchema } from 'shared/validations';\n\nconst useStyles = makeStyles(() => ({\n dialogContent: {\n minWidth: '400px',\n },\n}));\n\nconst handleSubmit = (values, { setSubmitting }) => {\n setTimeout(() => {\n setSubmitting(false);\n }, 400);\n};\n\nconst SharePortfolioModal = ({ onClose, open, users }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const initialValues = {\n users: [],\n message: '',\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth={false}>\n <DialogTitleWithClose onClose={onClose}>\n {t('Share Portfolio with user')}\n </DialogTitleWithClose>\n <Formik\n initialValues={initialValues}\n onSubmit={handleSubmit}\n validationSchema={sharePortfolioSchema}\n >\n {({ errors, isSubmitting, touched, values, setFieldValue }) => {\n const handleSelectAllClick = () =>\n setFieldValue(\n 'users',\n users.map(user => user.id),\n );\n\n return (\n <Form noValidate>\n <DialogContent className={classes.dialogContent}>\n <ErrorMessage name=\"users\">\n {message => (\n <Box mb={1}>\n <Alert message={message} variant=\"error\" />\n </Box>\n )}\n </ErrorMessage>\n <Button onClick={handleSelectAllClick}>{t('Select all')}</Button>\n <FormGroup>\n <FieldArray name=\"users\">\n {arrayHelpers => {\n const handleChange = (event, userId) => {\n event.persist();\n const { target } = event;\n\n if (target.checked) {\n arrayHelpers.push(userId);\n } else {\n arrayHelpers.remove(values.users.indexOf(userId));\n }\n };\n\n return users.map(user => (\n <FormControlLabel\n key={user.id}\n label={user.fullName}\n control={\n <Checkbox\n checked={values.users.includes(user.id)}\n onChange={event => handleChange(event, user.id)}\n />\n }\n />\n ));\n }}\n </FieldArray>\n </FormGroup>\n <Field name=\"message\">\n {({ field }) => (\n <TextField\n {...field}\n type=\"text\"\n label={t('Message to user(s)')}\n error={errors.message && touched.message}\n fullWidth\n multiline\n rows={7}\n />\n )}\n </Field>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('Cancel')}\n </Button>\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" disabled={isSubmitting}>\n {t('Save')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n </Dialog>\n );\n};\n\nSharePortfolioModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nSharePortfolioModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n users: PropTypes.arrayOf(\n PropTypes.shape({\n fullName: PropTypes.string.isRequired,\n id: PropTypes.number.isRequired,\n }),\n ).isRequired,\n};\n\nexport default SharePortfolioModal;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Typography from '@mui/material/Typography';\nimport { makeStyles } from '@mui/styles';\n\nconst useStyles = makeStyles(() => ({\n alignText: {\n textAlign: 'center',\n },\n}));\n\nconst EmptyDataLabel = ({ label }) => {\n const classes = useStyles();\n\n return (\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\" className={classes.alignText}>\n {label}\n </Typography>\n );\n};\n\nEmptyDataLabel.propTypes = {\n label: PropTypes.string.isRequired,\n};\n\nexport default EmptyDataLabel;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport CardActionArea from '@mui/material/CardActionArea';\nimport Card from '@mui/material/Card';\nimport CardContent from '@mui/material/CardContent';\nimport Typography from '@mui/material/Typography';\n\nconst useStyle = makeStyles(() => ({\n label: {\n fontSize: 12,\n },\n}));\n\nconst TilesLabel = ({ label, value, onClick }) => {\n const classes = useStyle();\n\n const renderContent = (\n <CardContent>\n <Typography color=\"primary\" variant=\"body2\" className={classes.label}>\n {label}\n </Typography>\n <Typography color=\"textPrimary\" component=\"p\">\n {value}\n </Typography>\n </CardContent>\n );\n\n return (\n <Card variant=\"elevation\" elevation={0}>\n {onClick ? <CardActionArea onClick={onClick}>{renderContent}</CardActionArea> : renderContent}\n </Card>\n );\n};\n\nTilesLabel.defaultProps = {\n onClick: undefined,\n};\n\nTilesLabel.propTypes = {\n label: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n onClick: PropTypes.func,\n};\n\nexport default TilesLabel;\n","import { ListFilter } from '../components/List';\nimport { typesIds } from './types';\n\nexport const filtersIds = {\n all: 'all',\n responses: 'responses',\n favourites: 'favourites',\n requested: 'requested',\n downloads: 'downloads',\n uploads: 'uploads',\n};\n\nexport const filters: Array<ListFilter> = [\n {\n id: filtersIds.all,\n label: 'All',\n param: '',\n },\n {\n id: filtersIds.responses,\n label: 'Responses',\n param: 'response',\n },\n {\n id: filtersIds.favourites,\n label: 'favourites',\n param: 'is_favourite',\n },\n {\n id: filtersIds.requested,\n label: 'requested',\n param: 'is_requested',\n },\n {\n id: filtersIds.downloads,\n label: 'downloads',\n filterQuery: { 'type.category': { $in: [typesIds.downloads] } },\n },\n {\n id: filtersIds.uploads,\n label: 'uploads',\n filterQuery: { 'type.category': { $in: [typesIds.uploads] } },\n },\n];\n","import { ListFilter } from '../components/List';\nimport { filters, filtersIds } from './filters';\nimport { typesIds } from './types';\n\nconst getFilterById = (filterId: string) =>\n filters.find(({ id }) => id === filterId) || ({} as ListFilter);\n\nexport const categoriesIds = {\n whatsNew: 'whats-new',\n yourNotifications: 'your-notifications',\n yourDownloads: 'downloads',\n};\n\nexport type NotificationsCategory = {\n id: string;\n label: string;\n types: Array<string>;\n filters: Array<ListFilter>;\n initial?: boolean;\n};\n\nexport const categories: Array<NotificationsCategory> = [\n {\n id: categoriesIds.whatsNew,\n label: \"What's new!\",\n filters: [getFilterById(filtersIds.all), getFilterById(filtersIds.favourites)],\n types: [typesIds.whatsNew],\n },\n {\n id: categoriesIds.yourNotifications,\n label: 'Your notifications',\n filters: [\n getFilterById(filtersIds.all),\n getFilterById(filtersIds.downloads),\n getFilterById(filtersIds.responses),\n getFilterById(filtersIds.favourites),\n getFilterById(filtersIds.uploads),\n ],\n types: [\n typesIds.accountNotification,\n typesIds.systemUpdate,\n typesIds.response,\n typesIds.downloads,\n typesIds.uploads,\n ],\n initial: true,\n },\n];\n\nconst { id: initialCategory } = categories.find(({ initial }) => initial) || { id: undefined };\n\nconst initialFilter = categories.find(({ id }) => id === initialCategory)?.filters[0]?.id;\n\nexport { initialCategory, initialFilter };\n","import { transformKeysToCamelCase } from 'shared/functions';\n\nexport const getUnreadIds = data =>\n data\n .map(item => transformKeysToCamelCase(item))\n .filter(({ isRead }) => isRead === false)\n .map(({ id }) => id);\n","import { loadWhatsNewReadState } from 'store/localStorage';\nimport {\n SET_UNREAD,\n SET_CURRENT_CATEGORY,\n SET_CURRENT_FILTER,\n RESET_UNREAD_COUNTER,\n GET_USER_NOTIFICATIONS,\n GET_USER_NOTIFICATIONS_SUCCESS,\n GET_USER_NOTIFICATIONS_ERROR,\n PUT_FAVOURITE_USER_NOTIFICATION,\n PUT_FAVOURITE_USER_NOTIFICATION_SUCCESS,\n PUT_FAVOURITE_USER_NOTIFICATION_ERROR,\n INCREASE_PAGE,\n DISABLE_LOAD_MORE,\n CLEAR_NOTIFICATIONS,\n SET_IS_OPEN,\n PUSH_NOTIFICATION,\n} from './actions';\nimport { initialCategory, initialFilter, categoriesIds, categories } from '../constants/categories';\nimport { getUnreadIds } from '../utils';\nimport { fetchUserNotificationsWhatsNew } from '../services/notificationsService';\n\nconst initialState = {\n unread: {\n total: 0,\n whatsNew: 0,\n user: 0,\n },\n currentCategory: initialCategory,\n currentFilter: initialFilter,\n isPending: false,\n notifications: [],\n isFavouritePendings: [],\n page: 1,\n loadMore: true,\n limit: 25,\n isOpen: false,\n};\n\nconst getCalculatedUnread = async (unread, categoryId, isPending, unreadDisplayed) => {\n if (isPending) {\n return unread;\n }\n\n switch (categoryId) {\n case categoriesIds.whatsNew: {\n const whatsNewData = (await fetchUserNotificationsWhatsNew()).map(item => item.id);\n const whatsNewRead = loadWhatsNewReadState();\n\n const unreadItems = whatsNewData.filter(item => !whatsNewRead.includes(item));\n\n const result = {\n total: unread.total - unreadDisplayed - unreadItems.length,\n whatsNew: unread.whatsNew - unreadDisplayed - unreadItems.length,\n user: unread.user,\n };\n\n return result;\n }\n case categoriesIds.yourNotifications:\n return {\n total: unread.total - unreadDisplayed,\n whatsNew: unread.whatsNew,\n user: unread.user - unreadDisplayed,\n };\n default:\n return unread;\n }\n};\n\nconst isCurrentCategoryType = (currentCategory, category) =>\n categories.find(({ id }) => id === currentCategory).types.includes(category);\n\nexport const notificationsCentre = (state = initialState, action) => {\n const { payload, type } = action;\n\n switch (type) {\n case SET_UNREAD:\n return {\n ...state,\n unread: {\n total: payload.total,\n whatsNew: payload.whatsNew,\n user: payload.user,\n },\n };\n case SET_CURRENT_CATEGORY:\n return {\n ...state,\n currentCategory: payload.id,\n };\n case SET_CURRENT_FILTER:\n return {\n ...state,\n currentFilter: payload.id,\n };\n case RESET_UNREAD_COUNTER:\n return {\n ...state,\n unread: getCalculatedUnread(\n state.unread,\n state.currentCategory,\n state.isPending,\n getUnreadIds(state.notifications).length,\n ),\n };\n case GET_USER_NOTIFICATIONS:\n return {\n ...state,\n isPending: true,\n };\n case GET_USER_NOTIFICATIONS_SUCCESS:\n if (!state.isOpen) {\n return state;\n }\n\n return {\n ...state,\n isPending: false,\n notifications: [...state.notifications, ...payload],\n };\n case GET_USER_NOTIFICATIONS_ERROR:\n return {\n ...state,\n isPending: false,\n };\n case PUSH_NOTIFICATION:\n if (\n !state.isOpen ||\n state.isPending ||\n !isCurrentCategoryType(state.currentCategory, payload.data.type.category)\n ) {\n return state;\n }\n\n return {\n ...state,\n isPending: false,\n notifications: [payload.data, ...state.notifications.slice(0, -1)],\n };\n case PUT_FAVOURITE_USER_NOTIFICATION:\n return {\n ...state,\n notifications: state.notifications.map(item => {\n if (payload.id === item._id) {\n return {\n ...item,\n is_favourite: payload.isFavourite,\n };\n }\n return item;\n }),\n isFavouritePendings: [...state.isFavouritePendings, payload.id],\n };\n case PUT_FAVOURITE_USER_NOTIFICATION_SUCCESS:\n return {\n ...state,\n isFavouritePendings: state.isFavouritePendings.filter(id => payload.id !== id),\n };\n case PUT_FAVOURITE_USER_NOTIFICATION_ERROR:\n return {\n ...state,\n notifications: state.notifications.map(item => {\n if (payload.id === item._id) {\n return {\n ...item,\n is_favourite: !payload.isFavourite,\n };\n }\n return item;\n }),\n isFavouritePendings: [...state.isFavouritePendings.filter(id => payload.id !== id)],\n };\n case INCREASE_PAGE:\n if (state.isPending || !state.loadMore || !state.isOpen) {\n return state;\n }\n\n return {\n ...state,\n page: state.page + 1,\n };\n case DISABLE_LOAD_MORE:\n return {\n ...state,\n loadMore: false,\n };\n case CLEAR_NOTIFICATIONS:\n return {\n ...state,\n page: initialState.page,\n loadMore: initialState.loadMore,\n notifications: initialState.notifications,\n isPending: initialState.isPending,\n };\n case SET_IS_OPEN:\n return {\n ...state,\n isOpen: payload.value,\n };\n default:\n return state;\n }\n};\n","import produce from 'immer';\n\nimport { loginParser, permissionsParser, userParser } from 'shared/parsers';\nimport { shopPermissionsParser } from 'modules/shop/shared/parsers';\nimport { FETCH_SHOP_PERMISSIONS_SUCCESS } from 'modules/shop/store/shopActions';\n\nimport {\n LOGIN,\n LOGIN_SUCCESS,\n LOGIN_ERROR,\n LOGOUT_SUCCESS,\n EDIT_PROFILE,\n EDIT_PROFILE_SUCCESS,\n EDIT_PROFILE_ERROR,\n PERMISSIONS,\n GET_LOGGED_USER_SUCCESS,\n} from './loginAction';\n\nconst initialState = {\n isPending: false,\n data: null,\n error: null,\n};\n\nexport function auth(state = initialState, action) {\n const { response, type, payload } = action;\n\n switch (type) {\n case LOGIN:\n return { ...state, isPending: true };\n case LOGIN_SUCCESS:\n return { isPending: false, data: loginParser(response), error: null };\n case LOGIN_ERROR:\n return { isPending: false, data: null, error: response.message };\n case LOGOUT_SUCCESS:\n return initialState;\n case EDIT_PROFILE: {\n const { avatar } = action.payload;\n\n return produce(state, draftState => {\n draftState.data.user = { ...state.data.user, avatar }; // eslint-disable-line no-param-reassign\n });\n }\n case EDIT_PROFILE_SUCCESS: {\n const { firstName, name, phone, email, jobFunction, jobTitle } = response;\n\n return produce(state, draftState => {\n /* eslint-disable-next-line no-param-reassign */\n draftState.data.user = {\n ...state.data.user,\n firstName,\n name,\n phone,\n email,\n jobFunction,\n jobTitle,\n };\n });\n }\n case GET_LOGGED_USER_SUCCESS:\n return {\n ...state,\n data: { ...state.data, user: userParser(response) },\n };\n case PERMISSIONS:\n return {\n ...state,\n data: { ...state.data, permissions: permissionsParser(response.permissions) },\n };\n case FETCH_SHOP_PERMISSIONS_SUCCESS:\n return {\n ...state,\n data: { ...state.data, shopPermissions: shopPermissionsParser(payload) },\n };\n case EDIT_PROFILE_ERROR:\n return state;\n default:\n return state;\n }\n}\n","import produce from 'immer';\nimport merge from 'lodash/merge';\nimport { instrumentParser, productsParser, artifactsParser } from 'shared/parsers';\nimport { REQUEST_RATING_NEWS, REQUEST_RATING_NEWS_FINISHED } from 'store/newsFeed/newsFeedActions';\n\nimport {\n GET_INSTRUMENT,\n GET_INSTRUMENT_SUCCESS,\n GET_INSTRUMENT_ERROR,\n GET_INSTRUMENT_PRODUCTS,\n GET_INSTRUMENT_PRODUCTS_SUCCESS,\n GET_INSTRUMENT_PRODUCTS_ERROR,\n GET_INSTRUMENT_RATING_NEWS,\n GET_INSTRUMENT_RATING_NEWS_SUCCESS,\n GET_INSTRUMENT_RATING_NEWS_ERROR,\n GET_INSTRUMENT_RESEARCH,\n GET_INSTRUMENT_RESEARCH_SUCCESS,\n GET_INSTRUMENT_RESEARCH_ERROR,\n REQUEST_INSTRUMENT_RATING,\n REQUEST_INSTRUMENT_RATING_SUCCESS,\n REQUEST_INSTRUMENT_RATING_ERROR,\n REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA,\n REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_SUCCESS,\n REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_ERROR,\n} from './instrumentActions';\n\nconst initialState = {\n isPending: false,\n data: null,\n isRatingRequestPending: false,\n ratingNews: {\n data: [],\n total: null,\n },\n research: {\n data: [],\n total: null,\n },\n isRatingNewsPending: false,\n shouldRefreshRatingNews: false,\n isResearchPending: false,\n shouldRefreshResearch: false,\n shouldRefresh: false,\n ratingRequestError: false,\n};\n\nexport function instrument(state = initialState, action) {\n const { payload, type } = action;\n\n switch (type) {\n case GET_INSTRUMENT:\n return { ...state, isPending: true, shouldRefresh: false };\n case GET_INSTRUMENT_SUCCESS:\n return { ...state, isPending: false, data: instrumentParser(payload) };\n case GET_INSTRUMENT_ERROR:\n return { ...state, isPending: false };\n case GET_INSTRUMENT_PRODUCTS:\n return state;\n case GET_INSTRUMENT_PRODUCTS_SUCCESS: {\n return produce(state, draftState => {\n draftState.data.products = merge(draftState.data.products, productsParser(payload)); // eslint-disable-line no-param-reassign\n return draftState;\n });\n }\n case GET_INSTRUMENT_PRODUCTS_ERROR:\n return state;\n case GET_INSTRUMENT_RATING_NEWS:\n return { ...state, isRatingNewsPending: true, shouldRefreshRatingNews: false };\n case GET_INSTRUMENT_RATING_NEWS_SUCCESS: {\n const { data, total } = payload;\n return {\n ...state,\n isRatingNewsPending: false,\n ratingNews: { data: artifactsParser(data), total },\n };\n }\n case GET_INSTRUMENT_RATING_NEWS_ERROR:\n return { ...state, isRatingNewsPending: false };\n case GET_INSTRUMENT_RESEARCH:\n return { ...state, isResearchPending: true, shouldRefreshResearch: false };\n case GET_INSTRUMENT_RESEARCH_SUCCESS: {\n const { data, total } = payload;\n return {\n ...state,\n isResearchPending: false,\n research: { data: artifactsParser(data), total },\n };\n }\n case GET_INSTRUMENT_RESEARCH_ERROR:\n return { ...state, isResearchPending: false };\n case REQUEST_INSTRUMENT_RATING:\n return { ...state, isRatingRequestPending: true };\n case REQUEST_INSTRUMENT_RATING_SUCCESS:\n return {\n ...state,\n shouldRefresh: true,\n isRatingRequestPending: false,\n shouldRefreshResearch: true,\n shouldRefreshRatingNews: true,\n };\n case REQUEST_INSTRUMENT_RATING_ERROR:\n return { ...state, isRatingRequestPending: false };\n case REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA:\n return { ...state, isRatingRequestPending: true };\n case REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_SUCCESS:\n return { ...state, isRatingRequestPending: false, ratingRequestError: false };\n case REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_ERROR:\n return { ...state, isRatingRequestPending: false, ratingRequestError: true };\n case REQUEST_RATING_NEWS:\n return { ...state, isRatingRequestPending: true, ratingRequestError: false };\n case REQUEST_RATING_NEWS_FINISHED: {\n const isError = !!(payload && payload.error);\n return {\n ...state,\n isRatingRequestPending: false,\n shouldRefresh: !isError,\n ratingRequestError: isError,\n };\n }\n default:\n return state;\n }\n}\n","import produce from 'immer';\nimport merge from 'lodash/merge';\nimport {\n entityParser,\n productsParser,\n artifactsParser,\n instrumentsToTableParser,\n} from 'shared/parsers';\nimport { REQUEST_RATING_NEWS_FINISHED, REQUEST_RATING_NEWS } from 'store/newsFeed/newsFeedActions';\nimport { SEARCH_ENTITIES } from 'store/searchResult/searchResultActions';\n\nimport {\n GET_ENTITY,\n GET_ENTITY_SUCCESS,\n GET_ENTITY_ERROR,\n GET_ENTITY_PRODUCTS,\n GET_ENTITY_PRODUCTS_SUCCESS,\n GET_ENTITY_PRODUCTS_ERROR,\n GET_ENTITY_INSTRUMENTS,\n GET_ENTITY_INSTRUMENTS_SUCCESS,\n GET_ENTITY_INSTRUMENTS_ERROR,\n GET_ENTITY_RATING_NEWS,\n GET_ENTITY_RATING_NEWS_SUCCESS,\n GET_ENTITY_RATING_NEWS_ERROR,\n GET_ENTITY_RESEARCH,\n GET_ENTITY_RESEARCH_SUCCESS,\n GET_ENTITY_RESEARCH_ERROR,\n REQUEST_ENTITY_RATING,\n REQUEST_ENTITY_RATING_SUCCESS,\n REQUEST_ENTITY_RATING_ERROR,\n REQUEST_ENTITY_RATING_AND_FETCH_DATA,\n REQUEST_ENTITY_RATING_AND_FETCH_DATA_SUCCESS,\n REQUEST_ENTITY_RATING_AND_FETCH_DATA_ERROR,\n REFRESH_ENTITY,\n REQUEST_CONFIRMATION_CHANGED,\n REQUEST_SIG_ENTITY_RATING,\n REQUEST_SIG_ENTITY_RATING_SUCCESS,\n REQUEST_SIG_ENTITY_RATING_ERROR,\n SET_ENTITY_CREDIT_RATING_VISIBILITY,\n} from './entityActions';\n\nconst initialState = {\n id: '',\n isPending: false,\n data: null,\n isRatingRequestPending: false,\n ratingNews: {\n data: [],\n total: null,\n },\n research: {\n data: [],\n total: null,\n },\n isRatingNewsPending: false,\n ratingRequestError: false,\n isResearchPending: false,\n instruments: {\n data: [],\n total: 0,\n isPending: true,\n },\n shouldRefresh: false,\n shouldRefreshRatingNews: false,\n shouldRefreshResearch: false,\n requestConfirmation: {\n confirmed: false,\n autoConfirm: false,\n },\n isVisible: false,\n};\n\nexport function entity(state = initialState, action) {\n const { payload, type } = action;\n\n switch (type) {\n case SEARCH_ENTITIES:\n // fall through\n case GET_ENTITY:\n return { ...state, isPending: true, shouldRefresh: false };\n case GET_ENTITY_SUCCESS:\n return { ...state, isPending: false, data: entityParser(payload) };\n case GET_ENTITY_ERROR:\n return { ...state, isPending: false };\n case GET_ENTITY_PRODUCTS:\n return state;\n case GET_ENTITY_PRODUCTS_SUCCESS: {\n return produce(state, (draftState) => {\n if (draftState.data) {\n draftState.data.products = merge(draftState.data.products, productsParser(payload)); // eslint-disable-line no-param-reassign\n }\n return draftState;\n });\n }\n case GET_ENTITY_PRODUCTS_ERROR:\n return state;\n case GET_ENTITY_INSTRUMENTS:\n return { ...state, areInstrumentsPending: true };\n case GET_ENTITY_INSTRUMENTS_SUCCESS: {\n const { data, total } = payload;\n return {\n ...state,\n instruments: { data: instrumentsToTableParser(data), total, isPending: false },\n };\n }\n case GET_ENTITY_INSTRUMENTS_ERROR:\n return { ...state, instruments: { ...state.instruments, isPending: false } };\n case GET_ENTITY_RATING_NEWS:\n return { ...state, isRatingNewsPending: true, shouldRefreshRatingNews: false };\n case GET_ENTITY_RATING_NEWS_SUCCESS: {\n const { data, total } = payload;\n return {\n ...state,\n isRatingNewsPending: false,\n ratingNews: { data: artifactsParser(data), total },\n };\n }\n case GET_ENTITY_RATING_NEWS_ERROR:\n return { ...state, isRatingNewsPending: false };\n case GET_ENTITY_RESEARCH:\n return { ...state, isResearchPending: true, shouldRefreshResearch: false };\n case GET_ENTITY_RESEARCH_SUCCESS: {\n const { data, total } = payload;\n return {\n ...state,\n isResearchPending: false,\n research: { data: artifactsParser(data), total },\n };\n }\n case GET_ENTITY_RESEARCH_ERROR:\n return { ...state, isResearchPending: false };\n case REQUEST_SIG_ENTITY_RATING:\n // fall through\n case REQUEST_ENTITY_RATING:\n return { ...state, isRatingRequestPending: true };\n case REQUEST_SIG_ENTITY_RATING_SUCCESS:\n // fall through\n case REQUEST_ENTITY_RATING_SUCCESS:\n return {\n ...state,\n shouldRefresh: true,\n isRatingRequestPending: false,\n shouldRefreshResearch: true,\n shouldRefreshRatingNews: true,\n };\n case REQUEST_SIG_ENTITY_RATING_ERROR:\n // fall through\n case REQUEST_ENTITY_RATING_ERROR:\n return { ...state, isRatingRequestPending: false };\n case REQUEST_ENTITY_RATING_AND_FETCH_DATA:\n return { ...state, id: payload.id, isRatingRequestPending: true };\n case REQUEST_ENTITY_RATING_AND_FETCH_DATA_SUCCESS:\n return { ...state, isRatingRequestPending: false, ratingRequestError: false };\n case REQUEST_ENTITY_RATING_AND_FETCH_DATA_ERROR:\n return { ...state, isRatingRequestPending: false, ratingRequestError: true };\n case REQUEST_RATING_NEWS:\n return { ...state, isRatingRequestPending: true, ratingRequestError: false };\n case REQUEST_RATING_NEWS_FINISHED: {\n const isError = !!(payload && payload.error);\n return {\n ...state,\n isRatingRequestPending: false,\n shouldRefresh: !isError,\n ratingRequestError: isError,\n };\n }\n case REFRESH_ENTITY:\n return {\n ...state,\n shouldRefresh: true,\n };\n case REQUEST_CONFIRMATION_CHANGED: {\n return {\n ...state,\n requestConfirmation: {\n confirmed: payload.confirmed,\n autoConfirm: state.requestConfirmation.autoConfirm ? true : payload.autoConfirm,\n },\n };\n }\n case SET_ENTITY_CREDIT_RATING_VISIBILITY:\n return {\n ...state,\n isVisible: payload.isVisible,\n };\n default:\n return state;\n }\n}\n","import { recentUsersParser } from 'shared/parsers';\n\nimport {\n GET_RECENT_USERS,\n GET_RECENT_USERS_SUCCESS,\n GET_RECENT_USERS_ERROR,\n} from './recentUsersActions';\n\nconst initialState = {\n isPending: false,\n total: 0,\n data: [],\n};\n\nexport function recentUsers(state = initialState, action) {\n const { response, type } = action;\n\n switch (type) {\n case GET_RECENT_USERS:\n return { ...state, isPending: true };\n case GET_RECENT_USERS_SUCCESS:\n return { isPending: false, data: recentUsersParser(response.data), total: response.total };\n case GET_RECENT_USERS_ERROR:\n return { ...state, isPending: false };\n default:\n return state;\n }\n}\n","import produce from 'immer';\n\nimport {\n entitiesToTableParser,\n instrumentsToTableParser,\n artifactsParser,\n creditReviewToTableParser,\n creditReviewListToTableParser,\n esgImpactToTableParser,\n esgSentimentToTableParser,\n climateStressTestToTableParser,\n} from 'shared/parsers';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { REQUEST_RATING_NEWS, REQUEST_RATING_NEWS_FINISHED } from 'store/newsFeed/newsFeedActions';\nimport {\n SEARCH_START,\n SEARCH_ENTITIES,\n SEARCH_ENTITIES_SUCCESS,\n SEARCH_ENTITIES_SWITCH_SCENARIO,\n SEARCH_ENTITIES_ERROR,\n SEARCH_INSTRUMENTS,\n SEARCH_INSTRUMENTS_SUCCESS,\n SEARCH_INSTRUMENTS_ERROR,\n SEARCH_RATING_NEWS,\n SEARCH_RATING_NEWS_SUCCESS,\n SEARCH_RATING_NEWS_ERROR,\n SEARCH_RESEARCH,\n SEARCH_RESEARCH_SUCCESS,\n SEARCH_RESEARCH_ERROR,\n SET_SEARCH_FILTERS,\n} from './searchResultActions';\n\nimport { REQUEST_SIG_ENTITY_RATING_SUCCESS } from '../entity/entityActions';\nimport { changeScenario } from '../../shared/parsers/portfoliosToTable/climateStressTestToTableParser';\n\nconst entitiesByRatingType = Object.values(ratingTypes).reduce((acc, ratingType) => {\n acc[ratingType] = {\n isPending: false,\n data: [],\n total: 0,\n };\n\n return acc;\n}, {});\n\nconst initialState = {\n isSearchStarted: false,\n isRatingRequestPending: false,\n ratingRequestError: false,\n entities: {\n isPending: false,\n error: undefined,\n byRatingType: entitiesByRatingType,\n },\n instruments: {\n isPending: false,\n data: [],\n total: 0,\n },\n research: {\n isPending: false,\n data: [],\n total: 0,\n shouldRefresh: false,\n },\n ratingNews: {\n isPending: false,\n data: [],\n total: 0,\n shouldRefresh: false,\n },\n creditReview: {\n isPending: false,\n data: [],\n total: 0,\n },\n searchFilters: {},\n};\n\nconst parserByRatingType = {\n [ratingTypes.CREDIT_RATING]: entitiesToTableParser,\n [ratingTypes.CREDIT_REVIEW]: creditReviewListToTableParser,\n [ratingTypes.ESG_IMPACT]: esgImpactToTableParser,\n [ratingTypes.SENTIMENT]: esgSentimentToTableParser,\n [ratingTypes.CLIMATE_STRESS_TEST]: climateStressTestToTableParser,\n};\n\nexport function searchResult(state = initialState, action) {\n const { payload, type } = action;\n\n switch (type) {\n case SEARCH_START: {\n return { ...state, isSearchStarted: true };\n }\n case SEARCH_ENTITIES: {\n const { ratingType } = payload;\n\n return produce(state, (draftState) => {\n // eslint-disable-next-line no-param-reassign\n draftState.entities.byRatingType[ratingType] = {\n ...initialState.entities.byRatingType[ratingType],\n isPending: true,\n };\n // eslint-disable-next-line no-param-reassign\n draftState.isSearchStarted = false;\n });\n }\n case SEARCH_ENTITIES_SUCCESS: {\n const { response, ratingType } = payload;\n\n return produce(state, (draftState) => {\n const entities = state.entities.byRatingType[ratingType];\n const parser = parserByRatingType[ratingType];\n // eslint-disable-next-line no-param-reassign\n draftState.entities.byRatingType[ratingType] = {\n ...entities,\n isPending: false,\n data: parser(ratingType === ratingTypes.CLIMATE_STRESS_TEST ? response : response.data),\n total: ratingType === ratingTypes.CLIMATE_STRESS_TEST ? response.length : response.total,\n };\n });\n }\n case SEARCH_ENTITIES_SWITCH_SCENARIO: {\n const { scenario } = payload;\n return produce(state, (draftState) => {\n const ratingType = ratingTypes.CLIMATE_STRESS_TEST;\n const entities = state.entities.byRatingType[ratingType];\n draftState.entities.byRatingType[ratingType] = {\n ...entities,\n isPending: false,\n data: changeScenario(entities.data, scenario),\n };\n });\n }\n case SEARCH_ENTITIES_ERROR: {\n const { ratingType, response } = payload;\n\n return produce(state, (draftState) => {\n // eslint-disable-next-line no-param-reassign\n draftState.entities.byRatingType[ratingType] = {\n ...initialState.entities.byRatingType[ratingType],\n isPending: false,\n error: response && response.error,\n };\n });\n }\n case SEARCH_INSTRUMENTS:\n return {\n ...state,\n instruments: { ...initialState.instruments, isPending: true },\n isSearchStarted: false,\n };\n case SEARCH_INSTRUMENTS_SUCCESS: {\n const { data, total } = payload;\n return {\n ...state,\n instruments: { data: instrumentsToTableParser(data), total, isPending: false },\n };\n }\n case SEARCH_INSTRUMENTS_ERROR:\n return { ...state, instruments: { ...initialState.instruments, isPending: false } };\n case SEARCH_RATING_NEWS:\n return {\n ...state,\n ratingNews: { ...initialState.ratingNews, isPending: true, shouldRefresh: false },\n isSearchStarted: false,\n };\n case SEARCH_RATING_NEWS_SUCCESS: {\n const { data, total } = payload;\n return { ...state, ratingNews: { data: artifactsParser(data), total, isPending: false } };\n }\n case SEARCH_RATING_NEWS_ERROR:\n return { ...state, ratingNews: { ...initialState.ratingNews, isPending: false } };\n case SEARCH_RESEARCH:\n return {\n ...state,\n research: { ...initialState.research, isPending: true, shouldRefresh: false },\n isSearchStarted: false,\n };\n case SEARCH_RESEARCH_SUCCESS: {\n const { data, total } = payload;\n return { ...state, research: { data: artifactsParser(data), total, isPending: false } };\n }\n case SEARCH_RESEARCH_ERROR:\n return { ...state, research: { ...initialState.research, isPending: false } };\n case REQUEST_RATING_NEWS:\n return { ...state, isRatingRequestPending: true, ratingRequestError: false };\n case REQUEST_RATING_NEWS_FINISHED:\n return {\n ...state,\n isRatingRequestPending: false,\n research: {\n ...initialState.research,\n shouldRefresh: !(payload && payload.error),\n },\n ratingNews: {\n ...initialState.ratingNews,\n shouldRefresh: !(payload && payload.error),\n },\n ratingRequestError: !!(payload && payload.error),\n };\n case REQUEST_SIG_ENTITY_RATING_SUCCESS: {\n const ratingType = ratingTypes.CREDIT_REVIEW;\n const updatedItems = payload;\n\n return produce(state, (draftState) => {\n // eslint-disable-next-line no-param-reassign\n draftState.entities.byRatingType[ratingType].data = state.entities.byRatingType[\n ratingType\n ].data.map((item) => {\n const easyNumber = item[0];\n const updatedItem = updatedItems.find((company) => company.easyNumber === easyNumber);\n\n if (updatedItem) return creditReviewToTableParser(updatedItem);\n\n return item;\n });\n });\n }\n case SET_SEARCH_FILTERS:\n return { ...state, searchFilters: payload };\n default:\n return state;\n }\n}\n","import { REQUEST_RATING_NEWS, REQUEST_RATING_NEWS_FINISHED } from 'store/newsFeed/newsFeedActions';\nimport {\n GET_ANNOUNCEMENT,\n GET_ANNOUNCEMENT_SUCCESS,\n GET_ANNOUNCEMENT_ERROR,\n} from './announcementActions';\n\nconst initialState = {\n data: {\n artifactType: '',\n id: '',\n language: '',\n leadAnalysts: [],\n locales: [],\n publicationDate: '',\n shortText: '',\n shortTitle: '',\n text: '',\n title: '',\n },\n success: false,\n isPending: false,\n shouldRefresh: false,\n ratingRequestError: false,\n};\n\nexport function announcement(state = initialState, action) {\n const { payload, type } = action;\n\n switch (type) {\n case GET_ANNOUNCEMENT:\n return { ...state, isPending: true };\n case GET_ANNOUNCEMENT_SUCCESS:\n return { ...state, isPending: false, data: payload.data, success: payload.success };\n case GET_ANNOUNCEMENT_ERROR:\n return { ...state, isPending: false, success: false };\n case REQUEST_RATING_NEWS:\n return { ...state, isPending: true };\n case REQUEST_RATING_NEWS_FINISHED:\n return {\n ...state,\n isPending: false,\n shouldRefresh: !(payload && payload.error),\n ratingRequestError: !!(payload && payload.error),\n };\n default:\n return state;\n }\n}\n","import { newsletterFrequencies } from 'shared/constants/news/newsletterFrequencies';\nimport { emailFrequencies } from 'shared/constants/news/emailFrequencies';\nimport { newsFeedSettingsParser, newsletterSettingsParser } from 'shared/parsers';\n\nimport {\n GET_NEWS_FEED,\n GET_NEWS_FEED_SUCCESS,\n GET_NEWS_FEED_ERROR,\n SAVE_FEED_SETTINGS,\n REQUEST_RATING_NEWS_FINISHED,\n REQUEST_RATING_NEWS,\n GET_PREFERENCES,\n GET_PREFERENCES_FINISHED,\n SAVE_PREFERENCES,\n SAVE_PREFERENCES_FINISHED,\n} from './newsFeedActions';\n\nconst initialState = {\n data: [],\n total: 0,\n isPending: false,\n isPreferencesPending: false,\n settings: {\n newsFeed: {\n newsTypes: [],\n industryTypes: [],\n countriesList: [],\n limitToFollowedAnalysts: false,\n },\n newsletter: {\n frequency: newsletterFrequencies.NONE,\n newsTypes: [],\n industryTypes: [],\n countriesList: [],\n limitToFollowedAnalysts: false,\n useNewsFeedPreferences: false,\n },\n },\n preferences: {\n emailNotifications: {\n frequency: emailFrequencies.DISABLED,\n type: [],\n },\n newsFeed: {\n classifications: [],\n limitToFollowedAnalysts: false,\n news: [],\n },\n newsletter: {\n classifications: [],\n frequency: newsletterFrequencies.WEEKLY,\n limitToFollowedAnalysts: false,\n news: [],\n useNewsFeedPreferences: false,\n },\n isPending: true,\n },\n shouldRefresh: false,\n ratingRequestError: false,\n defaultPrefsSet: false,\n};\n\nexport function newsFeed(state = initialState, action) {\n const { payload, type } = action;\n switch (type) {\n case GET_NEWS_FEED:\n return { ...state, isPending: true, ratingRequestError: false, shouldRefresh: false };\n case GET_NEWS_FEED_SUCCESS:\n return {\n ...state,\n isPending: false,\n data: payload.data,\n total: payload.total,\n };\n case GET_NEWS_FEED_ERROR:\n return { ...state, isPending: false };\n case SAVE_FEED_SETTINGS:\n return { ...state, settings: payload.settings, shouldRefresh: true };\n case REQUEST_RATING_NEWS:\n return { ...state, isPending: true, ratingRequestError: false };\n case REQUEST_RATING_NEWS_FINISHED:\n return {\n ...state,\n isPending: false,\n shouldRefresh: !(payload && payload.error),\n ratingRequestError: !!(payload && payload.error),\n };\n case GET_PREFERENCES:\n return { ...state, isPending: true, shouldRefresh: false, defaultPrefsSet: false };\n case GET_PREFERENCES_FINISHED: {\n const preferences = payload.preferences || {};\n return {\n ...state,\n isPending: false,\n preferences: {\n ...preferences,\n isPending: false,\n },\n settings: {\n newsFeed: newsFeedSettingsParser(preferences),\n newsletter: newsletterSettingsParser(preferences),\n },\n defaultPrefsSet: payload.defaultPrefs,\n shouldRefresh: !payload.defaultPrefs,\n };\n }\n case SAVE_PREFERENCES:\n return { ...state, isPreferencesPending: true };\n case SAVE_PREFERENCES_FINISHED:\n return { ...state, isPreferencesPending: false };\n default:\n return state;\n }\n}\n","import {\n creditRatingPortfoliosToTableParser,\n creditReviewPortfoliosToTableParser,\n creditReviewToTableParser,\n dossierItemsToTableParser,\n esgPortfoliosToTableParser,\n esgSentimentToTableParser,\n} from 'shared/parsers';\nimport produce from 'immer';\n\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport {\n GET_DOSSIERS,\n GET_DOSSIERS_SUCCESS,\n GET_DOSSIERS_ERROR,\n CREATE_DOSSIER,\n CREATE_DOSSIER_SUCCESS,\n CREATE_DOSSIER_ERROR,\n DELETE_DOSSIER,\n DELETE_DOSSIER_SUCCESS,\n DELETE_DOSSIER_ERROR,\n REFRESH_DOSSIERS,\n GET_DOSSIER,\n GET_DOSSIER_SUCCESS,\n GET_DOSSIER_ERROR,\n GET_DOSSIER_ITEMS,\n GET_DOSSIER_ITEMS_SUCCESS,\n GET_DOSSIER_ITEMS_ERROR,\n TOGGLE_DOSSIER_WATCHED_STATE,\n TOGGLE_DOSSIER_WATCHED_STATE_FINISHED,\n} from './dossierActions';\n\nimport { REQUEST_SIG_ENTITY_RATING_SUCCESS } from '../entity/entityActions';\n\nconst dossiersByRatingType = Object.values(ratingTypes).reduce((acc, ratingType) => {\n acc[ratingType] = {\n isPending: false,\n shouldRefresh: { value: false, reason: null },\n total: 0,\n data: [],\n };\n\n return acc;\n}, {});\n\nconst initialState = {\n isPending: false,\n isModalPending: false,\n shouldRefresh: { value: false, reason: null },\n singleDossier: null,\n error: null,\n byRatingType: dossiersByRatingType,\n items: {\n issuers: {\n isPending: false,\n total: 0,\n data: [],\n },\n issues: {\n isPending: false,\n total: 0,\n data: [],\n },\n researches: {\n isPending: false,\n total: 0,\n data: [],\n },\n commentaries: {\n isPending: false,\n total: 0,\n data: [],\n },\n ratingNews: {\n isPending: false,\n total: 0,\n data: [],\n },\n companyNews: {\n isPending: false,\n total: 0,\n data: [],\n },\n },\n};\n\nconst parserByRatingType = {\n [ratingTypes.CREDIT_RATING]: creditRatingPortfoliosToTableParser,\n [ratingTypes.CREDIT_REVIEW]: creditReviewPortfoliosToTableParser,\n [ratingTypes.ESG_IMPACT]: esgPortfoliosToTableParser,\n [ratingTypes.SENTIMENT]: esgSentimentToTableParser,\n};\n\nexport function dossier(state = initialState, action) {\n const { payload, type } = action;\n\n switch (type) {\n case REFRESH_DOSSIERS: {\n const { ratingType, reason } = payload;\n\n return produce(state, (draftState) => {\n const dossiers = state.byRatingType[ratingType];\n draftState.error = null; // eslint-disable-line no-param-reassign\n // eslint-disable-next-line no-param-reassign\n draftState.byRatingType[ratingType] = {\n ...dossiers,\n isPending: true,\n shouldRefresh: { value: true, reason },\n };\n });\n }\n case GET_DOSSIER:\n return { ...state, isPending: true, items: initialState.items, error: null };\n case GET_DOSSIER_SUCCESS:\n return { ...state, isPending: false, singleDossier: payload.data };\n case GET_DOSSIER_ERROR:\n return { ...state, isPending: false };\n case GET_DOSSIER_ITEMS: {\n const { itemType } = payload;\n\n return {\n ...state,\n error: null,\n items: {\n ...state.items,\n [itemType]: {\n ...state.items[itemType],\n isPending: true,\n },\n },\n };\n }\n case GET_DOSSIER_ITEMS_SUCCESS: {\n const { itemType, ratingType } = payload;\n return {\n ...state,\n items: {\n ...state.items,\n [itemType]: {\n ...state.items[itemType],\n isPending: false,\n data: dossierItemsToTableParser(payload.data, itemType, ratingType),\n total: payload.total,\n },\n },\n };\n }\n case GET_DOSSIER_ITEMS_ERROR:\n return { ...state, items: initialState.items };\n case GET_DOSSIERS: {\n const { ratingType } = payload;\n\n return produce(state, (draftState) => {\n const dossiers = state.byRatingType[ratingType];\n draftState.error = null; // eslint-disable-line no-param-reassign\n // eslint-disable-next-line no-param-reassign\n draftState.byRatingType[ratingType] = {\n ...dossiers,\n isPending: true,\n };\n });\n }\n case GET_DOSSIERS_SUCCESS: {\n const { response, ratingType } = payload;\n\n return produce(state, (draftState) => {\n const dossiers = state.byRatingType[ratingType];\n const dossiersParser = parserByRatingType[ratingType];\n // eslint-disable-next-line no-param-reassign\n draftState.byRatingType[ratingType] = {\n ...dossiers,\n isPending: false,\n shouldRefresh: initialState.shouldRefresh,\n data: dossiersParser(response.data),\n total: response.total,\n };\n });\n }\n case GET_DOSSIERS_ERROR: {\n const { ratingType } = payload;\n\n return produce(state, (draftState) => {\n const dossiers = state.byRatingType[ratingType];\n // eslint-disable-next-line no-param-reassign\n draftState.byRatingType[ratingType] = {\n ...dossiers,\n isPending: false,\n shouldRefresh: initialState.shouldRefresh,\n };\n });\n }\n case CREATE_DOSSIER:\n return { ...state, isModalPending: true, error: null };\n case CREATE_DOSSIER_SUCCESS:\n return {\n ...state,\n isModalPending: false,\n };\n case CREATE_DOSSIER_ERROR:\n return {\n ...state,\n isModalPending: false,\n error: { type: payload.errorType, message: payload.errorMessage },\n };\n case DELETE_DOSSIER:\n return { ...state, isPending: true, error: null };\n case DELETE_DOSSIER_SUCCESS:\n return { ...state, isPending: false };\n case DELETE_DOSSIER_ERROR:\n return { ...state, isPending: false };\n case TOGGLE_DOSSIER_WATCHED_STATE:\n return { ...state, isPending: true };\n case TOGGLE_DOSSIER_WATCHED_STATE_FINISHED:\n return { ...state, isPending: false };\n case REQUEST_SIG_ENTITY_RATING_SUCCESS: {\n const updatedItems = payload;\n\n return produce(state, (draftState) => {\n // Toggle flag (last value in array) which is responsible for showing the rating for particular entity row\n // eslint-disable-next-line no-param-reassign\n draftState.items.issuers.data = state.items.issuers.data.map((item) => {\n const easyNumber = item[0];\n const updatedItem = updatedItems.find((company) => company.easyNumber === easyNumber);\n\n if (updatedItem) return creditReviewToTableParser(updatedItem);\n\n return item;\n });\n });\n }\n default:\n return state;\n }\n}\n","import { parseIndustries, parseEntitiesIndustries } from 'shared/parsers';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport {\n GET_INDUSTRIES,\n GET_INDUSTRIES_SUCCESS,\n GET_INDUSTRIES_ERROR,\n} from './industries/industriesActions';\nimport {\n REQUEST_RELATED_ENTITIES,\n REQUEST_RELATED_ENTITIES_SUCCESS,\n REQUEST_RELATED_ENTITIES_ERROR,\n} from './relatedEntities/relatedEntitiesActions';\nimport {\n REQUEST_CREDIT_REVIEW_LEVELS,\n REQUEST_CREDIT_REVIEW_LEVELS_SUCCESS,\n REQUEST_CREDIT_REVIEW_LEVELS_ERROR,\n} from './creditReviewLevels/creditReviewLevelsActions';\nimport { VISIT_RATING_TYPE } from './lastVisited/lastVisitedActions';\nimport {\n GET_RATING_COVERAGE,\n GET_RATING_COVERAGE_SUCCESS,\n GET_RATING_COVERAGE_ERROR,\n} from './ratingCoverage/ratingCoverageAction';\nimport {\n GET_ESG_COVERAGE,\n GET_ESG_COVERAGE_SUCCESS,\n GET_ESG_COVERAGE_ERROR,\n} from './esgCoverage/esgCoverageAction';\nimport { GET_REGIONS, GET_REGIONS_SUCCESS, GET_REGIONS_ERROR } from './regions/regionsAction';\nimport {\n REQUEST_QUESTIONNAIRE_AVAILABILITY_SUCCESS,\n REQUEST_QUESTIONNAIRE_AVAILABILITY_ERROR,\n} from './questionnaire/questionnaireActions';\nimport {\n REQUEST_CREDIT_REVIEW_SPECS,\n REQUEST_CREDIT_REVIEW_SPECS_ERROR,\n REQUEST_CREDIT_REVIEW_SPECS_SUCCESS,\n} from './creditReviewSpecs/creditReviewSpecsActions';\n\nconst initialState = {\n industries: {\n isPending: false,\n data: [],\n },\n relatedEntities: {\n isPending: false,\n data: [],\n },\n relatedIndustries: [],\n creditReviewSpecs: {\n isPending: false,\n data: null,\n },\n creditReviewLevels: {\n isPending: false,\n data: null,\n },\n lastVisited: {\n ratingType: ratingTypes.CREDIT_RATING,\n },\n ratingCoverage: {\n isPending: false,\n data: [],\n },\n esgCoverage: {\n isPending: false,\n data: [],\n },\n regions: {\n isPending: false,\n data: [],\n },\n questionnaire: {\n show: false,\n },\n};\n\nexport function shared(state = initialState, action) {\n const { payload, type } = action;\n\n switch (type) {\n case GET_INDUSTRIES:\n return { ...state, industries: { ...state.industries, isPending: true } };\n case GET_INDUSTRIES_SUCCESS:\n return { ...state, industries: { data: parseIndustries(payload), isPending: false } };\n case GET_INDUSTRIES_ERROR:\n return { ...state, industries: { ...state.industries, isPending: false } };\n case REQUEST_RELATED_ENTITIES:\n return { ...state, relatedEntities: { ...state.relatedEntities, isPending: true } };\n case REQUEST_RELATED_ENTITIES_SUCCESS: {\n const { data } = payload;\n return {\n ...state,\n relatedEntities: { data, isPending: false },\n relatedIndustries: parseEntitiesIndustries(data), // TODO: parse like this [{value, label}] needed state.industry and filter by name\n };\n }\n case REQUEST_RELATED_ENTITIES_ERROR:\n return { ...state, relatedEntities: { ...state.relatedEntities, isPending: false } };\n case REQUEST_CREDIT_REVIEW_LEVELS:\n return { ...state, creditReviewLevels: { ...state.creditReviewLevels, isPending: true } };\n case REQUEST_CREDIT_REVIEW_LEVELS_SUCCESS:\n return { ...state, creditReviewLevels: { data: payload, isPending: false } };\n case REQUEST_CREDIT_REVIEW_LEVELS_ERROR:\n return { ...state, creditReviewLevels: { ...state.creditReviewLevels, isPending: false } };\n case REQUEST_CREDIT_REVIEW_SPECS:\n return { ...state, creditReviewSpecs: { ...state.creditReviewSpecs, isPending: true } };\n case REQUEST_CREDIT_REVIEW_SPECS_SUCCESS:\n return { ...state, creditReviewSpecs: { data: payload, isPending: false } };\n case REQUEST_CREDIT_REVIEW_SPECS_ERROR:\n return { ...state, creditReviewSpecs: { ...state.creditReviewSpecs, isPending: false } };\n case VISIT_RATING_TYPE:\n return { ...state, lastVisited: { ...state.lastVisited, ratingType: payload.ratingType } };\n case GET_RATING_COVERAGE:\n return { ...state, ratingCoverage: { ...state.ratingCoverage, isPending: true } };\n case GET_RATING_COVERAGE_SUCCESS:\n return { ...state, ratingCoverage: { data: payload, isPending: false } };\n case GET_RATING_COVERAGE_ERROR:\n return { ...state, ratingCoverage: { ...state.ratingCoverage, isPending: false } };\n case GET_ESG_COVERAGE:\n return { ...state, esgCoverage: { ...state.esgCoverage, isPending: true } };\n case GET_ESG_COVERAGE_SUCCESS:\n return { ...state, esgCoverage: { data: payload, isPending: false } };\n case GET_ESG_COVERAGE_ERROR:\n return { ...state, esgCoverage: { ...state.esgCoverage, isPending: false } };\n case GET_REGIONS:\n return { ...state, regions: { ...state.regions, isPending: true } };\n case GET_REGIONS_SUCCESS:\n return { ...state, regions: { data: payload, isPending: false } };\n case GET_REGIONS_ERROR:\n return { ...state, regions: { ...state.regions, isPending: false } };\n case REQUEST_QUESTIONNAIRE_AVAILABILITY_SUCCESS:\n return { ...state, questionnaire: { ...state.questionnaire, show: payload.show } };\n case REQUEST_QUESTIONNAIRE_AVAILABILITY_ERROR:\n return { ...state, questionnaire: { ...state.questionnaire, show: false } };\n default:\n return state;\n }\n}\n","import { investorRelationsToTableParser } from 'shared/parsers';\n\nimport { GET_INVESTOR_RELATIONS_FINISHED, GET_INVESTOR_RELATIONS } from './investorActions';\n\nconst initialState = {\n isPending: false,\n relations: [],\n shouldRefresh: { value: false, reason: null },\n total: 0,\n};\n\nexport function investor(state = initialState, action) {\n const { payload, type } = action;\n\n switch (type) {\n case GET_INVESTOR_RELATIONS:\n return { ...state, isPending: true, shouldRefresh: initialState.shouldRefresh };\n case GET_INVESTOR_RELATIONS_FINISHED: {\n const parsedData = investorRelationsToTableParser(payload);\n return { ...state, isPending: false, relations: parsedData, total: payload.length };\n }\n default:\n return state;\n }\n}\n","import { cofaceContractStates } from 'shared/constants/creditReview/cofaceContractStates';\nimport {\n GET_CREDIT_REVIEW_CONTRACT_DATA_SUCCESS,\n GET_CREDIT_REVIEW_CONTRACT_DATA_ERROR,\n} from './creditReviewActions';\n\nconst initialState = {\n isPending: true,\n cofaceRequestPermission: false,\n cofaceRequestsAllowed: 0,\n cofaceContractState: cofaceContractStates.inactive,\n};\n\nexport function creditReview(state = initialState, action) {\n const { payload, type } = action;\n const { cofaceRequestPermission, cofaceRequestsAllowed, cofaceTotalAmount, cofaceContractState } =\n payload || {};\n\n switch (type) {\n case GET_CREDIT_REVIEW_CONTRACT_DATA_SUCCESS:\n return {\n ...state,\n isPending: false,\n cofaceRequestPermission,\n cofaceRequestsAllowed,\n cofaceTotalAmount,\n cofaceContractState,\n };\n case GET_CREDIT_REVIEW_CONTRACT_DATA_ERROR:\n return { ...state, isPending: false };\n default:\n return state;\n }\n}\n","import produce from 'immer';\n\nimport { shopProductsSortOptions } from '../shared/constants/shopProductsSortOptions';\nimport { subscriptionStatuses } from '../shared/constants/shopSubscriptionStatuses';\n\nimport {\n SET_SHOP_FILTERS,\n RESET_SHOP_FILTERS,\n SET_SHOP_SORTING,\n FETCH_SHOP_PRODUCTS,\n FETCH_SHOP_PRODUCTS_SUCCESS,\n FETCH_SHOP_PRODUCTS_ERROR,\n CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_SUCCESS,\n CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_ERROR,\n ADD_SHOP_PRODUCTS_TO_BASKET_SUCCESS,\n REMOVE_SHOP_PRODUCTS_FROM_BASKET_SUCCESS,\n FETCH_SHOP_HISTORY,\n FETCH_SHOP_HISTORY_SUCCESS,\n FETCH_SHOP_HISTORY_ERROR,\n SET_SHOP_ACIVE_VIEW,\n FETCH_SHOP_PRODUCT_PROPERTIES_SUCCESS,\n FETCH_SHOP_PRODUCT_PROPERTIES_ERROR,\n FETCH_SHOP_PRODUCT_PROPERTIES,\n START_SHOP_PRODUCT_FREE_TRIAL_ERROR,\n START_SHOP_PRODUCT_FREE_TRIAL_SUCCESS,\n START_SHOP_PRODUCT_FREE_SUBSCRIPTION_ERROR,\n START_SHOP_PRODUCT_FREE_SUBSCRIPTION_SUCCESS,\n} from './shopActions';\n\nconst initialState = {\n filters: {\n regions: '',\n segments: '',\n categories: '',\n },\n sortBy: shopProductsSortOptions.name,\n products: {\n isPending: false,\n data: [],\n },\n history: {\n isPending: false,\n purchases: [],\n favorites: [],\n basket: {\n data: [],\n lastUpdate: null,\n },\n },\n activeView: null,\n properties: {\n isPending: true,\n data: {\n categories: [],\n regions: [],\n productLines: [],\n segments: [],\n sources: [],\n industries: [],\n tiers: [],\n tools: [],\n durations: [],\n cancelPeriods: [],\n units: [],\n },\n },\n};\n\nexport function shop(state = initialState, action) {\n const { payload, type } = action;\n\n switch (type) {\n case SET_SHOP_FILTERS:\n return { ...state, filters: payload.filters };\n case RESET_SHOP_FILTERS:\n return { ...state, filters: initialState.filters };\n case SET_SHOP_SORTING:\n return { ...state, sortBy: payload.sortBy };\n case FETCH_SHOP_PRODUCTS:\n return { ...state, products: { ...state.products, isPending: true } };\n case FETCH_SHOP_PRODUCTS_SUCCESS:\n return { ...state, products: { data: payload.products.data, isPending: false } };\n case FETCH_SHOP_PRODUCTS_ERROR:\n return { ...state, products: { data: [], isPending: false } };\n case CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_SUCCESS: {\n return produce(state, draftState => {\n const { ids: productIds, isFavorite } = payload;\n\n // eslint-disable-next-line no-param-reassign\n draftState.history.favorites = isFavorite\n ? [...state.history.favorites, ...productIds]\n : state.history.favorites.filter(id => !productIds.includes(id));\n\n return draftState;\n });\n }\n case FETCH_SHOP_HISTORY:\n return { ...state, history: { ...state.history, isPending: true } };\n case FETCH_SHOP_HISTORY_SUCCESS:\n return { ...state, history: { ...payload.history, isPending: false } };\n case FETCH_SHOP_HISTORY_ERROR:\n return { ...state, history: { ...state.history, isPending: true } };\n case ADD_SHOP_PRODUCTS_TO_BASKET_SUCCESS:\n return produce(state, draftState => {\n const basketItems = state.history.basket.data;\n // eslint-disable-next-line no-param-reassign\n draftState.history.basket = {\n data: [...basketItems, ...payload.ids.filter(id => !basketItems.includes(id))],\n lastUpdate: new Date(),\n };\n\n return draftState;\n });\n case REMOVE_SHOP_PRODUCTS_FROM_BASKET_SUCCESS:\n return produce(state, draftState => {\n // eslint-disable-next-line no-param-reassign\n draftState.history.basket = {\n data: state.history.basket.data.filter(id => !payload.ids.includes(id)),\n lastUpdate: new Date(),\n };\n\n return draftState;\n });\n case SET_SHOP_ACIVE_VIEW:\n return { ...state, activeView: payload.view };\n case FETCH_SHOP_PRODUCT_PROPERTIES:\n return { ...state, properties: { ...state.properties, isPending: true } };\n case FETCH_SHOP_PRODUCT_PROPERTIES_SUCCESS:\n return { ...state, properties: { data: payload.properties, isPending: false } };\n case FETCH_SHOP_PRODUCT_PROPERTIES_ERROR:\n return { ...state, properties: { data: [], isPending: false } };\n case START_SHOP_PRODUCT_FREE_SUBSCRIPTION_SUCCESS: {\n return produce(state, draftState => {\n const { id } = payload;\n\n // eslint-disable-next-line no-param-reassign\n draftState.products.data = state.products.data.map(product =>\n product.id === id\n ? {\n ...product,\n purchased: true,\n status: subscriptionStatuses.ACTIVE,\n }\n : product,\n );\n\n return draftState;\n });\n }\n case START_SHOP_PRODUCT_FREE_TRIAL_SUCCESS: {\n return produce(state, draftState => {\n const { id } = payload;\n\n // eslint-disable-next-line no-param-reassign\n draftState.products.data = state.products.data.map(product =>\n product.id === id\n ? {\n ...product,\n purchased: true,\n status: subscriptionStatuses.ACTIVE_TRIAL,\n }\n : product,\n );\n\n return draftState;\n });\n }\n case CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_ERROR:\n case START_SHOP_PRODUCT_FREE_SUBSCRIPTION_ERROR:\n case START_SHOP_PRODUCT_FREE_TRIAL_ERROR:\n default:\n return state;\n }\n}\n","import { EventsAction, EventsActionType, EventsStore } from '../types/eventsTypes';\n\nconst initialState: EventsStore = {\n events: {\n isPending: false,\n data: [],\n },\n properties: {\n isPending: true,\n data: {},\n },\n filters: {\n category: '',\n timeline: '',\n favourites: false,\n },\n sortDesc: false,\n eventsDetails: {},\n eventTitles: {\n isPending: false,\n data: [],\n },\n eventSessions: {},\n sessionsDetails: {},\n};\n\nexport const events = (state = initialState, action: EventsAction): EventsStore => {\n const { payload, type } = action;\n\n switch (type) {\n /* Events fetching */\n case EventsActionType.FETCH_EVENTS:\n return { ...state, events: { ...state.events, isPending: true } };\n case EventsActionType.FETCH_EVENTS_SUCCESS:\n return { ...state, events: { data: payload.events.data, isPending: false } };\n case EventsActionType.FETCH_EVENTS_ERROR:\n return { ...state, events: { data: [], isPending: false } };\n\n /* Event properties */\n case EventsActionType.FETCH_EVENT_PROPERTIES:\n return { ...state, properties: { ...state.properties, isPending: true } };\n case EventsActionType.FETCH_EVENT_PROPERTIES_SUCCESS:\n return { ...state, properties: { data: payload.properties, isPending: false } };\n case EventsActionType.FETCH_EVENT_PROPERTIES_ERROR:\n return { ...state, properties: { data: {}, isPending: false } };\n\n /* Event details fetching */\n case EventsActionType.FETCH_EVENT_DETAILS:\n return {\n ...state,\n eventsDetails: { ...state.eventsDetails, [payload]: { isPending: true } },\n };\n case EventsActionType.FETCH_EVENT_DETAILS_SUCCESS:\n return {\n ...state,\n eventsDetails: {\n ...state.eventsDetails,\n [payload.id]: { isPending: false, data: payload.data },\n },\n };\n case EventsActionType.FETCH_EVENT_DETAILS_ERROR:\n return {\n ...state,\n eventsDetails: { ...state.eventsDetails, [payload]: { isPending: false, data: {} } },\n };\n\n /* Event titles fetching */\n case EventsActionType.FETCH_EVENT_TITLES:\n return { ...state, eventTitles: { ...state.eventTitles, isPending: true } };\n case EventsActionType.FETCH_EVENT_TITLES_SUCCESS:\n return { ...state, eventTitles: { data: payload, isPending: false } };\n case EventsActionType.FETCH_EVENT_TITLES_ERROR:\n return { ...state, eventTitles: { data: [], isPending: false } };\n\n /* Event sessions fetching */\n case EventsActionType.FETCH_EVENT_SESSIONS:\n return {\n ...state,\n eventSessions: { ...state.eventSessions, [payload]: { isPending: true } },\n };\n case EventsActionType.FETCH_EVENT_SESSIONS_SUCCESS:\n return {\n ...state,\n eventSessions: {\n ...state.eventSessions,\n [payload.id]: {\n isPending: false,\n data: payload.data.map((item: any) => ({\n id: item.id,\n dateTime: new Date(item.attributes.estimated_started_at * 1000),\n })),\n },\n },\n };\n case EventsActionType.FETCH_EVENT_SESSIONS_ERROR:\n return {\n ...state,\n eventSessions: { ...state.eventSessions, [payload]: { isPending: false, data: {} } },\n };\n\n /* Session details fetching */\n case EventsActionType.FETCH_SESSION_DETAILS:\n return {\n ...state,\n sessionsDetails: { ...state.sessionsDetails, [payload]: { isPending: true } },\n };\n case EventsActionType.FETCH_SESSION_DETAILS_SUCCESS:\n return {\n ...state,\n sessionsDetails: {\n ...state.sessionsDetails,\n [payload.id]: { isPending: false, data: payload.data },\n },\n };\n case EventsActionType.FETCH_SESSION_DETAILS_ERROR:\n return {\n ...state,\n sessionsDetails: { ...state.sessionsDetails, [payload]: { isPending: false, data: {} } },\n };\n\n /* Filtering and sorting */\n case EventsActionType.SET_EVENTS_CATEGORY_FILTER:\n return { ...state, filters: { ...state.filters, category: payload } };\n case EventsActionType.SET_EVENTS_TIMELINE_FILTER:\n return { ...state, filters: { ...state.filters, timeline: payload } };\n case EventsActionType.SET_EVENTS_FAVORITES_FILTER:\n return { ...state, filters: { ...state.filters, favourites: payload } };\n case EventsActionType.SET_EVENTS_SORT_DESC:\n return { ...state, sortDesc: payload };\n\n /* Fallback */\n default:\n return state;\n }\n};\n","import { esgContractStates } from 'shared/constants/esg/esgContractStates';\nimport { GET_ESG_CONTRACT_DATA_SUCCESS, GET_ESG_CONTRACT_DATA_ERROR } from './esgActions';\n\nconst initialState = {\n isPending: true,\n esgRequestPermission: false,\n esgRequestsAllowed: 0,\n esgContractState: esgContractStates.inactive,\n};\n\nexport function esgContract(state = initialState, action: any) {\n const { payload, type } = action;\n const { esgRequestPermission, esgRequestsAllowed, esgTotalAmount, esgContractState } =\n payload || {};\n\n switch (type) {\n case GET_ESG_CONTRACT_DATA_SUCCESS:\n return {\n ...state,\n isPending: false,\n esgRequestPermission,\n esgRequestsAllowed,\n esgTotalAmount,\n esgContractState,\n };\n case GET_ESG_CONTRACT_DATA_ERROR:\n return { ...state, isPending: false };\n default:\n return state;\n }\n}\n","import { getName } from 'country-list';\n\nexport const esgCoverageToTableParser = (data) =>\n data.map(\n ({\n eScore,\n sScore,\n gScore,\n esgScore,\n industryName,\n scopeoneIdentifier,\n scopeOneCompanyName,\n country,\n subscribed,\n }) => {\n const countryName = getName(country) || country;\n\n const esgId = scopeoneIdentifier;\n const requestState = subscribed ? 'DONE_BY_SCOPE' : '';\n const wasPurchased = subscribed;\n const isin = '';\n const requestDate = '';\n const artifactId = '';\n\n return [\n scopeoneIdentifier || esgId,\n [scopeOneCompanyName, requestState],\n countryName || '-',\n industryName || '-',\n [eScore || '-', requestState],\n [sScore || '-', requestState],\n [gScore || '-', requestState],\n [\n {\n id: scopeoneIdentifier,\n isin,\n esgId,\n totalScore: esgScore && typeof esgScore === 'number' ? esgScore.toFixed(1) : '-',\n scopeOneCompanyName,\n wasPurchased,\n },\n requestState,\n requestDate,\n ],\n wasPurchased,\n [scopeoneIdentifier, esgId, artifactId],\n ];\n },\n );\n","import { esgCoverageToTableParser } from 'shared/parsers/esgCoverageToTable/esgCoverageToTableParser';\nimport { GET_ESG_COVERAGE_DATA_SUCCESS, GET_ESG_COVERAGE_DATA_ERROR } from './esgCoverageActions';\n\nconst initialState = {\n total: 0,\n isPending: true,\n error: undefined,\n data: [],\n};\n\nexport function esgCoverage(state = initialState, action) {\n const { payload, type } = action;\n\n switch (type) {\n case GET_ESG_COVERAGE_DATA_SUCCESS:\n return {\n ...state,\n total: payload.count,\n data: esgCoverageToTableParser(payload.results),\n error: undefined,\n isPending: false,\n };\n case GET_ESG_COVERAGE_DATA_ERROR:\n return {\n ...state,\n total: 0,\n data: [],\n error: payload,\n isPending: false,\n };\n default:\n return state;\n }\n}\n","import { combineReducers as reduxCombineReducers } from 'redux';\n\nimport { notificationsCentre } from 'modules/notificationsCentre/store/reducer';\nimport { auth } from './login/loginReducer';\nimport { instrument } from './instrument/instrumentReducer';\nimport { entity } from './entity/entityReducer';\nimport { notifications } from './notifications/notificationsReducer';\nimport { recentUsers } from './recentUsers/recentUsersReducer';\nimport { searchResult } from './searchResult/searchResultReducer';\nimport { announcement } from './announcement/announcementReducer';\nimport { newsFeed } from './newsFeed/newsFeedReducer';\nimport { dossier } from './portfolio/dossierReducer';\nimport { shared } from './shared/sharedReducer';\nimport { investor } from './investor/investorReducer';\nimport { creditReview } from './creditReview/creditReviewReducer';\nimport { shop } from '../modules/shop/store/shopReducer';\nimport { events } from '../modules/events/store/eventsReducer';\nimport { esgContract } from './esg/esgReducer';\nimport { esgCoverage } from './esgCoverage/esgCoverageReducer';\n\nexport const combineReducers = reduxCombineReducers({\n auth,\n instrument,\n entity,\n notifications,\n recentUsers,\n searchResult,\n announcement,\n newsFeed,\n dossier,\n shared,\n investor,\n creditReview,\n shop,\n notificationsCentre,\n events,\n esgContract,\n esgCoverage,\n});\n","import { ADD_NOTIFICATION, REMOVE_NOTIFICATION } from './notificationsActions';\n\nexport function notifications (state = [], action) {\n const { payload, type } = action;\n\n switch (type) {\n case ADD_NOTIFICATION:\n return [payload, ...state];\n\n case REMOVE_NOTIFICATION:\n return state.filter(notification => notification.id !== payload);\n\n default:\n return state;\n }\n}","export const SET_UNREAD = 'SET_UNREAD';\nexport const SET_CURRENT_CATEGORY = 'SET_CURRENT_CATEGORY';\nexport const SET_CURRENT_FILTER = 'SET_CURRENT_FILTER';\nexport const RESET_UNREAD_COUNTER = 'RESET_UNREAD_COUNTER';\nexport const GET_USER_NOTIFICATIONS = 'GET_USER_NOTIFICATIONS';\nexport const GET_USER_NOTIFICATIONS_SUCCESS = 'GET_USER_NOTIFICATIONS_SUCCESS';\nexport const GET_USER_NOTIFICATIONS_ERROR = 'GET_USER_NOTIFICATIONS_ERROR';\nexport const PUT_FAVOURITE_USER_NOTIFICATION = 'PUT_FAVOURITE_USER_NOTIFICATION';\nexport const PUT_FAVOURITE_USER_NOTIFICATION_SUCCESS = 'PUT_FAVOURITE_USER_NOTIFICATION_SUCCESS';\nexport const PUT_FAVOURITE_USER_NOTIFICATION_ERROR = 'PUT_FAVOURITE_USER_NOTIFICATION_ERROR';\nexport const INCREASE_PAGE = 'INCREASE_PAGE';\nexport const DISABLE_LOAD_MORE = 'DISABLE_LOAD_MORE';\nexport const CLEAR_NOTIFICATIONS = 'CLEAR_NOTIFICATIONS';\nexport const SET_IS_OPEN = 'SET_IS_OPEN';\nexport const PUSH_NOTIFICATION = 'PUSH_NOTIFICATION';\n\nexport const setUnreadAction = payload => ({\n type: SET_UNREAD,\n payload,\n});\n\nexport const setCurrentCategoryAction = id => ({\n type: SET_CURRENT_CATEGORY,\n payload: {\n id,\n },\n});\n\nexport const setCurrentFilterAction = id => ({\n type: SET_CURRENT_FILTER,\n payload: {\n id,\n },\n});\n\nexport const resetUnreadCounterAction = () => ({\n type: RESET_UNREAD_COUNTER,\n});\n\nexport const getUserNotificationsAction = ({ page, filter, category, limit }) => ({\n type: GET_USER_NOTIFICATIONS,\n payload: {\n page,\n filter,\n category,\n limit,\n },\n});\n\nexport const putFavouriteUserNotificationAction = ({ id, isFavourite }) => ({\n type: PUT_FAVOURITE_USER_NOTIFICATION,\n payload: {\n id,\n isFavourite,\n },\n});\n\nexport const increasePage = page => ({\n type: INCREASE_PAGE,\n payload: {\n page,\n },\n});\n\nexport const disableLoadMore = () => ({\n type: DISABLE_LOAD_MORE,\n});\n\nexport const clearNotifications = () => ({\n type: CLEAR_NOTIFICATIONS,\n});\n\nexport const setIsOpen = value => ({\n type: SET_IS_OPEN,\n payload: {\n value,\n },\n});\n\nexport const pushNotification = data => ({\n type: PUSH_NOTIFICATION,\n payload: {\n data,\n },\n});\n","import { call, put } from 'redux-saga/effects';\n\nimport {\n GET_USER_NOTIFICATIONS_SUCCESS,\n GET_USER_NOTIFICATIONS_ERROR,\n PUT_FAVOURITE_USER_NOTIFICATION_SUCCESS,\n PUT_FAVOURITE_USER_NOTIFICATION_ERROR,\n DISABLE_LOAD_MORE,\n} from './actions';\nimport {\n fetchUserNotifications,\n updateNotification,\n fetchUserNotificationsWhatsNew,\n updateNotifications,\n} from '../services/notificationsService';\nimport { categoriesIds } from '../constants/categories';\nimport { getUnreadIds } from '../utils';\n\nconst getCategoryFetchFunction = category => {\n switch (category) {\n case categoriesIds.yourNotifications:\n return fetchUserNotifications;\n case categoriesIds.whatsNew:\n return fetchUserNotificationsWhatsNew;\n case categoriesIds.yourDownloads:\n return fetchUserNotifications;\n case categoriesIds.uploada:\n return fetchUserNotifications;\n default:\n return undefined;\n }\n};\n\nexport function* fetchUserNotificationsSaga({ payload }) {\n try {\n const { filter, category, page, limit } = payload;\n const baseParams = {\n page,\n limit,\n filter: JSON.stringify(filter),\n };\n\n let response = [];\n try {\n response = yield call(getCategoryFetchFunction(category), baseParams);\n } catch (err) {\n response = err;\n }\n\n if (response.length < limit) {\n yield put({ type: DISABLE_LOAD_MORE });\n }\n\n yield put({ type: GET_USER_NOTIFICATIONS_SUCCESS, payload: response });\n\n const unreadIds = getUnreadIds(response);\n\n if (unreadIds.length) {\n yield call(updateNotifications, { data: unreadIds });\n }\n } catch (error) {\n yield put({ type: GET_USER_NOTIFICATIONS_ERROR });\n }\n}\n\nexport function* putFavouriteUserNotificationSaga({ payload }) {\n try {\n const { id, isFavourite } = payload;\n\n yield call(updateNotification, { id, data: { is_favourite: isFavourite } });\n yield put({ type: PUT_FAVOURITE_USER_NOTIFICATION_SUCCESS, payload });\n } catch (error) {\n yield put({ type: PUT_FAVOURITE_USER_NOTIFICATION_ERROR, payload });\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport { GET_USER_NOTIFICATIONS, PUT_FAVOURITE_USER_NOTIFICATION } from './actions';\nimport { fetchUserNotificationsSaga, putFavouriteUserNotificationSaga } from './saga';\n\nexport function* notificationsCentreWatchers() {\n yield takeLatest(GET_USER_NOTIFICATIONS, fetchUserNotificationsSaga);\n yield takeLatest(PUT_FAVOURITE_USER_NOTIFICATION, putFavouriteUserNotificationSaga);\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { GET_CREDIT_REVIEW_CONTRACT_DATA } from 'store/creditReview/creditReviewActions';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nimport {\n fetchProducts,\n changeProductsFavoriteStatus,\n fetchShopHistory,\n addProductsToBasket,\n removeProductsFromBasket,\n fetchProductProperties,\n startFreeTrial,\n startFreeSubscription,\n fetchShopPermissions,\n} from '../services';\nimport {\n FETCH_SHOP_PRODUCTS_SUCCESS,\n FETCH_SHOP_PRODUCTS_ERROR,\n CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_SUCCESS,\n CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_ERROR,\n FETCH_SHOP_HISTORY_SUCCESS,\n FETCH_SHOP_HISTORY_ERROR,\n ADD_SHOP_PRODUCTS_TO_BASKET_SUCCESS,\n ADD_SHOP_PRODUCTS_TO_BASKET_ERROR,\n REMOVE_SHOP_PRODUCTS_FROM_BASKET_SUCCESS,\n REMOVE_SHOP_PRODUCTS_FROM_BASKET_ERROR,\n FETCH_SHOP_PRODUCT_PROPERTIES_SUCCESS,\n FETCH_SHOP_PRODUCT_PROPERTIES_ERROR,\n START_SHOP_PRODUCT_FREE_TRIAL_ERROR,\n START_SHOP_PRODUCT_FREE_TRIAL_SUCCESS,\n START_SHOP_PRODUCT_FREE_SUBSCRIPTION_SUCCESS,\n START_SHOP_PRODUCT_FREE_SUBSCRIPTION_ERROR,\n FETCH_SHOP_PERMISSIONS_SUCCESS,\n FETCH_SHOP_HISTORY,\n} from './shopActions';\n\nexport function* fetchShopProductsSaga() {\n try {\n const response = yield call(fetchProducts);\n yield put({ type: FETCH_SHOP_PRODUCTS_SUCCESS, payload: { products: response } });\n } catch (response) {\n yield put({ type: FETCH_SHOP_PRODUCTS_ERROR, payload: response });\n }\n}\n\nexport function* changeShopProductsFavoriteStatusSaga({ payload }) {\n try {\n yield call(changeProductsFavoriteStatus, payload);\n yield put({ type: CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_SUCCESS, payload });\n } catch (response) {\n yield put({ type: CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_ERROR });\n throw new Error(response);\n }\n}\n\nexport function* fetchShopHistorySaga() {\n try {\n const response = yield call(fetchShopHistory);\n yield put({ type: FETCH_SHOP_HISTORY_SUCCESS, payload: { history: response.data } });\n } catch (response) {\n yield put({ type: FETCH_SHOP_HISTORY_ERROR, payload: response });\n }\n}\n\nexport function* addShopProductsToBasketSaga({ payload }) {\n try {\n yield call(addProductsToBasket, payload);\n yield put({ type: ADD_SHOP_PRODUCTS_TO_BASKET_SUCCESS, payload });\n } catch (response) {\n yield put({ type: ADD_SHOP_PRODUCTS_TO_BASKET_ERROR });\n throw new Error(response);\n }\n}\n\nexport function* removeShopProductsFromBasketSaga({ payload }) {\n try {\n yield call(removeProductsFromBasket, payload);\n yield put({ type: REMOVE_SHOP_PRODUCTS_FROM_BASKET_SUCCESS, payload });\n } catch (response) {\n yield put({ type: REMOVE_SHOP_PRODUCTS_FROM_BASKET_ERROR });\n throw new Error(response);\n }\n}\n\nexport function* fetchShopProductsPropertiesSaga() {\n try {\n const response = yield call(fetchProductProperties);\n yield put({\n type: FETCH_SHOP_PRODUCT_PROPERTIES_SUCCESS,\n payload: { properties: response.data },\n });\n } catch (response) {\n yield put({ type: FETCH_SHOP_PRODUCT_PROPERTIES_ERROR, payload: response });\n }\n}\n\nexport function* startShopProductFreeTrialSaga({ payload }) {\n try {\n yield call(startFreeTrial, { products: [payload.id] });\n yield put({ type: START_SHOP_PRODUCT_FREE_TRIAL_SUCCESS, payload });\n yield put(\n addNotificationAction({\n message: 'Free trial successfully started.',\n variant: 'success',\n }),\n );\n yield put({ type: FETCH_SHOP_HISTORY });\n\n // FIXME: Make sure that it only runs for products related to Credit Review.\n // At the moment it is possible only to detect this by product id, but it would\n // require a predefined list of products which would have to be updated when\n // new product is introduced.\n yield put({ type: GET_CREDIT_REVIEW_CONTRACT_DATA });\n } catch (response) {\n yield put({ type: START_SHOP_PRODUCT_FREE_TRIAL_ERROR });\n yield put(\n addNotificationAction({\n message: 'Error starting free trial.',\n variant: 'error',\n }),\n );\n throw new Error(response);\n }\n}\n\nexport function* startShopProductFreeSubscriptionSaga({ payload }) {\n try {\n yield call(startFreeSubscription, { products: [payload.id] });\n yield put({ type: START_SHOP_PRODUCT_FREE_SUBSCRIPTION_SUCCESS, payload });\n yield put(\n addNotificationAction({\n message: 'Free subscription successfully started.',\n variant: 'success',\n }),\n );\n yield put({ type: FETCH_SHOP_HISTORY });\n } catch (response) {\n yield put({ type: START_SHOP_PRODUCT_FREE_SUBSCRIPTION_ERROR });\n yield put(\n addNotificationAction({\n message: 'Error starting free subscription.',\n variant: 'error',\n }),\n );\n throw new Error(response);\n }\n}\n\nexport function* fetchShopPermissionsSaga() {\n try {\n const response = yield call(fetchShopPermissions);\n\n yield put({\n type: FETCH_SHOP_PERMISSIONS_SUCCESS,\n payload: response,\n });\n } catch (response) {\n yield put({ type: FETCH_SHOP_PRODUCTS_ERROR, payload: response });\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport {\n FETCH_SHOP_PRODUCTS,\n CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS,\n ADD_SHOP_PRODUCTS_TO_BASKET,\n REMOVE_SHOP_PRODUCTS_FROM_BASKET,\n FETCH_SHOP_HISTORY,\n FETCH_SHOP_PRODUCT_PROPERTIES,\n START_SHOP_PRODUCT_FREE_TRIAL,\n START_SHOP_PRODUCT_FREE_SUBSCRIPTION,\n FETCH_SHOP_PERMISSIONS,\n} from './shopActions';\nimport {\n fetchShopProductsSaga,\n changeShopProductsFavoriteStatusSaga,\n addShopProductsToBasketSaga,\n removeShopProductsFromBasketSaga,\n fetchShopHistorySaga,\n fetchShopProductsPropertiesSaga,\n startShopProductFreeTrialSaga,\n startShopProductFreeSubscriptionSaga,\n fetchShopPermissionsSaga,\n} from './shopSaga';\n\nexport function* shopWatchers() {\n yield takeLatest(FETCH_SHOP_PRODUCTS, fetchShopProductsSaga);\n yield takeLatest(CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS, changeShopProductsFavoriteStatusSaga);\n yield takeLatest(FETCH_SHOP_HISTORY, fetchShopHistorySaga);\n yield takeLatest(ADD_SHOP_PRODUCTS_TO_BASKET, addShopProductsToBasketSaga);\n yield takeLatest(REMOVE_SHOP_PRODUCTS_FROM_BASKET, removeShopProductsFromBasketSaga);\n yield takeLatest(FETCH_SHOP_PRODUCT_PROPERTIES, fetchShopProductsPropertiesSaga);\n yield takeLatest(START_SHOP_PRODUCT_FREE_TRIAL, startShopProductFreeTrialSaga);\n yield takeLatest(START_SHOP_PRODUCT_FREE_SUBSCRIPTION, startShopProductFreeSubscriptionSaga);\n yield takeLatest(FETCH_SHOP_PERMISSIONS, fetchShopPermissionsSaga);\n}\n","import { all, call, put, take } from 'redux-saga/effects';\n\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nimport {\n fetchInstrument,\n postOrder,\n fetchInstrumentDocuments,\n fetchInstrumentProducts,\n fetchArtifacts,\n} from 'services';\n\nimport {\n GET_INSTRUMENT_SUCCESS,\n GET_INSTRUMENT_ERROR,\n GET_INSTRUMENT_DOCUMENTS_SUCCESS,\n GET_INSTRUMENT_DOCUMENTS_ERROR,\n GET_INSTRUMENT_PRODUCTS_SUCCESS,\n GET_INSTRUMENT_PRODUCTS_ERROR,\n GET_INSTRUMENT_RATING_NEWS_SUCCESS,\n GET_INSTRUMENT_RATING_NEWS_ERROR,\n GET_INSTRUMENT_RESEARCH_SUCCESS,\n GET_INSTRUMENT_RESEARCH_ERROR,\n REQUEST_INSTRUMENT_RATING_SUCCESS,\n REQUEST_INSTRUMENT_RATING_ERROR,\n REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_SUCCESS,\n REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_ERROR,\n getInstrumentDocumentsAction,\n getInstrumentProductsAction,\n requestInstrumentRatingAction,\n} from './instrumentActions';\n\nexport function* fetchInstrumentSaga({ payload }) {\n try {\n const response = yield call(fetchInstrument, payload);\n yield put({ type: GET_INSTRUMENT_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_INSTRUMENT_ERROR, payload: response });\n }\n}\n\nexport function* fetchInstrumentDocumentsSaga({ payload }) {\n try {\n const response = yield call(fetchInstrumentDocuments, payload);\n yield put({ type: GET_INSTRUMENT_DOCUMENTS_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_INSTRUMENT_DOCUMENTS_ERROR, payload: response });\n }\n}\n\nexport function* fetchInstrumentProductsSaga({ payload }) {\n try {\n const response = yield call(fetchInstrumentProducts, payload);\n yield put({ type: GET_INSTRUMENT_PRODUCTS_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_INSTRUMENT_PRODUCTS_ERROR, payload: response });\n }\n}\n\nexport function* fetchInstrumentRatingNewsSaga({ payload }) {\n try {\n const response = yield call(fetchArtifacts, payload);\n yield put({ type: GET_INSTRUMENT_RATING_NEWS_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_INSTRUMENT_RATING_NEWS_ERROR, payload: response });\n }\n}\n\nexport function* fetchInstrumentResearchSaga({ payload }) {\n try {\n const response = yield call(fetchArtifacts, payload);\n yield put({ type: GET_INSTRUMENT_RESEARCH_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_INSTRUMENT_RESEARCH_ERROR, payload: response });\n }\n}\n\nexport function* requestInstrumentRatingSaga({ payload }) {\n try {\n yield call(postOrder, payload);\n yield put({ type: REQUEST_INSTRUMENT_RATING_SUCCESS });\n yield put(\n addNotificationAction({\n message: 'Your request was successfully submitted.',\n variant: 'success',\n }),\n );\n } catch (response) {\n yield put({ type: REQUEST_INSTRUMENT_RATING_ERROR, payload: response });\n yield put(\n addNotificationAction({ message: 'Failed to submit the request.', variant: 'error' }),\n );\n }\n}\n\nexport function* requestInstrumentRatingAndFetchData({ payload }) {\n try {\n yield put(requestInstrumentRatingAction(payload));\n yield take(REQUEST_INSTRUMENT_RATING_SUCCESS);\n const { id } = payload;\n\n yield all([\n put(getInstrumentDocumentsAction({ instrumentId: id })),\n put(getInstrumentProductsAction({ instrumentId: id })),\n ]);\n yield all([take(GET_INSTRUMENT_DOCUMENTS_SUCCESS), take(GET_INSTRUMENT_PRODUCTS_SUCCESS)]);\n\n yield put({ type: REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_SUCCESS });\n } catch (response) {\n yield put({ type: REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_ERROR, payload: response });\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport {\n GET_INSTRUMENT,\n GET_INSTRUMENT_DOCUMENTS,\n GET_INSTRUMENT_PRODUCTS,\n GET_INSTRUMENT_RATING_NEWS,\n GET_INSTRUMENT_RESEARCH,\n REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA,\n REQUEST_INSTRUMENT_RATING,\n} from './instrumentActions';\nimport {\n fetchInstrumentSaga,\n fetchInstrumentDocumentsSaga,\n fetchInstrumentProductsSaga,\n fetchInstrumentRatingNewsSaga,\n fetchInstrumentResearchSaga,\n requestInstrumentRatingSaga,\n requestInstrumentRatingAndFetchData,\n} from './instrumentSaga';\n\nexport function* instrumentWatchers() {\n yield takeLatest(GET_INSTRUMENT, fetchInstrumentSaga);\n yield takeLatest(GET_INSTRUMENT_DOCUMENTS, fetchInstrumentDocumentsSaga);\n yield takeLatest(GET_INSTRUMENT_PRODUCTS, fetchInstrumentProductsSaga);\n yield takeLatest(GET_INSTRUMENT_RATING_NEWS, fetchInstrumentRatingNewsSaga);\n yield takeLatest(GET_INSTRUMENT_RESEARCH, fetchInstrumentResearchSaga);\n yield takeLatest(REQUEST_INSTRUMENT_RATING, requestInstrumentRatingSaga);\n yield takeLatest(REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA, requestInstrumentRatingAndFetchData);\n}\n","import { all, call, put, take } from 'redux-saga/effects';\n\nimport {\n fetchEntity,\n postOrder,\n fetchEntityDocuments,\n fetchEntityProducts,\n fetchEntityInstruments,\n fetchArtifacts,\n requestCreditReviewRatings,\n} from 'services';\n\nimport { getCreditReviewContractDataAction } from 'store/creditReview/creditReviewActions';\nimport { creditReviewRequestTooltips } from 'shared/constants/creditReview/creditReviewRequestTooltips';\nimport { cofaceAccessTypes } from 'shared/constants/creditReview/cofaceAccessTypes';\nimport {\n GET_ENTITY_SUCCESS,\n GET_ENTITY_ERROR,\n GET_ENTITY_DOCUMENTS_SUCCESS,\n GET_ENTITY_DOCUMENTS_ERROR,\n GET_ENTITY_PRODUCTS_SUCCESS,\n GET_ENTITY_PRODUCTS_ERROR,\n GET_ENTITY_INSTRUMENTS_SUCCESS,\n GET_ENTITY_INSTRUMENTS_ERROR,\n GET_ENTITY_RATING_NEWS_SUCCESS,\n GET_ENTITY_RATING_NEWS_ERROR,\n GET_ENTITY_RESEARCH_SUCCESS,\n GET_ENTITY_RESEARCH_ERROR,\n REQUEST_ENTITY_RATING_SUCCESS,\n REQUEST_ENTITY_RATING_ERROR,\n REQUEST_ENTITY_RATING_AND_FETCH_DATA_SUCCESS,\n REQUEST_ENTITY_RATING_AND_FETCH_DATA_ERROR,\n requestEntityRatingAction,\n getEntityDocumentsAction,\n getEntityProductsAction,\n REQUEST_SIG_ENTITY_RATING_SUCCESS,\n REQUEST_SIG_ENTITY_RATING_ERROR,\n requestConfirmationChangedAction,\n} from './entityActions';\n\nimport { addNotificationAction } from '../notifications/notificationsActions';\n\nexport function* fetchEntitySaga({ payload }) {\n try {\n const response = yield call(fetchEntity, payload);\n yield put({ type: GET_ENTITY_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_ENTITY_ERROR, payload: response });\n }\n}\n\nexport function* fetchEntityDocumentsSaga({ payload }) {\n try {\n const response = yield call(fetchEntityDocuments, payload);\n yield put({ type: GET_ENTITY_DOCUMENTS_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_ENTITY_DOCUMENTS_ERROR, payload: response });\n }\n}\n\nexport function* fetchEntityProductsSaga({ payload }) {\n try {\n const response = yield call(fetchEntityProducts, payload);\n yield put({ type: GET_ENTITY_PRODUCTS_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_ENTITY_PRODUCTS_ERROR, payload: response });\n }\n}\n\nexport function* fetchEntityInstrumentsSaga({ payload }) {\n try {\n const response = yield call(fetchEntityInstruments, payload);\n yield put({ type: GET_ENTITY_INSTRUMENTS_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_ENTITY_INSTRUMENTS_ERROR, payload: response });\n }\n}\n\nexport function* fetchEntityRatingNewsSaga({ payload }) {\n try {\n const response = yield call(fetchArtifacts, payload);\n yield put({ type: GET_ENTITY_RATING_NEWS_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_ENTITY_RATING_NEWS_ERROR, payload: response });\n }\n}\n\nexport function* fetchEntityResearchSaga({ payload }) {\n try {\n const response = yield call(fetchArtifacts, payload);\n yield put({ type: GET_ENTITY_RESEARCH_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_ENTITY_RESEARCH_ERROR, payload: response });\n }\n}\n\nexport function* requestEntityRatingSaga({ payload }) {\n try {\n yield call(postOrder, payload);\n yield put({ type: REQUEST_ENTITY_RATING_SUCCESS });\n yield put(\n addNotificationAction({\n message: 'Your request was successfully submitted.',\n variant: 'success',\n }),\n );\n } catch (response) {\n yield put({ type: REQUEST_ENTITY_RATING_ERROR, payload: response });\n yield put(\n addNotificationAction({ message: 'Failed to submit the request.', variant: 'error' }),\n );\n }\n}\n\nexport function* requestEntityRatingAndFetchData({ payload }) {\n try {\n // Sends an action that requests and entity rating\n yield put(requestEntityRatingAction(payload));\n yield take(REQUEST_ENTITY_RATING_SUCCESS);\n const { id } = payload;\n\n // If action above succedeed then do two another actions\n yield all([\n // Sends an action that requests Entity's documents\n // Nie powinienem wywoÅ‚ywać tutaj fetchEntityDocumentsSaga w jakiÅ› sposób zamiast robić to tak jak teraz?\n put(getEntityDocumentsAction({ entityId: id })),\n // Sends an action that requests Entity's products\n // Nie powinienem wywoÅ‚ywać tutaj fetchEntityProductsSaga w jakiÅ› sposób zamiast robić to tak jak teraz?\n put(getEntityProductsAction({ entityId: id })),\n ]);\n yield all([take(GET_ENTITY_DOCUMENTS_SUCCESS), take(GET_ENTITY_PRODUCTS_SUCCESS)]);\n\n yield put({ type: REQUEST_ENTITY_RATING_AND_FETCH_DATA_SUCCESS });\n } catch (response) {\n yield put({ type: REQUEST_ENTITY_RATING_AND_FETCH_DATA_ERROR, payload: response });\n }\n}\n\nexport function* requestSigEntityRatingSaga({ payload }) {\n yield put(requestConfirmationChangedAction({ confirmed: false }));\n try {\n const { data } = yield call(requestCreditReviewRatings, payload);\n yield put({ type: REQUEST_SIG_ENTITY_RATING_SUCCESS, payload: data.itemsAdded });\n yield put(\n addNotificationAction({\n message: 'Your request was successfully submitted.',\n variant: 'success',\n }),\n );\n yield put(getCreditReviewContractDataAction);\n } catch (response) {\n const errorMessage =\n response && response.status === 402\n ? creditReviewRequestTooltips[cofaceAccessTypes.NOT_ENOUGH_CREDITS]\n : 'Failed to submit the request.';\n yield put({ type: REQUEST_SIG_ENTITY_RATING_ERROR, payload: response });\n yield put(addNotificationAction({ message: errorMessage, variant: 'error' }));\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport {\n GET_ENTITY,\n GET_ENTITY_DOCUMENTS,\n GET_ENTITY_PRODUCTS,\n GET_ENTITY_INSTRUMENTS,\n GET_ENTITY_RATING_NEWS,\n GET_ENTITY_RESEARCH,\n REQUEST_ENTITY_RATING_AND_FETCH_DATA,\n REQUEST_ENTITY_RATING,\n REQUEST_SIG_ENTITY_RATING,\n} from './entityActions';\nimport {\n fetchEntitySaga,\n fetchEntityDocumentsSaga,\n fetchEntityProductsSaga,\n fetchEntityInstrumentsSaga,\n fetchEntityRatingNewsSaga,\n fetchEntityResearchSaga,\n requestEntityRatingSaga,\n requestEntityRatingAndFetchData,\n requestSigEntityRatingSaga,\n} from './entitySaga';\n\nexport function* entityWatchers() {\n yield takeLatest(GET_ENTITY, fetchEntitySaga);\n yield takeLatest(GET_ENTITY_DOCUMENTS, fetchEntityDocumentsSaga);\n yield takeLatest(GET_ENTITY_PRODUCTS, fetchEntityProductsSaga);\n yield takeLatest(GET_ENTITY_INSTRUMENTS, fetchEntityInstrumentsSaga);\n yield takeLatest(GET_ENTITY_RATING_NEWS, fetchEntityRatingNewsSaga);\n yield takeLatest(GET_ENTITY_RESEARCH, fetchEntityResearchSaga);\n yield takeLatest(REQUEST_ENTITY_RATING, requestEntityRatingSaga);\n yield takeLatest(REQUEST_ENTITY_RATING_AND_FETCH_DATA, requestEntityRatingAndFetchData);\n yield takeLatest(REQUEST_SIG_ENTITY_RATING, requestSigEntityRatingSaga);\n}\n","import { put, call } from 'redux-saga/effects';\n\nimport {\n loginService,\n editProfileService,\n logoutService,\n permissionsService,\n getLoggedUserService,\n} from 'services';\nimport { putNotifySuccess } from 'shared/functions';\nimport {\n LOGIN_ERROR,\n LOGIN_SUCCESS,\n EDIT_PROFILE_SUCCESS,\n EDIT_PROFILE_ERROR,\n LOGOUT_SUCCESS,\n PERMISSIONS,\n GET_LOGGED_USER_SUCCESS,\n} from './loginAction';\n\nexport function* loginSaga(payload) {\n try {\n const loginResponse = yield call(loginService, payload);\n\n if (loginResponse.token) {\n const permissionsResponse = yield call(permissionsService, loginResponse);\n\n yield put({ type: LOGIN_SUCCESS, response: loginResponse });\n yield put({ type: PERMISSIONS, response: permissionsResponse });\n } else {\n throw loginResponse;\n }\n } catch (error) {\n yield put({ type: LOGIN_ERROR, response: error });\n }\n}\n\nexport function* getLoggedUserSaga(payload) {\n const response = yield call(getLoggedUserService, payload);\n yield put({ type: GET_LOGGED_USER_SUCCESS, response });\n}\n\nexport function* logoutSaga() {\n try {\n yield call(logoutService);\n if (process.env.REACT_APP_ENV === 'production') {\n FS.anonymize();\n }\n } finally {\n yield put({ type: LOGOUT_SUCCESS });\n yield putNotifySuccess('Successful logout.');\n }\n}\n\nexport function* editProfileSaga(payload) {\n try {\n const response = yield call(editProfileService, payload);\n yield put({ type: EDIT_PROFILE_SUCCESS, response: response.data });\n } catch (response) {\n yield put({ type: EDIT_PROFILE_ERROR, response });\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport { LOGIN, EDIT_PROFILE, LOGOUT, GET_LOGGED_USER } from './loginAction';\nimport { loginSaga, editProfileSaga, logoutSaga, getLoggedUserSaga } from './loginSaga';\n\nexport function* loginWatchers() {\n yield takeLatest(LOGIN, loginSaga);\n yield takeLatest(EDIT_PROFILE, editProfileSaga);\n yield takeLatest(LOGOUT, logoutSaga);\n yield takeLatest(GET_LOGGED_USER, getLoggedUserSaga);\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { recentUsersService } from 'services';\n\nimport { GET_RECENT_USERS_SUCCESS, GET_RECENT_USERS_ERROR } from './recentUsersActions';\n\nexport function* recentUsersSaga({ payload }) {\n try {\n const response = yield call(recentUsersService, payload);\n yield put({ type: GET_RECENT_USERS_SUCCESS, response });\n } catch (response) {\n yield put({ type: GET_RECENT_USERS_ERROR, response });\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport { GET_RECENT_USERS } from './recentUsersActions';\nimport { recentUsersSaga } from './recentUsersSaga';\n\nexport function* recentUsersWatchers() {\n yield takeLatest(GET_RECENT_USERS, recentUsersSaga);\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { fetchEntities, fetchInstruments, fetchArtifacts } from 'services';\nimport {\n SEARCH_ENTITIES_SUCCESS,\n SEARCH_ENTITIES_ERROR,\n SEARCH_INSTRUMENTS_SUCCESS,\n SEARCH_INSTRUMENTS_ERROR,\n SEARCH_RATING_NEWS_SUCCESS,\n SEARCH_RATING_NEWS_ERROR,\n SEARCH_RESEARCH_SUCCESS,\n SEARCH_RESEARCH_ERROR,\n} from './searchResultActions';\n\nexport function* searchEntitiesSaga({ payload }) {\n const { query, limit, page, sort, filter, ratingType, userId } = payload;\n\n const response = yield call(\n fetchEntities,\n { query, limit, page, sort, filter, userId },\n ratingType,\n );\n\n yield put({\n type: !response.error ? SEARCH_ENTITIES_SUCCESS : SEARCH_ENTITIES_ERROR,\n payload: { response, ratingType },\n });\n}\n\nexport function* searchInstrumentsSaga({ payload }) {\n const { query, limit, page, sort, filter } = payload;\n\n try {\n const response = yield call(fetchInstruments, { query, limit, page, sort, filter });\n yield put({ type: SEARCH_INSTRUMENTS_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: SEARCH_INSTRUMENTS_ERROR, payload: response });\n throw new Error(response);\n }\n}\n\nexport function* searchRatingNewsSaga({ payload }) {\n try {\n const response = yield call(fetchArtifacts, payload);\n yield put({ type: SEARCH_RATING_NEWS_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: SEARCH_RATING_NEWS_ERROR, payload: response });\n throw new Error(response);\n }\n}\n\nexport function* searchResearchSaga({ payload }) {\n try {\n const response = yield call(fetchArtifacts, payload);\n yield put({ type: SEARCH_RESEARCH_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: SEARCH_RESEARCH_ERROR, payload: response });\n throw new Error(response);\n }\n}\n","import { takeLatest, takeEvery } from 'redux-saga/effects';\n\nimport {\n SEARCH_ENTITIES,\n SEARCH_INSTRUMENTS,\n SEARCH_RATING_NEWS,\n SEARCH_RESEARCH,\n} from './searchResultActions';\nimport {\n searchEntitiesSaga,\n searchInstrumentsSaga,\n searchRatingNewsSaga,\n searchResearchSaga,\n} from './searchResultSaga';\n\nexport function* searchResultWatchers() {\n yield takeEvery(SEARCH_ENTITIES, searchEntitiesSaga);\n yield takeLatest(SEARCH_INSTRUMENTS, searchInstrumentsSaga);\n yield takeLatest(SEARCH_RATING_NEWS, searchRatingNewsSaga);\n yield takeLatest(SEARCH_RESEARCH, searchResearchSaga);\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { fetchAnnouncement } from 'services';\n\nimport { GET_ANNOUNCEMENT_SUCCESS, GET_ANNOUNCEMENT_ERROR } from './announcementActions';\n\nexport function* fetchAnnouncementSaga({ payload }) {\n try {\n const response = yield call(fetchAnnouncement, payload);\n yield put({ type: GET_ANNOUNCEMENT_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_ANNOUNCEMENT_ERROR, payload: response });\n throw new Error(response);\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport { GET_ANNOUNCEMENT } from './announcementActions';\n\nimport { fetchAnnouncementSaga } from './announcementSaga';\n\nexport function* announcementWatchers() {\n yield takeLatest(GET_ANNOUNCEMENT, fetchAnnouncementSaga);\n}\n","import { call, put, take } from 'redux-saga/effects';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { fetchArtifacts, postOrder, fetchPreferences, savePreferences } from 'services';\nimport { putNotifySuccess, putNotifyError } from 'shared/functions';\n\nimport {\n GET_NEWS_FEED_SUCCESS,\n GET_NEWS_FEED_ERROR,\n REQUEST_RATING_NEWS_FINISHED,\n GET_PREFERENCES_FINISHED,\n GET_PREFERENCES,\n SAVE_PREFERENCES_FINISHED,\n getPreferencesAction,\n} from './newsFeedActions';\n\nexport function* fetchNewsFeedSaga({ payload }) {\n try {\n const { settings, limit, page, type, filters } = payload;\n const defaultFilters = {\n type: settings.newsTypes,\n industrySectors: settings.industryTypes.map(({ industryCode: industry, code: sector }) => ({\n industry,\n sector,\n })),\n };\n\n const query = settings.countriesList\n ? settings.countriesList.map(({ name }) => name).join(' ')\n : [];\n\n const response = yield call(fetchArtifacts, {\n limit,\n page,\n type,\n filters: {\n ...defaultFilters,\n ...filters,\n },\n query,\n });\n yield put({ type: GET_NEWS_FEED_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_NEWS_FEED_ERROR, payload: response });\n }\n}\n\nexport function* requestRatingNewsSaga({ payload }) {\n try {\n yield call(postOrder, payload);\n yield put({ type: REQUEST_RATING_NEWS_FINISHED });\n yield put(\n addNotificationAction({\n message: 'Your request was successfully submitted.',\n variant: 'success',\n }),\n );\n } catch (error) {\n yield put({ type: REQUEST_RATING_NEWS_FINISHED, payload: { id: payload.id, error } });\n yield put(\n addNotificationAction({ message: 'Failed to submit the request.', variant: 'error' }),\n );\n }\n}\n\nexport function* fetchPreferencesSaga({ payload }) {\n try {\n const response = yield call(fetchPreferences, payload);\n yield put({\n type: GET_PREFERENCES_FINISHED,\n payload: { defaultPrefs: payload.defaultPrefs, preferences: response.data.preferences },\n });\n } catch (error) {\n yield put({ type: GET_PREFERENCES_FINISHED, payload: { error } });\n }\n}\n\nexport function* getInitialPreferencesSaga() {\n const action = yield take(GET_PREFERENCES);\n yield fetchPreferencesSaga(action);\n}\n\nexport function* savePreferencesSaga({ payload }) {\n try {\n yield call(savePreferences, payload);\n yield put({ type: SAVE_PREFERENCES_FINISHED });\n yield put(getPreferencesAction());\n yield putNotifySuccess('Preferences saved.');\n } catch (error) {\n yield put({ type: SAVE_PREFERENCES_FINISHED, payload: { error } });\n yield putNotifyError('Failed to save preferences.');\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport {\n GET_NEWS_FEED,\n REQUEST_RATING_NEWS,\n GET_PREFERENCES,\n SAVE_PREFERENCES,\n} from './newsFeedActions';\n\nimport {\n fetchNewsFeedSaga,\n requestRatingNewsSaga,\n fetchPreferencesSaga,\n getInitialPreferencesSaga,\n savePreferencesSaga,\n} from './newsFeedSaga';\n\nexport function* newsFeedWatchers() {\n yield getInitialPreferencesSaga();\n\n yield takeLatest(GET_PREFERENCES, fetchPreferencesSaga);\n yield takeLatest(SAVE_PREFERENCES, savePreferencesSaga);\n yield takeLatest(REQUEST_RATING_NEWS, requestRatingNewsSaga);\n yield takeLatest(GET_NEWS_FEED, fetchNewsFeedSaga);\n}\n","import { call, put } from 'redux-saga/effects';\nimport { fetchDossiers, toggleWatchedState, SIGToggleWatchedState } from 'services';\nimport {\n addToDossier,\n createDossier,\n deleteDossiers,\n fetchDossier,\n fetchDossierItems,\n} from 'services/dossier/dossierService';\nimport { putNotifySuccess, putNotifyError } from 'shared/functions';\nimport { watchlistItemTypes } from 'shared/constants/watchlistItemTypes';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\n\nimport { toggleMode } from 'shared/constants/toggleMode';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport {\n portfolioErrorMessages,\n PortfolioErrorType,\n} from 'shared/constants/portfolio/portfolioErrorTypes';\nimport { titleByRatingType } from 'shared/constants/titleByRatingType';\n\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport {\n GET_DOSSIERS_SUCCESS,\n GET_DOSSIERS_ERROR,\n CREATE_DOSSIER_SUCCESS,\n CREATE_DOSSIER_ERROR,\n DELETE_DOSSIER_SUCCESS,\n DELETE_DOSSIER_ERROR,\n refreshDossiersAction,\n GET_DOSSIER_SUCCESS,\n GET_DOSSIER_ERROR,\n GET_DOSSIER_ITEMS_SUCCESS,\n GET_DOSSIER_ITEMS_ERROR,\n TOGGLE_DOSSIER_WATCHED_STATE_FINISHED,\n} from './dossierActions';\n\nconst getCallMethodsByRatingType = ratingType => {\n switch (ratingType) {\n case ratingTypes.CREDIT_RATING:\n return toggleWatchedState;\n case ratingTypes.CREDIT_REVIEW:\n return SIGToggleWatchedState;\n default:\n return undefined;\n }\n};\n\nexport function* fetchDossierSaga({ payload }) {\n try {\n const response = yield call(fetchDossier, payload);\n yield put({ type: GET_DOSSIER_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_DOSSIER_ERROR, payload: response });\n throw new Error(response);\n }\n}\n\nexport function* fetchDossierItemsSaga({ payload }) {\n try {\n const response = yield call(fetchDossierItems, payload);\n const { itemType, ratingType } = payload;\n\n yield put({\n type: GET_DOSSIER_ITEMS_SUCCESS,\n payload: { ...response, itemType, ratingType },\n });\n } catch (response) {\n yield put({ type: GET_DOSSIER_ITEMS_ERROR, payload: response });\n yield put(\n addNotificationAction({ message: 'Failed to load portfolio items.', variant: 'error' }),\n );\n }\n}\n\nexport function* fetchDossiersSaga({ payload }) {\n const { ratingType } = payload;\n try {\n const response = yield call(fetchDossiers, payload);\n yield put({ type: GET_DOSSIERS_SUCCESS, payload: { response, ratingType } });\n } catch (response) {\n yield put({ type: GET_DOSSIERS_ERROR, payload: { response, ratingType } });\n yield putNotifyError(`Failed to get ${titleByRatingType[ratingType]} portfolios.`);\n }\n}\n\nexport function* createDossierSaga({ payload }) {\n const { ratingType, itemsData, selectAll, sourceDossierId } = payload;\n const addElementsToDossier = itemsData ? itemsData.count !== 0 : selectAll && sourceDossierId;\n try {\n const responseDossier = yield call(createDossier, payload);\n\n if (responseDossier.error) {\n throw responseDossier;\n }\n\n if (addElementsToDossier) {\n yield call(addToDossier, {\n itemsData,\n dossierId: responseDossier.data.id,\n ratingType,\n selectAll,\n sourceDossierId,\n });\n }\n\n yield put({ type: CREATE_DOSSIER_SUCCESS, payload: responseDossier });\n\n yield putNotifySuccess(\n addElementsToDossier\n ? `Portfolio was successfully created and elements added.`\n : `Portfolio was successfully ${payload.dossierId ? 'edited' : 'created'}.`,\n );\n yield put(refreshDossiersAction({ reason: refreshReasons.CREATED, ratingType }));\n } catch (error) {\n const errorType =\n error.status === 409 ? PortfolioErrorType.CREATE_NAME_CONFLICT : PortfolioErrorType.UNKNOWN;\n const errorMessage = portfolioErrorMessages[errorType];\n\n yield put({ type: CREATE_DOSSIER_ERROR, payload: { errorType, errorMessage } });\n yield putNotifyError(\n addElementsToDossier ? `Failed to create portfolio or add elements to it.` : errorMessage,\n );\n }\n}\n\nexport function* deleteDossiersSaga({ payload }) {\n try {\n const { ratingType } = payload;\n const response = yield call(deleteDossiers, payload);\n yield put({ type: DELETE_DOSSIER_SUCCESS, payload: response });\n yield putNotifySuccess('Portfolio(s) deleted successfully');\n yield put(refreshDossiersAction({ reason: refreshReasons.DELETED, ratingType }));\n } catch (response) {\n yield put({ type: DELETE_DOSSIER_ERROR, payload: response });\n yield putNotifyError('Failed to delete portfolio(s)');\n throw new Error(response);\n }\n}\n\nexport function* toggleDossierWatchedStateSaga({ payload }) {\n try {\n const { ratingType } = payload;\n\n yield call(getCallMethodsByRatingType(ratingType), {\n ...payload,\n itemType: watchlistItemTypes.DOSSIER,\n });\n\n yield putNotifySuccess(\n `Portfolio was ${payload.mode === toggleMode.ON ? 'added to' : 'removed from'} watchlist.`,\n );\n yield put(\n refreshDossiersAction({ reason: refreshReasons.WATCHLIST_STATE_CHANGED, ratingType }),\n );\n } catch (response) {\n yield putNotifyError(\n `Failed to ${\n payload.mode === toggleMode.ON ? 'add portfolio to' : 'remove portfolio from'\n } watchlist.`,\n );\n throw new Error(response);\n } finally {\n yield put({ type: TOGGLE_DOSSIER_WATCHED_STATE_FINISHED, payload });\n }\n}\n","import { takeLatest, takeEvery } from 'redux-saga/effects';\n\nimport {\n GET_DOSSIERS,\n CREATE_DOSSIER,\n DELETE_DOSSIER,\n GET_DOSSIER,\n GET_DOSSIER_ITEMS,\n TOGGLE_DOSSIER_WATCHED_STATE,\n} from './dossierActions';\nimport {\n fetchDossiersSaga,\n createDossierSaga,\n deleteDossiersSaga,\n fetchDossierSaga,\n fetchDossierItemsSaga,\n toggleDossierWatchedStateSaga,\n} from './dossierSaga';\n\nexport function* dossierWatchers() {\n yield takeLatest(GET_DOSSIER, fetchDossierSaga);\n yield takeEvery(GET_DOSSIER_ITEMS, fetchDossierItemsSaga);\n yield takeEvery(GET_DOSSIERS, fetchDossiersSaga);\n yield takeLatest(CREATE_DOSSIER, createDossierSaga);\n yield takeLatest(DELETE_DOSSIER, deleteDossiersSaga);\n yield takeLatest(TOGGLE_DOSSIER_WATCHED_STATE, toggleDossierWatchedStateSaga);\n}\n","import { fetchApi } from 'shared/functions';\n\nexport const fetchIndustries = () =>\n fetchApi(`/storefront/classification-standards/TnR/industries`)\n .then(response => response.json())\n .then(({ data }) => data);\n","import { fetchApi } from 'shared/functions';\n\nexport const fetchRatingCoverage = () => {\n return fetchApi(`/storefront/rating-coverage`)\n .then(res => res.json())\n .then(({ data }) => data);\n};\n","import { fetchApi } from 'shared/functions';\n\nexport const fetchESGCoverage = () => {\n return fetchApi(`/esg/api/esg-coverage/`)\n .then(res => res.json())\n .then(({ data }) => data);\n};\n","import { call, put } from 'redux-saga/effects';\n\nimport { fetchIndustries } from 'services/shared';\n\nimport { GET_INDUSTRIES_SUCCESS, GET_INDUSTRIES_ERROR } from './industriesActions';\n\nexport function* industriesSaga({ payload }) {\n try {\n const response = yield call(fetchIndustries, payload);\n yield put({ type: GET_INDUSTRIES_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_INDUSTRIES_ERROR, payload: response });\n }\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { fetchEntities } from 'services';\n\nimport {\n REQUEST_RELATED_ENTITIES_SUCCESS,\n REQUEST_RELATED_ENTITIES_ERROR,\n} from './relatedEntitiesActions';\n\nexport function* requestRelatedEntitiesSaga({ payload }) {\n try {\n const response = yield call(fetchEntities, { filter: { issuerIds: payload.ids } });\n yield put({ type: REQUEST_RELATED_ENTITIES_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: REQUEST_RELATED_ENTITIES_ERROR, payload: response });\n }\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { fetchRatingCoverage } from 'services/shared';\n\nimport {\n GET_RATING_COVERAGE_SUCCESS,\n GET_RATING_COVERAGE_ERROR,\n} from 'store/shared/ratingCoverage/ratingCoverageAction';\n\nexport function* ratingCoverageSaga({ payload }) {\n try {\n const response = yield call(fetchRatingCoverage, payload);\n yield put({ type: GET_RATING_COVERAGE_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_RATING_COVERAGE_ERROR, payload: response });\n }\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { fetchESGCoverage } from 'services/shared';\n\nimport {\n GET_ESG_COVERAGE_SUCCESS,\n GET_ESG_COVERAGE_ERROR,\n} from 'store/shared/esgCoverage/esgCoverageAction';\n\nexport function* esgCoverageSaga({ payload }) {\n try {\n const response = yield call(fetchESGCoverage, payload);\n yield put({ type: GET_ESG_COVERAGE_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_ESG_COVERAGE_ERROR, payload: response });\n }\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { fetchEsgRegions } from 'services';\n\nimport { GET_REGIONS_SUCCESS, GET_REGIONS_ERROR } from 'store/shared/regions/regionsAction';\n\nexport function* regionsSaga({ payload }) {\n try {\n const response = yield call(fetchEsgRegions, payload);\n yield put({ type: GET_REGIONS_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_REGIONS_ERROR, payload: response });\n }\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { getQuestionnaireAvailability } from 'services/userQualification/userQualificationService';\nimport {\n REQUEST_QUESTIONNAIRE_AVAILABILITY_SUCCESS,\n REQUEST_QUESTIONNAIRE_AVAILABILITY_ERROR,\n} from './questionnaireActions';\n\nexport function* questionnaireSaga({ payload }) {\n try {\n const response = yield call(getQuestionnaireAvailability, payload);\n yield put({ type: REQUEST_QUESTIONNAIRE_AVAILABILITY_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: REQUEST_QUESTIONNAIRE_AVAILABILITY_ERROR });\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport { GET_INDUSTRIES } from './industries/industriesActions';\nimport { REQUEST_RELATED_ENTITIES } from './relatedEntities/relatedEntitiesActions';\nimport { REQUEST_QUESTIONNAIRE_AVAILABILITY } from './questionnaire/questionnaireActions';\nimport { GET_RATING_COVERAGE } from './ratingCoverage/ratingCoverageAction';\nimport { GET_ESG_COVERAGE } from './esgCoverage/esgCoverageAction';\nimport { GET_REGIONS } from './regions/regionsAction';\nimport { industriesSaga } from './industries/industriesSaga';\nimport { requestRelatedEntitiesSaga } from './relatedEntities/relatedEntitiesSaga';\nimport { ratingCoverageSaga } from './ratingCoverage/ratingCoverageSaga';\nimport { esgCoverageSaga } from './esgCoverage/esgCoverageSaga';\nimport { regionsSaga } from './regions/regionsSaga';\nimport { questionnaireSaga } from './questionnaire/questionnaireSaga';\n\nexport function* sharedWatchers() {\n yield takeLatest(GET_INDUSTRIES, industriesSaga);\n yield takeLatest(REQUEST_RELATED_ENTITIES, requestRelatedEntitiesSaga);\n yield takeLatest(GET_RATING_COVERAGE, ratingCoverageSaga);\n yield takeLatest(GET_ESG_COVERAGE, esgCoverageSaga);\n yield takeLatest(GET_REGIONS, regionsSaga);\n yield takeLatest(REQUEST_QUESTIONNAIRE_AVAILABILITY, questionnaireSaga);\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { fetchInvestorRelations } from 'services';\n\nimport { GET_INVESTOR_RELATIONS_FINISHED } from './investorActions';\n\nexport function* fetchInvestorRelationsSaga({ payload }) {\n try {\n const response = yield call(fetchInvestorRelations, payload);\n yield put({ type: GET_INVESTOR_RELATIONS_FINISHED, payload: response });\n } catch (response) {\n yield put({ type: GET_INVESTOR_RELATIONS_FINISHED, payload: response });\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport { GET_INVESTOR_RELATIONS } from './investorActions';\nimport { fetchInvestorRelationsSaga } from './investorSaga';\n\nexport function* investorRelationsWatchers() {\n yield takeLatest(GET_INVESTOR_RELATIONS, fetchInvestorRelationsSaga);\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { fetchCreditReviewContractData } from 'services';\nimport {\n GET_CREDIT_REVIEW_CONTRACT_DATA_ERROR,\n GET_CREDIT_REVIEW_CONTRACT_DATA_SUCCESS,\n} from './creditReviewActions';\n\nexport function* fetchCreditReviewContractDataSaga() {\n try {\n const response = yield call(fetchCreditReviewContractData);\n yield put({ type: GET_CREDIT_REVIEW_CONTRACT_DATA_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_CREDIT_REVIEW_CONTRACT_DATA_ERROR, payload: response });\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\n\nimport { GET_CREDIT_REVIEW_CONTRACT_DATA } from './creditReviewActions';\nimport { fetchCreditReviewContractDataSaga } from './creditReviewSaga';\n\nexport function* creditReviewWatchers() {\n yield takeLatest(GET_CREDIT_REVIEW_CONTRACT_DATA, fetchCreditReviewContractDataSaga);\n}\n","import { call, put, select } from 'redux-saga/effects';\nimport { eventsCategories } from '../constants/eventsCategories';\nimport { getEventsFilters, getEventSortDesc } from '../selectors/eventsSelectors';\n\nimport {\n fetchEventDetails,\n fetchEvents,\n fetchEventTitles,\n fetchEventSessions,\n fetchSessionDetails,\n fetchEventsProperties,\n} from '../services/eventsService';\nimport { EventFilters, EventsAction, EventsActionType, Response } from '../types/eventsTypes';\n\nexport function* fetchEventsSaga({ payload }: EventsAction): Generator {\n try {\n const filters = (yield select(getEventsFilters)) as EventFilters;\n const sortDesc = (yield select(getEventSortDesc)) as boolean;\n const events = yield call(() =>\n fetchEvents(filters.category, filters.timeline, sortDesc, payload.status, filters.favourites),\n );\n\n yield put({ type: EventsActionType.FETCH_EVENTS_SUCCESS, payload: { events } });\n } catch (response) {\n yield put({ type: EventsActionType.FETCH_EVENTS_ERROR, payload: response });\n }\n}\n\nexport function* fetchEventPropertiesSaga(): Generator {\n try {\n const response = (yield call(fetchEventsProperties)) as Response;\n\n const properties = {\n categories: Object.entries(eventsCategories).map(([id, name]) => ({ id, name })),\n segments: response.data.segments,\n productLines: response.data.productLines,\n industries: response.data.industries,\n regions: response.data.regions,\n locations: [\n { id: 'webinar', name: 'Web conference' },\n { id: 'onsight', name: 'Onsight' },\n ],\n };\n\n yield put({ type: EventsActionType.FETCH_EVENT_PROPERTIES_SUCCESS, payload: { properties } });\n } catch (response) {\n yield put({ type: EventsActionType.FETCH_EVENT_PROPERTIES_ERROR, payload: response });\n }\n}\n\nexport function* fetchEventDetailsSaga({ payload }: EventsAction): Generator {\n try {\n const response = yield call(() => fetchEventDetails(payload));\n\n yield put({\n type: EventsActionType.FETCH_EVENT_DETAILS_SUCCESS,\n payload: { id: payload, data: response },\n });\n } catch (response) {\n yield put({ type: EventsActionType.FETCH_EVENT_DETAILS_ERROR, payload: response });\n }\n}\n\nexport function* fetchEventTitlesSaga({ payload }: EventsAction): Generator {\n try {\n const response = (yield call(() => fetchEventTitles(payload))) as Response;\n\n yield put({ type: EventsActionType.FETCH_EVENT_TITLES_SUCCESS, payload: response.data });\n } catch (response) {\n yield put({ type: EventsActionType.FETCH_EVENT_TITLES_ERROR, payload: response });\n }\n}\n\nexport function* fetchEventSessionsSaga({ payload }: EventsAction): Generator {\n try {\n const response = (yield call(() => fetchEventSessions(payload))) as Response;\n\n yield put({\n type: EventsActionType.FETCH_EVENT_SESSIONS_SUCCESS,\n payload: { id: payload, data: response.data },\n });\n } catch (response) {\n yield put({ type: EventsActionType.FETCH_EVENT_SESSIONS_ERROR, payload: response });\n }\n}\n\nexport function* fetchSessionDetailsSaga({ payload }: EventsAction): Generator {\n try {\n const response = yield call(() => fetchSessionDetails(payload));\n\n yield put({\n type: EventsActionType.FETCH_SESSION_DETAILS_SUCCESS,\n payload: { id: payload, data: response },\n });\n } catch (response) {\n yield put({ type: EventsActionType.FETCH_SESSION_DETAILS_ERROR, payload: response });\n }\n}\n","import { takeLatest, takeEvery } from 'redux-saga/effects';\nimport { EventsActionType } from '../types/eventsTypes';\nimport {\n fetchEventsSaga,\n fetchEventDetailsSaga,\n fetchEventTitlesSaga,\n fetchEventSessionsSaga,\n fetchSessionDetailsSaga,\n fetchEventPropertiesSaga,\n} from './eventsSaga';\n\nexport function* eventsWatchers() {\n yield takeLatest(EventsActionType.FETCH_EVENTS, fetchEventsSaga);\n yield takeLatest(EventsActionType.FETCH_EVENT_PROPERTIES, fetchEventPropertiesSaga);\n yield takeEvery(EventsActionType.FETCH_EVENT_DETAILS, fetchEventDetailsSaga);\n yield takeLatest(EventsActionType.FETCH_EVENT_TITLES, fetchEventTitlesSaga);\n yield takeLatest(EventsActionType.FETCH_EVENT_SESSIONS, fetchEventSessionsSaga);\n yield takeLatest(EventsActionType.FETCH_SESSION_DETAILS, fetchSessionDetailsSaga);\n yield takeLatest(EventsActionType.SET_EVENTS_CATEGORY_FILTER, fetchEventsSaga);\n yield takeLatest(EventsActionType.SET_EVENTS_TIMELINE_FILTER, fetchEventsSaga);\n yield takeLatest(EventsActionType.SET_EVENTS_FAVORITES_FILTER, fetchEventsSaga);\n yield takeLatest(EventsActionType.SET_EVENTS_SORT_DESC, fetchEventsSaga);\n}\n","import { call, put } from 'redux-saga/effects';\n\nimport { fetchEsgContractData } from 'services';\nimport { GET_ESG_CONTRACT_DATA_ERROR, GET_ESG_CONTRACT_DATA_SUCCESS } from './esgActions';\n\nexport function* fetchEsgContractDataSaga(): Generator {\n try {\n const response = yield call(fetchEsgContractData);\n yield put({ type: GET_ESG_CONTRACT_DATA_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_ESG_CONTRACT_DATA_ERROR, payload: response });\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\nimport { GET_ESG_CONTRACT_DATA } from './esgActions';\nimport { fetchEsgContractDataSaga } from './esgSaga';\n\nexport function* esgWatchers() {\n yield takeLatest(GET_ESG_CONTRACT_DATA, fetchEsgContractDataSaga);\n}\n","import { call, put } from 'redux-saga/effects';\nimport { GET_ESG_COVERAGE_DATA_SUCCESS, GET_ESG_COVERAGE_DATA_ERROR } from './esgCoverageActions';\nimport { getEsgCoverage } from '../../modules/ESG/services/esgLendingService';\n\nexport function* fetchEsgCoverageDataSaga({ payload }) {\n try {\n const response = yield call(getEsgCoverage, payload);\n yield put({ type: GET_ESG_COVERAGE_DATA_SUCCESS, payload: response });\n } catch (response) {\n yield put({ type: GET_ESG_COVERAGE_DATA_ERROR, payload: response });\n }\n}\n","import { takeLatest } from 'redux-saga/effects';\nimport { GET_ESG_COVERAGE_DATA } from './esgCoverageActions';\nimport { fetchEsgCoverageDataSaga } from './esgCoverageSaga';\n\nexport function* esgCoverageWatchers() {\n yield takeLatest(GET_ESG_COVERAGE_DATA, fetchEsgCoverageDataSaga);\n}\n","import { all, fork } from 'redux-saga/effects';\n\nimport { notificationsCentreWatchers } from 'modules/notificationsCentre/store/watchers';\nimport { shopWatchers } from 'modules/shop/store/shopWatchers';\n\nimport { instrumentWatchers } from './instrument/instrumentWatchers';\nimport { entityWatchers } from './entity/entityWatchers';\nimport { loginWatchers } from './login/loginWatchers';\nimport { recentUsersWatchers } from './recentUsers/recentUsersWatchers';\nimport { searchResultWatchers } from './searchResult/searchResultWatchers';\nimport { announcementWatchers } from './announcement/announcementWatchers';\nimport { newsFeedWatchers } from './newsFeed/newsFeedWatchers';\nimport { dossierWatchers } from './portfolio/dossierWatchers';\nimport { sharedWatchers } from './shared/sharedWatchers';\nimport { investorRelationsWatchers } from './investor/investorWatchers';\nimport { creditReviewWatchers } from './creditReview/creditReviewWatchers';\nimport { eventsWatchers } from '../modules/events/store/eventsWatchers';\nimport { esgWatchers } from './esg/esgWatchers';\nimport { esgCoverageWatchers } from './esgCoverage/esgCoverageWatchers';\n\nexport function* startSagas() {\n yield all([\n fork(instrumentWatchers),\n fork(entityWatchers),\n fork(loginWatchers),\n fork(recentUsersWatchers),\n fork(searchResultWatchers),\n fork(announcementWatchers),\n fork(newsFeedWatchers),\n fork(dossierWatchers),\n fork(sharedWatchers),\n fork(investorRelationsWatchers),\n fork(shopWatchers),\n fork(creditReviewWatchers),\n fork(notificationsCentreWatchers),\n fork(eventsWatchers),\n fork(esgWatchers),\n fork(esgCoverageWatchers),\n ]);\n}\n","/* From typesafe-actions library */\n\nexport type TypeConstant = string;\n\nfunction checkIsEmpty(arg: unknown) {\n return arg == null;\n}\n\nfunction throwIsEmpty(argPosition: number): never {\n throw new Error(`Argument ${argPosition} is empty.`);\n}\n\nfunction checkInvalidActionTypeInArray(arg: TypeConstant, idx: number): void | never {\n if (arg == null) {\n throw new Error(`Argument contains array with empty element at index ${idx}`);\n } else if (typeof arg !== 'string' && typeof arg !== 'symbol') {\n throw new Error(\n `Argument contains array with invalid element at index ${idx}, it should be of type: string | symbol`,\n );\n }\n}\n\n/**\n * @description (curried assert function) check if action type is equal given type-constant\n * @description it works with discriminated union types\n */\nexport function isOfType<T extends string, A extends { type: string }>(\n type: T | T[],\n action: A,\n): action is A extends { type: T } ? A : never;\n\n/**\n * @description (curried assert function) check if action type is equal given type-constant\n * @description it works with discriminated union types\n */\nexport function isOfType<T extends string>(\n type: T | T[],\n): <A extends { type: string }>(action: A) => action is A extends { type: T } ? A : never;\n\n/**\n * implementation\n */\nexport function isOfType<T extends string, A extends { type: T }>(\n actionTypeOrTypes: T | T[],\n action?: A,\n) {\n if (checkIsEmpty(actionTypeOrTypes)) {\n throwIsEmpty(1);\n }\n\n const actionTypes = Array.isArray(actionTypeOrTypes) ? actionTypeOrTypes : [actionTypeOrTypes];\n\n actionTypes.forEach(checkInvalidActionTypeInArray);\n\n const assertFn = (_action: A) => actionTypes.includes(_action.type);\n\n // 1 arg case => return curried version\n if (action === undefined) {\n return assertFn;\n }\n // 2 args case => invoke assertFn and return the result\n return assertFn(action);\n}\n","import { Epic } from 'redux-observable';\nimport { from, of } from 'rxjs';\nimport { map, catchError, filter, switchMap } from 'rxjs/operators';\n\nimport { fetchCreditReviewLevels } from 'services';\nimport { isOfType } from 'utils/isOfType/isOfType';\n\nimport {\n Actions,\n CreditReviewLevelsActionTypes,\n requestCreditRequestLevelsSuccessAction,\n requestCreditRequestLevelsErrorAction,\n} from './creditReviewLevelsActions';\n\nexport const creditReviewLevelsEpic: Epic<Actions, Actions> = action$ =>\n action$.pipe(\n filter(isOfType(CreditReviewLevelsActionTypes.Request)),\n switchMap(() =>\n from(fetchCreditReviewLevels()).pipe(\n map(response => requestCreditRequestLevelsSuccessAction(response)),\n catchError(() =>\n of(requestCreditRequestLevelsErrorAction('Failed to load credit review levels')),\n ),\n ),\n ),\n );\n","import { Epic } from 'redux-observable';\nimport { from, of } from 'rxjs';\nimport { map, catchError, filter, switchMap } from 'rxjs/operators';\n\nimport { fetchCreditReviewSpecs } from 'services';\nimport { isOfType } from 'utils/isOfType/isOfType';\n\nimport {\n Actions,\n CreditReviewSpecsActionTypes,\n requestCreditReviewSpecsSuccessAction,\n requestCreditReviewSpecsErrorAction,\n} from './creditReviewSpecsActions';\n\nexport const creditReviewSpecsEpic: Epic<Actions, Actions> = action$ =>\n action$.pipe(\n filter(isOfType(CreditReviewSpecsActionTypes.Request)),\n switchMap(() =>\n from(fetchCreditReviewSpecs()).pipe(\n map(response => requestCreditReviewSpecsSuccessAction(response)),\n catchError(() =>\n of(requestCreditReviewSpecsErrorAction('Failed to load credit review specifications')),\n ),\n ),\n ),\n );\n","import { combineEpics } from 'redux-observable';\nimport { catchError } from 'rxjs/operators';\n\nimport { creditReviewLevelsEpic } from 'store/shared/creditReviewLevels/creditReviewLevelsEpic';\nimport { creditReviewSpecsEpic } from 'store/shared/creditReviewSpecs/creditReviewSpecsEpic';\n\nexport const rootEpic = (action$, store$, dependencies) =>\n combineEpics(creditReviewLevelsEpic, creditReviewSpecsEpic)(action$, store$, dependencies).pipe(\n catchError((error, source) => {\n // TODO: Global error handling\n return source;\n }),\n );\n","import { configureStore } from 'store/configureStore';\n\nexport const store = configureStore();\n","import { createStore, applyMiddleware } from 'redux';\nimport { composeWithDevTools } from 'redux-devtools-extension';\nimport { createEpicMiddleware } from 'redux-observable';\nimport createSagaMiddleware from 'redux-saga';\n\nimport { PAGE_ERROR_HREF, redirectToErrorPage } from 'shared/constants/errorPages';\nimport { combineReducers } from './combineReducers';\nimport { loadState, saveState } from './localStorage';\nimport { startSagas } from './startSagas';\nimport { rootEpic } from './rootEpic';\n\nconst configureStore = () => {\n const sagaMiddleware = createSagaMiddleware();\n const epicMiddleware = createEpicMiddleware();\n const persistedState = loadState();\n const store =\n process.env.NODE_ENV === 'production'\n ? createStore(\n combineReducers,\n persistedState,\n applyMiddleware(sagaMiddleware, epicMiddleware),\n )\n : createStore(\n combineReducers,\n persistedState,\n composeWithDevTools(applyMiddleware(sagaMiddleware, epicMiddleware)),\n );\n\n store.subscribe(() => {\n const { data, type } = store.getState().auth;\n saveState(data && { ...data }, type);\n });\n\n epicMiddleware.run(rootEpic);\n\n sagaMiddleware\n .run(startSagas)\n .toPromise()\n .catch(() => {\n redirectToErrorPage(PAGE_ERROR_HREF);\n });\n\n return { ...store };\n};\n\nexport { configureStore };\n","export const shortDateFormat = 'd MMMM yyyy';\n\nexport const longDateFormat = 'dd MMMM yyyy';\n","import qs from 'qs';\n\nimport { fetchApi, getUserId } from 'shared/functions';\nimport { consolidatedPortfolioItemTypes } from 'shared/constants/portfolio/portfolioItemTypes';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { serviceUrlPrefix } from 'utils';\n\nexport const fetchDossier = async ({ id, ratingType = ratingTypes.CREDIT_RATING }) => {\n const userId = getUserId();\n\n const urlPrefix = serviceUrlPrefix[ratingType];\n\n try {\n return await fetchApi(\n `${urlPrefix}/storefront/users/${userId}/dossiers/${id}/`,\n ).then(response => response.json());\n } catch (e) {\n throw new Error('Failed to fetch dossier: ', e);\n }\n};\n\nexport const fetchDossierItemsSingleType = async ({\n dossierId,\n listId,\n itemType,\n ratingType = ratingTypes.CREDIT_RATING,\n page,\n limit,\n start,\n sort,\n filter,\n}) => {\n const userId = getUserId();\n\n const params = {\n page: page || 1,\n start: start || 0,\n limit: limit || 25,\n ...(sort && { sort: sort.sortColumn }),\n ...(sort && { dir: sort.direction }),\n filter: filter ? JSON.stringify(filter) : undefined,\n };\n\n const urlPrefix = serviceUrlPrefix[ratingType];\n\n return fetchApi(\n `${urlPrefix}/storefront/users/${userId}/dossiers/${dossierId}/lists/${listId}/${itemType}/?${qs.stringify(\n params,\n )}`,\n ).then(response => response.json());\n};\n\nexport const fetchDossierItems = async ({\n dossierId,\n listId,\n itemType,\n ratingType = ratingTypes.CREDIT_RATING,\n page,\n limit,\n start,\n sort,\n filter,\n}) => {\n const dossierItemTypes = consolidatedPortfolioItemTypes[itemType];\n\n const fetchFunc = type =>\n fetchDossierItemsSingleType({\n dossierId,\n listId,\n itemType: type,\n ratingType,\n page,\n limit,\n start,\n sort,\n filter,\n });\n\n const responses = await Promise.all(dossierItemTypes.map(type => fetchFunc(type)));\n\n const result = {\n data: responses.map(({ data }) => data).flat(),\n total:\n responses.length > 1 ? responses.reduce((a, b) => a.total + b.total) : responses[0].total,\n };\n\n return result;\n};\n\nexport const fetchDossiers = async ({\n ratingType = ratingTypes.CREDIT_RATING,\n requestParams: { page = 1, start = 0, limit = 25, sort },\n}) => {\n const userId = getUserId();\n\n const params = {\n page,\n start,\n limit,\n ...(sort && { sort: sort.sortColumn }),\n ...(sort && { dir: sort.direction }),\n };\n\n const urlPrefix = serviceUrlPrefix[ratingType];\n\n try {\n return fetchApi(\n `${urlPrefix}/storefront/users/${userId}/dossiers/?${qs.stringify(params)}`,\n ).then(response => response.json());\n } catch (e) {\n throw new Error('Failed to fetch dossiers: ', e);\n }\n};\n\nexport const fetchRecentDossiers = ({ page = 1, limit = 5 }) => {\n const userId = getUserId();\n\n const params = { page, limit };\n\n return fetchApi(\n `/storefront/users/${userId}/recent-dossiers?${qs.stringify(params)}`,\n ).then(response => response.json());\n};\n\nexport const createDossier = async ({\n ratingType = ratingTypes.CREDIT_RATING,\n name,\n description,\n organisationId,\n id,\n}) => {\n const userId = getUserId();\n const urlPrefix = serviceUrlPrefix[ratingType];\n const resourceUrl = `${urlPrefix}/storefront/users/${userId}/dossiers/${id ? `${id}/` : ''}`;\n\n const data = {\n name,\n description,\n };\n\n if (ratingType !== ratingTypes.CREDIT_RATING) {\n data.organisationId = organisationId;\n }\n\n const params = {\n method: id ? 'PUT' : 'POST',\n body: JSON.stringify(data),\n };\n const response = await fetchApi(resourceUrl, params);\n\n return id ? response : response.json();\n};\n\nexport const deleteDossiers = ({ ids, ratingType = ratingTypes.CREDIT_RATING }) => {\n const userId = getUserId();\n\n const urlPrefix = serviceUrlPrefix[ratingType];\n const resourceUrl = `${urlPrefix}/storefront/users/${userId}/dossiers/`;\n\n const params = {\n method: 'DELETE',\n body: JSON.stringify(ids),\n };\n\n return fetchApi(resourceUrl, params);\n};\n\nexport const addToDossier = async ({\n itemsData,\n dossierId,\n ratingType = ratingTypes.CREDIT_RATING,\n selectAll = false,\n sourceDossierId,\n}) => {\n const userId = getUserId();\n\n const urlPrefix = serviceUrlPrefix[ratingType];\n const resourceUrl = `${urlPrefix}/storefront/users/${userId}/dossiers/${dossierId}/items/`;\n\n const { items, type } = itemsData || {};\n const data = items ? Object.keys(items).map(id => ({ artifactId: id, type })) : [];\n\n const params = {\n method: 'POST',\n body: JSON.stringify(!selectAll || !sourceDossierId ? data : { selectAll, sourceDossierId }),\n };\n\n const response = await fetchApi(resourceUrl, params);\n\n return response.json();\n};\n\nexport const addToDossierIsin = async ({ items, dossierName }) => {\n const userId = getUserId();\n\n const resourceUrl = `/storefront/users/${userId}/dossiers/isin_upload?source=ISINUPLOAD`;\n\n const body = {\n artifacts: items,\n description: '',\n handleIssuers: true,\n name: dossierName,\n };\n\n const params = {\n method: 'POST',\n body: JSON.stringify(body),\n };\n\n const response = await fetchApi(resourceUrl, params);\n\n return response;\n};\n\nexport const removeFromDossier = async ({\n dossierItemsIds,\n dossierId,\n ratingType = ratingTypes.CREDIT_RATING,\n selectAll = false,\n}) => {\n const userId = getUserId();\n\n const urlPrefix = serviceUrlPrefix[ratingType];\n const resourceUrl = `${urlPrefix}/storefront/users/${userId}/dossiers/${dossierId}/items/`;\n\n const params = {\n method: 'DELETE',\n body: JSON.stringify(!selectAll ? dossierItemsIds : { selectAll }),\n };\n\n return fetchApi(resourceUrl, params);\n};\n\nexport const checkDossierName = async ({ dossierName, ratingType = ratingTypes.CREDIT_RATING }) => {\n const userId = getUserId();\n\n const params = { dossierName };\n\n const urlPrefix = serviceUrlPrefix[ratingType];\n const resourceUrl = `${urlPrefix}/storefront/users/${userId}/check-dossier-name/?${qs.stringify(\n params,\n )}`;\n\n try {\n return await fetchApi(resourceUrl).then(response => response.json());\n } catch (e) {\n throw new Error('Failed to verify portfolio name');\n }\n};\n\nexport const SIGUpdateDossier = async ({ dossierId, dossier }) => {\n const userId = getUserId();\n\n const params = {\n method: 'PUT',\n body: JSON.stringify({ dossierId, dossier }),\n };\n try {\n return await fetchApi(\n `/sig/api/storefront/users/${userId}/update-portfolio/`,\n params,\n ).then(response => response.json());\n } catch (e) {\n throw new Error('Failed to verify portfolio name');\n }\n};\n\nexport const toggleMonitoring = async ({ itemsIds, selectAll = false, sourceDossierId }) => {\n const params = {\n method: 'POST',\n body: JSON.stringify({\n items: !selectAll ? itemsIds : undefined,\n selectAll,\n sourceDossierId,\n }),\n };\n return fetchApi(`/sig/api/update_monitoring/`, params).then(response => response.json());\n};\n","import { Auth, AuthStateType } from '@scope/scope-one-common/types/auth';\nimport { LocalStorage } from '@scope/scope-one-common/utils/localStorage';\n\nexport const loadState = () => {\n try {\n const { type, data } = LocalStorage.getAuth();\n\n if (data === null) {\n return undefined;\n }\n\n return {\n auth: {\n isPending: false,\n type,\n data,\n error: null,\n },\n };\n } catch (err) {\n return undefined;\n }\n};\n\nexport const saveState = (state: Record<string, unknown>, type: AuthStateType) => {\n try {\n if (state) {\n LocalStorage.setAuth(state as Auth, type);\n } else {\n LocalStorage.clearAuth();\n }\n } catch (err) {\n throw new Error(err as string);\n }\n};\n\nexport const saveOnboardingState = (done: boolean) => {\n try {\n localStorage.setItem('scopeOne-onboardingDone', JSON.stringify(done));\n } catch (err) {\n throw new Error(err as string);\n }\n};\n\nexport const loadOnboardingState = (): boolean => {\n try {\n return !!localStorage.getItem('scopeOne-onboardingDone');\n } catch (err) {\n throw new Error(err as string);\n }\n};\n\nexport const saveWhatsNewReadState = (read: Array<string>) => {\n try {\n localStorage.setItem('scopeOne-whatsNew-readIds', JSON.stringify(read));\n } catch (err) {\n throw new Error(err as string);\n }\n};\n\nexport const loadWhatsNewReadState = (): Array<string> => {\n try {\n const localData = localStorage.getItem('scopeOne-whatsNew-readIds') || '[]';\n try {\n return JSON.parse(localData);\n } catch (error) {\n return [];\n }\n } catch (err) {\n throw new Error(err as string);\n }\n};\n\nexport const localStorageBookmark = 'bookmarked-home';\n\nexport const setBookmark = (homeAddress: string) =>\n localStorage.setItem(localStorageBookmark, homeAddress);\n\nexport const getBookmark = () => localStorage.getItem(localStorageBookmark);\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/),\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/instruments/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA',\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.',\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import { ApolloClient, createHttpLink, InMemoryCache } from '@apollo/client';\nimport { setContext } from '@apollo/client/link/context';\n\nimport { store } from 'store/store';\n\nconst httpLink = createHttpLink({\n uri: '/api/user-profile',\n});\n\nconst authLink = setContext((_, { headers }) => {\n const { token } = store.getState().auth.data;\n return {\n headers: {\n ...headers,\n authorization: token ? `Bearer ${token}` : '',\n },\n };\n});\n\nexport const apollo = new ApolloClient({\n link: authLink.concat(httpLink),\n // TODO [ZSz]: Do we really need cache? In most cases we would like to be sure we are fetching without cache\n cache: new InMemoryCache(),\n});\n","import i18n from 'i18next';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { initReactI18next } from 'react-i18next';\n\nimport en from 'translations/en';\nimport de from 'translations/de';\nimport enNotificationsCentre from 'modules/notificationsCentre/translations/en';\nimport deNotificationsCentre from 'modules/notificationsCentre/translations/de';\nimport enShop from 'modules/shop/translations/en';\nimport deShop from 'modules/shop/translations/de';\n\ni18n\n // detect user language\n // learn more: https://github.com/i18next/i18next-browser-languageDetector\n .use(LanguageDetector)\n // pass the i18n instance to react-i18next.\n .use(initReactI18next)\n // init i18next\n // for all options read: https://www.i18next.com/overview/configuration-options\n .init({\n whitelist: ['en', 'de'],\n resources: {\n en: {\n translation: {\n ...en,\n ...enNotificationsCentre,\n ...enShop,\n },\n },\n de: {\n translation: {\n ...de,\n ...deNotificationsCentre,\n ...deShop,\n },\n },\n },\n fallbackLng: 'en',\n nsSeparator: ';;', // Single ';' is used in alerts\n debug: false,\n });\n\nexport default i18n;\n","export default {\n IN_PROGRESS: 'In progress',\n ERROR: 'Error',\n PAGE_NOT_FOUND: 'Page not found',\n SORRY_SOMETHING_WENT_WRONG: 'Sorry, something went wrong',\n SORRY_SERVICE_UNAVAILABLE: 'Sorry, the services are temporarily unavailable.',\n SORRY_THE_PAGE_YOU_ARE_LOOKING_FOR_WAS_NOT_FOUND:\n \"The page you're looking for doesn't exist. We apologise for the inconvenience.\",\n WE_ARE_WORKING_ON_IT:\n \"We're working on a solution and we'll fix it as soon as possible. We apologise for the inconvenience.\",\n GO_BACK: 'Go back',\n ENTITIES: 'Entities',\n INSTRUMENTS: 'Instruments',\n FUNDS: 'Funds',\n REQUESTS: 'Requests',\n RATING_NEWS: 'Rating news',\n RESEARCH: 'Research',\n EVENTS: 'Events',\n UPLOADS: 'Uploads',\n APPLY_FILTERS: 'Apply Filters',\n SELECT_ALL_ITEMS: 'Select all {0} items',\n SHOW_MORE: 'Show more',\n SHOW_LESS: 'Show less',\n RANGE: 'Range',\n NO_VALUE: 'No value',\n HOME: {\n COVERED_BONDS: 'Covered bonds',\n },\n ADMIN: {\n USERS: {\n TITLE: 'Users',\n ADD_USER: 'Invite user',\n PROVIDE_EMAIL: 'Provide email address to invite new user',\n EDIT_USER: 'Permissions',\n REVOKE: 'Revoke All Ratings',\n REVOKE_ALL_CONFIRMATION_TITLE: 'Revoke All Ratings',\n REVOKE_ALL_CONFIRMATION_MESSAGE: 'Do you really want to revoke access to all ratings?',\n RESEND_INVITATION: 'Re-send invitation',\n },\n RATINGS: {\n TITLE: 'Ratings',\n ADD_USER: 'Assign User',\n EDIT_USER: 'Edit user',\n REVOKE_ALL_CONFIRMATION_TITLE: 'Revoke All Users',\n REVOKE_ALL_CONFIRMATION_MESSAGE: 'Do you really want to revoke access for all users?',\n },\n RATING_USERS: {\n PROVIDE_EMAIL: 'Provide email address to add existing user',\n APPROVE_ALL_CONFIRMATION_TITLE: 'Approve Selected Users',\n APPROVE_ALL_CONFIRMATION_MESSAGE:\n 'Do you really want to approve access for all selected users?',\n REVOKE_ALL_CONFIRMATION_TITLE: 'Revoke Selected Users',\n REVOKE_ALL_CONFIRMATION_MESSAGE:\n 'Do you really want to revoke access for all selected users?',\n },\n SNACKS: {\n USER_ADDED: 'New user invited successfully',\n USER_ADD_FAILED: 'Failed to invite user',\n USER_UPDATED: 'User updated',\n USER_UPDATE_FAILED: 'Failed to update user',\n RATING_USER_ADDED: 'User added',\n RATING_USER_ADD_FAILED: 'Failed to add user',\n USERS_REVOKED: 'User(-s) revoked',\n USERS_REVOKE_FAILED: 'Failed to revoke user(-s)',\n RATING_USERS_REVOKED: 'User(-s) revoked',\n RATINS_USERS_REVOKE_FAILED: 'Failed to revoke user(-s)',\n RATING_USERS_APPROVED: 'User(-s) approved',\n RATING_USERS_APPROVE_FAILES: 'Failed to approve user(-s)',\n REVOKED_ALL_RATING_USERS: 'All rating users revoked',\n REVOKE_ALL_RATING_USERS_FAILED: 'Failed to revoke all rating users',\n COFIRMATION_SET: 'Updated Subscriber Confirmation',\n COFIRMATION_FAILED: 'Subscriber Confirmation update failed',\n RATING_CONTRACT_TYPE_SET: 'Contract Type has been updated',\n RATING_CONTRACT_TYPE_FAILED: 'Contract Type update failed',\n },\n LOG: {\n DATE: 'Date',\n STATUS: 'Status',\n MODIFIED_BY: 'Modified by',\n },\n USER_STATUS: {\n INVITED: 'Invited',\n CONFIRMED: 'Confirmed',\n ACTIVE: 'Active',\n INACTIVE: 'inactive',\n UNCONFIRMED: 'Unconfirmed',\n BLOCKED: 'Blocked',\n DISABLED: 'Disabled',\n },\n RATING_STATUS: {\n APPROVED: 'Approved',\n REVOKED: 'Revoked',\n INVITED: 'Invited',\n },\n RSR: {\n SUBSCRIBER_CONFIRMATION: 'Confirmation',\n SET_SUBSCRIBER_CONFIRMATION: 'Set Subscriber Confirmation',\n CONFIRMATION_BLANK: 'Not set',\n CONFIRMATION_SENT: 'Sent',\n CONFIRMATION_SIGNED: 'Signed',\n CONTRACT_TYPE: 'Contract Type',\n INVESTOR_REQUESTED: 'Investor Requested',\n ISSUER_SOLICITED: 'Issuer Solicited',\n VIEW_DETAILS: 'View Details',\n VIEW_LOG: 'View Log',\n USER_RATINGS_LOG_TITLE: 'Status History Log',\n REVOKE_ALL_USERS: 'Revoke All Users',\n RESTRICTED_SUBSCRIPTION_RATINGS: 'Restricted Subscription ratings',\n RSR_NAME: 'Name',\n TYPE: 'Type',\n RATING_TYPE: 'Rating type',\n REVOKE: 'Revoke',\n APPROVE: 'Approve',\n SET_CONTRACT_TYPE: 'Set Contract Type',\n NO_OF_REGISTERED_USERS: 'No. of registered users',\n NAME: 'Name',\n ORGANISATION: 'Organisation',\n EMAIL: 'E-mail',\n ACCESSIBLE_RATINGS: 'Accessible ratings',\n APPROVED_RATINGS: 'Approved ratings',\n USER_STATUS: 'User status',\n STATUS: 'RSR Status',\n DATE: 'Date',\n AVAILABLE_RATINGS: 'Available ratings',\n ACCESS: 'Access',\n ENTITY_TYPE_ISSUE: 'Instrument',\n ENTITY_TYPE_ISSUER: 'Entity',\n },\n },\n PORTFOLIO: {\n UPLOADED_ITEMS: 'Uploaded items',\n VALIDATION_ERRORS: 'Validation errors',\n RENEWAL: 'Renewal',\n TYPE: 'Type',\n ISIN: 'ISIN',\n FUNDS: 'Funds',\n ITEMS: 'Items',\n LAST_ADDED: 'Last added',\n PORTFOLIO_NEWS: 'Portfolio news',\n NO_ITEMS: 'There are no items in this portfolio.',\n NO_ITEMS_DESC:\n 'You can add entities, instruments, rating news and research to portfolios list.',\n PORTFOLIO_SUMMARY: 'Portfolio summary',\n PORTFOLIO_COVERAGE: 'Portfolio coverage',\n EMPTY_PORTFOLIO_COVERAGE: 'Upload portfolio to see coverage',\n ESG_COVERAGE: 'ESG coverage',\n CREDIT_RATING_COVERAGE: 'Credit rating coverage',\n COMPANIES_BY_REGION: 'Companies by region',\n COMPANIES_BY_INDUSTRY: 'Companies by industry',\n PORTFOLIO: 'Portfolio',\n UPLOAD_DATE: 'Upload date',\n ENTITIES: 'Entities',\n INSTRUMENTS: 'Instruments',\n CREDIT_RATING: 'Credit rating',\n CREDIT_REVIEW: 'Credit\\n review',\n CREDIT_SCORE: 'Credit\\n assessment',\n FUNDS_ANALYSIS: 'Funds',\n FUNDS_PEERGROUP: 'Peergroup',\n FUNDS_RANK: 'Rank',\n FUNDS_RATING: 'Rating',\n FUNDS_RATING_POINTS: 'Rating points',\n FUNDS_RETURN: 'Return (p.a.)',\n FUNDS_RISK: 'Risk',\n ESG_IMPACT_REVIEW: 'ESG impact review',\n OVERVIEW: 'Overview',\n COVERAGE: 'coverage',\n NOTIFICATIONS: 'Notifications',\n ACTIVITY: 'Activity',\n AVAILABLE_ENTITIES: 'Available entities',\n COUNTRY: 'Country',\n INDUSTRY: 'Industry',\n ENVIRONMENTAL: 'Environmental',\n SOCIAL: 'Social',\n GOVERNANCE: 'Governance',\n CLIMATE_LOSS: 'Climate\\nLoss',\n PHYSICAL_RISK_LOSS: 'Physical\\nRisk Loss',\n TRANSITION_RISK_LOSS: 'Transition\\nRisk Loss',\n CREATE_PORTFOLIO: 'Create new portfolio',\n CREATE_PORTFOLIO_NAME: 'Portfolio name',\n CREATE_PORTFOLIO_DESCRIPTION: 'Add a description',\n UPLOAD_PORTFOLIO: 'Upload portfolio',\n UPDATE_PORTFOLIO: 'Update portfolio',\n DELETE_PORTFOLIO: 'Delete portfolio',\n RENAME_PORTFOLIO: 'Rename portfolio',\n DATE: 'Date',\n TITLE: 'Title',\n PORTFOLIO_DELETED: 'Portfolio(-s) deleted',\n NEW_PORTFOLIO_CREATED: 'New portfolio created',\n NOTIFICATIONS_ENABLED: 'Nofitications enabled',\n NOTIFICATIONS_DISABLED: 'Nofitications disabled',\n ITEMS_ADDED_TO_NEW_PORTFOLIO: 'Items added to new portfolio',\n UNABLE_TO_ADD_TO_NEW_PORTFOLIO: 'Unable to add entities to new portfolio',\n PORTFOLIO_NAME_WHITESPACE_WARNING: 'name cannot start or end with whitespace',\n UPLOADS_NAME: 'Name',\n UPLOADS_TYPE: 'Type',\n UPLOADS_CREATED: 'Created',\n UPLOADS_STATUS: 'Status',\n DATA_SOURCE: 'Data\\n source',\n CITY: 'City',\n POSTCODE: 'Post\\n code',\n RATING_TYPE: 'Rating\\n type',\n ENTITY_RATING: 'Entity\\n rating',\n OUTLOOK: 'Outlook',\n SORT_TERM_RATING: 'Short term\\n rating',\n ASSESSMENT: 'Assessment',\n CREDIT_ASSESMENT: 'Credit assesment',\n COUNTRY_RISK: 'Country\\n risk',\n UPDATE: 'Update',\n PROBABILITY_OF_DEFAULT: 'Probability\\n of default',\n DEMAND_TYPE: 'Demand\\n type',\n ALL_EVENTS: 'All Events',\n UNABLE_TO_REQUEST_SELECTED: 'Unable to request selected items.',\n YOU_CAN_NOT_REQUEST_MORE_THAN: 'You can not request more than',\n ITEMS_AT_ONCE: 'items at once.',\n ITEMS_COPIED_TO_NEW_PORTFOLIO: 'Items copied to new portfolio',\n ITEMS_MOVED_TO_NEW_PORTFOLIO: 'Items moved to new portfolio',\n RATING: 'Rating',\n RATING_TYPE_ONELINE: 'Rating type',\n ON_REQUEST: 'On Request',\n SUBSCRIPTION: 'Subscription',\n PUBLIC: 'Public',\n COUPON_RANGE: 'Coupon range',\n INVESTMENT_VOLUME: 'Investment volume',\n CURRENCY: 'Currency',\n POD: 'POD',\n TOTAL: 'Total',\n INDUSTRIES: 'Industries',\n SHORT_TERM_RATINGS: 'Short term ratings',\n COUNTRIES: 'Countries',\n MATURITY_DATE: 'Maturity date',\n ENTITY_RATING_SHOW_NO_VALUES: 'Show entities without ratings',\n INSTRUMENT_RATING_SHOW_NO_VALUES: 'Show instruments without ratings',\n PROBABILITY_OF_DEFAULT_ONELINE: 'Probability of default',\n FUND_PEERGROUP: 'Peergroup',\n FUND_RETURN_VALUE: 'Return value',\n FUND_RISK: 'Risk',\n FUND_RATING_POINTS: 'Rating points',\n FUND_RANK: 'Rank',\n },\n SEARCH: {\n SEARCH_FOR_ENTITIES_COUNTRIES_AND_INDUSTRIES:\n 'Search for entities by name, LEI, ISIN, country and industry',\n HAVENT_FOUND_WHAT_YOU_ARE_LOOKING_FOR: \"Haven't found what you're looking for?\",\n REFINE_YOUR_SEARCH: 'Refine your search',\n },\n ENTITY: {\n NAME: 'Entity name',\n EXTENDED_DATA: 'Extended Data',\n CREDIT_SCORE: 'Credit Assessment',\n ENTITY_RATING: 'Entity rating',\n DEMAND_TYPE: 'Demand type',\n RATING_TYPE: 'Rating type',\n INDUSTRY: 'Industry',\n COUNTRY: 'Country',\n LEI: 'LEI',\n THIS_SCORE_IS_NOT_YET_AVAILABLE: `This assessment is not yet available. Assessments are typically available within three business days. \n If the assessment does not appear in this period, please contact your personal advisor.`,\n ADDED: 'Added',\n LATEST_UPDATE: 'Latest update',\n PREVIOUS_RATING: 'Previous rating',\n PREVIOUS_OUTLOOK: 'Previous outlook',\n ULTIMATE_PARENT: 'Ultimate parent',\n SHORT_TERM_RATING: 'Short-term rating',\n PUBLIC_RATING: 'Public rating',\n SUBSCRIPTION_RATING: 'Subscription rating',\n RESTRICTED_SUBSCRIPTION_RATING: 'Restricted subscription rating',\n CHANGE_AS_OF_LATEST_RATING_ACTION: 'Change as of latest rating action',\n ACTIVITY: 'Activity',\n ACTIVITY_HINT: 'This column shows upgrades or downgrades during the last two weeks',\n FAILED_TO_EXPORT_ENTITIES: 'Failed to export entities',\n DOWNLOAD_TEMPLATE_FAIL: 'Failed to download sample portfolio template',\n UPLOAD_CUSTOM_DATA:\n 'To request a assessment for this company, please upload the necessary financials',\n CUSTOM_DATA_UPLOADED: 'In progress',\n DATA_SOURCE_USER: 'User',\n DATA_SOURCE_SCOPE: 'Scope',\n },\n TOOLBAR: {\n ADD_TO_PORTFOLIO: 'Add to portfolio',\n COPY_TO_PORTFOLIO: 'Copy to portfolio',\n MOVE_TO_PORTFOLIO: 'Move to portfolio',\n REQUEST_SELECTED: 'Request selected',\n EXPORT_TO_EXCEL: 'Export to Excel',\n EXPORT_VIEW_TO_EXCEL: 'Export View',\n EXPORT_FULL_DATA_TO_EXCEL: 'Export Full Data',\n EXPORT_STARTED: 'Export requested. Open Notification Center to download the file.',\n TOGGLE_MONITORING: 'Toggle monitoring',\n DELETE: 'Delete',\n SHARE: 'Share',\n CREATE_NEW_PORTFOLIO: 'Create new portfolio',\n EXPORT_DISABLED_HINT:\n 'Exporting is not available in free trial. Please contact your personal advisor or the Service Center to upgrade your account.',\n },\n COVERED_BONDS: {\n NAME: 'Instrument name',\n ISIN: 'ISIN',\n ENTITY_NAME: 'Entity',\n COUNTRY: 'Country',\n TYPE: 'Type',\n DEMAND_TYPE: 'Demand type',\n RATING: 'Rating',\n SENIORITY_TYPE: 'Seniority',\n OUTLOOK: 'Outlook',\n INSTRUMENT_VALUE: 'Volume',\n ALL: 'All',\n ALL_COUNTRIES: 'All countries',\n COVERED_BONDS: 'Covered bonds',\n },\n CREDIT_SPHERE: {\n INVITATION_CARD_TITLE: 'Credit Sphere is here',\n INVITATION_CARD_DESC:\n 'Gain access to a growing number of 600+ rated entities in the sectors of Corporates, Banks and Sovereigns & Public Sector. Use our credit ratings for any purpose within your organisation.',\n INVITATION_CARD_YES: 'Go to shop',\n INVITATION_CARD_NO: 'Not now',\n },\n CREDIT_REVIEW: {\n CREDIT_REVIEW: 'Credit Review',\n CREDIT_REVIEW_REQUESTS: 'Credit Review requests',\n FREE_TRIAL_INVITATION_CARD_TITLE: 'Credit Review - Free Trial',\n FREE_TRIAL_INVITATION_CARD_DESC:\n 'Reduce risk in your portfolio management strategy! Credit Review is your primary early warning system for corporate credit quality giving you total coverage through:\\n\\n- Risk knowledge\\n- Monitoring & warning service\\n- Dissemination & communication\\n- Response capability',\n FREE_TRIAL_INVITATION_MODAL_NO: 'Not now',\n FREE_TRIAL_INVITATION_MODAL_YES: 'Go to subscriptions',\n ACTIVATE_YOUR_CREDIT_REVIEW_FREE_TRIAL_NOW: 'Activate your Credit Review Free Trial now!',\n MONITORING_CHANGE_SUCCESS:\n 'Monitoring change requested successfully. It may take a while before the status is updated.',\n MONITORING_PENDING:\n 'Requested monitoring change is pending. It may take a while before the status is updated.',\n },\n ESG: {\n NEXT_IMPACT_BY_REG_IND: 'Net externality impact by region and industry',\n FAILED_TO_DOWNLOAD_SAMPLE_TEMPLATE: 'Failed to download sample template',\n FAILED_TO_UPLOAD_COMPANIES: 'Failed to load companies',\n SCORING_TOOL: 'Create companies',\n SCORING_TOOL_DESC_1:\n 'The upload of your companies will create the entries for the entities that have been identified from the upload file.',\n SCORING_TOOL_DESC_2:\n 'To prepare the upload, please create a list of entities, using the template below. To finalise the companies upload, please click the \"Next\" button.',\n SCORING_TOOL_SUCCESS: 'Companies have been uploaded successfully.',\n SENTIMENT_REQUESTS: 'ESG Sentiment requests',\n IMPACT_REVIEW_SCORE: 'Impact review',\n CUSTOM_SCORE_TOOLTIP: 'Financial data provided by user',\n PORTFOLIO_UPLOAD: {\n INFO_1:\n 'The upload of your portfolio will allow you to calculate the ESG impact score of this particular portfolio, based on the available scores.',\n INFO_2:\n 'To prepare the upload, please create an upload file similar to the template provided below and upload it to ScopeOne following the portfolio wizard below.',\n INFO_3:\n 'ESG Impact is only available for Corporates, any other entities will be added to your Portfolio but not available for requesting.',\n STEP_SCORES_AVAILABLE: 'Entities with ESG Score in our Systems.',\n STEP_SCORES_MISSING: 'Entities in our Systems without ESG Score.',\n STEP_COMPANIES_MISSING: `Entities that couldn't be identified. Please review and amend the file. \n These items won't be included in the selected portfolio. \n You can however use the following Template to include them in your ESG SCORING TOOL.`,\n STEP_NO_COMPANIES_MISSING: 'Unidentified entities.',\n DOWNLOAD_UNIDENTIFIED_ELEMENTS: 'Download a list of unidentifiable elements',\n FAILED_DOWNLOAD_PORTFOLIO_TEMPLATE: 'Failed to download sample portfolio template',\n FAILED_DOWNLOAD_MISSING_ELEMENTS_TEMPLATE: 'Failed to download list of missing elements',\n CREATE_PORTFOLIO: 'Create a portfolio to add the above file',\n SELECT_PORTFOLIO: 'Select portfolio',\n GOTO_PORTFOLIOS: 'Go to portfolio',\n STATUS_FAILED: 'FAILED',\n },\n ENTITY_REMOVAL_CONFIRMATION: 'Remove selected companies',\n ENTITY_REMOVAL_CONFIRMATION_DESC:\n \"This change can't be undone. If you want to access this score after deleting this company, you will have to create it and upload the financial statements again. Are you sure you want to continue?\",\n SCORE_REQUEST: {\n TITLE: 'Request ESG Score',\n REQUEST_FAILED: 'Request failed due to following reasons:',\n },\n SCORE_REQUESTING: {\n SUMMARY_TAB_REQUEST: `ESG Score is not available, yet. \n Financial Statement has already been provided. \n We are working on calculating ESG Score for you.`,\n SUMMARY_TAB_REQUESTED: `ESG Score is not available for this company. \n You can provide Financial Statement, and we will calculate it for you.`,\n SUMMARY_TAB_UNLOCK_TOOLS: `ESG Score is not available for this company.`,\n SUMMARY_TAB_UNLOCK_RATINGS:\n 'ESG data is available. Please subscribe to unlock access to our resources.',\n SCORING_TOOL_NO_PERMISSION: 'You have no permission to subscribe to ESG Scoring Tool.',\n SCORE_NOT_AVAILABLE: 'ESG Score is not available for this entity',\n SOMETHING_WENT_WRONG: 'Something went wrong. Please contact our support to get assistance.',\n },\n MISSING_FINANCIAL_STATEMENT: 'Missing financial statement',\n ONLY_AVAILABLE_FOR_CORPORATES: 'ESG Impact is only available for Corporates',\n LENDING_PORTFOLIO_DATA: 'Lending portfolio by region and industry',\n EXPOSURE_BY_REGION: 'Exposure by region',\n EXPOSURE_BY_INDUSTRY: 'Exposure by industry',\n LENDING_PORTFOLIO_IMPACT: 'Impact of the lending portfolio',\n IMPACT_BY_COUNTRY: 'Impact by country',\n IMPACT_BY_INDUSTRY: 'Impact by industry',\n },\n SENTIMENT: {\n SCORE_NOT_AVAILABLE: 'ESG Sentiment Score is not available for this entity.',\n },\n PORTFOLIO_UPLOAD: {\n STATUS_FAILED: 'FAILED',\n TITLE: `Portfolio Upload`,\n QUESTION_1: 'What do you want to upload?',\n INFO_1_1: 'The portfolio upload allows you to add',\n INFO_1_2: 'entities & instruments',\n OR: 'or',\n FUNDS: 'funds',\n INFO_1_3: 'to an existing or new portfolio. Please choose type of upload.',\n PREVIOUS: 'Previous',\n ENTITIES_PORTFOLIO_UPLOAD: 'Entities/Bonds portfolio upload',\n FUNDS_PORTFOLIO_UPLOAD: 'Funds portfolio upload',\n UPLOAD_PORTFOLIO: 'Upload Portfolio',\n INFO_ENTITIES_2_1:\n 'The portfolio upload allows you to add entities and instruments to an existing or new portfolio',\n INFO_FUNDS_2_1: 'The portfolio upload allows you to add funds to an existing or new portfolio',\n CREATE_NEW_PORTFOLIO: 'Create new portfolio',\n TYPE_PORTFOLIO_NAME: 'Type portfolio name here',\n ADD_TO_EXISTING_PORTFOLIO: 'Add to existing portfolio',\n DOWNLOAD_INFO_1: 'Download provided template',\n DOWNLOAD_INFO_2: ' and select .csv, .xls, .xlsx\\n file from your device',\n DOWNLOAD_TEMPLATE: 'Download template',\n ADD_TO_ISIN: 'Add entities related to ISIN identified instruments to the portfolio',\n SELECT_FILE: 'Select file',\n INFO_1: `The portfolio upload allows you to add entities to an existing or new portfolio.`,\n INFO_2: `Please use the template provided and select a file from your computer.`,\n INFO_3: ``,\n STEP_SCORES_AVAILABLE: `Success.\\n Your file has been uploaded.\\n Have ratings or scores that are immediately available for you.`,\n STEP_SCORES_MISSING: `The above number of entities could not be identified.`,\n STEP_COMPANIES_MISSING: `STEP_COMPANIES_MISSING`,\n STEP_NO_COMPANIES_MISSING: `STEP_NO_COMPANIES_MISSING`,\n SCORES_SIDE_NOTES: ``,\n UPLOADING_PORTFOLIO: 'Uploading portfolio...',\n YOU_WILL_BE_NOTIFIED: 'You will be notified when processing has finished.',\n SUMMARY_MAIN: `Your portfolio has been uploaded successfully.`,\n SUMMARY_SIDE_NOTES: `If you have questions concerning the upload, please contact the service center or your personal advisor via chat, email or telephone.`,\n\n ADD_INSTRUMENTS: `Add entities related to ISIN identified instruments to the portfolio`,\n DOWNLOAD_UNIDENTIFIED_ELEMENTS: `Click here to download the list of entities`,\n FAILED_DOWNLOAD_PORTFOLIO_TEMPLATE: `Failed to download sample portfolio template`,\n FAILED_DOWNLOAD_MISSING_ELEMENTS_TEMPLATE: `Failed to download list of missing elements`,\n CREATE_PORTFOLIO: `Create a portfolio or select an existing portfolio to upload your data.`,\n SELECT_PORTFOLIO: `Select portfolio`,\n GOTO_PORTFOLIOS: `Go to portfolio`,\n STATUS_ERROR: 'ERROR',\n STATUS_FINISHED: 'UPLOADED',\n STATUS_UPLOADING: 'Uploading...',\n },\n SHOP: {\n CHECKOUT: {\n TERMS_AND_CONDITIONS: 'Terms and Conditions',\n READ_AND_ACCEPT: 'I have read and accept ',\n OF_PRODUCT: ' of ',\n AND_CONFIRM: ' and confirm that I am authorised to execute this purchase.',\n TERMS_DOWNLOAD_FAILED: 'Failed to get T&C document. Please try again or contact support.',\n },\n },\n UPLOAD: {\n FILE_FORMAT: 'File format',\n MAX_SIZE: 'Max size',\n COLUMNS: 'Column heading',\n UPLOAD_SELECTED: 'The file selected below will be uploaded.',\n CHANGE_FILE: 'Change File',\n OUT_OF: 'out of',\n STEP_ONE: 'Coverage',\n STEP_TWO: 'Not Identified',\n STEP_THREE: 'Step three',\n BROWSE: 'Browse',\n NO_FILE_SELECTED: 'No file selected',\n FILE_TOO_LARGE: 'File is too large. Please upload a file below {0} MB.',\n },\n VIEW_DOCUMENTS: 'View documents',\n DOCUMENTS: 'Documents',\n CREATE_COMPANIES: 'Create Companies',\n UNLOCK: 'Unlock',\n NEXT: 'Next',\n PREVIOUS: 'Previous',\n CANCEL: 'Cancel',\n CONFIRM: 'Confirm',\n SAVE: 'Save',\n SUBMIT: 'Submit',\n DONE: 'Done',\n CONTINUE: 'Continue',\n DOWNLOAD_TEMPLATE: 'Download template',\n ERRORS: 'Errors',\n CREATE: 'Create',\n UPDATE: 'Update',\n ADD: 'Add',\n COPY: 'Copy',\n MOVE: 'Move',\n SUCCESS: 'Success',\n UNEXPECTED_ERROR: 'Unexpected error',\n OTHER: 'other',\n UNKNOWN: 'Unknown',\n NO_ITEMS_FOUND: 'Sorry, no matching records found.',\n PORTFOLIO_EVENTS: {\n NAME: 'Name',\n DATE: 'Date',\n CATEGORY: 'Category',\n REGION: 'Region',\n INDUSTRY: 'Industry',\n },\n};\n","export default {\n NOTIFICATIONS_CENTRE: {\n NO_NOTIFICATIONS: 'No notifications to display',\n WIDGET: {\n TITLE: 'My notifications',\n EMPTY: 'There are no notifications yet.',\n },\n TYPES: {\n ACCOUNT_NOTIFICATION: 'Account notification',\n SYSTEM_UPDATE: 'System update',\n RESPONSE: 'Response',\n WHATS_NEW: \"What's new\",\n DOWNLOADS: 'Your Downloads',\n UPLOADS: 'Your Uploads',\n },\n DOWNLOAD: 'Download',\n NEW: 'New',\n READY_TO_DOWNLOAD: 'is ready to download',\n },\n};\n","export default {\n CHECKOUT: {\n TERMS_AND_CONDITIONS: 'Terms and Conditions',\n READ_AND_ACCEPT: 'I have read and accept ',\n OF_PRODUCT: ' of ',\n TERMS_DOWNLOAD_FAILED: 'Failed to get T&C document. Please try again or contact support.',\n },\n SUBSCRIPTIONS: {\n CATEGORY: 'Category',\n REGION: 'Region',\n GLOBAL: 'Global',\n SEGMENT: 'Segment',\n ALL: 'All',\n INDUSTRY: 'Industry',\n VARIOUS: 'Various',\n SUBSCRIBED: 'Subscribed',\n GET_FREE_TRIAL: 'Get free Trial',\n GET_STARTED: 'Get started',\n MORE_INFO: 'More info',\n ADD_TO_BASKET: 'Add to basket',\n },\n};\n","export default {};\n","export default {};\n","export default {};\n","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport * as Sentry from '@sentry/browser';\nimport * as serviceWorker from 'serviceWorker';\n\nimport { MessagesProvider } from '@scope/scope-one-ui/core';\nimport { ApolloProvider } from '@apollo/client';\nimport { App } from 'modules/common';\nimport { store } from 'store/store';\nimport { apollo } from 'apollo';\nimport './i18n';\n\nrequire('dotenv').config();\n\nSentry.init({ dsn: process.env.REACT_APP_SENTRY_URL });\n\nReactDOM.render(\n <MessagesProvider>\n <ApolloProvider client={apollo}>\n <Provider store={store}>\n <App />\n </Provider>\n </ApolloProvider>\n </MessagesProvider>,\n document.getElementById('root'),\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import { artifactTypes } from 'shared/constants/artifactTypes';\n\nexport const newsFeedTypes = {\n RATING_NEWS: 'RATING_NEWS',\n RESEARCH: 'RESEARCH',\n COMPANY_NEWS: 'COMPANY_NEWS',\n};\n\nexport const newsToArtifactTypes = {\n RATING_NEWS: [artifactTypes.RATING_NEWS, artifactTypes.MONITORING_NOTES],\n RESEARCH: [artifactTypes.RESEARCH, artifactTypes.COMMENTARY],\n COMPANY_NEWS: [artifactTypes.COMPANY_NEWS],\n};\n\nexport const newsFeedTypesLabels = {\n RATING_NEWS: 'Rating news',\n RESEARCH: 'Research news',\n COMPANY_NEWS: 'Company news',\n};\n","import { makeStyles } from '@mui/styles';\n\nexport const useGroupedAutocompleteStyles = makeStyles(theme => ({\n option: { paddingLeft: theme.spacing(4) },\n}));\n","export enum EnvironmentTypes {\n DEVELOPMENT = 'development',\n TESTING = 'testing',\n PRODUCTION = 'production',\n}\n","export const GET_CREDIT_REVIEW_CONTRACT_DATA = 'GET_CREDIT_REVIEW_CONTRACT_DATA';\nexport const GET_CREDIT_REVIEW_CONTRACT_DATA_SUCCESS = 'GET_CREDIT_REVIEW_CONTRACT_DATA_SUCCESS';\nexport const GET_CREDIT_REVIEW_CONTRACT_DATA_ERROR = 'GET_CREDIT_REVIEW_CONTRACT_DATA_ERROR';\n\nexport const getCreditReviewContractDataAction = {\n type: GET_CREDIT_REVIEW_CONTRACT_DATA,\n};\n","export const outlookTypes = {\n NONE: 'none',\n STABLE: 'stable',\n NEGATIVE: 'negative',\n POSITIVE: 'positive',\n};\n\nexport const outlookLabels = {\n [undefined]: 'N/A',\n [null]: 'N/A',\n [outlookTypes.NONE]: 'none',\n [outlookTypes.STABLE]: 'stable',\n [outlookTypes.NEGATIVE]: 'negative',\n [outlookTypes.POSITIVE]: 'positive',\n};\n","class CreditRatingError extends Error {\n constructor({ message = '', status, error }, ...params) {\n super(params);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, CreditRatingError);\n }\n\n this.message = message;\n this.status = status;\n this.error = error;\n }\n}\n\nexport { CreditRatingError };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { ErrorPage } from 'scenes';\n\nclass ErrorBoundary extends React.Component {\n constructor(props) {\n super(props);\n this.state = { hasError: false };\n }\n\n static getDerivedStateFromError() {\n return { hasError: true };\n }\n\n render() {\n const { children, showErrorPage } = this.props;\n const { hasError } = this.state;\n\n if (hasError) {\n return showErrorPage ? <ErrorPage /> : null;\n }\n\n return children;\n }\n}\n\nErrorBoundary.defaultProps = {\n showErrorPage: false,\n};\n\nErrorBoundary.propTypes = {\n children: PropTypes.node.isRequired,\n showErrorPage: PropTypes.bool,\n};\n\nexport { ErrorBoundary };\n","export const contactTypes = {\n MESSAGE: 'contactcentre',\n CALL: 'talkToScope',\n};\n\nexport const contactTargets = {\n PERSONAL_ADVISER: 'PERSONAL_ADVISER',\n ANALYST: 'ANALYST',\n SERVICE_CENTRE: 'SERVICE_CENTRE',\n};","export enum Activity {\n Downgrade,\n Upgrade,\n FirstScore,\n Affirmation,\n None,\n Stable,\n}\n\nexport const activityMappingCreditReview = {\n Downgrade: Activity.Downgrade,\n Upgrade: Activity.Upgrade,\n FirstScore: Activity.FirstScore,\n};\n\nexport const activityMappingCreditRating = {\n DOWN: Activity.Downgrade,\n UP: Activity.Upgrade,\n FIRST_SCORE: Activity.FirstScore,\n};\n\nexport const activityMappingGeneric = {\n downgrade: Activity.Downgrade,\n upgrade: Activity.Upgrade,\n new: Activity.FirstScore,\n};\n\nexport const activityMappingPortfolioItems = {\n NO_ACTIVITY: Activity.None,\n NEW: Activity.FirstScore,\n UPGRADE: Activity.Upgrade,\n DOWNGRADE: Activity.Downgrade,\n AFFIRMATION: Activity.Affirmation,\n STABLE: Activity.Stable,\n};\n\nexport const activityLabels: Record<Activity, string> = {\n [Activity.Downgrade]: 'Downgrade',\n [Activity.Upgrade]: 'Upgrade',\n [Activity.FirstScore]: 'New',\n [Activity.Affirmation]: 'Affirmation',\n [Activity.Stable]: 'Stable',\n [Activity.None]: '',\n};\n","export const permissionsTypes = {\n A_ANOP_VIEW_ROLES_MANAGEMENT: 'A_ANOP_VIEW_ROLES_MANAGEMENT',\n CA_VIEW_DOSSIER: 'CA_VIEW_DOSSIER',\n CA_SEARCH_ORDER_ITEMS: 'CA_SEARCH_ORDER_ITEMS',\n CA_VIEW_LEADERBOARD: 'CA_VIEW_LEADERBOARD',\n CA_VIEW_RATING_COVERAGE: 'CA_VIEW_RATING_COVERAGE',\n CA_VIEW_RECENT_RATINGS: 'CA_VIEW_RECENT_RATINGS',\n CA_VIEW_RECENT_DOSSIER: 'CA_VIEW_RECENT_DOSSIER',\n CA_RSR_CONFIG: 'CA_RSR_CONFIG',\n SSO_MASTER_PASSWORD: 'SSO_MASTER_PASSWORD',\n SSO_VIEW_USER_ANALYST_DATA: 'SSO_VIEW_USER_ANALYST_DATA',\n SSO_VIEW_ORGANISATIONS_LIST: 'SSO_VIEW_ORGANISATIONS_LIST',\n};\n","import xlsx from 'xlsx';\nimport { saveAs } from 'file-saver';\nimport qs from 'qs';\n\nimport { fetchApi, formatDate } from 'shared/functions';\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { serviceUrlPrefix } from 'utils';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { exportModes } from '../../shared/constants/exportModes';\n\nconst typeToPath = {\n [orderTypes.INSTRUMENT]: 'issues',\n [orderTypes.ENTITY]: 'issuers',\n [orderTypes.SIG_ENTITY]: 'issuers',\n};\n\ntype ExportServiceParams = {\n items: string[];\n type: string;\n onError: (error: string) => void;\n onSuccess?: (message: string) => void;\n ratingType?: ratingTypes;\n dossierId?: string;\n selectAll?: boolean;\n mode?: string;\n};\n\nexport const exportService = async ({\n items,\n type,\n onError,\n ratingType = ratingTypes.CREDIT_RATING,\n dossierId = undefined,\n selectAll = false,\n mode = exportModes.BASIC,\n}: ExportServiceParams) => {\n const path = typeToPath[type];\n\n const urlPrefix = serviceUrlPrefix[ratingType];\n\n const resourceUrl =\n ratingType === ratingTypes.ESG_IMPACT\n ? `${urlPrefix}/companies/export`\n : `${urlPrefix}/storefront/${path}/export/`;\n\n const body = JSON.stringify(\n ratingType === ratingTypes.CREDIT_REVIEW && type === orderTypes.SIG_ENTITY\n ? {\n issuers: selectAll ? undefined : items,\n dossierId,\n selectAll,\n }\n : items,\n );\n\n const params = {\n method: 'POST',\n body,\n query: { exportMode: mode },\n };\n\n try {\n const response = await fetchApi(resourceUrl, params);\n\n if (!response.ok) {\n onError(response.statusText);\n return;\n }\n\n const blob = await response.blob();\n saveAs(blob, `${path}-${formatDate(new Date(), 'dd-MM-yyyy')}.xlsx`);\n } catch (e) {\n onError(e as string);\n }\n};\n\nexport const asyncExportService = async ({\n items,\n onError,\n onSuccess,\n ratingType = ratingTypes.CREDIT_RATING,\n mode = exportModes.BASIC,\n}: ExportServiceParams) => {\n const urlPrefix = serviceUrlPrefix[ratingType];\n\n const url = `${urlPrefix}/companies/export`;\n const body = JSON.stringify(items);\n\n const params = {\n method: 'POST',\n body,\n query: { exportMode: mode },\n };\n\n try {\n const response = await fetchApi(url, params);\n\n if (!response.ok) {\n onError(response.statusText);\n return;\n }\n\n if (onSuccess) {\n const respText = await response.text();\n onSuccess(respText);\n }\n } catch (e) {\n onError(e as string);\n }\n};\n\nexport const exportToExcel = ({ fileName, workbookName, columns, data }: any) => {\n const worksheet = xlsx.utils.aoa_to_sheet([columns, ...data]);\n const workbook = xlsx.utils.book_new();\n\n xlsx.utils.book_append_sheet(workbook, worksheet, workbookName);\n xlsx.writeFile(workbook, `${fileName}-${formatDate(new Date(), 'dd-MM-yyyy')}.xlsx`);\n};\n\ntype ExportEntitiesParams = {\n items: string[];\n onError?: (error: string) => void;\n onSuccess?: (message: string) => void;\n ratingType?: ratingTypes;\n portfolioId: string;\n selectedAll?: boolean;\n exportMode?: string;\n};\n\nexport const exportEntities = async ({\n items,\n onError = () => {},\n onSuccess = () => {},\n ratingType,\n portfolioId,\n selectedAll = false,\n exportMode = exportModes.BASIC,\n}: ExportEntitiesParams) => {\n const modules = {\n overview: {\n url: `/user-profile/portfolios/excel-export/${portfolioId}?exportType=overview`,\n body: { items: selectedAll ? [] : items },\n },\n [ratingTypes.CREDIT_RATING]: {\n url: `/user-profile/portfolios/excel-export/${portfolioId}?exportType=creditRating`,\n body: { items: selectedAll ? [] : items },\n },\n [ratingTypes.CREDIT_REVIEW]: {\n url: `/user-profile/portfolios/excel-export/${portfolioId}?exportType=creditReview`,\n body: { items: selectedAll ? [] : items },\n },\n [ratingTypes.ESG_IMPACT]: {\n url: `/user-profile/portfolios/excel-export/${portfolioId}?exportType=esg&exportMode=${exportMode}`,\n body: { items: selectedAll ? [] : items },\n },\n [ratingTypes.CLIMATE_STRESS_TEST]: {\n url: `/user-profile/portfolios/excel-export/${portfolioId}?exportType=climateStressTest&exportMode=${exportMode}`,\n body: { items: selectedAll ? [] : items },\n },\n [ratingTypes.FUNDS]: {\n url: `/user-profile/portfolios/excel-export/${portfolioId}?exportType=funds&exportMode=${exportMode}`,\n body: { items: selectedAll ? [] : items },\n },\n };\n\n const { url, body } = ratingType ? modules[ratingType] : modules.overview;\n\n try {\n const response = await fetchApi(url, {\n method: 'POST',\n body: JSON.stringify(body.items),\n });\n\n if (!response.ok) {\n onError(response.statusText);\n return;\n }\n\n const respText = await response.text();\n onSuccess(respText);\n } catch (e) {\n onError('Unable to export entities.');\n }\n};\n\nexport const exportIndustries = async ({\n items,\n onError = () => {},\n onSuccess = () => {},\n portfolioId,\n selectedAll = false,\n}: ExportEntitiesParams) => {\n const url = `/user-profile/portfolios/excel-export/${portfolioId}?exportType=instruments`;\n const body = { items: selectedAll ? [] : items };\n\n try {\n const response = await fetchApi(url, {\n method: 'POST',\n body: JSON.stringify(body.items),\n });\n\n if (!response.ok) {\n onError(response.statusText);\n return;\n }\n\n const respText = await response.text();\n onSuccess(respText);\n } catch (e) {\n onError('Unable to export instruments.');\n }\n};\n\ntype ExportCoveredBondsParams = {\n items?: string[];\n countries?: string[];\n onError?: (error: string) => void;\n selectedAll?: boolean;\n};\n\nexport const exportCoveredBonds = async ({\n items,\n countries,\n onError,\n selectedAll,\n}: ExportCoveredBondsParams) => {\n const countryParam = countries ? `?filters=${JSON.stringify({ countries })}` : '';\n const url = `/storefront/issues/coveredbonds/export${qs.stringify(countryParam)}`;\n\n const body = items && !selectedAll ? JSON.stringify(items) : undefined;\n\n const params = {\n method: 'POST',\n body,\n };\n\n try {\n const response = await fetchApi(url, params);\n\n if (!response.ok) {\n if (onError) {\n onError(response.statusText);\n }\n return;\n }\n\n const blob = await response.blob();\n saveAs(blob, `covered-bonds-${formatDate(new Date(), 'dd-MM-yyyy')}.xlsx`);\n } catch (e) {\n if (onError) {\n onError(e as string);\n }\n }\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport CircularProgress from '@mui/material/CircularProgress';\nimport { makeStyles } from '@mui/styles';\n\nconst useStyle = makeStyles(() => ({\n root: {\n position: 'relative',\n width: '100vw',\n height: '100vh',\n },\n center: {\n textAlign: 'center',\n width: '100%',\n },\n cover: {\n position: 'absolute',\n justifyContent: 'center',\n alignItems: 'center',\n display: 'flex',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n background: 'rgba(255,255,255,.6)',\n zIndex: 111,\n },\n circle: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n },\n}));\n\nconst Loader = ({ center, cover, size, classes }) => {\n const loaderClasses = useStyle();\n const classNames = clsx(\n {\n [loaderClasses.center]: center,\n [loaderClasses.cover]: cover,\n },\n classes,\n );\n return (\n <div className={classNames}>\n <CircularProgress style={{ width: size, height: size }} />\n </div>\n );\n};\n\nLoader.defaultProps = {\n classes: undefined,\n center: false,\n cover: false,\n size: 40,\n};\n\nLoader.propTypes = {\n classes: PropTypes.string,\n center: PropTypes.bool,\n cover: PropTypes.bool,\n size: PropTypes.number,\n};\n\nconst FullPageLoader = () => {\n const classes = useStyle();\n return (\n <div className={classes.root}>\n <div className={classes.circle}>\n <Loader />\n </div>\n </div>\n );\n};\n\nexport { Loader, FullPageLoader };\n","import qs from 'qs';\nimport { fetchApi, getOrganisationId, getUserId } from 'shared/functions';\n\nexport const fetchAnalysts = ({ query } = {}) => {\n const organisationId = getOrganisationId();\n const userId = getUserId();\n\n const params = {\n page: 1,\n start: 0,\n limit: 100,\n filter:\n '[{\"property\":\"followed\",\"direction\":\"DESC\",\"priority\":\"1\"},{\"property\":\"firstName\",\"direction\":\"ASC\",\"priority\":\"2\"},{\"property\":\"name\",\"direction\":\"ASC\",\"priority\":\"3\"}]',\n ...(query && { query }),\n };\n\n return fetchApi(\n `/sso/organisations/${organisationId}/users/${userId}/analysts?${qs.stringify(params)}`,\n ).then(response => response.json());\n};\n","import { fetchApi, getUserId } from 'shared/functions';\n\nexport const contactBoxService = ({ subject, message, origin, type, target }) => {\n const userId = getUserId();\n\n const resourceUrl = `/storefront/users/${userId}/${type}`;\n\n const params = {\n method: 'POST',\n body: JSON.stringify({ subject, message, origin, target }),\n };\n\n return fetchApi(resourceUrl, params);\n};\n","import sortBy from 'lodash/sortBy';\nimport { fetchApi } from 'shared/functions';\n\nexport const fetchCountries = () =>\n fetchApi(`/storefront/config/countries`)\n .then(response => response.json())\n .then(({ data }) => sortBy(data, 'name'));\n\nexport const fetchEntitiesCountries = ({ query }) =>\n fetchApi(`/storefront/issuers/countries?query=${query}`)\n .then(response => response.json())\n .then(({ data }) => sortBy(data, 'name'));\n\nexport const fetchInstrumentsCountries = ({ query }) =>\n fetchApi(`/storefront/issues/countries?query=${query}`)\n .then(response => response.json())\n .then(({ data }) => sortBy(data, 'name'));\n\nexport const fetchEsgRegions = () =>\n fetchApi(`/esg/api/esg-regions/`)\n .then(response => response.json())\n .then(({ data }) => sortBy(data, 'name'));\n\nexport const fetchCountryRegions = ({ iso }) => {\n const resourceUrl = '/sig/api/regions/';\n const params = {\n method: 'POST',\n body: JSON.stringify({ iso }),\n };\n\n return fetchApi(resourceUrl, params).then(response => response.json());\n};\n","export const getMethodologyPath = id => `/storefront/document/methodology/${id}`;\n","import { fetchApi } from 'shared/functions';\n\nexport const fetchMostOrderedItems = () =>\n fetchApi(`/storefront/most_ordered_items`)\n .then(response => response.json())\n .then(({ data }) => data);\n","import { artifactTypes } from 'shared/constants/artifactTypes';\nimport { emailFrequencies } from './emailFrequencies';\nimport { newsletterFrequencies } from './newsletterFrequencies';\n\nexport const defaultPreferences = {\n data: {\n preferences: {\n emailNotifications: {\n frequency: emailFrequencies.DISABLED,\n type: [],\n },\n newsFeed: {\n classifications: [],\n limitToFollowedAnalysts: false,\n news: [\n artifactTypes.RATING_NEWS,\n artifactTypes.MONITORING_NOTES,\n artifactTypes.RESEARCH,\n artifactTypes.COMMENTARY,\n artifactTypes.COMPANY_NEWS,\n ],\n },\n newsletter: {\n classifications: [],\n frequency: newsletterFrequencies.WEEKLY,\n limitToFollowedAnalysts: false,\n news: [],\n useNewsFeedPreferences: true,\n },\n },\n },\n};\n","import qs from 'qs';\nimport isEmpty from 'lodash/isEmpty';\nimport { fetchApi, getUserId, getOrganisationId } from 'shared/functions';\nimport { defaultPreferences } from 'shared/constants/news/defaultPreferences';\n\nexport const fetchArtifacts = async ({\n entityId,\n query,\n filters,\n type,\n page,\n limit,\n industryCode,\n}) => {\n const userId = getUserId();\n\n const params = {\n page,\n limit,\n };\n\n const innerFilters =\n filters && !isEmpty(filters)\n ? `,${Object.keys(filters)\n .map(key => {\n const val = filters[key];\n const valStr = JSON.stringify(val);\n const value = Array.isArray(val) ? valStr : `\"${valStr}\"`;\n return `{\"property\": \"${key}\", \"value\": ${value}}`;\n })\n .join(',')}`\n : '';\n\n const filtersMap = {\n ENTITY_RATING_NEWS: `[{\"property\":\"issuerIds\",\"value\":[\"${entityId}\"]},\n {\"property\":\"type\",\"value\":[\"RATING_NEWS\",\"MONITORING_NOTES\"]}${innerFilters}]`,\n RATING_NEWS: `[{\"property\":\"type\",\"value\":[\"RATING_NEWS\", \"MONITORING_NOTES\"]},\n {\"property\":\"query\",\"value\":\"${query}\"}${innerFilters}]`,\n RESEARCH: `[{\"property\":\"type\",\"value\":[\"COMMENTARY\",\"RESEARCH\"]},\n {\"property\":\"query\",\"value\":\"${query}\"}${innerFilters}]`,\n INDUSTRY_RESEARCH: `[{\"property\":\"type\",\"value\":[\"COMMENTARY\",\"RESEARCH\"]},\n {\"property\":\"classification\",\"value\":[\"${industryCode}\"]}${innerFilters}]`,\n DASHBOARD_NEWS: `[{\"property\":\"query\",\"value\":\"${query}\"}${innerFilters}]`,\n };\n\n const filter = encodeURIComponent(filtersMap[type]);\n\n return fetchApi(\n `/storefront/users/${userId}/scope-news-es?${qs.stringify(params)}&filter=${filter}`,\n ).then(response => response.json());\n};\n\nexport const fetchAnnouncement = async ({ id, lang }) => {\n const params = {\n lang,\n start: 0,\n limit: 10,\n };\n\n return fetchApi(`/storefront/announcements/${id}?${qs.stringify(params)}`).then(response =>\n response.json(),\n );\n};\n\nconst mapCountriesListObject = countriesList =>\n countriesList ? { countryCode: countriesList.join(';') } : {};\n\nexport const savePreferences = async ({ emailNotifications, newsFeed, newsletter }) => {\n const organisationId = getOrganisationId();\n const userId = getUserId();\n\n const resourceUrl = `/sso/organisations/${organisationId}/users/${userId}/preferences`;\n\n const body = {\n preferences: {\n emailNotifications: {\n ...emailNotifications,\n },\n newsFeed: {\n news: newsFeed.newsTypes,\n limitToFollowedAnalysts: newsFeed.limitToFollowedAnalysts,\n classifications: [\n {\n classificationStandardCode: 'TnR',\n classificationType: 'INDUSTRY',\n values: newsFeed.industryTypes.map(({ code }) => code),\n },\n ],\n ...mapCountriesListObject(newsFeed.countriesList),\n },\n newsletter: {\n news: newsletter.newsTypes,\n limitToFollowedAnalysts: newsletter.limitToFollowedAnalysts,\n frequency: newsletter.frequency,\n useNewsFeedPreferences: newsletter.useNewsFeedPreferences,\n classifications: [\n {\n classificationStandardCode: 'TnR',\n classificationType: 'INDUSTRY',\n values: newsletter.industryTypes.map(({ code }) => code),\n },\n ],\n ...mapCountriesListObject(newsletter.countriesList),\n },\n },\n };\n\n const params = {\n method: 'PUT',\n body: JSON.stringify(body),\n };\n\n return fetchApi(resourceUrl, params);\n};\n\nexport const fetchPreferences = async ({ defaultPrefs = false }) => {\n const organisationId = getOrganisationId();\n const userId = getUserId();\n\n if (defaultPrefs) {\n return defaultPreferences;\n }\n\n try {\n return await fetchApi(\n `/sso/organisations/${organisationId}/users/${userId}/preferences`,\n ).then(response => response.json());\n } catch (e) {\n throw new Error('Failed to fetch preferences: ', e);\n }\n};\n","import qs from 'qs';\nimport { fetchApi, getUserId } from 'shared/functions';\n\nexport const fetchInstrumentDocuments = ({ instrumentId, page, limit = 200 }) => {\n const userId = getUserId();\n\n const params = {\n page,\n limit,\n };\n\n const resourceUrl = `/storefront/users/${userId}/issues/${instrumentId}/documents?${qs.stringify(\n params,\n )}`;\n\n return fetchApi(resourceUrl).then(response => response.json());\n};\n\nexport const fetchInstrumentProducts = async ({ instrumentId }) => {\n const userId = getUserId();\n\n return fetchApi(`/storefront/users/${userId}/issues/${instrumentId}/products`).then(response =>\n response.json(),\n );\n};\n\nexport const fetchInstruments = async ({ query, limit, page, sort, filter }) => {\n const params = {\n query,\n page,\n limit,\n ...(sort && { sort: sort.sortColumn }),\n ...(sort && { dir: sort.direction }),\n };\n\n const filters = { ...filter };\n if (!Array.isArray(filter.countries) || !filter.countries.length) {\n delete filters.countries;\n }\n\n const filterString = filters ? `&filter=${encodeURI(JSON.stringify(filters))}` : '';\n\n return fetchApi(`/storefront/issues?${qs.stringify(params)}${filterString}`).then(response =>\n response.json(),\n );\n};\n\nexport const fetchInstrument = async ({ id }) => {\n const instrumentApiData = fetchApi(`/storefront/issues/${id}`).then(response => response.json());\n\n const productsApiData = fetchInstrumentProducts({ instrumentId: id });\n\n const documentsApiData = fetchInstrumentDocuments({ instrumentId: id, page: 1, limit: 25 });\n\n return {\n instrumentApiData: await instrumentApiData,\n documentsApiData: await documentsApiData,\n productsApiData: await productsApiData,\n };\n};\n","import qs from 'qs';\nimport { catchFetchApiError, fetchApi, getFetchApiJSONResponse, getUserId } from 'shared/functions';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { serviceUrlPrefix } from 'utils';\n\nconst entitiesUrlByRatingType = {\n [ratingTypes.CREDIT_RATING]: '/storefront/issuers/',\n [ratingTypes.CREDIT_REVIEW]: '/sig/api/companies/',\n [ratingTypes.ESG_IMPACT]: '/esg/api/companies/',\n [ratingTypes.SENTIMENT]: '/sentifi/companies',\n [ratingTypes.CLIMATE_STRESS_TEST]: '/esg/climate-stress-test/entity/search/list',\n};\n\nexport const fetchEntityDocuments = ({ entityId, page = 1, limit = 200 }) => {\n const userId = getUserId();\n\n const params = {\n page,\n limit,\n };\n\n const resourceUrl = `/storefront/users/${userId}/issuers/${entityId}/documents?${qs.stringify(\n params,\n )}`;\n\n return fetchApi(resourceUrl).then((response) => response.json());\n};\n\nexport const fetchEntityInstruments = async ({ entityId, page, limit, sort, filter }) => {\n const params = {\n page,\n limit,\n ...(sort && { sort: sort.sortColumn }),\n ...(sort && { dir: sort.direction }),\n };\n\n const filterString = filter ? `&filter=${encodeURI(JSON.stringify(filter))}` : '';\n\n return fetchApi(\n `/storefront/issuers/${entityId}/issues?${qs.stringify(params)}${filterString}`,\n ).then((response) => response.json());\n};\n\nexport const fetchEntityProducts = ({ entityId }) => {\n const userId = getUserId();\n\n return fetchApi(`/storefront/users/${userId}/issuers/${entityId}/products`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const fetchEntities = async (\n { query, limit, page, sort, filter },\n ratingType = ratingTypes.CREDIT_RATING,\n) => {\n const params = {\n query,\n page,\n limit,\n ...(sort && { sort: sort.sortColumn }),\n ...(sort && { dir: sort.direction }),\n };\n\n const filterQuery = filter;\n // industrySectors mapping reason explained in SCI-3628\n if (ratingType === ratingTypes.CREDIT_RATING && filter.industrySectors) {\n filterQuery.industrySectors = filter.industrySectors.map((industrySector) => {\n const { industry, sector } = industrySector;\n return industry === sector ? { sector } : industrySector;\n });\n }\n\n const filterString = filter ? `&filter=${encodeURI(JSON.stringify(filterQuery))}` : '';\n const entitiesUrl = entitiesUrlByRatingType[ratingType];\n\n try {\n return await fetchApi(`${entitiesUrl}?${qs.stringify(params)}${filterString}`)\n .then((response) => response.json());\n } catch (response) {\n const data = await response.json();\n const [status, message] = typeof data === 'string' ? [response.status, data] : data;\n return { error: { status, message } };\n }\n};\n\nexport const fetchEntityBasic = async ({ id, ratingType = ratingTypes.CREDIT_RATING, params = null }) => {\n const urlPrefix = serviceUrlPrefix[ratingType];\n\n return fetchApi(`${urlPrefix}/${id}/details`, { query: params }, [], true).then((response) =>\n response.json(),\n );\n};\n\n/*\n Returns entity data either from credit rating database,\n or from esg, depending on whitch one is available.\n*/\nexport const fetchEntity = async ({ id, params }) => {\n const userId = getUserId();\n\n const fetchData = (url) =>\n fetchApi(url, { query: params }, [], false)\n .then((response) => response.json())\n .catch((response) => response);\n\n const [creditRatingData, esgData] = await Promise.all([\n fetchData(`/storefront/issuers/${id}`),\n fetchData(`/esg/api/${id}/details`),\n ]);\n\n /* Return entity from credit rating database if available */\n if (creditRatingData.data) {\n return {\n entityApiData: creditRatingData,\n documentsApiData: await fetchEntityDocuments({ entityId: id, page: 1, limit: 200 }),\n productsApiData: await fetchEntityProducts({ entityId: id, userId }),\n };\n }\n\n /* Fallback to entity from ESG database if not found in credit rating */\n if (esgData.data) {\n return {\n entityApiBasic: esgData,\n };\n }\n\n return Promise.reject(creditRatingData);\n};\n\nexport const fetchEntityDetails = async (id, params) => {\n const userId = getUserId();\n const entityCall = fetchApi(`/storefront/issuers/${id}`, { query: params }, [], true).then(\n (response) => response.json(),\n );\n const productsCall = fetchEntityProducts({ entityId: id, userId });\n\n return {\n entityApiData: await entityCall,\n productsApiData: await productsCall,\n };\n};\n","import { API_URL } from 'utils';\n\nexport const loginService = async ({ payload }) => {\n const headers = {\n 'Content-Type': 'application/json',\n };\n\n const tokenParams = {\n headers,\n method: 'POST',\n body: JSON.stringify(payload),\n };\n\n const authParams = (token, method = 'GET') => ({\n headers: {\n ...headers,\n authorization: `Bearer ${token}`,\n },\n method,\n });\n\n try {\n const loginResponse = await fetch(`${API_URL}/sso/login`, tokenParams).then(res => res.json());\n const { token } = loginResponse;\n\n if (token) {\n const { userId, roles, licences } = await fetch(\n `${API_URL}/sso/validate`,\n authParams(token, 'PUT'),\n ).then(res => res.json());\n\n const { data: user } = await fetch(\n `${API_URL}/sso/users/${userId}`,\n authParams(token),\n ).then(res => res.json());\n\n const { data: organisation } = await fetch(\n `${API_URL}/sso/organisations/${user.organisationId}`,\n authParams(token),\n ).then(res => res.json());\n\n return {\n token,\n organisation,\n roles,\n licences,\n user,\n };\n }\n\n throw loginResponse;\n } catch (response) {\n return response;\n }\n};\n","import qs from 'qs';\n\nimport { store } from 'store/store';\nimport { API_URL } from 'utils';\n\nexport const logoutService = async () => {\n const { token } = store.getState().auth.data;\n const params = { token };\n\n const response = await fetch(`${API_URL}/sso/invalidate?${qs.stringify(params)}`, {\n headers: {\n 'Content-Type': 'application/json',\n authorization: `Bearer ${token}`,\n },\n });\n\n return { response };\n};\n","import { licencesTypes } from 'shared/constants/licencesTypes';\nimport { organisationAdmin } from 'shared/constants/rolesTypes';\n\nexport const moduleRoutes = {\n [organisationAdmin]: 'sso',\n [licencesTypes.INVESTORHUB_MODULE]: 'storefront',\n [licencesTypes.ANALYTICALOPERATIONS_MODULE]: 'anop',\n [licencesTypes.RISKANALYSIS_MODULE]: 'riskanalysis',\n};\n","import { licencesTypes } from 'shared/constants/licencesTypes';\nimport { organisationAdmin } from 'shared/constants/rolesTypes';\nimport { moduleRoutes } from 'shared/constants/moduleRoutes';\nimport { API_URL } from 'utils';\n\nexport const permissionsService = async ({ token, roles, licences }) => {\n const headers = {\n 'Content-Type': 'application/json',\n };\n\n const authParams = {\n headers: {\n ...headers,\n authorization: `Bearer ${token}`,\n },\n method: 'GET',\n };\n\n const verifyAccess = (value, access) =>\n access.includes(value)\n ? fetch(\n `${API_URL}/${moduleRoutes[value]}/permissions?roles=${roles.join()}`,\n authParams,\n ).then(res => res.ok && res.json())\n : false;\n\n const adminPermissionsCall = verifyAccess(organisationAdmin, roles);\n const investorhubPermissionsCall = verifyAccess(licencesTypes.INVESTORHUB_MODULE, licences);\n const analyticalOperationsPermissionsCall = verifyAccess(\n licencesTypes.ANALYTICALOPERATIONS_MODULE,\n licences,\n );\n const riskAnalysisPermissionsCall = verifyAccess(licencesTypes.RISKANALYSIS_MODULE, licences);\n\n const [\n adminPermissions,\n investorhubPermissions,\n analyticalOperationsPermissions,\n riskAnalysisPermissions,\n ] = await Promise.all([\n adminPermissionsCall,\n investorhubPermissionsCall,\n analyticalOperationsPermissionsCall,\n riskAnalysisPermissionsCall,\n ]);\n\n const parsePermissions = (permissions, module) =>\n permissions && {\n [`${module}_PERMISSIONS`]: permissions.data.map(permission => ({\n [permission]: true,\n })),\n };\n\n return {\n permissions: {\n ...parsePermissions(adminPermissions, licencesTypes.ADMIN_MODULE),\n ...parsePermissions(investorhubPermissions, licencesTypes.INVESTORHUB_MODULE),\n ...parsePermissions(\n analyticalOperationsPermissions,\n licencesTypes.ANALYTICALOPERATIONS_MODULE,\n ),\n ...parsePermissions(riskAnalysisPermissions, licencesTypes.RISKANALYSIS_MODULE),\n },\n };\n};\n","import { fetchApi, catchFetchApiError, getFetchApiJSONResponse, getUserId } from 'shared/functions';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\n\n/**\n * TODO [ZSz]: rename to uploadPortfolio\n */\nexport const uploadPortfolioUnified = async ({ portfolio, uploadEntities, portfolioId }) => {\n const formData = new FormData();\n formData.append('file', portfolio, portfolio.name);\n formData.append('uploadEntities', uploadEntities);\n\n const params = {\n method: 'POST',\n body: formData,\n };\n\n const url = `/user-profile/portfolios/upload-portfolio/${portfolioId}`;\n\n return fetchApi(url, params, ['Content-Type'])\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\n/**\n * TODO [ZSz]: Code below should be removed after successfull implementation of unified portfolio upload\n */\n\nconst getUploadUrlByPortfolioType = (type, userId) => {\n switch (type) {\n case portfolioTypes.CREDIT_RATING:\n default:\n return `/storefront/users/${userId}/isin_upload`;\n case portfolioTypes.CREDIT_REVIEW:\n return `/sig/api/storefront/users/${userId}/add-portfolio-to-dossier/`;\n case portfolioTypes.ESG_ANALYSIS:\n return `/esg/api/upload-portfolio/`;\n }\n};\n\nexport const uploadPortfolio = async ({\n portfolio,\n organisationId,\n type = portfolioTypes.CREDIT_RATING,\n}) => {\n const userId = getUserId();\n\n const formData = new FormData();\n formData.append('file', portfolio, portfolio.name);\n\n if (type === portfolioTypes.CREDIT_REVIEW) {\n formData.append('organisationId', organisationId);\n }\n\n const params = {\n method: 'POST',\n body: formData,\n };\n\n const url = getUploadUrlByPortfolioType(type, userId);\n\n return fetchApi(url, params, ['Content-Type'])\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const confirmPortfolio = async dossierId => {\n const userId = getUserId();\n const confirmPortfolioUrl = `/sig/api/storefront/users/${userId}/confirm-portfolio/${dossierId}`;\n\n const params = { method: 'POST' };\n\n return fetchApi(confirmPortfolioUrl, params)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const confirmPortfolioESG = async confirmationData => {\n const confirmPortfolioUrl = `/esg/api/update-portfolio/`;\n\n const params = {\n method: 'PUT',\n body: JSON.stringify(confirmationData),\n };\n\n return fetchApi(confirmPortfolioUrl, params)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n","import { fetchApi, getOrganisationId, getUserId } from 'shared/functions';\n\nexport const editProfileService = async ({ payload }) => {\n const userId = getUserId();\n const organisationId = getOrganisationId();\n\n const params = {\n method: 'PUT',\n body: JSON.stringify(payload),\n };\n\n const response = await fetchApi(`/sso/organisations/${organisationId}/users/${userId}`, params);\n\n return response.json();\n};\n","import { fetchApi } from 'shared/functions';\nimport { jobFunctionsParser } from 'shared/parsers';\n\nexport const fetchJobFunctions = () => {\n return fetchApi(`/sso/config/jobfunctions`)\n .then(res => res.json())\n .then(res => res && jobFunctionsParser(res.data));\n};\n","import qs from 'qs';\nimport { fetchApi, getOrganisationId } from 'shared/functions';\n\nexport const recentUsersService = () => {\n const organisationId = getOrganisationId();\n\n const params = {\n page: 1,\n limit: 5,\n };\n\n return fetchApi(\n `/sso/social/organisations/${organisationId}/recent-users?${qs.stringify(params)}`,\n ).then(response => response.json());\n};\n","import { fetchApi, getUserId } from 'shared/functions';\n\nexport const getLoggedUserService = async () => {\n const userId = getUserId();\n\n const { data } = await fetchApi(`/sso/users/${userId}`).then(res => res.json());\n\n return data;\n};\n","import { fetchApi } from 'shared/functions';\n\nexport const fetchUserImage = async (userId, clearBlob = false) => {\n try {\n const response = await fetchApi(`/sso/social/users/${userId}/image`);\n\n if (!response.ok) {\n throw new Error('Network response was not ok.');\n }\n\n const blob = await response.blob();\n\n if (clearBlob) {\n blob.lastModifiedDate = new Date();\n return blob;\n }\n\n return window.URL.createObjectURL(blob);\n } catch (e) {\n throw new Error('Network response was not ok.');\n }\n};\n","import { getUserId, fetchApi } from 'shared/functions';\nimport { watchlistItemTypes } from 'shared/constants/watchlistItemTypes';\nimport { toggleMode } from 'shared/constants/toggleMode';\n\nconst paramNames = {\n [watchlistItemTypes.DOSSIER]: 'dossierId',\n};\n\nconst toggleModeToHttpMethod = {\n [toggleMode.ON]: 'POST',\n [toggleMode.OFF]: 'DELETE',\n};\n\nexport const toggleWatchedState = async ({ mode, id, itemType }) => {\n const userId = getUserId();\n\n const resourceUrl = `/storefront/users/${userId}/watchlists`;\n\n const idParamName = paramNames[itemType];\n\n const params = {\n method: toggleModeToHttpMethod[mode],\n body: JSON.stringify({\n [idParamName]: id,\n }),\n };\n\n const response = await fetchApi(resourceUrl, params);\n\n if (!response.ok) {\n throw new Error('Failed to toggle watched state for portfolio');\n }\n return mode === toggleMode.ON ? response.json() : response;\n};\n\nexport const SIGToggleWatchedState = async ({ id, itemType }) => {\n const userId = getUserId();\n const resourceUrl = `/sig/api/storefront/users/${userId}/watchlists/`;\n const idParamName = paramNames[itemType];\n\n const params = {\n method: 'PUT',\n body: JSON.stringify({\n [idParamName]: id,\n }),\n };\n\n const response = await fetchApi(resourceUrl, params);\n\n if (!response.ok) {\n throw new Error('Failed to toggle watched state for portfolio');\n }\n\n return response.json();\n};\n","import { fetchApi } from 'shared/functions';\n\nexport const fetchInvestorRelations = async () => {\n const investorRelations = await fetchApi(\n '/user-profile/portfolios/organisations/by-ultimate-issuer',\n )\n .then((response) => response.json())\n .catch((resp) => []);\n return investorRelations;\n};\n","import { fetchApi, getUserId } from 'shared/functions';\n\nexport const fetchCreditReviewLevels = () =>\n fetchApi(`/sig/api/storefront/ratings/`).then((response: Response) => response.json());\n\nexport const fetchCreditReviewSpecs = () =>\n fetchApi(`/sig/api/specifications/legend/`).then((response: Response) => response.json());\n\nexport const fetchCreditReviewChartsData = (easyNumber: string) =>\n fetchApi(`/sig/api/charts-data/${easyNumber}/`).then((response: Response) => response.json());\n\nexport const requestCreditReviewRatings = ({ ids, userId, organisationId }: any) => {\n const items = ids.map((id: string) => ({\n organisationId,\n artifactId: id,\n }));\n\n const params = {\n method: 'POST',\n body: JSON.stringify(items),\n };\n\n return fetchApi(\n `/sig/api/storefront/users/${userId}/request-history-add-item/`,\n params,\n ).then((response: Response) => response.json());\n};\n\nexport const fetchCreditReviewContractData = () => {\n const userId = getUserId();\n\n return fetchApi('/sig/api/contract-data/')\n .then(res => res.json())\n .then(\n ({\n users,\n allowed_requests: allowedRequests,\n total_amount: totalAmount,\n contract_state: contractState,\n }) => ({\n cofaceRequestPermission: users.includes(userId),\n cofaceRequestsAllowed: allowedRequests,\n cofaceTotalAmount: totalAmount,\n cofaceContractState: contractState,\n }),\n );\n};\n","import { fetchApi, getFetchApiJSONResponse } from 'shared/functions';\n\nexport const fetchESGDocuments = () =>\n fetchApi('/esg/api/methodology-list/').then(getFetchApiJSONResponse);\n\nexport const fetchESGAdditionalDocuments = () =>\n fetchApi('/esg/api/additional-documents-list/').then(getFetchApiJSONResponse);\n","import { fetchApi, getFetchApiJSONResponse, catchFetchApiError } from 'shared/functions';\nimport { CreditRatingError } from 'shared/errors';\n\nexport const fetchCreditRatingSummaryTab = entityId => {\n const url = `/storefront/issuers/${entityId}/summary/`;\n\n return fetchApi(url)\n .then(getFetchApiJSONResponse)\n .catch(async response => {\n await response.json().then(({ message, status, error }) => {\n throw new CreditRatingError({ message, status, error });\n });\n });\n};\nexport const fetchCreditReviewSummaryTab = easynumber => {\n const url = `/sig/api/${easynumber}/summary-tab/`;\n\n return fetchApi(url)\n .then(getFetchApiJSONResponse)\n .then(result => ({ ...result, easyNumber: easynumber }))\n .catch(catchFetchApiError);\n};\n","import { fetchApi, getFetchApiJSONResponse, catchFetchApiError } from 'shared/functions';\n\nexport const newsCentreUserDataService = userId => {\n return fetchApi(`/scopeuserqualification/api/get-news-centre-user-data/${userId}/`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n","import { fetchApi, catchFetchApiError, getFetchApiJSONResponse } from 'shared/functions';\n\nexport const fetchPeersNames = id =>\n fetchApi(`/esg/api/${id}/peers-names/`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n","export { exportService, asyncExportService, exportToExcel, exportCoveredBonds } from './exportService';\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport { Box } from '@mui/material';\n\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { DialogTitleWithClose, TabsPanel } from 'ui';\n\nimport { ShopProduct } from './ShopProduct/ShopProduct';\n\nconst useStyles = makeStyles(() => ({\n product: {\n overflowX: 'hidden',\n overflowY: 'auto',\n maxHeight: 640,\n },\n}));\n\nconst ShopProductsModal = ({ open, onClose, products, activeProduct }) => {\n const classes = useStyles();\n\n return (\n <div>\n <Dialog open={open} onClose={onClose} maxWidth=\"lg\">\n <DialogTitleWithClose onClose={onClose} />\n <DialogContent>\n <TabsPanel active={String(activeProduct)}>\n {products.map(product => (\n <Box\n mt={4}\n className={classes.product}\n label={product.name}\n value={String(product.id)}\n key={product.id}\n >\n <ShopProduct data={product} collapsed />\n </Box>\n ))}\n </TabsPanel>\n </DialogContent>\n </Dialog>\n </div>\n );\n};\n\nShopProductsModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n activeProduct: PropTypes.number.isRequired,\n products: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n }),\n ).isRequired,\n};\n\nexport { ShopProductsModal };\n","import React, { FC, useEffect, useRef, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\n\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogContent from '@mui/material/DialogContent';\nimport { Box, Divider, Grid, Paper, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { grey } from '@mui/material/colors';\n\nimport { DialogTitleWithClose, Loader } from 'ui';\nimport { getFlattenedIndustries } from 'selectors/common';\nimport { formatCurrency } from 'shared/functions';\nimport { ShopRelatedProductsData } from 'shared/types/shop';\n\nimport { shopViews } from '../shared/constants/shopViews';\nimport {\n addShopProductsToBasketAction,\n startShopProductFreeSubscriptionAction,\n startShopProductFreeTrialAction,\n} from '../store/shopActions';\nimport { fetchShopRelatedSubscriptions } from '../services';\nimport { ShopProductFreeSubscriptionModal } from './ShopProduct/ShopProductFreeSubscriptionModal';\nimport { ShopProductTrialModal } from './ShopProduct/ShopProductTrialModal';\nimport { ShopProductsModal } from './ShopProductsModal';\nimport { ShopProduct } from '../shared/types/shopProduct';\nimport { ratingTypes } from '../../../shared/constants/ratingTypes';\n\nconst useStyles = makeStyles((theme) => ({\n title: {\n color: theme.palette.primary.main,\n paddingBottom: 10,\n },\n subtitle: {\n color: theme.palette.primary.main,\n paddingBottom: 18,\n },\n label: {\n color: theme.palette.primary.main,\n },\n value: {\n fontSize: 18,\n fontWeight: 'bold',\n marginTop: 3,\n },\n product: {\n borderBottomWidth: 1,\n borderBottomColor: grey[300],\n borderBottomStyle: 'solid',\n },\n basketButton: {\n height: 45,\n backgroundColor: '#ff8900',\n color: theme.palette.primary.contrastText,\n marginLeft: 20,\n },\n infoButton: {\n height: 45,\n },\n name: {\n maxWidth: 530,\n fontSize: 18,\n padding: '9px 0',\n },\n price: {\n backgroundColor: theme.palette.primary.main,\n fontWeight: 'bold',\n textAlign: 'center',\n color: '#fff',\n fontSize: 16,\n },\n}));\n\ntype ShopRelatedProductsModalProps = {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void;\n data: ShopRelatedProductsData;\n module?: ratingTypes;\n};\n\ntype OpenById = Record<number, boolean>;\n\nconst ShopRelatedProductsModal: FC<ShopRelatedProductsModalProps> = ({\n open,\n data,\n onClose,\n onConfirm = () => {},\n module,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const dispatch = useDispatch();\n const navigate = useNavigate();\n\n const [isFreeSubscriptionModalOpen, setIsFreeSubscriptionModalOpen] = useState<OpenById>({});\n\n const [isFreeTrialModalOpen, setIsFreeTrialModalOpen] = useState<OpenById>({});\n\n const [isSubscriptionModalOpen, setIsSubscriptionModalOpen] = useState<OpenById>({});\n\n const [relatedSubscriptionIds, setRelatedSubscriptionIds] = useState<number[]>([]);\n const [relatedSubscriptions, setRelatedSubscriptions] = useState<ShopProduct[]>([]);\n\n const didUnmount = useRef(false);\n\n const allIndustries = useSelector(getFlattenedIndustries);\n\n const relatedIndustries = allIndustries.filter(({ code, name }) => {\n const industryList = data.countriesAndIndustries\n ? data.countriesAndIndustries.map(({ industries }) => industries).flat()\n : [];\n\n return industryList.includes(code) || industryList.includes(name);\n });\n\n const products: { data: ShopProduct[]; isPending: boolean } = useSelector(\n ({ shop }: any) => shop.products,\n );\n\n const fetchData = async () => {\n const countriesAndIndustries = (data.countriesAndIndustries || []).map(\n ({ industries, country }) => {\n const industryNames = relatedIndustries\n .filter(({ code, name }) => industries.includes(code) || industries.includes(name))\n .map(({ code }) => code);\n\n return {\n country,\n industry: industryNames || [],\n };\n },\n );\n\n const response = await fetchShopRelatedSubscriptions({\n category: data.category,\n productLines: data.productLine ? [data.productLine] : [],\n countriesAndIndustries,\n module:\n module &&\n {\n [ratingTypes.ESG_IMPACT]: 'ESG Impact Review',\n [ratingTypes.SENTIMENT]: 'Sentifi',\n [ratingTypes.CLIMATE_STRESS_TEST]: 'Climate Stress Test',\n }[module],\n });\n\n if (response && !didUnmount.current) {\n setRelatedSubscriptionIds(response.products);\n }\n };\n\n useEffect(() => {\n if (data.category) {\n fetchData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data.countriesAndIndustries, data.productLine, data.category]);\n\n useEffect(() => {\n if (relatedSubscriptions.length) return;\n\n setRelatedSubscriptions(products.data.filter(({ id }) => relatedSubscriptionIds.includes(id)));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [relatedSubscriptionIds]);\n\n const getPrice = (product: any) => {\n const pricing = product.find(({ active }: any) => active);\n\n return pricing ? pricing.price : null;\n };\n\n const toggleSubscriptionModal = (id: number) => {\n setIsSubscriptionModalOpen((isOpenById) => ({ ...isOpenById, [id]: !isOpenById[id] }));\n };\n\n const toggleFreeTrialModal = (id: number) => {\n setIsFreeTrialModalOpen((isOpenById) => ({ ...isOpenById, [id]: !isOpenById[id] }));\n\n if (isFreeTrialModalOpen[id]) {\n onConfirm();\n }\n };\n\n const toggleFreeSubscriptionModal = (id: number) => {\n setIsFreeSubscriptionModalOpen((isOpenById) => ({ ...isOpenById, [id]: !isOpenById[id] }));\n\n if (isFreeSubscriptionModalOpen[id]) {\n onConfirm();\n }\n };\n\n const activateFreeSubscription = (id: number) => {\n dispatch(startShopProductFreeSubscriptionAction({ id }));\n };\n\n const addToBasket = (id: number) => {\n dispatch(addShopProductsToBasketAction({ ids: [id] }));\n\n navigate(`/subscriptions/?tab=${shopViews.basket}`);\n };\n\n const activateFreeTier = (id: number) => {\n dispatch(startShopProductFreeTrialAction({ id }));\n };\n\n const getIndustryName = () => (relatedIndustries.length ? relatedIndustries[0].name : 'All');\n const getSegmentName = () =>\n relatedIndustries.length ? relatedIndustries[0].industryName : 'All';\n\n const handleConfirmSubscription = (productId: number) => {\n activateFreeSubscription(productId);\n };\n\n useEffect(() => {\n return () => {\n didUnmount.current = true;\n };\n }, []);\n\n const renderBuyButton = (product: ShopProduct) => {\n if (product.isFreeTrial && !product.trialStarted) {\n return (\n <>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n className={classes.infoButton}\n onClick={() => toggleFreeTrialModal(product.id)}\n disabled={product.purchased}\n >\n {product.purchased ? t('Subscribed') : t('Free Trial')}\n </Button>\n <ShopProductTrialModal\n open={Boolean(isFreeTrialModalOpen[product.id])}\n onConfirm={() => activateFreeTier(product.id)}\n onClose={() => toggleFreeTrialModal(product.id)}\n data={product as any}\n />\n </>\n );\n }\n\n const price = getPrice(product.pricing);\n\n if (price === 0) {\n return (\n <>\n <Button\n color=\"primary\"\n variant=\"outlined\"\n className={classes.infoButton}\n onClick={() => toggleFreeSubscriptionModal(product.id)}\n >\n {t('Get started')}\n </Button>\n <ShopProductFreeSubscriptionModal\n open={Boolean(isFreeSubscriptionModalOpen[product.id])}\n onConfirm={() => handleConfirmSubscription(product.id)}\n onClose={() => toggleFreeSubscriptionModal(product.id)}\n data={product as any}\n />\n </>\n );\n }\n\n return (\n <Button\n color=\"primary\"\n variant=\"contained\"\n className={classes.basketButton}\n onClick={() => addToBasket(product.id)}\n >\n {t('Add to basket')}\n </Button>\n );\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"xl\">\n <DialogTitleWithClose className={classes.title} onClose={onClose}>\n <Typography variant=\"h6\">\n <strong>{t('This content is part of')}</strong>\n </Typography>\n </DialogTitleWithClose>\n <DialogContent>\n <Box minWidth={900}>\n <Divider />\n <Box mt={4} mb={8} px={2}>\n <Grid container justifyContent=\"space-between\">\n <Grid item>\n <Box className={classes.label}>{t('Category')}</Box>\n <Box className={classes.value}>{data?.category ? data.category : '-'}</Box>\n </Grid>\n <Grid item>\n <Box className={classes.label}>{t('Product line')}</Box>\n <Box className={classes.value}>{data?.productLine ? data.productLine : '-'}</Box>\n </Grid>\n <Grid item>\n <Box className={classes.label}>{t('Segment')}</Box>\n <Box className={classes.value}>{getSegmentName()}</Box>\n </Grid>\n <Grid item>\n <Box className={classes.label}>{t('Industry')}</Box>\n <Box className={classes.value}>\n {relatedIndustries.length > 1 ? t('Various') : getIndustryName()}\n </Box>\n </Grid>\n </Grid>\n </Box>\n <Box mt={4}>\n <Typography variant=\"h6\" className={classes.subtitle}>\n <strong>{t('To unlock subscribe to one of the following subscriptions')}</strong>\n </Typography>\n <Divider />\n <Box mt={2} mb={4}>\n {products.isPending ? (\n <Loader center />\n ) : (\n <Paper variant=\"elevation\" elevation={3}>\n {relatedSubscriptions.length ? (\n relatedSubscriptions.map((product) => (\n <Box p={3} className={classes.product} key={product.id}>\n <Grid container justifyContent=\"space-between\">\n <Grid item>\n <Typography className={classes.name}>{product.name}</Typography>\n </Grid>\n <Grid item>\n <Box ml={2}>\n <Box className={classes.price} p={2} mb={2}>\n {getPrice(product.pricing) === 0\n ? t('Free of charge')\n : `${formatCurrency(getPrice(product.pricing), 'EUR')} ${\n product.validity\n }`}\n </Box>\n <Box display=\"flex\">\n <Box>\n <Button\n color=\"primary\"\n variant=\"outlined\"\n className={classes.infoButton}\n onClick={() => toggleSubscriptionModal(product.id)}\n >\n {t('More info')}\n </Button>\n </Box>\n <Box ml={1}>{renderBuyButton(product)}</Box>\n </Box>\n </Box>\n </Grid>\n </Grid>\n <ShopProductsModal\n products={relatedSubscriptions}\n activeProduct={product.id}\n open={Boolean(isSubscriptionModalOpen[product.id])}\n onClose={() => toggleSubscriptionModal(product.id)}\n />\n </Box>\n ))\n ) : (\n <Box p={4}>\n <Typography variant=\"h6\">{t('No products found')}</Typography>\n </Box>\n )}\n </Paper>\n )}\n </Box>\n </Box>\n </Box>\n </DialogContent>\n </Dialog>\n );\n};\n\nexport { ShopRelatedProductsModal };\n","export const newsletterFrequencies = {\n NONE: 'NONE',\n WEEKLY: 'WEEKLY',\n};\n","import { createSelector } from 'reselect';\n\nexport const getEntity = ({ entity }) => entity;\nexport const getEntityIsVisible = createSelector(getEntity, ({ isVisible }) => isVisible);\nexport const getEntityShouldRefresh = createSelector(\n getEntity,\n ({ shouldRefresh }) => shouldRefresh,\n);\nconst getEntityData = createSelector(getEntity, ({ data }) => data);\nconst getEntityDataProducts = createSelector(getEntityData, ({ products }) => products);\nconst getEntityDataProductsL4 = createSelector(getEntityDataProducts, ({ l4 }) => l4);\nconst getEntityDataProductsL5 = createSelector(getEntityDataProducts, ({ l5 }) => l5);\nconst getEntityDataProductsConflictOfInterests = createSelector(\n getEntityDataProducts,\n ({ conflictOfInterests }) => conflictOfInterests,\n);\nconst getEntityDataProduct = createSelector(\n getEntityDataProductsL4,\n getEntityDataProductsL5,\n (l4, l5) => (l5.available ? l5 : l4),\n);\nconst getEntityDataProductPurchased = createSelector(\n getEntityDataProduct,\n ({ purchased }) => purchased,\n);\nconst getEntityDataProductApproved = createSelector(\n getEntityDataProduct,\n ({ approved }) => approved,\n);\nexport const getEntityDataProductShowRatingRequestInProgress = createSelector(\n getEntityDataProductPurchased,\n getEntityDataProductApproved,\n getEntityDataProductsConflictOfInterests,\n (purchased, approved, conflictOfInterests) => purchased && !approved && !conflictOfInterests,\n);\nexport const getEntityDataProductsLevel = createSelector(getEntityDataProductsL5, ({ available }) =>\n available ? 'L5' : 'L4',\n);\nexport const getEntityDataProductShowRequestRatingBox = isUltimateParentUser =>\n createSelector(getEntityDataProductPurchased, purchased =>\n isUltimateParentUser ? false : !purchased,\n );\n","import React, { useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport { Bar } from 'react-chartjs-2';\nimport { useTranslation } from 'react-i18next';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { useReportPage } from 'shared/hooks';\nimport { theme } from 'theme';\n\nconst useStyles = makeStyles({\n legendText: {\n fontSize: 17,\n fontWeight: 500,\n lineHeight: '20px',\n },\n});\n\nconst Legend = ({ chart, extraText }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <Box display=\"flex\" justifyContent=\"space-between\" marginTop={4} marginBottom={2}>\n <Box display=\"flex\">\n {chart.props.data.datasets.map(dataset => (\n <Box display=\"flex\" marginRight={4} key={dataset.label}>\n <Box\n width={40}\n height={20}\n borderRadius=\"5px\"\n marginRight={1}\n style={{ backgroundColor: dataset.backgroundColor }}\n />\n <Typography variant=\"body2\" className={classes.legendText}>\n {dataset.label}\n </Typography>\n </Box>\n ))}\n </Box>\n {extraText && (\n <Typography variant=\"body2\" className={classes.legendText}>\n {t(extraText)}\n </Typography>\n )}\n </Box>\n );\n};\n\nLegend.defaultProps = {\n extraText: undefined,\n};\n\nLegend.propTypes = {\n chart: PropTypes.object.isRequired,\n extraText: PropTypes.string,\n};\n\nconst BarChart = ({ labels, datasets, showLegend, extraLegendText, unit }) => {\n const options = {\n scales: {\n xAxes: [\n {\n ticks: {\n fontSize: useReportPage ? 9 : 14,\n fontColor: theme.palette.custom.black,\n fontStyle: useReportPage ? 'normal' : 'bold',\n },\n },\n ],\n yAxes: [\n {\n ticks: {\n fontSize: useReportPage ? 9 : 14,\n fontColor: theme.palette.custom.black,\n fontStyle: useReportPage ? 'normal' : 'bold',\n },\n },\n ],\n },\n legend: {\n display: false,\n },\n tooltips: {\n callbacks: {\n label: (tooltipItems, data) => {\n return `${data.datasets[tooltipItems.datasetIndex].label}: ${tooltipItems.yLabel}${unit ||\n ''}`;\n },\n },\n },\n };\n\n const { t } = useTranslation();\n const chartRef = useRef(null);\n\n const data = {\n labels: labels.map(label => t(label)),\n datasets,\n };\n\n const chart = chartRef.current;\n\n return (\n <Box>\n <Bar ref={chartRef} data={data} options={options} height={120} />\n {chart && showLegend && <Legend chart={chart} extraText={extraLegendText} />}\n </Box>\n );\n};\n\nBarChart.defaultProps = {\n showLegend: true,\n extraLegendText: undefined,\n unit: undefined,\n};\n\nBarChart.propTypes = {\n labels: PropTypes.arrayOf(PropTypes.string).isRequired,\n datasets: PropTypes.array.isRequired,\n showLegend: PropTypes.bool,\n extraLegendText: PropTypes.string,\n unit: PropTypes.string,\n};\n\nexport default BarChart;\n","import React from 'react';\nimport PropTypes from 'prop-types';\n\n// Forked from: https://github.com/paulmelnikow/react-boxplot\n\nconst Boxplot = ({\n width,\n height,\n orientation,\n min,\n max,\n stats,\n style,\n tickStyle,\n whiskerStrokeWidth,\n whiskerStyle,\n boxStyle,\n medianStrokeWidth,\n medianStyle,\n outlierRadius,\n outlierStyle,\n className,\n}) => {\n let xMax;\n let horizScaleFactor;\n let vertScaleFactor;\n let transforms;\n if (orientation === 'vertical') {\n xMax = width;\n\n vertScaleFactor = height / (max - min);\n horizScaleFactor = 1.0;\n\n // Coordinate system: +y at the top, +x to the right.\n transforms = [\n `translate (${-min}, 0)`,\n `translate (0, ${height})`,\n `scale(1, -${vertScaleFactor})`,\n ];\n } else {\n xMax = height;\n\n horizScaleFactor = width / (max - min);\n vertScaleFactor = 1.0;\n\n // Coordinate system: +y at the right, +x to the top.\n transforms = [\n `scale(${horizScaleFactor}, 1) `,\n `translate (${-min}, 0) `,\n `translate (0, ${height}) `,\n 'rotate(-90)',\n ];\n }\n\n const xMin = 0;\n const xCenter = xMax / 2;\n\n return (\n <svg width={width} height={height} className={className}>\n <g transform={transforms.join(' ')} style={style}>\n <line\n key=\"tick-low\"\n x1={xMin}\n x2={xMax}\n y1={stats.whiskerLow}\n y2={stats.whiskerLow}\n strokeWidth={whiskerStrokeWidth / horizScaleFactor}\n style={tickStyle}\n />\n <line\n key=\"whisker-low\"\n x1={xCenter}\n x2={xCenter}\n y1={stats.whiskerLow}\n y2={stats.quartile1}\n strokeWidth={whiskerStrokeWidth / vertScaleFactor}\n style={whiskerStyle}\n />\n <rect\n key=\"box\"\n x={xMin}\n width={xMax - xMin}\n y={stats.quartile1}\n height={stats.quartile3 - stats.quartile1}\n strokeWidth=\"0\"\n style={boxStyle}\n />\n <line\n key=\"median\"\n x1={xMin}\n x2={xMax}\n y1={stats.quartile2}\n y2={stats.quartile2}\n strokeWidth={medianStrokeWidth / horizScaleFactor}\n style={medianStyle}\n />\n <line\n key=\"whisker-high\"\n x1={xCenter}\n x2={xCenter}\n y1={stats.whiskerHigh}\n y2={stats.quartile3}\n strokeWidth={whiskerStrokeWidth / vertScaleFactor}\n style={whiskerStyle}\n />\n <line\n key=\"tick-high\"\n x1={xMin}\n x2={xMax}\n y1={stats.whiskerHigh}\n y2={stats.whiskerHigh}\n strokeWidth={whiskerStrokeWidth / horizScaleFactor}\n style={tickStyle}\n />\n {stats.outliers.map((outlier, index) => (\n <ellipse\n // eslint-disable-next-line react/no-array-index-key\n key={`outlier-${index}`}\n cx={xCenter}\n cy={outlier}\n rx={outlierRadius / vertScaleFactor}\n ry={outlierRadius / horizScaleFactor}\n strokeWidth=\"0\"\n style={outlierStyle}\n />\n ))}\n </g>\n </svg>\n );\n};\n\nexport default Boxplot;\n\nBoxplot.propTypes = {\n // Width of the svg element\n width: PropTypes.number.isRequired,\n // Height of the svg element\n height: PropTypes.number.isRequired,\n // Orientation of the plot. vertical means min values at the left,\n // horizontal means min values at the bottom.\n orientation: PropTypes.oneOf(['vertical', 'horizontal']),\n\n // Minimum and maximum values for the axis. Values outside this\n // range are clipped.\n min: PropTypes.number.isRequired,\n max: PropTypes.number.isRequired,\n\n // The stats to plot.\n // eslint-disable-next-line react/require-default-props\n stats: PropTypes.shape({\n // The tick of the lower whisker.\n whiskerLow: PropTypes.number.isRequired,\n // The lower end of the box.\n quartile1: PropTypes.number.isRequired,\n // The median.\n quartile2: PropTypes.number.isRequired,\n // The upper end of the box.\n quartile3: PropTypes.number.isRequired,\n // The tick of the upper whisker.\n whiskerHigh: PropTypes.number.isRequired,\n // The outliers.\n outliers: PropTypes.array,\n }),\n\n style: PropTypes.object,\n tickStyle: PropTypes.object,\n whiskerStrokeWidth: PropTypes.number,\n whiskerStyle: PropTypes.object,\n boxStyle: PropTypes.object,\n medianStrokeWidth: PropTypes.number,\n medianStyle: PropTypes.object,\n outlierRadius: PropTypes.number,\n outlierStyle: PropTypes.object,\n\n // Pass through, to support styled-components.\n // eslint-disable-next-line react/require-default-props\n className: PropTypes.string,\n};\n\nBoxplot.defaultProps = {\n orientation: 'vertical',\n style: { strokeOpacity: 1, fillOpacity: 0.75 },\n // tickStyle: { stroke: 'black', strokeDasharray: '2,2' },\n tickStyle: { stroke: 'black' },\n whiskerStrokeWidth: 1,\n // whiskerStyle: { stroke: 'black', strokeDasharray: '2,2' },\n whiskerStyle: { stroke: 'black' },\n boxStyle: { stroke: 'black', fill: 'black' },\n medianStrokeWidth: 2,\n medianStyle: { stroke: 'white' },\n outlierRadius: 2.5,\n outlierStyle: { stroke: 'black', fill: 'black' },\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { orange } from '@mui/material/colors';\n\nimport { theme } from 'theme';\nimport Boxplot from 'ui/Boxplot/Boxplot';\n\nconst style = {\n fillOpacity: 1,\n};\nconst medianStyle = {\n stroke: 'white',\n strokeDasharray: 2,\n};\nconst boxStyle = {\n stroke: theme.palette.primary.main,\n fill: theme.palette.primary.main,\n};\nconst tickStyle = {\n stroke: theme.palette.primary.main,\n};\nconst whiskerStyle = {\n stroke: theme.palette.primary.main,\n};\nconst outlierStyle = {\n stroke: orange[700],\n fill: orange[700],\n};\n\nconst BoxPlot = ({ stats, min, max, width, height }) => {\n return (\n <Boxplot\n orientation=\"horizontal\"\n width={width}\n height={height}\n min={min}\n max={max}\n medianStrokeWidth={1}\n outlierRadius={5}\n style={style}\n medianStyle={medianStyle}\n boxStyle={boxStyle}\n tickStyle={tickStyle}\n whiskerStyle={whiskerStyle}\n outlierStyle={outlierStyle}\n stats={{\n ...stats,\n outliers: Array.isArray(stats.outliers) ? stats.outliers : [stats.outliers],\n }}\n />\n );\n};\n\nBoxPlot.defaultProps = {\n width: 300,\n height: 25,\n};\n\nBoxPlot.propTypes = {\n min: PropTypes.number.isRequired,\n max: PropTypes.number.isRequired,\n stats: PropTypes.shape({\n whiskerLow: PropTypes.number,\n whiskerHigh: PropTypes.number,\n outliers: PropTypes.oneOfType([PropTypes.number, PropTypes.arrayOf(PropTypes.number)]),\n quartile1: PropTypes.number,\n quartile2: PropTypes.number,\n quartile3: PropTypes.number,\n }).isRequired,\n width: PropTypes.number,\n height: PropTypes.number,\n};\n\nexport default BoxPlot;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport isNumber from 'lodash/isNumber';\nimport omit from 'lodash/omit';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { grey, orange } from '@mui/material/colors';\nimport Typography from '@mui/material/Typography';\n\nimport { CustomTooltip } from 'ui';\nimport { useReportPage } from 'shared/hooks';\nimport BoxPlot from './BoxPlot';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n position: 'relative',\n marginTop: 30,\n minWidth: 'calc(var(--boxplot-width) + 95px)',\n },\n row: {\n display: 'flex',\n alignItems: 'center',\n position: 'relative',\n zIndex: 1,\n '&:nth-child(2) div:last-child': {\n borderTop: '1px solid #000',\n },\n },\n label: {\n textAlign: 'right',\n fontWeight: 'bold',\n fontSize: useReportPage ? 10 : 'inherit',\n width: 130,\n paddingRight: 30,\n alignItems: 'center',\n position: 'relative',\n '&:after': {\n position: 'absolute',\n top: '50%',\n transform: 'translateY(-50%)',\n right: 15,\n content: '\"\"',\n height: useReportPage ? 15 : 25,\n width: 8,\n display: 'inline-block',\n backgroundColor: 'var(--boxplot-legend-color)',\n },\n },\n boxPlotWrapper: {\n borderLeft: `1px solid ${grey[700]}`,\n paddingTop: useReportPage ? 5 : 15,\n paddingBottom: useReportPage ? 5 : 15,\n },\n scaleX: {\n marginLeft: 130,\n width: 'calc(var(--boxplot-width) + 1px)',\n textAlign: 'right',\n display: 'flex',\n position: 'absolute',\n height: '100%',\n fontSize: useReportPage ? 10 : 11,\n '&:before': {\n content: '\"0\"',\n position: 'absolute',\n top: -25,\n left: 0,\n transform: 'translateX(-50%)',\n },\n '& div': {\n flex: '0 0 25%',\n borderRight: `1px solid ${grey[400]}`,\n },\n '& div span': {\n transform: 'translate(50%, -25px)',\n display: 'inline-block',\n },\n },\n legend: {\n display: 'flex',\n fontSize: useReportPage ? 10 : 12,\n maxWidth: 450,\n marginTop: useReportPage ? 0 : 30,\n marginLeft: useReportPage ? 0 : 115,\n '& > div': {\n paddingLeft: 15,\n paddingRight: 15,\n display: 'flex',\n alignItems: 'center',\n },\n },\n rangeIcon: {\n borderLeft: `1px solid ${grey[400]}`,\n borderRight: `1px solid ${grey[400]}`,\n display: 'block',\n width: 30,\n height: 15,\n marginRight: 15,\n position: 'relative',\n '&:before': {\n content: '\"\"',\n transform: 'translateY(-50%)',\n borderTop: `1px solid ${grey[400]}`,\n position: 'absolute',\n left: 0,\n right: 0,\n top: '50%',\n },\n },\n medianIcon: {\n width: 15,\n height: 15,\n marginRight: 15,\n display: 'block',\n backgroundColor: theme.palette.primary.main,\n position: 'relative',\n '&:before': {\n content: '\"\"',\n transform: 'translateX(-50%)',\n borderRight: '1px dashed #fff',\n position: 'absolute',\n left: '50%',\n bottom: 0,\n top: 0,\n },\n },\n valueIcon: {\n width: 10,\n height: 10,\n marginRight: 15,\n display: 'block',\n backgroundColor: orange[700],\n borderRadius: '50%',\n },\n}));\n\nconst getMinAndMax = data => {\n const values = data\n .map(element => Object.values(omit(element, 'outliersTooltip')).flat())\n .flat()\n .filter(value => isNumber(value));\n return {\n min: Math.floor(Math.min(...values)),\n max: Math.ceil(Math.max(...values)),\n };\n};\nconst prepareDataToDisplay = value => `Cents ${value?.toFixed(2)}`;\n\nconst BoxPlotChart = ({ stats, width, height }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const { min, max } = getMinAndMax(stats);\n const factor = max / 4;\n\n const scaleX = [];\n\n for (let i = 1; i < 5; i += 1) {\n scaleX.push(\n <div key={i}>\n <span>{factor * i}</span>\n </div>,\n );\n }\n\n return (\n <>\n <div className={classes.container}>\n <div className={classes.scaleX} style={{ '--boxplot-width': `${width}px` }}>\n {scaleX}\n </div>\n {stats.map(({ color, title, ...itemStats }) => {\n return (\n <CustomTooltip\n placement=\"top\"\n key={title}\n title={\n <>\n <Typography variant=\"h6\">{t(title)}</Typography>\n <Typography variant=\"caption\">\n {t('Company value')}:{' '}\n <strong>{prepareDataToDisplay(itemStats.outliersTooltip)}</strong>\n </Typography>\n <br />\n <Typography variant=\"caption\">\n {t('Lower quartile')}:{' '}\n <strong>{prepareDataToDisplay(itemStats.quartile1)}</strong>\n </Typography>\n <br />\n <Typography variant=\"caption\">\n {t('Peers median value')}:{' '}\n <strong>{prepareDataToDisplay(itemStats.quartile2)}</strong>\n </Typography>\n <br />\n <Typography variant=\"caption\">\n {t('Upper quartile')}:{' '}\n <strong>{prepareDataToDisplay(itemStats.quartile3)}</strong>\n </Typography>\n <br />\n <Typography variant=\"caption\">\n {t('Peers max value')}:{' '}\n <strong>{prepareDataToDisplay(itemStats.whiskerHigh)}</strong>\n </Typography>\n <br />\n <Typography variant=\"caption\">\n {t('Peers min value')}:{' '}\n <strong>{prepareDataToDisplay(itemStats.whiskerLow)}</strong>\n </Typography>\n </>\n }\n arrow\n >\n <div className={classes.row}>\n <div className={classes.label} style={{ '--boxplot-legend-color': color }}>\n {title}\n </div>\n <div className={classes.boxPlotWrapper}>\n <BoxPlot stats={itemStats} width={width} height={height} min={min} max={max} />\n </div>\n </div>\n </CustomTooltip>\n );\n })}\n </div>\n <div className={classes.legend}>\n <div>\n <span className={classes.rangeIcon} />\n {t('Range')}\n </div>\n <div>\n <span className={classes.medianIcon} />\n {t('Peer group median')}\n </div>\n <div>\n <span className={classes.valueIcon} />\n {t('Company value')}\n </div>\n </div>\n </>\n );\n};\n\nBoxPlotChart.defaultProps = {\n width: 300,\n height: 25,\n};\n\nBoxPlotChart.propTypes = {\n stats: PropTypes.arrayOf(\n PropTypes.shape({\n whiskerLow: PropTypes.number,\n whiskerHigh: PropTypes.number,\n outliers: PropTypes.oneOfType([PropTypes.number, PropTypes.arrayOf(PropTypes.number)]),\n outliersTooltip: PropTypes.number,\n quartile1: PropTypes.number,\n quartile2: PropTypes.number,\n quartile3: PropTypes.number,\n title: PropTypes.string,\n color: PropTypes.string,\n }),\n ).isRequired,\n width: PropTypes.number,\n height: PropTypes.number,\n};\n\nexport default BoxPlotChart;\n","import * as d3 from 'd3';\n\nconst shouldDrawOnRightSide = (startAngle, endAngle) =>\n startAngle + (endAngle - startAngle) / 2 < Math.PI;\n\nclass DoughnutChartSvg {\n constructor({\n containerRef,\n small,\n width,\n height,\n margin,\n data,\n colors,\n labels,\n fontSize = 16,\n overlapSize = 20,\n }) {\n this.containerRef = containerRef;\n this.small = small;\n this.width = width;\n this.height = height;\n this.colors = colors;\n this.margin = margin;\n this.radius = Math.min(width, height) / 2 - this.margin;\n this.labels = labels;\n this.data = data;\n this.fontSize = fontSize;\n this.overlapSize = overlapSize;\n this.initialized = false;\n }\n\n init() {\n this.svg = d3.select(this.containerRef).append('svg');\n\n this.container = this.svg\n .attr('width', this.width)\n .attr('height', this.height)\n .style('transform', `${this.small ? 'scale(0.5)' : 'none'}`)\n .style('margin', `${this.small ? '-80px 0' : '0'}`)\n .style('overflow', `${this.small ? 'inherit' : 'hidden'}`)\n .append('g')\n .attr('transform', `translate(${this.width / 2},${this.height / 2})`);\n\n this.drawChart();\n this.initialized = true;\n }\n\n translateContainer({ x = 0, y = 0 }) {\n this.container.attr('transform', `translate(${this.width / 2 + x},${this.height / 2 + y})`);\n }\n\n getPolylinesPoints = ({ items, rightSide, arc, outerArc }) => {\n // reverse right side items for drawing\n const resultPolylines = (rightSide ? items.reverse() : items).reduce(\n (polylines, dataItem, index) => {\n const prevPolyline = index > 0 ? polylines[index - 1] : undefined;\n const prevBendPos = prevPolyline ? prevPolyline[1] : undefined;\n\n const bendPos = outerArc.centroid(dataItem);\n\n if (\n prevBendPos &&\n (bendPos[1] - prevBendPos[1] > 0 ||\n Math.abs(prevBendPos[1] - bendPos[1]) < this.overlapSize)\n ) {\n bendPos[1] = prevBendPos[1] - this.overlapSize;\n }\n\n const posA = arc.centroid(dataItem); // line insertion in the slice\n const posB = bendPos; // line break: we use the other arc generator that has been built only for that\n const posC = [...bendPos]; // Label position = almost the same as posB\n\n posC[0] = this.radius * 0.95 * (rightSide ? 1 : -1); // multiply by 1 or -1 to put it on the right or on the left\n\n return [...polylines, [posA, posB, posC]];\n },\n [],\n );\n return rightSide ? resultPolylines.reverse() : resultPolylines; // reverse right side polylines back after drawing\n };\n\n drawChart() {\n // Compute the position of each group on the pie:\n const pie = d3\n .pie()\n .sort(null) // Do not sort group by size\n .value(d => d.value);\n const dataReady = pie(d3.entries(this.data));\n\n // The arc generator\n const arc = d3\n .arc()\n .innerRadius(this.radius * 0.5) // This is the size of the donut hole\n .outerRadius(this.radius * 0.7);\n\n // Another arc that won't be drawn. Just for labels positioning\n const outerArc = d3\n .arc()\n .innerRadius(this.radius * 0.8)\n .outerRadius(this.radius * 0.8);\n\n // Build the pie chart: Basically, each part of the pie is a path that we build using the arc function.\n this.container\n .selectAll('allSlices')\n .data(dataReady)\n .enter()\n .append('path')\n .attr('d', arc)\n .attr('fill', d => this.colors[d.index])\n .attr('stroke', 'white')\n .style('stroke-width', '2px')\n .style('opacity', 1.0);\n\n this.drawLabels({ data: dataReady, arc, outerArc });\n }\n\n checkOverflow(labelTextsPos) {\n let maxOverflow = { value: 0, positive: false };\n labelTextsPos.forEach(([, y]) => {\n const overflow = Math.max(maxOverflow.value, Math.abs(y) + this.fontSize - this.height / 2);\n if (overflow !== maxOverflow.value) {\n maxOverflow = { value: overflow, positive: y > 0 };\n }\n });\n\n const { value, positive } = maxOverflow;\n if (value > 0) {\n this.translateContainer({ y: positive ? -value : value });\n }\n }\n\n drawLabels({ data, arc, outerArc }) {\n const leftItems = data.filter(\n ({ startAngle, endAngle }) => !shouldDrawOnRightSide(startAngle, endAngle),\n );\n\n const rightItems = data.filter(({ startAngle, endAngle }) =>\n shouldDrawOnRightSide(startAngle, endAngle),\n );\n\n const polylinesPoints = [\n ...this.getPolylinesPoints({ items: rightItems, rightSide: true, arc, outerArc }),\n ...this.getPolylinesPoints({ items: leftItems, rightSide: false, arc, outerArc }),\n ];\n\n // Add the polylines between chart and labels:\n this.container\n .selectAll('allPolylines')\n .data(data)\n .enter()\n .append('polyline')\n .attr('stroke', 'black')\n .style('fill', 'none')\n .attr('stroke-width', 1)\n .attr('points', (_d, index) => {\n return polylinesPoints[index];\n });\n\n // Calculate positions for label texts\n const labelTextsPos = data.map(({ startAngle, endAngle }, index) => [\n this.radius * 0.99 * (shouldDrawOnRightSide(startAngle, endAngle) ? 1 : -1),\n polylinesPoints[index][1][1],\n ]);\n\n // Check if any of the texts is overflowing and if so, translate the container\n this.checkOverflow(labelTextsPos);\n\n // Draw label texts:\n this.container\n .selectAll('allLabels')\n .data(data)\n .enter()\n .append('text')\n .text(d => `${d.data.value}%`)\n .attr('transform', (d, index) => `translate(${labelTextsPos[index]})`)\n .style('text-anchor', d => {\n return shouldDrawOnRightSide(d.startAngle, d.endAngle) ? 'start' : 'end';\n })\n .style('font-size', `${this.fontSize}px`);\n }\n\n destroy() {\n if (this.initialized) {\n this.svg.remove();\n this.initialized = false;\n }\n }\n}\n\nexport default DoughnutChartSvg;\n","import React, { useRef, useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { useReportPage } from 'shared/hooks';\n\nimport DoughnutChartSvg from './DoughnutChartSvg';\n\nconst useStyles = makeStyles({\n container: {\n position: 'relative',\n textAlign: 'center',\n },\n scoreBox: {\n position: 'absolute',\n left: '50%',\n top: '50%',\n transform: 'translate(-50%, 60px)',\n '& span:nth-child(1)': {\n fontSize: '25px',\n },\n },\n});\n\nconst DoughnutChart = ({ width, height, margin, data, colors, title, fontSize }) => {\n const ref = useRef(null);\n const [chart, setChart] = useState();\n const classes = useStyles();\n\n useEffect(() => {\n if (chart) {\n chart.destroy();\n }\n\n // eslint-disable-next-line no-new\n setChart(\n new DoughnutChartSvg({\n containerRef: ref.current,\n small: useReportPage,\n width,\n height,\n margin,\n data,\n colors,\n fontSize,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n useEffect(() => {\n if (chart) {\n chart.init();\n }\n }, [chart]);\n\n useEffect(() => {\n return () => {\n if (chart) {\n chart.destroy();\n }\n };\n });\n\n return (\n <div ref={ref} className={classes.container}>\n {title && (\n <Box mb={3}>\n <Typography align=\"center\" variant=\"h5\">\n <strong>{title}</strong>\n </Typography>\n </Box>\n )}\n </div>\n );\n};\n\nDoughnutChart.defaultProps = {\n width: 400,\n height: 250,\n margin: 0,\n colors: [],\n title: undefined,\n fontSize: 16,\n};\n\nDoughnutChart.propTypes = {\n data: PropTypes.object.isRequired,\n title: PropTypes.node,\n colors: PropTypes.array,\n width: PropTypes.number,\n height: PropTypes.number,\n margin: PropTypes.number,\n fontSize: PropTypes.number,\n};\n\nexport default DoughnutChart;\n","import * as d3 from 'd3';\nimport { indigo, grey, red } from '@mui/material/colors';\n\nimport { ESGImpactHexBorderMap } from 'shared/constants/ESGImpactHexCodesMap';\n\nconst defaultColors = {\n background: grey[500],\n indicator: red[700],\n average: grey[500],\n secondary: indigo[400],\n};\n\nconst defaultLabels = {\n average: 'Avg.',\n worst: 'Worst',\n best: 'Best',\n};\n\nconst pieGenerator = d3\n .pie()\n .value(d => d.value)\n .startAngle(-90 * (Math.PI / 180))\n .endAngle(90 * (Math.PI / 180))\n .sort(null);\n\nconst getEndAnglePosition = ({ innerRadius, outerRadius, startAngle, endAngle }) => {\n const r = (+innerRadius + +outerRadius) / 2;\n const a = +startAngle + +endAngle - Math.PI;\n return [Math.cos(a) * r, Math.sin(a) * r];\n};\n\nclass GougeChartSvg {\n constructor({\n current,\n small,\n width,\n height,\n value,\n worst,\n average,\n best,\n color = ESGImpactHexBorderMap.medium,\n labels = defaultLabels,\n factor = 100,\n }) {\n this.current = current;\n this.small = small;\n this.width = width;\n this.height = height;\n this.colors = color;\n this.radius = Math.min(width, height) / 2 - this.margin;\n this.labels = labels;\n this.value = value;\n this.worst = worst;\n this.average = average;\n this.best = best;\n this.factor = factor;\n }\n\n get margin() {\n return this.width * 0.05;\n }\n\n set value(val) {\n this._value = this.getTrasnformedValues(val);\n }\n\n get value() {\n return this._value;\n }\n\n set color(value) {\n this.colors = {\n ...defaultColors,\n primary: value,\n };\n }\n\n set worst(val) {\n this._worst = this.getTrasnformedValues(val);\n }\n\n get worst() {\n return this._worst;\n }\n\n set average(val) {\n this._average = this.getTrasnformedValues(val);\n }\n\n get average() {\n return this._average;\n }\n\n set best(val) {\n this._best = this.getTrasnformedValues(val);\n }\n\n get best() {\n return this._best;\n }\n\n init() {\n this.svg = d3.select(this.current).append('svg');\n\n this.container = this.svg\n .attr('width', this.width)\n .attr('height', this.height)\n .style('transform', `${this.small ? 'scale(0.6)' : 'none'}`)\n .style('overflow', `${this.small ? 'inherit' : 'hidden'}`)\n .append('g')\n .attr('transform', `translate(${this.width / 2},${this.height / 2 + this.margin * 4})`);\n\n this.drawBackgroundChart();\n this.drawWorstChart();\n this.drawBestChart();\n this.drawPrimaryChart();\n this.drawAverage();\n }\n\n getTrasnformedValues = value => [value, this.factor - value];\n\n drawBackgroundChart() {\n const data = { a: 1 };\n const dataReady = pieGenerator(d3.entries(data));\n\n this.container\n .selectAll('backgroundChartElements')\n .data(dataReady)\n .enter()\n .append('path')\n .attr(\n 'd',\n d3\n .arc()\n .innerRadius(this.radius + 3)\n .outerRadius(this.radius + 8),\n )\n .attr('fill', this.colors.background)\n .exit();\n }\n\n drawPrimaryChart() {\n const data = { a: this.value[0], b: this.value[1] };\n const color = d3\n .scaleOrdinal()\n .domain(data)\n .range([this.colors.primary, 'transparent']);\n\n const dataReady = pieGenerator(d3.entries(data));\n\n this.container\n .selectAll('mainChartElements')\n .data(dataReady)\n .enter()\n .append('path')\n .attr(\n 'd',\n d3\n .arc()\n .innerRadius(this.radius + 10)\n .outerRadius(this.radius),\n )\n .attr('fill', d => color(d.data.key));\n\n this.drawPolylines(data, this.colors.indicator);\n }\n\n drawWorstChart() {\n const data = { a: this.worst[0], [this.labels.worst]: this.worst[1] };\n const color = d3\n .scaleOrdinal()\n .domain(data)\n .range(['transparent', this.colors.secondary, 'transparent']);\n const dataReady = pieGenerator(d3.entries(data));\n\n this.container\n .selectAll('secondaryChartElements')\n .data(dataReady)\n .enter()\n .append('path')\n .attr(\n 'd',\n d3\n .arc()\n .innerRadius(this.radius + 20)\n .outerRadius(this.radius + 30),\n )\n .attr('fill', d => color(d.data.key))\n .exit();\n\n this.drawPolylinesWithLabelsWithLabels(data, this.colors.secondary, 20, 0);\n }\n\n drawBestChart() {\n const data = { a: this.best[0], [this.labels.best]: this.best[1] };\n const color = d3\n .scaleOrdinal()\n .domain(data)\n .range(['transparent', '#fff', 'transparent']);\n const dataReady = pieGenerator(d3.entries(data));\n\n this.container\n .selectAll('secondaryChartElements')\n .data(dataReady)\n .enter()\n .append('path')\n .attr(\n 'd',\n d3\n .arc()\n .innerRadius(this.radius + 18)\n .outerRadius(this.radius + 32),\n )\n .attr('fill', d => color(d.data.key))\n .exit();\n\n this.drawPolylinesWithLabelsWithLabels(data, this.colors.secondary, 20, 65);\n }\n\n drawPolylinesWithLabelsWithLabels(data, color, distance = 0, lengthFactor = 0) {\n this.drawPolylines(data, color, distance, lengthFactor);\n this.drawLabels(data, lengthFactor);\n }\n\n drawPolylines(data, color, distance = 0, lengthFactor = 0) {\n const dataReady = pieGenerator(d3.entries(data));\n const getColor = d3\n .scaleOrdinal()\n .domain(data)\n .range(['transparent', color]);\n\n this.container\n .selectAll('polylines')\n .data(dataReady)\n .enter()\n .append('polyline')\n .attr('stroke', d => getColor(d.data.key))\n .style('fill', 'none')\n .attr('stroke-width', 1)\n .attr('points', d => {\n const posA = getEndAnglePosition({\n innerRadius: this.radius + distance,\n outerRadius: this.radius + distance,\n startAngle: d.startAngle,\n endAngle: d.endAngle,\n });\n\n const posB = getEndAnglePosition({\n innerRadius: this.radius,\n outerRadius: this.radius * 2 + lengthFactor,\n startAngle: d.startAngle,\n endAngle: d.endAngle,\n });\n\n return [posA, posB];\n });\n }\n\n drawLabels(data, lengthFactor) {\n const dataReady = pieGenerator(d3.entries(data));\n\n this.container\n .selectAll('allLabels')\n .data(dataReady)\n .enter()\n .append('text')\n .text(d => (d.data.key.length > 1 ? d.data.key : null))\n .attr('transform', d => {\n const pos = getEndAnglePosition({\n innerRadius: this.radius,\n outerRadius: this.radius * 2 + lengthFactor,\n startAngle: d.startAngle,\n endAngle: d.endAngle,\n });\n const midangle = d.startAngle + (d.endAngle - d.startAngle) / 2;\n pos[0] = midangle < 0.8 ? pos[0] - 25 : pos[0] - 25;\n pos[1] -= 5;\n\n return `translate(${pos})`;\n })\n .exit();\n }\n\n drawAverage() {\n this.drawPolylinesWithLabelsWithLabels(\n { a: this.average[0], [this.labels.average]: this.average[1] },\n this.colors.average,\n 20,\n 30,\n );\n }\n\n destroy() {\n this.svg.remove();\n }\n}\n\nexport default GougeChartSvg;\n","import React, { useRef, useEffect, useState } from 'react';\nimport { isNumber } from 'lodash';\nimport PropTypes from 'prop-types';\nimport Box from '@mui/material/Box';\nimport { useTranslation } from 'react-i18next';\nimport Typography from '@mui/material/Typography';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { ESGImpactHexBorderMap } from 'shared/constants/ESGImpactHexCodesMap';\n\nimport { CustomTooltip } from 'ui';\nimport { useReportPage } from 'shared/hooks';\n\nimport GougeChartSvg from './GougeChartSvg';\n\nconst prepareValue = number => number * 10;\n\nconst useStyles = makeStyles({\n container: {\n position: 'relative',\n textAlign: 'center',\n marginTop: useReportPage ? 20 : 0,\n marginBottom: useReportPage ? -35 : 0,\n },\n scoreBox: {\n position: 'absolute',\n left: '50%',\n bottom: useReportPage ? '22%' : '10%',\n transform: `translateX(-50%) ${useReportPage ? 'scale(0.6)' : ''}`,\n },\n});\n\nconst GougeChart = ({\n width,\n height,\n value,\n worst,\n average,\n best,\n score,\n color,\n title,\n labels,\n factor,\n}) => {\n const ref = useRef(null);\n const [chart, setChart] = useState();\n const classes = useStyles();\n const { t } = useTranslation();\n\n useEffect(() => {\n // eslint-disable-next-line no-new\n setChart(\n new GougeChartSvg({\n current: ref.current,\n small: useReportPage,\n width,\n height,\n value,\n worst,\n average,\n best,\n color,\n labels,\n factor,\n }),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (chart) chart.init();\n }, [chart]);\n\n useEffect(() => {\n if (chart && isNumber(value)) {\n chart.destroy();\n chart.value = prepareValue(value);\n chart.init();\n }\n }, [chart, value]);\n\n useEffect(() => {\n if (chart && isNumber(worst)) {\n chart.destroy();\n chart.worst = prepareValue(worst);\n chart.init();\n }\n }, [chart, worst]);\n\n useEffect(() => {\n if (chart && isNumber(average)) {\n chart.destroy();\n chart.average = prepareValue(average);\n chart.init();\n }\n }, [chart, average]);\n\n useEffect(() => {\n if (chart && color) {\n chart.destroy();\n chart.color = color;\n chart.init();\n }\n }, [chart, color]);\n\n useEffect(() => {\n if (chart && isNumber(best)) {\n chart.destroy();\n chart.best = prepareValue(best);\n chart.init();\n }\n }, [chart, best]);\n\n return (\n <CustomTooltip\n placement=\"right\"\n title={\n <>\n <Typography variant=\"h6\">{t('Peer group comparison')}</Typography>\n <Typography variant=\"caption\">\n {labels ? labels.best : t('Best')}: <strong>{best}</strong>\n </Typography>\n <br />\n <Typography variant=\"caption\">\n {t('Average')}: <strong>{average}</strong>\n </Typography>\n <br />\n <Typography variant=\"caption\">\n {labels ? labels.worst : t('Worst')}: <strong>{worst}</strong>\n </Typography>\n </>\n }\n arrow\n >\n <div ref={ref} className={classes.container}>\n {title && (\n <Box mb={useReportPage ? 1 : 3}>\n <Typography align=\"center\" variant=\"h5\">\n <strong>{title}</strong>\n </Typography>\n </Box>\n )}\n <div className={classes.scoreBox}>{score}</div>\n </div>\n </CustomTooltip>\n );\n};\n\nGougeChart.defaultProps = {\n width: useReportPage ? 190 : 425,\n height: useReportPage ? 180 : 245,\n color: ESGImpactHexBorderMap.medium,\n title: undefined,\n labels: undefined,\n factor: undefined,\n};\n\nGougeChart.propTypes = {\n value: PropTypes.number.isRequired,\n worst: PropTypes.number.isRequired,\n average: PropTypes.number.isRequired,\n best: PropTypes.number.isRequired,\n score: PropTypes.node.isRequired,\n title: PropTypes.node,\n color: PropTypes.string,\n width: PropTypes.number,\n height: PropTypes.number,\n labels: PropTypes.shape({\n average: PropTypes.string,\n worst: PropTypes.string,\n best: PropTypes.string,\n }),\n factor: PropTypes.number,\n};\n\nexport default GougeChart;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { grey } from '@mui/material/colors';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { theme } from 'theme';\n\nconst useStyles = makeStyles({\n container: {\n filter: 'drop-shadow(0px 2px 2px #ccc)',\n display: 'flex',\n justifyContent: 'center',\n position: 'relative',\n paddingTop: theme.spacing(2),\n minWidth: 400,\n },\n pyramid: {\n clipPath: 'polygon(50% 0, 100% 100%, 0 100%, 0 100%)',\n width: 150,\n display: 'flex',\n boxShadow: '5px 5px 5px #000',\n flexDirection: 'column-reverse',\n '& > div': {\n height: 35,\n },\n },\n data: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n paddingLeft: 130,\n paddingRight: 130,\n display: 'flex',\n flexDirection: 'column-reverse',\n '& > div': {\n height: 35,\n borderBottom: `1px dashed ${grey[400]}`,\n display: 'flex',\n justifyContent: 'space-between',\n '&:before, &:after': {\n width: 130,\n display: 'flex',\n alignItems: 'center',\n height: '100%',\n fontSize: 13,\n fontWeight: 500,\n },\n '&:before': {\n paddingRight: theme.spacing(1),\n content: 'attr(data-label)',\n transform: 'translate(-100%, 0)',\n },\n '&:after': {\n paddingLeft: theme.spacing(1),\n content: 'attr(data-value)',\n transform: 'translate(100%, 0)',\n justifyContent: 'flex-end',\n },\n },\n },\n highlight: {\n 'div&': {\n borderColor: theme.palette.primary.main,\n color: theme.palette.primary.main,\n },\n },\n});\n\nconst getColor = (index, isHighlighted) => {\n if (isHighlighted) {\n return theme.palette.primary.main;\n }\n\n switch (index) {\n case 0:\n return '#fff';\n default:\n return grey[index * 100];\n }\n};\n\nconst PyramidChart = ({ data, highlight, ...props }) => {\n const classes = useStyles();\n\n return (\n <div className={classes.container} {...props}>\n <div className={classes.data}>\n {data.map((item, index) => {\n const divClassName = highlight === index ? classes.highlight : undefined;\n\n return (\n <div\n key={item}\n data-label={`Level ${index + 1}`}\n data-value={item}\n className={divClassName}\n />\n );\n })}\n </div>\n <div className={classes.pyramid}>\n {data.map((item, index) => {\n const isHighlighted = highlight === index;\n\n return <div key={item} style={{ backgroundColor: getColor(index, isHighlighted) }} />;\n })}\n </div>\n </div>\n );\n};\n\nPyramidChart.defaultProps = {\n highlight: undefined,\n};\n\nPyramidChart.propTypes = {\n data: PropTypes.array.isRequired,\n highlight: PropTypes.number,\n};\n\nexport default PyramidChart;\n","import makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles(theme => ({\n summaryCard: {\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(3),\n },\n titleMarginBottom: {\n marginBottom: theme.spacing(2),\n },\n businessCards: {\n padding: `${theme.spacing(4)} ${theme.spacing(2)}`,\n borderTop: `1px solid ${theme.palette.grey[300]}`,\n borderBottom: `5px solid ${theme.palette.grey[200]}`,\n marginBottom: theme.spacing(4),\n },\n}));\n\nconst useHeadSquareStyles = makeStyles({\n score: {\n fontWeight: 500,\n fontSize: 60,\n },\n max: {\n fontSize: 24,\n },\n scoreWidgetMainColumn: {\n height: '100%',\n },\n});\n\nexport { useStyles, useHeadSquareStyles };\n","export const shopViews = {\n purchases: 'purchases',\n favorites: 'favorites',\n basket: 'basket',\n};\n","import { ratingTypes } from './ratingTypes';\n\nexport const titleByRatingType = {\n [ratingTypes.CREDIT_RATING]: 'Credit Rating',\n [ratingTypes.CREDIT_REVIEW]: 'Credit Review',\n [ratingTypes.ESG_IMPACT]: 'ESG Impact',\n [ratingTypes.SENTIMENT]: 'ESG Sentiment',\n [ratingTypes.CLIMATE_STRESS_TEST]: 'Climate Stress Test',\n};\n","export const searchCategories = {\n COUNTRY: 'country',\n INDUSTRY: 'industry',\n QUERY: 'query',\n};\n","export const exportModes = {\n BASIC: 'basic',\n EXTENDED: 'extended',\n};\n","import { store } from 'store/store';\nimport { logoutAction } from 'store/login/loginAction';\nimport {\n PAGE_NOT_FOUND_HREF,\n PAGE_SERVICE_UNAVAILABLE_HREF,\n redirectToErrorPage,\n} from 'shared/constants/errorPages';\nimport { API_URL } from 'utils';\nimport { DetailedError } from './DetailedError';\n\nexport const fetchApi = async (\n endpoint,\n options = {},\n headersToRemove = [],\n redirect404 = false,\n redirect500 = true,\n absolutePath = false,\n) => {\n let requestUrl = absolutePath ? `${endpoint}` : `${API_URL}${endpoint}`;\n\n const { token } = store.getState().auth.data;\n\n const headers = {\n 'Content-Type': 'application/json',\n authorization: `Bearer ${token}`,\n ...options.headers,\n };\n\n headersToRemove.forEach((header) => {\n delete headers[header];\n });\n\n if (options.query) {\n const params = new URLSearchParams(options.query);\n requestUrl += `?${params.toString()}`;\n }\n\n return fetch(requestUrl, {\n ...options,\n headers,\n }).then((response) => {\n if ([401].indexOf(response.status) >= 0) {\n store.dispatch(logoutAction);\n return Promise.reject(response);\n }\n if (response.status === 404 && redirect404) {\n redirectToErrorPage(PAGE_NOT_FOUND_HREF);\n return Promise.reject(response);\n }\n if (redirect500 && [500, 501, 502, 503, 504, 505].includes(response.status)) {\n redirectToErrorPage(PAGE_SERVICE_UNAVAILABLE_HREF);\n return Promise.reject(response);\n }\n if (!response.ok) {\n return Promise.reject(response);\n }\n return response;\n });\n};\n\nexport const catchFetchApiError = async (response) => {\n await response.json().then((resp) => {\n let message = resp.message || '';\n if (!message && resp && typeof resp === 'string') message = resp;\n throw new DetailedError(message, response.status, resp);\n });\n};\n\nexport const getFetchApiJSONResponse = (response) => response.json();\n\nexport const getFetchApiTextResponse = (response) => response.text();\n","export const VISIT_RATING_TYPE = 'VISIT_RATING_TYPE';\n\nexport const lastVisitedRatingTypeAction = ({ ratingType }) => ({\n type: VISIT_RATING_TYPE,\n payload: { ratingType },\n});\n","export const GET_ANNOUNCEMENT = 'GET_ANNOUNCEMENT';\nexport const GET_ANNOUNCEMENT_SUCCESS = 'GET_ANNOUNCEMENT_SUCCESS';\nexport const GET_ANNOUNCEMENT_ERROR = 'GET_ANNOUNCEMENT_ERROR';\n\nexport const getAnnouncementAction = ({ id }) => ({\n type: GET_ANNOUNCEMENT,\n payload: {\n id,\n },\n});\n","export const GET_RECENT_USERS = 'GET_RECENT_USERS';\nexport const GET_RECENT_USERS_SUCCESS = `${GET_RECENT_USERS}_SUCCESS`;\nexport const GET_RECENT_USERS_ERROR = `${GET_RECENT_USERS}_ERROR`;\n\nexport const getRecentUsersAction = {\n type: GET_RECENT_USERS,\n};\n","export const GET_INDUSTRIES = 'GET_INDUSTRIES';\nexport const GET_INDUSTRIES_SUCCESS = `${GET_INDUSTRIES}_SUCCESS`;\nexport const GET_INDUSTRIES_ERROR = `${GET_INDUSTRIES}_ERROR`;\n\nexport const getIndustriesAction = {\n type: GET_INDUSTRIES,\n};\n","export const REQUEST_RELATED_ENTITIES = 'REQUEST_RELATED_ENTITIES';\nexport const REQUEST_RELATED_ENTITIES_SUCCESS = 'REQUEST_RELATED_ENTITIES_SUCCESS';\nexport const REQUEST_RELATED_ENTITIES_ERROR = 'REQUEST_RELATED_ENTITIES_ERROR';\n\nexport const requestRelatedEntitiesAction = ({ ids }) => ({\n type: REQUEST_RELATED_ENTITIES,\n payload: {\n ids,\n },\n});\n","export const GET_RATING_COVERAGE = 'GET_RATING_COVERAGE';\nexport const GET_RATING_COVERAGE_SUCCESS = 'GET_RATING_COVERAGE_SUCCESS';\nexport const GET_RATING_COVERAGE_ERROR = 'GET_RATING_COVERAGE_ERROR';\n\nexport const getRatingCoverageAction = {\n type: GET_RATING_COVERAGE,\n};\n","export const GET_ESG_COVERAGE = 'GET_ESG_COVERAGE';\nexport const GET_ESG_COVERAGE_SUCCESS = 'GET_ESG_COVERAGE_SUCCESS';\nexport const GET_ESG_COVERAGE_ERROR = 'GET_ESG_COVERAGE_ERROR';\n\nexport const getESGCoverageAction = {\n type: GET_ESG_COVERAGE,\n};\n","export const GET_REGIONS = 'GET_ESG_REGIONS';\nexport const GET_REGIONS_SUCCESS = 'GET_ESG_REGIONS_SUCCESS';\nexport const GET_REGIONS_ERROR = 'GET_ESG_REGIONS_ERROR';\n\nexport const getRegionsAction = {\n type: GET_REGIONS,\n};\n","export enum portfolioItemTypes {\n INSTRUMENT = 'issues',\n ENTITY = 'issuers',\n COMMENTARY = 'commentaries',\n COMPANY_NEWS = 'companyNews',\n RATING_NEWS = 'ratingNews',\n RESEARCH = 'researches',\n MONITORING_NOTES = 'monitoringNotes',\n}\n\nexport const consolidatedPortfolioItemTypes: Partial<Record<\n portfolioItemTypes,\n portfolioItemTypes[]\n>> = {\n [portfolioItemTypes.RATING_NEWS]: [\n portfolioItemTypes.RATING_NEWS,\n portfolioItemTypes.MONITORING_NOTES,\n ],\n [portfolioItemTypes.RESEARCH]: [portfolioItemTypes.RESEARCH, portfolioItemTypes.COMMENTARY],\n [portfolioItemTypes.INSTRUMENT]: [portfolioItemTypes.INSTRUMENT],\n [portfolioItemTypes.ENTITY]: [portfolioItemTypes.ENTITY],\n};\n","import React, { ReactElement } from 'react';\nimport CreditCardIcon from '@mui/icons-material/CreditCard';\nimport ViewCompactIcon from '@mui/icons-material/ViewCompact';\nimport InsertChartIcon from '@mui/icons-material/InsertChart';\nimport FolderSpecialIcon from '@mui/icons-material/FolderSpecial';\nimport PeopleIcon from '@mui/icons-material/People';\nimport TimerIcon from '@mui/icons-material/Timer';\nimport ListIcon from '@mui/icons-material/List';\nimport SupervisorAccountIcon from '@mui/icons-material/SupervisorAccount';\nimport AccountTreeIcon from '@mui/icons-material/AccountTree';\nimport DeveloperBoardIcon from '@mui/icons-material/DeveloperBoard';\nimport RestoreIcon from '@mui/icons-material/Restore';\nimport VpnKeyIcon from '@mui/icons-material/VpnKey';\nimport TrendingUpIcon from '@mui/icons-material/TrendingUp';\nimport ScoreIcon from '@mui/icons-material/Score';\nimport LocationCityIcon from '@mui/icons-material/LocationCity';\nimport AssessmentIcon from '@mui/icons-material/Assessment';\nimport SettingsIcon from '@mui/icons-material/Settings';\nimport EuroIcon from '@mui/icons-material/Euro';\nimport EventAvailableIcon from '@mui/icons-material/EventAvailable';\nimport PostAddIcon from '@mui/icons-material/PostAdd';\nimport HomeIcon from '@mui/icons-material/Home';\nimport SearchIcon from '@mui/icons-material/Search';\nimport SubjectIcon from '@mui/icons-material/Subject';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport VideocamIcon from '@mui/icons-material/Videocam';\nimport StarIcon from '@mui/icons-material/Star';\nimport BarChartIcon from '@mui/icons-material/BarChart';\nimport SvgIcon from '@mui/material/SvgIcon';\n\nimport FAQIcon from 'assets/icons/faq.svg';\nimport { licencesTypes } from 'shared/constants/licencesTypes';\nimport { permissionsTypes } from 'shared/constants/permissionsTypes';\nimport { allStandardRolesTypes, organisationAdmin } from 'shared/constants/rolesTypes';\nimport { shopRoles } from 'modules/shop/shared/constants/shopRoles';\nimport { EnvironmentTypes } from './environmentTypes';\n\nexport type SubnavigationItem = {\n to?: string;\n label: string;\n icon: ReactElement;\n role?: string[] | string;\n shopPermissions?: string[];\n permission?: string;\n external?: boolean;\n licence?: string;\n subnavigation?: SubnavigationItem[];\n hidden?: boolean;\n environment?: EnvironmentTypes;\n component?: ReactElement;\n};\n\nexport type MenuItems = {\n label: string;\n icon: ReactElement;\n licence: string;\n subnavigation: SubnavigationItem[];\n shopPermissions?: string[];\n};\n\nexport const creditAnalysis: MenuItems = {\n label: 'Finance intelligence',\n icon: <CreditCardIcon />,\n licence: licencesTypes.INVESTORHUB_MODULE,\n subnavigation: [\n {\n to: `${window.location.origin}/page-one`,\n label: 'Overview',\n icon: <ViewCompactIcon />,\n role: allStandardRolesTypes,\n },\n {\n to: '/issuer-dashboard',\n label: 'Issuer Dashboard',\n icon: <InsertChartIcon />,\n shopPermissions: [shopRoles.ISSUER_DASHBOARD],\n },\n {\n to: '/portfolios',\n label: 'Portfolios',\n icon: <FolderSpecialIcon />,\n permission: permissionsTypes.CA_VIEW_DOSSIER,\n },\n {\n to: '/events',\n label: 'Events',\n icon: <EventAvailableIcon />,\n role: allStandardRolesTypes,\n },\n {\n to: '/subscriptions',\n label: 'Subscriptions',\n icon: <EuroIcon />,\n role: allStandardRolesTypes,\n },\n ],\n};\n\nexport const riskSolutions: MenuItems = {\n label: 'Risk solutions',\n icon: <TrendingUpIcon />,\n licence: licencesTypes.RISKANALYSIS_MODULE,\n subnavigation: [\n {\n to: '/rs/#quick-score',\n label: 'Quick score',\n icon: <ScoreIcon />,\n external: true,\n },\n {\n to: '/rs/#legal-entity-list',\n label: 'Legal entities',\n icon: <LocationCityIcon />,\n external: true,\n },\n {\n to: '/rs/#assessments-list',\n label: 'Assessments',\n icon: <AssessmentIcon />,\n external: true,\n },\n {\n to: '/rs/#settings',\n label: 'Settings',\n icon: <SettingsIcon />,\n external: true,\n },\n ],\n};\n\nexport const analyticalOperations: MenuItems = {\n label: 'Analytical operations',\n icon: <TimerIcon />,\n licence: licencesTypes.ANALYTICALOPERATIONS_MODULE,\n subnavigation: [\n {\n to: '/ao/#internal-orders',\n label: 'Internal orders',\n icon: <ListIcon />,\n external: true,\n },\n {\n to: '/ao/#roles-management',\n label: 'Roles management',\n icon: <SupervisorAccountIcon />,\n permission: permissionsTypes.A_ANOP_VIEW_ROLES_MANAGEMENT,\n external: true,\n },\n ],\n};\n\nexport const generalServices: MenuItems = {\n label: 'General services',\n icon: <AccountTreeIcon />,\n licence: licencesTypes.ADMIN_MODULE,\n subnavigation: [\n {\n to: '/admin/#organisations',\n label: 'Dashboard',\n icon: <ViewCompactIcon />,\n permission: permissionsTypes.SSO_VIEW_ORGANISATIONS_LIST,\n external: true,\n },\n {\n to: '/admin/#home',\n label: 'Dashboard',\n icon: <ViewCompactIcon />,\n role: organisationAdmin,\n external: true,\n },\n {\n to: '/admin/#orders',\n label: 'Request history',\n icon: <RestoreIcon />,\n permission: permissionsTypes.CA_SEARCH_ORDER_ITEMS,\n external: true,\n },\n {\n to: '/admin/#leaderboard',\n label: 'Leaderboard',\n icon: <DeveloperBoardIcon />,\n permission: permissionsTypes.CA_VIEW_LEADERBOARD,\n external: true,\n },\n {\n to: '/admin/#master-password',\n label: 'Master password',\n icon: <VpnKeyIcon />,\n permission: permissionsTypes.SSO_MASTER_PASSWORD,\n external: true,\n },\n ],\n};\n\nexport const subscriptionsServices: MenuItems = {\n label: 'Subscriptions panel',\n icon: <EuroIcon />,\n licence: licencesTypes.INVESTORHUB_MODULE,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n subnavigation: [\n {\n to: '/subscriptions/panel',\n label: 'View products',\n icon: <ViewCompactIcon />,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n },\n {\n to: '/subscriptions/panel/create',\n label: 'Create product',\n icon: <PostAddIcon />,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n },\n ],\n};\n\nexport const eventsServices: MenuItems = {\n label: 'Events panel',\n icon: <EventAvailableIcon />,\n licence: licencesTypes.INVESTORHUB_MODULE,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n subnavigation: [\n {\n to: '/event-panel/view',\n label: 'View events',\n icon: <ViewCompactIcon />,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n },\n {\n to: '/event-panel/create',\n label: 'Create event',\n icon: <PostAddIcon />,\n shopPermissions: [shopRoles.SHOP_ADMIN],\n },\n ],\n};\n\nexport const scopeExplorer: MenuItems = {\n label: 'ScopeExplorer',\n icon: <HomeIcon />,\n licence: licencesTypes.SCOPEEXPLORER_MODULE,\n subnavigation: [\n {\n to: '/scopex/en/',\n label: 'Search',\n icon: <SearchIcon />,\n external: true,\n },\n {\n to: '/scopex/en/funds-in-focus',\n label: 'Funds in focus',\n icon: <SubjectIcon />,\n external: true,\n },\n {\n label: 'Services',\n icon: <KeyboardArrowDownIcon />,\n licence: licencesTypes.SCOPEEXPLORER_MODULE,\n subnavigation: [\n {\n to: '/scopex/en/conferences',\n label: 'Conferences',\n icon: <VideocamIcon />,\n external: true,\n },\n {\n to: '/scopex/en/aif-page',\n label: 'OIF Studie 2020',\n icon: <StarIcon />,\n external: true,\n },\n ],\n },\n {\n label: 'Publications',\n icon: <KeyboardArrowDownIcon />,\n licence: licencesTypes.SCOPEEXPLORER_MODULE,\n subnavigation: [\n {\n to: '/scopex/en/news',\n label: 'News',\n icon: <SubjectIcon />,\n external: true,\n },\n {\n to: '/scopex/en/reports',\n label: 'Reports',\n icon: <SubjectIcon />,\n external: true,\n },\n {\n to: '/scopex/en/rating-in-focus',\n label: 'Team Ratings',\n icon: <BarChartIcon />,\n external: true,\n },\n ],\n },\n {\n to: '/scopex/en/asset-managers',\n label: 'Asset Manager',\n icon: <SubjectIcon />,\n external: true,\n },\n {\n to: '/scopex/en/premium',\n label: 'Premium',\n icon: <SubjectIcon />,\n external: true,\n },\n ],\n};\n\nconst restrictedSubscriptionRatingsFeature =\n process.env.REACT_APP_ENV !== EnvironmentTypes.PRODUCTION;\n\nexport const admin: MenuItems = {\n label: 'Admin',\n icon: <SupervisorAccountIcon />, // there will be different icon\n licence: licencesTypes.ADMIN_MODULE,\n subnavigation: [\n {\n to: '/admin-panel/rsr',\n label: 'Restricted Subscription Ratings',\n icon: <ViewCompactIcon />,\n // permission: permissionsTypes.CA_RSR_CONFIG,\n hidden: !restrictedSubscriptionRatingsFeature,\n },\n {\n to: '/admin-panel/psr',\n label: 'Private Subscription Ratings',\n icon: <ViewCompactIcon />,\n // permission: permissionsTypes.CA_RSR_CONFIG,\n hidden: !restrictedSubscriptionRatingsFeature,\n },\n ],\n};\n","export const activitiesParser = data =>\n data.map(item => [item.name, item.countryCode, item.location]);\n","import { getMethodologyPath } from 'services';\nimport { leadAnalystParser, documentsParser } from 'shared/parsers';\n\nexport const artifactsParser = (data) =>\n data.map(\n ({\n publicationDate,\n shortTitle,\n shortText,\n artifactType,\n restricted,\n relatedArtifacts,\n id,\n }) => ({\n publicationDate,\n title: shortTitle,\n teaser: shortText,\n type: artifactType,\n restricted,\n relatedArtifacts,\n id,\n }),\n );\n\nconst ratingsParser = (ratings) =>\n ratings.map(\n ({\n rating,\n preliminaryFlag,\n notchSuffix,\n outlook,\n name,\n leadAnalyst,\n committeeChair,\n demandType,\n ratingAction,\n ratingClassification,\n ratingDate,\n endorsementLocations,\n issuanceLocation,\n }) => ({\n rating,\n preliminaryFlag,\n notchSuffix,\n outlook,\n name,\n leadAnalyst: `${leadAnalyst.firstName} ${leadAnalyst.name}`,\n committeeChair,\n demandType,\n ratingAction,\n ratingClassification,\n ratingDate,\n endorsementLocations,\n issuanceLocation,\n }),\n );\n\nconst superLevelParser = ({ approved, available, chargeable, purchased, ratings }) => ({\n approved,\n available,\n chargeable,\n purchased,\n ratings: ratingsParser(ratings),\n});\n\nexport const productsParser = ({ data }) => {\n const { coi, l1, l2, l3, l4, l5, leadAnalyst } = data;\n\n return {\n conflictOfInterests: coi,\n l1,\n l2,\n l3,\n l4: superLevelParser(l4),\n l5: superLevelParser(l5),\n ...(leadAnalyst && { leadAnalyst: leadAnalystParser(leadAnalyst) }),\n };\n};\n\nconst methodologiesParser = (data) =>\n data.map(({ id, fileName, publicationDate, title }) => ({\n path: getMethodologyPath(id),\n name: fileName,\n publicationDate,\n title,\n }));\n\nexport const entityParser = ({\n entityApiBasic,\n entityApiData,\n documentsApiData,\n productsApiData,\n}) => {\n if (entityApiBasic) {\n const { name, classification, countryCode } = entityApiBasic.data;\n\n return {\n name,\n industry: classification.name,\n countryCode,\n products: {\n l1: { available: false, ratings: [] },\n l2: { available: false, ratings: [] },\n l3: { available: false, ratings: [] },\n l4: { available: false, ratings: [] },\n l5: { available: false, ratings: [] },\n },\n };\n }\n\n const {\n name,\n methodologies,\n classification,\n countryCode,\n ultimateIssuer,\n issueCount,\n ratingNewsCount,\n researchCount,\n spv,\n } = entityApiData.data;\n\n return {\n name,\n methodologies: methodologiesParser(methodologies),\n industry: classification && classification.name,\n industryCode: classification && classification.code,\n countryCode,\n ultimateIssuer,\n issueCount,\n ratingNewsCount,\n researchCount,\n spv,\n products: productsParser(productsApiData),\n ...(documentsApiData && { documents: documentsParser(documentsApiData.data) }),\n };\n};\n\nexport const instrumentParser = ({ instrumentApiData, documentsApiData, productsApiData }) => {\n const {\n name,\n issuer: entity,\n bond,\n methodologies,\n classification,\n currentAmountOutstandingVolume,\n currentAmountOutstandingDate,\n ratingNewsCount,\n researchCount,\n } = instrumentApiData.data;\n const {\n couponPercent,\n currency,\n isin,\n issueDate,\n maturity,\n maturityPerpetualFlag,\n seniorityType,\n volume,\n } = bond;\n\n return {\n name,\n entityId: entity.id,\n entityName: entity.name,\n couponPercent,\n currency,\n isin,\n date: issueDate,\n maturity,\n maturityPerpetualFlag,\n ratingNewsCount,\n researchCount,\n seniorityType,\n volume,\n outstandingVolume: currentAmountOutstandingVolume,\n outstandingDate: currentAmountOutstandingDate,\n methodologies: methodologiesParser(methodologies),\n industry: classification && classification.name,\n industryCode: classification && classification.code,\n documents: documentsParser(documentsApiData.data),\n products: productsParser(productsApiData),\n };\n};\n","export const loginParser = ({ token, organisation, roles, licences, user }) => {\n return {\n userId: user.userId,\n firstName: user.firstName,\n name: user.name,\n newsCentreSettingsSaved: user.newsCentreSettingsSaved,\n remember: true,\n token,\n licences,\n roles,\n organisation,\n organisationId: organisation.id,\n };\n};\n","export const mergePermissionsParser = permissions => {\n const mergedPermissions = Object.values(permissions).reduce(\n (p, c) => ({\n ...p,\n ...c,\n }),\n [],\n );\n\n return Object.entries(mergedPermissions).map(permission => permission[0]);\n};\n","export const permissionsParser = permissions =>\n Object.entries(permissions).reduce(\n (prev, [key, val]) => ({\n ...prev,\n [key]: val.reduce((p, c) => ({ ...p, ...c }), {}),\n }),\n {},\n );\n","export const userParser = ({\n administrativeRights,\n email,\n jobFunction,\n jobTitle,\n licencesAndRoles,\n phone,\n hasCofaceLicense,\n}) => {\n return {\n administrativeRights,\n email,\n jobFunction,\n jobTitle,\n licencesAndRoles,\n phone,\n hasCofaceLicense,\n };\n};\n","import intersection from 'lodash/intersection';\n\nexport const validateRoles = (userRoles, availableRoles) =>\n Array.isArray(availableRoles)\n ? intersection(userRoles, availableRoles).length > 0\n : userRoles.includes(availableRoles);\n","export const jobFunctionsParser = data => data.map(({ name }) => name);\n","import { getName } from 'country-list';\nimport get from 'lodash/get';\nimport { parseRatingType, parseIndustryType, parseDemandType } from 'shared/parsers';\n\nexport const entitiesToTableParser = (data) => {\n return data.map((item) => [\n [item.artifactId || item.id, item.product, item.artifactId ? item.id : undefined],\n [item.artifactId || item.id, item.name || item.issuerName],\n item.lei,\n item.countryCode ? getName(item.countryCode) : undefined,\n parseIndustryType(item.industryClassification),\n item.ultimateIssuerId && [item.ultimateIssuerId, item.ultimateIssuerName],\n parseRatingType(item.ratingType),\n parseDemandType(item.longTermRating?.demandType),\n [\n item.artifactId || item.id,\n item.product,\n get(item, 'longTermRating.rating'),\n get(item, 'longTermRating.outlook'),\n item.hasLicence,\n item.longTermRatingTrend,\n get(item, 'previousLongTermRating.rating', '-'),\n get(item, 'previousLongTermRating.outlook', '-'),\n get(item, 'longTermRating.ratingDate', '-'),\n [\n {\n country: item.countryCode,\n industries: item.industryClassification\n ? [parseIndustryType(item.industryClassification)]\n : [],\n },\n ],\n item.longTermRating?.demandType,\n ],\n [\n item.shortTermRating && item.shortTermRating.rating,\n item.shortTermRatingTrend,\n get(item, 'previousShortTermRating.rating', '-'),\n get(item, 'shortTermRating.ratingDate', '-'),\n item.shortTermRating?.demandType,\n ],\n item.publicRating,\n item.subscriptionRating,\n item.rsr,\n item.addedDate,\n [\n item.longTermRatingTrend,\n get(item, 'previousLongTermRating.rating', '-'),\n get(item, 'longTermRating.ratingDate', '-'),\n ],\n ]);\n};\n","import round from 'lodash/round';\nimport get from 'lodash/get';\n\nimport { formatCurrency, formatDate } from 'shared/functions';\nimport { parseRatingType } from 'shared/parsers';\nimport { isNil } from 'lodash';\n\nexport const instrumentsToTableParser = (data) => {\n return data.map((item) => {\n const isBlurred = item.ratingType === 'RESTRICTED_SUBSCRIPTION' && !item.hasLicence;\n\n return [\n parseRatingType(item.ratingType),\n [item.artifactId || item.id, item.product, item.artifactId ? item.id : undefined, isBlurred],\n [item.artifactId || item.id, item.name || item.issueName, isBlurred],\n [item.isin, isBlurred],\n [(item.issuer && item.issuer.name) || item.issuerName, isBlurred],\n [\n item.artifactId || item.id,\n item.product,\n get(item, 'rating.rating'),\n get(item, 'rating.outlook'),\n item.hasLicence,\n item.ratingTrend,\n get(item, 'previousRating.ratingDate', '-'),\n get(item, 'previousRating.outlook', '-'),\n get(item, 'rating.ratingDate', '-'),\n item.rating?.demandType,\n isBlurred,\n item.rating?.id,\n item.rating?.notchSuffix,\n item.rating?.preliminaryFlag,\n ],\n [get(item, 'coupon.maturityDate') ? formatDate(item.coupon.maturityDate) : null, isBlurred],\n [\n !isNil(item.coupon?.couponPercent) ? `${round(item.coupon.couponPercent, 1)}%` : '-',\n isBlurred,\n ],\n [formatCurrency(item.issueVolume, item.currencyCode), isBlurred],\n [item.addedDate, isBlurred],\n ];\n });\n};\n","import { formatDate } from 'shared/functions';\nimport { consolidatedPortfolioItemTypes } from 'shared/constants/portfolio/portfolioItemTypes';\n\nconst itemsCount = (dossierItem, itemsType) => {\n const count =\n dossierItem.itemsTypeCount &&\n consolidatedPortfolioItemTypes[itemsType]\n .map(type => dossierItem.itemsTypeCount[type])\n .reduce((a, b) => a + (b || 0), 0);\n return count || '-';\n};\n\nexport const creditRatingPortfoliosToTableParser = data => {\n return data.map(item => [\n item.id,\n [item.id, item.name, item.description],\n item.noOfItems,\n itemsCount(item, 'issuers'),\n itemsCount(item, 'issues'),\n itemsCount(item, 'ratingNews'),\n itemsCount(item, 'researches'),\n formatDate(item.createdDate),\n formatDate(item.modifiedDate),\n [item.id, item.watchlistEnabled],\n null,\n ]);\n};\n","import { formatDate } from 'shared/functions';\n\nexport const creditReviewPortfoliosToTableParser = data => {\n return data.map(item => [\n item.id,\n [item.id, item.name, item.description, item.isDedicated, item.noOfItems],\n item.noOfItems,\n formatDate(item.createdDate),\n formatDate(item.modifiedDate),\n [item.id, item.watchlistEnabled, item.isDedicated],\n item.activity,\n ]);\n};\n","import { formatDate } from 'shared/functions';\n\nexport const esgPortfoliosToTableParser = data => {\n return data.map(item => [\n item.id,\n [item.id, item.name, item.description, item.isDedicated],\n item.noOfItems,\n formatDate(item.createdDate),\n formatDate(item.modifiedDate),\n null,\n ]);\n};\n","import isNull from 'lodash/isNull';\n\nimport { getName } from 'country-list';\n\nexport const creditReviewToTableParser = ({\n easy_number: easyNumber,\n name,\n city,\n address,\n postal_code: postalCode,\n VAT,\n HRN,\n LEI,\n country: countryCode,\n sector,\n sectorRiskLevel,\n creditScore,\n oldScore,\n creditScoreDate,\n businessClimate,\n countryRiskAssessment,\n probabilityOfDefault,\n probabilityOfDefaultDefinition,\n requested,\n activity,\n}) => {\n const country = countryCode ? getName(countryCode) || countryCode : '-';\n const creditScoreRow = {\n creditScore: isNull(creditScore) ? '-' : creditScore,\n oldScore,\n creditScoreDate,\n };\n return [\n easyNumber,\n [name, VAT, HRN, LEI, requested],\n isNull(country) ? '-' : country,\n isNull(sector) ? '-' : sector,\n isNull(city) ? '-' : [city, address],\n isNull(postalCode) ? '-' : postalCode,\n creditScoreRow,\n [isNull(probabilityOfDefault) ? '-' : probabilityOfDefault, probabilityOfDefaultDefinition],\n isNull(sectorRiskLevel) ? '-' : sectorRiskLevel,\n isNull(businessClimate) ? '-' : businessClimate,\n isNull(countryRiskAssessment) ? '-' : countryRiskAssessment,\n (requested && requested.score_date) || false,\n isNull(requested) ? false : requested,\n (requested && requested.monitoring) || false,\n activity,\n ];\n};\n\nexport const creditReviewListToTableParser = data => data.map(creditReviewToTableParser);\n","import { getName } from 'country-list';\n\nexport const esgImpactToTableParser = data =>\n data.map(\n ({\n scopeoneIdentifier,\n companyName,\n isin,\n esgId,\n country,\n industry,\n environment,\n social,\n governance,\n totalScore,\n wasPurchased,\n requestState,\n requestDate,\n artifactId,\n }) => {\n const countryName = getName(country) || country;\n\n return [\n scopeoneIdentifier || esgId,\n [companyName, requestState],\n countryName || '-',\n industry || '-',\n [environment || '-', requestState],\n [social || '-', requestState],\n [governance || '-', requestState],\n [\n {\n id: scopeoneIdentifier,\n isin,\n esgId,\n totalScore: totalScore && typeof totalScore === 'number' ? totalScore.toFixed(1) : '-',\n companyName,\n wasPurchased,\n },\n requestState,\n requestDate,\n ],\n wasPurchased,\n [scopeoneIdentifier, esgId, artifactId],\n ];\n },\n );\n","import { getName } from 'country-list';\nimport { SentifyEntity } from 'modules/ESGSentiment/types/esgSentiment';\n\nexport const esgSentimentToTableParser = (data: SentifyEntity[]) =>\n data.map(\n ({\n countryCode,\n sentifiId,\n name,\n industryName,\n scopeId,\n scores,\n meta: { hasPermission, hasCompany, hasScore },\n }) => {\n const meta = [hasPermission, hasCompany, hasScore];\n\n return [\n scopeId,\n [name],\n getName(countryCode) || '-',\n industryName || '-',\n [scores?.eScore || '-', ...meta],\n [scores?.sScore || '-', ...meta],\n [scores?.gScore || '-', ...meta],\n [\n {\n esgId: scopeId,\n totalScore: scores?.esgScore || '-',\n },\n ...meta,\n ],\n hasPermission,\n [scopeId, sentifiId],\n ];\n },\n );\n","import { portfolioItemTypes } from 'shared/constants/portfolio/portfolioItemTypes';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { instrumentsToTableParser } from '../instrumentsToTable/instrumentsToTableParser';\nimport { entitiesToTableParser } from '../entitiesToTable/entitiesToTableParser';\nimport { creditReviewListToTableParser } from '../creditReviewToTable/creditReviewToTableParser';\nimport { esgImpactToTableParser } from '../esgImpactToTable/esgImpactToTableParser';\nimport { esgSentimentToTableParser } from '../esgSentimentToTable/esgSentimentToTableParser';\n\nconst entityByRatingTypeParser = {\n [ratingTypes.CREDIT_RATING]: entitiesToTableParser,\n [ratingTypes.CREDIT_REVIEW]: creditReviewListToTableParser,\n [ratingTypes.ESG_IMPACT]: esgImpactToTableParser,\n [ratingTypes.SENTIMENT]: esgSentimentToTableParser,\n};\n\nconst getItemTypesToParsers = (itemsType, ratingType) => {\n const parsers = {\n [portfolioItemTypes.INSTRUMENT]: instrumentsToTableParser,\n [portfolioItemTypes.ENTITY]: entityByRatingTypeParser[ratingType],\n [portfolioItemTypes.RATING_NEWS]: null,\n [portfolioItemTypes.RESEARCH]: null,\n [portfolioItemTypes.COMMENTARY]: null,\n [portfolioItemTypes.COMPANY_NEWS]: null,\n };\n\n return parsers[itemsType];\n};\n\nexport const dossierItemsToTableParser = (\n data,\n itemsType,\n ratingType = ratingTypes.CREDIT_RATING,\n) => {\n const parser = getItemTypesToParsers(itemsType, ratingType);\n return parser ? parser(data) : data;\n};\n","import { kebabCase } from 'shared/functions';\n\n// TODO: Its mocked data until we decide to get it from backend\nconst checkBusinessLine = (businessLine, percent) => {\n switch (businessLine) {\n case 'Banks':\n return 49;\n case 'Corporates':\n return 40;\n case 'Sovereigns':\n return 100;\n case 'Sub-Sovereigns':\n return 69;\n case 'Supranationals':\n return 50;\n default:\n return percent;\n }\n};\n\nexport const ratingCoveragePercentagesParser = data =>\n data\n .filter(v => v.percent > 0)\n .map(({ businessLine, rated, percent }) => ({\n label: businessLine,\n total: rated,\n percent: checkBusinessLine(businessLine, percent),\n id: kebabCase(businessLine),\n }));\n","import { ratingRequestAvailable } from 'shared/functions';\n\nexport const ratingRequestParser = items =>\n items\n .map(item => item[0])\n .filter(item => ratingRequestAvailable(item[1]))\n .map(item => ({\n id: item[0],\n level: item[1].l5 && item[1].l5.available ? 'L5' : 'L4',\n }));\n","import { humanize } from 'shared/functions';\n\nconst ratingTypeToString = {\n PUBLIC: 'Public',\n SUBSCRIPTION: 'Subscription',\n ON_REQUEST: 'Subscription',\n RESTRICTED_SUBSCRIPTION: 'Restricted Subscription',\n PRIVATE: 'Private',\n};\n\nexport const parseRatingType = (rating) =>\n rating ? ratingTypeToString[rating] || humanize(rating) : '';\n","export const parseDemandType = (demandType) => demandType?.split(' ')[0] || '';\n","export const recentUsersParser = data =>\n data.map(item => ({\n id: item.userId,\n name: `${item.firstName} ${item.name}`,\n position: item.jobTitle,\n }));\n","export const leadAnalystParser = ({\n analystTeams,\n firstName,\n followed,\n id,\n jobFunction,\n jobTitle,\n name,\n}) => ({\n analystTeams,\n firstName,\n lastName: name,\n followed,\n userId: id,\n jobFunction,\n jobTitle,\n});\n","import isNil from 'lodash/isNil';\nimport { industriesMapping } from 'shared/mappings/industries/industriesMapping';\n\nexport const parseIndustriesMapping = classification =>\n Array.isArray(classification) &&\n classification\n .map(({ sectors }) => sectors)\n .flat()\n .reduce(\n (obj, item) => ({\n ...obj,\n [item.code]: item.name,\n }),\n {},\n );\n\nexport const parseIndustryType = industryType => {\n if (isNil(industryType)) return null;\n\n return (\n (industryType.length === 4 &&\n industryType === industryType.toUpperCase() &&\n industriesMapping[industryType]) ||\n industryType\n );\n};\n","import flatten from 'lodash/flatten';\nimport { searchCategories } from 'shared/constants/searchCategories';\n\nexport const flattenIndustries = (industries, isSearchable = false) =>\n industries\n ? flatten(\n industries.map(({ sectors, code: industryCode, name: industryName }) =>\n sectors.map(({ code, name }) => ({\n code,\n name,\n industryCode,\n industryName,\n ...(isSearchable\n ? { category: searchCategories.INDUSTRY, group: industryName, value: code }\n : {}),\n })),\n ),\n )\n : [];\n","import orderBy from 'lodash/orderBy';\n\nexport const parseIndustries = data => {\n if (!Array.isArray(data)) {\n return data;\n }\n const industriesSorted = orderBy(data, 'name', 'asc');\n return industriesSorted.map(industry => ({\n ...industry,\n sectors: orderBy(industry.sectors, 'name', 'asc'),\n }));\n};\n","export const selectedItemsToProductsParser = ({\n selected,\n artifactType,\n frequency,\n purchaseType,\n}) =>\n selected.map(el => ({\n artifactId: el.id,\n artifactType,\n productCategory: el.level,\n frequency,\n purchaseType,\n }));\n","import { searchCategories } from 'shared/constants/searchCategories';\n\nconst mapCountries = (country, continent, continentCode, isSearchable) => ({\n ...country,\n continent,\n continentCode,\n ...(isSearchable\n ? { category: searchCategories.COUNTRY, group: continent, value: country.iso }\n : {}),\n});\n\nexport const regionsParser = (regions, isSearchable = false) => {\n return regions.reduce((current, next) => {\n let total = current;\n\n if (!Array.isArray(current)) {\n total = current.countries.map(country =>\n mapCountries(country, current.continent, current.continentCode, isSearchable),\n );\n }\n\n return [\n ...total,\n ...next.countries.map(country =>\n mapCountries(country, next.continent, next.continentCode, isSearchable),\n ),\n ];\n }, []);\n};\n","import get from 'lodash/get';\nimport { newsletterFrequencies } from 'shared/constants/news/newsletterFrequencies';\n\nexport const newsletterSettingsParser = ({ newsletter }) => {\n const countriesList = get(newsletter, 'countryCode', null);\n\n return {\n frequency: get(newsletter, 'frequency', newsletterFrequencies.NONE),\n newsTypes: get(newsletter, 'news', []),\n industryTypes: get(newsletter, 'classifications[0].values', []),\n limitToFollowedAnalysts: get(newsletter, 'limitToFollowedAnalysts', false),\n useNewsFeedPreferences: get(newsletter, 'useNewsFeedPreferences', false),\n countriesList: countriesList ? countriesList.split(';') : [],\n };\n};\n\nexport const emailNotificationsParser = ({ emailNotifications }) => {\n return {\n frequency: emailNotifications.frequency,\n type: emailNotifications.type,\n };\n};\n\nexport const newsFeedSettingsParser = preferences => {\n const countriesList = get(preferences, 'newsFeed.countryCode', null);\n\n return {\n newsTypes: get(preferences, 'newsFeed.news', []),\n industryTypes: get(preferences, 'newsFeed.classifications[0].values', []),\n limitToFollowedAnalysts: get(preferences, 'newsFeed.limitToFollowedAnalysts', false),\n countriesList: countriesList ? countriesList.split(';') : [],\n };\n};\n\nexport const initialSettingsParser = (prefs = {}) => ({\n newsFeed: newsFeedSettingsParser(prefs),\n newsletter: newsletterSettingsParser(prefs),\n emailNotifications: emailNotificationsParser(prefs),\n});\n","export const investorRelationsToTableParser = (data = []) => {\n return data?.map((el) => [[el]]);\n};\n","export const parseEntitiesIndustries = entities => [\n ...new Set(entities.map(({ industryClassification }) => industryClassification)),\n];\n","import { getName } from 'country-list';\n\nexport const parseRelatedEntities = entities =>\n entities.map(({ id, name, countryCode, longTermRating }) => [\n [id, name],\n getName(countryCode),\n longTermRating ? longTermRating.rating : '-',\n ]);\n","import { getName } from 'country-list';\n\nimport { parseRatingType } from 'shared/parsers';\n\nexport const parseIndustryEntities = entities =>\n entities.map(({ id, name, countryCode, longTermRating, shortTermRating, ratingType }) => [\n [id, name],\n getName(countryCode),\n ratingType ? parseRatingType(ratingType) : '-',\n longTermRating ? longTermRating.rating : '-',\n shortTermRating ? shortTermRating.rating : '-',\n ]);\n","export const searchEntitiesFiltersParser = ({ industrySectors, countries }, industries) => ({\n ...(countries ? { countries } : {}),\n ...(industrySectors\n ? {\n sector: industrySectors.map(item => {\n const sector = industries.find(({ code }) => item.sector === code);\n\n return sector.name;\n }),\n }\n : {}),\n});\n\nexport const searchNewsFiltersParser = ({ industrySectors }) => {\n return industrySectors ? { industrySectors } : {};\n};\n\nexport const searchNewsQueryParser = (query, filters, countries) => {\n const queryString = query || '';\n\n if (!filters.countries || !filters.countries.length) {\n return queryString;\n }\n\n const countriesQueryString = filters.countries\n .map(item => {\n const country = countries.find(({ iso }) => item === iso);\n\n return country.name;\n })\n .join(' ');\n\n return `${queryString} ${countriesQueryString}`;\n};\n","import upperFirst from 'lodash/upperFirst';\nimport orderBy from 'lodash/orderBy';\nimport getYear from 'date-fns/getYear';\nimport getMonth from 'date-fns/getMonth';\n\nimport { formatDate } from 'shared/functions';\nimport { creditRatingRangeMapping } from 'shared/constants/creditRatingRangeValues';\nimport { creditRatingScalesMapping, creditRatingScalesMap } from 'shared/mappings';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { summaryTabCreditRatingNamesPriorites } from 'shared/constants/summaryTab';\nimport { longDateFormat } from 'shared/constants/dateFormat';\n\nconst orderByPriority = (data) =>\n orderBy(\n data,\n [\n ...summaryTabCreditRatingNamesPriorites.map(\n (name) => (item) => item.latestRating.name === name,\n ),\n (item) => item.latestRating.ratingDate,\n ],\n 'desc',\n );\n\nconst parseValue = (value, array) => array.find((item) => item.label === value).value;\nconst parseLabels = (value) => `${getYear(new Date(value))}/${getMonth(new Date(value)) + 1}`;\nconst parseHistory = (ratingHistory, ratingRange) => {\n return ratingHistory.data.length !== 0\n ? ratingHistory.data\n .map((value, index) => {\n const ratingsByName = creditRatingRangeMapping(portfolioTypes.CREDIT_RATING, ratingRange);\n\n const dataExist = ratingsByName.some((item) => item.label === value);\n\n return (\n dataExist && {\n data: parseValue(value, ratingsByName),\n label: parseLabels(ratingHistory.labels[index]),\n }\n );\n })\n .filter((item) => item)\n : [];\n};\n\nconst setParticipationType = ({ demand, participationType }) => {\n if (participationType) {\n return upperFirst(participationType);\n }\n if (demand && demand.toLowerCase() === 'solicited') {\n return 'Participation not specified';\n }\n\n return 'Without entity participation';\n};\n\nconst commonCreditRatingParser = ({\n ratingHistory,\n ratingRange,\n latestRating,\n committeeChair,\n productCategory,\n demand,\n participationType,\n}) => ({\n dates: {\n lastRatingAction: formatDate(ratingHistory.lastRatingAction),\n firstRating: formatDate(ratingHistory.firstRatingAction),\n },\n documents: [\n {\n name: 'methodologies',\n path: 'documentsModal',\n title: 'Methodologies',\n },\n {\n name: 'reports',\n path: 'documentsModal',\n title: 'Rating docs',\n },\n ],\n generalInformation: {},\n generalInformationList: [\n latestRating.name,\n latestRating.ratingClassification,\n demand,\n setParticipationType({ demand, participationType }),\n ],\n ratingScalesData: creditRatingScalesMapping(portfolioTypes.CREDIT_RATING, ratingRange),\n latestChange: {\n status: latestRating.ratingAction,\n date: formatDate(latestRating.ratingDate, longDateFormat),\n },\n levels: {\n level: productCategory,\n title: 'Credit rating',\n },\n scoreTitle: latestRating.name,\n score: latestRating.rating,\n outlook: latestRating.outlook,\n businessCards: [\n {\n title: 'Lead analyst',\n name: `${latestRating.leadAnalyst.firstName} ${latestRating.leadAnalyst.name}`,\n position: latestRating.leadAnalyst.position,\n id: latestRating.leadAnalyst.id,\n },\n {\n title: 'Committee chair',\n name: `${committeeChair.firstName} ${committeeChair.lastName}`,\n position: committeeChair.position,\n id: committeeChair.id,\n },\n ],\n history: parseHistory(ratingHistory, ratingRange),\n ratingScale: creditRatingScalesMap[portfolioTypes.CREDIT_RATING][ratingRange],\n endorsementList: [\n {\n label: 'Location',\n value: `${latestRating.issuanceLocation || 'EU'} rated`,\n },\n {\n label: 'Endorsement',\n value: latestRating.endorsementLocations\n ? latestRating.endorsementLocations.join(', ')\n : 'None',\n },\n ],\n isPublic: productCategory === 'L5',\n});\n\nexport const summaryCardMapCreditRatingParser = (data) =>\n orderByPriority(data)\n .filter(Boolean)\n .map(\n ({\n ratingHistory,\n ratingRange,\n latestRating,\n committeeChair,\n productCategory,\n demand,\n participationType,\n endorsementLocations,\n issuanceLocation,\n }) =>\n commonCreditRatingParser({\n ratingHistory,\n ratingRange,\n latestRating,\n committeeChair,\n productCategory,\n demand,\n participationType,\n endorsementLocations,\n issuanceLocation,\n }),\n );\n","import getYear from 'date-fns/getYear';\nimport getMonth from 'date-fns/getMonth';\n\nconst parseLabels = value => `${getYear(new Date(value))}/${getMonth(new Date(value)) + 1}`;\n\nexport const summaryCardHistoryParser = values =>\n values && values.data\n ? values.data.map((value, index) => ({\n data: value,\n label: parseLabels(values.labels[index]),\n }))\n : [];\n","export const summaryCardDocumentsParser = values => {\n return values\n ? values.map(item => {\n const { name, path, publicationDate, title } = item;\n\n if (item.path.includes('/generate-report/')) {\n return {\n name,\n title,\n path,\n publicationDate,\n options: {},\n retries: 14,\n };\n }\n\n return item;\n })\n : [];\n};\n","/* remove '/api' string from fetched documents path to avoid doubling it */\nexport const documentsParser = data =>\n data.map(item => {\n return {\n ...item,\n path: item.link.replace('/api', ''),\n };\n });\n","import { SentifyStatus } from 'modules/ESGSentiment/types/esgSentiment';\nimport { fetchApi, getFetchApiJSONResponse, catchFetchApiError } from 'shared/functions';\n\nexport const fetchSentimentSummary = (id: string) =>\n fetchApi(`/sentifi/daily-score/${id}`).then(getFetchApiJSONResponse).catch(catchFetchApiError);\n\nexport const fetchSentimentAvailability = (id: string): Promise<SentifyStatus> =>\n fetchApi(`/sentifi/organization-company/${id}`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n\nexport const requestSentimentScore = (id: string): Promise<SentifyStatus> => {\n const formData = new FormData();\n formData.append('company_id', id);\n\n return fetchApi(\n '/sentifi/organization-company/',\n {\n method: 'POST',\n body: formData,\n },\n ['Content-Type'],\n )\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n","import { makeModalsHook } from 'shared/functions/makeModalsHook';\n\nexport const usePortfolioModals = makeModalsHook(\n 'createPortfolio',\n 'addToPortfolio',\n 'requestEsgScore',\n 'createCompanies',\n);\n","import { useSelector } from 'react-redux';\nimport { cofaceAccessTypes } from 'shared/constants/creditReview/cofaceAccessTypes';\nimport { cofaceContractStates } from 'shared/constants/creditReview/cofaceContractStates';\nimport { useFeatures } from '../useFeatures/useFeatures';\n\nexport const useCofaceContract = () => {\n const features = useFeatures();\n const {\n cofaceContractState,\n cofaceRequestPermission,\n cofaceRequestsAllowed,\n isPending,\n } = useSelector(state => state.creditReview);\n\n let cofaceAccessType = cofaceAccessTypes.NO_CONTRACT_ID;\n if (cofaceContractState === cofaceContractStates.active) {\n cofaceAccessType = cofaceRequestPermission\n ? cofaceAccessTypes.REQUEST_ALLOWED\n : cofaceAccessTypes.REQUEST_NOT_ALLOWED;\n\n if (cofaceRequestPermission && cofaceRequestsAllowed <= 0) {\n cofaceAccessType = cofaceAccessTypes.NOT_ENOUGH_CREDITS;\n }\n }\n\n return { cofaceAccessType, isPending: features.creditReview ? isPending : false };\n};\n","import { cofaceAccessTypes } from './cofaceAccessTypes';\n\nexport const creditReviewRequestTooltips = {\n [cofaceAccessTypes.REQUEST_ALLOWED]: '',\n [cofaceAccessTypes.REQUEST_NOT_ALLOWED]:\n 'You have no permission to request this item. Please contact your organisation admin',\n [cofaceAccessTypes.NO_CONTRACT_ID]:\n 'You have no license to request this item. Please contact your personal advisor',\n [cofaceAccessTypes.NOT_ENOUGH_CREDITS]:\n 'You have not enough credits to request this item. Please contact your personal advisor',\n};\n","import { shopRoles } from '../constants/shopRoles';\n\nexport const shopPermissionsParser = permissions => {\n const roles = [];\n\n if (permissions.admin) {\n roles.push(shopRoles.SHOP_ADMIN);\n }\n\n if (permissions.user) {\n roles.push(shopRoles.SHOP_USER);\n }\n\n if (permissions.scopeExplorer) {\n roles.push(shopRoles.SHOP_SCOPE_EXPLORER);\n }\n\n if (permissions.issuerDashboard) {\n roles.push(shopRoles.ISSUER_DASHBOARD);\n }\n\n return roles;\n};\n","import intersection from 'lodash/intersection';\n\nexport const validateShopPermissions = (shopPermissions, shopAvailablePermissions) => {\n return intersection(shopPermissions, shopAvailablePermissions).length > 0;\n};\n","export const GET_ESG_COVERAGE_DATA = 'GET_ESG_COVERAGE_DATA';\nexport const GET_ESG_COVERAGE_DATA_SUCCESS = `${GET_ESG_COVERAGE_DATA}_SUCCESS`;\nexport const GET_ESG_COVERAGE_DATA_ERROR = `${GET_ESG_COVERAGE_DATA}_ERROR`;\n\nexport const getEsgCoverageAction = (regs) => (query) => {\n const {\n limit,\n page,\n sort,\n filter: {\n countries,\n industries,\n environmentFrom,\n environmentTo,\n socialFrom,\n socialTo,\n governanceFrom,\n governanceTo,\n totalScoreFrom,\n totalScoreTo,\n },\n } = query;\n\n const orderBy = {\n environmentScore: 'e_score',\n socialScore: 's_score',\n governanceScore: 'g_score',\n totalScore: 'esg_score',\n industry: 'industry__storefront_name',\n companyName: 'scope_one_company_name',\n companyCountry: 'country',\n }[sort?.sortColumn];\n\n return {\n type: GET_ESG_COVERAGE_DATA,\n payload: {\n limit,\n offset: (page - 1) * limit,\n industry: industries?.map(\n (filter) =>\n regs.data?.industries.find((industry) => industry.industryName === filter)?.industryCode,\n ),\n orderBy: orderBy && `${sort.direction === 'DESC' ? '-' : ''}${orderBy}`,\n country: countries,\n environmentFrom,\n environmentTo,\n socialFrom,\n socialTo,\n governanceFrom,\n governanceTo,\n totalScoreFrom,\n totalScoreTo,\n },\n };\n};\n","export const GET_INVESTOR_RELATIONS = 'GET_INVESTOR_RELATIONS';\nexport const GET_INVESTOR_RELATIONS_FINISHED = 'GET_INVESTOR_RELATIONS_FINISHED';\n\nexport const getInvestorRelationsAction = (payload) => ({\n type: GET_INVESTOR_RELATIONS,\n payload,\n});\n","export const REQUEST_QUESTIONNAIRE_AVAILABILITY = 'REQUEST_QUESTIONNAIRE_AVAILABILITY';\nexport const REQUEST_QUESTIONNAIRE_AVAILABILITY_SUCCESS =\n 'REQUEST_QUESTIONNAIRE_AVAILABILITY_SUCCESS';\nexport const REQUEST_QUESTIONNAIRE_AVAILABILITY_ERROR = 'REQUEST_QUESTIONNAIRE_AVAILABILITY_ERROR';\n\nexport const requestQuestionnaireAvailabilityAction = payload => ({\n type: REQUEST_QUESTIONNAIRE_AVAILABILITY,\n payload,\n});\n","export const GET_ESG_CONTRACT_DATA = 'GET_ESG_CONTRACT_DATA';\nexport const GET_ESG_CONTRACT_DATA_SUCCESS = 'GET_ESG_CONTRACT_DATA_SUCCESS';\nexport const GET_ESG_CONTRACT_DATA_ERROR = 'GET_ESG_CONTRACT_DATA_ERROR';\n\nexport const getEsgContractDataAction = {\n type: GET_ESG_CONTRACT_DATA,\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Tooltip from '@mui/material/Tooltip';\nimport isNull from 'lodash/isNull';\nimport { parse as parseDate } from 'date-fns';\n\nimport { Loader, BlurredContactAdvisorBox } from 'ui';\nimport { SummaryCard, HeadSquare, SummaryCardLineChart } from 'modules/common/SummaryCard';\nimport { SummaryCardRequestCreditReview } from 'modules/creditReview';\nimport { fetchCreditReviewChartsData, fetchCreditReviewSummaryTab } from 'services';\nimport { useHeadSquareStyles, useStyles } from 'shared/styles/summaryCard';\nimport { summaryCardHistoryParser } from 'shared/parsers';\nimport { generalInformationCreditReview } from 'shared/constants/summaryTab';\nimport { creditRatingScalesMapping } from 'shared/mappings';\nimport { ratingConstants } from 'shared/constants/company';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { useCofaceContract } from 'shared/hooks/useCofaceContract/useCofaceContract';\nimport { cofaceAccessTypes } from 'shared/constants/creditReview/cofaceAccessTypes';\nimport { creditReviewRequestTooltips } from 'shared/constants/creditReview/creditReviewRequestTooltips';\nimport { formatDate } from 'shared/functions';\nimport { datesLabelsCreditReview } from 'shared/constants/summaryTab/datesLabels';\nimport { creditReviewDocumentsParser } from 'shared/parsers/creditReviewDocumentsParser';\nimport { theme } from '../../theme';\n\nconst CreditReview = ({\n ratingAvailable,\n entity,\n easyNumber,\n isPending,\n isRequestRatingPending,\n handleRatingRequest,\n}) => {\n const { t } = useTranslation();\n const headSquareClasses = useHeadSquareStyles();\n const classes = useStyles();\n const [isLoading, setIsLoading] = useState(true);\n const [data, setData] = useState({});\n const [documents, setDocuments] = useState([]);\n const [historyData, setHistoryData] = useState();\n const [latestChangeData, setLatestChangeData] = useState({});\n const [wasRequested, setWasRequested] = useState(false);\n const [isAvailable, setIsAvailable] = useState(false);\n const { orangeAccent } = theme.palette.custom;\n\n const { cofaceAccessType } = useCofaceContract();\n const isRequestAvailable = cofaceAccessType === cofaceAccessTypes.REQUEST_ALLOWED;\n const contactAdvisorText = creditReviewRequestTooltips[cofaceAccessType];\n\n const fetchCreditReview = () => {\n setIsLoading(true);\n fetchCreditReviewSummaryTab(easyNumber)\n .then((result) => {\n setData(result);\n setIsLoading(false);\n setWasRequested(result.wasRequested || false);\n setIsAvailable(true);\n })\n .catch(() => {\n setIsAvailable(false);\n setIsLoading(false);\n });\n };\n\n useEffect(() => {\n if (easyNumber) {\n fetchCreditReviewChartsData(easyNumber).then((scoreHistoryData) => {\n if (scoreHistoryData) {\n setLatestChangeData({\n date: scoreHistoryData.latest_change_date,\n initialScore: scoreHistoryData.first_score\n ? parseDate(scoreHistoryData.first_score, 'dd/MM/yyyy', new Date())\n : undefined,\n status: scoreHistoryData.latest_change_status,\n });\n setHistoryData({\n labels: scoreHistoryData.score_over_time_labels,\n data: scoreHistoryData.score_over_time_values,\n });\n }\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [easyNumber]);\n\n useEffect(() => {\n const dataAvailable = !!(entity && entity.requested);\n setData(dataAvailable ? entity.requested : {});\n setDocuments(creditReviewDocumentsParser(entity.docs || []));\n setIsAvailable(dataAvailable);\n setIsLoading(false);\n }, [entity]);\n\n const showCreditReviewSummaryCard = isLoading || isAvailable;\n\n return (\n <>\n <Box mb={2}>\n {ratingAvailable && easyNumber ? (\n <Box position=\"relative\">\n {isPending && <Loader cover />}\n\n {showCreditReviewSummaryCard ? (\n <SummaryCard\n headSquare={\n <HeadSquare title={t('Credit Review')}>\n <Typography\n color={\n generalInformationCreditReview.includes(\n 'Unsolicited' && 'Without entity participation',\n )\n ? orangeAccent\n : ''\n }\n >\n <span className={headSquareClasses.score}>{data.score}</span>\n <span className={headSquareClasses.max}>/10</span>\n {data && !isNull(data.probability_of_default) && (\n <Tooltip title={data.probability_of_default_definition || ''}>\n <Typography className={classes.probabilityOfDefault}>\n {t('PD')} : {data.probability_of_default}%\n </Typography>\n </Tooltip>\n )}\n </Typography>\n </HeadSquare>\n }\n history={<SummaryCardLineChart history={summaryCardHistoryParser(historyData)} />}\n className={classes.summaryCard}\n isLoading={isLoading}\n data={{\n generalInformationList: generalInformationCreditReview,\n additionalInformation: {\n countryRisk: data.country_risk_assessment,\n },\n ratingScalesData: creditRatingScalesMapping(\n portfolioTypes.CREDIT_REVIEW,\n ratingConstants.entityReview,\n ),\n levels: { level: 'L2' },\n latestChange: {\n date: formatDate(latestChangeData.date, 'd MMMM yyyy'),\n status: latestChangeData.status,\n },\n dates: {\n initialScore: formatDate(latestChangeData.initialScore),\n latestChange: formatDate(latestChangeData.date),\n },\n datesLabels: datesLabelsCreditReview,\n documents,\n ...data,\n }}\n />\n ) : (\n <div className={classes.summaryCard}>\n <SummaryCardRequestCreditReview\n easyNumber={data.easyNumber}\n onRequest={fetchCreditReview}\n isAvailable={isAvailable}\n wasRequested={wasRequested}\n />\n </div>\n )}\n\n {/* TODO: Uncomment when peer group comparison is available\n <Box mb={2}>\n <Paper>\n <Box pb={2}>\n <Box p={2}>\n <Typography variant=\"h5\">{t('Assessment over time')}</Typography>\n </Box>\n <Divider />\n <ScoreHistoryWidget\n easyNumber={easyNumber}\n entityName={entity.entityName || entity.name}\n industry={entity.sector}\n />\n </Box>\n </Paper>\n </Box> */}\n </Box>\n ) : (\n <BlurredContactAdvisorBox\n isPending={isRequestRatingPending}\n handleRatingRequest={isRequestAvailable ? handleRatingRequest : null}\n contactAdvisor={contactAdvisorText}\n />\n )}\n </Box>\n </>\n );\n};\n\nCreditReview.propTypes = {\n ratingAvailable: PropTypes.bool.isRequired,\n entity: PropTypes.object.isRequired,\n easyNumber: PropTypes.string.isRequired,\n isPending: PropTypes.bool.isRequired,\n isRequestRatingPending: PropTypes.bool.isRequired,\n handleRatingRequest: PropTypes.func.isRequired,\n};\n\nexport default CreditReview;\n","import { CreditReviewDocument } from 'shared/types/creditReview';\n\nexport const creditReviewDocumentsParser = (data: CreditReviewDocument[]) =>\n data.map(({ fileName, link, name }) => ({\n name: fileName,\n title: name,\n /* remove '/api' string from fetched documents path to avoid doubling it */\n path: link.replace('/api', ''),\n }));\n","export const creditReviewLevelTypes = {\n sectorRiskLevel: 'sectorRiskLevel',\n businessClimate: 'businessClimate',\n countryRiskAssessment: 'countryRiskAssessment',\n};\n","export const dedicatedPortfoliosLabels = {\n samplePortfolio: 'Sample portfolio',\n requestHistory: 'Request history',\n};\n","import get from 'lodash/get';\nimport React, { useState, useEffect, FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport Chip from '@mui/material/Chip';\nimport range from 'lodash/range';\nimport isNull from 'lodash/isNull';\n\nimport { DialogTitleWithClose, RangeSlider, GroupedSelect } from 'ui';\nimport { useGroupedAutocompleteStyles } from 'shared/styles/groupedAutocompleteStyles/groupedAutocompleteStyles';\nimport { useRegions } from 'shared/hooks';\nimport { getSortedFlattenedIndustries } from 'selectors/common';\nimport { CreditReviewLevels, CreditReviewSpec } from 'shared/types/creditReview';\nimport { SearchQuery } from 'shared/types/portfolios';\n\ntype Values = {\n companyName: string;\n countries: any[];\n industries: any[];\n creditScore: any[];\n sectorRiskLevel: any[];\n businessClimate: any[];\n countryRiskAssessment: any[];\n};\n\ntype CreditReviewEntitiesFilterModalProps = {\n open: boolean;\n onClose: () => void;\n onSubmit: (values: Values) => void;\n searchQuery?: SearchQuery;\n initialFilter: any;\n filterableIndustries?: any[] | null;\n allowEmptyIndustriesFilter?: boolean;\n creditReviewLevels: CreditReviewLevels;\n};\n\nconst CreditReviewEntitiesFilterModal: FC<CreditReviewEntitiesFilterModalProps> = ({\n open,\n onClose,\n onSubmit,\n searchQuery,\n initialFilter = {},\n filterableIndustries = null,\n allowEmptyIndustriesFilter = true,\n creditReviewLevels,\n}: CreditReviewEntitiesFilterModalProps) => {\n const groupedAutocompleteClasses = useGroupedAutocompleteStyles();\n const { t } = useTranslation();\n const industriesData = useSelector(getSortedFlattenedIndustries);\n const { data: creditReviewSpecs } = useSelector(({ shared }: any) => shared.creditReviewSpecs);\n const regions = useRegions(searchQuery?.query);\n\n const mapRatingLevels = (items: any[]) =>\n items.map((level, index) => ({\n value: index + 1,\n label: level,\n }));\n\n const sectorRiskLevels = mapRatingLevels(creditReviewLevels.sectorRiskLevel);\n const businessClimateLevels = mapRatingLevels(creditReviewLevels.businessClimate);\n const countryRiskAssessmentLevels = mapRatingLevels(creditReviewLevels.countryRiskAssessment);\n\n const creditScoreValues = range(11).map((level, index) => {\n const levelStr = level.toString();\n const spec = creditReviewSpecs?.find(({ score }: CreditReviewSpec) => score === level);\n const pod = spec?.pd;\n return {\n value: index + 1,\n label: !isNull(pod) ? `${levelStr} (${pod}%)` : levelStr,\n };\n });\n\n const [values, setValues] = useState<Values>({\n companyName: '',\n countries: [],\n industries: [],\n creditScore: creditScoreValues.length\n ? [creditScoreValues[0].value, creditScoreValues[creditScoreValues.length - 1].value]\n : [],\n sectorRiskLevel: sectorRiskLevels.length\n ? [sectorRiskLevels[0].value, sectorRiskLevels[sectorRiskLevels.length - 1].value]\n : [],\n\n businessClimate: businessClimateLevels.length\n ? [\n businessClimateLevels[0].value,\n businessClimateLevels[businessClimateLevels.length - 1].value,\n ]\n : [],\n\n countryRiskAssessment: countryRiskAssessmentLevels.length\n ? [\n countryRiskAssessmentLevels[0].value,\n countryRiskAssessmentLevels[countryRiskAssessmentLevels.length - 1].value,\n ]\n : [],\n });\n\n const [industries, setIndustries] = useState<any[]>([]);\n\n useEffect(() => {\n setValues({\n ...values,\n ...initialFilter,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFilter]);\n\n useEffect(() => {\n setIndustries(filterableIndustries || industriesData);\n }, [industriesData, filterableIndustries]);\n\n const handleChange = (name: string) => (value: unknown) => {\n setValues({\n ...values,\n [name]: value,\n });\n };\n\n const handleIndustriesChange = (_event: React.ChangeEvent<any>, sectors: any[]) => {\n let newSectors = sectors;\n if (!allowEmptyIndustriesFilter && !sectors.length) {\n const initialIndustry = get(initialFilter, 'industries[0]');\n newSectors = initialIndustry ? [initialIndustry] : [];\n }\n setValues({\n ...values,\n industries: newSectors,\n });\n };\n\n const handleSubmit = () => {\n const { creditScore, sectorRiskLevel, businessClimate, countryRiskAssessment } = values;\n\n const cleanedValues = {\n ...values,\n countries: values.countries.map(({ iso }) => iso),\n sectors: values.industries.map(({ name }) => name),\n creditScoreFrom: encodeURIComponent(creditScoreValues[creditScore[0] - 1].value),\n creditScoreTo: encodeURIComponent(creditScoreValues[creditScore[1] - 1].value),\n sectorRiskLevelFrom: encodeURIComponent(sectorRiskLevels[sectorRiskLevel[0] - 1].label),\n sectorRiskLevelTo: encodeURIComponent(sectorRiskLevels[sectorRiskLevel[1] - 1].label),\n businessClimateFrom: encodeURIComponent(businessClimateLevels[businessClimate[0] - 1].label),\n businessClimateTo: encodeURIComponent(businessClimateLevels[businessClimate[1] - 1].label),\n countryRiskAssessmentFrom: encodeURIComponent(\n countryRiskAssessmentLevels[countryRiskAssessment[0] - 1].label,\n ),\n countryRiskAssessmentTo: encodeURIComponent(\n countryRiskAssessmentLevels[countryRiskAssessment[1] - 1].label,\n ),\n };\n\n onSubmit(cleanedValues);\n };\n\n const handleSectorRiskChange = (_event: React.ChangeEvent<any>, newValues: any[]) => {\n setValues({\n ...values,\n sectorRiskLevel: newValues,\n });\n };\n\n const handleBusinessClimateChange = (_event: React.ChangeEvent<any>, newValues: any[]) => {\n setValues({\n ...values,\n businessClimate: newValues,\n });\n };\n\n const handleCountryRiskAssessmentChange = (_event: React.ChangeEvent<any>, newValues: any[]) => {\n setValues({\n ...values,\n countryRiskAssessment: newValues,\n });\n };\n\n const handleCreditScoreChange = (_event: React.ChangeEvent<any>, newValues: any[]) => {\n setValues({\n ...values,\n creditScore: newValues,\n });\n };\n\n const isValueRemovable = () => {\n return allowEmptyIndustriesFilter || values.industries.length > 1;\n };\n\n return (\n <Dialog fullWidth open={open}>\n <DialogTitleWithClose onClose={onClose}>{t('Apply filters')}</DialogTitleWithClose>\n <DialogContent>\n <Box px={2}>\n <TextField\n type=\"text\"\n label={t('ENTITY.NAME')}\n fullWidth\n value={values.companyName}\n onChange={event => handleChange('companyName')(event.target.value)}\n />\n <GroupedSelect\n multiple\n options={regions.data}\n value={values.countries}\n label={t('Country')}\n onChange={handleChange('countries')}\n getOptionLabel={(option: any) => option.name}\n groupBy={(option: any) => option.continent}\n />\n {false && (\n <Autocomplete\n multiple\n options={industries}\n onChange={handleIndustriesChange}\n getOptionLabel={option => option.name}\n groupBy={option => option.industryName}\n value={values.industries}\n renderInput={params => (\n <TextField {...params} label={t('Sectors')} variant=\"outlined\" />\n )}\n renderTags={(value, getTagProps) =>\n value.map((option, index) => (\n <Chip\n label={option.name}\n {...getTagProps({ index })}\n disabled={!isValueRemovable()}\n />\n ))\n }\n classes={groupedAutocompleteClasses}\n />\n )}\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Credit assessment')}\n options={creditScoreValues}\n values={values.creditScore}\n onChange={handleCreditScoreChange}\n />\n </Box>\n {false && (\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Industry Risk')}\n options={sectorRiskLevels}\n values={values.sectorRiskLevel}\n onChange={handleSectorRiskChange}\n />\n </Box>\n )}\n {false && (\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Business Climate')}\n options={businessClimateLevels}\n values={values.businessClimate}\n onChange={handleBusinessClimateChange}\n />\n </Box>\n )}\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Country Risk Assessment')}\n options={countryRiskAssessmentLevels}\n values={values.countryRiskAssessment}\n onChange={handleCountryRiskAssessmentChange}\n />\n </Box>\n </Box>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" color=\"primary\" onClick={handleSubmit}>\n {t('Apply filters')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default CreditReviewEntitiesFilterModal;\n","import React, { useState, useRef, useEffect, useCallback } from 'react';\nimport PropTypes from 'prop-types';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Switch from '@mui/material/Switch';\nimport Box from '@mui/material/Box';\nimport Tooltip from '@mui/material/Tooltip';\nimport Typography from '@mui/material/Typography';\nimport Chip from '@mui/material/Chip';\nimport { grey } from '@mui/material/colors';\nimport qs from 'qs';\nimport lowerCase from 'lodash/lowerCase';\nimport isNil from 'lodash/isNil';\n\nimport { Datatable, InfoTooltip, ScoreChangeIndicator } from 'ui';\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\nimport { RequestConfirmationModal } from 'modules/creditReview/CreditReviewModals';\nimport { LinkButton, DownloadButton } from 'ui/Buttons';\nimport { RequestButton, SearchFiltersModal } from 'modules/common';\n\nimport { requestSigEntityRatingAction } from 'store/entity/entityActions';\nimport { setSearchFiltersAction, searchStartAction } from 'store/searchResult/searchResultActions';\nimport { API_URL } from 'utils';\nimport { exportService } from 'services/export';\nimport { useTable, usePortfolioModals, useNotifications } from 'shared/hooks';\nimport {\n formatDate,\n removeItemsFromPortfolio,\n putNotifyError,\n performInNextCycle,\n} from 'shared/functions';\nimport { cofaceAccessTypes } from 'shared/constants/creditReview/cofaceAccessTypes';\nimport { creditReviewRequestTooltips } from 'shared/constants/creditReview/creditReviewRequestTooltips';\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { toggleMonitoring } from 'services';\nimport { creditReviewLevelTypes } from 'shared/constants/creditReview/creditReviewLevelTypes';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { CreditReviewLevelsPopover } from 'modules/creditReview';\nimport { useConfirmedRequest } from 'shared/hooks/useConfirmedRequest/useConfirmedRequest';\nimport { getEntityShouldRefresh } from 'selectors/entity';\nimport { dedicatedPortfoliosLabels } from 'shared/constants/creditReview/dedicatedPortfoliosLabels';\nimport { activityMappingCreditReview } from 'shared/mappings/activityLabels';\nimport { exportModes } from 'shared/constants/exportModes';\n\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { ItemType } from 'shared/types/portfolios';\nimport CreditReviewEntitiesFilterModal from './CreditReviewEntitiesFilterModal';\n\nconst useStyles = makeStyles((theme) => ({\n row: {\n position: 'relative',\n },\n requestCell: {\n backgroundColor: grey[100],\n },\n requestButton: {\n textTransform: 'none',\n fontWeight: 400,\n color: theme.palette.text.primary,\n borderColor: theme.palette.text.primary,\n borderRadius: 16,\n height: 32,\n transform: 'translate(-50%)',\n },\n pendingText: {\n transform: ({ isRequestHistory }) => `translate(${isRequestHistory ? -80 : -62}%)`,\n whiteSpace: 'nowrap',\n cursor: 'default',\n },\n refineSearchLink: {\n marginLeft: theme.spacing(1),\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n tooltipIcon: {\n marginLeft: theme.spacing(1),\n },\n monitoringIconEnabled: {\n fill: theme.palette.primary.main,\n },\n monitoringIconDisabled: {\n fill: grey[300],\n },\n monitoringIcon: {\n cursor: 'pointer',\n },\n}));\n\nconst setCellProps = (classes) => (value) => {\n // Here we're fetching the flag from DataAvailabilityCell alreadyRequested component property\n const wasRequested = value.props && value.props.alreadyRequested;\n\n return wasRequested === false // that needs to be explicit comparison to boolean (false)\n ? {\n className: classes.requestCell,\n }\n : null;\n};\n\n/* \n This needs to be done this way because in setCellProps function we don't have an access to other column values (wasRequested in this case)\n That alreadyRequested property is needed in setCellProps to get the value of that flag which is crucial for showing the ratings\n*/\n// eslint-disable-next-line no-unused-vars\nconst DataAvailabilityCell = ({ alreadyRequested, children }) => {\n return children;\n};\n\nDataAvailabilityCell.defaultProps = {\n alreadyRequested: false,\n children: null,\n};\n\nDataAvailabilityCell.propTypes = {\n alreadyRequested: PropTypes.bool,\n children: PropTypes.node,\n};\n\nconst CreditReviewEntities = ({\n paginationLimit,\n dataSelector,\n actionCreator,\n actionCreatorParams,\n constantFilter,\n initialFilter,\n initialFilterModalValues,\n filterableIndustries,\n searchQuery,\n dossierId,\n cofaceAccessType,\n extendedExport,\n}) => {\n const { error, isPending, data, total } = dataSelector || {};\n const isPortfolioTable = !!dossierId;\n const { singleDossier: dossierData } = useSelector(({ dossier }) => dossier);\n const entityShouldRefresh = useSelector(getEntityShouldRefresh);\n const isDedicatedPortfolio = isPortfolioTable && dossierData && dossierData.isDedicated;\n const isSamplePortfolio =\n isDedicatedPortfolio &&\n lowerCase(dedicatedPortfoliosLabels.samplePortfolio) === lowerCase(dossierData.name);\n const isRequestHistory =\n isDedicatedPortfolio &&\n lowerCase(dedicatedPortfoliosLabels.requestHistory) === lowerCase(dossierData.name);\n\n const location = useLocation();\n const navigate = useNavigate();\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const { notifyError } = useNotifications();\n const didUnmount = useRef(false);\n const classes = useStyles({ isRequestHistory });\n const isRequestAvailable = cofaceAccessType === cofaceAccessTypes.REQUEST_ALLOWED;\n\n const requestButtonTooltipTitle = creditReviewRequestTooltips[cofaceAccessType];\n\n const ratingType = ratingTypes.CREDIT_REVIEW;\n\n const [selected, setSelected] = useState({ items: {}, count: 0 });\n\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n\n const [dossiersRequest, setDossiersRequest] = useState({ items: {}, count: 0, type: null });\n\n const [shouldRefresh, setShouldRefresh] = useState({ value: false, reason: null });\n\n const [pendingMonitoringChange, setPendingMonitoringChange] = useState([]);\n\n const [filtersModalOpen, setFiltersModalOpen] = useState(false);\n const [searchFiltersModalOpen, setSearchFiltersModalOpen] = useState(false);\n const [requestConfirmationModalOpen, setRequestConfirmationModalOpen] = useState(false);\n\n const { data: creditReviewLevels } = useSelector(({ shared }) => shared.creditReviewLevels);\n\n const { userId, organisationId } = useSelector(({ auth }) => auth.data);\n\n const [requestLoading, setRequestLoading] = useState(false);\n\n const [showSearchFilters, setShowSearchFilters] = useState(false);\n\n const [showSelectionExtension, setShowSelectionExtension] = useState(false);\n const [selectedAll, setSelectedAll] = useState(false);\n\n const requestInProgressTooltip = t('ENTITY.THIS_SCORE_IS_NOT_YET_AVAILABLE');\n\n const toggleRequestConfirmationModal = () =>\n setRequestConfirmationModalOpen(!requestConfirmationModalOpen);\n const doRequestConfirmationModalOpen = () => setRequestConfirmationModalOpen(true);\n\n const setRowProps = () => ({\n className: classes.row,\n });\n\n const initialSort = isRequestHistory\n ? {\n sortColumn: 'requestDate',\n direction: 'DESC',\n }\n : {\n sortColumn: 'activity',\n direction: 'ASC',\n };\n\n const handleToggleMonitoring = ({ itemId }) => {\n setRequestLoading(true);\n const itemsIds = itemId ? [itemId] : Object.values(selected.itemIds);\n\n toggleMonitoring({\n itemsIds,\n selectAll: selectedAll,\n sourceDossierId: dossierId,\n })\n .then(() => {\n if (!didUnmount.current) {\n setPendingMonitoringChange(\n selectedAll && data && data.length ? data.map((item) => item[0]) : [...itemsIds],\n );\n dispatch(\n addNotificationAction({\n message: t('CREDIT_REVIEW.MONITORING_CHANGE_SUCCESS'),\n variant: 'success',\n }),\n );\n }\n })\n .catch(() => {\n notifyError(t('Failed to change monitoring state'));\n })\n .finally(() => {\n if (!didUnmount.current) {\n setRequestLoading(false);\n }\n });\n };\n\n const handleRequest = () => {\n dispatch(\n requestSigEntityRatingAction({\n ids: Object.values(selected.itemIds),\n organisationId,\n userId,\n selectAll: selectedAll,\n }),\n );\n };\n\n const { scheduleRequest } = useConfirmedRequest({\n handleRequest,\n confirmationModalOpen: doRequestConfirmationModalOpen,\n });\n\n const handleRequestSelected = () => {\n scheduleRequest();\n };\n\n const handleRemove = () => {\n setRequestLoading(true);\n\n removeItemsFromPortfolio({\n dossierId,\n dossierItemsIds: Object.values(selected.itemIds),\n ratingType,\n selectAll: selectedAll,\n })\n .then(() => {\n if (!didUnmount.current) {\n setShouldRefresh({ value: true, reason: refreshReasons.DELETED });\n }\n })\n .finally(() => {\n if (!didUnmount.current) {\n setRequestLoading(false);\n }\n });\n };\n\n const monitoredRenderer = useCallback(\n (_value, { rowData }) => {\n const monitored = rowData[13];\n const easyNumber = rowData[0];\n const pending = pendingMonitoringChange.includes(easyNumber);\n const tooltip = pending ? t('CREDIT_REVIEW.MONITORING_PENDING') : '';\n return (\n <Tooltip title={tooltip} placement=\"top\">\n <Box display=\"flex\" justifyContent=\"center\">\n <Switch\n checked={monitored}\n onChange={() => handleToggleMonitoring({ itemId: easyNumber })}\n color=\"primary\"\n disabled={pending}\n />\n </Box>\n </Tooltip>\n );\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [pendingMonitoringChange],\n );\n\n const companyNameRenderer = useCallback(\n ([entityName, companyVat, companyHrn, companyLei, requested], { rowData: [easyNumber] }) => {\n const tooltip = [\n companyVat && `VAT: ${companyVat}`,\n companyHrn && `HRN: ${companyHrn}`,\n companyLei && `LEI: ${companyLei}`,\n ]\n .filter((text) => text)\n .join(' ');\n\n const detailedViewRestricted =\n !isSamplePortfolio && !isRequestAvailable && !(requested && !isNil(requested.score));\n\n return detailedViewRestricted ? (\n <Tooltip title={tooltip} placement=\"top\">\n <Typography variant=\"button\">{entityName.toUpperCase()}</Typography>\n </Tooltip>\n ) : (\n <LinkButton\n to={`entities/${easyNumber}/details?companyModule=${ratingType}`}\n tooltip={tooltip}\n label={entityName.toUpperCase()}\n withPathname\n />\n );\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [],\n );\n\n const companyCityRenderer = useCallback(([city, address]) => {\n const tooltip = address && `Address: ${address}`;\n return (\n <Box display=\"flex\" alignItems=\"center\">\n <Typography>{city}</Typography>\n {tooltip ? <InfoTooltip title={tooltip} iconClassName={classes.tooltipIcon} /> : null}\n </Box>\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const creditScoreRenderer = useCallback((_, { rowData }) => {\n const scoreRequest = rowData[12];\n const isDataRequested = Boolean(scoreRequest && !isNil(scoreRequest.score));\n\n return isDataRequested ? (\n <Chip label={scoreRequest.score} variant=\"outlined\" color=\"primary\" />\n ) : (\n <DataAvailabilityCell alreadyRequested={isDataRequested} />\n );\n }, []);\n\n const probabilityOfDefaultRenderer = useCallback((_, { rowData }) => {\n const scoreRequest = rowData[12];\n const isDataRequested = Boolean(scoreRequest && !isNil(scoreRequest.score));\n const probabilityOfDefaultExists =\n scoreRequest.probability_of_default_definition &&\n scoreRequest.probability_of_default_definition !== '-';\n\n const probabilityOfDefaultValue = scoreRequest.probability_of_default || 0;\n\n return isDataRequested ? (\n <Tooltip\n placement=\"top\"\n title={probabilityOfDefaultExists ? scoreRequest.probability_of_default_definition : ''}\n >\n {probabilityOfDefaultExists ? (\n <Chip label={`${probabilityOfDefaultValue}%`} variant=\"outlined\" />\n ) : (\n <Typography>-</Typography>\n )}\n </Tooltip>\n ) : (\n <DataAvailabilityCell alreadyRequested={isDataRequested} />\n );\n }, []);\n\n const sectorRiskLevelRenderer = useCallback((value, { rowData }) => {\n const easyNumber = rowData[0];\n const scoreRequest = rowData[12];\n const isDataRequested = Boolean(scoreRequest && !isNil(scoreRequest.score));\n\n return isDataRequested ? (\n <CreditReviewLevelsPopover\n activeLevel={value}\n levelType={creditReviewLevelTypes.sectorRiskLevel}\n />\n ) : (\n <RequestButton\n className={classes.requestButton}\n tooltip={t(requestButtonTooltipTitle)}\n disabled={!isRequestAvailable}\n id={easyNumber}\n orderType={orderTypes.SIG_ENTITY}\n alreadyRequested={isDataRequested}\n product={{ requested: isDataRequested, userId, organisationId }}\n ratingType={ratingType}\n confirmationModalOpen={doRequestConfirmationModalOpen}\n />\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const businessClimateRenderer = useCallback((value, { rowData }) => {\n const easyNumber = rowData[0];\n const scoreRequest = rowData[12];\n const isDataRequested = Boolean(scoreRequest && !isNil(scoreRequest.score));\n\n return isDataRequested ? (\n <CreditReviewLevelsPopover\n activeLevel={value}\n levelType={creditReviewLevelTypes.businessClimate}\n />\n ) : (\n <RequestButton\n className={classes.requestButton}\n tooltip={t(requestButtonTooltipTitle)}\n disabled={!isRequestAvailable}\n id={easyNumber}\n orderType={orderTypes.SIG_ENTITY}\n alreadyRequested={isDataRequested}\n product={{ requested: isDataRequested, userId, organisationId }}\n ratingType={ratingType}\n confirmationModalOpen={doRequestConfirmationModalOpen}\n />\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const countryRiskAssessmentRenderer = useCallback((_value, { rowData }) => {\n const easyNumber = rowData[0];\n const scoreRequest = rowData[12];\n\n const isDataRequested = Boolean(scoreRequest && !isNil(scoreRequest.score));\n\n if (!scoreRequest) {\n return (\n <RequestButton\n className={classes.requestButton}\n tooltip={t(requestButtonTooltipTitle)}\n disabled={!isRequestAvailable}\n id={easyNumber}\n orderType={orderTypes.SIG_ENTITY}\n alreadyRequested={isDataRequested}\n product={{ requested: isDataRequested, userId, organisationId }}\n ratingType={ratingType}\n confirmationModalOpen={doRequestConfirmationModalOpen}\n />\n );\n }\n\n if (isNil(scoreRequest.score)) {\n return (\n <DataAvailabilityCell alreadyRequested={false}>\n <Tooltip title={requestInProgressTooltip} placement=\"top\">\n <Box className={classes.pendingText}>{t('Request in progress')}</Box>\n </Tooltip>\n </DataAvailabilityCell>\n );\n }\n\n return (\n <CreditReviewLevelsPopover\n activeLevel={scoreRequest.country_risk_assessment}\n levelType={creditReviewLevelTypes.countryRiskAssessment}\n />\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const purchaseRenderer = useCallback((_value, { rowData }) => {\n const easyNumber = rowData[0];\n\n return (\n <DownloadButton\n disabled={!isRequestAvailable}\n url={`${API_URL}/sig/generate-report/${easyNumber}`}\n >\n {t('Purchase')}\n </DownloadButton>\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const scoreDateRenderer = useCallback((_value, { rowData }) => {\n const scoreDate = rowData[11];\n\n return scoreDate ? formatDate(scoreDate, 'dd/MM/yyyy') : '-';\n }, []);\n\n const activityRenderer = useCallback((activity, { rowData }) => {\n const scoreRequest = rowData[12];\n return activity && scoreRequest ? (\n <ScoreChangeIndicator\n activity={activity}\n activityMapping={activityMappingCreditReview}\n scoreChangeDate={scoreRequest.score_date}\n scoreOld={scoreRequest.old_score}\n showLabel\n />\n ) : null;\n }, []);\n\n const buildInitialColumns = useCallback(\n () => [\n {\n name: 'easyNumber',\n label: t('Easy Number'),\n options: { sort: false, display: false, viewColumns: false },\n },\n {\n name: 'companyName',\n label: t('ENTITY.NAME'),\n options: {\n sort: true,\n customBodyRender: companyNameRenderer,\n },\n },\n { name: 'companyCountryIso', label: t('Country'), options: { sort: true } },\n { name: 'industry', label: t('Industry'), options: { sort: true, display: false } },\n {\n name: 'city',\n label: t('City'),\n options: {\n sort: true,\n customBodyRender: companyCityRenderer,\n },\n },\n { name: 'companyPostcode', label: t('Postcode'), options: { sort: true } },\n {\n name: 'creditScore',\n label: t('PORTFOLIO.CREDIT_REVIEW'),\n options: {\n sort: true,\n setCellProps: setCellProps(classes),\n customBodyRender: creditScoreRenderer,\n },\n },\n {\n name: 'probabilityOfDefault',\n label: t('Probability of Default'),\n options: {\n sort: true,\n setCellProps: setCellProps(classes),\n customBodyRender: probabilityOfDefaultRenderer,\n },\n },\n {\n name: 'sectorRiskLevel',\n label: t('Industry Risk Level'),\n options: {\n sort: true,\n display: false,\n setCellProps: setCellProps(classes),\n customBodyRender: sectorRiskLevelRenderer,\n },\n },\n {\n name: 'businessClimate',\n label: t('Business Climate'),\n options: {\n sort: true,\n display: false,\n setCellProps: setCellProps(classes),\n customBodyRender: businessClimateRenderer,\n },\n },\n {\n name: 'countryRiskAssessment',\n label: t('Country Risk Assessment'),\n options: {\n sort: true,\n setCellProps: setCellProps(classes),\n customBodyRender: countryRiskAssessmentRenderer,\n },\n },\n {\n name: 'purchase',\n label: 'Purchase',\n options: {\n sort: false,\n display: false,\n setCellProps: setCellProps(classes),\n customBodyRender: purchaseRenderer,\n },\n },\n {\n name: 'monitoring',\n label: 'Keep in subscription',\n options: {\n display: isRequestHistory,\n sort: true,\n customBodyRender: monitoredRenderer,\n },\n },\n {\n name: 'scoreDate',\n label: t('ENTITY.LATEST_UPDATE'),\n options: {\n display: isPortfolioTable,\n sort: true,\n sortDirection: isRequestHistory ? 'asc' : undefined,\n customBodyRender: scoreDateRenderer,\n },\n },\n {\n name: 'activity',\n label: t('ENTITY.ACTIVITY'),\n options: {\n display: isPortfolioTable,\n sort: true,\n sortDirection: isRequestHistory ? undefined : 'asc',\n hint: t('ENTITY.ACTIVITY_HINT'),\n customBodyRender: activityRenderer,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [monitoredRenderer],\n );\n\n const [initialColumns, setInitialColumns] = useState(buildInitialColumns());\n\n useEffect(() => {\n setInitialColumns(buildInitialColumns());\n }, [pendingMonitoringChange, buildInitialColumns]);\n\n const { columns, pagination, onTableChange, onSortChange, isFiltered, setFilter, refreshTable } =\n useTable({\n paginationLimit,\n initialColumns,\n getTableDataAction: actionCreator,\n getTableDataActionParams: actionCreatorParams,\n constantFilter,\n initialFilter,\n initialSort,\n });\n\n useEffect(() => {\n if ((shouldRefresh.value || entityShouldRefresh) && refreshTable) {\n dispatch(refreshTable);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldRefresh, entityShouldRefresh]);\n\n const toggleFiltersModal = () => setFiltersModalOpen(!filtersModalOpen);\n const toggleSearchFiltersModal = () => setSearchFiltersModalOpen(!searchFiltersModalOpen);\n\n const onSelectedChange = (selectedItems) => {\n setSelected({ ...selectedItems });\n setDossiersRequest({ ...selectedItems, type: ItemType.EASYNUMBER });\n\n if (data && selectedItems.count >= data.length && selectedItems.count < total) {\n setShowSelectionExtension(true);\n } else {\n setShowSelectionExtension(false);\n setSelectedAll(false);\n }\n };\n\n useEffect(() => {\n setRequestLoading(isPending);\n }, [isPending]);\n\n useEffect(() => {\n if (error && ![undefined].includes(error.status)) {\n setSearchFiltersModalOpen(true);\n }\n }, [error]);\n\n const handleFiltersModalSubmit = (values) => {\n const {\n companyName,\n countries,\n sectors,\n creditScoreFrom,\n creditScoreTo,\n sectorRiskLevelFrom,\n sectorRiskLevelTo,\n businessClimateFrom,\n businessClimateTo,\n countryRiskAssessmentFrom,\n countryRiskAssessmentTo,\n } = values;\n\n const newFilters = {\n ...(companyName && { companyName }),\n ...(countries.length && { countries }),\n ...(sectors.length !== 0 && { sector: sectors }),\n ...(creditScoreFrom !== '1' && { creditScoreFrom }),\n ...(creditScoreTo !== '11' && { creditScoreTo }),\n ...(countryRiskAssessmentFrom !== 'D' && { countryRiskAssessmentFrom }),\n ...(countryRiskAssessmentTo !== 'A1' && { countryRiskAssessmentTo }),\n ...(businessClimateFrom !== 'D' && { businessClimateFrom }),\n ...(businessClimateTo !== 'A1' && { businessClimateTo }),\n ...(sectorRiskLevelFrom !== 'very%20high' && { sectorRiskLevelFrom }),\n ...(sectorRiskLevelTo !== 'low' && { sectorRiskLevelTo }),\n };\n\n setFilter(newFilters);\n setFiltersModalOpen(false);\n };\n\n const handleSearchFiltersModalSubmit = (values) => {\n if (!showSearchFilters) {\n setShowSearchFilters(true);\n }\n setSearchFiltersModalOpen(false);\n\n const { name: query, country, ...filters } = values;\n\n const queryString = qs.stringify(\n { query, country: [country], ratingType, ...filters },\n { addQueryPrefix: true },\n );\n\n if (location.search !== queryString) {\n dispatch(searchStartAction);\n dispatch(setSearchFiltersAction({ ...filters, ratingType }));\n\n /* Peform navigate in next event loop cycle of JS engine.\n * Otherwise the browser is occupied with context switching,\n * hence actions dispatching and processing is significantly delayed. */\n performInNextCycle(() => navigate({ pathname: '/search-result', search: queryString }));\n }\n };\n\n const downloadErrorHandler = () => {\n putNotifyError(t('ENTITY.FAILED_TO_EXPORT_ENTITIES'));\n };\n\n const exportToExcel = (items) => {\n exportService({\n items: Object.values(items),\n type: orderTypes.SIG_ENTITY,\n onError: downloadErrorHandler,\n ratingType,\n dossierId,\n selectAll: selectedAll,\n mode: extendedExport ? exportModes.EXTENDED : exportModes.BASIC,\n });\n };\n\n const toolbarData = [\n {\n text: t(isPortfolioTable ? 'TOOLBAR.COPY_TO_PORTFOLIO' : 'TOOLBAR.ADD_TO_PORTFOLIO'),\n handler: addToPortfolio.show,\n hidden: !selected.count,\n },\n {\n text: t('TOOLBAR.REQUEST_SELECTED'),\n handler: handleRequestSelected,\n disabled: !selected.count,\n hidden: !selected.count,\n data: selected.itemIds,\n },\n {\n text: t('TOOLBAR.EXPORT_TO_EXCEL'),\n handler: exportToExcel,\n data: selected.itemIds,\n hidden: !selected.count,\n },\n {\n text: t('TOOLBAR.TOGGLE_MONITORING'),\n handler: handleToggleMonitoring,\n disabled: !selected.count,\n hidden: !selected.count || !isRequestHistory,\n data: selected.itemIds,\n },\n {\n text: t('TOOLBAR.DELETE'),\n handler: handleRemove,\n disabled: !selected.count || isDedicatedPortfolio,\n hidden: !selected.count || !isPortfolioTable,\n data: selected.itemIds,\n },\n ];\n\n const selectAll = () => {\n setSelectedAll(true);\n };\n\n const title = !isPortfolioTable ? (\n <Box display=\"flex\">\n <Typography variant=\"body1\">{t('SEARCH.HAVENT_FOUND_WHAT_YOU_ARE_LOOKING_FOR')} </Typography>\n <Typography\n className={classes.refineSearchLink}\n onClick={() => setSearchFiltersModalOpen(true)}\n >\n {t('SEARCH.REFINE_YOUR_SEARCH')}\n </Typography>\n </Box>\n ) : null;\n\n return (\n <>\n <Datatable\n title={title}\n loading={requestLoading}\n columns={columns}\n pagination={pagination}\n data={data}\n total={total}\n onSelectedChange={onSelectedChange}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n toolbarData={toolbarData}\n isFiltered={isFiltered}\n shouldRefresh={shouldRefresh}\n showFilters={isPortfolioTable}\n onApplySearchFiltersClick={() => setSearchFiltersModalOpen(true)}\n onApplyFiltersClick={isPortfolioTable ? () => setFiltersModalOpen(true) : undefined}\n setRowProps={setRowProps}\n showSearchFilters={showSearchFilters}\n removeShadow\n showSelectionExtension={isPortfolioTable ? showSelectionExtension : false}\n onSelectAllClick={isPortfolioTable ? selectAll : undefined}\n selectedAll={isPortfolioTable ? selectedAll : false}\n />\n <SearchFiltersModal\n open={searchFiltersModalOpen}\n onClose={toggleSearchFiltersModal}\n onSubmit={handleSearchFiltersModalSubmit}\n extraMessage={error && error.message}\n searchQuery={searchQuery}\n filterableIndustries={filterableIndustries}\n />\n {creditReviewLevels && (\n <CreditReviewEntitiesFilterModal\n open={filtersModalOpen}\n onClose={toggleFiltersModal}\n onSubmit={handleFiltersModalSubmit}\n searchQuery={searchQuery}\n initialFilter={initialFilterModalValues}\n filterableIndustries={filterableIndustries}\n creditReviewLevels={creditReviewLevels}\n />\n )}\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n itemsData={dossiersRequest}\n ratingType={ratingType}\n selectAll={selectedAll}\n sourcePortfolioId={dossierId}\n itemType=\"ENTITY\"\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={dossiersRequest}\n ratingType={ratingType}\n selectAll={selectedAll}\n sourcePortfolioId={dossierId}\n itemType=\"ENTITY\"\n />\n <RequestConfirmationModal\n open={requestConfirmationModalOpen}\n onClose={toggleRequestConfirmationModal}\n requestsCount={selected.count || 1}\n />\n </>\n );\n};\n\nCreditReviewEntities.defaultProps = {\n actionCreatorParams: {},\n constantFilter: {},\n initialFilter: {},\n initialFilterModalValues: {},\n filterableIndustries: null,\n searchQuery: null,\n dossierId: null,\n cofaceAccessType: null,\n paginationLimit: null,\n extendedExport: false,\n};\n\nCreditReviewEntities.propTypes = {\n dataSelector: PropTypes.shape({\n isPending: PropTypes.bool.isRequired,\n total: PropTypes.number.isRequired,\n data: PropTypes.arrayOf(PropTypes.any).isRequired,\n status: PropTypes.number,\n }).isRequired,\n actionCreator: PropTypes.func.isRequired,\n actionCreatorParams: PropTypes.object,\n constantFilter: PropTypes.object,\n initialFilter: PropTypes.object,\n initialFilterModalValues: PropTypes.object,\n filterableIndustries: PropTypes.arrayOf(PropTypes.object),\n searchQuery: PropTypes.shape({\n query: PropTypes.string,\n country: PropTypes.arrayOf(PropTypes.string),\n industry: PropTypes.arrayOf(PropTypes.string),\n ratingType: PropTypes.string,\n }),\n dossierId: PropTypes.string,\n cofaceAccessType: PropTypes.string,\n paginationLimit: PropTypes.number,\n extendedExport: PropTypes.bool,\n};\n\nexport default CreditReviewEntities;\n","import React, { useRef, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { Typography, Popover } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport clsx from 'clsx';\n\nimport { creditReviewLevelTypes } from 'shared/constants/creditReview/creditReviewLevelTypes';\n\nconst useStyles = makeStyles(theme => ({\n value: {\n cursor: 'default',\n },\n popover: {\n pointerEvents: 'none',\n },\n content: {\n padding: theme.spacing(1),\n },\n level: {\n minWidth: 50,\n padding: 5,\n margin: '5px 0',\n textAlign: 'center',\n backgroundColor: theme.palette.grey[400],\n color: theme.palette.custom.white,\n '&:nth-of-type(even)': {\n backgroundColor: theme.palette.custom.white,\n color: theme.palette.text.primary,\n },\n },\n active: {\n backgroundColor: `${theme.palette.primary.main} !important`,\n color: `${theme.palette.custom.white} !important`,\n },\n}));\n\nconst CreditReviewLevelsPopover = ({ levelType, activeLevel }) => {\n const allLevels = useSelector(({ shared }) => shared.creditReviewLevels.data);\n\n const classes = useStyles();\n\n const wrapperRef = useRef(null);\n\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const [levels, setLevels] = useState([]);\n\n useEffect(() => {\n setLevels([...allLevels[levelType]].reverse().map(item => item.toUpperCase()));\n }, [levelType, allLevels]);\n\n const handlePopoverOpen = event => {\n setAnchorEl(event.currentTarget);\n };\n\n const handlePopoverClose = () => {\n setAnchorEl(null);\n };\n\n if (!levels.length) {\n return activeLevel;\n }\n\n return (\n <div ref={wrapperRef}>\n <Typography\n className={classes.value}\n onMouseEnter={handlePopoverOpen}\n onMouseLeave={handlePopoverClose}\n >\n {activeLevel}\n </Typography>\n <Popover\n className={classes.popover}\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={handlePopoverClose}\n container={wrapperRef.current}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left',\n }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left',\n }}\n >\n <div className={classes.content}>\n {levels.map(level => (\n <div\n key={level}\n className={clsx(classes.level, {\n [classes.active]: level === activeLevel,\n })}\n >\n {level}\n </div>\n ))}\n </div>\n </Popover>\n </div>\n );\n};\n\nCreditReviewLevelsPopover.defaultProps = {\n activeLevel: '-',\n};\n\nCreditReviewLevelsPopover.propTypes = {\n activeLevel: PropTypes.string,\n levelType: PropTypes.oneOf(Object.values(creditReviewLevelTypes)).isRequired,\n};\n\nexport default CreditReviewLevelsPopover;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { Formik, Form, Field, ErrorMessage } from 'formik';\nimport get from 'lodash/get';\n\nimport Button from '@mui/material/Button';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport Paper from '@mui/material/Paper';\nimport InputBase from '@mui/material/InputBase';\nimport IconButton from '@mui/material/IconButton';\nimport CheckIcon from '@mui/icons-material/Check';\nimport Stepper from '@mui/material/Stepper';\nimport Step from '@mui/material/Step';\nimport StepLabel from '@mui/material/StepLabel';\nimport Box from '@mui/material/Box';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Divider from '@mui/material/Divider';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport MenuItem from '@mui/material/MenuItem';\n\nimport { theme } from 'theme';\n\nimport { downloadService, uploadPortfolio, confirmPortfolio } from 'services';\nimport { portfolioUploadSteps as steps } from 'shared/constants/portfolioUploadSteps';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { portfolioUploadSchema, creditReviewCreatePortfolioSchema } from 'shared/validations';\nimport { useNotifications } from 'shared/hooks';\nimport { Loader } from 'ui/Loader/Loader';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { SIGUpdateDossier } from 'services/dossier/dossierService';\nimport { generateCSV } from 'utils';\nimport { getAuthDataOrganisationId } from 'selectors/auth';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { getDossiersAction, refreshDossiersAction } from 'store/portfolio/dossierActions';\nimport { formatNumber } from 'shared/functions';\n\nconst useStyles = makeStyles({\n downloadTemplateContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n downloadButtonContainer: {\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'flex-end',\n },\n input: {\n display: 'none',\n },\n uploadContainer: {\n padding: '2px 4px',\n margin: theme.spacing(2, 0),\n display: 'flex',\n alignItems: 'center',\n },\n fileUploadText: {\n marginLeft: theme.spacing(1),\n flex: 1,\n },\n fullWidth: {\n width: '100%',\n },\n summaryContent: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n textCenter: {\n textAlign: 'center',\n },\n checkIcon: {\n fontSize: 80,\n },\n selectButton: {\n width: 150,\n height: 100,\n textTransform: 'inherit',\n border: 'none',\n color: theme.palette.text.primary,\n boxShadow: '0 4px 4px 2px rgba(155, 155, 155, 0.3)',\n padding: '0 35px',\n },\n selectTitle: {\n fontSize: 15,\n },\n});\n\nconst PortfolioUploadCreditReview = ({\n onClose,\n backToTypeSelection,\n onClickCreateNew,\n createdPortfolioName,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const { notifyError } = useNotifications();\n\n const organisationId = useSelector(getAuthDataOrganisationId);\n\n const { data: dossiersData = [], isPending: isDossiersPending, shouldRefresh } = useSelector(\n ({ dossier }) => dossier.byRatingType[ratingTypes.CREDIT_REVIEW],\n );\n\n const [fileUploadInputRef, setFileUploadInputRef] = useState(null);\n\n const [isPending, setIsPending] = useState(false);\n const [data, setData] = useState(null);\n const [error, setError] = useState(null);\n const [step, setStep] = useState(steps.UPLOAD);\n const [summaryStep, setSummaryStep] = useState(0);\n const [selectedDossier, setSelectedDossier] = useState(null);\n const [tempDossierId, setTempDossierId] = useState();\n const [dossiers, setDossiers] = useState([]);\n\n useEffect(() => {\n setDossiers(\n dossiersData &&\n dossiersData\n .map(([, [id, name], , , , [, , isDedicated]]) => ({\n id,\n name,\n isDedicated,\n }))\n .filter(dossier => !dossier.isDedicated),\n );\n }, [dossiersData]);\n\n const didUnmount = React.useRef(false);\n\n useEffect(() => {\n dispatch(\n getDossiersAction({ ratingType: ratingTypes.CREDIT_REVIEW, requestParams: { limit: 100 } }),\n );\n return () => {\n didUnmount.current = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldRefresh]);\n\n useEffect(() => {\n if (error) {\n notifyError(error);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [error]);\n\n const ignoredRowsCount = 1; // Ignore first row as it contains just headers\n const errorsNumber = data && data.errors.length && data.errors.length - ignoredRowsCount;\n const total = data ? data.total : 0;\n\n const summarySteps = [\n {\n label: t('Step one'),\n text: errorsNumber\n ? t(\n 'Could not be identified from the file. Please review and amend the file. If you continue, the items listed below will be excluded from the upload.',\n )\n : t('Could be identified from the file.'),\n ratingsCount: errorsNumber,\n customField: errorsNumber ? (\n <Typography className={classes.textCenter}>\n <Button\n component=\"a\"\n href={generateCSV(data.errors)}\n download=\"portfolio-errors-list.csv\"\n variant=\"contained\"\n color=\"secondary\"\n >\n {t('Download a list of unidentifiable elements')}\n </Button>\n </Typography>\n ) : (\n undefined\n ),\n },\n {\n label: t('Step two'),\n text: t('Have already been requested by a user from your organisation.'),\n ratingsCount: get(data, 'already_requested', 0),\n },\n {\n label: t('Step three'),\n text: t('Will be added to the Dossier you’ve selected.'),\n ratingsCount: get(data, 'added_to_dossier', 0),\n },\n ];\n\n const sampleTemplateUrl = '/esg/api/upload-portfolio/?type=SCORE%20REVIEW';\n const fileUploadInputRefChanged = element => setFileUploadInputRef(element);\n\n const placeOrders = async () => {\n setIsPending(true);\n\n try {\n await SIGUpdateDossier({\n dossier: selectedDossier,\n dossierId: tempDossierId,\n });\n\n setStep(steps.FINISH);\n } catch (e) {\n setError('Failed to finish portfolio upload');\n }\n setIsPending(false);\n };\n\n const handleStepSubmit = async payload => {\n if (step === steps.UPLOAD) {\n setIsPending(true);\n try {\n const uploadData = await uploadPortfolio({\n portfolio: payload && payload.fileUploadInput,\n type: portfolioTypes.CREDIT_REVIEW,\n organisationId,\n });\n setData({ ...uploadData.result, fileName: payload.fileUploadInput.name });\n setTempDossierId(uploadData.id);\n setStep(steps.CREATE_DOSSIER);\n } catch (e) {\n setError(e.message);\n }\n setIsPending(false);\n } else if (step === steps.CREATE_DOSSIER) {\n setStep(steps.SUMMARY);\n }\n };\n\n useEffect(() => {\n if (createdPortfolioName && step === steps.CREATE_DOSSIER) {\n setSelectedDossier(createdPortfolioName);\n handleStepSubmit();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [createdPortfolioName]);\n\n const onSelectDossier = (e, defaultAction) => {\n setSelectedDossier(e.target.value);\n if (defaultAction) {\n defaultAction(e);\n }\n };\n\n const downloadErrorHandler = () => {\n notifyError(t('Failed to download sample portfolio template'));\n };\n\n const closeModal = () => {\n setSummaryStep(0);\n onClose();\n };\n\n const handleDownloadTemplateClick = () =>\n downloadService({\n path: sampleTemplateUrl,\n name: 'portfolio-template.csv',\n onError: downloadErrorHandler,\n });\n\n const handleDone = async () => {\n setIsPending(true);\n try {\n await confirmPortfolio(tempDossierId);\n dispatch(\n refreshDossiersAction({\n reason: refreshReasons.UPDATED,\n ratingType: ratingTypes.CREDIT_REVIEW,\n }),\n );\n } catch (e) {\n setError(e.message);\n }\n setIsPending(false);\n closeModal();\n };\n\n const previousStep = () => {\n switch (step) {\n case steps.UPLOAD:\n backToTypeSelection();\n break;\n case steps.SUMMARY:\n if (summaryStep > 0) {\n setSummaryStep(summaryStep - 1);\n } else {\n setStep(step - 1);\n }\n break;\n default:\n setStep(step - 1);\n }\n };\n\n const nextSummaryStep = () => {\n if (summaryStep < summarySteps.length - 1) {\n setSummaryStep(summaryStep + 1);\n } else {\n placeOrders();\n }\n };\n\n const updateUploadBoxData = (setFieldValueFunc, file, text) => {\n if (!file && fileUploadInputRef) {\n fileUploadInputRef.value = null;\n }\n setFieldValueFunc('fileUploadInput', file);\n setFieldValueFunc('fileUploadText', text);\n };\n\n const stepUploadInitialValues = {\n description: '',\n origin: window.location.href,\n fileUploadText: '',\n fileUploadInput: null,\n };\n\n const stepCreateDossierInitialValues = {\n dossierId: '',\n };\n\n const stepUpload = (\n <Formik\n key={steps.UPLOAD}\n initialValues={stepUploadInitialValues}\n onSubmit={payload => handleStepSubmit(payload)}\n validationSchema={portfolioUploadSchema(['csv', 'xls', 'xlsx'])}\n >\n {({ values, errors, touched, setFieldValue }) => {\n return (\n <Form>\n <DialogContent>\n <Box mb={2}>\n <Typography>\n {t(\n `The upload of your portfolio will create a portfolio for the entities that \n have been identified from the upload file.`,\n )}\n </Typography>\n </Box>\n <Box mb={2}>\n <Typography>\n {t(\n `To prepare the upload, please create a list of entities, using the template below. \n To finalise the portfolio upload, please follow the steps in the upload wizard below.`,\n )}\n </Typography>\n </Box>\n <Divider />\n <div className={classes.downloadTemplateContainer}>\n <Box p={2}>\n <Typography>{`${t('File format')}: .csv, .xls, .xlsx`}</Typography>\n <Typography>{`${t('UPLOAD.MAX_SIZE')}: 100 ${t(\n 'ENTITIES',\n ).toLowerCase()}`}</Typography>\n <Typography>{`${t(\n 'Column heading',\n )}: EASYNUMBER, NAME, COUNTRY ISO 3 CODE, POSTCODE, VAT`}</Typography>\n </Box>\n <Box p={2} className={classes.downloadButtonContainer}>\n <Button\n onClick={handleDownloadTemplateClick}\n variant=\"outlined\"\n disabled={isPending || isDossiersPending}\n >\n {t('DOWNLOAD_TEMPLATE')}\n </Button>\n </Box>\n </div>\n <Divider />\n <ErrorMessage name=\"fileUploadInput\">\n {message => (\n <Box mt={2}>\n <Typography color=\"error\">{message}</Typography>\n </Box>\n )}\n </ErrorMessage>\n <Paper className={classes.uploadContainer}>\n <input\n className={classes.input}\n id=\"file-upload\"\n name=\"file-upload\"\n ref={fileUploadInputRefChanged}\n type=\"file\"\n onChange={event => {\n updateUploadBoxData(\n setFieldValue,\n event.currentTarget.files[0],\n get(event.currentTarget.files, '[0].name', ''),\n );\n }}\n />\n <Field name=\"fileUploadText\">\n {({ field }) => (\n <InputBase\n {...field}\n className={classes.fileUploadText}\n placeholder={t('UPLOAD.NO_FILE_SELECTED')}\n error={errors.fileUploadInput && touched.fileUploadText}\n readOnly\n />\n )}\n </Field>\n <IconButton\n type=\"submit\"\n disabled={!fileUploadInputRef || !fileUploadInputRef.value}\n onClick={() => {\n updateUploadBoxData(setFieldValue, null, '');\n }}\n size=\"large\">\n <DeleteIcon />\n </IconButton>\n <label htmlFor=\"file-upload\">\n <Button variant=\"contained\" color=\"primary\" component=\"span\">\n {t('UPLOAD.BROWSE')}\n </Button>\n </label>\n </Paper>\n </DialogContent>\n <DialogActions>\n {step !== steps.FINISH && (\n <Box>\n <Button variant=\"outlined\" onClick={previousStep}>\n {t('Previous')}\n </Button>\n </Box>\n )}\n <div style={{ flex: '1 0 0' }} />\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isDossiersPending || !get(values, 'fileUploadInput')}\n >\n {t('Next')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n );\n\n const stepCreateDossier = (\n <Formik\n key={steps.CREATE_DOSSIER}\n className={classes.fullWidth}\n initialValues={stepCreateDossierInitialValues}\n onSubmit={payload => handleStepSubmit(payload)}\n validationSchema={creditReviewCreatePortfolioSchema}\n >\n {() => {\n return (\n <Form>\n <DialogContent>\n <Box mb={2}>\n <Typography>{t('The file selected below will be uploaded.')}</Typography>\n </Box>\n <div className={classes.downloadTemplateContainer}>\n <Box p={2}>\n <Typography color=\"primary\">{`${data.fileName}`}</Typography>\n </Box>\n <Box p={2} className={classes.downloadButtonContainer}>\n <Button\n onClick={() => setStep(steps.UPLOAD)}\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isDossiersPending}\n >\n {t('Change File')}\n </Button>\n </Box>\n </div>\n <Box mt={2}>\n <Typography>{t('Create a portfolio to add the above file')}</Typography>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n {!!dossiers.length && (\n <Field name=\"dossierId\">\n {({ field }) => (\n <TextField\n {...field}\n select\n label=\"Select dossier\"\n fullWidth\n onChange={e => onSelectDossier(e, field.onChange)}\n >\n {dossiers.map(({ id, name }) => (\n <MenuItem key={id} value={id}>\n {name}\n </MenuItem>\n ))}\n </TextField>\n )}\n </Field>\n )}\n </Box>\n </DialogContent>\n <DialogActions>\n <Box>\n <Button variant=\"outlined\" onClick={previousStep}>\n {t('Previous')}\n </Button>\n </Box>\n <div style={{ flex: '1 0 0' }} />\n <Button variant=\"outlined\" onClick={onClickCreateNew}>\n {t('Create new portfolio')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isDossiersPending || !selectedDossier}\n >\n {t('Next')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n );\n\n const stepSummary = (\n <>\n <DialogContent>\n <Box mb={2}>\n <Stepper activeStep={summaryStep}>\n {summarySteps.map(item => {\n return (\n <Step key={item.label}>\n <StepLabel>{item.label}</StepLabel>\n </Step>\n );\n })}\n </Stepper>\n </Box>\n <Box mb={2} className={classes.summaryContent}>\n <Typography color=\"primary\" variant=\"h3\">\n {errorsNumber ? summarySteps[summaryStep].ratingsCount : total}\n </Typography>\n <Box p={2}>\n <Typography variant=\"h6\">{t('out of')}</Typography>\n </Box>\n <Typography variant=\"h3\">{formatNumber(total)}</Typography>\n </Box>\n <Box p={2} mb={2}>\n <Typography variant=\"body1\" className={classes.textCenter}>\n {summarySteps[summaryStep].text}\n </Typography>\n </Box>\n {summarySteps[summaryStep].customField ? (\n <Box p={2}>{summarySteps[summaryStep].customField}</Box>\n ) : null}\n </DialogContent>\n <DialogActions>\n {step !== steps.FINISH && (\n <Box>\n <Button variant=\"outlined\" onClick={previousStep}>\n {t('Previous')}\n </Button>\n </Box>\n )}\n <div style={{ flex: '1 0 0' }} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isDossiersPending}\n onClick={nextSummaryStep}\n >\n {t('Next')}\n </Button>\n </DialogActions>\n </>\n );\n\n const stepFinish = (\n <>\n <DialogContent className={classes.textCenter}>\n <Box\n width={140}\n height={140}\n borderRadius=\"50%\"\n display=\"flex\"\n justifyContent=\"center\"\n alignItems=\"center\"\n marginY={2}\n marginX=\"auto\"\n boxShadow=\"0 3px 4px 1px rgba(155, 155, 155, 0.3)\"\n bgcolor={theme.palette.custom.verySoftCyan}\n >\n <CheckIcon className={classes.checkIcon} />\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || isDossiersPending}\n onClick={handleDone}\n >\n {t('Done')}\n </Button>\n </DialogActions>\n </>\n );\n\n const stepsMapping = {\n [steps.UPLOAD]: stepUpload,\n [steps.CREATE_DOSSIER]: stepCreateDossier,\n [steps.SUMMARY]: stepSummary,\n [steps.FINISH]: stepFinish,\n };\n\n return (\n <>\n {stepsMapping[step]}\n {(isPending || isDossiersPending) && <Loader cover />}\n </>\n );\n};\n\nPortfolioUploadCreditReview.defaultProps = {\n onClose: () => null,\n backToTypeSelection: () => null,\n onClickCreateNew: () => null,\n createdPortfolioName: undefined,\n};\n\nPortfolioUploadCreditReview.propTypes = {\n onClose: PropTypes.func,\n onClickCreateNew: PropTypes.func,\n createdPortfolioName: PropTypes.string,\n backToTypeSelection: PropTypes.func,\n};\n\nexport default PortfolioUploadCreditReview;\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { Line } from 'react-chartjs-2';\nimport { theme } from 'theme';\nimport { Box, Grid } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { fetchCreditReviewChartsData } from 'services';\nimport { Loader } from 'ui/Loader/Loader';\nimport clsx from 'clsx';\n\nconst chartOptions = {\n scales: {\n xAxes: [\n {\n gridLines: {\n display: false,\n },\n ticks: {\n padding: 20,\n fontSize: 16,\n fontStyle: 'bold',\n },\n },\n ],\n yAxes: [\n {\n gridLines: {\n borderDash: [10, 5],\n color: theme.palette.grey[400],\n drawBorder: false,\n },\n ticks: {\n min: 0,\n max: 10,\n padding: 20,\n fontSize: 16,\n fontStyle: 'bold',\n callback: value => value.toFixed(1),\n },\n },\n ],\n },\n layout: {\n padding: {\n top: 50,\n bottom: 20,\n right: 50,\n left: 20,\n },\n },\n legend: {\n display: false,\n },\n};\n\nconst useStyles = makeStyles({\n legend: {\n marginTop: theme.spacing(1),\n fontSize: 18,\n },\n point: {\n backgroundColor: theme.palette.grey[400],\n },\n entity: {\n fontWeight: 'bold',\n },\n entityPoint: {\n backgroundColor: theme.palette.custom.moderateBlue,\n },\n});\n\nconst Legend = ({ entityName, industry }) => {\n const classes = useStyles();\n\n return (\n <Box mb={2}>\n <Grid container className={classes.legend} direction=\"row\" justifyContent=\"center\" spacing={4}>\n <Grid item className={classes.entity}>\n <Box\n position=\"relative\"\n width={20}\n height={20}\n marginRight={1}\n top={3}\n display=\"inline-block\"\n borderRadius=\"20px\"\n className={clsx(classes.point, classes.entityPoint)}\n />\n {entityName}\n </Grid>\n {industry && (\n <Grid item>\n <Box\n position=\"relative\"\n width={20}\n height={20}\n marginRight={1}\n top={3}\n display=\"inline-block\"\n borderRadius=\"20px\"\n className={classes.point}\n />\n {industry}\n </Grid>\n )}\n </Grid>\n </Box>\n );\n};\n\nLegend.defaultProps = {\n industry: null,\n};\n\nLegend.propTypes = {\n entityName: PropTypes.string.isRequired,\n industry: PropTypes.string,\n};\n\nconst ScoreHistoryWidget = ({ easyNumber, entityName }) => {\n const { t } = useTranslation();\n const [isPending, setIsPending] = useState(false);\n const [chartData, setChartData] = useState({\n labels: [],\n entityValues: [],\n industryValues: [],\n });\n\n useEffect(() => {\n const fetchData = async () => {\n setIsPending(true);\n\n const data = await fetchCreditReviewChartsData(easyNumber);\n\n if (data) {\n setChartData({\n labels: data.score_over_time_labels,\n entityValues: data.score_over_time_values,\n industryValues: data.score_over_time_peer_median,\n });\n }\n\n setIsPending(false);\n };\n\n fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const { labels, entityValues, industryValues } = chartData;\n\n const data = canvas => {\n const ctx = canvas.getContext('2d');\n const gradient = ctx.createLinearGradient(0, 0, 0, 500);\n\n gradient.addColorStop(0, 'rgba(230, 230, 230, 1)');\n gradient.addColorStop(1, 'rgba(230, 230, 230, 0)');\n\n return {\n labels,\n datasets: [\n {\n label: entityName,\n borderColor: theme.palette.custom.moderateBlue,\n data: entityValues,\n fill: true,\n borderWidth: 5,\n pointRadius: 7,\n pointBorderColor: theme.palette.custom.moderateBlue,\n pointBackgroundColor: 'white',\n pointBorderWidth: 3,\n backgroundColor: gradient,\n },\n {\n label: `${t('Peers')} (${t('median')})`,\n fill: true,\n borderColor: theme.palette.grey[400],\n data: industryValues,\n borderWidth: 5,\n pointRadius: 7,\n pointBorderColor: theme.palette.grey[400],\n pointBackgroundColor: 'white',\n pointBorderWidth: 3,\n backgroundColor: gradient,\n },\n ],\n };\n };\n\n return (\n <Box mt={2} mx={2}>\n {isPending ? <Loader /> : <Line options={chartOptions} data={data} />}\n <Legend entityName={entityName} industry={t('Peers')} />\n </Box>\n );\n};\n\nScoreHistoryWidget.propTypes = {\n easyNumber: PropTypes.string.isRequired,\n entityName: PropTypes.string.isRequired,\n};\n\nexport default ScoreHistoryWidget;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\nimport { creditRatingScalesMapping } from 'shared/mappings';\nimport { ratingConstants } from 'shared/constants/company';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { endorsementCreditRating } from 'shared/constants/summaryTab';\nimport { BlurWrapper, Loader, ContactAdvisor } from 'ui';\nimport { SummaryCard, HeadSquare, SummaryCardLineChart } from 'modules/common/SummaryCard';\nimport { requestCreditReviewRatings } from 'services';\nimport { getAuthDataOrganisationId, getAuthDataUserId } from 'selectors/auth';\nimport summaryTabHistoryData from 'assets/mockedData/summaryTabHistoryData.json';\nimport RequestContent from '../common/SummaryCard/Request/RequestContent';\nimport { generalInformationMock } from '../common/SummaryCard/Request/generalInformationMock';\n\nconst data = {\n latestChange: {},\n generalInformation: {},\n levels: {},\n dates: {},\n documents: [],\n ratingScalesData: creditRatingScalesMapping(\n portfolioTypes.CREDIT_REVIEW,\n ratingConstants.entityReview,\n ),\n generalInformationList: generalInformationMock,\n endorsementList: endorsementCreditRating,\n};\n\nconst useStyles = makeStyles(theme => ({\n root: {\n height: '100%',\n },\n content: {\n flexDirection: 'column',\n alignContent: 'center',\n justifyContent: 'center',\n height: '100%',\n },\n contentRow: {\n textAlign: 'center',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n}));\n\nconst useHeadSquareStyles = makeStyles({\n score: {\n fontWeight: 500,\n fontSize: 60,\n },\n max: {\n fontSize: 24,\n },\n scoreWidgetMainColumn: {\n height: '100%',\n },\n});\n\nconst SummaryCardRequestCreditReview = ({\n className,\n easyNumber,\n onRequest,\n isAvailable,\n wasRequested,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const headSquareClasses = useHeadSquareStyles();\n const organisationId = useSelector(getAuthDataOrganisationId);\n const userId = useSelector(getAuthDataUserId);\n const [requested, setRequested] = useState(wasRequested);\n const [isRequestRatingPending, setIsRequestRatingPending] = useState(false);\n\n const handleRequest = async () => {\n setIsRequestRatingPending(true);\n\n const response = await requestCreditReviewRatings({\n ids: [easyNumber],\n userId,\n organisationId,\n });\n\n if (response.success) {\n setRequested(true);\n onRequest();\n }\n };\n\n let showRatingIsNotAvailable = false;\n\n if (!easyNumber || !isAvailable) {\n showRatingIsNotAvailable = true;\n }\n\n const content = !showRatingIsNotAvailable ? (\n <RequestContent onRequest={handleRequest} isPending={requested}>\n <Grid className={classes.contentRow}>\n <Typography display=\"block\">\n {t('If you wish to see the review for this company, please request it here.')}\n </Typography>\n <Typography display=\"block\">\n {t(\n 'If it is available and covered by your subscription, you will find it here immediately.',\n )}\n </Typography>\n </Grid>\n </RequestContent>\n ) : (\n <Grid className={classes.contentRow}>\n <ContactAdvisor>\n <Typography display=\"block\">{t('Coming soon')}</Typography>\n <Typography display=\"block\">\n <strong>{t('Credit Review. ')}</strong>\n {t('The primary')} <strong>{t('Early Warning System')}</strong>{' '}\n {t('for companies’ credit quality.')}\n </Typography>\n <Typography display=\"block\">\n {t(\n 'If you would like to know more about this service, please contact your personal advisor.',\n )}\n </Typography>\n </ContactAdvisor>\n </Grid>\n );\n\n return (\n <BlurWrapper\n className={className}\n content={\n <Grid container className={classes.content}>\n {isRequestRatingPending ? <Loader center /> : content}\n </Grid>\n }\n active\n >\n <SummaryCard\n headSquare={\n <HeadSquare title={t('Credit Review assessment')}>\n <Box>\n <span className={headSquareClasses.score}>8</span>\n <span className={headSquareClasses.max}>/10</span>\n </Box>\n <Typography>{t('PD')} : 2%</Typography>\n </HeadSquare>\n }\n history={<SummaryCardLineChart history={summaryTabHistoryData} />}\n data={data}\n />\n </BlurWrapper>\n );\n};\n\nSummaryCardRequestCreditReview.defaultProps = {\n className: undefined,\n easyNumber: undefined,\n wasRequested: undefined,\n onRequest: undefined,\n};\n\nSummaryCardRequestCreditReview.propTypes = {\n isAvailable: PropTypes.bool.isRequired,\n wasRequested: PropTypes.bool,\n onRequest: PropTypes.func,\n easyNumber: PropTypes.string,\n className: PropTypes.string,\n};\n\nexport default SummaryCardRequestCreditReview;\n","import React, { FC } from 'react';\nimport { makeStyles } from '@mui/styles';\nimport clsx from 'clsx';\nimport { ESGImpactHexBorderMap, ESGImpactHexCodesMap } from 'shared/constants/ESGImpactHexCodesMap';\n\nconst useStyles = makeStyles({\n root: {\n borderRadius: 10,\n width: 20,\n height: 10,\n background: 'red',\n },\n});\n\ntype LegendColorChipProps = {\n chipColor?: string;\n impactLevel?: 'insignificant' | 'veryLow' | 'low' | 'medium' | 'high' | 'veryHigh';\n className?: string;\n};\n\nexport const LegendColorChip: FC<LegendColorChipProps> = ({\n chipColor,\n impactLevel,\n className,\n}) => {\n const classes = useStyles();\n const classNames = clsx(classes.root, className);\n const style = {\n backgroundColor: impactLevel ? ESGImpactHexCodesMap[impactLevel] : chipColor,\n border: impactLevel ? ESGImpactHexBorderMap[impactLevel] : '',\n };\n\n return <div className={classNames} style={style} />;\n};\n","export const REQUEST_CREDIT_REVIEW_LEVELS = 'REQUEST_CREDIT_REVIEW_LEVELS';\nexport const REQUEST_CREDIT_REVIEW_LEVELS_SUCCESS = 'REQUEST_CREDIT_REVIEW_LEVELS_SUCCESS';\nexport const REQUEST_CREDIT_REVIEW_LEVELS_ERROR = 'REQUEST_CREDIT_REVIEW_LEVELS_ERROR';\n\nexport enum CreditReviewLevelsActionTypes {\n Request = 'REQUEST_CREDIT_REVIEW_LEVELS',\n RequestSuccess = 'REQUEST_CREDIT_REVIEW_LEVELS_SUCCESS',\n RequestError = 'REQUEST_CREDIT_REVIEW_LEVELS_ERROR',\n}\n\nexport interface RequestCreditRequestLevelsAction {\n type: CreditReviewLevelsActionTypes.Request;\n}\n\nexport interface RequestCreditRequestLevelsSuccessAction {\n type: CreditReviewLevelsActionTypes.RequestSuccess;\n payload: any;\n}\n\nexport interface RequestCreditRequestLevelsErrorAction {\n type: CreditReviewLevelsActionTypes.RequestError;\n payload: string;\n}\n\nexport const requestCreditRequestLevelsAction = (): RequestCreditRequestLevelsAction => {\n return {\n type: CreditReviewLevelsActionTypes.Request,\n };\n};\n\nexport const requestCreditRequestLevelsSuccessAction = (\n payload: any,\n): RequestCreditRequestLevelsSuccessAction => {\n return {\n type: CreditReviewLevelsActionTypes.RequestSuccess,\n payload,\n };\n};\n\nexport const requestCreditRequestLevelsErrorAction = (\n error: string,\n): RequestCreditRequestLevelsErrorAction => {\n return {\n type: CreditReviewLevelsActionTypes.RequestError,\n payload: error,\n };\n};\n\nexport type Actions =\n | RequestCreditRequestLevelsAction\n | RequestCreditRequestLevelsSuccessAction\n | RequestCreditRequestLevelsErrorAction;\n","import { CreditReviewSpec } from 'shared/types/creditReview';\n\nexport const REQUEST_CREDIT_REVIEW_SPECS = 'REQUEST_CREDIT_REVIEW_SPECS';\nexport const REQUEST_CREDIT_REVIEW_SPECS_SUCCESS = 'REQUEST_CREDIT_REVIEW_SPECS_SUCCESS';\nexport const REQUEST_CREDIT_REVIEW_SPECS_ERROR = 'REQUEST_CREDIT_REVIEW_SPECS_ERROR';\n\nexport enum CreditReviewSpecsActionTypes {\n Request = 'REQUEST_CREDIT_REVIEW_SPECS',\n RequestSuccess = 'REQUEST_CREDIT_REVIEW_SPECS_SUCCESS',\n RequestError = 'REQUEST_CREDIT_REVIEW_SPECS_ERROR',\n}\n\ntype CreditReviewSpecsPayload = CreditReviewSpec[];\n\nexport interface RequestCreditReviewSpecsAction {\n type: CreditReviewSpecsActionTypes.Request;\n}\n\nexport interface RequestCreditReviewSpecsSuccessAction {\n type: CreditReviewSpecsActionTypes.RequestSuccess;\n payload: CreditReviewSpecsPayload;\n}\n\nexport interface RequestCreditReviewSpecsErrorAction {\n type: CreditReviewSpecsActionTypes.RequestError;\n payload: string;\n}\n\nexport const requestCreditReviewSpecsAction = (): RequestCreditReviewSpecsAction => {\n return {\n type: CreditReviewSpecsActionTypes.Request,\n };\n};\n\nexport const requestCreditReviewSpecsSuccessAction = (\n payload: CreditReviewSpecsPayload,\n): RequestCreditReviewSpecsSuccessAction => {\n return {\n type: CreditReviewSpecsActionTypes.RequestSuccess,\n payload,\n };\n};\n\nexport const requestCreditReviewSpecsErrorAction = (\n error: string,\n): RequestCreditReviewSpecsErrorAction => {\n return {\n type: CreditReviewSpecsActionTypes.RequestError,\n payload: error,\n };\n};\n\nexport type Actions =\n | RequestCreditReviewSpecsAction\n | RequestCreditReviewSpecsSuccessAction\n | RequestCreditReviewSpecsErrorAction;\n","export enum ArtifactIdType {\n ScopeOneId = 'SCOPEONEID',\n EsgId = 'ESGID',\n EasyNumber = 'EASYNUMBER',\n}\n","export const SET_SHOP_FILTERS = 'SET_SHOP_FILTERS';\nexport const RESET_SHOP_FILTERS = 'RESET_SHOP_FILTERS';\nexport const SET_SHOP_SORTING = 'SET_SHOP_SORTING';\n\nexport const FETCH_SHOP_PRODUCTS = 'FETCH_SHOP_PRODUCTS';\nexport const FETCH_SHOP_PRODUCTS_SUCCESS = 'FETCH_SHOP_PRODUCTS_SUCCESS';\nexport const FETCH_SHOP_PRODUCTS_ERROR = 'FETCH_SHOP_PRODUCTS_ERROR';\n\nexport const CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS = 'CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS';\nexport const CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_SUCCESS =\n 'CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_SUCCESS';\nexport const CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_ERROR =\n 'CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS_ERROR';\n\nexport const FETCH_SHOP_HISTORY = 'FETCH_SHOP_HISTORY';\nexport const FETCH_SHOP_HISTORY_SUCCESS = 'FETCH_SHOP_HISTORY_SUCCESS';\nexport const FETCH_SHOP_HISTORY_ERROR = 'FETCH_SHOP_HISTORY_ERROR';\n\nexport const ADD_SHOP_PRODUCTS_TO_BASKET = 'ADD_SHOP_PRODUCTS_TO_BASKET';\nexport const ADD_SHOP_PRODUCTS_TO_BASKET_SUCCESS = 'ADD_SHOP_PRODUCTS_TO_BASKET_SUCCESS';\nexport const ADD_SHOP_PRODUCTS_TO_BASKET_ERROR = 'ADD_SHOP_PRODUCTS_TO_BASKET_ERROR';\n\nexport const REMOVE_SHOP_PRODUCTS_FROM_BASKET = 'REMOVE_SHOP_PRODUCTS_FROM_BASKET';\nexport const REMOVE_SHOP_PRODUCTS_FROM_BASKET_SUCCESS = 'REMOVE_SHOP_PRODUCTS_FROM_BASKET_SUCCESS';\nexport const REMOVE_SHOP_PRODUCTS_FROM_BASKET_ERROR = 'REMOVE_SHOP_PRODUCTS_FROM_BASKET_ERROR';\n\nexport const SET_SHOP_ACIVE_VIEW = 'SET_SHOP_ACIVE_VIEW';\n\nexport const FETCH_SHOP_PRODUCT_PROPERTIES = 'FETCH_SHOP_PRODUCT_PROPERTIES';\nexport const FETCH_SHOP_PRODUCT_PROPERTIES_SUCCESS = 'FETCH_SHOP_PRODUCT_PROPERTIES_SUCCESS';\nexport const FETCH_SHOP_PRODUCT_PROPERTIES_ERROR = 'FETCH_SHOP_PRODUCT_PROPERTIES_ERROR';\n\nexport const START_SHOP_PRODUCT_FREE_TRIAL = 'START_SHOP_PRODUCT_FREE_TRIAL';\nexport const START_SHOP_PRODUCT_FREE_TRIAL_SUCCESS = 'START_SHOP_PRODUCT_FREE_TRIAL_SUCCESS';\nexport const START_SHOP_PRODUCT_FREE_TRIAL_ERROR = 'START_SHOP_PRODUCT_FREE_TRIAL_ERROR';\n\nexport const START_SHOP_PRODUCT_FREE_SUBSCRIPTION = 'START_SHOP_PRODUCT_FREE_SUBSCRIPTION';\nexport const START_SHOP_PRODUCT_FREE_SUBSCRIPTION_SUCCESS =\n 'START_SHOP_PRODUCT_FREE_SUBSCRIPTION_SUCCESS';\nexport const START_SHOP_PRODUCT_FREE_SUBSCRIPTION_ERROR = 'START_SHOP_PRODUCT_FREE_TRIAL_ERROR';\n\nexport const FETCH_SHOP_PERMISSIONS = 'FETCH_SHOP_PERMISSIONS';\nexport const FETCH_SHOP_PERMISSIONS_SUCCESS = 'FETCH_SHOP_PERMISSIONS_SUCCESS';\nexport const FETCH_SHOP_PERMISSIONS_ERROR = 'FETCH_SHOP_PERMISSIONS_ERROR';\n\nexport const setShopFiltersAction = ({ filters }) => ({\n type: SET_SHOP_FILTERS,\n payload: {\n filters,\n },\n});\n\nexport const resetShopFiltersAction = () => ({\n type: RESET_SHOP_FILTERS,\n});\n\nexport const setShopSortingAction = ({ sortBy }) => ({\n type: SET_SHOP_SORTING,\n payload: {\n sortBy,\n },\n});\n\nexport const fetchShopProductsAction = () => ({\n type: FETCH_SHOP_PRODUCTS,\n});\n\nexport const changeShopProductsFavoriteStatusAction = ({ ids, isFavorite }) => ({\n type: CHANGE_SHOP_PRODUCTS_FAVORITE_STATUS,\n payload: { ids, isFavorite },\n});\n\nexport const fetchShopHistoryAction = () => ({\n type: FETCH_SHOP_HISTORY,\n});\n\nexport const addShopProductsToBasketAction = ({ ids }) => ({\n type: ADD_SHOP_PRODUCTS_TO_BASKET,\n payload: { ids },\n});\n\nexport const removeShopProductsFromBasketAction = ({ ids }) => ({\n type: REMOVE_SHOP_PRODUCTS_FROM_BASKET,\n payload: { ids },\n});\n\nexport const setShopActiveViewAction = ({ view }) => ({\n type: SET_SHOP_ACIVE_VIEW,\n payload: { view },\n});\n\nexport const fetchShopProductPropertiesAction = () => ({\n type: FETCH_SHOP_PRODUCT_PROPERTIES,\n});\n\nexport const startShopProductFreeTrialAction = ({ id }) => ({\n type: START_SHOP_PRODUCT_FREE_TRIAL,\n payload: { id },\n});\n\nexport const startShopProductFreeSubscriptionAction = ({ id }) => ({\n type: START_SHOP_PRODUCT_FREE_SUBSCRIPTION,\n payload: { id },\n});\n\nexport const fetchShopPermissionsAction = () => ({\n type: FETCH_SHOP_PERMISSIONS,\n});\n","export const emailFrequencies = {\n DISABLED: 'DISABLED',\n DAILY_DIGEST: 'DAILY_DIGEST',\n IMMEDIATE: 'IMMEDIATE',\n};\n","import { saveAs } from 'file-saver';\n\nimport { fetchApi } from 'shared/functions';\nimport { downloadServiceWithRetries } from './downloadServiceWithRetries';\n\nexport const DownloadStatus = {\n SUCCESS: 'success',\n PENDING: 'pending',\n ERROR: 'error',\n};\n\ntype DownloadServiceParams = {\n path: string;\n name: string;\n options?: Record<string, unknown>;\n retries?: number;\n onError: (error: any) => void;\n onDownloadNotReady?: (message: string) => void;\n absolutePath?: boolean;\n};\n\nexport const downloadAsyncService = async ({\n path,\n name,\n options,\n retries,\n onError,\n onDownloadNotReady = undefined,\n absolutePath = false,\n}: DownloadServiceParams): Promise<string> => {\n if (retries) {\n try {\n let status = DownloadStatus.ERROR;\n const response = await fetchApi(path, options, [], false, false, absolutePath).then(\n async (res) => ({\n status: res.status,\n ...(await res.json()),\n }),\n );\n if (response.status === 200) {\n window.open(response.fileUrl);\n status = DownloadStatus.SUCCESS;\n } else if (response.status === 202) {\n if (onDownloadNotReady) {\n onDownloadNotReady(response.message || 'Document is being generated');\n }\n status = DownloadStatus.PENDING;\n } else if (response.status === 404) {\n const retryResponse = await downloadServiceWithRetries(path, retries);\n\n if (retryResponse.generated) {\n status = DownloadStatus.SUCCESS;\n } else {\n onError(response.message || 'Download failed');\n }\n } else {\n onError(response.message || 'Download failed');\n status = DownloadStatus.ERROR;\n }\n return status;\n } catch (e) {\n onError((e as Error).message || 'Download failed');\n }\n return DownloadStatus.ERROR;\n }\n\n try {\n const response = await fetchApi(path, options);\n\n if (!response.ok) {\n onError(response.statusText);\n }\n\n const blob = await response.blob();\n saveAs(blob, name);\n return DownloadStatus.SUCCESS;\n } catch (e) {\n onError(e);\n }\n\n return DownloadStatus.ERROR;\n};\n","export const parseScoreToString = value => {\n if (value < 0.5) return 'Very low';\n if (value <= 0.8) return 'Low';\n if (value <= 1.2) return 'Medium';\n if (value <= 3) return 'High';\n return 'Very high';\n};\n","import isNumber from 'lodash/isNumber';\n\nconst parseScore = score => (isNumber(score) ? Number(score.toFixed(2)) : null);\nconst parseWeight = weight => (['low', 'average', 'high'].includes(weight) ? weight : null);\n\nexport const regionImpactToMapParser = data =>\n Object.keys(data).map(key => {\n const value = data[key];\n const {\n region,\n environmentScore,\n environmentWgt,\n socialScore,\n socialWgt,\n governanceScore,\n governanceWgt,\n totalScore,\n totalWgt,\n } = value;\n\n return {\n continent: region,\n environment: {\n impactNumber: parseScore(environmentScore),\n impactWeight: parseWeight(environmentWgt),\n },\n social: {\n impactNumber: parseScore(socialScore),\n impactWeight: parseWeight(socialWgt),\n },\n governance: {\n impactNumber: parseScore(governanceScore),\n impactWeight: parseWeight(governanceWgt),\n },\n total: {\n impactNumber: parseScore(totalScore),\n impactWeight: parseWeight(totalWgt),\n },\n };\n });\n","import isNumber from 'lodash/isNumber';\n\nconst parseScore = score => (isNumber(score) ? score.toFixed(2) : null);\nconst parseWeight = weight => (['low', 'average', 'high'].includes(weight) ? weight : null);\n\nexport const regionImpactToTableParser = data =>\n Object.keys(data).map(key => {\n const value = data[key];\n const {\n region,\n environmentScore,\n environmentWgt,\n socialScore,\n socialWgt,\n governanceScore,\n governanceWgt,\n totalScore,\n totalWgt,\n } = value;\n\n return [\n region,\n {\n name: region,\n impactNumber: parseScore(environmentScore),\n impactWeight: parseWeight(environmentWgt),\n },\n {\n name: region,\n impactNumber: parseScore(socialScore),\n impactWeight: parseWeight(socialWgt),\n },\n {\n name: region,\n impactNumber: parseScore(governanceScore),\n impactWeight: parseWeight(governanceWgt),\n },\n {\n name: region,\n impactNumber: parseScore(totalScore),\n impactWeight: parseWeight(totalWgt),\n },\n ];\n });\n","import isNumber from 'lodash/isNumber';\n\nconst parseScore = score => (isNumber(score) ? score.toFixed(2) : null);\nconst parseWeight = weight => (['low', 'average', 'high'].includes(weight) ? weight : null);\n\nexport const industryImpactToTableParser = data => {\n const dataLabels = Object.keys(data);\n const dataTable = Object.keys(data).map(key => {\n const value = data[key];\n\n const {\n environmentScore,\n environmentWgt,\n socialScore,\n socialWgt,\n governanceScore,\n governanceWgt,\n totalScore,\n totalWgt,\n } = value;\n\n return [\n key,\n {\n name: key,\n impactNumber: parseScore(environmentScore),\n impactWeight: parseWeight(environmentWgt),\n },\n {\n name: key,\n impactNumber: parseScore(socialScore),\n impactWeight: parseWeight(socialWgt),\n },\n {\n name: key,\n impactNumber: parseScore(governanceScore),\n impactWeight: parseWeight(governanceWgt),\n },\n {\n name: key,\n impactNumber: parseScore(totalScore),\n impactWeight: parseWeight(totalWgt),\n },\n ];\n });\n\n return dataTable\n .map(item => {\n const key = dataLabels.indexOf(item[1]);\n dataLabels[key] = '';\n return [key, item];\n })\n .sort()\n .map(item => item[1]);\n};\n","export const scoreOverviewParser = data => {\n const scoreOverviewData = data.map(item => ({\n title: item.variable,\n score: item.value ?? 0,\n companyImpact: item.companyImpact * 100,\n extCostsToRevenue: item.extCostsToRevenue,\n supplyChain: 100 - item.companyImpact * 100 - (item.downstreamImpact ? item.downstreamImpact * 100 : 0),\n downstreamImpact: item.downstreamImpact ? item.downstreamImpact * 100 : 0,\n valueWithoutDownstream: item.valueWithoutDownstream ?? 0,\n }));\n\n const getDataByName = name => scoreOverviewData.find(({ title }) => title === name);\n\n return [\n getDataByName('Environment'),\n getDataByName('Social'),\n getDataByName('Governance'),\n getDataByName('Total'),\n ];\n};\n","export const creditRatingAlerts = {\n conflictOfInterests: (companyName) =>\n `Scope Ratings GmbH is prohibited from issuing a public or subscription credit rating on ${companyName} or any of its subsidiaries in accordance with EU laws and specifically the Rating Agency Regulation on Credit Rating Agencies (EC) No 1060/2009 as amended by Regulation (EU) No 513/2011 and Regulation (EU) No 462/2013.`,\n confidentialAlert: {\n title:\n 'Subscription, Restricted Subscription, and Private Ratings are for Subscribers only and must be kept confidential.',\n message:\n 'The credit rating(s) and outlook(s) provided on this screen may not be shared with any unauthorised third party.',\n },\n};\n","export enum PortfolioErrorType {\n CREATE_NAME_CONFLICT = 'CREATE_NAME_CONFLICT',\n MOVE_UPLOADED_ITEMS_TO_PORTFOLIO = 'MOVE_UPLOADED_ITEMS_TO_PORTFOLIO',\n UNKNOWN = 'UNKNOWN',\n}\n\nexport const portfolioErrorMessages = {\n [PortfolioErrorType.CREATE_NAME_CONFLICT]: 'Portfolio with this name already exists',\n [PortfolioErrorType.MOVE_UPLOADED_ITEMS_TO_PORTFOLIO]:\n 'Failed to move uploaded items to the destination portfolio',\n [PortfolioErrorType.UNKNOWN]: 'Failed to create or edit portfolio',\n};\n","export const ADD_NOTIFICATION = 'ADD_NOTIFICATION';\nexport const REMOVE_NOTIFICATION = 'REMOVE_NOTIFICATION';\n\nexport const addNotificationAction = ({ message, variant }) => {\n return {\n type: ADD_NOTIFICATION,\n payload: {\n id: new Date().getTime(),\n message,\n variant,\n },\n };\n};\n\nexport const removeNotificationAction = id => {\n return {\n type: REMOVE_NOTIFICATION,\n payload: id,\n };\n};\n","import React, { FC, useState } from 'react';\nimport { Formik, Form, Field, FieldProps } from 'formik';\nimport * as Yup from 'yup';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport FormHelperText from '@mui/material/FormHelperText';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { DialogTitleWithClose, Loader } from 'ui';\nimport {\n PortfolioErrorType,\n portfolioErrorMessages,\n} from 'shared/constants/portfolio/portfolioErrorTypes';\nimport { PortfolioItem, SelectedEntities } from 'shared/types/portfolios';\n\nimport { useCreatePortfolio, useUpdatePortfolio } from 'modules/common/GraphQL/portfolios/hooks';\nimport { PortfolioAction } from '../PortfolioManager/types';\nimport { useVariantAction } from './portfolioModalUtils';\nimport { getResponseMessage } from '../GraphQL/utils';\n\nconst useStyles = makeStyles(theme => ({\n dialogContent: {\n paddingTop: '0 !important',\n },\n input: {\n marginTop: 5,\n },\n helperText: {\n minWidth: theme.spacing(60),\n color: theme.palette.error.dark,\n },\n}));\n\ntype CreateNewPortfolioModalProps = {\n open: boolean;\n onClose: () => void;\n onCreate?: (id: string, name: string, description: string) => void;\n portfolio?: { id: string; name: string; description: string };\n itemsData?: SelectedEntities;\n itemType?: PortfolioItem;\n actionVariant?: PortfolioAction;\n sourcePortfolioId?: string;\n};\n\ntype Error = {\n type: PortfolioErrorType;\n message: string;\n};\n\ntype AddToNewPortfolioResponse = {\n result: {\n data: any;\n errors: {\n message: string;\n }[];\n };\n};\n\ntype FormData = {\n name: string;\n description: string;\n};\n\ntype CreateResponse = {\n createPortfolio?: {\n portfolio: {\n id: string;\n name: string;\n description: string;\n };\n };\n};\n\ntype UpdateResponse = {\n updatePortfolio?: {\n portfolio: {\n id: string;\n name: string;\n description: string;\n };\n };\n};\n\nexport const CreateNewPortfolioModal: FC<CreateNewPortfolioModalProps> = ({\n open,\n onClose,\n onCreate,\n portfolio,\n itemsData = {\n count: 0,\n itemIds: {},\n items: {},\n type: null,\n },\n itemType = 'ENTITY',\n actionVariant = 'add',\n sourcePortfolioId = '',\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const [showError, setShowError] = useState<Error | null>(null);\n const [isPending, setIsPending] = useState(false);\n const createPortfolio = useCreatePortfolio();\n const updatePortfolio = useUpdatePortfolio();\n const { error, success } = useSnackbar();\n\n const validationSchema = Yup.object().shape({\n name: Yup.string()\n .min(1)\n .max(100)\n .trim(t('PORTFOLIO.PORTFOLIO_NAME_WHITESPACE_WARNING'))\n .strict(true)\n .required(),\n description: Yup.string()\n .min(1)\n .max(4000),\n });\n\n const { action, itemSubmitSuccess } = useVariantAction(itemsData, itemType, sourcePortfolioId)[\n actionVariant\n ];\n\n const handleSubmit = async (payload: FormData) => {\n setIsPending(true);\n\n if (portfolio?.id) {\n try {\n const response = await updatePortfolio({\n portfolioId: portfolio?.id,\n portfolioName: payload.name,\n portfolioDescription: payload.description,\n });\n\n const updatedPortfolio = (response?.data as UpdateResponse).updatePortfolio?.portfolio;\n if (onCreate && updatedPortfolio) {\n onCreate(updatedPortfolio.id, updatedPortfolio.name, updatedPortfolio.description);\n }\n onClose();\n } catch {\n setShowError({\n type: PortfolioErrorType.CREATE_NAME_CONFLICT,\n message: portfolioErrorMessages[PortfolioErrorType.CREATE_NAME_CONFLICT],\n });\n }\n setIsPending(false);\n } else {\n try {\n const response = await createPortfolio({\n name: payload.name,\n description: payload.description,\n });\n\n const newPortfolio = (response?.data as CreateResponse).createPortfolio?.portfolio;\n\n if (newPortfolio && itemsData && itemsData.count) {\n try {\n await action(newPortfolio.id);\n success(getResponseMessage(null, itemSubmitSuccess));\n } catch (err) {\n const { networkError } = err as any;\n const {\n data: responseData,\n errors,\n } = (networkError as AddToNewPortfolioResponse)?.result;\n\n error(\n getResponseMessage(\n responseData,\n errors\n ? errors.map(item => item.message).join('<br />')\n : t('PORTFOLIO.UNABLE_TO_ADD_TO_NEW_PORTFOLIO'),\n ),\n );\n }\n setIsPending(false);\n onClose();\n } else {\n success(t('PORTFOLIO.NEW_PORTFOLIO_CREATED'));\n if (onCreate && newPortfolio) {\n onCreate(newPortfolio.id, newPortfolio.name, newPortfolio.description);\n }\n onClose();\n }\n } catch (err) {\n const { networkError } = err as any;\n const { data: responseData, errors } = (networkError as AddToNewPortfolioResponse)?.result;\n\n error(\n getResponseMessage(\n responseData,\n errors\n ? errors.map(item => item.message).join('<br />')\n : t('PORTFOLIO.UNABLE_TO_ADD_TO_NEW_PORTFOLIO'),\n ),\n );\n }\n setIsPending(false);\n }\n };\n\n const initialValues: FormData = {\n name: portfolio?.name || '',\n description: portfolio?.description || '',\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth={false}>\n <DialogTitleWithClose onClose={onClose}>\n {portfolio?.id ? t('PORTFOLIO.UPDATE_PORTFOLIO') : t('PORTFOLIO.CREATE_PORTFOLIO')}\n </DialogTitleWithClose>\n <Formik\n initialValues={initialValues}\n onSubmit={handleSubmit}\n validationSchema={validationSchema}\n >\n {({ errors, touched }) => (\n <Form>\n <DialogContent className={classes.dialogContent}>\n <Field name=\"name\">\n {({ field }: FieldProps) => (\n <>\n <TextField\n {...field}\n className={classes.input}\n type=\"text\"\n label={t('PORTFOLIO.CREATE_PORTFOLIO_NAME')}\n error={\n (touched.name && !!errors.name) ||\n showError?.type === PortfolioErrorType.CREATE_NAME_CONFLICT\n }\n helperText={showError && t(showError.message)}\n onBlur={() => showError && setShowError(null)}\n fullWidth\n />\n <FormHelperText className={classes.helperText}>{errors.name}</FormHelperText>\n </>\n )}\n </Field>\n <Field name=\"description\">\n {({ field }: FieldProps) => (\n <TextField\n {...field}\n type=\"text\"\n label={t('PORTFOLIO.CREATE_PORTFOLIO_DESCRIPTION')}\n error={touched.description && !!errors.description}\n fullWidth\n multiline\n rows={10}\n />\n )}\n </Field>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('CANCEL')}\n </Button>\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" disabled={isPending}>\n {portfolio?.id ? t('UPDATE') : t('CREATE')}\n </Button>\n </DialogActions>\n </Form>\n )}\n </Formik>\n {isPending && <Loader cover />}\n </Dialog>\n );\n};\n","export const purchaseTypes = {\n ONE_TIME: 'ONE_TIME',\n};\n","export const generalInformationMock = [\n 'Entity rating',\n 'Public',\n 'Unsolicited',\n 'Without entity participation',\n];\n","import { EventCategory } from '../types/eventsTypes';\n\nexport const eventsCategories: Record<EventCategory, string> = {\n CREDIT_ANALYSIS: 'Credit analysis',\n ESG_ANALYSIS: 'ESG analysis',\n FUNDS_ANALYSIS: 'Funds analysis',\n};\n","import { orderTypes } from 'shared/constants/orderTypes';\n\nexport const GET_ENTITY = 'GET_ENTITY';\nexport const GET_ENTITY_SUCCESS = 'GET_ENTITY_SUCCESS';\nexport const GET_ENTITY_ERROR = 'GET_ENTITY_ERROR';\n\nexport const GET_ENTITY_DOCUMENTS = 'GET_ENTITY_DOCUMENTS';\nexport const GET_ENTITY_DOCUMENTS_SUCCESS = 'GET_ENTITY_DOCUMENTS_SUCCESS';\nexport const GET_ENTITY_DOCUMENTS_ERROR = 'GET_ENTITY_DOCUMENTS_ERROR';\n\nexport const GET_ENTITY_PRODUCTS = 'GET_ENTITY_PRODUCTS';\nexport const GET_ENTITY_PRODUCTS_SUCCESS = 'GET_ENTITY_PRODUCTS_SUCCESS';\nexport const GET_ENTITY_PRODUCTS_ERROR = 'GET_ENTITY_PRODUCTS_ERROR';\n\nexport const GET_ENTITY_INSTRUMENTS = 'GET_ENTITY_INSTRUMENTS';\nexport const GET_ENTITY_INSTRUMENTS_SUCCESS = 'GET_ENTITY_INSTRUMENTS_SUCCESS';\nexport const GET_ENTITY_INSTRUMENTS_ERROR = 'GET_ENTITY_INSTRUMENTS_ERROR';\n\nexport const GET_ENTITY_RATING_NEWS = 'GET_ENTITY_RATING_NEWS';\nexport const GET_ENTITY_RATING_NEWS_SUCCESS = 'GET_ENTITY_RATING_NEWS_SUCCESS';\nexport const GET_ENTITY_RATING_NEWS_ERROR = 'GET_ENTITY_RATING_NEWS_ERROR';\n\nexport const GET_ENTITY_RESEARCH = 'GET_ENTITY_RESEARCH';\nexport const GET_ENTITY_RESEARCH_SUCCESS = 'GET_ENTITY_RESEARCH_SUCCESS';\nexport const GET_ENTITY_RESEARCH_ERROR = 'GET_ENTITY_RESEARCH_ERROR';\n\nexport const REQUEST_ENTITY_RATING = 'REQUEST_ENTITY_RATING';\nexport const REQUEST_ENTITY_RATING_SUCCESS = 'REQUEST_ENTITY_RATING_SUCCESS';\nexport const REQUEST_ENTITY_RATING_ERROR = 'REQUEST_ENTITY_RATING_ERROR';\n\nexport const REQUEST_ENTITY_RATING_AND_FETCH_DATA = 'REQUEST_ENTITY_RATING_AND_FETCH_DATA';\nexport const REQUEST_ENTITY_RATING_AND_FETCH_DATA_SUCCESS =\n 'REQUEST_ENTITY_RATING_AND_FETCH_DATA_SUCCESS';\nexport const REQUEST_ENTITY_RATING_AND_FETCH_DATA_ERROR =\n 'REQUEST_ENTITY_RATING_AND_FETCH_DATA_ERROR';\n\nexport const REQUEST_SIG_ENTITY_RATING = 'REQUEST_SIG_ENTITY_RATING';\nexport const REQUEST_SIG_ENTITY_RATING_SUCCESS = 'REQUEST_SIG_ENTITY_RATING_SUCCESS';\nexport const REQUEST_SIG_ENTITY_RATING_ERROR = 'REQUEST_SIG_ENTITY_RATING_ERROR';\n\nexport const REFRESH_ENTITY = 'REFRESH_ENTITY';\nexport const REQUEST_CONFIRMATION_CHANGED = 'REQUEST_CONFIRMATION_CHANGED';\n\nexport const SET_ENTITY_CREDIT_RATING_VISIBILITY = 'SET_ENTITY_CREDIT_RATING_VISIBILITY';\n\nexport const getEntityAction = ({ id }) => ({\n type: GET_ENTITY,\n payload: {\n id,\n },\n});\n\nexport const getEntityDocumentsAction = ({ entityId }) => ({\n type: GET_ENTITY_DOCUMENTS,\n payload: {\n entityId,\n },\n});\n\nexport const getEntityProductsAction = ({ entityId }) => ({\n type: GET_ENTITY_PRODUCTS,\n payload: {\n entityId,\n },\n});\n\nexport const getEntityInstrumentsAction = ({ entityId, page, limit, sort, filter }) => ({\n type: GET_ENTITY_INSTRUMENTS,\n payload: {\n entityId,\n page,\n limit,\n sort,\n filter,\n },\n});\n\nexport const getEntityRatingNewsAction = ({ entityId, query, page, limit }) => ({\n type: GET_ENTITY_RATING_NEWS,\n payload: {\n entityId,\n query,\n type: 'ENTITY_RATING_NEWS',\n page,\n limit,\n },\n});\n\nexport const getEntityResearchAction = ({\n entityId,\n query,\n page,\n limit,\n settings,\n industryCode,\n}) => ({\n type: GET_ENTITY_RESEARCH,\n payload: {\n entityId,\n query,\n type: 'INDUSTRY_RESEARCH',\n page,\n limit,\n settings,\n industryCode,\n },\n});\n\nexport const requestEntityRatingAction = ({ id, level }) => ({\n type: REQUEST_ENTITY_RATING,\n payload: {\n id,\n type: orderTypes.ENTITY,\n frequency: 0,\n productCategory: level,\n purchaseType: 'ONE_TIME',\n },\n});\n\nexport const requestEntityRatingAndFetchDataAction = ({ id, level }) => ({\n type: REQUEST_ENTITY_RATING_AND_FETCH_DATA,\n payload: {\n id,\n type: orderTypes.ENTITY,\n frequency: 0,\n level,\n purchaseType: 'ONE_TIME',\n },\n});\n\nexport const requestSigEntityRatingAction = ({\n ids,\n organisationId,\n userId,\n selectAll = false,\n}) => ({\n type: REQUEST_SIG_ENTITY_RATING,\n payload: {\n ids: !selectAll ? ids : undefined,\n type: orderTypes.SIG_ENTITY,\n organisationId,\n userId,\n selectAll,\n },\n});\n\nexport const refreshEntityAction = () => ({\n type: REFRESH_ENTITY,\n});\n\nexport const requestConfirmationChangedAction = ({ confirmed, autoConfirm = false }) => ({\n type: REQUEST_CONFIRMATION_CHANGED,\n payload: {\n confirmed,\n autoConfirm,\n },\n});\n\nexport const setEntityCreditRatingVisibility = ({ isVisible }) => ({\n type: SET_ENTITY_CREDIT_RATING_VISIBILITY,\n payload: {\n isVisible,\n },\n});\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport { Grid, Typography } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport CheckIcon from '@mui/icons-material/Check';\nimport CloseIcon from '@mui/icons-material/Close';\nimport { red, green, grey } from '@mui/material/colors';\n\nconst useProductIndicatorStyles = makeStyles(theme => ({\n root: {\n fontSize: 16,\n },\n icon: {\n fontSize: 20,\n width: 25,\n height: 25,\n boxShadow: '0 2px 2px 2px rgba(155, 155, 155, 0.3)',\n borderRadius: '50%',\n padding: 5,\n marginRight: 10,\n },\n iconAvailable: {\n color: green[500],\n },\n iconUnavailable: {\n color: red[500],\n },\n iconUpgrade: {\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: theme.palette.primary.main,\n color: theme.palette.primary.main,\n },\n name: {\n fontSize: 18,\n fontWeight: 'bold',\n },\n nameUnavailable: {\n color: grey[500],\n fontSize: 14,\n marginTop: 3,\n },\n}));\n\nconst ShopProductIndicator = ({ product }) => {\n const classes = useProductIndicatorStyles();\n\n const IconComponent = product.availability ? CheckIcon : CloseIcon;\n\n return (\n <Grid container className={classes.root}>\n <Grid item>\n <IconComponent\n className={clsx({\n [classes.icon]: true,\n [classes.iconAvailable]: product.availability,\n [classes.iconUnavailable]: !product.availability,\n [classes.iconUpgrade]: product.upgrade,\n })}\n />\n </Grid>\n <Grid item>\n <Typography\n className={clsx({\n [classes.name]: true,\n [classes.nameUnavailable]: !product.availability,\n })}\n >\n {product.type}\n </Typography>\n </Grid>\n </Grid>\n );\n};\n\nShopProductIndicator.propTypes = {\n product: PropTypes.shape({\n type: PropTypes.string.isRequired,\n availability: PropTypes.bool.isRequired,\n upgrade: PropTypes.bool.isRequired,\n }).isRequired,\n};\n\nexport { ShopProductIndicator };\n","export const shopProductUnits = {\n 'Analytical data': 'data sets',\n Review: 'reviews',\n Assessment: 'assessments',\n Rating: 'ratings',\n Research: 'publications',\n 'Access to analysts': 'hours',\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { isNil, isNull } from 'lodash';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { Collapse, Box, Typography, Grid, Button, Divider } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { grey } from '@mui/material/colors';\nimport { useNavigate } from 'react-router-dom';\n\nimport { sanitizeHtml, formatCurrency } from 'shared/functions';\nimport { TabsPanel, InfoTooltip } from 'ui';\nimport { MessageModal } from 'ui/Modals';\nimport { SummaryCardDocuments } from 'modules/common/SummaryCard';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nimport { shopProductUnits } from '../../shared/constants/shopProductUnits';\nimport { shopViews } from '../../shared/constants/shopViews';\nimport { getProductsByIds, getProductsProperties } from '../../selectors/shopSelectors';\nimport { sendMessageToSales } from '../../services';\nimport {\n addShopProductsToBasketAction,\n startShopProductFreeSubscriptionAction,\n} from '../../store/shopActions';\nimport { ShopProductFreeSubscriptionModal } from './ShopProductFreeSubscriptionModal';\n\nconst useStyle = makeStyles((theme) => ({\n stats: {\n textAlign: 'center',\n },\n statValue: {\n color: theme.palette.primary.main,\n },\n statLabel: {\n fontWeight: 'bold',\n },\n footer: {\n borderWidth: '5px 0 0 0',\n borderStyle: 'solid',\n borderColor: grey[300],\n },\n checkoutButton: {\n backgroundColor: '#ff8900',\n width: 160,\n height: 45,\n marginLeft: 15,\n },\n button: {\n height: 45,\n },\n price: {\n fontWeight: 500,\n },\n sidebar: {\n borderWidth: '0 0 0 3px',\n borderStyle: 'solid',\n borderColor: grey[300],\n },\n container: {\n marginTop: theme.spacing(4),\n },\n subtitle: {\n color: theme.palette.primary.main,\n },\n divider: {\n marginTop: 5,\n backgroundColor: theme.palette.text.primary,\n },\n detailsInfo: {\n fontSize: 16,\n fontWeight: 500,\n marginBottom: theme.spacing(2),\n },\n detailsInfoList: {\n textAlign: 'right',\n },\n description: {\n fontSize: 16,\n },\n tooltip: {\n position: 'relative',\n top: 2,\n marginRight: 5,\n },\n documents: {\n '& p': {\n fontWeight: 500,\n fontSize: 16,\n },\n '& button': {\n fontSize: 16,\n color: theme.palette.primary.main,\n },\n },\n subscriptionButton: {\n height: 45,\n marginLeft: 10,\n },\n}));\n\nconst ShopProductDetails = ({ product, expanded, preview }) => {\n const { t } = useTranslation();\n const classes = useStyle();\n const dispatch = useDispatch();\n const navigate = useNavigate();\n\n const { data: properties } = useSelector(getProductsProperties);\n const productIds = product.packageProducts ? product.packageProducts.map(({ id }) => id) : [];\n const products = useSelector(getProductsByIds(productIds));\n\n const productsById = products.reduce(\n (prodsById, prod) => ({ ...prodsById, [prod.id]: prod }),\n {},\n );\n\n const [messageModalOpen, setMessageModalOpen] = useState(false);\n const toggleMessageModal = () => setMessageModalOpen(!messageModalOpen);\n\n const [isFreeSubscriptionModalOpen, setIsFreeSubscriptionModalOpen] = React.useState(false);\n\n const toggleFreeSubscriptionModal = () => {\n setIsFreeSubscriptionModalOpen((isOpen) => !isOpen);\n };\n\n const tabs = [{ id: product.id, label: t('Overview') }];\n\n const activeTab = tabs[0].label;\n\n const documents = product.documents\n ? product.documents.map(({ id, name }) => ({\n title: name.split('.')[0],\n path: `/shop/file-download/${id}/`,\n name,\n }))\n : [];\n\n const getPrice = () => {\n const pricing = (product.pricing ? product.pricing : []).find(({ active }) => active);\n\n return pricing ? pricing.price : null;\n };\n\n const getPriceText = () => {\n const price = getPrice();\n\n if (isNull(price)) {\n return t('On request');\n }\n\n return price === 0 ? t('Free of charge') : formatCurrency(price, 'EUR');\n };\n\n const getActivationFee = () => {\n const pricing = (product.pricing ? product.pricing : []).find(({ active }) => active);\n\n return pricing ? pricing.activationFee : null;\n };\n\n const getDescription = (id, index) => {\n if (index === 0) return sanitizeHtml(product.description);\n\n return productsById[id] ? sanitizeHtml(productsById[id].description) : null;\n };\n\n const getAmountLabel = (amount) => {\n const [productLine] = product.productLines;\n const productUnit = shopProductUnits[productLine];\n\n return amount && productUnit && `${amount} ${productUnit}`;\n };\n\n const getTrialPeriod = (period) => {\n if (!period) return null;\n\n const weeks = Math.floor(period / 7);\n const days = period % 7;\n\n const weeksLabel = t(`${weeks} week${weeks === 1 ? '' : 's'}`);\n const daysLabel = t(`${days} day${days === 1 ? '' : 's'}`);\n\n if (weeks && days) return `${weeksLabel} ${daysLabel}`;\n\n return weeks ? weeksLabel : daysLabel;\n };\n\n const sendMessage = (messageData) => {\n sendMessageToSales(messageData)\n .then(() => {\n dispatch(\n addNotificationAction({\n message: t('Message sent successfully'),\n variant: 'success',\n }),\n );\n })\n .catch(() => {\n dispatch(\n addNotificationAction({\n message: t('Failed to send a message'),\n variant: 'error',\n }),\n );\n });\n };\n\n const addToBasket = () => {\n dispatch(addShopProductsToBasketAction({ ids: [product.id] }));\n\n navigate({\n search: `?tab=${shopViews.basket}`,\n });\n };\n\n const activateFreeSubscription = () => {\n dispatch(startShopProductFreeSubscriptionAction({ id: product.id }));\n };\n\n const price = getPrice();\n const toolType = properties.tools.find(({ id }) => id === product.toolType);\n const amount = getAmountLabel(product.amount);\n const trialAmount = getAmountLabel(product.trialAmount);\n const trialPeriod = getTrialPeriod(product.trialPeriod);\n\n const purchasedButton = (\n <Button variant=\"outlined\" color=\"primary\" className={classes.subscriptionButton} disabled>\n {t('Subscribed')}\n </Button>\n );\n\n const addToBasketButton =\n price === 0 ? (\n <>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n className={classes.subscriptionButton}\n onClick={toggleFreeSubscriptionModal}\n disabled={preview}\n >\n {t('Get started')}\n </Button>\n {!preview && (\n <ShopProductFreeSubscriptionModal\n open={isFreeSubscriptionModalOpen}\n onConfirm={activateFreeSubscription}\n onClose={toggleFreeSubscriptionModal}\n data={product}\n />\n )}\n </>\n ) : (\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.checkoutButton}\n disabled={preview}\n onClick={addToBasket}\n >\n {t('Add to basket')}\n </Button>\n );\n\n return (\n <Collapse in={expanded || preview} timeout=\"auto\" unmountOnExit>\n <Grid container spacing={2} className={classes.container}>\n <Grid item xs={8}>\n <Box p={4} pt={0}>\n <TabsPanel active={activeTab}>\n {tabs.map(({ id, label }, index) => (\n <Box p={2} pt={4} label={label} value={label} key={id}>\n <Box className={classes.description}>{getDescription(id, index)}</Box>\n </Box>\n ))}\n </TabsPanel>\n </Box>\n </Grid>\n <Grid item xs={4} className={classes.sidebar}>\n <Box px={4}>\n <Typography variant=\"h6\" className={classes.subtitle}>\n {t('Product details')}\n </Typography>\n <Divider className={classes.divider} />\n <Box mt={2}>\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Category:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n {product.categories.map((category) => (\n <Box key={category}>{category}</Box>\n ))}\n </Grid>\n </Grid>\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>\n <InfoTooltip\n title={t(\n 'The ongoing fee is charged regularly. The interval is defined by the contract term.',\n )}\n iconClassName={classes.tooltip}\n />\n {t('Ongoing fee:')}\n </Grid>\n <Grid item>{price === 0 ? t('Free of charge') : formatCurrency(price, 'EUR')}</Grid>\n </Grid>\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>\n <InfoTooltip\n title={t(\n 'The activation fee is a one-time fee charged at the beginning of the contract term. The fee covers Scope’s costs of setting up the account and subscriptions.',\n )}\n iconClassName={classes.tooltip}\n />\n {t('Activation fee:')}\n </Grid>\n <Grid item>\n {getActivationFee() === 0\n ? t('Free of charge')\n : formatCurrency(getActivationFee(), 'EUR')}\n </Grid>\n </Grid>\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>\n <InfoTooltip\n title={t('The contract term defines the duration of the subscription.')}\n iconClassName={classes.tooltip}\n />\n {t('Contract term:')}\n </Grid>\n <Grid item>{product.validity}</Grid>\n </Grid>\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>\n <InfoTooltip\n title={t(\n 'The notice period describes the interval during which subscriptions can be cancelled latest. It always refers to the actual end of the subscription period.',\n )}\n iconClassName={classes.tooltip}\n />\n {t('Notice period:')}\n </Grid>\n <Grid item>{product.cancelPeriod}</Grid>\n </Grid>\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Source:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n {product.sources.map((source) => (\n <Box key={source}>{source}</Box>\n ))}\n </Grid>\n </Grid>\n {toolType && (\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Tool type:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n <Box>{toolType.name}</Box>\n </Grid>\n </Grid>\n )}\n {!isNil(amount) && (\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Subscribed amount:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n <Box>{amount}</Box>\n </Grid>\n </Grid>\n )}\n {!isNil(trialAmount) && (\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Free trial amount:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n <Box>{trialAmount}</Box>\n </Grid>\n </Grid>\n )}\n {!isNil(trialPeriod) && (\n <Grid container justifyContent=\"space-between\" className={classes.detailsInfo}>\n <Grid item>{t('Free trial term:')}</Grid>\n <Grid item className={classes.detailsInfoList}>\n <Box>{trialPeriod}</Box>\n </Grid>\n </Grid>\n )}\n </Box>\n </Box>\n <Box px={4}>\n <Typography variant=\"h6\" className={classes.subtitle}>\n {t('Documents')}\n </Typography>\n <Divider className={classes.divider} />\n <Box mt={2}>\n <SummaryCardDocuments\n documentTypes={documents}\n className={classes.documents}\n disabled={preview}\n />\n </Box>\n </Box>\n </Grid>\n </Grid>\n <Box p={4} mt={4} className={classes.footer} hidden={preview}>\n <Grid container justifyContent=\"space-between\" alignItems=\"center\">\n <Grid item>\n <Typography variant=\"h5\" className={classes.price}>\n {getPriceText()}\n </Typography>\n </Grid>\n <Grid item>\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={classes.button}\n onClick={toggleMessageModal}\n disabled={preview}\n >\n {t('Contact Sales')}\n </Button>\n {!isNil(price) && !product.purchased && addToBasketButton}\n {product.purchased && purchasedButton}\n </Grid>\n </Grid>\n </Box>\n <MessageModal\n title={t('Contact Sales')}\n open={messageModalOpen}\n onClose={toggleMessageModal}\n onSendMessage={sendMessage}\n />\n </Collapse>\n );\n};\n\nShopProductDetails.defaultProps = {\n preview: false,\n};\n\nShopProductDetails.propTypes = {\n expanded: PropTypes.bool.isRequired,\n product: PropTypes.object.isRequired,\n preview: PropTypes.bool,\n};\n\nexport { ShopProductDetails };\n","import React, { useState, useRef, useEffect } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Typography, Paper, Grid, Button } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { grey } from '@mui/material/colors';\nimport FlagIcon from '@mui/icons-material/Flag';\nimport clsx from 'clsx';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport qs from 'qs';\nimport isNull from 'lodash/isNull';\n\nimport { Loader } from 'ui';\nimport { FULL_API_URL } from 'utils';\nimport { formatDate, scrollToRef, formatCurrency } from 'shared/functions';\n\nimport { isNil } from 'lodash';\nimport { subscriptionStatuses } from '../../shared/constants/shopSubscriptionStatuses';\nimport { shopProductsCategories } from '../../shared/constants/shopProductsCategories';\nimport { shopViews } from '../../shared/constants/shopViews';\n\nimport {\n changeShopProductsFavoriteStatusAction,\n addShopProductsToBasketAction,\n startShopProductFreeTrialAction,\n startShopProductFreeSubscriptionAction,\n} from '../../store/shopActions';\nimport { ShopProductIndicator } from './ShopProductIndicator';\nimport { ShopProductDetails } from './ShopProductDetails';\nimport { ShopProductTrialModal } from './ShopProductTrialModal';\nimport { ShopProductFreeSubscriptionModal } from './ShopProductFreeSubscriptionModal';\n\nconst useStyles = makeStyles((theme) => ({\n name: {\n fontSize: 28,\n backgroundColor: grey[600],\n color: theme.palette.primary.contrastText,\n borderRadius: '0 4px 0 0',\n },\n container: {\n height: 400,\n },\n label: {\n color: theme.palette.primary.main,\n fontSize: 14,\n },\n infoContainer: {\n height: 336,\n paddingLeft: theme.spacing(8),\n },\n info: {\n marginTop: theme.spacing(3),\n marginBottom: theme.spacing(3),\n\n '&:nth-child(odd)': {\n paddingRight: 10,\n },\n\n '&:nth-child(even)': {\n paddingLeft: 20,\n },\n },\n value: {\n fontWeight: 'bold',\n fontSize: 18,\n },\n labelBar: {\n backgroundColor: grey[400],\n height: '100%',\n borderRadius: '4px 0 0 4px',\n color: theme.palette.primary.contrastText,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'space-between',\n textAlign: 'center',\n fontWeight: 'bold',\n fontSize: 24,\n },\n imageBar: {\n height: 400,\n },\n image: {\n width: '100%',\n height: '100%',\n },\n thirdPartyImage: {\n maxWidth: '50%',\n maxHeight: '50%',\n },\n imageDivider: {\n backgroundColor: theme.palette.text.primary,\n width: 250,\n margin: '30px auto',\n },\n products: {\n display: 'flex',\n height: 336,\n borderStyle: 'solid',\n borderWidth: '0 5px 0 5px',\n borderColor: grey[200],\n paddingTop: 15,\n paddingBottom: 15,\n },\n product: {\n marginTop: 15,\n '&:first-of-type': {\n marginTop: 0,\n },\n },\n actionContainer: {\n height: '100%',\n },\n priceBox: {\n width: 160,\n borderStyle: 'dashed',\n borderColor: grey[600],\n borderWidth: '0 0 1px 0',\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'center',\n flexDirection: 'column',\n },\n price: {\n fontSize: 28,\n fontWeight: 'bold',\n },\n pricePeriod: {\n fontSize: 12,\n fontWeight: 'bold',\n },\n buttonContainer: {\n textAlign: 'center',\n },\n subscriptionButton: {\n width: 160,\n height: 45,\n marginBottom: 10,\n },\n subscriptionButtonActive: {\n backgroundColor: '#ff8900',\n },\n moreInfoButton: {\n height: 45,\n marginBottom: 10,\n },\n favoriteButton: {\n width: 45,\n height: 45,\n padding: 0,\n minWidth: 'auto',\n marginLeft: 6,\n marginBottom: 10,\n },\n marketLabel: {\n maxWidth: 250,\n fontSize: 20,\n fontWeight: 'bold',\n },\n trialText: {\n display: 'block',\n maxWidth: 160,\n fontWeight: 'bold',\n textAlign: 'center',\n padding: 0,\n },\n freeText: {\n fontSize: 22,\n },\n hiddenCheckoutButton: {\n visibility: 'hidden',\n },\n loader: {\n display: 'inline-block',\n position: 'relative',\n margin: '0 10px',\n top: 5,\n },\n esgAnalysis: { backgroundColor: theme.palette.custom.esgAnalysisEvents },\n fundAnalysis: { backgroundColor: theme.palette.custom.fundAnalysisEvents },\n creditAnalysis: { backgroundColor: theme.palette.custom.creditAnalysisEvents },\n}));\n\nconst ShopProduct = ({ data, preview, collapsed }) => {\n const classes = useStyles();\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const navigate = useNavigate();\n const location = useLocation();\n const productRef = useRef(null);\n\n const [isFreeTrialModalOpen, setIsFreeTrialModalOpen] = useState(false);\n\n const toggleFreeTrialModal = () => {\n setIsFreeTrialModalOpen((isOpen) => !isOpen);\n };\n\n const [isFreeSubscriptionModalOpen, setIsFreeSubscriptionModalOpen] = useState(false);\n\n const toggleFreeSubscriptionModal = () => {\n setIsFreeSubscriptionModalOpen((isOpen) => !isOpen);\n };\n\n const [isAddingToBasket, setIsAddingToBasket] = useState(false);\n\n const [isFavoriteStatusLoading, setIsFavoriteStatusLoading] = useState(false);\n\n const { favorites } = useSelector(({ shop }) => shop.history);\n\n const [showDetails, setShowDetails] = useState(collapsed);\n\n const { productId: scrollToProductId, freeTrial: freeTrialOpen } = qs.parse(location.search, {\n ignoreQueryPrefix: true,\n });\n\n useEffect(() => {\n if (data && scrollToProductId && Number(scrollToProductId) === data.id) {\n setIsFreeTrialModalOpen(!!freeTrialOpen);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [freeTrialOpen, data, scrollToProductId]);\n\n const isEsgAnalysis =\n data.categories.length === 1 && data.categories[0] === shopProductsCategories.esgAnalysis;\n const isFundAnalysis =\n data.categories.length === 1 && data.categories[0] === shopProductsCategories.fundAnalysis;\n const isCreditAnalysis =\n data.categories.length === 1 && data.categories[0] === shopProductsCategories.creditAnalysis;\n\n const isFavorite = favorites.includes(data.id);\n\n const scrollToProduct = () => {\n scrollToRef(productRef);\n };\n\n const changeFavoriteStatus = () => {\n setIsFavoriteStatusLoading(true);\n\n dispatch(\n changeShopProductsFavoriteStatusAction({\n ids: [data.id],\n isFavorite: !favorites.includes(data.id),\n }),\n );\n };\n\n const addToBasket = () => {\n setIsAddingToBasket(true);\n\n dispatch(addShopProductsToBasketAction({ ids: [data.id] }));\n\n navigate({\n search: `?tab=${shopViews.basket}`,\n });\n };\n\n const getPrice = () => {\n const pricing = (data.pricing ? data.pricing : []).find(({ active }) => active);\n\n return pricing ? pricing.price : null;\n };\n\n const getPriceText = () => {\n const price = getPrice();\n\n if (isNull(price)) {\n return t('On request');\n }\n\n return price === 0 ? t('Free of charge') : formatCurrency(price, 'EUR');\n };\n\n const toggleDetails = () => {\n setShowDetails(!showDetails);\n };\n\n const getLogoUrl = (logo) => {\n if (!logo) {\n return '';\n }\n return logo.startsWith('blob') ? logo : `${FULL_API_URL}${data.logo}`;\n };\n\n const activateFreeTier = () => {\n dispatch(startShopProductFreeTrialAction({ id: data.id }));\n };\n\n const activateFreeSubscription = () => {\n dispatch(startShopProductFreeSubscriptionAction({ id: data.id }));\n };\n\n useEffect(() => {\n let timer = null;\n\n if (showDetails) {\n timer = setTimeout(() => scrollToProduct(), 300);\n }\n\n return () => {\n if (timer) {\n clearTimeout(timer);\n }\n };\n }, [showDetails]);\n\n useEffect(() => {\n if (scrollToProductId && Number(scrollToProductId) === data.id && productRef.current) {\n setShowDetails(true);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [productRef.current]);\n\n useEffect(() => {\n setIsFavoriteStatusLoading(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isFavorite]);\n\n const price = getPrice();\n\n const isCheckoutDisabled = Boolean(data.purchased || preview || data.cancelled);\n\n const messageByStatus = {\n [subscriptionStatuses.ACTIVE_TRIAL]: t('Free trial active'),\n [subscriptionStatuses.ACTIVE_CANCELLED]:\n t('Cancelled. Subscription valid until: ') + formatDate(data.validUntil),\n [subscriptionStatuses.ENDED_CANCELLED]: t('Subscription has ended'),\n [subscriptionStatuses.ENDED_TRIAL]: t('Free trial has ended'),\n [subscriptionStatuses.ACTIVE_TRIAL]: t('Free trial active'),\n };\n\n const logoUrl = getLogoUrl(data.logo);\n\n const getIndustryName = (product) => {\n if (Array.isArray(product.industries)) {\n return product.industries.length\n ? product.industries.map(({ name }) => name).join(', ')\n : t('SUBSCRIPTIONS.ALL');\n }\n return data.industries;\n };\n\n const showSegments = (segments) => {\n if (Array.isArray(segments)) {\n return segments.length > 1 ? t('SUBSCRIPTIONS.VARIOUS') : segments[0];\n }\n return segments;\n };\n\n return (\n <Box mb={6} ref={productRef}>\n <Paper elevation={3}>\n <Grid container>\n <Grid item xs={3} className={classes.container}>\n <Grid\n container\n className={clsx({\n [classes.labelBar]: true,\n [classes.esgAnalysis]: isEsgAnalysis,\n [classes.fundAnalysis]: isFundAnalysis,\n [classes.creditAnalysis]: isCreditAnalysis,\n })}\n >\n <Grid item>\n <Box className={classes.imageBar}>\n {logoUrl && <img alt={t('Logo')} src={logoUrl} className={classes.image} />}\n </Box>\n </Grid>\n <Grid\n item\n className={clsx({\n [classes.esgAnalysis]: isEsgAnalysis,\n [classes.fundAnalysis]: isFundAnalysis,\n [classes.creditAnalysis]: isCreditAnalysis,\n })}\n >\n {data.label}\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={9}>\n <Grid container>\n <Grid item xs={12}>\n <Box\n p={2}\n className={clsx({\n [classes.name]: true,\n [classes.esgAnalysis]: isEsgAnalysis,\n [classes.fundAnalysis]: isFundAnalysis,\n [classes.creditAnalysis]: isCreditAnalysis,\n })}\n >\n <Typography variant=\"h5\">{data.name}</Typography>\n </Box>\n </Grid>\n <Grid item xs={5}>\n <Grid\n container\n alignItems=\"center\"\n justifyContent=\"center\"\n className={classes.infoContainer}\n >\n <Grid item>\n <Grid container>\n <Grid item xs={6} className={classes.info}>\n <Typography className={classes.label}>\n {t('SUBSCRIPTIONS.CATEGORY')}\n </Typography>\n <Typography className={classes.value}>\n {data.categories.join(', ')}\n </Typography>\n </Grid>\n <Grid item xs={6} className={classes.info}>\n <Typography className={classes.label}>\n {t('SUBSCRIPTIONS.REGION')}\n </Typography>\n <Typography className={classes.value}>\n {data.regions?.length > 0\n ? data.regions.join(', ')\n : [t('SUBSCRIPTIONS.GLOBAL')].join(', ')}\n </Typography>\n </Grid>\n <Grid item xs={6} className={classes.info}>\n <Typography className={classes.label}>\n {t('SUBSCRIPTIONS.SEGMENT')}\n </Typography>\n <Typography className={classes.value}>\n {data.segments?.length > 0\n ? showSegments(data.segments)\n : [t('SUBSCRIPTIONS.ALL')].join(', ')}\n </Typography>\n </Grid>\n <Grid item xs={6} className={classes.info}>\n <Typography className={classes.label}>\n {t('SUBSCRIPTIONS.INDUSTRY')}\n </Typography>\n <Typography className={classes.value}>\n {data.industries?.length > 1\n ? t('SUBSCRIPTIONS.VARIOUS')\n : getIndustryName(data)}\n </Typography>\n </Grid>\n <Grid item xs={12} className={classes.info}>\n <Typography className={classes.marketLabel}>{data.marketLabel}</Typography>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={4}>\n <Box pl={6} className={classes.products}>\n <Grid container>\n {(data.products || []).map((product) => (\n <Grid item xs={12} className={classes.product} key={product.type}>\n <ShopProductIndicator product={product} />\n </Grid>\n ))}\n </Grid>\n </Box>\n </Grid>\n <Grid item xs={3}>\n <Grid\n container\n justifyContent=\"space-between\"\n alignItems=\"center\"\n direction=\"column\"\n className={classes.actionContainer}\n >\n <Grid item>\n <Box className={classes.priceBox} pb={2} mt={2}>\n <Typography\n component=\"span\"\n className={clsx({\n [classes.price]: true,\n [classes.freeText]: price === 0,\n })}\n >\n {getPriceText()}\n </Typography>\n {data.validity && price !== 0 && !isNull(price) && (\n <Typography\n component=\"span\"\n variant=\"body2\"\n className={classes.pricePeriod}\n >\n {data.validity}\n </Typography>\n )}\n </Box>\n <Box mt={2} mb={1}>\n <Typography component=\"span\" className={classes.trialText}>\n {data.status === subscriptionStatuses.NO_SUBSCRIPTION && price === 0\n ? t('Start your free subscription here')\n : messageByStatus[data.status]}\n </Typography>\n </Box>\n {![subscriptionStatuses.ACTIVE, subscriptionStatuses.ACTIVE_TRIAL].includes(\n data.status,\n ) &&\n !data.cancelled &&\n data.isFreeTrial &&\n !data.trialStarted && (\n <Box mt={2} mb={1}>\n <Typography component=\"span\" className={classes.trialText}>\n {t('Get your free {{period}} weeks trial here', {\n period: data.trialPeriod / 7,\n })}\n </Typography>\n </Box>\n )}\n </Grid>\n <Grid item>\n <Box className={classes.buttonContainer}>\n {data.isFreeTrial && !data.trialStarted && (\n <>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n className={classes.subscriptionButton}\n onClick={toggleFreeTrialModal}\n disabled={data.purchased || preview}\n >\n {data.purchased\n ? t('SUBSCRIPTIONS.SUBSCRIBED')\n : t('SUBSCRIPTIONS.GET_FREE_TRIAL')}\n </Button>\n <ShopProductTrialModal\n open={isFreeTrialModalOpen}\n onConfirm={activateFreeTier}\n onClose={toggleFreeTrialModal}\n data={data}\n />\n </>\n )}\n {price === 0 && (\n <>\n <Button\n variant=\"outlined\"\n color=\"primary\"\n className={classes.subscriptionButton}\n onClick={toggleFreeSubscriptionModal}\n disabled={data.purchased || preview}\n >\n {data.purchased\n ? t('SUBSCRIPTIONS.SUBSCRIBED')\n : t('SUBSCRIPTIONS.GET_STARTED')}\n </Button>\n {!preview && (\n <ShopProductFreeSubscriptionModal\n open={isFreeSubscriptionModalOpen}\n onConfirm={activateFreeSubscription}\n onClose={toggleFreeSubscriptionModal}\n data={data}\n />\n )}\n </>\n )}\n <Button\n variant={showDetails ? 'contained' : 'outlined'}\n color=\"primary\"\n className={classes.moreInfoButton}\n onClick={toggleDetails}\n disabled={preview}\n >\n {t('SUBSCRIPTIONS.MORE_INFO')}\n </Button>\n {isFavoriteStatusLoading ? (\n <Loader size={30} classes={classes.loader} />\n ) : (\n <Button\n variant={isFavorite ? 'contained' : 'outlined'}\n color=\"primary\"\n className={classes.favoriteButton}\n onClick={changeFavoriteStatus}\n disabled={preview}\n >\n <FlagIcon />\n </Button>\n )}\n\n <Button\n variant=\"contained\"\n color=\"primary\"\n className={clsx({\n [classes.subscriptionButton]: true,\n [classes.subscriptionButtonActive]: true,\n [classes.hiddenCheckoutButton]:\n price === 0 || (isNil(price) && !data.purchased),\n })}\n onClick={addToBasket}\n disabled={isCheckoutDisabled || isAddingToBasket}\n >\n {data.purchased\n ? t('SUBSCRIPTIONS.SUBSCRIBED')\n : t('SUBSCRIPTIONS.ADD_TO_BASKET')}\n </Button>\n </Box>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n </Grid>\n <ShopProductDetails product={data} expanded={showDetails} preview={preview} />\n </Paper>\n </Box>\n );\n};\n\nShopProduct.defaultProps = {\n preview: false,\n collapsed: false,\n};\n\nShopProduct.propTypes = {\n data: PropTypes.shape({\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n categories: PropTypes.arrayOf(PropTypes.string).isRequired,\n regions: PropTypes.arrayOf(PropTypes.string).isRequired,\n segments: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n }),\n ).isRequired,\n industries: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n }),\n ).isRequired,\n sources: PropTypes.arrayOf(PropTypes.string).isRequired,\n amount: PropTypes.number,\n validity: PropTypes.string,\n products: PropTypes.arrayOf(\n PropTypes.shape({\n type: PropTypes.string.isRequired,\n availability: PropTypes.bool.isRequired,\n upgrade: PropTypes.bool.isRequired,\n }),\n ).isRequired,\n subscribedUntil: PropTypes.string,\n pricing: PropTypes.arrayOf(\n PropTypes.shape({\n price: PropTypes.number.isRequired,\n activationFee: PropTypes.number.isRequired,\n tier: PropTypes.number,\n active: PropTypes.bool,\n }),\n ),\n label: PropTypes.string,\n additionalInfo: PropTypes.string,\n purchased: PropTypes.bool.isRequired,\n logo: PropTypes.string,\n sourceLogo: PropTypes.string,\n isFreeTrial: PropTypes.bool,\n trialAmount: PropTypes.number,\n trialStarted: PropTypes.bool,\n marketLabel: PropTypes.string,\n trialPeriod: PropTypes.number,\n cancelled: PropTypes.oneOfType([PropTypes.bool, PropTypes.string]),\n validUntil: PropTypes.string,\n status: PropTypes.string.isRequired,\n }).isRequired,\n preview: PropTypes.bool,\n collapsed: PropTypes.bool,\n};\n\nexport { ShopProduct };\n","export const licencesTypes = {\n ADMIN_MODULE: 'ADMIN_MODULE',\n INVESTORHUB_MODULE: 'INVESTORHUB_MODULE',\n RISKANALYSIS_MODULE: 'RISKANALYSIS_MODULE',\n SCOPEEXPLORER_MODULE: 'SCOPEEXPLORER_MODULE',\n ANALYTICALOPERATIONS_MODULE: 'ANALYTICALOPERATIONS_MODULE',\n};\n","export const PAGE_SERVICE_UNAVAILABLE_HREF = '/ca/service-unavailable';\nexport const PAGE_NOT_FOUND_HREF = '/ca/not-found';\nexport const PAGE_ERROR_HREF = '/ca/error-page';\n\nexport const redirectToErrorPage = (targetUrl: string) => {\n const { href } = window.location;\n if (\n !href.endsWith(PAGE_NOT_FOUND_HREF) &&\n !href.endsWith(PAGE_ERROR_HREF) &&\n !href.endsWith(PAGE_SERVICE_UNAVAILABLE_HREF)\n ) {\n window.location.href = targetUrl;\n }\n};\n","export { postOrder, postOrderMany } from './ordersService';\n","import { parseIndustriesMapping } from 'shared/parsers';\n\nexport let industriesMapping = {}; // eslint-disable-line import/no-mutable-exports\n\nexport const setIndustriesMapping = industries => {\n industriesMapping = parseIndustriesMapping(industries);\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\n\nconst useStyles = makeStyles(theme => ({\n row: {\n textAlign: 'center',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n}));\n\nconst RequestContent = ({ isPending, children, onRequest }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n return isPending ? (\n <>\n <Grid className={classes.row}>\n <Typography display=\"block\">{t('Your request has been received.')}</Typography>\n <Typography display=\"block\">\n {t('Once available, information can be found here.')}\n </Typography>\n </Grid>\n <Grid className={classes.row}>\n <Button variant=\"contained\" color=\"primary\" size=\"small\" disabled>\n {t('Requested')}\n </Button>\n </Grid>\n </>\n ) : (\n <>\n {children}\n <Grid className={classes.row}>\n <Button variant=\"contained\" color=\"primary\" size=\"small\" onClick={onRequest}>\n {t('Request')}\n </Button>\n </Grid>\n </>\n );\n};\n\nRequestContent.propTypes = {\n children: PropTypes.node.isRequired,\n isPending: PropTypes.bool.isRequired,\n onRequest: PropTypes.func.isRequired,\n};\n\nexport default RequestContent;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\n\nimport { Alert, BlurWrapper, ConfidentialAlert, Loader } from 'ui';\nimport {\n ScoreWidget,\n ScoreWidgetMainColumn,\n ScoreWidgetSingleValueColumn,\n ScoreWidgetMultiValuesColumn,\n} from 'ui/ScoreWidget';\nimport { getScoreWidgetFooterColor, formatDate } from 'shared/functions';\nimport { outlookTypes, outlookLabels } from 'shared/constants/outlookTypes';\nimport { creditRatingAlerts } from 'shared/constants/creditRating';\nimport { ProductionQuantityLimitsSharp } from '@mui/icons-material';\n\nconst useStyles = makeStyles(() => ({\n requestBox: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n height: '100%',\n },\n}));\n\nexport const BlurredCompanyCreditRating = () => {\n const { t } = useTranslation();\n\n return (\n <ScoreWidget>\n <ScoreWidgetMainColumn label=\"Rating\" value=\"-\" footer=\"Outlook\" footerColor=\"red\" />\n <ScoreWidgetSingleValueColumn\n label={t('Latest rating action')}\n value=\"Rating action\"\n subvalue=\"Date\"\n />\n <ScoreWidgetSingleValueColumn\n label={t('Rating type')}\n value=\"Rating type\"\n subvalue=\"Demand type\"\n />\n <ScoreWidgetMultiValuesColumn\n label={t('Endorsement information')}\n values={[\n {\n label: t('Location'),\n value: t('Location'),\n },\n {\n label: t('Endorsement'),\n value: t('Endorsement'),\n },\n ]}\n />\n <ScoreWidgetMultiValuesColumn\n label={t('General information')}\n values={[\n {\n label: t('Lead analyst'),\n value: t('Lead analyst'),\n },\n {\n label: t('Committee chair'),\n value: t('Lead analyst'),\n },\n ]}\n last\n />\n </ScoreWidget>\n );\n};\n\nconst CompanyCreditRating = ({\n companyName,\n loading,\n ratings,\n isPublicRating,\n isRatingSubscription,\n showConflictOfInterests,\n showRatingRequestInProgress,\n showRequestRatingBox,\n showRatings,\n onRequestClick,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <>\n {loading && <Loader center />}\n {showConflictOfInterests && (\n <Alert message={creditRatingAlerts.conflictOfInterests(companyName)} variant=\"warning\" />\n )}\n {showRatings ? (\n <>\n {ratings.map(\n ({\n committeeChair,\n demandType,\n leadAnalyst,\n name,\n outlook,\n rating,\n preliminaryFlag,\n notchSuffix,\n ratingAction,\n ratingClassification,\n ratingDate,\n endorsementLocations,\n issuanceLocation,\n }) => (\n <Box mb={2} key={name}>\n <ScoreWidget>\n <ScoreWidgetMainColumn\n label={name}\n value={rating}\n suffix={notchSuffix}\n preliminary={preliminaryFlag}\n footer={`Outlook: ${t(outlookLabels[outlook])}`}\n footerColor={getScoreWidgetFooterColor(outlook)}\n />\n <ScoreWidgetSingleValueColumn\n label={t('Latest rating action')}\n value={ratingAction}\n subvalue={formatDate(ratingDate)}\n />\n <ScoreWidgetSingleValueColumn\n label={t('Rating type')}\n value={ratingClassification}\n subvalue={demandType}\n />\n <ScoreWidgetMultiValuesColumn\n label={t('Endorsement information')}\n values={[\n {\n label: t('Location'),\n value: t(`${issuanceLocation || 'EU'} rated`),\n },\n {\n label: t('Endorsement'),\n value: t(endorsementLocations ? endorsementLocations.join(', ') : 'None'),\n },\n ]}\n />\n <ScoreWidgetMultiValuesColumn\n label={t('General information')}\n values={[\n {\n label: t('Lead analyst'),\n value: leadAnalyst,\n },\n {\n label: t('Committee chair'),\n value: committeeChair,\n },\n ]}\n last\n />\n </ScoreWidget>\n </Box>\n ),\n )}\n {isRatingSubscription && (\n <ConfidentialAlert\n label={t(creditRatingAlerts.confidentialAlert.title)}\n message={t(creditRatingAlerts.confidentialAlert.message)}\n />\n )}\n </>\n ) : null}\n {!showRatings && (showRequestRatingBox || showRatingRequestInProgress) ? (\n <BlurWrapper\n content={\n <div className={classes.requestBox}>\n <Typography display=\"block\">\n {!showRatingRequestInProgress\n ? t('If you wish to see the rating for this company, please request it here.')\n : t('Your rating request has been received.')}\n </Typography>\n <Typography display=\"block\">\n {!showRatingRequestInProgress\n ? t(\n 'If it is available and covered by your subscription, you will find it here immediately.',\n )\n : t(`Once available, information can be found here.`)}\n </Typography>\n <Box mt={1}>\n {!showRatingRequestInProgress ? (\n <Button variant=\"contained\" size=\"small\" color=\"primary\" onClick={onRequestClick}>\n {t('Request')}\n </Button>\n ) : (\n <Button variant=\"contained\" size=\"small\" color=\"primary\" disabled>\n {t('Requested')}\n </Button>\n )}\n </Box>\n </div>\n }\n >\n <BlurredCompanyCreditRating />\n </BlurWrapper>\n ) : null}\n </>\n );\n};\n\nCompanyCreditRating.defaultProps = {\n loading: false,\n ratings: [],\n isPublicRating: false,\n isRatingSubscription: false,\n showConflictOfInterests: false,\n showRatingRequestInProgress: false,\n showRequestRatingBox: false,\n showRatings: false,\n};\n\nCompanyCreditRating.propTypes = {\n companyName: PropTypes.string.isRequired,\n loading: PropTypes.bool,\n ratings: PropTypes.arrayOf(\n PropTypes.shape({\n rating: PropTypes.string,\n outlook: PropTypes.oneOf([...Object.values(outlookTypes)]),\n name: PropTypes.string.isRequired,\n ratingDate: PropTypes.string.isRequired,\n leadAnalyst: PropTypes.string.isRequired,\n committeeChair: PropTypes.string.isRequired,\n demandType: PropTypes.string.isRequired,\n ratingAction: PropTypes.string.isRequired,\n ratingClassification: PropTypes.string.isRequired,\n }),\n ),\n isPublicRating: PropTypes.bool,\n isRatingSubscription: PropTypes.bool,\n showConflictOfInterests: PropTypes.bool,\n showRatingRequestInProgress: PropTypes.bool,\n showRequestRatingBox: PropTypes.bool,\n showRatings: PropTypes.bool,\n onRequestClick: PropTypes.func.isRequired,\n};\n\nexport default CompanyCreditRating;\n","import React, { useState, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { Formik, Form, Field, ErrorMessage } from 'formik';\nimport get from 'lodash/get';\n\nimport Button from '@mui/material/Button';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport Typography from '@mui/material/Typography';\nimport TextField from '@mui/material/TextField';\nimport Paper from '@mui/material/Paper';\nimport InputBase from '@mui/material/InputBase';\nimport IconButton from '@mui/material/IconButton';\nimport Stepper from '@mui/material/Stepper';\nimport Step from '@mui/material/Step';\nimport StepLabel from '@mui/material/StepLabel';\nimport Box from '@mui/material/Box';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Divider from '@mui/material/Divider';\nimport DeleteIcon from '@mui/icons-material/Delete';\nimport DoneIcon from '@mui/icons-material/Done';\nimport { downloadService, uploadPortfolio, postOrderMany } from 'services';\n\nimport { portfolioUploadSteps as steps } from 'shared/constants/portfolioUploadSteps';\n\nimport { portfolioUploadSchema, createPortfolioSchema } from 'shared/validations';\nimport { purchaseTypes } from 'shared/constants/purchaseTypes';\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { LinkButton } from 'ui/Buttons';\nimport { useNotifications } from 'shared/hooks';\nimport { checkDossierName, addToDossierIsin } from 'services/dossier/dossierService';\nimport { refreshDossiersAction } from 'store/portfolio/dossierActions';\nimport { Loader } from 'ui';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { formatNumber } from 'shared/functions';\nimport { green } from '@mui/material/colors';\n\nconst useStyles = makeStyles(theme => ({\n downloadTemplateContainer: {\n display: 'flex',\n alignItems: 'center',\n },\n buttonIcon: {\n marginRight: theme.spacing(1),\n },\n downloadButtonContainer: {\n display: 'flex',\n flexGrow: 1,\n justifyContent: 'flex-end',\n },\n input: {\n display: 'none',\n },\n uploadContainer: {\n padding: '2px 4px',\n margin: theme.spacing(2, 0),\n display: 'flex',\n alignItems: 'center',\n },\n fileUploadText: {\n marginLeft: theme.spacing(1),\n flex: 1,\n },\n fullWidth: {\n width: '100%',\n },\n summaryContent: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n },\n textCenter: {\n textAlign: 'center',\n },\n doneIcon: {\n color: green[600],\n width: 140,\n height: 140,\n },\n selectButton: {\n width: 150,\n height: 100,\n textTransform: 'inherit',\n border: 'none',\n color: theme.palette.text.primary,\n boxShadow: '0 4px 4px 2px rgba(155, 155, 155, 0.3)',\n padding: '0 35px',\n },\n selectTitle: {\n fontSize: 15,\n },\n}));\n\nconst PortfolioUploadCreditRating = ({ onClose, backToTypeSelection }) => {\n const classes = useStyles();\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const { notifyError } = useNotifications();\n\n const [fileUploadInputRef, setFileUploadInputRef] = useState(null);\n\n const [dossierName, setDossierName] = useState(null);\n const [isPending, setIsPending] = useState(false);\n const [data, setData] = useState(null);\n const [error, setError] = useState(null);\n const [step, setStep] = useState(steps.UPLOAD);\n const [summaryStep, setSummaryStep] = useState(0);\n\n useEffect(() => {\n if (error) {\n notifyError(error);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [error]);\n\n const summarySteps = [\n {\n label: t('Step one'),\n text: t(\n 'Have ratings that are immediately available for you and will be accessible for you free of charge',\n ),\n ratingsCount: get(data, 'publicRatings.length', 0),\n },\n {\n label: t('Step two'),\n text: t(\n 'Have ratings that are currently in process and will be accessible for you free of charge. You will be notified as soon as the ratings are available.',\n ),\n ratingsCount: get(data, 'subscriptionRatingsFree.length', 0),\n },\n {\n label: t('Step three'),\n text: t(\n 'Have ratings analysis that are subject to a charge and are accessible after payment.',\n ),\n ratingsCount: get(data, 'subscriptionRatingsChargeable.length', 0),\n },\n ];\n\n const sampleTemplateUrl = '/storefront/document/sample/ISIN';\n\n const fileUploadInputRefChanged = element => setFileUploadInputRef(element);\n\n const artifactIdsToProducts = (artifactIds, isPublic) =>\n artifactIds.map(artifactId => ({\n artifactId,\n artifactType: orderTypes.INSTRUMENT,\n purchaseType: purchaseTypes.ONE_TIME,\n frequency: 0,\n productCategory: isPublic ? 'L5' : 'L4',\n }));\n\n const placeOrders = async () => {\n setIsPending(true);\n\n const subscriptionProducts = artifactIdsToProducts(\n [...data.subscriptionRatingsFree, ...data.subscriptionRatingsChargeable],\n false,\n );\n const publicProducts = artifactIdsToProducts(data.publicRatings, true);\n const products = [...subscriptionProducts, ...publicProducts];\n const dossierItems = products.map(({ artifactId, artifactType }) => ({\n artifactId,\n type: artifactType,\n }));\n\n try {\n const orderResponse = await postOrderMany({ products, isin: true });\n const addToDossierResponse = await addToDossierIsin({\n items: dossierItems,\n dossierName,\n artifacts: dossierItems,\n });\n\n if (orderResponse.error) {\n throw orderResponse;\n } else if (addToDossierResponse.error) {\n throw addToDossierResponse;\n }\n\n dispatch(refreshDossiersAction({ reason: null }));\n setStep(steps.FINISH);\n } catch (e) {\n setError('Failed to finish portfolio upload');\n }\n setIsPending(false);\n };\n\n const handleStepSubmit = async payload => {\n if (step === steps.UPLOAD) {\n if (step === steps.UPLOAD) {\n setIsPending(true);\n try {\n const { error: uploadError, data: uploadData } = await uploadPortfolio({\n portfolio: payload && payload.fileUploadInput,\n });\n if (uploadError) {\n throw new Error(uploadError);\n } else {\n setData({ ...uploadData, fileName: payload.fileUploadInput.name });\n setStep(steps.CREATE_DOSSIER);\n }\n } catch (e) {\n setError('Something went wrong. Make sure the file is not corrupted.');\n }\n setIsPending(false);\n }\n } else if (step === steps.CREATE_DOSSIER) {\n setIsPending(true);\n try {\n const response = await checkDossierName({\n dossierName: payload && payload.dossierName,\n ratingType: ratingTypes.CREDIT_RATING,\n });\n if (response.error) {\n throw response;\n } else if (response.dossierNameExists) {\n throw new Error('Dossier name already exists');\n }\n setDossierName(payload.dossierName);\n setStep(steps.SUMMARY);\n } catch (e) {\n setError(e.message);\n setDossierName(null);\n }\n setIsPending(false);\n }\n };\n\n const downloadErrorHandler = () => {\n notifyError(t('Failed to download sample portfolio template'));\n };\n\n const handleDownloadTemplateClick = () =>\n downloadService({\n path: sampleTemplateUrl,\n name: 'portfolio-template.csv',\n onError: downloadErrorHandler,\n });\n\n const nextSummaryStep = () => {\n if (summaryStep < summarySteps.length - 1) {\n setSummaryStep(summaryStep + 1);\n } else {\n placeOrders();\n }\n };\n\n const updateUploadBoxData = (setFieldValueFunc, file, text) => {\n if (!file && fileUploadInputRef) {\n fileUploadInputRef.value = null;\n }\n setFieldValueFunc('fileUploadInput', file);\n setFieldValueFunc('fileUploadText', text);\n };\n\n const closeModal = () => {\n setSummaryStep(0);\n onClose();\n };\n\n const stepUploadInitialValues = {\n description: '',\n origin: window.location.href,\n fileUploadText: '',\n fileUploadInput: null,\n };\n\n const stepCreateDossierInitialValues = {\n dossierName: '',\n };\n\n const stepUpload = (\n <Formik\n key={steps.UPLOAD}\n initialValues={stepUploadInitialValues}\n onSubmit={payload => handleStepSubmit(payload)}\n validationSchema={portfolioUploadSchema(['csv'])}\n >\n {({ values, errors, touched, setFieldValue }) => {\n return (\n <Form>\n <DialogContent>\n <Box mb={2}>\n <Typography>\n {t(\n `The upload of your portfolio is free of charge and does not trigger any costs.\n Please select a file from your computer.`,\n )}\n </Typography>\n </Box>\n <Box mb={2}>\n <Typography>\n {t(\n `For the portfolio upload you require an ISIN overview in excel (.csv). \n The import of an ISIN file automatically triggers a request for rating \n for the relevant items.`,\n )}\n </Typography>\n </Box>\n <Divider />\n <div className={classes.downloadTemplateContainer}>\n <Box p={2}>\n <Typography>{`${t('File format')}: .csv`}</Typography>\n <Typography>{`${t('Max size')}: 5 MB`}</Typography>\n <Typography>{`${t('Column heading')}: ISIN`}</Typography>\n </Box>\n <Box p={2} className={classes.downloadButtonContainer}>\n <Button\n onClick={handleDownloadTemplateClick}\n variant=\"outlined\"\n disabled={isPending}\n >\n {t('DOWNLOAD_TEMPLATE')}\n </Button>\n </Box>\n </div>\n <Divider />\n <ErrorMessage name=\"fileUploadInput\">\n {message => (\n <Box mt={2}>\n <Typography color=\"error\">{message}</Typography>\n </Box>\n )}\n </ErrorMessage>\n <Paper className={classes.uploadContainer}>\n <input\n className={classes.input}\n id=\"file-upload\"\n name=\"file-upload\"\n ref={fileUploadInputRefChanged}\n type=\"file\"\n onChange={event => {\n updateUploadBoxData(\n setFieldValue,\n event.currentTarget.files[0],\n get(event.currentTarget.files, '[0].name', ''),\n );\n }}\n />\n <Field name=\"fileUploadText\">\n {({ field }) => (\n <InputBase\n {...field}\n className={classes.fileUploadText}\n placeholder={t('UPLOAD.NO_FILE_SELECTED')}\n error={errors.fileUploadInput && touched.fileUploadText}\n readOnly\n />\n )}\n </Field>\n <IconButton\n type=\"submit\"\n className={classes.iconButton}\n disabled={!fileUploadInputRef || !fileUploadInputRef.value}\n onClick={() => {\n updateUploadBoxData(setFieldValue, null, '');\n }}\n size=\"large\">\n <DeleteIcon />\n </IconButton>\n <label htmlFor=\"file-upload\">\n <Button variant=\"contained\" color=\"primary\" component=\"span\">\n {t('UPLOAD.BROWSE')}\n </Button>\n </label>\n </Paper>\n </DialogContent>\n <DialogActions>\n {step !== steps.FINISH && (\n <Box>\n <Button variant=\"outlined\" onClick={backToTypeSelection}>\n {t('Previous')}\n </Button>\n </Box>\n )}\n <div style={{ flex: '1 0 0' }} />\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending || !get(values, 'fileUploadInput')}\n >\n {t('Next')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n );\n\n const stepCreateDossier = (\n <Formik\n key={steps.CREATE_DOSSIER}\n className={classes.fullWidth}\n initialValues={stepCreateDossierInitialValues}\n onSubmit={payload => handleStepSubmit(payload)}\n validationSchema={createPortfolioSchema}\n >\n {({ errors, touched }) => {\n return (\n <Form>\n <DialogContent>\n <Box mb={2}>\n <Typography>{t('The file selected below will be uploaded.')}</Typography>\n </Box>\n <div className={classes.downloadTemplateContainer}>\n <Box p={2}>\n <Typography color=\"primary\">{`${data.fileName}`}</Typography>\n </Box>\n <Box p={2} className={classes.downloadButtonContainer}>\n <Button\n onClick={() => setStep(steps.UPLOAD)}\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending}\n >\n {t('Change File')}\n </Button>\n </Box>\n </div>\n <Box mt={2}>\n <Typography>{t('Create a portfolio to add the above file')}</Typography>\n </Box>\n <Field name=\"dossierName\">\n {({ field }) => (\n <TextField\n {...field}\n type=\"text\"\n label=\"Portfolio name\"\n error={errors.dossierName && touched.dossierName}\n fullWidth\n />\n )}\n </Field>\n </DialogContent>\n <DialogActions>\n {step !== steps.FINISH && (\n <Box>\n <Button variant=\"outlined\" onClick={backToTypeSelection}>\n {t('Previous')}\n </Button>\n </Box>\n )}\n <div style={{ flex: '1 0 0' }} />\n <Button type=\"submit\" variant=\"contained\" color=\"primary\" disabled={isPending}>\n {t('Next')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n );\n\n const stepSummary = (\n <>\n <DialogContent>\n <Box mb={2}>\n <Stepper activeStep={summaryStep}>\n {summarySteps.map(item => {\n return (\n <Step key={item.label}>\n <StepLabel>{item.label}</StepLabel>\n </Step>\n );\n })}\n </Stepper>\n </Box>\n <Box mb={2} className={classes.summaryContent}>\n <Typography color=\"primary\" variant=\"h3\">\n {summarySteps[summaryStep].ratingsCount}\n </Typography>\n <Box p={2}>\n <Typography variant=\"h6\">{t('out of')}</Typography>\n </Box>\n <Typography variant=\"h3\">{data ? formatNumber(data.total) : 0}</Typography>\n </Box>\n <Box p={2} mb={2}>\n <Typography variant=\"body1\" className={classes.textCenter}>\n {summarySteps[summaryStep].text}\n </Typography>\n </Box>\n </DialogContent>\n <DialogActions>\n <Box pl={2}>\n <Typography variant=\"caption\">\n {t('By requesting an instrument you will also request the respective entity.')}\n </Typography>\n </Box>\n <div style={{ flex: '1 0 0' }} />\n <Button variant=\"contained\" color=\"primary\" disabled={isPending} onClick={nextSummaryStep}>\n {t('Next')}\n </Button>\n </DialogActions>\n </>\n );\n\n const stepFinish = (\n <>\n <DialogContent className={classes.textCenter}>\n <DoneIcon className={classes.doneIcon} />\n <Box p={2}>\n <Typography variant=\"h6\">\n {t('Your personal advisor will contact you to discuss your request')}\n </Typography>\n </Box>\n <Box p={2} mb={2}>\n <Typography variant=\"body1\">\n {t(\n 'If a requested entity mandates the rating in the interim, the analysis will be provided free of charge.',\n )}\n </Typography>\n </Box>\n </DialogContent>\n <DialogActions>\n <LinkButton\n to=\"/portfolios\"\n label={t('View portfolios')}\n variant=\"contained\"\n color=\"primary\"\n disabled={isPending}\n onClick={closeModal}\n />\n </DialogActions>\n </>\n );\n\n const stepsMapping = {\n [steps.UPLOAD]: stepUpload,\n [steps.CREATE_DOSSIER]: stepCreateDossier,\n [steps.SUMMARY]: stepSummary,\n [steps.FINISH]: stepFinish,\n };\n\n return (\n <>\n {stepsMapping[step]}\n {isPending && <Loader cover />}\n </>\n );\n};\n\nPortfolioUploadCreditRating.defaultProps = {\n onClose: () => null,\n onPortfolioCreate: () => null,\n dossierItem: null,\n items: [],\n backToTypeSelection: () => null,\n onClickCreateNew: () => null,\n createdPortfolioName: undefined,\n};\n\nPortfolioUploadCreditRating.propTypes = {\n onClose: PropTypes.func,\n onPortfolioCreate: PropTypes.func,\n dossierItem: PropTypes.object,\n items: PropTypes.arrayOf(PropTypes.object),\n backToTypeSelection: PropTypes.func,\n onClickCreateNew: PropTypes.func,\n createdPortfolioName: PropTypes.string,\n};\n\nexport default PortfolioUploadCreditRating;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\n\nimport { requestEntityRatingAndFetchDataAction } from 'store/entity/entityActions';\nimport { creditRatingScalesMapping } from 'shared/mappings';\nimport { ratingRange } from 'shared/constants/company';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { endorsementCreditRating } from 'shared/constants/summaryTab';\nimport { BlurWrapper } from 'ui';\nimport { ScoreWidgetMainColumn } from 'ui/ScoreWidget';\nimport { SummaryCard, SummaryCardLineChart } from 'modules/common/SummaryCard';\nimport summaryTabHistoryData from 'assets/mockedData/summaryTabHistoryData.json';\nimport {\n getEntityDataProductsLevel,\n getEntityDataProductShowRatingRequestInProgress,\n getEntityDataProductShowRequestRatingBox,\n} from 'selectors/entity';\nimport { shopProductsCategories } from 'modules/shop/shared/constants/shopProductsCategories';\nimport RequestContent from 'modules/common/SummaryCard/Request/RequestContent';\nimport { generalInformationMock } from 'modules/common/SummaryCard/Request/generalInformationMock';\nimport SummaryCardLockedRating from 'modules/common/SummaryCard/Request/SummaryCardLockedRating';\n\nconst data = {\n latestChange: {},\n generalInformation: {},\n levels: {},\n dates: {},\n documents: [],\n ratingScalesData: creditRatingScalesMapping(\n portfolioTypes.CREDIT_RATING,\n ratingRange.longTermRange,\n ),\n generalInformationList: generalInformationMock,\n endorsementList: endorsementCreditRating,\n};\n\nconst useStyles = makeStyles(theme => ({\n root: {\n height: '100%',\n },\n content: {\n flexDirection: 'column',\n alignContent: 'center',\n justifyContent: 'center',\n height: '100%',\n },\n contentRow: {\n textAlign: 'center',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n link: {\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n}));\n\nconst SummaryCardRequestCreditRating = ({\n entityId,\n isAvailable,\n subscribed,\n data: relatedSubscriptionData,\n onUnlock,\n showCreditRatingNotAvailableMessage,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const dispatch = useDispatch();\n const level = useSelector(getEntityDataProductsLevel);\n const showRatingRequestInProgress = useSelector(getEntityDataProductShowRatingRequestInProgress);\n const showRequestRatingBox = useSelector(getEntityDataProductShowRequestRatingBox);\n\n const handleRequest = () => {\n dispatch(requestEntityRatingAndFetchDataAction({ id: entityId, level }));\n };\n\n const showRatingIsNotAvailable =\n (!showRequestRatingBox && !showRatingRequestInProgress) || !entityId || !isAvailable;\n\n const showRatingContent = showRatingIsNotAvailable ? (\n <RequestContent onRequest={handleRequest} isPending={showRatingRequestInProgress}>\n <Grid className={classes.contentRow}>\n <Typography display=\"block\">\n {t('The credit rating for this company or instrument is not yet available.')}\n </Typography>\n <Typography display=\"block\">\n {t(\n 'If you are interested in the rating, please request it here. By requesting, you help us to prioritise our selection of ratings.',\n )}\n </Typography>\n <Typography display=\"block\">\n {t('Once assigned, the rating and related information will be made available here.')}\n </Typography>\n </Grid>\n </RequestContent>\n ) : (\n <RequestContent onRequest={handleRequest} isPending={showRatingRequestInProgress}>\n <Grid className={classes.contentRow}>\n <Typography display=\"block\">\n {t(\n 'This entity has not been rated yet. If you are interested in the rating, please indicate your interest by clicking \"Request\" here. Once available you will be informed about the rating.',\n )}\n </Typography>\n </Grid>\n </RequestContent>\n );\n\n const creditRatingNotAvailableMessage = (\n <Grid className={classes.contentRow}>\n <Typography display=\"block\">\n {t(\n 'If you are interested in obtaining a credit rating for this entity, please contact your personal advisor or the service center.',\n )}\n </Typography>\n </Grid>\n );\n\n const content = subscribed ? (\n showRatingContent\n ) : (\n <SummaryCardLockedRating data={relatedSubscriptionData} onUnlock={onUnlock} />\n );\n\n return (\n <BlurWrapper\n content={\n <Grid container className={classes.content}>\n {showCreditRatingNotAvailableMessage ? creditRatingNotAvailableMessage : content}\n </Grid>\n }\n active\n >\n <SummaryCard\n headSquare={\n <ScoreWidgetMainColumn\n className={classes.root}\n label=\"Score\"\n value=\"A\"\n footer=\"Outlook: negative\"\n footerColor=\"red\"\n />\n }\n history={<SummaryCardLineChart history={summaryTabHistoryData} />}\n data={data}\n />\n </BlurWrapper>\n );\n};\n\nSummaryCardRequestCreditRating.defaultProps = {\n entityId: undefined,\n data: {\n category: shopProductsCategories.creditAnalysis,\n productLine: 'Rating',\n countriesAndIndustries: [],\n },\n onUnlock: () => {},\n showCreditRatingNotAvailableMessage: false,\n};\n\nSummaryCardRequestCreditRating.propTypes = {\n isAvailable: PropTypes.bool.isRequired,\n entityId: PropTypes.string,\n subscribed: PropTypes.bool.isRequired,\n data: PropTypes.shape({\n category: PropTypes.string,\n productLine: PropTypes.string,\n countriesAndIndustries: PropTypes.arrayOf(\n PropTypes.shape({\n country: PropTypes.string.isRequired,\n industries: PropTypes.arrayOf(PropTypes.string.isRequired),\n }),\n ),\n }),\n onUnlock: PropTypes.func,\n showCreditRatingNotAvailableMessage: PropTypes.bool,\n};\n\nexport default SummaryCardRequestCreditRating;\n","import { NavMenu } from '@scope/scope-one-ui/core';\nimport styled from 'styled-components';\n\nexport const Tabs = styled(NavMenu)`\n text-transform: uppercase;\n`;\n","import React, { FC, useState } from 'react';\nimport { formatDate } from 'shared/functions';\nimport Download from '@scope/scope-one-ui/assets/icons/download.svg';\nimport { Box, DataTable, IconTextButton, Spinner } from '@scope/scope-one-ui/core';\nimport { ColumnDefinition } from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch } from 'react-redux';\nimport { downloadAsyncService, DownloadStatus } from 'services/download/downloadAsyncService';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { DocumentsProps, DocumentType, Document, Tab } from './Documents.d';\nimport { Tabs } from './Documents.styled';\n\nconst tabs: Tab[] = [\n { key: 'all', label: 'All' },\n { key: 'report', label: 'Rating reports' },\n { key: 'performance', label: 'Performance' },\n { key: 'methodology', label: 'Methodologies' },\n];\n\nexport const Documents: FC<DocumentsProps> = ({ reports, performances, methodologies }) => {\n const [tab, setTab] = useState<DocumentType>('all');\n const [filesPending, setFilesPending] = useState<string[]>([]);\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const { info } = useSnackbar();\n\n const throwFetchError = () =>\n dispatch(\n addNotificationAction({\n variant: 'error',\n message: t('Failed to get document. Please try again or contact.'),\n }),\n );\n\n const handleDownloadNotReady = (message = 'Document not ready') => info(t(message));\n\n const handleDownload = async ({ path, name, options, retries }) => {\n const absolutePath = path.startsWith('https://') || path.startsWith('http://');\n\n if (!absolutePath) {\n setFilesPending([...filesPending, path]);\n\n const result = await downloadAsyncService({\n path,\n name,\n options,\n retries,\n onError: throwFetchError,\n onDownloadNotReady: handleDownloadNotReady,\n });\n if (result !== DownloadStatus.PENDING) {\n setFilesPending(filesPending.filter((value) => value !== path));\n }\n } else {\n window.open(path, '_blank');\n }\n };\n\n const documents = [\n ...reports.map((item) => ({ ...item, variant: 'report' } as Document)),\n ...performances.map((item) => ({ ...item, variant: 'performance' } as Document)),\n ...methodologies.map((item) => ({ ...item, variant: 'methodology' } as Document)),\n ]\n .filter((item) => tab === 'all' || item.variant === tab)\n .map((item) => ({\n id: item.name,\n data: {\n name: item.title,\n type: {\n report: item.type,\n performance: item.type,\n methodology: t('Methodology'),\n }[item.variant],\n format: item.name.includes('.') ? `.${item.name.split('.').at(-1)}` : '-',\n date: item.publicationDate,\n depth: item.level || '-',\n link: item,\n },\n }));\n\n const cols: ColumnDefinition[] = [\n { name: 'name', label: t('Name'), sortable: true, size: '3fr' },\n { name: 'type', label: t('Type'), sortable: true, size: '1fr' },\n { name: 'format', label: t('File format'), sortable: true, size: '1fr' },\n {\n name: 'date',\n label: t('Date'),\n sortable: true,\n size: '1fr',\n customBodyRender: (value: string) => formatDate(value),\n },\n { name: 'depth', label: t('Analytical depth'), sortable: true, size: '1fr' },\n {\n name: 'link',\n label: '',\n size: 'min-content',\n customBodyRender: (value) => {\n const pending = filesPending.includes(value.path);\n\n return (\n <IconTextButton\n icon={pending ? <Spinner /> : <Download />}\n onClick={() => handleDownload(value)}\n disabled={pending}\n >\n Download\n </IconTextButton>\n );\n },\n },\n ];\n\n const navTabs = tabs.map((item) => ({ ...item, onClick: () => setTab(item.key) }));\n\n const tabLabel = tabs.find(({ key }) => key === tab)?.label!;\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" gridGap={4} mt={4}>\n <Tabs active={tab} tabs={navTabs} />\n <Box display=\"flex\" flexDirection=\"column\">\n <DataTable\n title={t(tab === 'all' ? `${tabLabel} documents` : tabLabel)}\n cols={cols}\n rows={documents}\n paginate\n />\n </Box>\n </Box>\n );\n};\n","export const profilePicturesPath = 'placeholders/profile-picture.png';\nexport const personalAdvisorPicturesPath = 'placeholders/personal-advisor.jpeg';\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Formik, Form, Field } from 'formik';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Button from '@mui/material/Button';\nimport Checkbox from '@mui/material/Checkbox';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport FormGroup from '@mui/material/FormGroup';\n\nimport { DialogTitleWithClose } from 'ui';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { requestConfirmationChangedAction } from 'store/entity/entityActions';\nimport { getCofaceRequestsAllowed } from 'selectors/creditReviewSelectors';\n\nconst useStyles = makeStyles(() => ({\n dialogContent: {\n minWidth: '400px',\n },\n}));\n\nconst RequestConfirmationModal = ({ onClose, open, requestsCount }) => {\n const dispatch = useDispatch();\n const classes = useStyles();\n const { t } = useTranslation();\n const initialValues = {\n dontShowAgain: false,\n };\n\n const cofaceRequestsAllowed = useSelector(getCofaceRequestsAllowed);\n\n const handleSubmit = values => {\n dispatch(\n requestConfirmationChangedAction({ confirmed: true, autoConfirm: values.dontShowAgain }),\n );\n onClose();\n };\n\n return (\n <Dialog open={open} onClose={onClose} maxWidth=\"md\">\n {requestsCount <= cofaceRequestsAllowed ? (\n <>\n <DialogTitleWithClose onClose={onClose}>\n {t(\n `Credit Review: Proceed with the request (${requestsCount} of ${cofaceRequestsAllowed} available)`,\n )}\n </DialogTitleWithClose>\n <Formik initialValues={initialValues} onSubmit={handleSubmit}>\n {({ isSubmitting }) => {\n return (\n <Form noValidate>\n <DialogContent className={classes.dialogContent}>\n <DialogContentText>\n {t(\n `By proceeding with this request the number of Credit Reviews included with \n your license will be deducted by ${requestsCount}. Executed requests are not refundable.`,\n )}\n <br />\n <br />\n {t('Are you sure you wish to continue?')}\n </DialogContentText>\n <FormGroup className={classes.types} row>\n <Field name=\"dontShowAgain\">\n {({ field }) => (\n <FormControlLabel\n control={<Checkbox {...field} color=\"primary\" />}\n label={t(\n 'Don’t show this message again and automatically confirm requests going forward',\n )}\n />\n )}\n </Field>\n </FormGroup>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('Cancel')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n disabled={isSubmitting}\n >\n {t('Confirm')}\n </Button>\n </DialogActions>\n </Form>\n );\n }}\n </Formik>\n </>\n ) : (\n <>\n <DialogTitleWithClose onClose={onClose}>\n {t(\n `Credit Review: You have requested ${requestsCount} of ${cofaceRequestsAllowed} requests available`,\n )}\n </DialogTitleWithClose>\n <DialogContent className={classes.dialogContent}>\n <DialogContentText>\n {t(\n `Number of requests exeeds the number of available requests by ${requestsCount -\n cofaceRequestsAllowed}.`,\n )}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" color=\"primary\" onClick={onClose}>\n {t('Close')}\n </Button>\n </DialogActions>\n </>\n )}\n </Dialog>\n );\n};\n\nRequestConfirmationModal.defaultProps = {\n open: false,\n onClose: () => null,\n};\n\nRequestConfirmationModal.propTypes = {\n open: PropTypes.bool,\n onClose: PropTypes.func,\n requestsCount: PropTypes.number.isRequired,\n};\n\nexport default RequestConfirmationModal;\n","import React, { FC, ReactElement } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Button from '@mui/material/Button';\nimport Typography from '@mui/material/Typography';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogContentText from '@mui/material/DialogContentText';\nimport { theme } from 'theme';\n\nimport creditReviewFreeTrialInvitationImg from 'assets/images/credit-review-free-trial-invitation.jpg';\n\nimport { DialogTitleWithClose } from 'ui';\n\ntype InitialSubscriptionInvitiationModalProps = {\n onClose: () => void;\n open: boolean;\n onNavigateToInitialSubscription: () => void;\n};\n\nconst useStyles = makeStyles(() => ({\n dialogContent: {\n minWidth: '400px',\n whiteSpace: 'pre-line',\n padding: theme.spacing(3),\n },\n heading: {\n color: '#333',\n fontWeight: 500,\n fontSize: 15,\n },\n text: {\n color: '#333',\n fontSize: 15,\n },\n}));\n\nconst InitialSubscriptionInvitiationModal: FC<InitialSubscriptionInvitiationModalProps> = ({\n open,\n onClose,\n onNavigateToInitialSubscription,\n}): ReactElement => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <Dialog open={!!open} onClose={onClose} maxWidth=\"sm\">\n <DialogTitleWithClose onClose={onClose} imageUrl={creditReviewFreeTrialInvitationImg}>\n {t('CREDIT_REVIEW.FREE_TRIAL_INVITATION_CARD_TITLE')}\n </DialogTitleWithClose>\n <DialogContent className={classes.dialogContent}>\n <DialogContentText>\n <Typography variant=\"h6\" color=\"secondary\" component=\"p\" className={classes.heading}>\n {t('CREDIT_REVIEW.ACTIVATE_YOUR_CREDIT_REVIEW_FREE_TRIAL_NOW')}\n </Typography>\n <br />\n <Typography variant=\"body1\" color=\"secondary\" component=\"p\" className={classes.text}>\n {t('CREDIT_REVIEW.FREE_TRIAL_INVITATION_CARD_DESC')}\n </Typography>\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button variant=\"outlined\" onClick={onClose}>\n {t('CREDIT_REVIEW.FREE_TRIAL_INVITATION_MODAL_NO')}\n </Button>\n <Button variant=\"contained\" color=\"primary\" onClick={onNavigateToInitialSubscription}>\n {t('CREDIT_REVIEW.FREE_TRIAL_INVITATION_MODAL_YES')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default InitialSubscriptionInvitiationModal;\n","import { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\n\nimport { EnvironmentTypes } from 'shared/constants/environmentTypes';\nimport { permissionsTypes } from 'shared/constants/permissionsTypes';\nimport { licencesTypes } from 'shared/constants/licencesTypes';\nimport { allStandardRolesTypes, organisationAdmin } from 'shared/constants/rolesTypes';\nimport { mergePermissionsParser, validateRoles } from 'shared/parsers';\nimport { validateShopPermissions } from 'modules/shop/shared/parsers';\n\nconst RenderElement = ({\n children,\n condition,\n environment,\n permission,\n licence,\n role,\n shopPermissions: shopRoles,\n}) => {\n const auth = useSelector(state => state.auth);\n const { permissions, licences, roles, shopPermissions } = auth.data;\n\n const mergedPermissions = permissions ? mergePermissionsParser(permissions) : [];\n\n const checkEnvironment = environment ? environment === process.env.REACT_APP_ENV : true;\n const checkPermission = permission ? mergedPermissions.includes(permission) : true;\n const checkLicence = licence ? licences.includes(licence) : true;\n const checkRole = role ? validateRoles(roles, role) : true;\n const checkShopPermissions =\n shopRoles && shopRoles.length ? validateShopPermissions(shopPermissions, shopRoles) : true;\n\n return (\n checkEnvironment &&\n checkPermission &&\n checkLicence &&\n checkRole &&\n checkShopPermissions &&\n condition &&\n children\n );\n};\n\nRenderElement.defaultProps = {\n environment: null,\n permission: null,\n licence: null,\n role: null,\n shopPermissions: [],\n condition: true,\n};\n\nRenderElement.propTypes = {\n children: PropTypes.node.isRequired,\n environment: PropTypes.oneOf([...Object.values(EnvironmentTypes), null]),\n permission: PropTypes.oneOf([...Object.keys(permissionsTypes), null]),\n licence: PropTypes.oneOf([...Object.keys(licencesTypes), null]),\n role: PropTypes.oneOf([...allStandardRolesTypes, allStandardRolesTypes, organisationAdmin, null]),\n shopPermissions: PropTypes.arrayOf(PropTypes.string),\n condition: PropTypes.bool,\n};\n\nexport { RenderElement };\n","export const toggleMode = {\n ON: 'on',\n OFF: 'off',\n};\n","import { ImpactReview, PortfolioCoverage, ScoreOverview } from './types';\n\nexport const getImpactOverview = (portfolioCoverage?: PortfolioCoverage) => {\n if (\n !portfolioCoverage?.impactSummaryDistribution ||\n !portfolioCoverage?.impactSummaryOverallMonetisation\n )\n return null;\n\n const {\n impactSummaryDistribution: { downstream, upstream, companySites },\n impactSummaryOverallMonetisation: { totalNetExternality, absoluteNetExternality },\n } = portfolioCoverage;\n\n return {\n impactDistribution: {\n scoreDownstreamFactor: downstream,\n scoreCompanyFactor: companySites,\n scoreSupplyChainFactor: upstream,\n },\n overallMonetization: {\n externalCostsMillionsEur: absoluteNetExternality,\n externalCostsDividedByRevenue: totalNetExternality,\n },\n };\n};\n\nexport const getScoreOverview = (scoreOverview?: ScoreOverview) => {\n if (!scoreOverview) return null;\n\n const { eCost, eScore, sCost, sScore, gCost, gScore, esgCost, esgScore } = scoreOverview;\n\n return [\n {\n title: 'Environment',\n score: eScore,\n extCostsToRevenue: eCost,\n },\n {\n title: 'Social',\n score: sScore,\n extCostsToRevenue: sCost,\n },\n {\n title: 'Governance',\n score: gScore,\n extCostsToRevenue: gCost,\n },\n {\n title: 'Total',\n score: esgScore,\n extCostsToRevenue: esgCost,\n },\n ];\n};\n\nexport const getSummary = (impactReview?: ImpactReview) => {\n if (!impactReview?.history || !impactReview?.impactReviewScore) return null;\n\n const { history, impactReviewScore } = impactReview;\n\n return {\n companyType: 'BANK',\n score: impactReviewScore.esgScore,\n history: {\n labels: history.map((item) => item.updateDate),\n data: history.map((item) => item.esgScore),\n },\n levels: {\n level: 'L2',\n title: 'ESG impact review',\n },\n generalInformation: {\n stability: 'Moderate',\n dataPrecision: 'Good',\n },\n documents: [\n {\n title: 'Methodology',\n name: 'ESG Impact Review Methodology.pdf',\n path: '/esg/api/file-download/032fc715-0e6a-4c1a-b835-5dc58771b3b8/',\n publicationDate: '2020-06-11',\n },\n {\n title: 'How we are different',\n name: 'Scope ESG Impact Review - How we are different.pdf',\n path: '/esg/api/file-download/5611e0ee-1bd9-43e9-b522-d2e8f348d39f/',\n publicationDate: '2020-07-08',\n },\n {\n title: '2021 ESG report',\n name: '2021 ESG report.pdf',\n path: '/esg/api/generate-report/B5E06464-CF10-476E-B6A8-F30A66C37CE8?year=2021&latestUpdate=2022-12-06',\n publicationDate: '2023-03-29',\n },\n ],\n };\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport ArrowBackIcon from '@mui/icons-material/ArrowBack';\nimport { makeStyles } from '@mui/styles';\n\nconst useStyle = makeStyles(theme => ({\n button: {\n textTransform: 'none',\n fontWeight: 400,\n color: theme.palette.grey[500],\n },\n icon: {\n fill: theme.palette.grey[500],\n marginRight: 4,\n },\n}));\n\nconst BackButton = ({ label, onClick }) => {\n const classes = useStyle();\n return (\n <Button size=\"small\" onClick={onClick} className={classes.button}>\n <ArrowBackIcon className={classes.icon} />\n {label}\n </Button>\n );\n};\n\nBackButton.propTypes = {\n label: PropTypes.string.isRequired,\n onClick: PropTypes.func.isRequired,\n};\n\nexport default BackButton;\n","import React, { useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport { makeStyles } from '@mui/styles';\nimport Button from '@mui/material/Button';\nimport { downloadService } from 'services';\nimport { useNotifications } from 'shared/hooks';\n\nconst useStyle = makeStyles(theme => ({\n button: {\n textTransform: 'none',\n borderColor: theme.palette.primary.main,\n color: theme.palette.primary.main,\n borderRadius: 16,\n height: 32,\n },\n}));\n\nconst DownloadButton = ({ url, directDownload, fileName, children, ...props }) => {\n const classes = useStyle();\n const { notifyError } = useNotifications();\n const { t } = useTranslation();\n const [isPending, setIsPending] = useState(false);\n\n const downloadErrorHandler = () => {\n notifyError(t('Failed to download the file'));\n };\n\n const handleClick = () => {\n if (directDownload) {\n setIsPending(true);\n downloadService({ path: url, name: fileName, onError: downloadErrorHandler }).finally(() => {\n setIsPending(false);\n });\n } else {\n window.open(url, '_blank');\n }\n };\n\n return (\n <Button\n {...props}\n className={classes.button}\n size=\"small\"\n variant=\"outlined\"\n onClick={handleClick}\n disabled={isPending}\n >\n {!isPending ? children : t('Downloading...')}\n </Button>\n );\n};\n\nDownloadButton.defaultProps = {\n directDownload: false,\n fileName: '',\n};\n\nDownloadButton.propTypes = {\n url: PropTypes.string.isRequired,\n directDownload: PropTypes.bool,\n fileName: PropTypes.string,\n children: PropTypes.node.isRequired,\n};\n\nexport default DownloadButton;\n","import React, { FC, useEffect, useState } from 'react';\nimport { Link, useLocation } from 'react-router-dom';\nimport Button, { ButtonProps } from '@mui/material/Button';\nimport Tooltip from '@mui/material/Tooltip';\n\ntype LinkButtonProps = {\n to: string;\n label: string;\n tooltip?: string;\n withPathname?: boolean;\n component?: React.ElementType;\n} & ButtonProps;\n\nconst LinkButton: FC<LinkButtonProps> = ({ to, label, tooltip, withPathname, ...props }) => {\n const location = useLocation();\n const [isActive, setIsActive] = useState(false);\n\n useEffect(() => {\n if (!location) return;\n\n const isCurrentLocation =\n to === '/' ? location.pathname === to : location.pathname.includes(to);\n setIsActive(isCurrentLocation);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [location]);\n\n const generateLink = location && withPathname ? `${location.pathname}/${to}` : to;\n\n const ButtonComponent = (\n <Button component={Link} to={generateLink} color={isActive ? 'primary' : undefined} {...props}>\n {label}\n </Button>\n );\n\n return tooltip ? (\n <Tooltip title={tooltip} placement=\"top\">\n {ButtonComponent}\n </Tooltip>\n ) : (\n ButtonComponent\n );\n};\n\nexport default LinkButton;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport Button from '@mui/material/Button';\nimport { makeStyles } from '@mui/styles';\nimport { green } from '@mui/material/colors';\n\nconst useStyle = makeStyles(theme => ({\n container: {\n textTransform: 'none',\n fontWeight: 400,\n color: theme.palette.grey[500],\n borderColor: theme.palette.grey[500],\n borderRadius: 16,\n height: 32,\n },\n marginLeft: {\n marginLeft: theme.spacing(1),\n },\n marginRight: {\n marginRight: theme.spacing(1),\n },\n colorSuccess: {\n borderColor: green[600],\n color: green[600],\n },\n}));\n\nconst RoundButton = ({ label, onClick, marginLeft, marginRight, color, ...props }) => {\n const classes = useStyle();\n\n return (\n <Button\n variant=\"outlined\"\n size=\"small\"\n onClick={onClick}\n className={clsx(\n classes.container,\n marginLeft && classes.marginLeft,\n marginRight && classes.marginRight,\n color === 'success' && classes.colorSuccess,\n )}\n {...props}\n >\n {label}\n </Button>\n );\n};\n\nRoundButton.defaultProps = {\n marginLeft: false,\n marginRight: false,\n color: null,\n onClick: () => null,\n};\n\nRoundButton.propTypes = {\n label: PropTypes.string.isRequired,\n onClick: PropTypes.func,\n marginLeft: PropTypes.bool,\n marginRight: PropTypes.bool,\n color: PropTypes.oneOf(['success', 'revert']),\n};\n\nexport default RoundButton;\n","import React, { FC } from 'react';\nimport Button, { ButtonProps } from '@mui/material/Button';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { theme } from 'theme';\nimport clsx from 'clsx';\n\ntype ChipButtonProps = {\n isActive?: boolean;\n} & ButtonProps;\n\nconst useStyles = makeStyles(() => ({\n root: {\n margin: 5,\n padding: '3px 6px',\n fontSize: 14,\n fontWeight: 500,\n minWidth: 130,\n minHeight: 32,\n borderColor: theme.palette.custom.darkGrayAlt2,\n borderWidth: 2,\n borderRadius: 16,\n borderStyle: 'solid',\n opacity: 0.4,\n color: 'rgba(0, 0, 0, 0.87)',\n textTransform: 'none',\n backgroundColor: 'transparent',\n transition: 'none',\n },\n active: {\n borderColor: theme.palette.primary.main,\n borderWidth: 2,\n backgroundColor: theme.palette.primary.main,\n opacity: 1,\n color: theme.palette.custom.white,\n '&:hover': {\n backgroundColor: theme.palette.primary.main,\n },\n },\n}));\n\nconst ChipButton: FC<ChipButtonProps> = ({ isActive, children, ...props }) => {\n const classes = useStyles();\n\n return (\n <Button\n className={clsx(classes.root, isActive && classes.active)}\n variant={isActive ? 'contained' : 'outlined'}\n disableElevation\n disableTouchRipple\n {...props}\n >\n {children}\n </Button>\n );\n};\n\nexport default ChipButton;\n","export {\n fetchDossiers,\n fetchRecentDossiers,\n addToDossier,\n removeFromDossier,\n toggleMonitoring,\n} from './dossierService';\n","import { fetchApi } from 'shared/functions';\n\nexport const getQuestionnaireAvailability = ({ qualificationId, userId }) => {\n return fetchApi(\n `/scopeuserqualification/should-display-qualifications/${userId}/${qualificationId}/`,\n ).then(response => response.json());\n};\n\nexport const getQuestionnaireData = qualificationId => {\n return fetchApi(`/scopeuserqualification/get-questions/${qualificationId}/`).then(response =>\n response.json(),\n );\n};\n\nexport const saveQuestionnaire = (items, qualificationId, userId) => {\n const params = {\n method: 'POST',\n body: JSON.stringify(items),\n };\n\n return fetchApi(\n `/scopeuserqualification/save-answers/${userId}/${qualificationId}/`,\n params,\n ).then(response => response.json());\n};\n","import qs from 'qs';\nimport { useLocation } from 'react-router-dom';\n\nexport const useQuery = <T = Record<string, string>>() => {\n const { search } = useLocation();\n\n return qs.parse(search, { ignoreQueryPrefix: true }) as unknown as T;\n};\n","import { fetchApi, getFetchApiJSONResponse, catchFetchApiError } from 'shared/functions';\n\nexport const fetchCoveredBoundsCountries = async () => {\n return fetchApi(`/storefront/issues/coveredbonds/countries`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const fetchCoveredBoundsDocuments = async () => {\n return fetchApi(`/storefront/coveredbonds/documents`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n\nexport const fetchCoveredBoundsSeniorityRatings = async () => {\n return fetchApi(`/storefront/issues/coveredbonds/senioritytypes`)\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n","import { cofaceAccessTypes } from 'shared/constants/creditReview/cofaceAccessTypes';\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { RatingStatus } from 'shared/types/ratingStatus';\nimport { ArtifactIdType } from 'shared/constants/artifactIdType';\nimport {\n PortfolioEntity,\n ScoreData,\n SigProduct,\n SubScore,\n} from '../../modules/common/PortfolioManager/types';\n\nexport const entityPortfolioModuleData = (\n entity: PortfolioEntity,\n sigProduct: SigProduct,\n cofaceAccessType: string,\n esgRequestPermitted: Boolean,\n subscore?: SubScore,\n) => {\n const { userId, organisationId } = sigProduct;\n\n // Logic described in SCI-2890\n const canRequestEsg =\n esgRequestPermitted &&\n (entity.meta.esgCustomScore === null || entity.meta.esgCustomScore === true) &&\n (entity.meta.esgRequestState === null || entity.meta.esgRequestState === RatingStatus.TO_DO) &&\n entity.meta.artifactIdType !== ArtifactIdType.EasyNumber;\n\n const result: Record<ratingTypes, ScoreData> = {\n [ratingTypes.CREDIT_RATING]: {\n score:\n subscore === 'shortTermRating'\n ? entity.scores.creditRatingShortTermRating\n : entity.scores.creditRating,\n canRequest:\n entity.meta.storefrontSubscriptionType === 'SUBSCRIPTION' ||\n entity.meta.storefrontSubscriptionType === 'FREE_TRIAL',\n canUnlock: entity.meta.storefrontSubscriptionType === 'NONE',\n requested: !!entity.meta.storefrontPurchased,\n product: {\n l4: {\n purchased:\n (entity.meta.storefrontSubscriptionType === 'SUBSCRIPTION' ||\n entity.meta.storefrontSubscriptionType === 'FREE_TRIAL') &&\n !!entity.meta.storefrontPurchased,\n },\n l5: {\n purchased:\n entity.meta.storefrontSubscriptionType === 'PUBLIC' &&\n !!entity.meta.storefrontPurchased,\n },\n },\n orderType: orderTypes.ENTITY,\n requiresDataUpload: false,\n },\n [ratingTypes.CREDIT_REVIEW]: {\n score: entity.scores.creditReview?.toFixed(1),\n canRequest:\n entity.meta.artifactIdType === 'EASYNUMBER' &&\n cofaceAccessType === cofaceAccessTypes.REQUEST_ALLOWED,\n canUnlock:\n entity.meta.artifactIdType === 'EASYNUMBER' &&\n (cofaceAccessType === cofaceAccessTypes.NO_CONTRACT_ID ||\n cofaceAccessType === cofaceAccessTypes.NOT_ENOUGH_CREDITS),\n requested: !!entity.meta.sigRequested,\n product: {\n requested: !!entity.meta.sigRequested,\n userId,\n organisationId,\n },\n orderType: orderTypes.SIG_ENTITY,\n requiresDataUpload: false,\n },\n [ratingTypes.ESG_IMPACT]: {\n score:\n subscore && subscore !== 'shortTermRating'\n ? {\n environmental: entity.scores.esgEnvironment?.toFixed(1),\n social: entity.scores.esgSocial?.toFixed(1),\n governance: entity.scores.esgGovernance?.toFixed(1),\n }[subscore]\n : entity.scores.esgTotal?.toFixed(1),\n canRequest: canRequestEsg,\n canUnlock:\n !entity.meta.esgPurchased &&\n entity.meta.artifactIdType !== ArtifactIdType.EasyNumber &&\n entity.meta.esgRequestState !== 'UNABLE_TO_REQUEST',\n requested: entity.meta.esgRequestState === RatingStatus.IN_PROGRESS,\n requiresDataUpload:\n (entity.meta.esgRequestState === RatingStatus.TO_DO ||\n entity.meta.esgRequestState === RatingStatus.IN_PROGRESS) &&\n !!entity.meta.esgCustomScore,\n },\n [ratingTypes.SENTIMENT]: {\n score: subscore\n ? {\n environmental: entity.scores.sentifi?.eScore?.toFixed(2),\n social: entity.scores.sentifi?.sScore?.toFixed(2),\n governance: entity.scores.sentifi?.gScore?.toFixed(2),\n }[subscore]\n : entity.scores.sentifi?.esgScore?.toFixed(2),\n canRequest: !!(\n entity.meta.esgSentifiHasScore &&\n entity.meta.esgSentifiHasPermission &&\n !entity.meta.esgSentifiHasCompany\n ),\n canUnlock: !!(entity.meta.esgSentifiHasScore && !entity.meta.esgSentifiHasPermission),\n requested:\n entity.meta.esgSentifiRequestState === 'IN_PROGRESS' ||\n !!(\n entity.meta.esgSentifiHasScore &&\n entity.meta.esgSentifiHasCompany &&\n entity.meta.esgSentifiHasPermission\n ),\n requiresDataUpload: false,\n },\n [ratingTypes.CLIMATE_STRESS_TEST]: {\n score: {\n climateLossOrderly: entity.scores.cstOrderly.climateLoss?.toFixed(2),\n climateLossDisorderly: entity.scores.cstDisorderly.climateLoss?.toFixed(2),\n climateLossHotHouse: entity.scores.cstHotHouse.climateLoss?.toFixed(2),\n physicalRiskLossOrderly: entity.scores.cstOrderly.physicalRiskLoss?.toFixed(2),\n physicalRiskLossDisorderly: entity.scores.cstDisorderly.physicalRiskLoss?.toFixed(2),\n physicalRiskLossHotHouse: entity.scores.cstHotHouse.physicalRiskLoss?.toFixed(2),\n transitionRiskLossOrderly: entity.scores.cstOrderly.transitionRiskLoss?.toFixed(2),\n transitionRiskLossDisorderly: entity.scores.cstDisorderly.transitionRiskLoss?.toFixed(2),\n transitionRiskLossHotHouse: entity.scores.cstHotHouse.transitionRiskLoss?.toFixed(2),\n }[subscore!],\n canRequest: canRequestEsg,\n canUnlock:\n !entity.meta.esgPurchased &&\n entity.meta.artifactIdType !== ArtifactIdType.EasyNumber &&\n entity.meta.esgRequestState !== 'UNABLE_TO_REQUEST',\n requested: entity.meta.esgRequestState === RatingStatus.IN_PROGRESS,\n requiresDataUpload:\n (entity.meta.esgRequestState === RatingStatus.TO_DO ||\n entity.meta.esgRequestState === RatingStatus.IN_PROGRESS) &&\n !!entity.meta.esgCustomScore,\n },\n [ratingTypes.FUNDS]: {} as ScoreData,\n };\n\n return result;\n};\n","import { fetchApi } from 'shared/functions/fetchApi';\n\nconst delay = time => new Promise(response => setTimeout(response, time));\n\nexport const downloadServiceWithRetries = async (path, retries) => {\n let error;\n\n // We wait 5 seconds before the next request because the document is being generated\n // in the database right now. If the document is generated then it will be returned\n // immediately and the loop will end\n for (let i = 0; i < retries; i += 1) {\n try {\n /* eslint-disable no-await-in-loop */\n if (i !== 0) await delay(5000);\n return await fetchApi(path).then(res => res.json());\n /* eslint-disable no-await-in-loop */\n } catch (err) {\n error = err;\n }\n }\n\n throw error;\n};\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { Typography, Box, Avatar, Grid } from '@mui/material';\nimport LockOpenIcon from '@mui/icons-material/LockOpen';\nimport format from 'date-fns/format';\nimport addDays from 'date-fns/addDays';\n\nimport { usePrevious } from 'shared/hooks';\nimport { Loader } from 'ui';\nimport { shortDateFormat } from 'shared/constants/dateFormat';\n\nimport { getProductById } from '../../selectors/shopSelectors';\n\nconst useStyles = makeStyles(theme => ({\n avatar: {\n width: 200,\n height: 200,\n backgroundColor: theme.palette.primary.contrastText,\n boxShadow: '0 4px 4px 3px rgba(155, 155, 155, 0.3)',\n margin: '0 auto',\n },\n lockOpenIcon: {\n fontSize: 100,\n color: '#0cd4a4',\n fontWeight: 'bold',\n },\n}));\n\nconst ShopProductFreeSubscriptionModal = ({ open, onClose, onConfirm, data }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const startDate = new Date();\n const endDate = addDays(startDate, data.validityDays - data.cancellationPeriod);\n\n const watchedProduct = useSelector(getProductById(data.id));\n\n const [isSuccess, setIsSuccess] = useState(data.purchased);\n const [isLoading, setIsLoading] = useState(false);\n\n const handleConfirm = () => {\n setIsLoading(true);\n onConfirm();\n };\n\n const isPurchased = usePrevious(data.purchased);\n\n useEffect(() => {\n if (!isPurchased && watchedProduct.purchased) {\n setIsSuccess(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [watchedProduct.purchased]);\n\n return (\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>\n <Typography variant=\"h4\">{data.name}</Typography>\n </DialogTitle>\n <DialogContent>\n {isSuccess ? (\n <Box width={500} height={500} py={12}>\n <Grid container alignContent=\"center\" justifyContent=\"center\">\n <Grid item>\n <Avatar className={classes.avatar}>\n <LockOpenIcon className={classes.lockOpenIcon} />\n </Avatar>\n <Box mt={4}>\n <Typography variant=\"h6\">{t('Your subscription is active')}</Typography>\n </Box>\n </Grid>\n </Grid>\n </Box>\n ) : (\n <>\n <Box>\n <Typography>\n {t(\n 'We are delighted about your interest in our offering. Please click “Confirm†to start the subscription or “Cancel†to return to the product page. ',\n )}\n </Typography>\n </Box>\n\n <Box mt={4}>\n <Typography>\n {t('Subscription:')} <strong>{data.name}</strong>\n </Typography>\n <Typography>\n {t('Start:')} <strong>{format(startDate, shortDateFormat)}</strong>\n </Typography>\n <Typography>\n {t('Cancel by:')} <strong>{format(endDate, shortDateFormat)}</strong>\n </Typography>\n <Typography>\n {t('Price:')} <strong>{t('Free of charge')}</strong>\n </Typography>\n </Box>\n\n <Box mt={4}>\n <Typography>\n {t(\n 'The subscription provides full access to the content described in the product description for you and your organization.',\n )}\n </Typography>\n </Box>\n <Box mt={4}>\n <Typography>\n {t(\n 'You may cancel the subscription by visiting “My Purchases†in the subscription center. Please select the subscription and chose “Cancel†from the drop-down menu.',\n )}\n </Typography>\n </Box>\n <Box mt={4}>\n <Typography>\n {t(\n 'Because the subscription is free of charge, no further action is required from your side.',\n )}\n </Typography>\n </Box>\n <Box mt={4}>\n <Typography>\n {t(\n 'If you have any further questions, please contact your personal advisor or the Service Center.',\n )}\n </Typography>\n </Box>\n </>\n )}\n </DialogContent>\n <DialogActions>\n {isSuccess ? (\n <Grid container justifyContent=\"flex-end\">\n <Grid item>\n <Button color=\"primary\" variant=\"contained\" onClick={onClose}>\n {t('Close')}\n </Button>\n </Grid>\n </Grid>\n ) : (\n <>\n <Button onClick={onClose} color=\"primary\" variant=\"outlined\">\n {t('Cancel')}\n </Button>\n {isLoading ? (\n <Box px={2}>\n <Loader />\n </Box>\n ) : (\n <Button onClick={handleConfirm} color=\"primary\" variant=\"contained\" autoFocus>\n {t('Confirm')}\n </Button>\n )}\n </>\n )}\n </DialogActions>\n </Dialog>\n );\n};\n\nShopProductFreeSubscriptionModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n data: PropTypes.shape({\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n validityDays: PropTypes.number.isRequired,\n cancellationPeriod: PropTypes.number.isRequired,\n purchased: PropTypes.bool.isRequired,\n }).isRequired,\n};\n\nexport { ShopProductFreeSubscriptionModal };\n","export const shopProductsSortOptions = {\n name: 'name',\n price: 'price',\n};\n","import { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { cofaceAccessTypes } from 'shared/constants/creditReview/cofaceAccessTypes';\nimport { creditReviewRequestTooltips } from 'shared/constants/creditReview/creditReviewRequestTooltips';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { useCofaceContract } from '../useCofaceContract/useCofaceContract';\n\nexport const useConfirmedRequest = ({ handleRequest, confirmationModalOpen }) => {\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const [pendingConfirmation, setPendingConfirmation] = useState(false);\n const { confirmed, autoConfirm } = useSelector(({ entity }) => entity.requestConfirmation);\n const { cofaceAccessType } = useCofaceContract();\n\n const scheduleRequest = () => {\n const isRequestAvailable = cofaceAccessType === cofaceAccessTypes.REQUEST_ALLOWED;\n\n if (!isRequestAvailable) {\n dispatch(\n addNotificationAction({\n message: t(creditReviewRequestTooltips[cofaceAccessType]),\n variant: 'error',\n }),\n );\n return;\n }\n\n if (!autoConfirm && confirmationModalOpen) {\n confirmationModalOpen();\n }\n setPendingConfirmation(true);\n };\n\n useEffect(() => {\n if (pendingConfirmation && (confirmed || autoConfirm)) {\n handleRequest();\n setPendingConfirmation(false);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [confirmed, autoConfirm, pendingConfirmation]);\n\n return { scheduleRequest };\n};\n","const creditRatingStatuses = {\n notFound: 'NOT_FOUND',\n forbidden: 'FORBIDDEN',\n};\n\nexport { creditRatingStatuses };\n","import React, {FC} from 'react';\nimport {Box, Dialog} from \"@scope/scope-one-ui/core\";\nimport {ButtonVariant} from \"@scope/scope-one-ui/core/Button/Button.d\";\n\n\ntype ConfirmModalProps = {\n title: string;\n text: string;\n confirmLabel: string;\n onClose: (set: boolean) => void;\n onConfirm: () => void;\n open: boolean;\n variant?: ButtonVariant;\n};\n\nexport const ConfirmModal: FC<ConfirmModalProps> = ({open, title, text, confirmLabel, onClose, onConfirm, variant}) => {\n return (\n <Dialog variant={variant} open={open} onClose={() => onClose(false)} title={title} confirmLabel={confirmLabel}\n onConfirm={onConfirm}>\n <Box p={3}>\n {text}\n </Box>\n </Dialog>\n );\n};\n","import { fetchApi, getUserId } from 'shared/functions';\n\nexport const postOrder = async ({ id, type, frequency, productCategory, purchaseType }) => {\n const userId = getUserId();\n\n const resourceUrl = `/storefront/users/${userId}/orders`;\n\n const params = {\n method: 'POST',\n body: JSON.stringify([\n { artifactId: id, artifactType: type, frequency, productCategory, purchaseType },\n ]),\n };\n\n const response = await fetchApi(resourceUrl, params);\n\n return response.json();\n};\n\nexport const postOrderMany = async ({ products, isin = false }) => {\n const userId = getUserId();\n\n const resourceUrl = `/storefront/users/${userId}/orders${\n isin ? '/isin_upload?source=ISINUPLOAD' : ''\n }`;\n\n const params = {\n method: 'POST',\n body: JSON.stringify(products),\n };\n\n const response = await fetchApi(resourceUrl, params);\n\n return isin ? response : response.json();\n};\n","import { useSelector } from 'react-redux';\nimport { UseAccessParams } from \"shared/types/UseAccessParams\";\nimport { checkAccess } from \"./checkAccess\";\n\n\nexport const useAccess = ({ environment, permission, licence, role, shopPermissions }: UseAccessParams) => {\n const auth = useSelector((state: any) => state.auth);\n return checkAccess({ environment, permission, licence, role, shopPermissions, auth })\n};\n","var _rect, _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgUnlock = function SvgUnlock(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"unlock_svg__feather unlock_svg__feather-unlock\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 3,\n y: 11,\n width: 18,\n height: 11,\n rx: 2,\n ry: 2\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7 11V7a5 5 0 019.9-1\"\n })));\n};\n\nexport default SvgUnlock;","import Chip from '@mui/material/Chip';\nimport styled from 'styled-components';\nimport { theme } from '../../../theme';\n\nconst { orangeAccent } = theme.palette.custom;\n\nexport const OrangeRatingChip = styled(Chip)`\n border: 1px solid ${orangeAccent};\n color: ${orangeAccent};\n`;\n","export const organisationAdmin = 'ORGANISATION_ADMIN';\n\nexport const standardRolesTypes = {\n ULTIMATE_PARENT_USER: 'ULTIMATE_PARENT_USER',\n ORGANISATION_USER: 'ORGANISATION_USER',\n ANALYST: 'ANALYST',\n PERSONAL_ADVISOR: 'PERSONAL_ADVISOR',\n SERVICE_CENTRE: 'SERVICE_CENTRE',\n DEMO_USER: 'DEMO_USER',\n PORTAL_USER: 'PORTAL_USER',\n};\n\nexport const allStandardRolesTypes = Object.keys(standardRolesTypes);\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport InputAdornment from '@mui/material/InputAdornment';\nimport TextField from '@mui/material/TextField';\nimport CloseIcon from '@mui/icons-material/Close';\nimport SearchIcon from '@mui/icons-material/Search';\n\nimport { ContactBox, Loader, PageTitle } from 'ui';\nimport { fetchAnalysts } from 'services';\nimport { useContact } from 'shared/hooks';\nimport { contactTypes, contactTargets } from 'shared/constants/contactBox';\n\nconst useStyles = makeStyles(theme => ({\n analyst: {\n '&:not(:last-child)': {\n marginBottom: theme.spacing(3),\n },\n },\n button: {\n cursor: 'pointer',\n },\n icon: {\n opacity: 0.5,\n },\n form: {\n marginBottom: theme.spacing(2),\n },\n}));\n\nconst Analysts = () => {\n const classes = useStyles();\n const { t } = useTranslation();\n const contact = useContact();\n const [value, setValue] = useState('');\n const [analysts, setAnalysts] = useState([]);\n const [isPending, setIsPending] = useState(true);\n\n const handleChange = e => {\n setValue(e.target.value);\n };\n\n const handleClear = () => setValue('');\n\n const requestAnalysts = ({ query } = {}) =>\n fetchAnalysts({ query })\n .then(({ data }) => {\n setAnalysts(\n data.map(({ analystTeams, firstName, name, jobTitle, followed, userId }) => ({\n analystTeams,\n firstName,\n lastName: name,\n jobTitle,\n followed,\n userId,\n })),\n );\n })\n .then(() => setIsPending(false));\n\n const handleSubmit = e => {\n e.preventDefault();\n setIsPending(true);\n requestAnalysts({ query: value });\n };\n\n useEffect(() => {\n requestAnalysts();\n }, []);\n\n const handleContact = (type, target) => async ({ subject, message, origin }) => {\n contact({ type, subject, message, origin, target });\n };\n\n return (\n <Grid container justifyContent=\"center\">\n <Grid item xs={8}>\n <PageTitle>{t('Analysts')}</PageTitle>\n <form onSubmit={handleSubmit} className={classes.form}>\n <TextField\n placeholder={t('Search by name')}\n variant=\"outlined\"\n fullWidth\n onChange={handleChange}\n value={value}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon className={classes.icon} />\n </InputAdornment>\n ),\n endAdornment: !value.length ? null : (\n <InputAdornment position=\"end\">\n <CloseIcon\n className={`${classes.button} ${classes.icon}`}\n onClick={handleClear}\n />\n </InputAdornment>\n ),\n }}\n />\n </form>\n {isPending ? (\n <Loader />\n ) : (\n analysts.map(analyst => (\n <div key={analyst.userId} className={classes.analyst}>\n <ContactBox\n compact\n showMessageButton={false}\n {...analyst}\n onRequestCall={handleContact(contactTypes.CALL, contactTargets.ANALYST)}\n className={classes.analyst}\n />\n </div>\n ))\n )}\n </Grid>\n </Grid>\n );\n};\n\nexport { Analysts };\n","const { newsArtifactsTypes } = require('shared/constants/artifactTypes');\n\nexport const productLineByAnnoucementType = {\n [newsArtifactsTypes.COMMENTARY]: 'Research',\n [newsArtifactsTypes.RATING_NEWS]: 'Rating',\n [newsArtifactsTypes.RESEARCH]: 'Research',\n [newsArtifactsTypes.MONITORING_NOTES]: 'Research',\n};\n","import React, { useEffect, useState } from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { useParams } from 'react-router-dom';\nimport clsx from 'clsx';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport Button from '@mui/material/Button';\nimport Card from '@mui/material/Card';\nimport CardHeader from '@mui/material/CardHeader';\nimport CardMedia from '@mui/material/CardMedia';\nimport CardContent from '@mui/material/CardContent';\nimport Typography from '@mui/material/Typography';\nimport Divider from '@mui/material/Divider';\nimport Box from '@mui/material/Box';\nimport LockIcon from '@mui/icons-material/Lock';\n\nimport { ContactBox, Loader, LinkText } from 'ui';\n\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\n\nimport { formatDate, generateImageUrl, sanitizeHtml, allowedForPortfolio } from 'shared/functions';\nimport { leadAnalystParser } from 'shared/parsers';\nimport { orderTypes } from 'shared/constants/orderTypes';\nimport { ShopRelatedProductsModal } from 'modules/shop/components/ShopRelatedProductsModal';\nimport { artifactTypes, artifactTypesLabels } from 'shared/constants/artifactTypes';\nimport { usePortfolioModals } from 'shared/hooks';\nimport { getAnnouncementAction } from 'store/announcement/announcementActions';\nimport { shopProductsCategories } from 'modules/shop/shared/constants/shopProductsCategories';\nimport { productLineByAnnoucementType } from 'shared/mappings/annoucementTypesToProductLinesMapping';\nimport { fetchEntities } from 'services';\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { ItemType } from 'shared/types/portfolios';\n\nconst useStyles = makeStyles(theme => ({\n card: {\n position: 'relative',\n },\n analyst: {\n marginBottom: theme.spacing(3),\n\n '&:not(:first-child)': {\n marginTop: theme.spacing(3),\n },\n },\n relatedArtifacts: {\n marginTop: theme.spacing(3),\n },\n restrictedArea: {\n marginTop: 0,\n marginBottom: theme.spacing(2),\n },\n teaser: {\n marginBottom: theme.spacing(2),\n },\n bold: {\n fontWeight: 500,\n },\n link: {\n textDecoration: 'underline',\n cursor: 'pointer',\n },\n restricted: {\n textAlign: 'center',\n },\n lockIcon: {\n color: theme.palette.primary.main,\n fontSize: 100,\n },\n cover: {\n position: 'absolute',\n justifyContent: 'center',\n alignItems: 'center',\n display: 'flex',\n top: 0,\n width: '100%',\n height: '100%',\n background: 'rgba(255,255,255,.8)',\n zIndex: 11,\n },\n unlockButton: {\n height: 50,\n padding: '5px 30px',\n fontSize: '1rem',\n },\n lockContainer: {\n height: '100%',\n textAlign: 'center',\n paddingTop: 40,\n paddingBottom: 40,\n },\n}));\n\nconst Announcement = () => {\n const classes = useStyles();\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const { announcementId } = useParams();\n\n const announcement = useSelector(state => state.announcement);\n const { data, shouldRefresh } = announcement;\n\n const { pressContact } = data;\n const leadAnalysts = data.leadAnalysts\n ? data.leadAnalysts.map(analyst => leadAnalystParser(analyst))\n : [];\n const relatedArtifacts = data.relatedArtifacts ? data.relatedArtifacts : [];\n\n const getAnnouncement = () => dispatch(getAnnouncementAction({ id: announcementId }));\n\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n\n const [isRelatedProductsModalOpen, setIsRelatedProductsModalOpen] = useState(false);\n\n const [relatedSubscriptionData, setRelatedSubscriptionData] = useState({\n category: shopProductsCategories.creditAnalysis,\n countriesAndIndustries: [],\n productLine: productLineByAnnoucementType[data.artifactType],\n });\n\n const toggleRelatedProductsModal = () =>\n setIsRelatedProductsModalOpen(!isRelatedProductsModalOpen);\n\n useEffect(() => {\n getAnnouncement();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (shouldRefresh) getAnnouncement();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldRefresh]);\n\n const relatedEntities = data.relatedArtifacts\n ? data.relatedArtifacts.filter(({ artifactType }) => artifactType === artifactTypes.ENTITY)\n : [];\n\n const entitiesCountriesAndIndustries = relatedEntities.map(({ industries, countryCode }) => ({\n country: countryCode,\n industries,\n }));\n\n const fetchData = async () => {\n const response = await fetchEntities({\n filter: { issuerIds: relatedEntities.map(({ artifactId }) => artifactId) },\n });\n\n if (response) {\n setRelatedSubscriptionData({\n category: shopProductsCategories.creditAnalysis,\n productLine: productLineByAnnoucementType[data.artifactType],\n countriesAndIndustries: entitiesCountriesAndIndustries,\n });\n }\n };\n\n useEffect(() => {\n setRelatedSubscriptionData({\n category: shopProductsCategories.creditAnalysis,\n productLine: productLineByAnnoucementType[data.artifactType],\n countriesAndIndustries: data.industries\n ? data.industries.map(industry => ({\n country: null,\n industries: [industry],\n }))\n : [],\n });\n\n if (data.relatedArtifacts && relatedEntities && relatedEntities.length) {\n fetchData();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data]);\n\n const subheaderText =\n data.artifactType && data.publicationDate\n ? `${formatDate(data.publicationDate)} - ${artifactTypesLabels[data.artifactType]}`\n : '';\n\n const { publisher } = data;\n const contactPhone =\n publisher && publisher.officePhone && `${t('Phone')}: ${publisher.officePhone}`;\n\n const legalName = publisher && publisher.name && `${publisher.name} ${publisher.legalForm || ''}`;\n\n const itemsForPortfolio = {\n items: { [data.id]: data },\n itemIds: { [data.id]: data.id },\n count: 1,\n type: ItemType.SCOPEONEID,\n };\n\n const handleConfirm = () => {\n getAnnouncement();\n setIsRelatedProductsModalOpen(false);\n };\n\n return <>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <Grid container spacing={3} alignItems=\"center\" justifyContent=\"flex-end\">\n <Grid item>\n {allowedForPortfolio(data.artifactType) && (\n <Button variant=\"outlined\" size=\"small\" onClick={addToPortfolio.show}>\n {t('Add to portfolio')}\n </Button>\n )}\n </Grid>\n </Grid>\n </Grid>\n <Grid item xs={12} md={8}>\n <Card className={classes.card}>\n {data.restricted && (\n <Box className={classes.cover}>\n <Grid\n container\n direction=\"column\"\n justifyContent=\"space-between\"\n className={classes.lockContainer}\n >\n <Grid item>\n <LockIcon className={classes.lockIcon} />\n </Grid>\n <Grid item>\n <Button\n color=\"primary\"\n variant=\"contained\"\n className={classes.unlockButton}\n onClick={toggleRelatedProductsModal}\n >\n {t('Unlock')}\n </Button>\n </Grid>\n </Grid>\n {isRelatedProductsModalOpen && relatedSubscriptionData && (\n <ShopRelatedProductsModal\n data={relatedSubscriptionData}\n open={isRelatedProductsModalOpen}\n onClose={toggleRelatedProductsModal}\n onConfirm={handleConfirm}\n />\n )}\n </Box>\n )}\n {(announcement.isPending || !data.id) && <Loader cover />}\n {subheaderText && (\n <CardHeader\n subheader={\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {subheaderText}\n </Typography>\n }\n />\n )}\n {!!data.imageFilename && \n ![artifactTypes.RESEARCH, artifactTypes.RATING_NEWS, \n artifactTypes.MONITORING_NOTES].includes(data.artifactType) &&\n (\n <CardMedia\n component=\"img\"\n image={generateImageUrl(data.imageFilename, data.source)}\n title={data.shortTitle}\n />\n )}\n <CardContent>\n <Typography gutterBottom variant=\"h5\" component=\"h2\">\n {data.title}\n </Typography>\n <Typography paragraph color=\"textSecondary\">\n {data.shortText}\n </Typography>\n </CardContent>\n <CardContent\n className={clsx({\n [classes.restricted]: data.restricted,\n })}\n >\n {!data.restricted && (\n <Typography component=\"span\">{sanitizeHtml(data.text)}</Typography>\n )}\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} md={4}>\n {publisher && (\n <Card className={classes.analyst}>\n <CardContent>\n <Typography gutterBottom variant=\"h5\" component=\"h2\">\n {t('Contacts')}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {legalName}\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {contactPhone}\n </Typography>\n {pressContact && (\n <Typography variant=\"body2\" color=\"textSecondary\" component=\"p\">\n {`${pressContact.firstName} ${pressContact.lastName}: `}\n <a href={`mailto:${pressContact.email}`}>{pressContact.email}</a>\n </Typography>\n )}\n </CardContent>\n </Card>\n )}\n {leadAnalysts.length > 0 && <Divider />}\n {leadAnalysts.map(analyst => (\n <div key={`${analyst.firstName}-${analyst.lastName}`} className={classes.analyst}>\n <ContactBox {...analyst} showFollowRow />\n </div>\n ))}\n {relatedArtifacts.length > 0 && (\n <>\n {publisher && <Divider />}\n <Card className={clsx(publisher && classes.relatedArtifacts)}>\n <CardContent>\n <Typography gutterBottom variant=\"h5\" component=\"h2\">\n {t('Related entities and instruments')}\n </Typography>\n {relatedArtifacts.map((artifact, index) => {\n const isLast = index === relatedArtifacts.length - 1;\n const route =\n artifact.artifactType === orderTypes.ENTITY ? 'entities' : 'instruments';\n return (\n <div key={artifact.artifactId}>\n <Box pt={2} pb={!isLast ? 2 : 0}>\n <Typography variant=\"body1\" color=\"primary\" component=\"p\">\n <LinkText\n to={`/${route}/${artifact.artifactId}`}\n label={artifact.name}\n />\n </Typography>\n </Box>\n {!isLast && <Divider />}\n </div>\n );\n })}\n </CardContent>\n </Card>\n </>\n )}\n </Grid>\n </Grid>\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n itemsData={itemsForPortfolio}\n itemType={data.artifactType}\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={itemsForPortfolio}\n itemType={data.artifactType}\n />\n </>;\n};\n\nexport { Announcement };\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useParams } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { Loader, TabsPanel } from 'ui';\nimport { EntitiesTable } from 'modules/common';\nimport { useFilterOptions } from 'modules/ESG/services/esgLendingService';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { getEsgCoverageAction } from 'store/esgCoverage/esgCoverageActions';\n\nconst ESGCoverage = () => {\n const { t } = useTranslation();\n const { query } = useParams();\n\n const esgCoverageData = useSelector(({ esgCoverage }) => esgCoverage);\n\n const regs = useFilterOptions();\n\n const isIndustrySearch = query.includes('i-');\n\n const esgContractData = useSelector(({ esgContract }) => esgContract);\n\n const filteredIndustry = regs.data?.industries\n .filter((val) => `i-${val.industryCode}` === query)\n .map(({ industryCode, industryName }) => ({\n code: industryCode,\n name: industryName,\n industryCode,\n industryName,\n }))[0];\n\n const filteredRegions = regs.data?.continents\n .filter((item) => item.continentCode.includes(query))\n .flatMap((item) =>\n item.countries.map((country) => ({\n name: country.countryName,\n iso: country.countryCode,\n continent: item.continentName,\n continentCode: query,\n })),\n );\n\n if (regs.loading || esgContractData.isPending) {\n return <Loader center />;\n }\n\n const initialFilter = isIndustrySearch\n ? {\n industries: [filteredIndustry.name],\n }\n : {\n countries: filteredRegions.map((value) => value.iso),\n validated: true,\n };\n\n const initialFilterModalValues = isIndustrySearch\n ? {\n industries: [filteredIndustry],\n }\n : { countries: filteredRegions };\n\n return (\n <>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('ESG coverage')}</Typography>\n </Box>\n <TabsPanel active=\"esgCoverageData\">\n <div label={t('Entities')} value=\"esgCoverageData\" counter={esgCoverageData?.total || 0}>\n <EntitiesTable\n dataSelector={esgCoverageData}\n actionCreator={getEsgCoverageAction(regs)}\n constantFilter={{ withRatingOnly: true }}\n ratingType={ratingTypes.ESG_IMPACT}\n initialFilter={initialFilter}\n initialFilterModalValues={initialFilterModalValues}\n />\n </div>\n </TabsPanel>\n </>\n );\n};\n\nexport { ESGCoverage };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Grid from '@mui/material/Grid';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { TilesLabel } from 'ui/Labels';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: theme.spacing(2, 5),\n },\n items: {\n margin: theme.spacing(0, -2, -2),\n },\n}));\n\nconst CompanyBasicData = ({ items }) => {\n const classes = useStyles();\n\n return (\n <Grid container direction=\"row\" alignItems=\"center\" className={classes.container}>\n <Grid container className={classes.items}>\n {items\n .filter(({ value }) => value && value !== '-')\n .map(\n ({ label, value, onClick }) =>\n label &&\n value && (\n <Grid item xs={2.4} key={label}>\n <TilesLabel label={label} value={value} onClick={onClick} />\n </Grid>\n ),\n )}\n </Grid>\n </Grid>\n );\n};\n\nCompanyBasicData.propTypes = {\n items: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\n onClick: PropTypes.func,\n }),\n ).isRequired,\n};\n\nexport default CompanyBasicData;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Grid from '@mui/material/Grid';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Typography from '@mui/material/Typography';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n padding: theme.spacing(3, 5),\n },\n}));\n\nconst CompanyHeader = ({ title, action }) => {\n const classes = useStyles();\n\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n className={classes.container}\n >\n <Grid item>\n <Typography variant=\"h5\">{title}</Typography>\n </Grid>\n <Grid item>{action}</Grid>\n </Grid>\n );\n};\n\nCompanyHeader.defaultProps = {\n action: undefined,\n};\n\nCompanyHeader.propTypes = {\n title: PropTypes.string.isRequired,\n action: PropTypes.node,\n};\n\nexport default CompanyHeader;\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Paper from '@mui/material/Paper';\nimport Divider from '@mui/material/Divider';\nimport { useTranslation } from 'react-i18next';\nimport Box from '@mui/material/Box';\n\nimport { Loader } from 'ui';\nimport { CompanyHeader, CompanyBasicData, CompanyTabs } from 'ui/Company';\nimport { Button, Menu, MenuItem } from '@mui/material';\nimport KeyboardArrowDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport KeyboardArrowUpIcon from '@mui/icons-material/KeyboardArrowUp';\nimport { theme } from 'theme';\n\nconst useStyles = makeStyles(() => ({\n container: {\n position: 'relative',\n margin: theme.spacing(2, 0),\n padding: theme.spacing(0, 2),\n },\n title: {\n paddingLeft: theme.spacing(3),\n },\n divider: {\n height: 4,\n background: theme.palette.grey[100],\n },\n yearSelectBoxContainer: {\n display: 'flex',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n paddingBottom: theme.spacing(1.5),\n },\n yearButton: {\n maxWidth: theme.spacing(16),\n lineHeight: 1.2,\n },\n}));\n\nconst CompanyPanel = ({\n loading,\n title,\n action,\n items,\n activeModule,\n onChangeModule,\n modules,\n availableYears,\n selectedYear,\n onYearChange,\n variant,\n}) => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n const [menuAnchorEl, setMenuAnchorEl] = useState(null);\n\n const menuOpen = Boolean(menuAnchorEl);\n\n const handleMenuClick = ({ currentTarget }) => {\n setMenuAnchorEl(currentTarget);\n };\n\n const handleMenuClose = () => {\n setMenuAnchorEl(null);\n };\n\n const handleMenuItemClick = (item) => {\n handleMenuClose();\n onYearChange(item);\n return null;\n };\n\n return (\n <Paper variant=\"elevation\" elevation={3} className={classes.container}>\n {loading && <Loader cover />}\n <CompanyHeader title={title} action={action} />\n <Divider className={classes.divider} />\n <CompanyBasicData items={items} />\n <Divider className={classes.divider} />\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n gridGap={theme.spacing(2)}\n >\n <CompanyTabs\n active={activeModule}\n onChange={onChangeModule}\n modules={modules}\n variant={variant}\n />\n {availableYears && availableYears.length > 0 && (\n <>\n <Button\n className={classes.yearButton}\n size=\"small\"\n variant=\"outlined\"\n onClick={\n availableYears.length === 1\n ? () => handleMenuItemClick(availableYears[0])\n : handleMenuClick\n }\n endIcon={\n availableYears.length > 1 &&\n (menuOpen ? <KeyboardArrowUpIcon /> : <KeyboardArrowDownIcon />)\n }\n disabled={availableYears.length === 1 ? availableYears[0].disabled : false}\n >\n {t(selectedYear ? `${selectedYear.year} Score overview` : 'Select year')}\n </Button>\n <Menu\n anchorEl={menuAnchorEl}\n getContentAnchorEl={null}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'center',\n }}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'center',\n }}\n open={menuOpen}\n onClose={handleMenuClose}\n >\n {availableYears.map((menuItem) => (\n <MenuItem\n key={menuItem.latestUpdate}\n onClick={() => handleMenuItemClick(menuItem)}\n disabled={menuItem.disabled}\n >\n {`${menuItem.year} Score overview`}\n </MenuItem>\n ))}\n </Menu>\n </>\n )}\n </Box>\n </Paper>\n );\n};\n\nCompanyPanel.defaultProps = {\n action: undefined,\n loading: false,\n availableYears: undefined,\n selectedYear: undefined,\n onYearChange: undefined,\n};\n\nCompanyPanel.propTypes = {\n loading: PropTypes.bool,\n title: PropTypes.string.isRequired,\n action: PropTypes.node,\n items: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n onClick: PropTypes.func,\n }),\n ).isRequired,\n activeModule: PropTypes.string.isRequired,\n onChangeModule: PropTypes.func.isRequired,\n modules: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n ).isRequired,\n availableYears: PropTypes.array,\n selectedYear: PropTypes.object,\n onYearChange: PropTypes.func,\n variant: PropTypes.string,\n};\n\nexport default CompanyPanel;\n","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgArrowUpRight = function SvgArrowUpRight(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"arrow-up-right_svg__feather arrow-up-right_svg__feather-arrow-up-right\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M7 17L17 7M7 7h10v10\"\n })));\n};\n\nexport default SvgArrowUpRight;","import React, { useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n padding: theme.spacing(3, 0.3, 0),\n },\n}));\n\nconst CompanyTabs = ({ active, onChange, modules, variant = 'entity' }) => {\n const classes = useStyles();\n const data = useSelector((state) => state[variant].data || {});\n\n const { documents = [], methodologies = [], issueCount, ratingNewsCount, researchCount } = data;\n const documentsTotal = documents.length + methodologies.length;\n const availableModules = modules.filter(({ spv }) => !data.spv || spv);\n\n const getLabel = (value, label) => {\n if (value === 'rating-news') return `${label} (${ratingNewsCount || 0})`;\n if (value === 'research') return `${label} (${researchCount || 0})`;\n if (value === 'instruments') return `${label} (${issueCount || 0})`;\n if (value === 'documents') return `${label} (${documentsTotal || 0})`;\n\n return label;\n };\n\n useEffect(() => {\n if (availableModules.some((item) => item.value === active)) return;\n\n onChange('companyModule', availableModules[0].value);\n }, [active, availableModules, onChange]);\n\n return (\n <div className={classes.container}>\n <Tabs\n value={active}\n indicatorColor=\"primary\"\n textColor=\"primary\"\n onChange={(_, value) => onChange('companyModule', value)}\n aria-label=\"Rating module tabs\"\n >\n {availableModules.map(({ value, label }) => (\n <Tab key={value} label={getLabel(value, label)} value={value} />\n ))}\n </Tabs>\n </div>\n );\n};\n\nCompanyTabs.propTypes = {\n variant: PropTypes.string,\n active: PropTypes.string.isRequired,\n onChange: PropTypes.func.isRequired,\n modules: PropTypes.arrayOf(\n PropTypes.shape({\n label: PropTypes.string.isRequired,\n value: PropTypes.string.isRequired,\n }),\n ).isRequired,\n};\n\nexport default CompanyTabs;\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport isNil from 'lodash/isNil';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Paper from '@mui/material/Paper';\nimport Box from '@mui/material/Box';\n\nimport {\n getInstrumentRatingNewsAction,\n getInstrumentResearchAction,\n} from 'store/instrument/instrumentActions';\nimport { useArtifacts } from 'shared/hooks';\nimport { Artifacts, TabsPanel } from 'ui';\nimport { companyInstrumentTabs } from 'shared/constants/company';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n margin: theme.spacing(2, 0, 0),\n },\n}));\n\nexport const Research = () => {\n const instrument = useSelector((state) => state.instrument);\n const { research, isResearchPending, isRatingRequestPending, ratingRequestError } = instrument;\n const { data, total } = research;\n\n const {\n limit,\n handleChangeArtifactsPage,\n handleArtifactClick,\n currentPage,\n handleChangeRowsPerPage,\n } = useArtifacts({\n query: instrument.data.name,\n getArtifactsAction: getInstrumentResearchAction,\n getArtifactsDataActionParams: {\n industryCode: instrument.data.industryCode,\n },\n customLimit: 10,\n });\n\n return (\n <Box p={2}>\n <Artifacts\n data={data}\n isPending={isResearchPending || isRatingRequestPending}\n total={total}\n limit={limit}\n onItemClick={handleArtifactClick}\n onChangePage={handleChangeArtifactsPage}\n ratingRequestError={ratingRequestError}\n currentPage={currentPage}\n onChangeRowsPerPage={handleChangeRowsPerPage}\n />\n </Box>\n );\n};\n\nexport const RatingNews = () => {\n const instrument = useSelector((state) => state.instrument);\n const {\n ratingNews,\n isRatingNewsPending,\n isRatingRequestPending,\n ratingRequestError,\n data: { entityId },\n } = instrument;\n const { data, total } = ratingNews;\n\n const {\n limit,\n handleChangeArtifactsPage,\n handleArtifactClick,\n currentPage,\n handleChangeRowsPerPage,\n } = useArtifacts({\n query: instrument.data.name,\n getArtifactsAction: getInstrumentRatingNewsAction,\n getArtifactsDataActionParams: { entityId },\n customLimit: 10,\n });\n\n return (\n <Box p={2}>\n <Artifacts\n data={data}\n isPending={isRatingNewsPending || isRatingRequestPending}\n total={total}\n limit={limit}\n onItemClick={handleArtifactClick}\n onChangePage={handleChangeArtifactsPage}\n ratingRequestError={ratingRequestError}\n currentPage={currentPage}\n onChangeRowsPerPage={handleChangeRowsPerPage}\n />\n </Box>\n );\n};\n\nexport const Tabs = ({ active, onChange }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const instrument = useSelector((state) => state.instrument);\n const { ratingNews, research } = instrument;\n const { total: ratingNewsTotal } = ratingNews;\n const { total: researchTotal } = research;\n\n return (\n <Paper variant=\"elevation\" elevation={3} className={classes.container}>\n <TabsPanel active={active} onChange={onChange} lazy={false}>\n <div\n label={t(companyInstrumentTabs[0].label)}\n value={companyInstrumentTabs[0].value}\n counter={isNil(ratingNewsTotal) ? null : ratingNewsTotal}\n >\n <RatingNews />\n </div>\n <div\n label={t(companyInstrumentTabs[1].label)}\n value={companyInstrumentTabs[1].value}\n counter={isNil(researchTotal) ? null : researchTotal}\n >\n <Research />\n </div>\n </TabsPanel>\n </Paper>\n );\n};\n\nTabs.defaultProps = {\n onChange: undefined,\n};\n\nTabs.propTypes = {\n active: PropTypes.string.isRequired,\n onChange: PropTypes.func,\n};\n","import React, { Suspense, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useNavigate, useLocation, Link } from 'react-router-dom';\nimport { useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport { Loader } from 'ui';\nimport qs from 'qs';\nimport { equals } from 'utils';\nimport { makeStyles } from '@mui/styles';\nimport Paper from '@mui/material/Paper';\nimport { COLORS } from '@scope/scope-one-ui/theme';\n\nimport { requestInstrumentRatingAndFetchDataAction } from 'store/instrument/instrumentActions';\nimport { ItemType } from 'shared/types/portfolios';\nimport { usePortfolioModals, useQuery } from 'shared/hooks';\nimport { moduleTypes } from 'shared/constants/moduleTypes';\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\nimport { CompanyPanel } from 'ui/Company';\nimport { CompanyCreditRating, Documents } from 'modules/creditRating';\nimport { formatNumber, getCompanyData, findModule } from 'shared/functions';\nimport { RoundButton } from 'ui/Buttons';\nimport { DisclaimerModal } from 'ui/Modals';\nimport { companyInstrumentModules as companyModulesConst } from 'shared/constants/company';\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { RatingNews, Research } from './Tabs/Tabs';\n\nconst useStyles = makeStyles({\n link: {\n textDecoration: 'none',\n color: COLORS.primary.main,\n transition: '0.2s ease-out',\n\n '&:hover': {\n color: COLORS.primary.hover,\n },\n },\n});\n\nconst InstrumentContent = ({\n activeTabs,\n setActiveTabs,\n data,\n instrumentId,\n isRatingRequestPending,\n isPending,\n}) => {\n const css = useStyles();\n const { t } = useTranslation();\n const location = useLocation();\n const dispatch = useDispatch();\n const { module } = useQuery();\n const [showDisclaimerModal, setShowDisclaimerModal] = useState(false);\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n const navigate = useNavigate();\n\n const toggleDisclaimerModal = () => setShowDisclaimerModal(!showDisclaimerModal);\n const { companyTab, companyModule } = qs.parse(location.search, { ignoreQueryPrefix: true });\n\n const onChangeTabs = (type, value) => {\n const searchQueryParams = {\n ...(companyTab && { companyTab: activeTabs.companyTab }),\n ...(companyModule && { companyModule: activeTabs.companyModule }),\n [type]: value,\n };\n\n const params = {\n ...activeTabs,\n [type]: value,\n };\n\n navigate({\n search: `?${qs.stringify(searchQueryParams)}`,\n });\n\n setActiveTabs(params);\n };\n\n const basicData = [\n {\n label: t('Industry'),\n value: data.industry,\n },\n {\n label: t('ISIN'),\n value: data.isin,\n },\n {\n label: t('Seniority'),\n value: data.seniorityType,\n },\n {\n label: t('Currency'),\n value: data.currency,\n },\n {\n label: t('Instrument date'),\n value: data.date,\n },\n {\n label: t('Instrument volume'),\n value: formatNumber(data.volume),\n },\n {\n label: t('Outstanding volume'),\n value: formatNumber(data.outstandingVolume),\n },\n {\n label: t('Outstanding date'),\n value: data.outstandingDate,\n },\n {\n label: t('Coupon percent'),\n value: data.couponPercent,\n },\n {\n label: t('Maturity date'),\n value: data.maturity,\n },\n ].filter(({ value }) => value);\n\n const {\n ratings,\n level,\n isPublicRating,\n isRatingSubscription,\n showConflictOfInterests,\n showRatingRequestInProgress,\n showRatings,\n showRequestRatingBox,\n } = data && data.products && getCompanyData(data.products);\n\n const handleRequestRatingClick = () => {\n dispatch(requestInstrumentRatingAndFetchDataAction({ id: instrumentId, level }));\n };\n\n const isActiveTab = (moduleType) =>\n companyModulesConst.find(findModule(moduleType)) && moduleType === activeTabs.companyModule;\n\n const itemsForPortfolio = {\n items: { [instrumentId]: instrumentId },\n count: 1,\n type: ItemType.SCOPEONEID,\n };\n\n return (\n <>\n <CompanyPanel\n loading={isRatingRequestPending || isPending}\n title={\n <>\n {data.name}\n {' - '}\n <Link\n to={`/entities/${data.entityId}${module ? `?module=${module}` : ''}`}\n className={css.link}\n >\n {data.entityName}\n </Link>\n </>\n }\n action={\n <>\n <RoundButton label={t('Add to portfolio')} onClick={addToPortfolio.show} />\n <RoundButton label={t('View disclaimer')} onClick={toggleDisclaimerModal} marginLeft />\n </>\n }\n items={basicData}\n activeModule={activeTabs.companyModule}\n onChangeModule={onChangeTabs}\n modules={companyModulesConst}\n variant=\"instrument\"\n />\n {isActiveTab(moduleTypes.CREDIT_RATING) && (\n <CompanyCreditRating\n companyName={data.name}\n loading={isRatingRequestPending || isPending}\n ratings={ratings}\n isPublicRating={isPublicRating}\n isRatingSubscription={isRatingSubscription}\n showConflictOfInterests={showConflictOfInterests}\n showRatingRequestInProgress={showRatingRequestInProgress}\n showRequestRatingBox={showRequestRatingBox}\n showRatings={showRatings}\n onRequestClick={handleRequestRatingClick}\n />\n )}\n {isActiveTab(moduleTypes.RATING_NEWS) && (\n <Suspense fallback={<Loader center />}>\n <Paper variant=\"elevation\" elevation={3}>\n <RatingNews />\n </Paper>\n </Suspense>\n )}\n {isActiveTab(moduleTypes.RESEARCH) && (\n <Suspense fallback={<Loader center />}>\n <Paper variant=\"elevation\" elevation={3}>\n <Research />\n </Paper>\n </Suspense>\n )}\n {isActiveTab(moduleTypes.DOCUMENTS) && (\n <Documents\n reports={data.documents.filter(({ type }) => equals(type, 'Rating Report'))}\n performances={data.documents.filter(({ type }) => equals(type, 'Performance Report'))}\n methodologies={data.methodologies}\n />\n )}\n <DisclaimerModal open={showDisclaimerModal} onClose={toggleDisclaimerModal} />\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n itemsData={itemsForPortfolio}\n itemType=\"INSTRUMENT\"\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={itemsForPortfolio}\n itemType=\"INSTRUMENT\"\n />\n </>\n );\n};\n\nInstrumentContent.propTypes = {\n activeTabs: PropTypes.shape({\n companyModule: PropTypes.string,\n companyTab: PropTypes.string,\n }).isRequired,\n setActiveTabs: PropTypes.func.isRequired,\n data: PropTypes.object.isRequired,\n instrumentId: PropTypes.string.isRequired,\n isRatingRequestPending: PropTypes.bool.isRequired,\n isPending: PropTypes.bool.isRequired,\n};\n\nexport { InstrumentContent };\n","import React, { useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useLocation, useParams } from 'react-router-dom';\nimport qs from 'qs';\n\nimport { getInstrumentAction } from 'store/instrument/instrumentActions';\nimport {\n companyInstrumentModules as companyModulesConst,\n companyInstrumentTabs,\n} from 'shared/constants/company';\nimport { Loader } from 'ui';\nimport { InstrumentContent } from './InstrumentContent';\n\nconst Instrument = () => {\n const dispatch = useDispatch();\n const location = useLocation();\n\n const { instrumentId } = useParams();\n const [activeTabs, setActiveTabs] = useState({\n companyModule: companyModulesConst[0].value,\n companyTab: companyInstrumentTabs[0].value,\n });\n\n const instrument = useSelector(state => state.instrument);\n const { data, shouldRefresh, isRatingRequestPending, isPending } = instrument;\n\n const getInstrument = () => dispatch(getInstrumentAction({ id: instrumentId }));\n\n useEffect(() => {\n getInstrument();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [instrumentId]);\n\n useEffect(() => {\n if (shouldRefresh) {\n getInstrument();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldRefresh]);\n\n useEffect(() => {\n const { companyTab, companyModule } = qs.parse(location.search, { ignoreQueryPrefix: true });\n\n if (companyInstrumentTabs.map(({ value }) => value).includes(companyTab)) {\n setActiveTabs(currentValues => ({ ...currentValues, companyTab }));\n }\n\n if (companyModulesConst.map(({ value }) => value).includes(companyModule)) {\n setActiveTabs(currentValues => ({ ...currentValues, companyModule }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n if (!data) return <Loader />;\n\n return (\n <InstrumentContent\n activeTabs={activeTabs}\n setActiveTabs={setActiveTabs}\n data={data}\n instrumentId={instrumentId}\n isRatingRequestPending={isRatingRequestPending}\n isPending={isPending}\n />\n );\n};\n\nexport { Instrument };\n","var _path, _path2;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgMessageGrowth = function SvgMessageGrowth(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"2 2 20 20\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 13l-3-3-3 4M12 13l5-6M12 6h6v6\"\n })));\n};\n\nexport default SvgMessageGrowth;","import { ChipButton } from '@scope/scope-one-ui/core';\nimport styled, { css } from 'styled-components';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { StyledChipButtonProps } from './ESGScoresOverTime.d';\n\nexport const StyledChipButton = styled(ChipButton)<StyledChipButtonProps>(\n ({ pressed }) => css`\n &:enabled {\n background-color: ${pressed ? COLORS.secondary.text : COLORS.secondary.hover};\n color: ${pressed ? COLORS.secondary.hover : COLORS.secondary.text};\n }\n `,\n);\n","import React, { FC } from 'react';\nimport { Box } from '@scope/scope-one-ui/core';\nimport { Skeleton } from '@mui/material';\nimport { SIZES } from '@scope/scope-one-ui/theme';\n\nexport const ChartLoader: FC = () => (\n <>\n <Box display=\"flex\" gridGap={2} m={2}>\n <Skeleton width=\"10%\" height={SIZES.spacing(5)} />\n <Skeleton width=\"10%\" height={SIZES.spacing(5)} />\n <Skeleton width=\"10%\" height={SIZES.spacing(5)} />\n <Skeleton width=\"10%\" height={SIZES.spacing(5)} />\n </Box>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n style={{ height: SIZES.spacing(40) }}\n >\n <Skeleton width=\"90%\" height=\"30%\" />\n </Box>\n </>\n);\n","import React, { useState } from 'react';\nimport { DeviationChart } from '@scope/scope-one-ui/core/Charts/DeviationChart/DeviationChart';\nimport { Box, Card, ChartLegend, Divider, Select, Typography } from '@scope/scope-one-ui/core';\nimport { useTranslation } from 'react-i18next';\nimport { CHARTS_COLORS, COLORS } from '@scope/scope-one-ui/theme';\nimport { useParams } from 'react-router-dom';\nimport format from 'date-fns/format';\nimport { ChartOption } from './ESGScoresOverTime.d';\nimport { useGetE_S_GData, useGetESGHistory, useGetESGTotalData } from '../../services/esgSentiment';\nimport { StyledChipButton } from './ESGScoresOverTime.styled';\nimport { EsgSentimentParams, ScoresOverTimeData } from '../../types/esgSentiment';\nimport { ChartLoader } from './ESGScoresOverTime.loader';\nimport { PALETTE } from '@scope/scope-one-ui/theme/palette';\n\nconst timeRangeSelect = [\n { value: '7days', label: '7 days' },\n { value: '1months', label: '1 month' },\n { value: '3months', label: '3 months' },\n { value: '6months', label: '6 months' },\n { value: '1year', label: '1 year' },\n { value: 'max', label: 'Max' },\n];\n\nconst chartOptions: ChartOption[] = [\n { label: 'ESG TOTAL', value: 'esg' },\n { label: 'ENVIRONMENT', value: 'e' },\n { label: 'SOCIAL', value: 's' },\n { label: 'GOVERNANCE', value: 'g' },\n];\n\nconst [defaultOption] = chartOptions;\n\nconst [, defaultRange] = timeRangeSelect;\n\nexport const ESGScoresOverTime = () => {\n const { t } = useTranslation();\n\n const [selectedChartOption, setSelectedChartOption] = useState<ChartOption>(defaultOption);\n const [timeRange, setTimeRange] = useState<string>(defaultRange.value);\n const { entityId } = useParams<EsgSentimentParams>();\n\n const { data: esgTotalLine, loading: esgTotalLineLoading } = useGetESGTotalData(\n entityId!,\n timeRange,\n );\n const { data: ESGData } = useGetE_S_GData(entityId!, timeRange);\n const { data: deviationData } = useGetESGHistory(selectedChartOption.value, entityId!, timeRange);\n\n const chartData = () => {\n const { label, value } = selectedChartOption;\n\n return {\n data: mapChartData(\n value === 'esg'\n ? esgTotalLine?.esgMainLine\n : ESGData?.[{ e: 'eCompanyScores', s: 'sCompanyScores', g: 'gCompanyScores' }[value]],\n ),\n legendItems: [\n { label, color: CHARTS_COLORS[0] },\n { label: '1 Standard Deviation within peer group', color: PALETTE.blue5 },\n { label: '2 Standard Deviations within peer group', color: PALETTE.blue6 },\n ],\n };\n };\n\n const changeTimeRange = (value) => setTimeRange(value);\n\n const mapChartData = (data: ScoresOverTimeData[] = []) =>\n data\n .reverse()\n .map(({ value, date }) => ({ x: format(new Date(date), 'dd MMMM yyyy'), y: value }));\n\n return (\n <Card>\n <Box display=\"flex\" justifyContent=\"space-between\" mx={2} my={1} alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"baseline\" gridGap={1}>\n <Typography variant=\"h1\">{t('Scores over time')}</Typography>\n <Typography variant=\"h3\" color={COLORS.typography.main}>\n {t('Sentiment Comparison')}\n </Typography>\n </Box>\n <Select\n options={timeRangeSelect}\n placeholder={defaultRange.label}\n onChange={changeTimeRange}\n />\n </Box>\n <Divider />\n {esgTotalLineLoading ? (\n <ChartLoader />\n ) : (\n <>\n <Box display=\"flex\" gridGap={2} m={2}>\n {chartOptions.map((option) => (\n <StyledChipButton\n key={option.value}\n size=\"medium\"\n pressed={selectedChartOption === option}\n onClick={() => setSelectedChartOption(option)}\n >\n {option.label}\n </StyledChipButton>\n ))}\n </Box>\n <Box mr={2} pb={2}>\n <DeviationChart\n lineData={[\n {\n name: selectedChartOption.label,\n data: chartData().data,\n },\n ]}\n deviationData={\n deviationData && {\n name: selectedChartOption.label,\n data: deviationData.results,\n }\n }\n dots=\"none\"\n yAxisRange={[0, 10]}\n />\n </Box>\n <Box display=\"flex\" justifyContent=\"center\" mb={4}>\n <ChartLegend items={chartData().legendItems} size=\"medium\" />\n </Box>\n </>\n )}\n </Card>\n );\n};\n","import styled from 'styled-components';\nimport { Box } from '@scope/scope-one-ui/core';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\n\nexport const VerticalArrowContainer = styled.div`\n display: flex;\n background-color: ${COLORS.background.main};\n border-top: 1px solid ${COLORS.border.main};\n border-bottom: 1px solid ${COLORS.border.main};\n`;\n\nexport const VerticalPolygon = styled.div`\n height: 100%;\n flex-shrink: 0;\n width: ${SIZES.spacing(6.25)};\n`;\n\nexport const VerticalArrowBorderLeft = styled(VerticalPolygon)`\n background-color: ${COLORS.border.main};\n margin-left: -${SIZES.spacing(2.5)};\n clip-path: polygon(38% 0, 40% 0, 100% 50%, 40% 100%, 38% 100%, 98% 50%);\n`;\n\nexport const VerticalArrow = styled(VerticalPolygon)`\n background-color: ${COLORS.background.control};\n margin-left: -${SIZES.spacing(3.75)};\n clip-path: polygon(0 0, 40% 0, 100% 50%, 40% 100%, 0 100%, 60% 50%);\n margin-top: -1px;\n height: calc(100% + 2px);\n`;\n\nexport const VerticalArrowBorderRight = styled(VerticalPolygon)`\n background-color: ${COLORS.border.main};\n margin-left: -${SIZES.spacing(6.125)};\n clip-path: polygon(38% 0, 40% 0, 100% 50%, 40% 100%, 38% 100%, 98% 50%);\n`;\n\nexport const SentimentScore = styled(Box)`\n background-color: ${COLORS.background.main};\n border: 1px solid ${COLORS.border.main};\n border-right: 0;\n width: ${SIZES.spacing(46)};\n height: ${SIZES.spacing(48)};\n\n & > div {\n box-sizing: content-box;\n color: ${COLORS.typography.main};\n }\n`;\n\nexport const SentimentBreakdown = styled(Box)`\n background-color: ${COLORS.background.main};\n border: 1px solid ${COLORS.border.main};\n border-left: 0;\n min-width: ${SIZES.spacing(60)};\n height: ${SIZES.spacing(48)};\n display: flex;\n flex-direction: column;\n flex: 1;\n justify-content: center;\n`;\n\nexport const SentimentCharts = styled(Box)`\n display: flex;\n flex: 1;\n justify-content: center;\n grid-gap: ${SIZES.spacing(2)};\n & > div {\n box-sizing: content-box;\n color: ${COLORS.typography.main};\n }\n`;\n\nexport const SentimentHeader = styled(Box)`\n display: flex;\n justify-content: center;\n grid-gap: ${SIZES.spacing(28)};\n`;\n\nexport const VerticalDivider = styled(Box)`\n width: 1px;\n background-color: ${COLORS.border.main};\n margin-top: ${SIZES.spacing(-6)};\n`;\n","import React, { FC } from 'react';\nimport Skeleton from 'react-loading-skeleton';\nimport { SIZES, COLORS } from '@scope/scope-one-ui/theme';\nimport { Box, Label, Typography } from '@scope/scope-one-ui/core';\nimport { AttentionBuzzProps } from './AttentionBuzz.d';\n\nexport const AttentionBuzz: FC<AttentionBuzzProps> = ({\n loading,\n value = 0,\n label,\n notApplicable,\n}) => {\n if (loading) {\n return <Skeleton width={SIZES.spacing(25)} height={SIZES.spacing(2)} />;\n }\n\n return (\n <Box display=\"flex\" alignItems=\"center\">\n <Typography variant=\"h3\" color={COLORS.typography.label}>\n Attention Buzz: \n </Typography>\n <Label type=\"color\">\n <Typography variant=\"body1\">\n {notApplicable ? 'n/a' : `${Math.round(value * 100)}% (${label})`}\n </Typography>\n </Label>\n </Box>\n );\n};\n","import { Box, ChartLegend, EsgScore, SentimentBar, Typography } from '@scope/scope-one-ui/core';\nimport React, { useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { Period } from '@scope/scope-one-ui/core/SentimentBar/SentimentBar.d';\nimport { EsgSentimentParams } from 'modules/ESGSentiment/types/esgSentiment';\nimport {\n SentimentBreakdown,\n SentimentCharts,\n SentimentHeader,\n SentimentScore,\n VerticalArrow,\n VerticalArrowBorderLeft,\n VerticalArrowBorderRight,\n VerticalArrowContainer,\n VerticalDivider,\n} from './ScoreBreakdownWidget.styled';\nimport {\n useGetAttentionBuzzBreakdown,\n useGetPeriodIndustryScore,\n useGetPeriodScore,\n} from '../../services/esgSentiment';\nimport { AttentionBuzz } from '../AttentionBuzz';\n\nconst ScoreBreakdownWidget = () => {\n const { entityId } = useParams<EsgSentimentParams>();\n const [filter, setFilter] = useState<Period>('0day');\n const { data: periodScores, loading: periodScoresLoading } = useGetPeriodScore(entityId!, filter);\n const { data: periodIndustryScores, loading: periodIndustryScoresLoading } =\n useGetPeriodIndustryScore(entityId!, filter);\n const { data: attentionBuzzBreakdown, loading: attentionBuzzBreakdownLoading } =\n useGetAttentionBuzzBreakdown(entityId!, filter);\n\n const legendItems = [\n { label: 'Peer group worst', color: `${COLORS.error.main}` },\n { label: 'Peer group average', color: `${COLORS.warning.main}` },\n { label: 'Peer group best', color: `${COLORS.success.main}` },\n ];\n\n return (\n <Box display=\"flex\">\n <SentimentScore display=\"flex\" flexDirection=\"column\" justifyContent=\"center\" pl={4} pr={2}>\n <Box my={4} display=\"flex\" justifyContent=\"center\">\n <EsgScore\n value={periodScores?.esgScore || 0}\n worst={periodIndustryScores?.industry.esg.worst || 0}\n average={periodIndustryScores?.industry.esg.average || 0}\n best={periodIndustryScores?.industry.esg.best || 0}\n label=\"ESG Sentiment Score\"\n loading={periodScoresLoading && periodIndustryScoresLoading}\n />\n </Box>\n <SentimentBar\n period={filter}\n onPeriodChange={setFilter}\n negative={attentionBuzzBreakdown?.events.negative || 0}\n neutral={attentionBuzzBreakdown?.events.neutral || 0}\n positive={attentionBuzzBreakdown?.events.positive || 0}\n loading={attentionBuzzBreakdownLoading}\n />\n <Box display=\"flex\" mt={2} justifyContent=\"center\">\n <AttentionBuzz\n loading={attentionBuzzBreakdownLoading}\n value={attentionBuzzBreakdown?.attentionBuzz.value}\n notApplicable={filter === 'max'}\n label={attentionBuzzBreakdown?.attentionBuzz.label}\n />\n </Box>\n </SentimentScore>\n <VerticalArrowContainer>\n <VerticalArrowBorderLeft />\n <VerticalArrow />\n <VerticalArrowBorderRight />\n </VerticalArrowContainer>\n <SentimentBreakdown>\n <Box display=\"flex\" flexDirection=\"column\" gridGap={4}>\n <SentimentHeader py={2}>\n <Typography variant=\"h2\">Environment</Typography>\n <Typography variant=\"h2\">Social</Typography>\n <Typography variant=\"h2\">Governance</Typography>\n </SentimentHeader>\n <SentimentCharts>\n <EsgScore\n value={periodScores?.scores.e || 0}\n worst={periodIndustryScores?.industry.e.worst || 0}\n average={periodIndustryScores?.industry.e.average || 0}\n best={periodIndustryScores?.industry.e.best || 0}\n loading={periodScoresLoading && periodIndustryScoresLoading}\n />\n <VerticalDivider />\n <EsgScore\n value={periodScores?.scores.s || 0}\n worst={periodIndustryScores?.industry.s.worst || 0}\n average={periodIndustryScores?.industry.s.average || 0}\n best={periodIndustryScores?.industry.s.best || 0}\n loading={periodScoresLoading && periodIndustryScoresLoading}\n />\n <VerticalDivider />\n <EsgScore\n value={periodScores?.scores.g || 0}\n worst={periodIndustryScores?.industry.g.worst || 0}\n average={periodIndustryScores?.industry.g.average || 0}\n best={periodIndustryScores?.industry.g.best || 0}\n loading={periodScoresLoading && periodIndustryScoresLoading}\n />\n </SentimentCharts>\n <Box display=\"flex\" justifyContent=\"center\" mb={2}>\n <ChartLegend size=\"semiMedium\" items={legendItems} />\n </Box>\n </Box>\n </SentimentBreakdown>\n </Box>\n );\n};\n\nexport default ScoreBreakdownWidget;\n","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgX = function SvgX(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"5 5 14 14\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M18 6L6 18M6 6l12 12\"\n })));\n};\n\nexport default SvgX;","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgChevronLeft = function SvgChevronLeft(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"6 4 12 16\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15 18l-6-6 6-6\"\n })));\n};\n\nexport default SvgChevronLeft;","var _defs, _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgRadioButtonOff = function SvgRadioButtonOff(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 18,\n height: 18,\n viewBox: \"0 0 18 18\",\n fill: \"currentColor\"\n }, props), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"style\", null))), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"radio-button-off_svg__a\",\n d: \"M9 1.212a7.785 7.785 0 11-5.508 2.28A7.737 7.737 0 019 1.212M9 0a9 9 0 109 9 9 9 0 00-9-9z\"\n })));\n};\n\nexport default SvgRadioButtonOff;","import styled, { css } from 'styled-components';\nimport { Box } from '@scope/scope-one-ui/core';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\nimport ChevronLeft from 'assets/icons/chevron-left.svg';\nimport { pxToRem } from '@scope/scope-one-ui/global/utils';\nimport { SidebarWrapperProps, SideButtonProps } from './EventSidebar.d';\n\nconst iframeWidth = pxToRem(397);\n\nexport const IframeWindow = styled.iframe`\n border: 0;\n width: ${iframeWidth};\n height: 100vh;\n box-shadow: 0px 3px 65px #00000029;\n`;\n\nexport const SidebarWrapper = styled(Box)<SidebarWrapperProps>(\n ({ open }) => css`\n position: fixed;\n top: 0;\n right: 0;\n z-index: 120;\n transform: ${!open && `translateX(calc(100% - ${SIZES.spacing(8)}))`};\n transition: 0.3s ease-out;\n pointer-events: none;\n\n > * {\n pointer-events: all;\n }\n `,\n);\n\nexport const SideButton = styled.button<SideButtonProps>(\n ({ variant = 'primary', disabled }) => css`\n border: 0;\n outline: 0;\n height: ${SIZES.spacing(17)};\n width: ${SIZES.spacing(6)};\n cursor: pointer;\n border-radius: ${SIZES.spacing(2)} 0 0 ${SIZES.spacing(2)};\n transition: 0.3s ease-out;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: space-evenly;\n z-index: 1;\n\n ${variant === 'primary' &&\n css`\n background-color: ${COLORS.primary.main};\n color: ${COLORS.primary.text};\n\n :hover {\n background-color: ${COLORS.primary.hover};\n color: ${COLORS.primary.text};\n }\n `}\n\n ${variant === 'secondary' &&\n css`\n background-color: ${COLORS.secondary.hover};\n color: ${COLORS.secondary.text};\n\n :hover {\n background-color: ${COLORS.primary.main};\n color: ${COLORS.primary.text};\n }\n `}\n\n ${disabled &&\n css`\n pointer-events: none;\n opacity: 0;\n `}\n `,\n);\n\nexport const Chevron = styled(ChevronLeft)<SidebarWrapperProps>(\n ({ open }) => css`\n transition: 0.3s ease-out;\n transform: ${open && 'rotate(180deg)'};\n `,\n);\n\nexport const Header = styled(Box)`\n position: absolute;\n top: 0;\n right: 0;\n width: ${iframeWidth};\n background: ${COLORS.background.main};\n height: ${SIZES.spacing(7)};\n`;\n","import qs from 'qs';\nimport React, { FC } from 'react';\nimport { subMonths, subDays, subYears } from 'date-fns';\nimport { IconButton, Typography } from '@scope/scope-one-ui/core';\nimport MessageGrowth from 'assets/icons/message-growth.svg';\nimport X from 'assets/icons/x.svg';\nimport { formatDate } from '@scope/scope-one-ui/global/utils';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { useTranslation } from 'react-i18next';\nimport { Period } from '@scope/scope-one-ui/core/SentimentBar/SentimentBar.d';\nimport { SideButton, SidebarWrapper, Chevron, IframeWindow, Header } from './EventSidebar.styled';\nimport { EventSidebarProps } from './EventSidebar.d';\n\nconst sentifiUrl = 'https://intelligence.sentifi.com/cc/right-rail';\nconst sentifiToken = '9d65dab0-cca8-4b19-a38e-fc3876289864-a4c5d';\n\nconst getDates = (period: Period) => {\n const dateFormat = 'yyyy-MM-dd';\n const today = new Date();\n\n const startDates: Record<Period, string> = {\n '0day': formatDate(today, dateFormat),\n '7days': formatDate(subDays(today, 7), dateFormat),\n '1months': formatDate(subMonths(today, 1), dateFormat),\n '3months': formatDate(subMonths(today, 3), dateFormat),\n '6months': formatDate(subMonths(today, 6), dateFormat),\n '1year': formatDate(subYears(today, 1), dateFormat),\n max: '2015-01-01',\n };\n\n return {\n startDate: startDates[period],\n endDate: formatDate(today, dateFormat),\n };\n};\n\nexport const EventSidebar: FC<EventSidebarProps> = ({\n topicId,\n eventId,\n period,\n loading,\n open,\n eventType,\n onToggle,\n}) => {\n const { t } = useTranslation();\n const { startDate, endDate } = getDates(period);\n\n const params = qs.stringify(\n {\n token: sentifiToken,\n 'topic-id': topicId,\n 'start-date': startDate,\n 'end-date': endDate,\n ...(eventId ? { 'event-id': eventId } : { 'esg-types': eventType.slice(0, 1) }),\n },\n { skipNulls: true },\n );\n\n return (\n <SidebarWrapper display=\"flex\" alignItems=\"center\" open={open}>\n <SideButton onClick={onToggle} variant={open ? 'secondary' : 'primary'} disabled={loading}>\n <MessageGrowth />\n <Chevron open={open} />\n </SideButton>\n <IframeWindow title=\"Events details\" src={`${sentifiUrl}?${params}`} />\n <Header p={2} display=\"flex\" alignItems=\"center\" justifyContent=\"space-between\">\n <Typography variant=\"h1\" color={COLORS.typography.label}>\n {t('Events')}\n </Typography>\n <IconButton onClick={onToggle} size=\"small\">\n <X />\n </IconButton>\n </Header>\n </SidebarWrapper>\n );\n};\n","var _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgDownload = function SvgDownload(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"2 2 20 20\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4M7 10l5 5 5-5M12 15V3\"\n })));\n};\n\nexport default SvgDownload;","import styled, { css } from 'styled-components';\nimport { Box, Widget } from '@scope/scope-one-ui/core';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { ProgressContent } from '@scope/scope-one-ui/core/ProgressBar/ProgressBar.styled';\nimport { RadioWidgetProps } from './EsgEventsCard.d';\n\nexport const WidgetContent = styled(Box)`\n transition: 0.2s ease-out;\n`;\n\nexport const RadioWidget = styled(Widget)<RadioWidgetProps>(\n ({ active }) => css`\n cursor: ${!active && 'pointer'};\n flex: 1;\n\n ${WidgetContent} {\n background-color: ${!active && COLORS.background.control};\n\n > :last-child {\n transition: 0.2s ease-out;\n opacity: ${active ? 1 : 0};\n pointer-events: ${!active && 'none'};\n }\n }\n\n ${ProgressContent} {\n background-color: ${!active && COLORS.secondary.pressed};\n }\n `,\n);\n","import React, { FC } from 'react';\nimport { capitalize } from 'lodash';\nimport { Box, Divider, ProgressList, SentimentBar } from '@scope/scope-one-ui/core';\nimport { RadioIcon } from '@scope/scope-one-ui/core/Radio/Radio.styled';\nimport RadioOff from '../../../../assets/icons/radio-button-off.svg';\nimport { EsgEventsCardProps } from './EsgEventsCard.d';\nimport { RadioWidget, WidgetContent } from './EsgEventsCard.styled';\n\nexport const EsgEventsCard: FC<EsgEventsCardProps> = ({\n eventsList,\n activeType,\n type,\n loading,\n filter,\n onPick,\n onFilter,\n}) => {\n const data = (eventsList?.events || [])\n .map((item) => {\n const { value } = item.attentionBuzz;\n return {\n label: item.eventInfo.name,\n count: filter === 'max' ? 0 : value,\n tooltip: `Attention Buzz: ${\n filter === 'max' || !value ? 'n/a' : `${value.toFixed(2) }%`\n }`\n }})\n .sort((a, b) => b.count - a.count);\n\n const total = Math.max(...data.map((item) => item.count));\n\n const { negative, neutral, positive } = eventsList?.count || {\n negative: 0,\n neutral: 0,\n positive: 0,\n };\n\n const select = () => onPick(type);\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" flex={1} onClick={select}>\n <RadioWidget\n active={activeType === type}\n title={capitalize(type)}\n customHeader={\n <RadioIcon active={activeType === type}>\n <RadioOff />\n <RadioOff />\n </RadioIcon>\n }\n >\n <WidgetContent display=\"flex\" flex={1} flexDirection=\"column\">\n <Box flex={1} p={1}>\n <ProgressList hideCount data={data} total={total} loading={loading} />\n </Box>\n <Divider />\n <Box p={3}>\n <SentimentBar\n period={filter}\n onPeriodChange={(val) => onFilter(type, val)}\n negative={negative}\n neutral={neutral}\n positive={positive}\n loading={loading}\n />\n </Box>\n </WidgetContent>\n </RadioWidget>\n </Box>\n );\n};\n","import { CHARTS_COLORS } from '@scope/scope-one-ui/theme';\nimport { GroupType } from '../types/esgSentiment';\n\nexport const groupColors: Record<GroupType, string> = {\n company: CHARTS_COLORS[0],\n peers: CHARTS_COLORS[1],\n industry: CHARTS_COLORS[2],\n sector: CHARTS_COLORS[3],\n custom: CHARTS_COLORS[4],\n};\n","import styled, { css } from 'styled-components';\nimport { Box, Label } from '@scope/scope-one-ui/core';\nimport { SIZES } from '@scope/scope-one-ui/theme';\nimport { DotProps } from '../types/esgSentiment';\nimport { groupColors } from '../utils/groupColors';\n\nexport const SectionA = styled(Box)`\n display: grid;\n grid-gap: ${SIZES.spacing(5.5)};\n grid-template-columns: 2fr 3fr 3fr;\n`;\n\nexport const SentimentLabel = styled(Label)`\n > div {\n width: ${SIZES.spacing(12)};\n justify-content: center;\n }\n`;\n\nexport const Dot = styled(Box)<DotProps>(\n ({ groupType }) => css`\n border-radius: 50%;\n flex-shrink: 0;\n width: ${SIZES.spacing(1.5)};\n height: ${SIZES.spacing(1.5)};\n background-color: ${groupColors[groupType]};\n `,\n);\n","import React from 'react';\nimport { Box, RangeSlider, ScoreLabel, Typography } from '@scope/scope-one-ui/core';\nimport { ScoreLabelProps, ScoreFormat } from '@scope/scope-one-ui/core/ScoreLabel/ScoreLabel.d';\nimport { LabelType } from '@scope/scope-one-ui/core/Label/Label.d';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { EventMeta, EventRangeScore, GroupInfo } from '../types/esgSentiment';\nimport { Dot, SentimentLabel } from '../components/ESGSentiment.styled';\n\nexport const groupComparisonRenderer = ({ name, type }: GroupInfo) => (\n <Box display=\"flex\" alignItems=\"center\" gridGap={2}>\n <Dot groupType={type} />\n <Typography variant=\"h3\" color={COLORS.typography.label}>\n {name}\n </Typography>\n </Box>\n);\n\nexport const sentimentRenderer = ({ name, sentiment }: EventMeta) => {\n const type = { negative: 'negative', neutral: 'neutral', positive: 'positive' }[sentiment];\n\n return (\n <Box flex={1} display=\"flex\" justifyContent=\"space-between\" gridGap={2}>\n <Box display=\"flex\" gridGap={2} alignItems=\"center\">\n <Typography variant=\"h3\" color={COLORS.typography.label}>\n {name}\n </Typography>\n </Box>\n <SentimentLabel type={type as LabelType}>{sentiment}</SentimentLabel>\n </Box>\n );\n};\n\nexport const scoreRenderer = (format: ScoreFormat) => (score: ScoreLabelProps) =>\n <ScoreLabel {...score} format={format} />;\n\nexport const rangeRenderer = ({ min, max, value }: EventRangeScore) => (\n <Box flex={1} pt={2}>\n <RangeSlider min={min} max={max} value={value} />\n </Box>\n);\n","import { ColumnDefinition } from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport { SIZES } from '@scope/scope-one-ui/theme';\nimport { rangeRenderer, scoreRenderer, sentimentRenderer } from '../../utils/renderers';\n\nexport const cols: ColumnDefinition[] = [\n {\n name: 'name',\n label: 'Event name / Sentiment',\n customBodyRender: sentimentRenderer,\n },\n {\n name: 'sentimentScore',\n align: 'center',\n label: 'SENTIMENT SCORE (pts)',\n columns: [\n {\n name: 'scoreOne',\n label: ['1M', '3M', '6M', '1Y', '7D'],\n align: 'center',\n size: SIZES.spacing(15),\n customBodyRender: scoreRenderer('numeric'),\n },\n {\n name: 'scoreTwo',\n label: ['3M', '6M', '1Y', '7D', '1M'],\n align: 'center',\n size: SIZES.spacing(15),\n customBodyRender: scoreRenderer('numeric'),\n },\n {\n name: 'rangeScore',\n label: 'Today vs 1Y Range',\n customBodyRender: rangeRenderer,\n },\n ],\n },\n {\n name: 'attentionBuzz',\n align: 'center',\n label: 'ATTENTION BUZZ (%)',\n columns: [\n {\n name: 'buzzOne',\n label: ['1M', '3M', '6M', '1Y', '7D'],\n align: 'center',\n size: SIZES.spacing(15),\n customBodyRender: scoreRenderer('percentage'),\n },\n {\n name: 'buzzTwo',\n label: ['3M', '6M', '1Y', '7D', '1M'],\n align: 'center',\n size: SIZES.spacing(15),\n customBodyRender: scoreRenderer('percentage'),\n },\n ],\n },\n {\n name: 'mentions',\n label: '# of Mentions',\n size: 'min-content',\n },\n {\n name: 'types',\n label: 'Influencer types / Sentiment',\n customBodyRender: sentimentRenderer,\n },\n];\n","import { RowData } from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport { EsgEventsList } from 'modules/ESGSentiment/types/esgSentiment';\n\nexport const getTableData = (data?: EsgEventsList): RowData[] =>\n (data?.events || []).map((event) => ({\n id: `${event.eventInfo.id}`,\n data: {\n name: { name: event.eventInfo.name, sentiment: event.period.label },\n scoreOne: [\n { value: event.oneMonth, change: event.oneMonthChange },\n { value: event.threeMonth, change: event.threeMonthChange },\n { value: event.sixMonth, change: event.sixMonthChange },\n { value: event.oneYear, change: event.oneYearChange },\n { value: event.oneWeek, change: event.oneWeekChange },\n ],\n scoreTwo: [\n { value: event.threeMonth, change: event.threeMonthChange },\n { value: event.sixMonth, change: event.sixMonthChange },\n { value: event.oneYear, change: event.oneYearChange },\n { value: event.oneWeek, change: event.oneWeekChange },\n { value: event.oneMonth, change: event.oneMonthChange },\n ],\n rangeScore: {\n min: Math.round(event.minOneYear.value),\n value: event.today.value,\n max: Math.round(event.maxOneYear.value),\n },\n buzzOne: [\n { value: event.attentionBuzz.oneMonth, change: event.attentionBuzz.oneMonthChange },\n { value: event.attentionBuzz.threeMonth, change: event.attentionBuzz.threeMonthChange },\n { value: event.attentionBuzz.sixMonth, change: event.attentionBuzz.sixMonthChange },\n { value: event.attentionBuzz.oneYear, change: event.attentionBuzz.oneYearChange },\n { value: event.attentionBuzz.oneWeek, change: event.attentionBuzz.oneWeekChange },\n ],\n buzzTwo: [\n { value: event.attentionBuzz.threeMonth, change: event.attentionBuzz.threeMonthChange },\n { value: event.attentionBuzz.sixMonth, change: event.attentionBuzz.sixMonthChange },\n { value: event.attentionBuzz.oneYear, change: event.attentionBuzz.oneYearChange },\n { value: event.attentionBuzz.oneWeek, change: event.attentionBuzz.oneWeekChange },\n { value: event.attentionBuzz.oneMonth, change: event.attentionBuzz.oneMonthChange },\n ],\n mentions: event.eventInfo.mentions,\n types: { name: event.eventInfo.influence.name, sentiment: 'neutral' },\n },\n }));\n","import React, { FC, useEffect, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { RowData } from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport { capitalize } from 'lodash';\nimport { Box, DataTable } from '@scope/scope-one-ui/core';\nimport { Period } from '@scope/scope-one-ui/core/SentimentBar/SentimentBar.d';\nimport { EventSidebar } from '../EventSidebar';\nimport { EsgEventsCard } from '../EsgEventsCard';\nimport { EsgEventsType, EsgSentimentParams } from '../../types/esgSentiment.d';\nimport { useGetCompanyInfo, useGetEsgEvents } from '../../services/esgSentiment';\nimport { cols } from './columns';\nimport { getTableData } from './utils';\n\nexport const ESGEventsSection: FC = () => {\n const { entityId } = useParams<EsgSentimentParams>();\n const [eventSection, setEventSection] = useState<EsgEventsType>('environment');\n const [filter, setFilter] = useState<Record<EsgEventsType, Period>>({\n environment: '7days',\n social: '7days',\n governance: '7days',\n });\n const [open, setOpen] = useState(false);\n const [selectedId, setSelectedId] = useState<string>();\n const { data: envData, loading: envLoading } = useGetEsgEvents(\n entityId!,\n 'E',\n filter.environment,\n );\n const { data: socData, loading: socLoading } = useGetEsgEvents(entityId!, 'S', filter.social);\n const { data: govData, loading: govLoading } = useGetEsgEvents(entityId!, 'G', filter.governance);\n const { data: companyData, loading: companyLoading } = useGetCompanyInfo(entityId!);\n\n const tableData: Record<EsgEventsType, RowData[]> = {\n environment: getTableData(envData),\n social: getTableData(socData),\n governance: getTableData(govData),\n };\n\n const onSelectEvent = (id: string) => {\n if (selectedId === id) {\n clearSelection();\n setOpen(false);\n } else {\n setSelectedId(id);\n setOpen(true);\n }\n };\n\n const toggle = () => setOpen((prev) => !prev);\n\n const clearSelection = () => setSelectedId('');\n\n const updateFilter = (type: EsgEventsType, value: Period) =>\n setFilter((prev) => ({ ...prev, [type]: value }));\n\n useEffect(() => {\n clearSelection();\n }, [filter, eventSection]);\n\n return (\n <>\n <Box display=\"flex\" gridGap={5.5}>\n <EsgEventsCard\n type=\"environment\"\n activeType={eventSection}\n eventsList={envData}\n loading={envLoading}\n filter={filter.environment}\n onPick={setEventSection}\n onFilter={updateFilter}\n />\n <EsgEventsCard\n type=\"social\"\n activeType={eventSection}\n eventsList={socData}\n loading={socLoading}\n filter={filter.social}\n onPick={setEventSection}\n onFilter={updateFilter}\n />\n <EsgEventsCard\n type=\"governance\"\n activeType={eventSection}\n eventsList={govData}\n loading={govLoading}\n filter={filter.governance}\n onPick={setEventSection}\n onFilter={updateFilter}\n />\n </Box>\n <Box>\n <DataTable\n loading={envLoading || socLoading || govLoading}\n title={`${capitalize(eventSection)} Themes & Events`}\n count={tableData[eventSection].length}\n selectable\n cols={cols}\n rows={tableData[eventSection]}\n paginate\n selection={{\n selectedIds: selectedId ? [selectedId] : [],\n selectToggle: onSelectEvent,\n }}\n />\n </Box>\n <EventSidebar\n open={open}\n onToggle={toggle}\n topicId={companyData?.sentifi_id || 0}\n eventId={selectedId || ''}\n period={filter[eventSection]}\n loading={companyLoading}\n eventType={eventSection}\n />\n </>\n );\n};\n","import React, { FC } from 'react';\nimport { GeneralInformation } from '@scope/scope-one-ui/core';\nimport { useGeneralInformation } from '../../services/esgSentiment';\n\nexport const GeneralInformationWidget: FC = () => {\n const { data } = useGeneralInformation();\n\n return <GeneralInformation labels={data} sentify />;\n};\n","import React from 'react'\nimport { ImpactReview } from '@scope/scope-one-ui/core';\n\nconst ImpactReviewWidget = ({ esgScore, loading }) => {\n const maxScore = 10;\n return (\n <ImpactReview value={esgScore?.toFixed(2)} range={maxScore} loading={loading} />\n )\n}\n\nexport default ImpactReviewWidget;","import React, { FC } from 'react';\nimport { Box } from '@scope/scope-one-ui/core';\nimport { Skeleton } from '@mui/material';\nimport { SIZES } from '@scope/scope-one-ui/theme';\n\nexport const DailyScoreHeaderLoader: FC = () => (\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" p={2}>\n <Skeleton width={100} height={24} />\n <Skeleton width={100} height={24} />\n <Skeleton width={100} height={24} />\n </Box>\n);\n\nexport const ChartLoader: FC = () => (\n <Box display=\"flex\" flexDirection=\"column\">\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"center\"\n style={{ height: SIZES.spacing(35) }}\n >\n <Skeleton width=\"50%\" height={SIZES.spacing(10)} />\n </Box>\n <Skeleton />\n </Box>\n);\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useParams } from 'react-router-dom';\nimport {CHARTS_COLORS, COLORS} from '@scope/scope-one-ui/theme';\nimport {Widget, LineChart, Box, Typography, StatusBadge, Divider, ChartLegend} from '@scope/scope-one-ui/core';\nimport { SectionA } from '../ESGSentiment.styled';\nimport { GeneralInformationWidget } from '../GeneralInformationWidget';\nimport ImpactReviewWidget from '../ImpactReviewWidget/ImpactReviewWidget';\nimport { useGetHistoryChart } from '../../services/esgSentiment';\nimport { EsgSentimentParams } from '../../types/esgSentiment';\nimport { ChartLoader, DailyScoreHeaderLoader } from './ESGDailyScoreSection.loader';\n\nexport const ESGDailyScoreSection: FC = () => {\n const { t } = useTranslation();\n const { entityId } = useParams<EsgSentimentParams>();\n const { data, loading } = useGetHistoryChart(entityId!);\n\n const normalize = (attentionInPercent: number): number => {\n if (attentionInPercent >=200) return 10.0\n if (attentionInPercent <=-100) return 0;\n return 0.1/3 * attentionInPercent + 10/3\n }\n\n const historyData = [\n {\n name: 'ESG Sentiment Score',\n color: CHARTS_COLORS[0],\n data: (data?.scoreForGraph || [])\n .map(({ monthShortName, value }) => ({ normalizedY: value,y: value, x: monthShortName }))\n .reverse(),\n },\n {\n name: 'Attention Buzz',\n color: CHARTS_COLORS[15],\n data: (data?.scoreForGraph || [])\n .map(({ monthShortName, attentionBuzz }) => ({ normalizedY: normalize(attentionBuzz * 100), y: attentionBuzz*100 , x: monthShortName }))\n .reverse(),\n }\n ];\n\n const legend = (\n <ChartLegend items={[{...historyData[0], label: 'ESG Sentiment Score'}, {...historyData[1], label: 'Attention Buzz'} ]} />\n );\n\n return (\n <SectionA>\n <ImpactReviewWidget esgScore={data?.esgScore} loading={loading} />\n <Widget title={t('History')} loading={loading}>\n {loading && <DailyScoreHeaderLoader />}\n {!loading && (\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" p={2}>\n <Typography variant=\"subtitle\" color={COLORS.typography.label}>\n {t('Latest change')}\n </Typography>\n <Typography variant=\"subtitle\" color={COLORS.typography.label}>\n {data?.latestChange}\n </Typography>\n <StatusBadge status={data?.status || 'STABLE'} />\n </Box>\n )}\n <Box px={2} pb={2} display=\"flex\" flexDirection=\"column\" gridGap={2}>\n <Divider />\n {loading && <ChartLoader />}\n {!loading && (<>\n <LineChart\n data={historyData}\n chartHeight={38}\n hideYAxis\n yDataType={['text','percentage']}\n yDomain={[0, 11]}\n tickCount={11}\n dots=\"regular\"\n xLabel=\"Month\"\n label=\"Value\"\n />\n {legend}\n </>\n )}\n </Box>\n </Widget>\n <GeneralInformationWidget />\n </SectionA>\n );\n};\n","import { ColumnDefinition } from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport { SIZES } from '@scope/scope-one-ui/theme';\nimport { groupComparisonRenderer, rangeRenderer, scoreRenderer } from '../../utils/renderers';\n\nexport const compareTableCols: ColumnDefinition[] = [\n {\n name: 'comparison',\n label: 'Comparison',\n customBodyRender: groupComparisonRenderer,\n },\n {\n name: 'scoreOne',\n label: '30D',\n align: 'center',\n size: SIZES.spacing(15),\n customBodyRender: scoreRenderer('numeric'),\n },\n {\n name: 'scoreTwo',\n label: 'Today',\n align: 'center',\n size: SIZES.spacing(15),\n customBodyRender: scoreRenderer('numeric'),\n },\n {\n name: 'rangeScore',\n label: 'Today vs 1Y Range',\n align: 'center',\n size: SIZES.spacing(22),\n customBodyRender: rangeRenderer,\n },\n];\n\nexport const topCompaniesTableCols: ColumnDefinition[] = [\n {\n name: 'companyName',\n label: 'Company Name',\n },\n {\n name: 'scoreOne',\n label: '30D',\n align: 'center',\n size: SIZES.spacing(15),\n customBodyRender: scoreRenderer('numeric'),\n },\n {\n name: 'scoreTwo',\n label: 'Today',\n align: 'center',\n size: SIZES.spacing(15),\n customBodyRender: scoreRenderer('numeric'),\n },\n {\n name: 'rangeScore',\n label: 'Today vs 1Y Range',\n align: 'center',\n size: SIZES.spacing(22),\n customBodyRender: rangeRenderer,\n },\n];\n","import styled from 'styled-components';\nimport { Box } from '@scope/scope-one-ui/core';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { SIZES } from '@scope/scope-one-ui/theme';\n\nexport const ChartBox = styled(Box)`\n border-right: 1px solid ${COLORS.border.main};\n`;\n\nexport const VerticalTitle = styled(Box)`\n width: 100%;\n`;\n\nexport const HorizontalTitles = styled(Box)`\n width: 100%;\n position: absolute;\n top: ${SIZES.spacing(29)};\n`;\n\nexport const ChartContainer = styled(Box)`\n position: relative;\n`;\n","import React, { FC } from 'react';\nimport { Typography, Box, ChartLegend } from '@scope/scope-one-ui/core';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { ScatterChart } from '@scope/scope-one-ui/core/Charts/ScatterChart/ScatterChart';\nimport { useTranslation } from 'react-i18next';\nimport { CHARTS_COLORS } from '@scope/scope-one-ui/theme/charts';\nimport { VerticalTitle, HorizontalTitles, ChartContainer } from './PeerGroupComparison.styled';\nimport { AttentionBuzzData } from './AttentionBuzzChart.d';\nimport { chartDataParser } from './parsers';\n\nexport const AttentionBuzzChart: FC<AttentionBuzzData> = ({ chartData }) => {\n const { t } = useTranslation();\n\n const parsedData = chartDataParser(chartData, CHARTS_COLORS);\n const companyName = chartData.actualCompany[0]?.companyName || 'Company';\n\n const legend = [\n {\n label: companyName,\n color: CHARTS_COLORS[0],\n },\n {\n label: 'Peers',\n color: CHARTS_COLORS[1],\n },\n {\n label: 'Industries',\n color: CHARTS_COLORS[2],\n },\n {\n label: 'Sectors',\n color: CHARTS_COLORS[3],\n },\n ];\n\n return (\n <ChartContainer mt={1}>\n <VerticalTitle display=\"flex\" justifyContent=\"center\" color={COLORS.typography.main}>\n <Typography variant=\"body1\" color={COLORS.typography.main}>\n {t('High Attention buzz')}\n </Typography>\n </VerticalTitle>\n <HorizontalTitles\n display=\"flex\"\n justifyContent=\"space-between\"\n color={COLORS.typography.main}\n >\n <Box>\n <Typography variant=\"body1\">{t('Negative')}</Typography>\n <Typography variant=\"body1\">{t('Sentiment')}</Typography>\n </Box>\n <Box>\n <Typography variant=\"body1\" color={COLORS.typography.main}>\n {t('Positive')}\n </Typography>\n <Typography variant=\"body1\" color={COLORS.typography.main}>\n {t('Sentiment')}\n </Typography>\n </Box>\n </HorizontalTitles>\n <ScatterChart\n data={parsedData}\n horizontalMiddleLine={{\n chartHeight: 58,\n }}\n verticalMiddleLine={{\n chartWidth: 58,\n }}\n hideXAxis\n hideYAxis\n xAxisRange={[-10, 10]}\n yAxisRange={[-250, 250]}\n tooltipLabels={{\n labelX: 'ESG Sentiment Score:',\n labelY: 'Attention Buzz:',\n labelYUnit: '%',\n }}\n />\n <VerticalTitle display=\"flex\" justifyContent=\"center\">\n <Typography variant=\"body1\" color={COLORS.typography.main}>\n {t('Low Attention buzz')}\n </Typography>\n </VerticalTitle>\n <Box display=\"flex\" justifyContent=\"center\">\n <ChartLegend items={legend} size=\"semiMedium\" />\n </Box>\n </ChartContainer>\n );\n};\n","import { RowData } from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport { ScatterDot } from '@scope/scope-one-ui/core/Charts/ScatterChart/ScatterChart.d';\nimport {\n PeerGroupComparisionInfo,\n PeerGroupComparisonChartData,\n CompanyScore,\n TopCompanies,\n} from '../../types/esgSentiment';\n\nexport const getCompareTableData = (data?: PeerGroupComparisionInfo): RowData[] =>\n !data\n ? []\n : [\n {\n id: 'company',\n data: {\n comparison: { name: data.companyInfo.name, type: 'company' },\n scoreOne: data.companyInfo.oneMonth,\n scoreTwo: data.companyInfo.todayScore,\n rangeScore: {\n min: data.companyInfo.minOneYear,\n max: data.companyInfo.maxOneYear,\n value: data.companyInfo.todayScore.value,\n },\n },\n },\n {\n id: 'industry',\n data: {\n comparison: { name: data.industryInfo.name, type: 'industry' },\n scoreOne: data.industryInfo.oneMonth,\n scoreTwo: data.industryInfo.todayScore,\n rangeScore: {\n min: data.industryInfo.minOneYear,\n max: data.industryInfo.maxOneYear,\n value: data.industryInfo.todayScore.value,\n },\n },\n },\n {\n id: 'sector',\n data: {\n comparison: { name: data.sectorInfo.name, type: 'sector' },\n scoreOne: data.sectorInfo.oneMonth,\n scoreTwo: data.sectorInfo.todayScore,\n rangeScore: {\n min: data.sectorInfo.minOneYear,\n max: data.sectorInfo.maxOneYear,\n value: data.sectorInfo.todayScore.value,\n },\n },\n },\n ];\n\nexport const getTopCompaniesTableData = (data?: TopCompanies): RowData[] =>\n (data?.result || []).map((item) => ({\n id: item.name,\n data: {\n companyName: item.name,\n scoreOne: { value: item.thirtyDaysScore, change: item.thirtyDaysChange },\n scoreTwo: { value: item.todayScore, change: item.todayChange },\n rangeScore: {\n min: item.yearMinScore,\n max: item.yearMaxScore,\n value: item.todayScore,\n },\n },\n }));\n\nexport const chartDataParser = (data: PeerGroupComparisonChartData, colorSet: string[]) => {\n const parse = (company: CompanyScore[], color: string) =>\n company.map(({ score, attentionBuzz, companyName }: CompanyScore) => ({\n x: score,\n y: attentionBuzz,\n name: companyName,\n color,\n }));\n\n const normalize = (chartData: ScatterDot[]) => {\n const getInterval = (val: number) => Math.ceil((Math.abs(+val) - 200) / 50);\n\n const buzzScores = chartData.map(({ y }) => +y);\n const positiveInterval = getInterval(Math.max(...buzzScores));\n const negativeInterval = getInterval(Math.min(...buzzScores));\n\n return chartData.map((item) => ({\n ...item,\n normalizedY: (() => {\n if (item.y > 200) return 200 + (+item.y - 200) / positiveInterval;\n if (item.y < -200) return -200 + (+item.y + 200) / negativeInterval;\n return item.y;\n })() as number,\n }));\n };\n\n const chartData = normalize(\n parse(data.sectorCompanies, colorSet[3]).concat(\n parse(data.industryCompanies, colorSet[2]),\n parse(data.peerCompanies, colorSet[1]),\n parse(data.actualCompany, colorSet[0]),\n ),\n );\n\n return chartData;\n};\n","import React, { FC } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport { Skeleton } from '@mui/material';\nimport { Box, DataTable, Typography, Widget } from '@scope/scope-one-ui/core';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\nimport { compareTableCols, topCompaniesTableCols } from './columns';\nimport { AttentionBuzzChart } from './AttentionBuzzChart';\nimport { ChartBox } from './PeerGroupComparison.styled';\nimport {\n useGetCompareCompanyIndustry,\n useGetPeerGroupComparison,\n useGetTopCompanies,\n} from '../../services/esgSentiment';\nimport { EsgSentimentParams } from '../../types/esgSentiment';\nimport { getCompareTableData, getTopCompaniesTableData } from './parsers';\n\nexport const PeerGroupComparison: FC = () => {\n const { entityId } = useParams<EsgSentimentParams>();\n const { t } = useTranslation();\n const { data: chartData, loading: chartLoading } = useGetPeerGroupComparison(entityId!);\n const { data: compareData, loading: compareLoading } = useGetCompareCompanyIndustry(entityId!);\n const { data: topData, loading: topLoading } = useGetTopCompanies(entityId!);\n\n const loading = compareLoading || topLoading || chartLoading;\n const company = compareData?.companyInfo.name;\n const sector = compareData?.sectorInfo.name;\n const industry = compareData?.industryInfo.name;\n const compareTableRows = getCompareTableData(compareData);\n const topCompaniesTableRows = getTopCompaniesTableData(topData);\n\n const companyScore = compareData?.companyInfo.todayScore.label.toLowerCase();\n const sectorScore = compareData?.sectorInfo.todayScore.label.toLowerCase();\n\n return (\n <Widget title={t('Peer Group Comparison')}>\n <Box display=\"flex\" p={2}>\n <ChartBox\n flex={2}\n display=\"flex\"\n flexDirection=\"column\"\n alignItems=\"center\"\n justifyContent=\"center\"\n pr={2}\n gridGap={4}\n >\n <Typography variant=\"body1\" color={COLORS.typography.main}>\n {loading ? (\n <Skeleton width={SIZES.spacing(25)} />\n ) : (\n t(\n `ESG sentiment around ${company} has been ${companyScore} in comparison to the ${sector} sector which has been ${sectorScore}.`,\n )\n )}\n </Typography>\n {loading ? (\n <Skeleton width=\"100%\" height=\"100%\" />\n ) : (\n <AttentionBuzzChart chartData={chartData!} />\n )}\n </ChartBox>\n <Box flex={3} display=\"flex\" flexDirection=\"column\" gridGap={4} pl={2}>\n <Box display=\"flex\" flexDirection=\"column\" gridGap={2}>\n <Typography variant=\"body1\" color={COLORS.typography.label}>\n {loading ? (\n <Skeleton width={300} />\n ) : (\n t(`How does ${company} compare in its industry?`)\n )}\n </Typography>\n <Box>\n <DataTable\n cols={compareTableCols}\n rows={compareTableRows}\n loaderRowsCount={3}\n loading={loading}\n />\n </Box>\n </Box>\n <Box display=\"flex\" flexDirection=\"column\" gridGap={2}>\n <Typography variant=\"body1\" color={COLORS.typography.label}>\n {loading ? (\n <Skeleton width={420} />\n ) : (\n t(`Top 3 companies within ${industry} industry (by ESG sentiment)`)\n )}\n </Typography>\n <Box>\n <DataTable\n cols={topCompaniesTableCols}\n rows={topCompaniesTableRows}\n loaderRowsCount={3}\n loading={loading}\n />\n </Box>\n </Box>\n </Box>\n </Box>\n </Widget>\n );\n};\n","import styled from 'styled-components';\nimport { Dialog } from '@scope/scope-one-ui/core';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\n\nexport const Modal = styled(Dialog)`\n width: 70vw;\n max-width: ${SIZES.spacing(160)};\n`;\n\nexport const Dot = styled.div`\n background-color: ${COLORS.typography.label};\n width: ${SIZES.spacing(1)};\n height: ${SIZES.spacing(1)};\n border-radius: 50%;\n`;\n","import React, { FC } from 'react';\nimport { Box, DataTable } from '@scope/scope-one-ui/core';\nimport { ModalProps } from '@scope/scope-one-ui/core/Modal/Modal.d';\nimport { useTranslation } from 'react-i18next';\nimport content from './content.json';\nimport { Dot, Modal } from './MoreInfoModal.styled';\n\nexport const MoreInfoModal: FC<ModalProps> = (props) => {\n const { t } = useTranslation();\n\n return (\n <Modal {...props} size=\"medium\" title={t('ESG Sentiment definitions')} cancelLabel={t('Close')}>\n <Box p={2}>\n <DataTable\n stickyHeader\n maxHeight={70}\n cols={[\n {\n name: 'term',\n label: t('Term'),\n customBodyRender: (text) => (\n <Box display=\"flex\" gridGap={1.5} alignItems=\"center\">\n <Dot />\n {text}\n </Box>\n ),\n },\n { name: 'definition', label: t('Definition') },\n ]}\n rows={content.map((data, id) => ({\n id: `${id}`,\n data: {\n term: t(data.term),\n definition: t(data.definition),\n },\n }))}\n />\n </Box>\n </Modal>\n );\n};\n","import { Box, Card, IconTextButton, Typography } from '@scope/scope-one-ui/core';\nimport React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useModal } from 'shared/hooks';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport ArrowUpIcon from '../../../assets/icons/arrow-up-right.svg';\nimport { ESGScoresOverTime } from './ESGScoresOverTime/ESGScoresOverTime';\nimport ScoreBreakdownWidget from './ScoreBreakdownWidget/ScoreBreakdownWidget';\nimport { ESGEventsSection } from './ESGEventsSection';\nimport { ESGDailyScoreSection } from './ESGDailyScoreSection';\nimport { PeerGroupComparison } from './PeerGroupComparison';\nimport { MoreInfoModal } from './MoreInfoModal';\n\nexport const ESGSentiment = () => {\n const { t } = useTranslation();\n const moreInfoModal = useModal();\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" gridGap={4}>\n <Card>\n <Box p={2} display=\"flex\" justifyContent=\"space-between\">\n <Typography color={COLORS.typography.label} variant=\"h1\">\n {t('ESG Sentiment')}\n </Typography>\n <IconTextButton icon={<ArrowUpIcon />} onClick={moreInfoModal.show}>\n {t('More info')}\n </IconTextButton>\n </Box>\n <MoreInfoModal open={moreInfoModal.isOpen} onClose={moreInfoModal.close} />\n </Card>\n <ESGDailyScoreSection />\n <ScoreBreakdownWidget />\n <ESGScoresOverTime />\n <Box px={2}>\n <Typography variant=\"h1\">{t('ESG Events talked about by Influencers')}</Typography>\n </Box>\n <ESGEventsSection />\n <PeerGroupComparison />\n </Box>\n );\n};\n","import { SummaryCardRequestESG } from 'modules/ESG';\nimport React, { FC } from 'react';\nimport { Loader } from 'ui';\nimport { useGetAvailability } from '../services/esgSentiment';\nimport { ESGSentimentTabProps } from '../types/esgSentiment';\nimport { ESGSentiment } from './ESGSentiment';\n\nexport const ESGSentimentTab: FC<ESGSentimentTabProps> = ({ id, industry, countryCode }) => {\n const { data, loading, refetch } = useGetAvailability(id);\n\n if (loading) {\n return <Loader center />;\n }\n\n if (!data?.hasCompany || !data.hasPermission || !data.hasScore) {\n return (\n <SummaryCardRequestESG\n type=\"sentiment\"\n scopeoneId={id}\n dataExists={data?.hasScore}\n isSubscribed={data?.hasPermission}\n isAvailable={data?.hasCompany}\n requestState={data?.requestState}\n industry={industry}\n countryCode={countryCode}\n onRequested={refetch}\n onUnlocked={refetch}\n />\n );\n }\n\n return <ESGSentiment />;\n};\n","import { useEffect } from 'react';\nimport { useGet } from 'shared/hooks/useFetch';\nimport {\n TransitionRisk,\n Entity,\n CountriesAndSectors,\n ViewType,\n ExportUrl,\n Scenario,\n RiskEntry,\n TaxEvolution,\n ValueChainDistribution,\n ContributionByCountry,\n Contribution,\n} from '../types/climateStressTest';\n\nconst apiUrl = '/esg/climate-stress-test';\n\nexport const useGetCountriesAndSectors = () =>\n useGet<CountriesAndSectors>(`${apiUrl}/coverage/countries-and-sectors`);\n\nexport const useGetEntity = (id: string) => useGet<Entity>(`${apiUrl}/entity/${id}`);\n\nexport const useGetExportUrl = (view: ViewType, country: string, sector?: string) => {\n const { data: exportUrl, refetch } = useGet<ExportUrl>(`${apiUrl}/dashboard/${view}/export`, {\n params: { country, sector },\n disableAutofetch: true,\n });\n\n useEffect(() => {\n if (!exportUrl?.fileUrl) {\n return;\n }\n\n window.location.assign(exportUrl?.fileUrl);\n }, [exportUrl]);\n\n return refetch;\n};\n\nexport const useGetTotalOutputLoss = (country: string, sector: string) =>\n useGet<TransitionRisk<RiskEntry>>(`${apiUrl}/dashboard/total-output-loss`, {\n params: { country, sector, page: 1, limit: 1000 },\n });\n\nexport const useGetTransitionRisk = (country: string, sector: string) =>\n useGet<TransitionRisk<RiskEntry>>(`${apiUrl}/dashboard/output-loss-from-transition-risk`, {\n params: { country, sector, page: 1, limit: 1000 },\n });\n\nexport const useGetCarbonIntensity = (country: string, sector: string) =>\n useGet<TransitionRisk<RiskEntry>>(`${apiUrl}/dashboard/carbon-intensity`, {\n params: { country, sector, page: 1, limit: 1000 },\n });\n\nexport const useGetCarbonTaxEvolution = (country: string, scenario: Scenario) =>\n useGet<TransitionRisk<TaxEvolution>>(`${apiUrl}/dashboard/evolution-of-carbon-tax`, {\n params: { country, scenario, page: 1, limit: 1000 },\n });\n\nexport const useGetValueChainDistribution = (country: string, sector: string, scenario: Scenario) =>\n useGet<ValueChainDistribution>(\n `${apiUrl}/dashboard/value-chain-distribution-of-output-losses/${country}/${sector}/${scenario}`,\n );\n\nexport const useGetPhysicalRisk = (country: string, sector: string) =>\n useGet<TransitionRisk<RiskEntry>>(`${apiUrl}/dashboard/output-loss-from-physical-risk`, {\n params: { country, sector, page: 1, limit: 1000 },\n });\n\nexport const useGetContributionByCountry = (country: string, scenario: Scenario) =>\n useGet<ContributionByCountry>(\n `${apiUrl}/dashboard/contribution-to-temperature-change-by-country/${country}/${scenario}`,\n );\n\nexport const useGetContribution = (country: string, scenario: Scenario) =>\n useGet<TransitionRisk<Contribution>>(`${apiUrl}/dashboard/contribution-to-temperature-change`, {\n params: { country, scenario, page: 1, limit: 1000 },\n });\n\nexport const useGetAvailability = () => {\n const { error, loading } = useGet<TransitionRisk<RiskEntry>>(\n `${apiUrl}/dashboard/total-output-loss`,\n { params: { page: 1, limit: 1 } },\n );\n\n return { data: loading ? true : error?.code !== 403, loading };\n};\n","import styled from 'styled-components';\nimport { Box } from '@scope/scope-one-ui/core/Box';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\n\nexport const Tooltip = styled(Box)`\n max-width: ${SIZES.spacing(42)};\n color: ${COLORS.typography.main};\n white-space: normal;\n\n span {\n color: ${COLORS.typography.label};\n }\n`;\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n ChartLegend,\n Widget,\n LineChart,\n Typography,\n Box,\n Select,\n IconTextButton,\n} from '@scope/scope-one-ui/core';\nimport { LinearData } from '@scope/scope-one-ui/core/Charts/LineChart/LineChart.d';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport Download from 'assets/icons/download.svg';\nimport { useGetTotalOutputLoss, useGetExportUrl } from '../../services/climateStressTest';\nimport { PageData } from '../../types/climateStressTest';\nimport { Tooltip } from '../TransitionRisk/TransitionRisk.styled';\n\nexport const TotalOutputLoss: FC<PageData> = ({ entity, countries, sectors }) => {\n const { t } = useTranslation();\n\n const [sector, setSector] = useState(entity.sector.code);\n const [country, setCountry] = useState(entity.country.name);\n\n const countryIso = countries.find((item) => item.name === country)?.iso!;\n\n const { data: risk } = useGetTotalOutputLoss(countryIso, sector);\n const exportFile = useGetExportUrl('total-output-loss', countryIso, sector);\n\n const getRiskData = (key: string) =>\n (risk?.data || []).map((item) => ({ x: `${item.year}`, y: item[key] }));\n\n const chartData: LinearData[] = [\n { name: t('Orderly'), color: COLORS.primary.main, data: getRiskData('orderly') },\n { name: t('Disorderly'), color: COLORS.warning.main, data: getRiskData('disorderly') },\n { name: t('Hot house'), color: COLORS.error.main, data: getRiskData('hotHouse') },\n ];\n\n const legend = (\n <ChartLegend items={chartData.map(({ color, name }) => ({ color: color!, label: name }))} />\n );\n\n return (\n <Widget\n title={t('Total output loss')}\n tooltip={\n <Tooltip display=\"flex\" flexDirection=\"column\">\n <Typography variant=\"body1\">\n <span>{t('x-axis: ')}</span>\n {t('years')}\n </Typography>\n <Typography variant=\"body1\">\n <span>{t('y-axis: ')}</span>\n {t(\n 'output loss in % compared to baseline with no physical and transition risk following the NGFS scenarios:',\n )}\n </Typography>\n {legend}\n </Tooltip>\n }\n customHeader={\n <IconTextButton icon={<Download />} onClick={exportFile}>\n Export\n </IconTextButton>\n }\n >\n <Box display=\"flex\" flexDirection=\"column\" p={2} gridGap={2} pb={4}>\n <Box display=\"flex\" gridGap={2} justifyContent=\"flex-end\">\n <Select\n value={sector}\n label={t('Sector')}\n onChange={(val) => setSector(val as string)}\n options={sectors.map(({ code, name }) => ({ value: code, label: name }))}\n />\n {!entity.isSovereign && (\n <Select\n value={country}\n label={t('Country')}\n onChange={(val) => setCountry(val as string)}\n options={countries.map(({ name }) => ({ value: name, label: name }))}\n />\n )}\n </Box>\n <LineChart\n label={t('Output loss')}\n data={chartData}\n yDataType=\"percentage\"\n xLabel={t('Date')}\n />\n {legend}\n </Box>\n </Widget>\n );\n};\n","import styled, { css } from 'styled-components';\nimport { Box } from '@scope/scope-one-ui/core';\nimport { SIZES } from '@scope/scope-one-ui/theme';\nimport { DotProps } from './ClimateChangeRisk.d';\n\nexport const ChartContainer = styled(Box)`\n > div {\n width: ${SIZES.spacing(36)};\n height: ${SIZES.spacing(32)};\n }\n`;\n\nexport const Dot = styled(Box)<DotProps>(\n ({ color }) => css`\n border-radius: 50%;\n flex-shrink: 0;\n width: ${SIZES.spacing(1.5)};\n height: ${SIZES.spacing(1.5)};\n background-color: ${color};\n `,\n);\n","import React, { FC, useState } from 'react';\nimport { Box, Card, Label, PieChart, Tooltip, Typography } from '@scope/scope-one-ui/core';\nimport Info from 'assets/icons/info.svg';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\nimport { ValueChainInfoCardProps } from './ClimateChangeRisk.d';\nimport { ChartContainer, Dot } from './ClimateChangeRisk.styled';\n\nexport const ValueChainInfoCard: FC<ValueChainInfoCardProps> = ({ title, tooltip, data }) => {\n const [activeIndex, setActiveIndex] = useState<number>();\n const onPieEnter = (_, index) => setActiveIndex(index);\n const onPieLeave = () => setActiveIndex(undefined);\n\n return (\n <Card>\n <Box display=\"flex\" justifyContent=\"space-between\" p={2}>\n <Box display=\"flex\" flexDirection=\"column\" justifyContent=\"space-between\">\n <Box display=\"flex\" gridGap={1} alignItems=\"center\">\n <Label>{title}</Label>\n <Tooltip content={tooltip} position=\"bottom\">\n <Box display=\"flex\">\n <Info\n width={SIZES.spacing(2)}\n height={SIZES.spacing(2)}\n color={COLORS.typography.main}\n />\n </Box>\n </Tooltip>\n </Box>\n {data.map(({ name, value, color }) => (\n <Box key={name} display=\"flex\" flexDirection=\"column\" gridGap={2}>\n <Box display=\"flex\" alignItems=\"center\" gridGap={1}>\n <Dot color={color!} />\n <Typography variant=\"body1\" color={COLORS.typography.main}>\n {name}\n </Typography>\n </Box>\n <Typography variant=\"h1\" color={COLORS.typography.label}>\n {value.toFixed(2)} %\n </Typography>\n </Box>\n ))}\n </Box>\n <ChartContainer>\n <PieChart\n variant=\"small\"\n chartData={data}\n activeIndex={activeIndex}\n onPieEnter={onPieEnter}\n onPieLeave={onPieLeave}\n />\n </ChartContainer>\n </Box>\n </Card>\n );\n};\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Widget, Box, Select, Radio, IconTextButton } from '@scope/scope-one-ui/core';\nimport Download from 'assets/icons/download.svg';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { useGetValueChainDistribution, useGetExportUrl } from '../../services/climateStressTest';\nimport { PageData, Scenario } from '../../types/climateStressTest';\nimport { ValueChainInfoCard } from './ValueChainInfoCard';\n\nexport const ValueChainDistribution: FC<PageData> = ({ entity, countries, sectors }) => {\n const { t } = useTranslation();\n\n const [sector, setSector] = useState(entity.sector.code);\n const [country, setCountry] = useState(entity.country.name);\n const [scenario, setScenario] = useState<Scenario>('orderly');\n\n const countryIso = countries.find((item) => item.name === country)?.iso!;\n\n const { data } = useGetValueChainDistribution(countryIso, sector, scenario);\n const exportFile = useGetExportUrl(\n 'value-chain-distribution-of-output-losses',\n countryIso,\n sector,\n );\n\n const upstreamData = [\n {\n name: t('Supply chain input'),\n value: data?.upstreamSupplyChainInput || 0,\n color: COLORS.primary.main,\n },\n {\n name: t('Value added (labour/taxes)'),\n value: data?.upstreamValueAdded || 0,\n color: COLORS.warning.main,\n },\n ];\n\n const downstreamData = [\n {\n name: t('Intermediate demand use'),\n value: data?.downstreamIntermediateDemandUse || 0,\n color: COLORS.primary.main,\n },\n {\n name: t('Final demand use'),\n value: data?.downstreamFinalDemandUse || 0,\n color: COLORS.warning.main,\n },\n ];\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" gridGap={2}>\n <Widget\n title={t('Value-chain distribution of output losses')}\n customHeader={\n <IconTextButton icon={<Download />} onClick={exportFile}>\n Export\n </IconTextButton>\n }\n hasFilters\n >\n <Box display=\"flex\" justifyContent=\"space-between\" p={2} gridGap={2}>\n <Radio\n value={scenario}\n onChange={(val) => setScenario(val as Scenario)}\n options={[\n { value: 'orderly', label: 'Orderly' },\n { value: 'disorderly', label: 'Disorderly' },\n { value: 'hotHouse', label: 'Hot House' },\n ]}\n />\n <Box display=\"flex\" gridGap={2}>\n <Select\n value={sector}\n label={t('Sector')}\n onChange={(val) => setSector(val as string)}\n options={sectors.map(({ code, name }) => ({ value: code, label: name }))}\n />\n {!entity.isSovereign && (\n <Select\n value={country}\n label={t('Country')}\n onChange={(val) => setCountry(val as string)}\n options={countries.map(({ name }) => ({ value: name, label: name }))}\n />\n )}\n </Box>\n </Box>\n </Widget>\n <Box display=\"flex\" gridGap={4}>\n <Box display=\"flex\" flexDirection=\"column\" flex={1}>\n <ValueChainInfoCard\n title=\"UPSTREAM\"\n tooltip=\"Share of Upstream contribution (in %)\"\n data={upstreamData}\n />\n </Box>\n <Box display=\"flex\" flexDirection=\"column\" flex={1}>\n <ValueChainInfoCard\n title=\"DOWNSTREAM\"\n tooltip=\"Share of Downstream contribution (in %)\"\n data={downstreamData}\n />\n </Box>\n </Box>\n </Box>\n );\n};\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Section } from '@scope/scope-one-ui/core';\nimport { TotalOutputLoss } from './TotalOutputLoss';\nimport { PageData } from '../../types/climateStressTest';\nimport { ValueChainDistribution } from './ValueChainDistribution';\n\nconst chips = ['TOTAL OUTPUT LOSS', 'VALUE-CHAIN DISTRIBUTION OF OUTPUT LOSSES'];\n\nexport const ClimateChangeRisk: FC<PageData> = (pageData) => {\n const { t } = useTranslation();\n\n return (\n <Section header={t('Climate change risk')} chips={chips}>\n <Box display=\"flex\" flexDirection=\"column\" gridGap={4}>\n <TotalOutputLoss {...pageData} />\n <ValueChainDistribution {...pageData} />\n </Box>\n </Section>\n );\n};\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n ChartLegend,\n Widget,\n LineChart,\n Typography,\n Box,\n Select,\n IconTextButton,\n} from '@scope/scope-one-ui/core';\nimport { LinearData } from '@scope/scope-one-ui/core/Charts/LineChart/LineChart.d';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport Download from 'assets/icons/download.svg';\nimport { useGetTransitionRisk, useGetExportUrl } from '../../services/climateStressTest';\nimport { PageData } from '../../types/climateStressTest';\nimport { Tooltip } from './TransitionRisk.styled';\n\nexport const OutputLoss: FC<PageData> = ({ entity, countries, sectors }) => {\n const { t } = useTranslation();\n\n const [sector, setSector] = useState(entity.sector.code);\n const [country, setCountry] = useState(entity.country.name);\n\n const countryIso = countries.find((item) => item.name === country)?.iso!;\n\n const { data: risk } = useGetTransitionRisk(countryIso, sector);\n const exportFile = useGetExportUrl('output-loss-from-transition-risk', countryIso, sector);\n\n const getRiskData = (key: string) =>\n (risk?.data || []).map((item) => ({ x: `${item.year}`, y: item[key] }));\n\n const chartData: LinearData[] = [\n { name: t('Orderly'), color: COLORS.primary.main, data: getRiskData('orderly') },\n { name: t('Disorderly'), color: COLORS.warning.main, data: getRiskData('disorderly') },\n { name: t('Hot house'), color: COLORS.error.main, data: getRiskData('hotHouse') },\n ];\n\n const legend = (\n <ChartLegend items={chartData.map(({ color, name }) => ({ color: color!, label: name }))} />\n );\n\n return (\n <Widget\n title={t('Output loss from transition risk')}\n tooltip={\n <Tooltip display=\"flex\" flexDirection=\"column\">\n <Typography variant=\"body1\">\n <span>{t('x-axis: ')}</span>\n {t('years')}\n </Typography>\n <Typography variant=\"body1\">\n <span>{t('y-axis: ')}</span>\n {t(\n 'output loss in % compared to baseline with no physical and transition risk following the NGFS scenarios:',\n )}\n </Typography>\n {legend}\n </Tooltip>\n }\n customHeader={\n <IconTextButton icon={<Download />} onClick={exportFile}>\n Export\n </IconTextButton>\n }\n >\n <Box display=\"flex\" flexDirection=\"column\" p={2} gridGap={2} pb={4}>\n <Box display=\"flex\" gridGap={2} justifyContent=\"flex-end\">\n <Select\n value={sector}\n label={t('Sector')}\n onChange={(val) => setSector(val as string)}\n options={sectors.map(({ code, name }) => ({ value: code, label: name }))}\n />\n {!entity.isSovereign && (\n <Select\n value={country}\n label={t('Country')}\n onChange={(val) => setCountry(val as string)}\n options={countries.map(({ name }) => ({ value: name, label: name }))}\n />\n )}\n </Box>\n <LineChart\n label={t('Output loss')}\n data={chartData}\n yDataType=\"percentage\"\n xLabel={t('Date')}\n />\n {legend}\n </Box>\n </Widget>\n );\n};\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n ChartLegend,\n Widget,\n LineChart,\n Typography,\n Box,\n Select,\n IconTextButton,\n} from '@scope/scope-one-ui/core';\nimport { LinearData } from '@scope/scope-one-ui/core/Charts/LineChart/LineChart.d';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport Download from 'assets/icons/download.svg';\nimport { useGetExportUrl, useGetCarbonIntensity } from '../../services/climateStressTest';\nimport { PageData } from '../../types/climateStressTest';\nimport { Tooltip } from './TransitionRisk.styled';\n\nexport const CarbonIntensity: FC<PageData> = ({ entity, countries, sectors }) => {\n const { t } = useTranslation();\n\n const [sector, setSector] = useState(entity.sector.code);\n const [country, setCountry] = useState(entity.country.name);\n\n const countryIso = countries.find((item) => item.name === country)?.iso!;\n\n const { data: risk } = useGetCarbonIntensity(countryIso, sector);\n const exportFile = useGetExportUrl('carbon-intensity', countryIso, sector);\n\n const getRiskData = (key: string) =>\n (risk?.data || []).map((item) => ({ x: `${item.year}`, y: item[key] }));\n\n const chartData: LinearData[] = [\n { name: t('Orderly'), color: COLORS.primary.main, data: getRiskData('orderly') },\n { name: t('Disorderly'), color: COLORS.warning.main, data: getRiskData('disorderly') },\n { name: t('Hot house'), color: COLORS.error.main, data: getRiskData('hotHouse') },\n ];\n\n const legend = (\n <ChartLegend items={chartData.map(({ color, name }) => ({ color: color!, label: name }))} />\n );\n\n return (\n <Widget\n title={t('Carbon intensity')}\n tooltip={\n <Tooltip display=\"flex\" flexDirection=\"column\">\n <Typography variant=\"body1\">\n <span>{t('x-axis: ')}</span>\n {t('years')}\n </Typography>\n <Typography variant=\"body1\">\n <span>{t('y-axis: ')}</span>\n {t('kg of CO2 equivalents per EUR of revenue')}\n </Typography>\n {legend}\n </Tooltip>\n }\n customHeader={\n <IconTextButton icon={<Download />} onClick={exportFile}>\n Export\n </IconTextButton>\n }\n >\n <Box display=\"flex\" flexDirection=\"column\" p={2} gridGap={2} pb={4}>\n <Box display=\"flex\" gridGap={2} justifyContent=\"flex-end\">\n <Select\n value={sector}\n label={t('Sector')}\n onChange={(val) => setSector(val as string)}\n options={sectors.map(({ code, name }) => ({ value: code, label: name }))}\n />\n {!entity.isSovereign && (\n <Select\n value={country}\n label={t('Country')}\n onChange={(val) => setCountry(val as string)}\n options={countries.map(({ name }) => ({ value: name, label: name }))}\n />\n )}\n </Box>\n <LineChart label={t('CO2 (kg)/EUR')} data={chartData} xLabel={t('Date')} />\n {legend}\n </Box>\n </Widget>\n );\n};\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n ChartLegend,\n Widget,\n LineChart,\n Typography,\n Box,\n Select,\n Radio,\n IconTextButton,\n} from '@scope/scope-one-ui/core';\nimport { LinearData } from '@scope/scope-one-ui/core/Charts/LineChart/LineChart.d';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport Download from 'assets/icons/download.svg';\nimport { useGetExportUrl, useGetCarbonTaxEvolution } from '../../services/climateStressTest';\nimport { PageData, Scenario } from '../../types/climateStressTest';\nimport { Tooltip } from './TransitionRisk.styled';\n\nexport const CarbonTaxEvolution: FC<PageData> = ({ entity, countries, sectors }) => {\n const { t } = useTranslation();\n\n const [sector, setSector] = useState(entity.sector.code);\n const [country, setCountry] = useState(entity.country.name);\n const [scenario, setScenario] = useState<Scenario>('orderly');\n\n const countryIso = countries.find((item) => item.name === country)?.iso!;\n\n const { data: risk } = useGetCarbonTaxEvolution(countryIso, scenario);\n const exportFile = useGetExportUrl('evolution-of-carbon-tax', countryIso, sector);\n\n const getRiskData = (key: string) =>\n (risk?.data || []).map((item) => ({ x: `${item.year}`, y: item[key] }));\n\n const chartData: LinearData[] = [\n {\n name: t(country),\n color: COLORS.primary.main,\n data: getRiskData('value'),\n },\n {\n name: t('World average'),\n color: COLORS.warning.main,\n data: getRiskData('worldAverageValue'),\n },\n ];\n\n const legend = (\n <ChartLegend items={chartData.map(({ color, name }) => ({ color: color!, label: name }))} />\n );\n\n return (\n <Widget\n title={t('Evolution of the carbon tax')}\n tooltip={\n <Tooltip display=\"flex\" flexDirection=\"column\">\n <Typography variant=\"body1\">\n <span>{t('x-axis: ')}</span>\n {t('years')}\n </Typography>\n <Typography variant=\"body1\">\n <span>{t('y-axis: ')}</span>\n {t('carbon price per ton')}\n </Typography>\n {legend}\n </Tooltip>\n }\n customHeader={\n <IconTextButton icon={<Download />} onClick={exportFile}>\n Export\n </IconTextButton>\n }\n >\n <Box display=\"flex\" flexDirection=\"column\" p={2} gridGap={2} pb={4}>\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\">\n <Radio\n value={scenario}\n onChange={(val) => setScenario(val as Scenario)}\n options={[\n { value: 'orderly', label: 'Orderly' },\n { value: 'disorderly', label: 'Disorderly' },\n { value: 'hotHouse', label: 'Hot House' },\n ]}\n />\n {entity.isSovereign && (\n <Select\n value={sector}\n label={t('Sector')}\n onChange={(val) => setSector(val as string)}\n options={sectors.map(({ code, name }) => ({ value: code, label: name }))}\n />\n )}\n {!entity.isSovereign && (\n <Select\n value={country}\n label={t('Country')}\n onChange={(val) => setCountry(val as string)}\n options={countries.map(({ name }) => ({ value: name, label: name }))}\n />\n )}\n </Box>\n <LineChart label={t('EUR/ton of CO2')} data={chartData} xLabel={t('Date')} />\n {legend}\n </Box>\n </Widget>\n );\n};\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Section } from '@scope/scope-one-ui/core';\nimport { PageData } from '../../types/climateStressTest';\nimport { OutputLoss } from './OutputLoss';\nimport { CarbonIntensity } from './CarbonIntensity';\nimport { CarbonTaxEvolution } from './CarbonTaxEvolution';\n\nconst chips = [\n 'OUTPUT LOSS FROM TRANSITION RISK',\n 'CARBON INTENSITY',\n 'EVOLUTION OF THE CARBON TAX',\n];\n\nexport const TransitionRisk: FC<PageData> = (pageData) => {\n const { t } = useTranslation();\n\n return (\n <Section header={t('Transition Risk')} chips={chips}>\n <Box display=\"flex\" flexDirection=\"column\" gridGap={4}>\n <OutputLoss {...pageData} />\n <Box display=\"flex\" gridGap={4} mb={0.5}>\n <Box display=\"flex\" flexDirection=\"column\" flex={1}>\n <CarbonIntensity {...pageData} />\n </Box>\n <Box display=\"flex\" flexDirection=\"column\" flex={1}>\n <CarbonTaxEvolution {...pageData} />\n </Box>\n </Box>\n </Box>\n </Section>\n );\n};\n","import styled from 'styled-components';\nimport { Box } from '@scope/scope-one-ui/core/Box';\nimport { COLORS, SIZES } from '@scope/scope-one-ui/theme';\n\nexport const Tooltip = styled(Box)`\n max-width: ${SIZES.spacing(42)};\n color: ${COLORS.typography.main};\n white-space: normal;\n\n span {\n color: ${COLORS.typography.label};\n }\n`;\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n ChartLegend,\n Widget,\n LineChart,\n Typography,\n Box,\n Select,\n IconTextButton,\n} from '@scope/scope-one-ui/core';\nimport { LinearData } from '@scope/scope-one-ui/core/Charts/LineChart/LineChart.d';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport Download from 'assets/icons/download.svg';\nimport { useGetExportUrl, useGetPhysicalRisk } from '../../services/climateStressTest';\nimport { PageData } from '../../types/climateStressTest';\nimport { Tooltip } from './PhysicalRisk.styled';\n\nexport const OutputLoss: FC<PageData> = ({ entity, countries, sectors }) => {\n const { t } = useTranslation();\n\n const [sector, setSector] = useState(entity.sector.code);\n const [country, setCountry] = useState(entity.country.name);\n\n const countryIso = countries.find((item) => item.name === country)?.iso!;\n\n const { data: risk } = useGetPhysicalRisk(countryIso, sector);\n const exportFile = useGetExportUrl('output-loss-from-physical-risk', countryIso, sector);\n\n const getRiskData = (key: string) =>\n (risk?.data || []).map((item) => ({ x: `${item.year}`, y: item[key] }));\n\n const chartData: LinearData[] = [\n { name: t('Orderly'), color: COLORS.primary.main, data: getRiskData('orderly') },\n { name: t('Disorderly'), color: COLORS.warning.main, data: getRiskData('disorderly') },\n { name: t('Hot house'), color: COLORS.error.main, data: getRiskData('hotHouse') },\n ];\n\n const legend = (\n <ChartLegend items={chartData.map(({ color, name }) => ({ color: color!, label: name }))} />\n );\n\n return (\n <Widget\n title={t('Output loss from physical risk')}\n tooltip={\n <Tooltip display=\"flex\" flexDirection=\"column\">\n <Typography variant=\"body1\">\n <span>{t('x-axis: ')}</span>\n {t('years')}\n </Typography>\n <Typography variant=\"body1\">\n <span>{t('y-axis: ')}</span>\n {t(\n 'output loss in % compared to baseline with no physical and transition risk following the NGFS scenarios:',\n )}\n </Typography>\n {legend}\n </Tooltip>\n }\n customHeader={\n <IconTextButton icon={<Download />} onClick={exportFile}>\n Export\n </IconTextButton>\n }\n >\n <Box display=\"flex\" flexDirection=\"column\" p={2} gridGap={2} pb={4}>\n <Box display=\"flex\" gridGap={2} justifyContent=\"flex-end\">\n <Select\n value={sector}\n label={t('Sector')}\n onChange={(val) => setSector(val as string)}\n options={sectors.map(({ code, name }) => ({ value: code, label: name }))}\n />\n {!entity.isSovereign && (\n <Select\n value={country}\n label={t('Country')}\n onChange={(val) => setCountry(val as string)}\n options={countries.map(({ name }) => ({ value: name, label: name }))}\n />\n )}\n </Box>\n <LineChart\n label={t('Output loss')}\n data={chartData}\n yDataType=\"percentage\"\n xLabel={t('Date')}\n />\n {legend}\n </Box>\n </Widget>\n );\n};\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Widget, Box, Typography, ProgressList, IconTextButton } from '@scope/scope-one-ui/core';\nimport Download from 'assets/icons/download.svg';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { useGetContributionByCountry, useGetExportUrl } from '../../services/climateStressTest';\nimport { ContributionByCountry, PageData } from '../../types/climateStressTest';\nimport { Tooltip } from './PhysicalRisk.styled';\n\nexport const CountryContribution: FC<PageData> = ({ entity }) => {\n const { t } = useTranslation();\n\n const { data: orderly } = useGetContributionByCountry(entity.country.code, 'orderly');\n const { data: disorderly } = useGetContributionByCountry(entity.country.code, 'disorderly');\n const { data: hotHouse } = useGetContributionByCountry(entity.country.code, 'hotHouse');\n const exportFile = useGetExportUrl(\n 'contribution-to-temperature-change-by-country',\n entity.country.code,\n entity.sector.code,\n );\n\n /* Sets maximum scale to 125% of highest available value (abs) to make data nicely visible */\n const max =\n !orderly || !disorderly || !hotHouse\n ? 0\n : Math.max(\n Math.abs(orderly.value),\n Math.abs(orderly.worldAverage),\n Math.abs(orderly.worldBest),\n Math.abs(orderly.worldWorst),\n Math.abs(disorderly.value),\n Math.abs(disorderly.worldAverage),\n Math.abs(disorderly.worldBest),\n Math.abs(disorderly.worldWorst),\n Math.abs(hotHouse.value),\n Math.abs(hotHouse.worldAverage),\n Math.abs(hotHouse.worldBest),\n Math.abs(hotHouse.worldWorst),\n ) * 1.25;\n\n const getCountData = (count?: ContributionByCountry) => {\n if (!count) return [];\n\n return [\n { label: entity.country.name, count: +count.value.toFixed(1), color: COLORS.primary.main },\n { label: 'World average', count: +count.worldAverage.toFixed(1), color: COLORS.warning.main },\n { label: `World's best`, count: +count.worldBest.toFixed(1), color: COLORS.success.main },\n { label: `World's worst`, count: +count.worldWorst.toFixed(1), color: COLORS.error.main },\n ];\n };\n\n const data = [\n { label: t('Orderly'), count: getCountData(orderly) },\n { label: t('Disorderly'), count: getCountData(disorderly) },\n { label: t('Hot house'), count: getCountData(hotHouse) },\n ];\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" gridGap={2}>\n <Widget\n title={t('Country contribution to temperature change')}\n customHeader={\n <IconTextButton icon={<Download />} onClick={exportFile}>\n Export\n </IconTextButton>\n }\n tooltip={\n <Tooltip display=\"flex\" flexDirection=\"column\">\n <Typography variant=\"body1\" color={COLORS.typography.label}>\n {t('Relative contribution of the country to the average temperature change')}\n </Typography>\n </Tooltip>\n }\n />\n <Box display=\"flex\" gridGap={4}>\n {data.map(({ label, count }) => (\n <Box key={label} display=\"flex\" flexDirection=\"column\" flex={1}>\n <Widget title={label}>\n <ProgressList data={count} percentage total={max} min={-max} />\n </Widget>\n </Box>\n ))}\n </Box>\n </Box>\n );\n};\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport {\n Widget,\n Box,\n Typography,\n ProgressList,\n ChartLegend,\n Select,\n IconTextButton,\n} from '@scope/scope-one-ui/core';\nimport Download from 'assets/icons/download.svg';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { useGetContribution, useGetExportUrl } from '../../services/climateStressTest';\nimport { Contribution, PageData, TransitionRisk } from '../../types/climateStressTest';\nimport { Tooltip } from './PhysicalRisk.styled';\n\nexport const SectorContribution: FC<PageData> = ({ entity, countries }) => {\n const { t } = useTranslation();\n\n const [country, setCountry] = useState(entity.country.name);\n\n const countryIso = countries.find((item) => item.name === country)?.iso!;\n\n const { data: orderly } = useGetContribution(countryIso, 'orderly');\n const { data: disorderly } = useGetContribution(countryIso, 'disorderly');\n const { data: hotHouse } = useGetContribution(countryIso, 'hotHouse');\n const exportFile = useGetExportUrl('contribution-to-temperature-change', countryIso);\n\n const getAbs = (dataset?: TransitionRisk<Contribution>) =>\n dataset?.data.map(({ value }) => Math.abs(value)) || [];\n\n /* Sets maximum scale to 125% of highest available value (abs) to make data nicely visible */\n const max = Math.max(...getAbs(orderly), ...getAbs(disorderly), ...getAbs(hotHouse)) * 1.25;\n\n const getCount = (count?: TransitionRisk<Contribution>) =>\n count?.data.map((item) => ({\n label: item.sector,\n count: +item.value.toFixed(1),\n })) || [];\n\n const data = [\n { label: t('Orderly'), color: COLORS.primary.main, count: getCount(orderly) },\n { label: t('Disorderly'), color: COLORS.warning.main, count: getCount(disorderly) },\n { label: t('Hot house'), color: COLORS.error.main, count: getCount(hotHouse) },\n ];\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" gridGap={2}>\n <Widget\n title={t(\n entity.isSovereign\n ? 'Sector contribution to temperature change'\n : 'Contribution to temperature change',\n )}\n customHeader={\n <IconTextButton icon={<Download />} onClick={exportFile}>\n Export\n </IconTextButton>\n }\n hasFilters={!entity.isSovereign}\n tooltip={\n <Tooltip display=\"flex\" flexDirection=\"column\">\n <Typography variant=\"body1\" color={COLORS.typography.label}>\n {t(\n 'Relative contribution of the sector to the average temperature change on country-level',\n )}\n </Typography>\n <ChartLegend items={data} />\n </Tooltip>\n }\n >\n {!entity.isSovereign && (\n <Box display=\"flex\" p={2} justifyContent=\"flex-end\">\n <Select\n value={country}\n label={t('Country')}\n onChange={(val) => setCountry(val as string)}\n options={countries.map(({ name }) => ({ value: name, label: name }))}\n />\n </Box>\n )}\n </Widget>\n <Box display=\"flex\" gridGap={4}>\n {data.map(({ label, count, color }) => (\n <Box key={label} display=\"flex\" flexDirection=\"column\" flex={1}>\n <Widget title={label}>\n <ProgressList\n data={count.map((item) => ({ ...item, color }))}\n percentage\n total={max}\n min={-max}\n />\n </Widget>\n </Box>\n ))}\n </Box>\n </Box>\n );\n};\n","import React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Section } from '@scope/scope-one-ui/core';\nimport { PageData } from '../../types/climateStressTest';\nimport { OutputLoss } from './OutputLoss';\nimport { CountryContribution } from './CountryContribution';\nimport { SectorContribution } from './SectorContribution';\n\nconst sovereignChips = [\n 'OUTPUT LOSS FROM PHYSICAL RISK',\n 'COUNTRY CONTRIBUTION TO TEMPERATURE CHANGE',\n 'SECTOR CONTRIBUTION TO TEMPERATURE CHANGE',\n];\n\nconst corporateChips = ['OUTPUT LOSS FROM PHYSICAL RISK', 'CONTRIBUTION TO TEMPERATURE CHANGE'];\n\nexport const PhysicalRisk: FC<PageData> = (pageData) => {\n const { t } = useTranslation();\n\n return (\n <Section\n header={t('Physical risk')}\n chips={pageData.entity.isSovereign ? sovereignChips : corporateChips}\n >\n <Box display=\"flex\" flexDirection=\"column\" gridGap={4}>\n <OutputLoss {...pageData} />\n {pageData.entity.isSovereign && <CountryContribution {...pageData} />}\n <SectorContribution {...pageData} />\n </Box>\n </Section>\n );\n};\n","import React, { FC, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport { creditRatingScalesMapping } from 'shared/mappings';\nimport { ratingConstants } from 'shared/constants/company';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { endorsementCreditRating } from 'shared/constants/summaryTab';\nimport { BlurWrapper } from 'ui';\nimport { SummaryCard, HeadSquare, SummaryCardLineChart } from 'modules/common/SummaryCard';\nimport { generalInformationMock } from 'modules/common/SummaryCard/Request/generalInformationMock';\nimport summaryTabHistoryData from 'assets/mockedData/summaryTabHistoryData.json';\nimport { shopProductsCategories } from 'modules/shop/shared/constants/shopProductsCategories';\nimport { ShopRelatedProductsModal } from 'modules/shop/components/ShopRelatedProductsModal';\nimport { ShopProductLines } from 'modules/shop/shared/constants/shopProductLines';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\n\nconst data = {\n latestChange: {},\n generalInformation: {},\n levels: {},\n dates: {},\n documents: [],\n ratingScalesData: creditRatingScalesMapping(\n portfolioTypes.ESG_ANALYSIS,\n ratingConstants.entityReview,\n ),\n generalInformationList: generalInformationMock,\n endorsementList: endorsementCreditRating,\n};\n\nconst useStyles = makeStyles({\n content: {\n flexDirection: 'column',\n alignContent: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n height: '100%',\n whiteSpace: 'pre-line',\n },\n unlockButton: {\n height: 50,\n margin: '0 auto',\n marginTop: 20,\n padding: '5px 30px',\n fontSize: '1rem',\n },\n});\n\nconst useHeadSquareStyles = makeStyles({\n score: {\n fontWeight: 500,\n fontSize: 60,\n },\n max: {\n fontSize: 24,\n },\n scoreWidgetMainColumn: {\n height: '100%',\n },\n});\n\ntype SummaryCardCSTProps = {\n onUnlocked: (unlocked: boolean) => void;\n};\n\nexport const SummaryCardCST: FC<SummaryCardCSTProps> = ({ onUnlocked }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const headSquareClasses = useHeadSquareStyles();\n const [isRelatedProductsModalOpen, setRelatedProductsModalOpen] = useState(false);\n\n const openRelatedProductsModal = () => setRelatedProductsModalOpen(true);\n\n const handleUnlockedButton = (unlocked: boolean) => {\n setRelatedProductsModalOpen(false);\n onUnlocked(unlocked);\n };\n\n return (\n <>\n <BlurWrapper\n content={\n <Grid container className={classes.content}>\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={openRelatedProductsModal}\n className={classes.unlockButton}\n >\n {t('UNLOCK')}\n </Button>\n </Grid>\n }\n active\n >\n {/* @ts-ignore */}\n <SummaryCard\n headSquare={\n <HeadSquare title={t('Short term')}>\n <span className={headSquareClasses.score}>7.3</span>\n <span className={headSquareClasses.max}>/10</span>\n </HeadSquare>\n }\n history={<SummaryCardLineChart history={summaryTabHistoryData} />}\n data={data}\n />\n </BlurWrapper>\n {isRelatedProductsModalOpen && (\n <ShopRelatedProductsModal\n data={{\n category: shopProductsCategories.esgAnalysis,\n countriesAndIndustries: [],\n }}\n open={isRelatedProductsModalOpen}\n onClose={() => handleUnlockedButton(false)}\n onConfirm={() => handleUnlockedButton(true)}\n module={ratingTypes.CLIMATE_STRESS_TEST}\n />\n )}\n </>\n );\n};\n","import React, { FC } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { Box } from '@scope/scope-one-ui/core';\nimport { Loader } from 'ui';\nimport { ClimateChangeRisk } from '../ClimateChangeRisk';\nimport { TransitionRisk } from '../TransitionRisk';\nimport { PhysicalRisk } from '../PhysicalRisk';\nimport {\n useGetAvailability,\n useGetCountriesAndSectors,\n useGetEntity,\n} from '../../services/climateStressTest';\nimport { ClimateStressTestParams, PageData } from '../../types/climateStressTest';\nimport { SummaryCardCST } from '../SummaryCardCST';\n\nexport const ClimateStressTest: FC = () => {\n const { entityId } = useParams<ClimateStressTestParams>();\n const { data: entity, loading: entityLoading, refetch } = useGetEntity(entityId!);\n const { data: isAvailable, loading: availabilityLoading } = useGetAvailability();\n const { data: countriesAndSectors, loading: casLoading } = useGetCountriesAndSectors();\n\n if (entityLoading || casLoading || availabilityLoading || !entity || !countriesAndSectors) {\n return <Loader center />;\n }\n\n if (!isAvailable) {\n return <SummaryCardCST onUnlocked={(unlocked) => unlocked && refetch()} />;\n }\n\n const pageData: PageData = {\n entity: {\n ...entity,\n isSovereign: entity.sector.code === 'AG',\n },\n countries: countriesAndSectors.countries,\n sectors: countriesAndSectors.sectors,\n };\n\n return (\n <Box display=\"flex\" flexDirection=\"column\" gridGap={4} mt={4}>\n <ClimateChangeRisk {...pageData} />\n <TransitionRisk {...pageData} />\n <PhysicalRisk {...pageData} />\n </Box>\n );\n};\n","const actions = {\n setCreditRating: 'SET_CREDIT_RATING',\n setCreditReview: 'SET_CREDIT_REVIEW',\n setESGScore: 'SET_ESG_SCORE',\n setESGSentiment: 'SET_ESG_SENTIMENT',\n};\n\nconst setIsLoading = (type, isLoading) => ({ type, isLoading });\nconst initialLoadingState = {\n creditRating: true,\n creditReview: true,\n esgSentiment: true,\n};\nconst isLoadingReducer = (state, action) => {\n switch (action.type) {\n case actions.setCreditRating:\n return { ...state, creditRating: action.isLoading };\n case actions.setCreditReview:\n return { ...state, creditReview: action.isLoading };\n case actions.setESGSentiment:\n return { ...state, esgSentiment: action.isLoading };\n default:\n throw new Error();\n }\n};\nconst setData = (type, data) => ({ type, data });\nconst initialDataState = {\n creditRating: {},\n creditReview: {},\n esgSentiment: {},\n};\nconst dataReducer = (state, action) => {\n switch (action.type) {\n case actions.setCreditRating:\n return { ...state, creditRating: action.data };\n case actions.setCreditReview:\n return { ...state, creditReview: action.data };\n case actions.setESGSentiment:\n return { ...state, esgSentiment: action.data };\n default:\n throw new Error();\n }\n};\nconst setStatus = (type, status, value) => ({ type, status, value });\nconst initialStatusState = {\n creditRating: {\n isAvailable: false,\n wasRequested: false,\n },\n creditReview: {\n isAvailable: false,\n wasRequested: false,\n },\n esgSentiment: {\n isAvailable: false,\n dataExists: false,\n },\n};\nconst statusReducer = (state, action) => {\n switch (action.type) {\n case actions.setCreditRating:\n return {\n ...state,\n creditRating: {\n ...state.creditRating,\n [action.status]: action.value,\n },\n };\n case actions.setCreditReview:\n return {\n ...state,\n creditReview: {\n ...state.creditReview,\n [action.status]: action.value,\n },\n };\n case actions.setESGScore:\n return {\n ...state,\n esgScore: {\n ...state.esgScore,\n [action.status]: action.value,\n },\n };\n case actions.setESGSentiment:\n return {\n ...state,\n esgSentiment: {\n ...state.esgSentiment,\n [action.status]: action.value,\n },\n };\n default:\n throw new Error();\n }\n};\nconst setSubscribed = (type, status, value) => ({ type, status, value });\nconst initialSubscribedState = {\n creditRating: {\n isSubscribed: false,\n },\n esgScore: {\n isSubscribed: false,\n },\n esgSentiment: {\n isSubscribed: false,\n },\n};\nconst subscribedReducer = (state, action) => {\n switch (action.type) {\n case actions.setCreditRating:\n return {\n ...state,\n creditRating: {\n ...state.creditRating,\n [action.status]: action.value,\n },\n };\n case actions.setESGScore:\n return {\n ...state,\n esgScore: {\n ...state.esgScore,\n [action.status]: action.value,\n },\n };\n case actions.setESGSentiment:\n return {\n ...state,\n esgSentiment: {\n ...state.esgSentiment,\n [action.status]: action.value,\n },\n };\n default:\n throw new Error();\n }\n};\n\nexport {\n actions,\n setIsLoading,\n initialLoadingState,\n isLoadingReducer,\n setData,\n initialDataState,\n dataReducer,\n setStatus,\n initialStatusState,\n statusReducer,\n setSubscribed,\n initialSubscribedState,\n subscribedReducer,\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Typography from '@mui/material/Typography';\nimport Grid from '@mui/material/Grid';\n\nimport { RoundButton } from 'ui/Buttons';\n\nconst SectionTitle = ({ label, ratingType, onChangeTabs }) => {\n const { t } = useTranslation();\n\n return (\n <Grid container justifyContent=\"space-between\">\n <Grid item xs={10}>\n <Typography variant=\"h5\">{label}</Typography>\n </Grid>\n <Grid item xs={2}>\n <Grid container justifyContent=\"flex-end\">\n <RoundButton\n onClick={() => {\n onChangeTabs('companyModule', ratingType);\n }}\n label={t('View more')}\n />\n </Grid>\n </Grid>\n </Grid>\n );\n};\n\nSectionTitle.propTypes = {\n label: PropTypes.string.isRequired,\n ratingType: PropTypes.string.isRequired,\n onChangeTabs: PropTypes.func.isRequired,\n};\n\nexport { SectionTitle };\n","import React, { forwardRef } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport isNil from 'lodash/isNil';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { Artifacts, TabsPanel } from 'ui';\n\nimport {\n getEntityRatingNewsAction,\n getEntityResearchAction,\n getEntityInstrumentsAction,\n} from 'store/entity/entityActions';\nimport { useArtifacts } from 'shared/hooks';\nimport { companyEntityTabs } from 'shared/constants/company';\nimport PropTypes from 'prop-types';\nimport { InstrumentsTable } from 'modules/common';\n\nconst useStyles = makeStyles((theme) => ({\n container: {\n margin: theme.spacing(2, 0, 0),\n },\n}));\n\nexport const Instruments = () => {\n const { entityId } = useParams();\n const entity = useSelector((state) => state.entity);\n\n return (\n <InstrumentsTable\n dataSelector={entity.instruments}\n actionCreator={getEntityInstrumentsAction}\n actionCreatorParams={{ entityId }}\n />\n );\n};\n\nexport const Research = () => {\n const { entityId } = useParams();\n const entity = useSelector((state) => state.entity);\n const { research, isResearchPending, isRatingRequestPending } = entity;\n const { data, total } = research;\n\n const {\n limit,\n handleChangeArtifactsPage,\n handleArtifactClick,\n currentPage,\n handleChangeRowsPerPage,\n } = useArtifacts({\n query: entity.data.name,\n getArtifactsAction: getEntityResearchAction,\n getArtifactsDataActionParams: {\n entityId,\n industryCode: entity.data.industryCode,\n },\n customLimit: 10,\n });\n\n return (\n <Box p={2}>\n <Artifacts\n data={data}\n isPending={isResearchPending || isRatingRequestPending}\n total={total}\n limit={limit}\n onItemClick={handleArtifactClick}\n onChangePage={handleChangeArtifactsPage}\n currentPage={currentPage}\n onChangeRowsPerPage={handleChangeRowsPerPage}\n />\n </Box>\n );\n};\n\nexport const RatingNews = () => {\n const { entityId } = useParams();\n const entity = useSelector((state) => state.entity);\n const { ratingNews, isRatingNewsPending, isRatingRequestPending } = entity;\n const { data, total } = ratingNews;\n\n const {\n limit,\n handleChangeArtifactsPage,\n handleArtifactClick,\n currentPage,\n handleChangeRowsPerPage,\n } = useArtifacts({\n query: entity.data.name,\n getArtifactsAction: getEntityRatingNewsAction,\n getArtifactsDataActionParams: {\n entityId,\n },\n customLimit: 10,\n });\n\n return (\n <Box p={2}>\n <Artifacts\n data={data}\n isPending={isRatingNewsPending || isRatingRequestPending}\n total={total}\n limit={limit}\n onItemClick={handleArtifactClick}\n onChangePage={handleChangeArtifactsPage}\n currentPage={currentPage}\n onChangeRowsPerPage={handleChangeRowsPerPage}\n />\n </Box>\n );\n};\n\nconst Tabs = forwardRef(({ active, onChange }, ref) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const entity = useSelector((state) => state.entity);\n const { ratingNews, research, instruments } = entity;\n const { total: ratingNewsTotal } = ratingNews;\n const { total: researchTotal } = research;\n const { total: instrumentsTotal } = instruments;\n\n return (\n <Paper variant=\"elevation\" elevation={3} className={classes.container}>\n <TabsPanel ref={ref} active={active} onChange={onChange} lazy={false}>\n <div\n label={t(companyEntityTabs[0].label)}\n value={companyEntityTabs[0].value}\n counter={isNil(instrumentsTotal) ? null : instrumentsTotal}\n >\n <Instruments />\n </div>\n <div\n label={t(companyEntityTabs[1].label)}\n value={companyEntityTabs[1].value}\n counter={isNil(ratingNewsTotal) ? null : ratingNewsTotal}\n >\n <RatingNews />\n </div>\n <div\n label={t(companyEntityTabs[2].label)}\n value={companyEntityTabs[2].value}\n counter={isNil(researchTotal) ? null : researchTotal}\n >\n <Research />\n </div>\n </TabsPanel>\n </Paper>\n );\n});\n\nTabs.defaultProps = {\n onChange: undefined,\n};\n\nTabs.propTypes = {\n active: PropTypes.string.isRequired,\n onChange: PropTypes.func,\n};\n\nexport default Tabs;\n","import React, { useReducer, Suspense, useEffect } from 'react';\nimport { Box } from '@scope/scope-one-ui/core';\nimport { useDispatch, useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useParams } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport isEmpty from 'lodash/isEmpty';\n\nimport { ConfidentialAlert, Title, Loader } from 'ui';\nimport {\n SummaryCardLineChart,\n SummaryCardBusinessCard,\n HeadSquare,\n SummaryCard,\n} from 'modules/common/SummaryCard';\nimport { SummaryCardCST } from 'modules/ClimateStressTest';\nimport { useGetAvailability } from 'modules/ClimateStressTest/services/climateStressTest';\nimport { SummaryCardRequestCreditReview } from 'modules/creditReview';\nimport { SummaryCardRequestCreditRating } from 'modules/creditRating';\nimport { SummaryCardRequestESG } from 'modules/ESG';\nimport { ScoreWidgetMainColumn } from 'ui/ScoreWidget';\nimport { generalInformation } from 'shared/constants/summaryTab';\nimport { creditRatingScalesMapping } from 'shared/mappings';\nimport { ratingConstants } from 'shared/constants/company';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { creditRatingStatuses } from 'shared/constants/creditRatingStatuses';\nimport { fetchCreditReviewSummaryTab, fetchCreditRatingSummaryTab } from 'services';\nimport { esgAvailable, fetchSentimentSummary, fetchSentimentAvailability } from 'services/esg';\nimport { useViewDocuments } from 'shared/hooks';\nimport {\n summaryCardMapCreditRatingParser,\n summaryCardHistoryParser,\n summaryCardDocumentsParser,\n} from 'shared/parsers';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { getScoreWidgetFooterColor } from 'shared/functions';\nimport { getIndustryByName } from 'selectors/common';\nimport { getEntityShouldRefresh } from 'selectors/entity';\nimport { useStyles, useHeadSquareStyles } from 'shared/styles/summaryCard';\nimport {\n actions,\n setIsLoading,\n initialLoadingState,\n isLoadingReducer,\n setData,\n initialDataState,\n dataReducer,\n setStatus,\n initialStatusState,\n statusReducer,\n setSubscribed,\n initialSubscribedState,\n subscribedReducer,\n} from 'shared/state/summaryCard';\nimport { moduleTypes } from 'shared/constants/moduleTypes';\nimport { shopProductsCategories } from 'modules/shop/shared/constants/shopProductsCategories';\nimport { useImpactReview } from 'modules/ESG/services/esgLendingService';\nimport { getSummary } from 'modules/ESG/parsers';\nimport { creditRatingAlerts } from 'shared/constants/creditRating';\nimport { errorCodes } from 'shared/constants/errorCodes';\nimport { useFeatures } from 'shared/hooks/useFeatures/useFeatures';\nimport { refreshEntityAction } from 'store/entity/entityActions';\nimport { parseSentimentData } from 'shared/parsers/esg/sentimentParser';\nimport Typography from '@mui/material/Typography';\nimport { SectionTitle } from './SectionTitle';\nimport { theme } from '../../../theme';\nimport { Instruments } from '../Tabs';\n\nconst SummaryCardTab = ({\n onChangeTabs,\n industry,\n countryCode,\n companyName,\n spv,\n creditRatingMethodologies,\n creditRatingDocuments,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const { esgSentiment } = useFeatures();\n const entityShouldRefresh = useSelector(getEntityShouldRefresh);\n const headSquareClasses = useHeadSquareStyles();\n const { entityId } = useParams();\n const dispatch = useDispatch();\n const [subscribedState, subscribedDispatch] = useReducer(\n subscribedReducer,\n initialSubscribedState,\n );\n const [loadingState, loadingDispatch] = useReducer(isLoadingReducer, initialLoadingState);\n const [dataState, dataDispatch] = useReducer(dataReducer, initialDataState);\n const [statusState, statusDispatch] = useReducer(statusReducer, initialStatusState);\n const features = useFeatures();\n const industryObj = useSelector(getIndustryByName(industry));\n const { viewDocumentsModal, toggleModal, setDefaultExpand } = useViewDocuments({\n entityId,\n companyModule: moduleTypes.CREDIT_RATING,\n company: companyName,\n initialMethodologies: creditRatingMethodologies,\n initialDocuments: creditRatingDocuments,\n });\n const { data: isCSTAvailable } = useGetAvailability();\n const { orangeAccent } = theme.palette.custom;\n const refreshEntity = () => dispatch(refreshEntityAction());\n\n const { data: impactReview, loading: impactReviewLoading } = useImpactReview(entityId);\n\n const esgScore = getSummary(impactReview);\n\n const relatedSubscriptionData = {\n category: shopProductsCategories.creditAnalysis,\n productLine: 'Rating',\n countriesAndIndustries: [\n {\n country: countryCode,\n industries: industryObj ? [industryObj.name] : [],\n },\n ],\n };\n\n const fetchCreditRating = () => {\n loadingDispatch(setIsLoading(actions.setCreditRating, true));\n fetchCreditRatingSummaryTab(entityId)\n .then((data) => {\n dataDispatch(setData(actions.setCreditRating, data));\n loadingDispatch(setIsLoading(actions.setCreditRating, false));\n statusDispatch(setStatus(actions.setCreditRating, 'wasRequested', true));\n statusDispatch(setStatus(actions.setCreditRating, 'isAvailable', true));\n subscribedDispatch(setSubscribed(actions.setCreditRating, 'isSubscribed', true));\n })\n .catch(({ status, message, error }) => {\n const isSubscribed = Number(error) !== errorCodes.creditRating.isSubscribed;\n\n switch (status) {\n case creditRatingStatuses.notFound:\n subscribedDispatch(setSubscribed(actions.setCreditRating, 'isSubscribed', false));\n statusDispatch(setStatus(actions.setCreditRating, 'isAvailable', false));\n break;\n case creditRatingStatuses.forbidden:\n subscribedDispatch(\n setSubscribed(actions.setCreditRating, 'isSubscribed', isSubscribed),\n );\n statusDispatch(setStatus(actions.setCreditRating, 'isAvailable', true));\n statusDispatch(setStatus(actions.setCreditRating, 'wasRequested', false));\n break;\n default:\n throw new Error(message);\n }\n\n loadingDispatch(setIsLoading(actions.setCreditRating, false));\n });\n };\n\n const fetchCreditReview = () => {\n loadingDispatch(setIsLoading(actions.setCreditReview, true));\n fetchCreditReviewSummaryTab(entityId)\n .then((data) => {\n dataDispatch(setData(actions.setCreditReview, data));\n loadingDispatch(setIsLoading(actions.setCreditReview, false));\n statusDispatch(\n setStatus(actions.setCreditReview, 'wasRequested', data.wasRequested || false),\n );\n statusDispatch(setStatus(actions.setCreditReview, 'isAvailable', true));\n })\n .catch(() => {\n statusDispatch(setStatus(actions.setCreditReview, 'isAvailable', false));\n loadingDispatch(setIsLoading(actions.setCreditReview, false));\n });\n };\n\n const fetchESGSentiment = () => {\n loadingDispatch(setIsLoading(actions.setESGSentiment, true));\n\n fetchSentimentAvailability(entityId)\n .then(({ hasCompany, hasPermission, hasScore, requestState }) => {\n subscribedDispatch(setSubscribed(actions.setESGSentiment, 'isSubscribed', hasPermission));\n statusDispatch(setStatus(actions.setESGSentiment, 'isAvailable', hasCompany));\n statusDispatch(setStatus(actions.setESGSentiment, 'requestState', requestState));\n statusDispatch(setStatus(actions.setESGSentiment, 'dataExists', hasScore));\n\n const hasSentifyScore = hasCompany && hasPermission && hasScore;\n\n return (\n hasSentifyScore &&\n fetchSentimentSummary(entityId).then((data) => {\n dataDispatch(setData(actions.setESGSentiment, parseSentimentData(data)));\n })\n );\n })\n .catch(() => {\n subscribedDispatch(setSubscribed(actions.setESGSentiment, 'isSubscribed', false));\n statusDispatch(setStatus(actions.setESGSentiment, 'isAvailable', false));\n statusDispatch(setStatus(actions.setESGSentiment, 'requestState', undefined));\n statusDispatch(setStatus(actions.setESGSentiment, 'dataExists', false));\n })\n .finally(() => {\n loadingDispatch(setIsLoading(actions.setESGSentiment, false));\n });\n };\n\n const fetchESGAvailability = () => {\n esgAvailable(entityId)\n .then(({ subscribed, requestState }) => {\n subscribedDispatch(setSubscribed(actions.setESGScore, 'isSubscribed', subscribed));\n statusDispatch(setStatus(actions.setESGScore, 'isSubscribed', subscribed));\n statusDispatch(setStatus(actions.setESGScore, 'requestState', requestState));\n })\n .catch(() => {\n subscribedDispatch(setSubscribed(actions.setESGScore, 'isSubscribed', false));\n statusDispatch(setStatus(actions.setESGScore, 'isSubscribed', false));\n statusDispatch(setStatus(actions.setESGScore, 'requestState', undefined));\n });\n };\n\n const handleEsgRequested = (requested) => {\n if (requested) refreshEntity();\n };\n\n const handleEsgUnlocked = (unlocked) => {\n if (unlocked) refreshEntity();\n };\n\n useEffect(() => {\n if (features.creditReview) {\n fetchCreditReview();\n }\n\n if (features.esgSentiment) {\n fetchESGSentiment();\n }\n\n fetchCreditRating();\n fetchESGAvailability();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityId, entityShouldRefresh]);\n\n const statusIncludesNegativeValue = (type) => Object.values(statusState[type]).includes(false);\n const subscribedIncludesNegativeValue = (type) =>\n Object.values(subscribedState[type]).includes(false);\n\n const creditRatingData =\n !loadingState.creditRating &&\n dataState.creditRating.data &&\n !dataState.creditRating.data.some((item) => !item.latestRating)\n ? summaryCardMapCreditRatingParser(dataState.creditRating.data)[0]\n : {};\n const showCreditRatingSummaryCard =\n loadingState.creditRating ||\n (!isEmpty(creditRatingData) &&\n !statusIncludesNegativeValue('creditRating') &&\n !subscribedIncludesNegativeValue('creditRating'));\n const showCreditReviewSummaryCard =\n loadingState.creditReview || !statusIncludesNegativeValue('creditReview');\n const showESGScoreSummaryCard =\n impactReviewLoading || (!!esgScore && !subscribedIncludesNegativeValue('esgScore'));\n const showESGSentimentSummaryCard =\n loadingState.esgSentiment ||\n (!statusIncludesNegativeValue('esgSentiment') &&\n !subscribedIncludesNegativeValue('esgSentiment'));\n\n const showConfidentialLabel =\n !loadingState.creditRating && !creditRatingData.isPublic && !!creditRatingData.score;\n\n if (spv) {\n return (\n <>\n <Suspense fallback={<Loader center />}>\n {showConfidentialLabel && (\n <Box display=\"flex\" flexDirection=\"column\" mb={2}>\n <ConfidentialAlert\n label={t(creditRatingAlerts.confidentialAlert.title)}\n message={t(creditRatingAlerts.confidentialAlert.message)}\n />\n </Box>\n )}\n <Paper variant=\"elevation\" elevation={3}>\n <Instruments />\n </Paper>\n </Suspense>\n </>\n );\n }\n\n return (\n <>\n {showConfidentialLabel && (\n <Box display=\"flex\" flexDirection=\"column\" mb={2}>\n <ConfidentialAlert\n label={t(creditRatingAlerts.confidentialAlert.title)}\n message={t(creditRatingAlerts.confidentialAlert.message)}\n />\n </Box>\n )}\n <SectionTitle\n label={t('Credit Rating')}\n ratingType={ratingTypes.CREDIT_RATING}\n onChangeTabs={onChangeTabs}\n />\n {showCreditRatingSummaryCard ? (\n <SummaryCard\n headSquare={\n !loadingState.creditRating && (\n <ScoreWidgetMainColumn\n className={headSquareClasses.scoreWidgetMainColumn}\n value={creditRatingData.score || t('N/A')}\n label={creditRatingData.scoreTitle}\n footer={`${t('Outlook')}: ${creditRatingData.outlook || t('N/A')}`}\n footerColor={getScoreWidgetFooterColor(creditRatingData.outlook)}\n accent={creditRatingData.generalInformationList.includes(\n 'Unsolicited' && 'Without participation ',\n )}\n />\n )\n }\n main={\n <Grid container className={classes.businessCards} justifyContent=\"space-around\">\n {!loadingState.creditRating &&\n creditRatingData.businessCards.map((businessCard) => (\n <Grid item key={businessCard.name}>\n <Title className={classes.titleMarginBottom}>{t(businessCard.title)}</Title>\n <SummaryCardBusinessCard\n id={businessCard.id}\n name={businessCard.name}\n position={businessCard.position}\n industry={businessCard.industry}\n />\n </Grid>\n ))}\n </Grid>\n }\n history={\n <SummaryCardLineChart\n ratingScale={creditRatingData.ratingScale}\n historyType={portfolioTypes.CREDIT_RATING}\n history={creditRatingData.history}\n latestChange={creditRatingData.latestChange}\n />\n }\n className={classes.summaryCard}\n isLoading={loadingState.creditRating}\n data={creditRatingData}\n documentHandling={{\n toggleModal,\n defaultDocument: setDefaultExpand,\n }}\n />\n ) : (\n <div className={classes.summaryCard}>\n <SummaryCardRequestCreditRating\n entityId={entityId}\n isAvailable={statusState.creditRating.isAvailable}\n subscribed={subscribedState.creditRating.isSubscribed}\n data={relatedSubscriptionData}\n onUnlock={refreshEntity}\n />\n </div>\n )}\n <SectionTitle\n label={t('Credit Review')}\n ratingType={ratingTypes.CREDIT_REVIEW}\n onChangeTabs={onChangeTabs}\n />\n {features.creditReview &&\n (showCreditReviewSummaryCard ? (\n <SummaryCard\n headSquare={\n <HeadSquare title={t('Short term')}>\n <Typography\n color={\n generalInformation.includes('Unsolicited' && 'Without entity participation')\n ? orangeAccent\n : ''\n }\n >\n <span className={headSquareClasses.score}>{dataState.creditReview.score}</span>\n <span className={headSquareClasses.max}>/10</span>\n </Typography>\n </HeadSquare>\n }\n history={\n <SummaryCardLineChart\n history={summaryCardHistoryParser(dataState.creditReview.history)}\n />\n }\n className={classes.summaryCard}\n isLoading={loadingState.creditReview}\n data={{\n generalInformationList: generalInformation,\n ratingScalesData: creditRatingScalesMapping(\n portfolioTypes.CREDIT_REVIEW,\n ratingConstants.entityReview,\n ),\n ...dataState.creditReview,\n }}\n />\n ) : (\n <div className={classes.summaryCard}>\n <SummaryCardRequestCreditReview\n easyNumber={dataState.creditReview.easyNumber}\n onRequest={fetchCreditReview}\n {...statusState.creditReview}\n />\n </div>\n ))}\n {!features.creditReview && (\n <div className={classes.summaryCard}>\n <SummaryCardRequestCreditReview isAvailable={false} />\n </div>\n )}\n <SectionTitle\n label={t('ESG Impact')}\n ratingType={ratingTypes.ESG_IMPACT}\n onChangeTabs={onChangeTabs}\n />\n {showESGScoreSummaryCard ? (\n <SummaryCard\n headSquare={\n <HeadSquare title={t('Impact review')}>\n <Typography\n color={\n generalInformation.includes('Unsolicited' && 'Without entity participation')\n ? orangeAccent\n : ''\n }\n >\n <span className={headSquareClasses.score}>{esgScore?.score}</span>\n <span className={headSquareClasses.max}>/10</span>\n </Typography>\n </HeadSquare>\n }\n history={\n <SummaryCardLineChart\n history={summaryCardHistoryParser(esgScore?.history)}\n isESGImpact\n />\n }\n className={classes.summaryCard}\n isLoading={impactReviewLoading}\n dataQuality={impactReview?.dataQuality}\n data={{\n ...esgScore,\n documents: summaryCardDocumentsParser(esgScore?.documents),\n generalInformationList: generalInformation,\n ratingScalesData: creditRatingScalesMapping(\n portfolioTypes.ESG_ANALYSIS,\n ratingConstants.entityReview,\n ),\n }}\n />\n ) : (\n <div className={classes.summaryCard}>\n <SummaryCardRequestESG\n scopeoneId={entityId}\n dataExists={!!esgScore}\n isSubscribed={subscribedState.esgScore.isSubscribed}\n isAvailable={!!esgScore}\n industry={industry}\n countryCode={countryCode}\n onRequested={handleEsgRequested}\n onUnlocked={handleEsgUnlocked}\n />\n </div>\n )}\n {esgSentiment && (\n <>\n <SectionTitle\n label={t('ESG Sentiment')}\n ratingType=\"esg-sentiment\"\n onChangeTabs={onChangeTabs}\n />\n {showESGSentimentSummaryCard ? (\n <SummaryCard\n onlyHeader\n headSquare={\n <HeadSquare title={t('Sentiment review')}>\n <span className={headSquareClasses.score}>{dataState.esgSentiment.score}</span>\n <span className={headSquareClasses.max}>/10</span>\n </HeadSquare>\n }\n history={\n <SummaryCardLineChart\n history={summaryCardHistoryParser(dataState.esgSentiment.history)}\n isESGImpact\n isESGSentiment\n />\n }\n className={classes.summaryCard}\n isLoading={loadingState.esgSentiment}\n data={{\n ...dataState.esgSentiment,\n documents: summaryCardDocumentsParser(dataState.esgSentiment.documents),\n generalInformationList: generalInformation,\n ratingScalesData: creditRatingScalesMapping(\n portfolioTypes.ESG_ANALYSIS,\n ratingConstants.entityReview,\n ),\n }}\n />\n ) : (\n <div className={classes.summaryCard}>\n <SummaryCardRequestESG\n type=\"sentiment\"\n scopeoneId={entityId}\n dataExists={statusState.esgSentiment.dataExists}\n isSubscribed={subscribedState.esgSentiment.isSubscribed}\n isAvailable={statusState.esgSentiment.isAvailable}\n requestState={statusState.esgSentiment.requestState}\n industry={industry}\n countryCode={countryCode}\n onRequested={handleEsgRequested}\n onUnlocked={handleEsgUnlocked}\n />\n </div>\n )}\n </>\n )}\n {!isCSTAvailable && (\n <>\n <SectionTitle\n label={t('Climate Stress Test')}\n ratingType=\"climate-stress-test\"\n onChangeTabs={onChangeTabs}\n />\n <div className={classes.summaryCard}>\n <SummaryCardCST onUnlocked={handleEsgUnlocked} />\n </div>\n </>\n )}\n {viewDocumentsModal}\n </>\n );\n};\n\nSummaryCardTab.propTypes = {\n onChangeTabs: PropTypes.func.isRequired,\n industry: PropTypes.string.isRequired,\n countryCode: PropTypes.string.isRequired,\n companyName: PropTypes.string.isRequired,\n creditRatingMethodologies: PropTypes.array.isRequired,\n creditRatingDocuments: PropTypes.array.isRequired,\n};\n\nexport { SummaryCardTab };\n","import { parse } from 'date-fns';\nimport { SectionA } from 'modules/ESGSentiment/types/esgSentiment';\nimport { longDateFormat } from 'shared/constants/dateFormat';\nimport { formatDate } from 'shared/functions';\n\nexport const parseSentimentData = (data: SectionA) => {\n const latestChange = parse(data.latestChange, 'dd/MM/yyyy', new Date());\n const history = data.scoreForGraph.slice(0, 3);\n\n return {\n score: data.esgScore,\n history: {\n labels: history.map(({ date }) => date),\n data: history.map(({ value }) => value),\n labelsMapped: history.map(({ year, date }) => ({ year, date })),\n },\n latestChange: {\n status: {\n UPGRADE: 'Upgrade',\n DOWNGRADE: 'Downgrade',\n STABLE: 'Stable',\n }[data.status],\n date: formatDate(latestChange, longDateFormat),\n },\n levels: {},\n dates: {},\n generalInformation: {},\n documents: [],\n };\n};\n","import React, { lazy, Suspense, useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport qs from 'qs';\n\nimport { getName } from 'country-list';\nimport { Loader, OnMountScroller } from 'ui';\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\nimport { DownloadButton, RoundButton } from 'ui/Buttons';\nimport { usePortfolioModals, useQuery } from 'shared/hooks';\nimport { CompanyPanel } from 'ui/Company';\nimport { DisclaimerModal } from 'ui/Modals';\nimport { getCompanyData } from 'shared/functions';\nimport { moduleTypes } from 'shared/constants/moduleTypes';\nimport { API_URL, equals } from 'utils';\nimport Paper from '@mui/material/Paper';\n\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { ItemType } from 'shared/types/portfolios';\nimport { useFeatures } from 'shared/hooks';\nimport { ESGSentimentTab } from 'modules/ESGSentiment';\nimport { Documents } from 'modules/creditRating';\nimport { ClimateStressTest } from 'modules/ClimateStressTest';\nimport { SummaryCardTab } from './SummaryCardTab';\nimport { Instruments, RatingNews, Research } from './Tabs';\n\nconst CreditReviewTab = lazy(() => import('modules/creditReview/CreditReviewTab'));\nconst ESG = lazy(() => import('modules/ESG/ESG'));\nconst CreditRatingTab = lazy(() => import('./CreditRatingTab'));\n\nconst EntityContent = ({\n easyNumber,\n instruments,\n isRatingRequestPending,\n esgAvailability,\n entityId,\n activeTabs,\n isActiveTab,\n data,\n setActiveTabs,\n currentEnvironmentModules,\n isPending,\n}) => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { module } = useQuery();\n const { esgSentiment, climateStressTest } = useFeatures();\n const [showDisclaimerModal, setShowDisclaimerModal] = useState(false);\n const location = useLocation();\n\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n\n const [selectedYear, setSelectedYear] = useState({});\n const isPortfolioAvailable = !isActiveTab(moduleTypes.SUMMARY_CARD);\n const isCreditReviewPDFAvailable = isActiveTab(moduleTypes.CREDIT_REVIEW) && easyNumber;\n const toggleDisclaimerModal = () => setShowDisclaimerModal(!showDisclaimerModal);\n const creditReviewPDFURL = `${API_URL}/sig/generate-report/${easyNumber}`;\n const onChangeTabs = (type, value) => {\n const { companyTab, companyModule } = qs.parse(location.search, {\n ignoreQueryPrefix: true,\n });\n\n const searchQueryParams = {\n ...(companyTab && { companyTab: activeTabs.companyTab }),\n ...(companyModule && { companyModule: activeTabs.companyModule }),\n module,\n [type]: value,\n };\n\n const params = {\n ...activeTabs,\n [type]: value,\n };\n\n navigate({\n search: `?${qs.stringify(searchQueryParams)}`,\n });\n\n setActiveTabs(params);\n };\n\n const redirectToEntity = (id) => () =>\n navigate(`/entities/${id}${module ? `?module=${module}` : ''}`);\n\n const basicData = [\n ...(data.ultimateIssuer && data.ultimateIssuer.name\n ? [\n {\n label: t('Ultimate entity'),\n value: data.ultimateIssuer.name,\n onClick: redirectToEntity(data.ultimateIssuer.id),\n },\n ]\n : []),\n {\n label: t('Industry'),\n value: data.industry,\n },\n {\n label: t('Country'),\n value: getName(data.countryCode),\n },\n {\n label: t('Instruments'),\n value: instruments.total,\n },\n ].filter(({ value }) => value);\n\n const selectESGYear = (year) => {\n setSelectedYear(year);\n };\n\n const { availableYears } = esgAvailability || {};\n\n const { showConflictOfInterests, isRatingSubscription } =\n data && data.products && getCompanyData(data.products);\n\n const itemsForPortfolio = {\n itemIds: { [entityId]: entityId },\n count: 1,\n type: ItemType.SCOPEONEID,\n };\n\n const isESGVisible = isActiveTab(moduleTypes.ESG_IMPACT) && esgAvailability !== undefined;\n\n useEffect(() => {\n if (esgAvailability && availableYears) {\n setSelectedYear(availableYears[0]);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [esgAvailability, availableYears]);\n\n return (\n <>\n <CompanyPanel\n loading={isRatingRequestPending || isPending}\n title={data.name}\n action={\n <>\n {isCreditReviewPDFAvailable && (\n <DownloadButton url={creditReviewPDFURL}>{t('PDF')}</DownloadButton>\n )}\n {isPortfolioAvailable && (\n <RoundButton label={t('Add to portfolio')} onClick={addToPortfolio.show} marginLeft />\n )}\n <RoundButton label={t('View disclaimer')} onClick={toggleDisclaimerModal} marginLeft />\n </>\n }\n items={basicData}\n activeModule={activeTabs.companyModule}\n onChangeModule={onChangeTabs}\n modules={currentEnvironmentModules}\n availableYears={availableYears}\n selectedYear={selectedYear}\n onYearChange={selectESGYear}\n />\n {isActiveTab(moduleTypes.SUMMARY_CARD) && (\n <SummaryCardTab\n onChangeTabs={onChangeTabs}\n spv={data.spv}\n industry={data.industry}\n countryCode={data.countryCode}\n companyName={data.name}\n creditRatingMethodologies={data.methodologies}\n creditRatingDocuments={data.documents}\n />\n )}\n {isActiveTab(moduleTypes.CREDIT_RATING) && (\n <Suspense fallback={<Loader center />}>\n <CreditRatingTab\n companyName={data.name}\n showConflictOfInterests={showConflictOfInterests}\n isRatingSubscription={isRatingSubscription}\n industry={data.industry}\n countryCode={data.countryCode}\n creditRatingMethodologies={data.methodologies}\n creditRatingDocuments={data.documents}\n />\n </Suspense>\n )}\n {isActiveTab(moduleTypes.CREDIT_REVIEW) && (\n <Suspense fallback={<Loader center />}>\n <CreditReviewTab easyNumber={easyNumber} />\n </Suspense>\n )}\n {isESGVisible && (\n <Suspense fallback={<Loader center />}>\n <ESG\n id={entityId}\n entityName={data.name}\n availability={esgAvailability}\n industry={data.industry}\n countryCode={data.countryCode}\n selectedYear={selectedYear}\n />\n </Suspense>\n )}\n\n {esgSentiment && isActiveTab(moduleTypes.ESG_SENTIMENT) && (\n <Suspense fallback={<Loader center />}>\n <ESGSentimentTab id={entityId} industry={data.industry} countryCode={data.countryCode} />\n </Suspense>\n )}\n\n {climateStressTest && isActiveTab(moduleTypes.CLIMATE_STRESS_TEST) && (\n <Suspense fallback={<Loader center />}>\n <ClimateStressTest />\n </Suspense>\n )}\n\n {isActiveTab(moduleTypes.INSTRUMENTS) && (\n <Suspense fallback={<Loader center />}>\n <Paper variant=\"elevation\" elevation={3}>\n <Instruments />\n </Paper>\n </Suspense>\n )}\n\n {isActiveTab(moduleTypes.RATING_NEWS) && (\n <Suspense fallback={<Loader center />}>\n <Paper variant=\"elevation\" elevation={3}>\n <RatingNews />\n </Paper>\n </Suspense>\n )}\n\n {isActiveTab(moduleTypes.RESEARCH) && (\n <Suspense fallback={<Loader center />}>\n <Paper variant=\"elevation\" elevation={3}>\n <Research />\n </Paper>\n </Suspense>\n )}\n\n {isActiveTab(moduleTypes.DOCUMENTS) && (\n <Documents\n reports={data.documents.filter(({ type }) => equals(type, 'Rating Report'))}\n performances={data.documents.filter(({ type }) => equals(type, 'Performance Report'))}\n methodologies={data.methodologies}\n />\n )}\n\n <DisclaimerModal open={showDisclaimerModal} onClose={toggleDisclaimerModal} />\n {isPortfolioAvailable && (\n <>\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n itemsData={itemsForPortfolio}\n itemType=\"ENTITY\"\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={itemsForPortfolio}\n itemType=\"ENTITY\"\n />\n </>\n )}\n <OnMountScroller />\n </>\n );\n};\n\nEntityContent.defaultProps = {\n esgAvailability: undefined,\n easyNumber: undefined,\n};\n\nEntityContent.propTypes = {\n instruments: PropTypes.object.isRequired,\n isRatingRequestPending: PropTypes.bool.isRequired,\n entityId: PropTypes.string.isRequired,\n activeTabs: PropTypes.shape({\n companyModule: PropTypes.string,\n companyTab: PropTypes.string,\n }).isRequired,\n isActiveTab: PropTypes.func.isRequired,\n data: PropTypes.object.isRequired,\n setActiveTabs: PropTypes.func.isRequired,\n currentEnvironmentModules: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.string,\n label: PropTypes.string,\n }),\n ).isRequired,\n isPending: PropTypes.bool.isRequired,\n easyNumber: PropTypes.string,\n esgAvailability: PropTypes.shape({\n data_exists: PropTypes.bool,\n subscribed: PropTypes.bool,\n }),\n};\n\nexport { EntityContent };\n","import React, { FC } from 'react';\nimport { BlurWrapper } from 'ui';\nimport { CompanyPanel } from 'ui/Company';\nimport { Typography, Box, Button } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\nimport { ScoreWidget, ScoreWidgetMainColumn, ScoreWidgetSingleValueColumn } from 'ui/ScoreWidget';\nimport { RequestEsgScoreModal } from 'modules/common/Modals';\nimport { usePortfolioModals } from '../../shared/hooks/usePortfolioModals/usePortfolioModals';\nimport { RatingStatus } from '../../shared/types/ratingStatus';\n\nconst useStyles = makeStyles(() => ({\n requestBox: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n flexDirection: 'column',\n height: '100%',\n paddingLeft: '25px',\n paddingRight: '25px',\n whiteSpace: 'break-spaces',\n textAlign: 'center',\n },\n}));\n\ntype RequestRatingProps = {\n requestStatus: RatingStatus;\n entityId: string;\n refresh: () => void;\n};\n\nconst RequestRating: FC<RequestRatingProps> = ({ requestStatus, entityId, refresh = null }) => {\n const { t } = useTranslation();\n const { requestEsgScore } = usePortfolioModals();\n\n return (\n <>\n <Typography display=\"block\">\n {requestStatus === RatingStatus.TO_DO && t('ENTITY.UPLOAD_CUSTOM_DATA')}\n {requestStatus === RatingStatus.IN_PROGRESS && t('ENTITY.UPLOAD_CUSTOM_DATA')}\n </Typography>\n\n {requestStatus === RatingStatus.TO_DO && (\n <Box mt={1}>\n <Button\n variant=\"contained\"\n size=\"small\"\n color=\"primary\"\n onClick={() => requestEsgScore.show()}\n >\n {t('Request')}\n </Button>\n </Box>\n )}\n {requestStatus === RatingStatus.IN_PROGRESS && (\n <Box mt={1}>\n <Button variant=\"contained\" size=\"small\" color=\"primary\" disabled>\n {t('Requested')}\n </Button>\n </Box>\n )}\n\n <RequestEsgScoreModal\n open={requestEsgScore.isOpen}\n onClose={() => requestEsgScore.close()}\n onRequested={refresh}\n selectIds={[entityId]}\n />\n </>\n );\n};\n\ntype EmptyCustomEntityContentProps = {\n entityId: string;\n entityData: any;\n refreshEntity: () => void;\n};\n\nconst EmptyCustomEntityContent: FC<EmptyCustomEntityContentProps> = ({\n entityId,\n entityData,\n refreshEntity,\n}) => {\n const items = [\n { label: 'Industry', value: entityData.industry },\n { label: 'Region', value: entityData.region },\n { label: 'Subregion', value: entityData.subregion },\n { label: 'Country Code', value: entityData.countryCode },\n ];\n\n const classes = useStyles();\n const { t } = useTranslation();\n\n return (\n <>\n <CompanyPanel\n title={entityData.name}\n items={items}\n activeModule=\"\"\n onChangeModule={() => null}\n modules={[]}\n />\n\n <BlurWrapper\n active\n content={\n <div className={classes.requestBox}>\n <RequestRating\n requestStatus={entityData.meta.esgRequestState}\n entityId={entityId}\n refresh={refreshEntity}\n />\n </div>\n }\n >\n <ScoreWidget>\n <ScoreWidgetMainColumn\n accent={false}\n label={t('Score') as string}\n value={t('Score') as string}\n footer={t(`1 year PD`)}\n footerColor=\"white\"\n />\n <ScoreWidgetSingleValueColumn\n label={t('Country Risk Assessment') as string}\n value={t('Country Risk Assessment') as string}\n />\n <ScoreWidgetSingleValueColumn\n label={t('Business Climate') as string}\n value={t('Business Climate') as string}\n />\n <ScoreWidgetSingleValueColumn\n label={t('Industry Risk Level') as string}\n value={t('Industry Risk Level') as string}\n />\n <ScoreWidgetSingleValueColumn\n label={t('Credit review date') as string}\n value={t('Credit review date') as string}\n last\n />\n </ScoreWidget>\n </BlurWrapper>\n </>\n );\n};\n\nexport { EmptyCustomEntityContent };\n","import React, { useEffect, useState } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useParams, useLocation } from 'react-router-dom';\nimport qs from 'qs';\n\nimport { Loader } from 'ui';\nimport { esgAvailable as impactAvailable } from 'services/esg';\nimport { useAccess, useQuery } from 'shared/hooks';\nimport { findModule } from 'shared/functions';\nimport { getEntityAction } from 'store/entity/entityActions';\nimport { lastVisitedRatingTypeAction } from 'store/shared/lastVisited/lastVisitedActions';\nimport { moduleTypes } from 'shared/constants/moduleTypes';\nimport { companyEntityTabs, getCurrentEnvironmentModules } from 'shared/constants/company';\nimport { EnvironmentTypes } from 'shared/constants/environmentTypes';\nimport { getEntity as getEntitySelector } from 'selectors/entity';\nimport { useFetchPortfolioItemsByArtifactId } from 'modules/common/GraphQL/portfolios/hooks';\nimport { EntityContent } from './EntityContent';\nimport { EmptyCustomEntityContent } from './EmptyCustomEntityContent';\n\nconst Entity = () => {\n const dispatch = useDispatch();\n const location = useLocation();\n const { module } = useQuery();\n const isDevelopmentEnvironment = useAccess({\n environment: EnvironmentTypes.DEVELOPMENT,\n });\n const isTestingEnvironment = useAccess({\n environment: EnvironmentTypes.TESTING,\n });\n const currentEnvironmentModules = getCurrentEnvironmentModules(\n isDevelopmentEnvironment || isTestingEnvironment,\n ).filter((item) => !module || item.module === module);\n\n const { entityId } = useParams();\n const [easyNumber] = useState();\n const [activeTabs, setActiveTabs] = useState({\n companyModule: currentEnvironmentModules[0].value,\n companyTab: companyEntityTabs[0].value,\n });\n\n const [isEmptyCustomCompany, setIsEmptyCustomCompany] = useState(false);\n const [portfolioEntityData, setPortfolioEntityData] = useState(null);\n\n const { data, instruments, shouldRefresh, isRatingRequestPending, isPending } =\n useSelector(getEntitySelector);\n\n const [esgAvailability, setESGAvailability] = useState(undefined);\n\n const isActiveTab = (moduleType) =>\n currentEnvironmentModules.find(findModule(moduleType)) &&\n moduleType === activeTabs.companyModule;\n\n const getEntity = () => dispatch(getEntityAction({ id: entityId }));\n\n // FIXME: this part should be done only as a fallback in case we don't get any data from modules\n const {\n data: entityData,\n loading: portfolioLoading,\n refetch: portfolioRefresh,\n } = useFetchPortfolioItemsByArtifactId(entityId, 0, 1);\n\n const refreshEntity = () => {\n getEntity();\n portfolioRefresh();\n };\n\n const esgIsPending = isActiveTab(moduleTypes.ESG_IMPACT) && esgAvailability === undefined;\n\n const getESGAvailability = async () => {\n const response = await impactAvailable(entityId);\n setESGAvailability(response);\n };\n\n useEffect(() => {\n if (entityId) {\n getEntity();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityId]);\n\n useEffect(() => {\n if (shouldRefresh) {\n getEntity();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shouldRefresh]);\n\n useEffect(() => {\n const { companyTab, companyModule } = qs.parse(location.search, { ignoreQueryPrefix: true });\n\n if (companyEntityTabs.map(({ value }) => value).includes(companyTab)) {\n setActiveTabs((currentValues) => ({ ...currentValues, companyTab }));\n }\n\n if (currentEnvironmentModules.map(({ value }) => value).includes(companyModule)) {\n setActiveTabs((currentValues) => ({ ...currentValues, companyModule }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n if (activeTabs.companyModule === moduleTypes.SUMMARY_CARD) {\n dispatch(lastVisitedRatingTypeAction({ ratingType: moduleTypes.CREDIT_RATING }));\n return;\n }\n\n dispatch(lastVisitedRatingTypeAction({ ratingType: activeTabs.companyModule }));\n }, [activeTabs.companyModule]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n if (entityId) {\n if (isActiveTab(moduleTypes.ESG_IMPACT)) {\n getESGAvailability();\n } else {\n setESGAvailability(undefined);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityId, activeTabs.companyModule, shouldRefresh]);\n\n useEffect(() => {\n if (!isPending && !portfolioLoading && !data) {\n if (!entityData?.portfolioItems) {\n window.location.href = '/ca/not-found';\n } else {\n setPortfolioEntityData(entityData.portfolioItems[0]);\n setIsEmptyCustomCompany(true);\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isPending, data, portfolioLoading, entityData]);\n\n if (isPending || portfolioLoading || esgIsPending || !(data || portfolioEntityData))\n return <Loader center />;\n\n return isEmptyCustomCompany ? (\n <EmptyCustomEntityContent\n entityId={entityId}\n entityData={portfolioEntityData}\n refreshEntity={refreshEntity}\n />\n ) : (\n <EntityContent\n easyNumber={easyNumber}\n instruments={instruments}\n isRatingRequestPending={isRatingRequestPending}\n esgAvailability={esgAvailability}\n entityId={entityId}\n activeTabs={activeTabs}\n isActiveTab={isActiveTab}\n data={data}\n setActiveTabs={setActiveTabs}\n currentEnvironmentModules={currentEnvironmentModules}\n isPending={isPending}\n />\n );\n};\n\nexport { Entity };\n","import React, { useReducer, useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Box, Typography, Grid } from '@mui/material';\n\nimport { useViewDocuments } from 'shared/hooks';\nimport { Loader, Title } from 'ui';\nimport {\n SummaryCard,\n SummaryCardBusinessCard,\n SummaryCardLineChart,\n} from 'modules/common/SummaryCard';\nimport { ScoreWidgetMainColumn } from 'ui/ScoreWidget';\nimport { portfolioTypes } from 'shared/constants/portfolioTypes';\nimport { creditRatingStatuses } from 'shared/constants/creditRatingStatuses';\nimport { fetchCreditRatingSummaryTab, fetchEntityDocuments } from 'services';\nimport { summaryCardMapCreditRatingParser, documentsParser } from 'shared/parsers';\nimport { getScoreWidgetFooterColor } from 'shared/functions';\nimport { getEntityShouldRefresh } from 'selectors/entity';\nimport { useStyles, useHeadSquareStyles } from 'shared/styles/summaryCard';\nimport {\n actions,\n setIsLoading,\n initialLoadingState,\n isLoadingReducer,\n setData,\n initialDataState,\n dataReducer,\n setStatus,\n initialStatusState,\n statusReducer,\n setSubscribed,\n initialSubscribedState,\n subscribedReducer,\n} from 'shared/state/summaryCard';\nimport { errorCodes } from 'shared/constants/errorCodes';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\n\nexport const IssuerDashboardHeader = ({ entity, entityId }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const [documents, setDocuments] = useState([]);\n const entityShouldRefresh = useSelector(getEntityShouldRefresh);\n const headSquareClasses = useHeadSquareStyles();\n const [subscribedState, subscribedDispatch] = useReducer(\n subscribedReducer,\n initialSubscribedState,\n );\n const [loadingState, loadingDispatch] = useReducer(isLoadingReducer, initialLoadingState);\n const [dataState, dataDispatch] = useReducer(dataReducer, initialDataState);\n const [statusState, statusDispatch] = useReducer(statusReducer, initialStatusState);\n\n useEffect(() => {\n fetchEntityDocuments({ entityId }).then(({ data }) => setDocuments(documentsParser(data)));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityId]);\n\n const { name: company, methodologies } = entity;\n const { viewDocumentsModal, toggleModal, setDefaultExpand } = useViewDocuments({\n entityId,\n companyModule: ratingTypes.CREDIT_RATING,\n company,\n initialMethodologies: methodologies,\n initialDocuments: documents,\n });\n\n const fetchCreditRating = () => {\n loadingDispatch(setIsLoading(actions.setCreditRating, true));\n fetchCreditRatingSummaryTab(entityId)\n .then(data => {\n dataDispatch(setData(actions.setCreditRating, data));\n loadingDispatch(setIsLoading(actions.setCreditRating, false));\n statusDispatch(setStatus(actions.setCreditRating, 'wasRequested', true));\n statusDispatch(setStatus(actions.setCreditRating, 'isAvailable', true));\n subscribedDispatch(setSubscribed(actions.setCreditRating, 'isSubscribed', true));\n })\n .catch(({ status, message, error }) => {\n const isSubscribed = Number(error) !== errorCodes.creditRating.isSubscribed;\n\n switch (status) {\n case creditRatingStatuses.notFound:\n subscribedDispatch(setSubscribed(actions.setCreditRating, 'isSubscribed', false));\n statusDispatch(setStatus(actions.setCreditRating, 'isAvailable', false));\n break;\n case creditRatingStatuses.forbidden:\n subscribedDispatch(\n setSubscribed(actions.setCreditRating, 'isSubscribed', isSubscribed),\n );\n statusDispatch(setStatus(actions.setCreditRating, 'isAvailable', true));\n statusDispatch(setStatus(actions.setCreditRating, 'wasRequested', false));\n break;\n default:\n throw new Error(message);\n }\n\n loadingDispatch(setIsLoading(actions.setCreditRating, false));\n });\n };\n\n useEffect(() => {\n fetchCreditRating();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityId]);\n\n useEffect(() => {\n if (entityShouldRefresh) {\n fetchCreditRating();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityShouldRefresh]);\n\n const statusIncludesNegativeValue = type => Object.values(statusState[type]).includes(false);\n const subscribedIncludesNegativeValue = type =>\n Object.values(subscribedState[type]).includes(false);\n\n const creditRatingData =\n !loadingState.creditRating &&\n dataState.creditRating.data &&\n !dataState.creditRating.data.some(item => !item.latestRating)\n ? summaryCardMapCreditRatingParser(dataState.creditRating.data)[0]\n : {};\n const showCreditRatingSummaryCard =\n loadingState.creditRating ||\n (!statusIncludesNegativeValue('creditRating') &&\n !subscribedIncludesNegativeValue('creditRating'));\n\n if (!showCreditRatingSummaryCard) {\n return (\n <Box mb={6}>\n <Loader center />\n </Box>\n );\n }\n\n return <>\n <Box mb={3}>\n <Typography variant=\"h4\">\n Issuer Dashboard <strong>{entity.name}</strong>\n </Typography>\n </Box>\n <Box mb={2}>\n <SummaryCard\n headSquare={\n !loadingState.creditRating && (\n <ScoreWidgetMainColumn\n className={headSquareClasses.scoreWidgetMainColumn}\n value={creditRatingData.score || t('N/A')}\n label={creditRatingData.scoreTitle}\n footer={`${t('Outlook')}: ${creditRatingData.outlook || t('N/A')}`}\n footerColor={getScoreWidgetFooterColor(creditRatingData.outlook)}\n />\n )\n }\n main={\n <Grid container className={classes.businessCards} justifyContent=\"space-around\">\n {!loadingState.creditRating &&\n creditRatingData.businessCards.map(businessCard => (\n <Grid item key={businessCard.name}>\n <Title className={classes.titleMarginBottom}>{t(businessCard.title)}</Title>\n <SummaryCardBusinessCard\n id={businessCard.id}\n name={businessCard.name}\n position={businessCard.position}\n industry={businessCard.industry}\n />\n </Grid>\n ))}\n </Grid>\n }\n history={\n <SummaryCardLineChart\n ratingScale={creditRatingData.ratingScale}\n historyType={portfolioTypes.CREDIT_RATING}\n history={creditRatingData.history}\n latestChange={creditRatingData.latestChange}\n />\n }\n className={classes.summaryCard}\n isLoading={loadingState.creditRating}\n data={creditRatingData}\n documentHandling={{\n toggleModal,\n defaultDocument: setDefaultExpand,\n }}\n />\n </Box>\n {viewDocumentsModal}\n </>;\n};\n\nIssuerDashboardHeader.defaultProps = {\n entity: null,\n};\n\nIssuerDashboardHeader.propTypes = {\n entity: PropTypes.any,\n entityId: PropTypes.string.isRequired,\n};\n","import React, { useState, useEffect } from 'react';\nimport { useNavigate, useLocation } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport PropTypes from 'prop-types';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Grid from '@mui/material/Grid';\n\nimport { Artifacts } from 'ui';\n\nimport { fetchArtifacts } from 'services';\nimport { artifactsParser } from 'shared/parsers';\n\nconst page = 1;\n\nexport const IssuerDashboardResearchWidget = ({ sector, industry, limit }) => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const location = useLocation();\n const [isPending, setIsPending] = useState(!!sector);\n const [artifacts, setArtifacts] = useState([]);\n\n const getArtifacts = async () => {\n try {\n setIsPending(true);\n const { data } = await fetchArtifacts({\n page,\n limit,\n type: 'INDUSTRY_RESEARCH',\n industryCode: sector,\n });\n\n setArtifacts(artifactsParser(data));\n } finally {\n setIsPending(false);\n }\n };\n\n useEffect(() => {\n getArtifacts();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleItemClick = (itemId) => {\n navigate({ pathname: `/announcements/${itemId}`, prevPath: location.pathname });\n };\n\n return (\n <>\n <Artifacts\n data={artifacts}\n isPending={isPending}\n onItemClick={handleItemClick}\n currentPage={page}\n />\n <Box py={2}>\n <Grid container justifyContent=\"flex-end\">\n <Grid item>\n <Button\n variant=\"outlined\"\n onClick={() =>\n navigate(\n `/credit-rating-coverage/industry?code=${sector}&industryCode=${industry}&tab=research`,\n )\n }\n >\n {t('View all')}\n </Button>\n </Grid>\n </Grid>\n </Box>\n </>\n );\n};\n\nIssuerDashboardResearchWidget.defaultProps = {\n industry: null,\n sector: null,\n};\n\nIssuerDashboardResearchWidget.propTypes = {\n limit: PropTypes.number.isRequired,\n industry: PropTypes.string,\n sector: PropTypes.string,\n};\n","import React, { useState, useEffect } from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport qs from 'qs';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Grid from '@mui/material/Grid';\nimport Divider from '@mui/material/Divider';\n\nimport { DatatablePreview, PreviewPanel } from 'ui';\nimport { LinkButton } from 'ui/Buttons';\nimport { fetchEntities } from 'services';\nimport { parseIndustryEntities } from 'shared/parsers';\nimport { IssuerDashboardResearchWidget } from '../IssuerDashboardResearchWidget/IssuerDashboardResearchWidget';\n\nconst useStyles = makeStyles({\n divider: {\n height: '100%',\n },\n});\n\nexport const IndustryWidget = ({ industry, limit, ultimateIssuerId }) => {\n const classes = useStyles();\n const navigate = useNavigate();\n const [isPending, setIsPending] = useState(false);\n const [entities, setEntities] = useState([]);\n const { t } = useTranslation();\n\n const getEntities = async () => {\n try {\n setIsPending(true);\n\n const { data } = await fetchEntities({\n page: 1,\n limit,\n filter: {\n industrySectors: [{ sector: industry.code, industry: industry.industryCode }],\n withRatingOnly: true,\n },\n });\n\n setEntities(parseIndustryEntities(data));\n } finally {\n setIsPending(false);\n }\n };\n\n useEffect(() => {\n getEntities();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const columns = [\n {\n label: 'Name',\n options: {\n customBodyRender: (_value, { rowData: [[id, name]] }) => (\n <LinkButton to={`/entities/${id}`} label={name.toUpperCase()} />\n ),\n },\n },\n { label: t('Country') },\n { label: t('Rating type') },\n { label: t('Entity rating') },\n { label: t('Short-term debt rating') },\n ];\n\n const viewAllParams = {\n code: industry.code,\n industryCode: industry.industryCode,\n };\n\n return (\n <PreviewPanel title={industry.name} subtitle=\"Peer group credit ratings\">\n <Grid container>\n <Grid item xs={6}>\n <Box display=\"flex\">\n <DatatablePreview\n columns={columns}\n data={entities}\n loading={isPending}\n onViewAllClick={() =>\n navigate(`/credit-rating-coverage/industry?${qs.stringify(viewAllParams)}`)\n }\n />\n <Box ml={2} pb={2} height=\"auto\">\n <Divider orientation=\"vertical\" className={classes.divider} />\n </Box>\n </Box>\n </Grid>\n <Grid item xs={6}>\n <Box px={2}>\n <IssuerDashboardResearchWidget\n sector={industry.code}\n industry={industry.industryCode}\n limit={5}\n id={ultimateIssuerId}\n />\n </Box>\n </Grid>\n </Grid>\n </PreviewPanel>\n );\n};\n\nIndustryWidget.propTypes = {\n limit: PropTypes.number.isRequired,\n industry: PropTypes.shape({\n name: PropTypes.string.isRequired,\n code: PropTypes.string.isRequired,\n industryName: PropTypes.string.isRequired,\n industryCode: PropTypes.string.isRequired,\n }).isRequired,\n ultimateIssuerId: PropTypes.string.isRequired,\n};\n","import React from 'react';\nimport { useNavigate } from 'react-router-dom';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\n\nimport { DatatablePreview, PreviewPanel } from 'ui';\nimport { LinkButton } from 'ui/Buttons';\n\nexport const IssuerDashboardEntitiesWidget = ({ entities, loading }) => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n\n const isEmpty = entities.length === 0;\n const handleViewAllClick = !isEmpty ? () => navigate('/credit-rating-coverage/related') : null;\n\n const columns = [\n {\n label: 'Name',\n options: {\n customBodyRender: (_value, { rowData: [[id, name]] }) => (\n <LinkButton to={`/entities/${id}`} label={name.toUpperCase()} />\n ),\n },\n },\n { label: t('Country') },\n { label: t('Entity rating') },\n ];\n\n return (\n <PreviewPanel title={t('Our ratings')} onViewAllClick={handleViewAllClick}>\n <DatatablePreview columns={columns} data={entities} loading={loading} />\n </PreviewPanel>\n );\n};\n\nIssuerDashboardEntitiesWidget.defaultProps = {\n loading: false,\n};\n\nIssuerDashboardEntitiesWidget.propTypes = {\n loading: PropTypes.bool,\n entities: PropTypes.arrayOf(PropTypes.any).isRequired,\n};\n","import React, { useState, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Box, Grid } from '@mui/material';\nimport uniq from 'lodash/uniq';\n\nimport { DatatablePreview, PreviewPanel, Loader } from 'ui';\nimport { InvestorRelationsModal } from 'modules/common/Modals';\n\nimport { getInvestorRelationsAction } from 'store/investor/investorActions';\nimport { parseRelatedEntities, flattenIndustries, entityParser } from 'shared/parsers';\nimport { fetchEntityDetails } from 'services';\n\nimport { getAuthDataOrganisation } from 'selectors/auth';\nimport { IssuerDashboardHeader } from './IssuerDashboardHeader/IssuerDashboardHeader';\nimport { IndustryWidget } from './IndustryWidget/IndustryWidget';\nimport { IssuerDashboardEntitiesWidget } from './IssuerDashboardEntitiesWidget/IssuerDashboardEntitiesWidget';\nimport { columns } from './config';\n\nconst investorRelationsPreviewInfo = {\n count: 5,\n columns,\n};\n\nexport const IssuerDashboard = () => {\n const dispatch = useDispatch();\n const [entityDetails, setEntityDetails] = useState();\n const [investorRelationsModalOpen, setInvestorRelationsModalOpen] = useState(false);\n const [industries, setIndustries] = useState([]);\n const [investorRelationsData, setInvestorRelationsData] = useState([]);\n\n const { relatedEntities, relatedIndustries, allIndustries } = useSelector(({ shared }) => ({\n relatedEntities: shared.relatedEntities.data,\n relatedIndustries: shared.relatedIndustries,\n allIndustries: shared.industries.data,\n }));\n\n const { ultimateIssuer } = useSelector(getAuthDataOrganisation);\n\n const { relations, isPending: investorRelationsLoading } = useSelector(\n ({ investor }) => investor,\n );\n\n const toggleInvestorRelationsModal = () =>\n setInvestorRelationsModalOpen(!investorRelationsModalOpen);\n\n const getInvestorRelations = () => dispatch(getInvestorRelationsAction());\n\n const getEntityDetails = () => {\n try {\n fetchEntityDetails(ultimateIssuer.id).then((data) => {\n setEntityDetails(entityParser(data));\n });\n } catch (e) {\n setEntityDetails(null);\n }\n };\n\n useEffect(() => {\n getEntityDetails();\n getInvestorRelations();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n useEffect(() => {\n setInvestorRelationsData(relations.slice(0, investorRelationsPreviewInfo.count));\n }, [relations]);\n\n useEffect(() => {\n if (!entityDetails) return;\n\n const flattenedIndustries = flattenIndustries(allIndustries);\n\n // extend related industry list with codes\n const data = uniq([entityDetails.industry, ...relatedIndustries]).reduce(\n (extendedIndustries, industryName) => {\n const industry = flattenedIndustries.find(({ name }) => name === industryName);\n if (industry) extendedIndustries.push(industry);\n return extendedIndustries;\n },\n [],\n );\n\n setIndustries(data);\n }, [allIndustries, relatedIndustries, entityDetails]);\n\n return (\n <>\n {entityDetails && (\n <IssuerDashboardHeader entity={entityDetails} entityId={ultimateIssuer.id} />\n )}\n {entityDetails === undefined && (\n <Box mb={6}>\n <Loader center />\n </Box>\n )}\n <Grid container spacing={4}>\n <Grid item xs={6}>\n <IssuerDashboardEntitiesWidget\n entities={parseRelatedEntities(relatedEntities.slice(0, 5))}\n loading={relatedEntities.isPending}\n />\n </Grid>\n <Grid item xs={6}>\n <PreviewPanel\n title=\"Investor relations\"\n caption=\"Organisations which have added your companies to their portfolio\"\n onViewAllClick={toggleInvestorRelationsModal}\n viewAllDisabled={investorRelationsLoading}\n >\n <DatatablePreview\n data={investorRelationsData}\n columns={investorRelationsPreviewInfo.columns}\n loading={investorRelationsLoading && !investorRelationsModalOpen}\n />\n </PreviewPanel>\n </Grid>\n {industries.map((industry) => (\n <Grid item xs={12} key={industry.name}>\n <IndustryWidget industry={industry} limit={5} ultimateIssuerId={ultimateIssuer.id} />\n </Grid>\n ))}\n </Grid>\n <InvestorRelationsModal\n open={investorRelationsModalOpen}\n onClose={toggleInvestorRelationsModal}\n />\n </>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Button from '@mui/material/Button';\nimport Grid from '@mui/material/Grid';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nimport { PageTitle, PanelTitle, ProfileInfo } from 'ui';\n\nimport { EditProfileModal } from 'modules/common/Modals';\n\nimport { fetchUserImage } from 'services';\nimport { profilePicturesPath } from 'shared/constants/picturesPath';\n\nconst useStyles = makeStyles(theme => ({\n listItem: {\n paddingTop: theme.spacing(2),\n paddingBottom: theme.spacing(2),\n },\n listItemPrimaryText: {\n width: 250,\n },\n listItemSecondaryTextHighlighted: {\n color: theme.palette.primary.main,\n },\n}));\n\nconst Profile = () => {\n const { data } = useSelector(({ auth }) => auth);\n const { user } = data;\n\n const classes = useStyles();\n const { t } = useTranslation();\n const [editProfileModalOpen, setEditProfileModalOpen] = useState(false);\n const [fetchedAvatarUrl, setFetchedAvatarUrl] = useState(profilePicturesPath);\n\n const toggleEditProfileModal = () => setEditProfileModalOpen(!editProfileModalOpen);\n\n const fetchImage = async () => {\n try {\n const url = await fetchUserImage(data.userId);\n setFetchedAvatarUrl(url);\n } catch (e) {\n setFetchedAvatarUrl(profilePicturesPath);\n }\n };\n\n useEffect(() => {\n fetchImage();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const avatarUrl =\n user && !!user.avatar ? `data:image/png;base64, ${user.avatar}` : fetchedAvatarUrl;\n\n const profileData = [\n {\n label: t('Telephone'),\n value: user && user.phone,\n },\n {\n label: t('E-mail address'),\n value: user && <span className={classes.listItemSecondaryTextHighlighted}>{user.email}</span>,\n },\n {\n label: t('Job title'),\n value: user && user.jobTitle,\n },\n {\n label: t('Job function'),\n value: user && user.jobFunction,\n },\n {\n label: t('Administration rights'),\n value: user && user.administrativeRights ? t('Yes') : t('No'),\n },\n {\n label: t('Platform module allocation'),\n value:\n user && user.licencesAndRoles.map(licenseOrRole => t(licenseOrRole.module.name)).join(', '),\n },\n {\n label: t('Credit Review permission'),\n value: user && user.hasCofaceLicense ? t('Yes') : t('No'),\n },\n ];\n\n return <>\n <Grid container spacing={2} justifyContent=\"space-between\">\n <Grid item>\n <PageTitle>{t('Profile')}</PageTitle>\n </Grid>\n <Grid item>\n <Button variant=\"outlined\" onClick={toggleEditProfileModal}>\n {t('Edit')}\n </Button>\n </Grid>\n </Grid>\n <ProfileInfo\n name={`${data.firstName} ${data.name}`}\n title={user && user.jobTitle}\n imageUrl={avatarUrl}\n />\n <PanelTitle>{t('Personal information')}</PanelTitle>\n <Paper>\n <List disablePadding>\n {profileData.map(({ label, value }, index) => (\n <ListItem\n key={label}\n className={classes.listItem}\n divider={profileData.length !== index + 1}\n >\n <Typography className={classes.listItemPrimaryText}>{label}</Typography>\n <Typography color=\"textSecondary\">{value}</Typography>\n </ListItem>\n ))}\n </List>\n </Paper>\n <EditProfileModal open={editProfileModalOpen} onClose={toggleEditProfileModal} />\n </>;\n};\n\nexport { Profile };\n","export const esgCoveragePercentagesParser = data =>\n data\n .filter(v => v.percentage > 0)\n .map(({ continent, companyCount, percentage, continentCode }) => ({\n label: continent,\n total: companyCount,\n percent: Math.round(percentage * 100),\n id: continentCode,\n }));\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Box from '@mui/material/Box';\nimport Paper from '@mui/material/Paper';\nimport List from '@mui/material/List';\nimport ListItem from '@mui/material/ListItem';\nimport ListItemText from '@mui/material/ListItemText';\nimport makeStyles from '@mui/styles/makeStyles';\n\nimport { Loader, PanelTitle } from 'ui';\nimport { EmptyDataLabel } from 'ui/Labels';\n\nimport { types, TypesEnum } from '../constants/types';\nimport { fetchNotificationsWidget } from '../services/notificationsService';\n\nconst useValueStyles = makeStyles({\n primary: {\n textAlign: 'right',\n },\n});\n\ninterface NotificationsResponse {\n [TypesEnum.ACCOUNT_NOTIFICATIONS]: any;\n [TypesEnum.SYSTEM_UPDATE]: any;\n [TypesEnum.RESPONSE]: any;\n [TypesEnum.WHATS_NEW]: any;\n [TypesEnum.DOWNLOADS]: any;\n [TypesEnum.UPLOADS]: any;\n}\n\n/**\n * @deprecated\n */\nconst NotificationsWidget = () => {\n const { t } = useTranslation();\n const valueClasses = useValueStyles();\n const [isPending, setIsPending] = useState(true);\n const [data, setData] = useState<NotificationsResponse>();\n\n useEffect(() => {\n let isMounted = true;\n fetchNotificationsWidget()\n .then((response: any) => {\n if (!isMounted) {\n return;\n }\n\n setData(response);\n setIsPending(false);\n })\n .catch(() => {\n if (!isMounted) {\n return;\n }\n\n setIsPending(false);\n });\n\n return () => {\n isMounted = false;\n };\n }, []);\n\n const keys = data ? Object.keys(data as NotificationsResponse) : [];\n\n return (\n <>\n <PanelTitle>{t('NOTIFICATIONS_CENTRE.WIDGET.TITLE')}</PanelTitle>\n <Paper>\n {isPending ? (\n <Box py={1}>\n <Loader center />\n </Box>\n ) : (\n <List>\n {(keys as Array<TypesEnum>).map((key, index) => {\n const { label } = types[key];\n\n return (\n <ListItem key={key} divider={keys.length !== index + 1}>\n <ListItemText>{t(label)}</ListItemText>\n <ListItemText classes={valueClasses}>{data ? data[key] : ''}</ListItemText>\n </ListItem>\n );\n })}\n {!isPending && !keys.length && (\n <EmptyDataLabel label={t('NOTIFICATIONS_CENTRE.WIDGET.EMPTY')} />\n )}\n </List>\n )}\n </Paper>\n </>\n );\n};\n\nexport { NotificationsWidget };\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\n\nimport { PanelTitle, CoverageWidget } from 'ui';\nimport { getESGCoverage } from 'selectors/common';\nimport { esgCoveragePercentagesParser } from 'shared/parsers/esg/esgCoveragePercentagesParser';\n\nconst HomeESGCoverage = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { data, isPending } = useSelector(getESGCoverage);\n\n const onItemClick = (id) => navigate(`/esg-coverage/${id}`);\n return (\n <>\n <PanelTitle>{t('ESG coverage')}</PanelTitle>\n <CoverageWidget\n data={esgCoveragePercentagesParser(data)}\n loading={isPending}\n onItemClick={onItemClick}\n tooltip={t('% of MSCI World covered by Scope')}\n />\n </>\n );\n};\n\nexport { HomeESGCoverage };\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\n\nimport { PanelTitle, CoverageWidget } from 'ui';\nimport { ratingCoveragePercentagesParser } from 'shared/parsers';\n\nexport const HomeRatingCoverage = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { data, isPending } = useSelector(({ shared }) => shared.ratingCoverage);\n\n const onItemClick = (id) => navigate(`/credit-rating-coverage/${id}`);\n return (\n <>\n <PanelTitle>{t('Credit rating coverage')}</PanelTitle>\n <CoverageWidget\n data={ratingCoveragePercentagesParser(data)}\n loading={isPending}\n onItemClick={onItemClick}\n tooltip={t('% of iBoxx constituents covered by Scope')}\n />\n </>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\n\nimport { PanelTitle, SimpleDataList } from 'ui';\nimport { fetchMostOrderedItems } from 'services';\n\nexport const HomeTrendingRatings = () => {\n const navigate = useNavigate();\n const { t } = useTranslation();\n const [isPending, setIsPending] = useState(false);\n const [ratings, setRatings] = useState([]);\n\n useEffect(() => {\n const fetchData = async () => {\n setIsPending(true);\n try {\n const data = await fetchMostOrderedItems();\n\n setRatings(\n data.map(({ artifactId: id, name, classification }) => ({\n id,\n primaryText: name,\n secondaryText: classification.name,\n })),\n );\n } catch (e) {\n // will be handled in finally clause\n } finally {\n setIsPending(false);\n }\n };\n fetchData();\n }, []);\n\n const handleItemClick = ({ id }) => {\n navigate(`/entities/${id}`);\n };\n\n return (\n <>\n <PanelTitle>{t('Trending ratings')}</PanelTitle>\n <SimpleDataList\n data={ratings}\n loading={isPending}\n onItemClick={handleItemClick}\n emptyText={t('There are no trending ratings.')}\n />\n </>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\n\nimport { PanelTitle, SimpleDataList } from 'ui';\nimport { fetchEntities } from 'services';\n\nexport const HomeRecentRatings = () => {\n const navigate = useNavigate();\n const { t } = useTranslation();\n const [isPending, setIsPending] = useState(false);\n const [entities, setEntities] = useState([]);\n\n useEffect(() => {\n const fetchData = async () => {\n setIsPending(true);\n const { data } = await fetchEntities({\n page: 1,\n limit: 5,\n filter: { orderByRecentRatings: true },\n });\n\n setEntities(\n data.map(({ id, name, industryClassification }) => ({\n id,\n primaryText: name,\n secondaryText: industryClassification,\n })),\n );\n setIsPending(false);\n };\n fetchData();\n }, []);\n\n const handleItemClick = ({ id }) => {\n navigate(`/entities/${id}`);\n };\n\n return (\n <>\n <PanelTitle>{t('Recently rated')}</PanelTitle>\n <SimpleDataList\n data={entities}\n loading={isPending}\n onItemClick={handleItemClick}\n emptyText={t('There are no ratings yet.')}\n />\n </>\n );\n};\n","import React, { useState, useEffect } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { useFetchPortfolios } from 'modules/common/GraphQL/portfolios/hooks';\nimport { PanelTitle, SimpleDataList } from 'ui';\n\nexport const HomeRecentPortfolios = () => {\n const navigate = useNavigate();\n const { t } = useTranslation();\n const [portfolios, setPortfolios] = useState([]);\n\n const { data, loading } = useFetchPortfolios(0, 5, [\n { column: 'modifiedDate', direction: 'DESC' },\n ]);\n\n useEffect(() => {\n if (!loading && data && data.portfolios) {\n setPortfolios(\n data.portfolios.map(({ id, name, noOfItems }) => ({\n id,\n primaryText: name,\n secondaryText: `${noOfItems.entities} ${t('entities')}`,\n })),\n );\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data, loading]);\n\n const handleItemClick = ({ id }) => {\n navigate(`/portfolios/${id}`);\n };\n\n return (\n <>\n <PanelTitle>{t('My recent portfolios')}</PanelTitle>\n <SimpleDataList\n data={portfolios}\n loading={loading}\n onItemClick={handleItemClick}\n emptyText={t('There are no portfolios yet.')}\n />\n </>\n );\n};\n","import React from 'react';\nimport { useSelector } from 'react-redux';\n\nimport { ContactBox } from 'ui';\n\nimport mockedPersonalAdvisor from 'assets/mockedData/personalAdvisor.json';\nimport { contactTypes, contactTargets } from 'shared/constants/contactBox';\nimport { useContact } from 'shared/hooks';\n\nexport const HomeContactBox = () => {\n const {\n data: { organisation },\n } = useSelector(state => state.auth);\n const contact = useContact();\n\n const internal = organisation.scopeOrganisationType === 'INTERNAL';\n\n const data = internal\n ? {\n firstName: mockedPersonalAdvisor.personalAdvisor.firstName,\n lastName: mockedPersonalAdvisor.personalAdvisor.lastName,\n jobTitle: mockedPersonalAdvisor.personalAdvisor.jobTitle,\n }\n : {\n firstName: organisation.personalAdvisor.firstName,\n lastName: organisation.personalAdvisor.name,\n jobTitle: organisation.personalAdvisor.jobTitle,\n userId: organisation.personalAdvisor.userId,\n };\n\n data.jobFunction = mockedPersonalAdvisor.jobFunction;\n data.internal = internal;\n\n const handleContact = (type, target) => async ({ subject, message, origin }) => {\n contact({ type, subject, message, origin, target });\n };\n\n return (\n <ContactBox\n {...data}\n empty={!organisation}\n showMessageButton={!internal}\n showRequestCallButton={!internal}\n onRequestCall={handleContact(contactTypes.CALL, contactTargets.PERSONAL_ADVISER)}\n onSendMessage={handleContact(contactTypes.MESSAGE, contactTargets.PERSONAL_ADVISER)}\n />\n );\n};\n","import React, { useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\n\nimport { PanelTitle, PeopleList } from 'ui';\n\nimport { getRecentUsersAction } from 'store/recentUsers/recentUsersActions';\n\nexport const HomeMyOrganisation = () => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const { data, isPending } = useSelector(state => state.recentUsers);\n\n useEffect(() => {\n dispatch(getRecentUsersAction);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <>\n <PanelTitle>{t('My organisation')}</PanelTitle>\n <PeopleList data={data} loading={isPending} />\n </>\n );\n};\n","import React from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useNavigate } from 'react-router-dom';\nimport { useSelector } from 'react-redux';\n\nimport { PanelTitle, SimpleDataList } from 'ui';\nimport { getHomeSubscriptions } from 'modules/shop/selectors/shopSelectors';\n\nexport const HomeSubscriptions = () => {\n const navigate = useNavigate();\n const { t } = useTranslation();\n\n const subscriptions = useSelector(getHomeSubscriptions);\n\n const handleItemClick = ({ id }) => {\n navigate(`/subscriptions?productId=${id}`);\n };\n\n return (\n <>\n <PanelTitle>{t('My subscriptions')}</PanelTitle>\n <SimpleDataList\n data={subscriptions.data}\n loading={subscriptions.isPending}\n onItemClick={handleItemClick}\n emptyText={t('There are no subscriptions yet.')}\n />\n </>\n );\n};\n","import { DialogContent, Dialog, Typography } from '@mui/material';\nimport React, { FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { DialogTitleWithClose, Documents, Loader } from 'ui';\n\ntype HomeCoveredBondsDocumentsModalProps = {\n isPending: boolean;\n documents: Document[];\n open: boolean;\n onClose: () => void;\n};\n\ntype Document = {\n link: string;\n name: string;\n publicationDate: string;\n};\n\nexport const HomeCoveredBondsDocumentsModal: FC<HomeCoveredBondsDocumentsModalProps> = ({\n isPending,\n documents,\n open,\n onClose,\n}) => {\n const { t } = useTranslation();\n\n const documentsParsed = documents.map((document: Document) => {\n const { link, name, publicationDate } = document;\n return {\n path: link,\n name,\n publicationDate,\n title: name,\n };\n });\n\n const documentsDisplay = documents.length ? (\n <Documents expanded title={t('Reports')} documents={documentsParsed} />\n ) : (\n <Typography variant=\"caption\">{t('No documents to display')}</Typography>\n );\n\n return (\n <>\n <Dialog open={open} onClose={onClose} maxWidth={false}>\n <DialogTitleWithClose onClose={onClose}>{t('DOCUMENTS')}</DialogTitleWithClose>\n <DialogContent>{isPending ? <Loader center /> : documentsDisplay}</DialogContent>\n </Dialog>\n </>\n );\n};\n","import { getName } from 'country-list';\nimport { CountrySortColumn, SortOrder, CountryListItem } from './types';\n\nexport const prepareCountriesList = (\n countries: Array<{ countryCode: string; number: number }>,\n sortBy: CountrySortColumn = 'countryName',\n sortOrder: SortOrder = 'ASC',\n) => {\n let countriesWithNames = countries.map(\n item =>\n ({\n ...item,\n countryName: getName(item.countryCode),\n } as CountryListItem),\n );\n\n if (countriesWithNames.length > 1) {\n countriesWithNames = countriesWithNames.sort((a: any, b: any) => {\n // eslint-disable-next-line no-nested-ternary\n return a[sortBy] > b[sortBy] ? 1 : b[sortBy] > a[sortBy] ? -1 : 0;\n });\n }\n if (sortOrder === 'DESC') {\n countriesWithNames.reverse();\n }\n\n return countriesWithNames;\n};\n","import { Paper, List, ListItem, ListItemText, Divider, Box } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport React, { FC, Fragment, useEffect, useMemo, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { formatNumber } from 'shared/functions';\nimport { ActionsButton, Loader, PanelTitle } from 'ui';\nimport { KeyboardArrowDown, KeyboardArrowUp } from '@mui/icons-material';\nimport { useNavigate } from 'react-router-dom';\nimport { fetchCoveredBoundsCountries } from 'services';\nimport { CustomToolbarItem } from 'shared/types/customToolbar';\nimport { fetchCoveredBoundsDocuments } from 'services/coveredBonds/coveredBondsServices';\nimport { HomeCoveredBondsDocumentsModal } from 'modules/common/Modals/HomeCoveredBondsDocumentsModal';\nimport { CountryListItem } from 'modules/creditRating/CoveredBonds/types';\nimport { prepareCountriesList } from '../../../modules/creditRating/CoveredBonds/functions';\n\nconst useStyles = makeStyles(() => ({\n listItem: {\n display: 'flex',\n justifyContent: 'space-between',\n width: '100%',\n height: '60px',\n },\n showMoreButton: {\n justifyContent: 'center',\n paddingTop: '12px',\n height: '32px',\n fontWeight: 'bold',\n textTransform: 'uppercase',\n },\n countryCount: {\n textAlign: 'right',\n },\n widgetHeader: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'start',\n },\n}));\n\nexport const CoveredBonds: FC<{}> = () => {\n const { t } = useTranslation();\n const classes = useStyles();\n const navigate = useNavigate();\n const [isShowMore, setIsShowMore] = useState<boolean>(true);\n const [fullCountriesList, setFullCountriesList] = useState<CountryListItem[]>([]);\n const [displayCountriesList, setDisplayCountriesList] = useState<CountryListItem[]>([]);\n const [loading, setLoading] = useState<boolean>(true);\n const [documentsModalOpen, setDocumentsModalOpen] = useState<boolean>(false);\n const [documents, setDocuments] = useState([]);\n const [isDocumentsPending, setIsDocumentsPending] = useState(true);\n\n const getCountriesData = async () => {\n setLoading(true);\n const countries = await fetchCoveredBoundsCountries();\n const countriesWithNames = prepareCountriesList(countries, 'number', 'DESC');\n setFullCountriesList(countriesWithNames);\n setDisplayCountriesList(countriesWithNames);\n setLoading(false);\n };\n\n const getCoveredBondsDocuments = () => {\n setDocumentsModalOpen(true);\n setIsDocumentsPending(true);\n fetchCoveredBoundsDocuments()\n .then((response) => setDocuments(response.data))\n .catch((_err) => setDocumentsModalOpen(false))\n .finally(() => setIsDocumentsPending(false));\n };\n\n useMemo(() => {\n getCountriesData();\n }, []);\n\n useEffect(() => {\n const halfwayThrough = Math.floor(fullCountriesList.length / 2);\n const result: CountryListItem[] = isShowMore\n ? fullCountriesList.slice(0, halfwayThrough)\n : fullCountriesList;\n setDisplayCountriesList(result);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isShowMore, fullCountriesList]);\n\n const onItemClick = (label: string) => navigate(`/covered-bonds/${label}`);\n\n const moreActions: CustomToolbarItem[] = [\n {\n text: 'Issuance report',\n handler: () => getCoveredBondsDocuments(),\n },\n {\n text: 'Show all',\n handler: () => onItemClick('all'),\n },\n ];\n\n return (\n <>\n <Box className={classes.widgetHeader}>\n <PanelTitle>{t('HOME.COVERED_BONDS')}</PanelTitle>\n <ActionsButton actions={moreActions} horizontal variant=\"text\" />\n </Box>\n <Paper>\n <List>\n {loading ? (\n <Loader center />\n ) : (\n displayCountriesList.map((element, index) => (\n <Fragment key={element.countryCode}>\n <ListItem\n onClick={() => onItemClick(element.countryCode)}\n button\n className={classes.listItem}\n >\n <ListItemText primary={`${element.countryName}`} />\n <ListItemText\n primary={`${formatNumber(element.number)}`}\n className={classes.countryCount}\n />\n </ListItem>\n {displayCountriesList.length - 1 > index && <Divider />}\n </Fragment>\n ))\n )}\n <Divider />\n <ListItem\n onClick={() => setIsShowMore(!isShowMore)}\n button\n className={classes.showMoreButton}\n >\n {isShowMore ? (\n <>\n {t('SHOW_MORE')} <KeyboardArrowDown />\n </>\n ) : (\n <>\n {t('SHOW_LESS')} <KeyboardArrowUp />\n </>\n )}\n </ListItem>\n </List>\n </Paper>\n <HomeCoveredBondsDocumentsModal\n open={documentsModalOpen}\n isPending={isDocumentsPending}\n onClose={() => setDocumentsModalOpen(!documentsModalOpen)}\n documents={documents}\n />\n </>\n );\n};\n","import React, { FC, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\n\nimport { NewsFeed } from 'modules/common';\nimport { RenderElement } from 'shared/hoc';\nimport { useFeatures, useQuery } from 'shared/hooks';\nimport { BaseProps } from 'shared/types/base';\nimport { allStandardRolesTypes } from 'shared/constants/rolesTypes';\nimport { downloadService } from 'services/download';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { NotificationsWidget } from 'modules/notificationsCentre/components/NotificationsWidget';\n\nimport { HomeESGCoverage } from './HomeESGCoverage/HomeESGCoverage';\nimport { HomeRatingCoverage } from './HomeRatingCoverage/HomeRatingCoverage';\nimport { HomeTrendingRatings } from './HomeTrendingRatings/HomeTrendingRatings';\nimport { HomeRecentRatings } from './HomeRecentRatings/HomeRecentRatings';\nimport { HomeRecentPortfolios } from './HomeRecentPortfolios/HomeRecentPortfolios';\nimport { HomeContactBox } from './HomeContactBox/HomeContactBox';\nimport { HomeMyOrganisation } from './HomeMyOrganisation/HomeMyOrganisation';\nimport { HomeSubscriptions } from './HomeSubscriptions/HomeSubscriptions';\nimport { CoveredBonds } from './HomeCoveredBonds/HomeCoveredBonds';\n\ntype HomeProps = BaseProps;\n\ntype HandleDownloadParams = {\n path: string;\n name: string;\n};\n\nconst useStyle = makeStyles(theme => ({\n panel: {\n marginBottom: theme.spacing(3),\n },\n}));\n\nconst Home: FC<HomeProps> = () => {\n const dispatch = useDispatch();\n const classes = useStyle();\n const { document } = useQuery();\n const { ecafFeature } = useFeatures();\n\n const throwFetchError = () =>\n dispatch(addNotificationAction({ variant: 'error', message: 'Failed to fetch document.' }));\n\n const handleDownload = ({ path, name }: HandleDownloadParams) =>\n downloadService({ path, name, onError: throwFetchError });\n\n useEffect(() => {\n if (document === 'methodology') {\n handleDownload({\n name: 'ESG Impact Review Methodology.pdf',\n path: '/esg/api/methodology-current/',\n });\n }\n if (document === 'how-we-are-different') {\n handleDownload({\n name: 'Scope ESG Impact Review - How we are different.pdf',\n path: '/esg/api/how-we-are-different-current/',\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n <Grid container spacing={3}>\n <RenderElement role={allStandardRolesTypes}>\n <Grid item xs={12} md={3}>\n <div className={classes.panel}>\n <HomeESGCoverage />\n </div>\n <div className={classes.panel}>\n <HomeRatingCoverage />\n </div>\n {ecafFeature && (\n <div className={classes.panel}>\n <CoveredBonds />\n </div>\n )}\n <div className={classes.panel}>\n <HomeTrendingRatings />\n </div>\n <div className={classes.panel}>\n <HomeRecentRatings />\n </div>\n </Grid>\n </RenderElement>\n <Grid item xs={12} md={6}>\n <NewsFeed />\n </Grid>\n <Grid item xs={12} md={3}>\n <div className={classes.panel}>\n <HomeContactBox />\n </div>\n {false && (\n <div className={classes.panel}>\n <NotificationsWidget />\n </div>\n )}\n <div className={classes.panel}>\n <HomeMyOrganisation />\n </div>\n <div className={classes.panel}>\n <HomeRecentPortfolios />\n </div>\n <HomeSubscriptions />\n </Grid>\n </Grid>\n );\n};\n\nexport { Home };\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { connect, useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Button from '@mui/material/Button';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport Link from '@mui/material/Link';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\n\nimport { loginAction } from 'store/login/loginAction';\nimport { useLoginForm } from 'shared/hooks';\nimport { Alert } from 'ui';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n width: '100vw',\n height: '100vh',\n },\n button: {\n margin: `${theme.spacing(2)} 0`,\n },\n paper: {\n padding: theme.spacing(2),\n },\n}));\n\nconst Login = ({ dispatch }) => {\n const classes = useStyles();\n const [submitted, setSubmitted] = useState(false);\n const { t } = useTranslation();\n const { isPending, error } = useSelector(({ auth }) => auth);\n\n const { inputs, handleInputChange } = useLoginForm();\n\n const handleSubmit = event => {\n event.preventDefault();\n dispatch(loginAction(inputs));\n setSubmitted(true);\n };\n\n return (\n <div className={classes.root}>\n <Paper className={classes.paper}>\n {error && submitted && !isPending && (\n <Alert message={t('Incorrect login or password')} variant=\"warning\" />\n )}\n <Typography variant=\"h5\" align=\"center\">\n ScopeOne\n </Typography>\n <form onSubmit={handleSubmit}>\n <TextField\n className={classes.field}\n onChange={handleInputChange}\n name=\"userName\"\n type=\"email\"\n label=\"E-mail address\"\n variant=\"outlined\"\n fullWidth\n autoFocus\n required\n />\n <TextField\n className={classes.field}\n onChange={handleInputChange}\n name=\"password\"\n type=\"password\"\n label=\"Password\"\n variant=\"outlined\"\n fullWidth\n required\n />\n <Grid container justifyContent=\"center\">\n <Grid item>\n <Button\n type=\"submit\"\n className={classes.button}\n color=\"primary\"\n variant=\"contained\"\n size=\"large\"\n disabled={isPending}\n >\n {t('Login')}\n </Button>\n </Grid>\n </Grid>\n <Grid container justifyContent=\"center\">\n <Grid item>\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n <Link color=\"inherit\" href=\"#\">\n Forgot your password?\n </Link>\n </Grid>\n </Grid>\n </form>\n </Paper>\n </div>\n );\n};\n\nLogin.propTypes = {\n dispatch: PropTypes.func.isRequired,\n};\n\nconst mapStateToProps = payload => ({ payload });\n\nconst ConnectedLogin = connect(mapStateToProps)(Login);\n\nexport { ConnectedLogin };\n","import React, { FC } from 'react';\nimport clsx from 'clsx';\nimport withStyles from '@mui/styles/withStyles';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\nimport Table from '@mui/material/Table';\nimport TableBody from '@mui/material/TableBody';\nimport TableCell from '@mui/material/TableCell';\nimport TableContainer from '@mui/material/TableContainer';\nimport TableHead from '@mui/material/TableHead';\nimport TableRow from '@mui/material/TableRow';\nimport { Checkbox, Tooltip } from '@mui/material';\nimport Button from '@mui/material/Button';\nimport ButtonGroup from '@mui/material/ButtonGroup';\nimport { grey } from '@mui/material/colors';\nimport { frequencies } from '../constants/frequencies';\n\nimport { SettingsData } from './Settings';\n\nconst hideFrequencyColumn = true;\n\nconst StyledTableCell = withStyles(theme => ({\n root: {\n borderBottomStyle: 'dashed',\n },\n head: {\n color: theme.palette.primary.main,\n },\n}))(TableCell);\nconst useTableCellEmailSectionStyles = makeStyles({\n state: {\n borderLeft: `1px solid ${grey[400]}`,\n },\n});\nconst useButtonStyles = makeStyles(theme => ({\n root: {\n borderColor: grey[300],\n color: grey[400],\n '&:hover': {\n color: theme.palette.primary.main,\n borderColor: grey[300],\n },\n '&$selected': {\n color: theme.palette.primary.main,\n },\n },\n selected: {},\n}));\nconst keys = {\n isPush: 'is_push',\n isEmail: 'is_email',\n frequency: 'frequency',\n};\n\ntype SettingsTabProps = {\n data: Array<SettingsData>;\n onChange: (id: string, field: string, value: any) => void;\n};\n\nconst SettingsTab: FC<SettingsTabProps> = ({ data, onChange }) => {\n const { t } = useTranslation();\n const buttonClasses = useButtonStyles();\n const muiButtonClasses = { root: buttonClasses.root };\n const tableCellEmailSectionClasses = useTableCellEmailSectionStyles();\n\n const StyledButton = (props: any) => <Button classes={muiButtonClasses} {...props} />;\n\n return (\n <TableContainer>\n <Table>\n <TableHead>\n <TableRow>\n <StyledTableCell width=\"45%\">{t('Notification name')}</StyledTableCell>\n <StyledTableCell width=\"15%\" align=\"center\">\n {t('Push')}\n </StyledTableCell>\n <StyledTableCell width=\"15%\" align=\"center\">\n {t('Email')}\n </StyledTableCell>\n {hideFrequencyColumn ? null : (\n <StyledTableCell width=\"25%\" align=\"center\">\n {t('Frequency')}\n </StyledTableCell>\n )}\n </TableRow>\n </TableHead>\n <TableBody>\n {data.map(({ name, description, isPush, isEmail, frequency, id }) => (\n <TableRow key={name}>\n <StyledTableCell>\n <Tooltip title={description} placement=\"top\" arrow>\n <span>{name}</span>\n </Tooltip>\n </StyledTableCell>\n <StyledTableCell align=\"center\">\n <Checkbox\n checked={isPush}\n onChange={(event, value) => onChange(id, keys.isPush, value)}\n />\n </StyledTableCell>\n <StyledTableCell align=\"center\" className={tableCellEmailSectionClasses.state}>\n <Checkbox\n checked={isEmail}\n onChange={(event, value) => onChange(id, keys.isEmail, value)}\n />\n </StyledTableCell>\n\n {hideFrequencyColumn ? null : (\n <StyledTableCell align=\"center\">\n <ButtonGroup color=\"primary\" disabled={!isEmail}>\n {Object.values(frequencies).map(({ id: frequencyId, label }) => {\n const isCurrent = frequencyId === frequency;\n\n return (\n <StyledButton\n key={frequencyId}\n onClick={() => onChange(id, keys.frequency, frequencyId)}\n disabled={isCurrent}\n className={clsx({ [buttonClasses.selected]: isCurrent && isEmail })}\n >\n {label}\n </StyledButton>\n );\n })}\n </ButtonGroup>\n </StyledTableCell>\n )}\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n );\n};\n\nexport { SettingsTab };\n","import React, { FC, useState, ChangeEvent } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport Paper from '@mui/material/Paper';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Tabs from '@mui/material/Tabs';\nimport Tab from '@mui/material/Tab';\n\nimport { TabPanel, Loader } from 'ui';\nimport { SettingsTab } from './SettingsTab';\n\nconst useStyles = makeStyles(theme => ({\n root: {\n marginBottom: theme.spacing(3),\n padding: theme.spacing(3, 2),\n backgroundColor: theme.palette.background.paper,\n },\n}));\n\nconst tabsLabelsIds = {\n systemUpdate: 'system_update',\n accountNotification: 'account_notification',\n response: 'response',\n whatsNew: 'whats_new',\n};\n\nconst tabsLabels = [\n {\n label: 'System notifications',\n id: tabsLabelsIds.systemUpdate,\n },\n {\n label: 'Account updates',\n id: tabsLabelsIds.accountNotification,\n },\n {\n label: 'Responses',\n id: tabsLabelsIds.response,\n },\n {\n label: \"What's new\",\n id: tabsLabelsIds.whatsNew,\n },\n];\n\nexport type SettingsData = {\n category: string;\n description: string;\n frequency: string;\n id: string;\n name: string;\n isEmail: boolean;\n isPush: boolean;\n};\n\ntype SettingsProps = {\n onNotificationsSettingsChange: () => void;\n isLoading: boolean;\n settings: any;\n};\n\nconst Settings: FC<SettingsProps> = ({ onNotificationsSettingsChange, settings, isLoading }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const [value, setValue] = useState(0);\n const availableTabsLabels = settings\n ? tabsLabels.filter(({ id }) => Object.keys(settings).includes(id))\n : [];\n\n const handleChange = (event: ChangeEvent<{}>, newValue: any) => {\n setValue(newValue);\n };\n\n return (\n <Paper className={classes.root}>\n {isLoading ? (\n <Loader center />\n ) : (\n <>\n <Tabs value={value} onChange={handleChange}>\n {availableTabsLabels.map(({ label, id }) => (\n <Tab key={id} label={t(label)} />\n ))}\n </Tabs>\n {availableTabsLabels.map(({ id }, index) => (\n <TabPanel key={id} value={value} index={index}>\n <SettingsTab\n data={settings[id] as Array<SettingsData>}\n onChange={onNotificationsSettingsChange}\n />\n </TabPanel>\n ))}\n </>\n )}\n </Paper>\n );\n};\n\nexport { Settings };\n","import { transformKeysToCamelCase } from 'shared/functions';\n\nconst parseSettingData = ({ type, ...data }) => {\n return {\n ...data,\n ...type,\n };\n};\nexport const parseSettingsData = data =>\n data\n .map(item => transformKeysToCamelCase(item))\n .reduce((all, current) => {\n return {\n ...all,\n [current.type.category]: all[current.type.category]\n ? [...all[current.type.category], parseSettingData(current)]\n : [parseSettingData(current)],\n };\n }, {});\nexport const parseSettingsDataToUpdate = data =>\n data.map(({ type: { tag }, _id, ...settings }) => ({\n ...settings,\n type_tag: tag,\n }));\n","import React, { useState, useEffect, useRef } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { makeStyles } from '@mui/styles';\nimport Button from '@mui/material/Button';\n\nimport { PanelTitle } from 'ui';\nimport { NewsFeedSettings, EmailNotifications } from 'modules/common';\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport isEqualWith from 'lodash/isEqualWith';\nimport { initialSettingsParser } from 'shared/parsers';\nimport { getShallowObjectsArrayDifference } from 'shared/functions';\nimport { savePreferencesAction, getPreferencesAction } from 'store/newsFeed/newsFeedActions';\nimport { Settings as NotificationsSettings } from 'modules/notificationsCentre/components/Settings';\nimport {\n fetchUserNotificationsSettings,\n updateNotificationsSettings,\n} from 'modules/notificationsCentre/services/notificationsService';\nimport { parseSettingsData, parseSettingsDataToUpdate } from 'modules/notificationsCentre/parsers';\n\nconst useStyle = makeStyles((theme) => ({\n right: {\n float: 'right',\n },\n saveButton: {\n marginLeft: theme.spacing(1),\n },\n}));\n\nconst notificationsSettingsId = 'notifications-settings';\n\nconst settingsVisibility = {\n newsFeed: false,\n newsletter: false,\n email: false,\n notifications: true,\n};\n\nconst NewsCentre = () => {\n const classes = useStyle();\n const dispatch = useDispatch();\n const { t } = useTranslation();\n const didUnmount = useRef(false);\n\n const { preferences, defaultPrefsSet } = useSelector(({ newsFeed }) => newsFeed);\n\n const [initialSettings, setInitialSettings] = useState(initialSettingsParser(preferences));\n const [settings, setSettings] = useState(initialSettings);\n const [isSettingsChanged, setIsSettingsChanged] = useState(false);\n const [notificationsSettings, setNotificationsSettings] = useState();\n const [initialNotificationsSettings, setInitialNotificationsSettings] = useState();\n const [isNotificationsSettingsChanged, setIsNotificationsSettingsChanged] = useState(false);\n const [isNotificationsSettingsLoading, setIsNotificationsSettingsLoading] = useState(true);\n const [pristine, setPristine] = useState(true);\n const [didSettingsChange, setDidSettingsChange] = useState(false);\n\n const checkSettingsChanged = () =>\n !isEqualWith(initialSettings, settings, (first, second) => {\n if (Array.isArray(first) && Array.isArray(second)) {\n return first.length === second.length && first.every((element) => second.includes(element));\n }\n return undefined;\n });\n\n useEffect(() => {\n if (!defaultPrefsSet) {\n setInitialSettings(initialSettingsParser(preferences));\n }\n setSettings(initialSettingsParser(preferences));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [preferences]);\n\n useEffect(() => {\n let isMounted = true;\n\n if (settingsVisibility.notifications) {\n fetchUserNotificationsSettings().then((result) => {\n if (!isMounted) {\n return;\n }\n\n setInitialNotificationsSettings(result);\n setNotificationsSettings(result);\n setIsNotificationsSettingsLoading(false);\n });\n }\n\n return () => {\n isMounted = false;\n didUnmount.current = true;\n };\n }, []);\n\n useEffect(() => {\n const _isSettingsChanged = checkSettingsChanged(settings);\n setIsSettingsChanged(_isSettingsChanged);\n\n let _isNotificationsSettingsChanged = false;\n if (settingsVisibility.notifications) {\n _isNotificationsSettingsChanged = !isEqualWith(\n initialNotificationsSettings,\n notificationsSettings,\n );\n }\n setIsNotificationsSettingsChanged(_isNotificationsSettingsChanged);\n\n setDidSettingsChange(_isSettingsChanged || _isNotificationsSettingsChanged);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [settings, initialNotificationsSettings, notificationsSettings]);\n\n const handleNewsFeedSettingsChanged = (updatedSettings) => {\n setPristine(false);\n setSettings((currentSettings) => ({\n ...currentSettings,\n newsFeed: updatedSettings.newsFeed,\n }));\n };\n\n const handleNewsletterSettingsChanged = (updatedSettings) => {\n setPristine(false);\n setSettings((currentSettings) => ({\n ...currentSettings,\n newsletter: updatedSettings.newsletter,\n }));\n };\n\n const handleEmailSettingsChanged = (emailSettings) => {\n setPristine(false);\n setSettings((currentSettings) => ({\n ...currentSettings,\n emailNotifications: emailSettings,\n }));\n };\n\n const handleNotificationsSettingsChanged = (id, key, updatedSetting) => {\n setPristine(false);\n setNotificationsSettings(\n notificationsSettings.map((data) => {\n const { _id: currentId } = data;\n\n if (id === currentId) {\n return {\n ...data,\n [key]: updatedSetting,\n };\n }\n\n return data;\n }),\n );\n };\n\n const saveChanges = () => {\n if (isSettingsChanged) {\n dispatch(savePreferencesAction(settings));\n }\n\n if (settingsVisibility.notifications && isNotificationsSettingsChanged) {\n const changedData = getShallowObjectsArrayDifference(\n initialNotificationsSettings,\n notificationsSettings,\n );\n\n updateNotificationsSettings({ data: parseSettingsDataToUpdate(changedData) }).then(() => {\n if (!didUnmount.current) {\n setInitialNotificationsSettings(notificationsSettings);\n }\n });\n }\n };\n\n const setToDefault = () => {\n dispatch(getPreferencesAction(true));\n };\n\n const discardChanges = () => {\n setPristine(true);\n };\n\n return (\n <>\n {settingsVisibility.newsFeed && (\n <>\n <PanelTitle>{t('News feed')}</PanelTitle>\n <NewsFeedSettings\n newsSettingsChanged={handleNewsFeedSettingsChanged}\n pristine={pristine}\n />\n </>\n )}\n {settingsVisibility.newsletter && (\n <>\n <PanelTitle>{t('Newsletter')}</PanelTitle>\n <NewsFeedSettings\n newsletterEnabled\n newsSettingsChanged={handleNewsletterSettingsChanged}\n pristine={pristine}\n />\n </>\n )}\n {settingsVisibility.email && (\n <>\n <PanelTitle>{t('Email notifications')}</PanelTitle>\n <EmailNotifications\n emailSettingsChanged={handleEmailSettingsChanged}\n pristine={pristine}\n />\n </>\n )}\n {settingsVisibility.notifications && (\n <>\n <PanelTitle id={notificationsSettingsId}>{t('Notifications settings')}</PanelTitle>\n <NotificationsSettings\n onNotificationsSettingsChange={handleNotificationsSettingsChanged}\n settings={\n !isNotificationsSettingsLoading ? parseSettingsData(notificationsSettings) : undefined\n }\n isLoading={isNotificationsSettingsLoading}\n />\n </>\n )}\n <Button variant=\"outlined\" onClick={setToDefault}>\n {t('Set to default')}\n </Button>\n <div className={classes.right}>\n <Button variant=\"outlined\" onClick={discardChanges}>\n {t('Discard changes')}\n </Button>\n <Button\n type=\"submit\"\n variant=\"contained\"\n color=\"primary\"\n className={classes.saveButton}\n disabled={!didSettingsChange}\n onClick={saveChanges}\n >\n {t('Save changes')}\n </Button>\n </div>\n </>\n );\n};\n\nexport { NewsCentre };\n","import React, { ReactElement, FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\n\nimport { BaseProps } from 'shared/types/base';\nimport { theme } from 'theme';\nimport { useNavigate } from 'react-router-dom';\n\ntype NotFoundProps = BaseProps;\n\nconst useStyles = makeStyles({\n logo: {\n height: 120,\n marginBottom: theme.spacing(4),\n },\n title: {\n marginBottom: theme.spacing(3),\n },\n button: {\n marginTop: theme.spacing(4),\n },\n});\n\nconst NotFound: FC<NotFoundProps> = (): ReactElement => {\n const classes = useStyles();\n const { t } = useTranslation();\n const navigate = useNavigate();\n\n const goBack = () => {\n navigate('/');\n };\n\n return (\n <Box textAlign=\"center\" marginTop={4}>\n <img src=\"Scope-TheEuropean-logo.svg\" alt=\"logo\" className={classes.logo} />\n <Typography variant=\"h4\" className={classes.title}>\n {t('PAGE_NOT_FOUND')}\n </Typography>\n <Typography variant=\"body2\">\n {t('SORRY_THE_PAGE_YOU_ARE_LOOKING_FOR_WAS_NOT_FOUND')}\n </Typography>\n <Button variant=\"contained\" color=\"primary\" className={classes.button} onClick={goBack}>\n {t('GO_BACK')}\n </Button>\n </Box>\n );\n};\n\nexport { NotFound };\n","import React, { ReactElement, FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\n\nimport { BaseProps } from 'shared/types/base';\nimport { theme } from 'theme';\n\ntype ErrorPageProps = BaseProps;\n\nconst useStyles = makeStyles({\n logo: {\n height: 120,\n marginBottom: theme.spacing(4),\n },\n title: {\n marginBottom: theme.spacing(3),\n },\n button: {\n marginTop: theme.spacing(4),\n },\n});\n\nconst ErrorPage: FC<ErrorPageProps> = (): ReactElement => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n const goBack = () => {\n window.location.href = `${window.location.origin}/page-one`;\n };\n\n return (\n <>\n <Box textAlign=\"center\" marginTop={15}>\n <img src=\"Scope-TheEuropean-logo.svg\" alt=\"logo\" className={classes.logo} />\n <Typography variant=\"h4\" className={classes.title}>\n {t('SORRY_SOMETHING_WENT_WRONG')}\n </Typography>\n <Typography variant=\"body2\">{t('WE_ARE_WORKING_ON_IT')}</Typography>\n <Button variant=\"contained\" color=\"primary\" className={classes.button} onClick={goBack}>\n {t('GO_BACK')}\n </Button>\n </Box>\n </>\n );\n};\n\nexport { ErrorPage };\n","import React, { ReactElement, FC } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport Button from '@mui/material/Button';\n\nimport { BaseProps } from 'shared/types/base';\nimport { theme } from 'theme';\n\ntype ServiceNotAvailableProps = BaseProps;\n\nconst useStyles = makeStyles({\n logo: {\n height: 120,\n marginBottom: theme.spacing(4),\n },\n title: {\n marginBottom: theme.spacing(3),\n },\n button: {\n marginTop: theme.spacing(4),\n },\n});\n\nconst ServiceNotAvailable: FC<ServiceNotAvailableProps> = (): ReactElement => {\n const classes = useStyles();\n const { t } = useTranslation();\n\n const goBack = () => {\n window.location.href = `${window.location.origin}/page-one`;\n };\n\n return (\n <>\n <Box textAlign=\"center\" marginTop={15}>\n <img src=\"Scope-TheEuropean-logo.svg\" alt=\"logo\" className={classes.logo} />\n <Typography variant=\"h4\" className={classes.title}>\n {t('SORRY_SERVICE_UNAVAILABLE')}\n </Typography>\n <Typography variant=\"body2\">{t('WE_ARE_WORKING_ON_IT')}</Typography>\n <Button variant=\"contained\" color=\"primary\" className={classes.button} onClick={goBack}>\n {t('GO_BACK')}\n </Button>\n </Box>\n </>\n );\n};\n\nexport { ServiceNotAvailable };\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport camelCase from 'lodash/camelCase';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\nimport { Loader, TabsPanel } from 'ui';\nimport { EntitiesTable } from 'modules/common';\nimport { searchEntitiesAction } from 'store/searchResult/searchResultActions';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { flattenIndustries } from 'shared/parsers';\n\nexport const RatingCoverage = () => {\n const { t } = useTranslation();\n const { businessLine } = useParams();\n const { ratingCoverageData, allIndustriesData } = useSelector(({ shared }) => ({\n ratingCoverageData: shared.ratingCoverage.data,\n allIndustriesData: shared.industries.data,\n }));\n const entities = useSelector(\n ({ searchResult }) => searchResult.entities.byRatingType[ratingTypes.CREDIT_RATING],\n );\n\n const allIndustries = flattenIndustries(allIndustriesData);\n\n const initialFilter = ratingCoverageData.find(\n item => camelCase(item.businessLine) === camelCase(businessLine),\n );\n const initialFilterModalValues =\n initialFilter &&\n allIndustries &&\n initialFilter.industries.map(({ sector }) => {\n return allIndustries.find(({ code }) => code === sector);\n });\n\n return initialFilter && initialFilterModalValues ? (\n <>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('Credit rating coverage')}</Typography>\n </Box>\n <TabsPanel active=\"entities\">\n <div label={t('Entities')} value=\"entities\" counter={entities.total}>\n <EntitiesTable\n dataSelector={entities}\n actionCreator={searchEntitiesAction}\n constantFilter={{ withRatingOnly: true }}\n initialFilter={{ industrySectors: initialFilter.industries }}\n initialFilterModalValues={{ industries: initialFilterModalValues }}\n />\n </div>\n </TabsPanel>\n </>\n ) : (\n <Loader center />\n );\n};\n","export const ratingCoverageTabs = {\n issuers: 'issuers',\n research: 'research',\n};\n","import qs from 'qs';\nimport React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport { searchEntitiesAction } from 'store/searchResult/searchResultActions';\nimport { EntitiesTable } from 'modules/common';\nimport { artifactsParser } from 'shared/parsers';\nimport { useTranslation } from 'react-i18next';\nimport Typography from '@mui/material/Typography';\nimport Box from '@mui/material/Box';\n\nimport { TabsPanel, Artifacts } from 'ui';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { fetchArtifacts } from 'services';\nimport { ratingCoverageTabs } from 'shared/constants/ratingCoverageTabs';\nimport {\n getAllIndustriesData,\n getRelatedIndustries,\n getSortedFilterableIndustries,\n getCurrentIndustry,\n} from 'selectors/common';\n\nconst page = 1;\n\nconst RatingCoverageIndustry = () => {\n const navigate = useNavigate();\n const { pathname, search } = useLocation();\n const { t } = useTranslation();\n const { code, industryCode, tab } = qs.parse(search.slice(1));\n const entities = useSelector(\n ({ searchResult }) => searchResult.entities.byRatingType[ratingTypes.CREDIT_RATING],\n );\n const [initialFilterValues, setInitialFilterValues] = useState(null);\n const allIndustriesData = useSelector(getAllIndustriesData);\n const relatedIndustries = useSelector(getRelatedIndustries);\n const filterableIndustries = useSelector(getSortedFilterableIndustries);\n const currentIndustry = useSelector(getCurrentIndustry(code, industryCode));\n const [isResearchPending, setIsResearchPending] = useState(false);\n const [researchArtifacts, setResearchArtifacts] = useState({ data: [], total: 0 });\n const [activeTab, setActiveTab] = useState(tab || ratingCoverageTabs.issuers);\n\n const initialFilter = { industrySectors: [{ sector: code, industry: industryCode }] };\n const changeTab = (_, value) => {\n setActiveTab(value);\n\n const queryParams = qs.parse(search.slice(1));\n const updatedParams = {\n ...queryParams,\n tab: value,\n };\n\n navigate({\n search: `?${qs.stringify(updatedParams)}`,\n });\n };\n\n const getArtifacts = async (industry) => {\n try {\n setIsResearchPending(true);\n const { data, total } = await fetchArtifacts({\n page,\n limit: 10,\n type: 'INDUSTRY_RESEARCH',\n industryCode: industry.code,\n });\n\n setResearchArtifacts({ data: artifactsParser(data), total });\n } finally {\n setIsResearchPending(false);\n }\n };\n\n const handleItemClick = (itemId) => {\n const path = `${pathname}/announcements/${itemId}`;\n navigate({ pathname: path, prevPath: pathname });\n };\n\n useEffect(() => {\n if (!allIndustriesData.length || !relatedIndustries.length) {\n return;\n }\n\n if (currentIndustry) {\n setInitialFilterValues({ industries: [currentIndustry] });\n\n getArtifacts(currentIndustry);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [allIndustriesData, relatedIndustries]);\n\n return (\n <>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('Your selected entities')}</Typography>\n </Box>\n <TabsPanel active={activeTab} onChange={changeTab}>\n <div label={t('Entities')} counter={entities.total} value=\"issuers\">\n <EntitiesTable\n dataSelector={entities}\n actionCreator={searchEntitiesAction}\n constantFilter={{ withRatingOnly: true }}\n initialFilter={initialFilter}\n initialFilterModalValues={initialFilterValues}\n filterableIndustries={filterableIndustries}\n allowEmptyIndustriesFilter={false}\n />\n </div>\n <div label={t('Research')} counter={researchArtifacts.total} value=\"research\">\n <Box p={2} mt={2}>\n <Artifacts\n data={researchArtifacts.data}\n isPending={isResearchPending}\n onItemClick={handleItemClick}\n currentPage={page}\n />\n </Box>\n </div>\n </TabsPanel>\n </>\n );\n};\n\nexport { RatingCoverageIndustry };\n","import React from 'react';\nimport { useSelector } from 'react-redux';\nimport { Navigate } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\n\nimport { TabsPanel } from 'ui';\nimport { EntitiesTable } from 'modules/common';\nimport { searchEntitiesAction } from 'store/searchResult/searchResultActions';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { getSortedFilterableIndustries } from 'selectors/common';\n\nexport const RatingCoverageRelated = () => {\n const { t } = useTranslation();\n const entities = useSelector(\n ({ searchResult }) => searchResult.entities.byRatingType[ratingTypes.CREDIT_RATING],\n );\n const relatedEntities = useSelector(({ shared }) => shared.relatedEntities);\n const filterableIndustries = useSelector(getSortedFilterableIndustries);\n const relatedEntitiesIds = relatedEntities.data.map(({ id }) => id);\n\n const isEmpty = !relatedEntities.isPending && relatedEntities.data.length === 0;\n\n if (isEmpty) return <Navigate to={{ pathname: '/not-found' }} />;\n\n return (\n <>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('Your selected entities')}</Typography>\n </Box>\n <TabsPanel active=\"entities\">\n <div label={t('Entities')} counter={entities.total} value=\"entities\">\n {!relatedEntities.isPending && (\n <EntitiesTable\n dataSelector={entities}\n actionCreator={searchEntitiesAction}\n constantFilter={{\n issuerIds: relatedEntitiesIds,\n }}\n filterableIndustries={filterableIndustries}\n />\n )}\n </div>\n </TabsPanel>\n </>\n );\n};\n","import { searchCategories } from 'shared/constants/searchCategories';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\n\nexport const buildCountryFilter = (regions, countries) => {\n const countryFilters = countries.reduce((all, item) => {\n const countryItem = regions.find(({ value }) => value === item);\n if (!countryItem) {\n return all;\n }\n\n return [\n ...all,\n {\n name: countryItem.name,\n iso: countryItem.iso,\n continent: countryItem.continent,\n continentCode: countryItem.continentCode,\n },\n ];\n }, []);\n return countryFilters;\n};\n\nexport const getInitialSearchResultsModalFilters = (\n ratingType = ratingTypes.CREDIT_RATING,\n queryParams,\n regions,\n industries,\n) => {\n const { country, industry, ...restFilters } = queryParams;\n\n return Object.keys({ country, industry, ...restFilters }).reduce((filters, category) => {\n if (!category || !queryParams[category]) return filters;\n\n const values = queryParams[category];\n switch (category) {\n case searchCategories.COUNTRY: {\n const countryFilters = buildCountryFilter(regions, values);\n return countryFilters\n ? {\n ...filters,\n ...(ratingType !== ratingTypes.CREDIT_REVIEW ? { countries: countryFilters } : {}),\n ...(ratingType === ratingTypes.CREDIT_REVIEW ? { country: countryFilters[0] } : {}),\n }\n : filters;\n }\n case searchCategories.INDUSTRY: {\n const industryFilters = values.reduce((all, item) => {\n const industryItem = industries.find(({ value }) => value === item);\n\n if (!industryItem) {\n return all;\n }\n\n return [\n ...all,\n {\n code: industryItem.code,\n industryCode: industryItem.industryCode,\n name: industryItem.name,\n industryName: industryItem.industryName,\n },\n ];\n }, []);\n\n return industryFilters.length\n ? {\n ...filters,\n industries: industryFilters,\n }\n : filters;\n }\n default:\n return { ...filters, [category]: values };\n }\n }, {});\n};\n\nexport const getInitialSearchResultsFilters = (\n ratingType,\n { industries, countries, country, ...restFilters },\n) => ({\n ...(industries\n ? {\n industrySectors: industries.map(({ code, industryCode }) => ({\n sector: code,\n industry: industryCode,\n })),\n }\n : {}),\n ...(ratingType !== ratingTypes.CREDIT_REVIEW && countries\n ? { countries: countries.map(({ iso }) => iso) }\n : {}),\n ...(ratingType === ratingTypes.CREDIT_REVIEW && country ? { country: country.iso } : {}),\n ...(ratingType === ratingTypes.CREDIT_REVIEW ? restFilters : {}),\n});\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport qs from 'qs';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { useNavigate } from 'react-router-dom';\nimport { useTranslation } from 'react-i18next';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport useDeepCompareEffect from 'use-deep-compare-effect';\n\nimport { Artifacts, TabsPanel, Loader } from 'ui';\nimport { EntitiesTable, InstrumentsTable } from 'modules/common';\nimport { CreditReviewEntities } from 'modules/creditReview';\nimport {\n searchEntitiesAction,\n searchInstrumentsAction,\n searchRatingNewsAction,\n searchResearchAction,\n} from 'store/searchResult/searchResultActions';\nimport { lastVisitedRatingTypeAction } from 'store/shared/lastVisited/lastVisitedActions';\nimport { useArtifacts } from 'shared/hooks';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { titleByRatingType } from 'shared/constants/titleByRatingType';\nimport { getSearchableRegions, getSearchbleIndustries } from 'selectors/common';\nimport {\n getInitialSearchResultsFilters,\n getInitialSearchResultsModalFilters,\n} from 'shared/functions/searchFilters/searchFilters';\nimport { useQuery } from 'shared/hooks/useQuery/useQuery';\nimport {\n searchEntitiesFiltersParser,\n searchNewsQueryParser,\n searchNewsFiltersParser,\n} from 'shared/parsers';\nimport { useCofaceContract } from 'shared/hooks/useCofaceContract/useCofaceContract';\nimport { useFeatures } from 'shared/hooks/useFeatures/useFeatures';\nimport { isIsin } from 'utils';\n\nconst Research = ({ query, filters }) => {\n const { research, isRatingRequestPending } = useSelector(({ searchResult }) => searchResult);\n\n const {\n limit,\n handleChangeArtifactsPage,\n handleArtifactClick,\n currentPage,\n handleChangeRowsPerPage,\n } = useArtifacts({\n filters,\n query,\n getArtifactsAction: searchResearchAction,\n customLimit: 10,\n });\n\n return (\n <Artifacts\n data={research.data}\n isPending={research.pending || isRatingRequestPending}\n total={research.total}\n limit={limit}\n onItemClick={handleArtifactClick}\n onChangePage={handleChangeArtifactsPage}\n currentPage={currentPage}\n onChangeRowsPerPage={handleChangeRowsPerPage}\n />\n );\n};\n\nResearch.defaultProps = {\n query: '',\n filters: {},\n};\n\nResearch.propTypes = {\n query: PropTypes.string,\n filters: PropTypes.object,\n};\n\nconst RatingNews = ({ query, filters }) => {\n const { ratingNews, isRatingRequestPending } = useSelector(({ searchResult }) => searchResult);\n\n const {\n limit,\n handleChangeArtifactsPage,\n handleArtifactClick,\n currentPage,\n handleChangeRowsPerPage,\n } = useArtifacts({\n filters,\n query,\n getArtifactsAction: searchRatingNewsAction,\n customLimit: 10,\n });\n\n return (\n <Artifacts\n data={ratingNews.data}\n isPending={ratingNews.pending || isRatingRequestPending}\n total={ratingNews.total}\n limit={limit}\n onItemClick={handleArtifactClick}\n onChangePage={handleChangeArtifactsPage}\n currentPage={currentPage}\n onChangeRowsPerPage={handleChangeRowsPerPage}\n />\n );\n};\n\nRatingNews.defaultProps = {\n query: '',\n filters: {},\n};\n\nRatingNews.propTypes = {\n query: PropTypes.string,\n filters: PropTypes.object,\n};\n\nexport const SearchResult = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const queryParams = useQuery();\n const dispatch = useDispatch();\n const lastVisitedRatingType = useSelector(({ shared }) => shared.lastVisited.ratingType);\n const { isSearchStarted, entities, instruments, ratingNews, research } = useSelector(\n ({ searchResult }) => searchResult,\n );\n const { userId } = useSelector(({ auth }) => auth.data);\n const features = useFeatures();\n const { cofaceAccessType, isPending: cofaceContractInfoPending } = useCofaceContract();\n\n const { data: regions } = useSelector(getSearchableRegions);\n const industries = useSelector(getSearchbleIndustries);\n\n const { query, ratingType = lastVisitedRatingType, module, ...filtersParams } = queryParams;\n\n const [initialFilters, setInitialFilters] = useState({});\n const [initialModalFilters, setInitialModalFilters] = useState({});\n\n const [loading, setLoading] = useState(true);\n const [companyModuleChangePending, setCompanyModuleChangePending] = useState(false);\n\n const isEsg = !module || module === 'esg';\n const isCredit = !module || module === 'credit';\n\n useEffect(() => {\n if (ratingType !== lastVisitedRatingType) {\n dispatch(lastVisitedRatingTypeAction({ ratingType }));\n }\n }, [ratingType]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const onCompanyModuleChange = (_, value) => {\n if (ratingType !== value) {\n setCompanyModuleChangePending(true);\n navigate({\n pathname: `/search-result`,\n search: qs.stringify(\n { ...queryParams, ratingType: value, query, module },\n { addQueryPrefix: true },\n ),\n });\n }\n };\n\n useDeepCompareEffect(() => {\n if (!regions.length || !industries.length) return;\n\n const modalFilters = getInitialSearchResultsModalFilters(\n ratingType,\n filtersParams,\n regions,\n industries,\n );\n const filters = getInitialSearchResultsFilters(ratingType, modalFilters);\n\n setInitialFilters(filters);\n setInitialModalFilters(modalFilters);\n\n setCompanyModuleChangePending(false);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [regions, industries, queryParams]);\n\n useEffect(() => {\n setLoading(Boolean(!regions.length || !industries.length));\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [regions, industries]);\n\n if (loading || companyModuleChangePending || cofaceContractInfoPending) {\n return (\n <Box padding={5} textAlign=\"center\">\n <Loader />\n </Box>\n );\n }\n\n const getCreditRating = () => (\n <TabsPanel active={isIsin(query) ? 'instruments' : 'entities'} lazy={false}>\n <div\n label={t('Entities')}\n value=\"entities\"\n counter={entities.byRatingType[ratingTypes.CREDIT_RATING].total}\n >\n <EntitiesTable\n dataSelector={entities.byRatingType[ratingTypes.CREDIT_RATING]}\n actionCreator={searchEntitiesAction}\n actionCreatorParams={{ query, ratingType: ratingTypes.CREDIT_RATING }}\n searchQuery={queryParams}\n initialFilter={initialFilters}\n initialFilterModalValues={initialModalFilters}\n renderDatatable={!isSearchStarted}\n />\n </div>\n <div label={t('Instruments')} value=\"instruments\" counter={instruments.total}>\n <InstrumentsTable\n dataSelector={instruments}\n actionCreator={searchInstrumentsAction}\n actionCreatorParams={{ query }}\n searchQuery={query}\n initialFilter={initialFilters}\n initialFilterModalValues={initialModalFilters}\n renderDatatable={!isSearchStarted}\n />\n </div>\n <div label={t('Research')} value=\"research\" counter={research.total}>\n <Box p={2}>\n <Research\n query={searchNewsQueryParser(query, initialFilters, regions)}\n filters={searchNewsFiltersParser(initialFilters)}\n />\n </Box>\n </div>\n <div label={t('Rating News')} value=\"rating-news\" counter={ratingNews.total}>\n <Box p={2}>\n <RatingNews\n query={searchNewsQueryParser(query, initialFilters, regions)}\n filters={searchNewsFiltersParser(initialFilters)}\n />\n </Box>\n </div>\n </TabsPanel>\n );\n\n const getCreditReview = () => (\n <TabsPanel active=\"entities\" lazy={false}>\n <div\n label={t('ENTITIES')}\n value=\"entities\"\n counter={entities.byRatingType[ratingTypes.CREDIT_REVIEW].total}\n >\n <CreditReviewEntities\n dataSelector={entities.byRatingType[ratingTypes.CREDIT_REVIEW]}\n actionCreator={searchEntitiesAction}\n actionCreatorParams={{\n userId,\n query,\n ratingType: ratingTypes.CREDIT_REVIEW,\n }}\n searchQuery={queryParams}\n initialFilter={initialFilters}\n initialFilterModalValues={initialModalFilters}\n cofaceAccessType={cofaceAccessType}\n />\n </div>\n </TabsPanel>\n );\n\n const getEsg = () => (\n <TabsPanel active=\"entities\" lazy={false}>\n <div\n label={t('Entities')}\n value=\"entities\"\n counter={entities.byRatingType[ratingTypes.ESG_IMPACT].total}\n >\n <EntitiesTable\n dataSelector={entities.byRatingType[ratingTypes.ESG_IMPACT]}\n actionCreator={searchEntitiesAction}\n actionCreatorParams={{ query, ratingType: ratingTypes.ESG_IMPACT }}\n searchQuery={queryParams}\n ratingType={ratingTypes.ESG_IMPACT}\n initialFilter={searchEntitiesFiltersParser(initialFilters, industries)}\n initialFilterModalValues={initialModalFilters}\n />\n </div>\n </TabsPanel>\n );\n\n const getSentiment = () => (\n <TabsPanel active=\"entities\" lazy={false}>\n <div\n label={t('Entities')}\n value=\"entities\"\n counter={entities.byRatingType[ratingTypes.SENTIMENT].total}\n >\n <EntitiesTable\n dataSelector={entities.byRatingType[ratingTypes.SENTIMENT]}\n actionCreator={searchEntitiesAction}\n actionCreatorParams={{ query, ratingType: ratingTypes.SENTIMENT }}\n searchQuery={queryParams}\n ratingType={ratingTypes.SENTIMENT}\n initialFilter={searchEntitiesFiltersParser(initialFilters, industries)}\n initialFilterModalValues={initialModalFilters}\n />\n </div>\n </TabsPanel>\n );\n\n const getCst = () => (\n <TabsPanel active=\"entities\" lazy={false}>\n <div\n label={t('Entities')}\n value=\"entities\"\n counter={entities.byRatingType[ratingTypes.CLIMATE_STRESS_TEST].total}\n >\n <EntitiesTable\n dataSelector={entities.byRatingType[ratingTypes.CLIMATE_STRESS_TEST]}\n actionCreator={searchEntitiesAction}\n actionCreatorParams={{ query, ratingType: ratingTypes.CLIMATE_STRESS_TEST }}\n searchQuery={queryParams}\n ratingType={ratingTypes.CLIMATE_STRESS_TEST}\n initialFilter={initialFilters}\n initialFilterModalValues={initialModalFilters}\n />\n </div>\n </TabsPanel>\n );\n\n return (\n <>\n <Box mb={2} mt={2}>\n <Typography variant=\"h4\">Search results for: {query}</Typography>\n </Box>\n {module === 'credit' && getCreditRating()}\n {module !== 'credit' && (\n <TabsPanel variant=\"chip\" active={ratingType} onChange={onCompanyModuleChange}>\n {isCredit && (\n <div\n label={titleByRatingType[ratingTypes.CREDIT_RATING]}\n value={ratingTypes.CREDIT_RATING}\n >\n {ratingType === ratingTypes.CREDIT_RATING && getCreditRating()}\n </div>\n )}\n {isCredit && features.creditReview && (\n <div\n label={titleByRatingType[ratingTypes.CREDIT_REVIEW]}\n value={ratingTypes.CREDIT_REVIEW}\n >\n {ratingType === ratingTypes.CREDIT_REVIEW && getCreditReview()}\n </div>\n )}\n {isEsg && (\n <div label={titleByRatingType[ratingTypes.ESG_IMPACT]} value={ratingTypes.ESG_IMPACT}>\n {ratingType === ratingTypes.ESG_IMPACT && getEsg()}\n </div>\n )}\n {isEsg && features.esgSentiment && (\n <div label={titleByRatingType[ratingTypes.SENTIMENT]} value={ratingTypes.SENTIMENT}>\n {ratingType === ratingTypes.SENTIMENT && getSentiment()}\n </div>\n )}\n {isEsg && (\n <div\n label={titleByRatingType[ratingTypes.CLIMATE_STRESS_TEST]}\n value={ratingTypes.CLIMATE_STRESS_TEST}\n >\n {ratingType === ratingTypes.CLIMATE_STRESS_TEST && getCst()}\n </div>\n )}\n </TabsPanel>\n )}\n </>\n );\n};\n","import React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { useParams, useLocation } from 'react-router-dom';\nimport qs from 'qs';\n\nimport { Loader } from 'ui';\n\nimport { CompanyPanel } from 'ui/Company';\nimport { RoundButton, DownloadButton } from 'ui/Buttons';\nimport { usePortfolioModals, useAccess } from 'shared/hooks';\n\nimport { lastVisitedRatingTypeAction } from 'store/shared/lastVisited/lastVisitedActions';\nimport { fetchEntities, requestCreditReviewRatings } from 'services';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { getCurrentEnvironmentModules, companyEntityTabs } from 'shared/constants/company';\nimport { getName } from 'country-list';\nimport { EnvironmentTypes } from 'shared/constants/environmentTypes';\nimport { moduleTypes } from 'shared/constants/moduleTypes';\nimport { CreditReview } from 'modules/creditReview';\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\nimport { ItemType } from 'shared/types/portfolios';\n\nconst EntityDetails = () => {\n const { t } = useTranslation();\n const location = useLocation();\n const { easyNumber } = useParams();\n const dispatch = useDispatch();\n const { userId, organisationId } = useSelector(({ auth }) => auth.data);\n const isTestingEnvironment = useAccess({ environment: EnvironmentTypes.TESTING });\n const currentEnvironmentModules = getCurrentEnvironmentModules(isTestingEnvironment);\n\n const [isPending, setIsPending] = useState(false);\n const [entity, setEntity] = useState(null);\n\n const [requested, setRequested] = useState(false);\n const [ratingAvailable, setRatingAvailable] = useState(false);\n const [isRequestRatingPending, setIsRequestRatingPending] = useState(false);\n\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n\n const country = entity ? entity.countryCode || entity.country : '';\n\n const modules = currentEnvironmentModules.find(\n ({ value }) => value === moduleTypes.CREDIT_REVIEW,\n );\n\n useEffect(() => {\n const fetchData = async () => {\n setIsPending(true);\n\n const { data } = await fetchEntities(\n {\n page: 1,\n limit: 1,\n query: easyNumber, // TODO: change to { filter: { easyNumber } } when backend is ready\n userId,\n },\n ratingTypes.CREDIT_REVIEW,\n );\n\n if (data && data.length) {\n const entityData = data[0];\n\n setEntity(entityData);\n setRatingAvailable(!!entityData.requested);\n }\n\n setIsPending(false);\n };\n\n fetchData();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [requested]);\n\n const [activeTabs, setActiveTabs] = useState({\n companyModule: currentEnvironmentModules.find(\n ({ value }) => value === moduleTypes.CREDIT_REVIEW,\n ),\n });\n\n useEffect(() => {\n dispatch(lastVisitedRatingTypeAction({ ratingType: activeTabs.companyModule }));\n }, [activeTabs.companyModule]); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const { companyTab, companyModule } = qs.parse(location.search, { ignoreQueryPrefix: true });\n\n if (companyEntityTabs.map(({ value }) => value).includes(companyTab)) {\n setActiveTabs((currentValues) => ({ ...currentValues, companyTab }));\n }\n\n if (currentEnvironmentModules.map(({ value }) => value).includes(companyModule)) {\n setActiveTabs((currentValues) => ({ ...currentValues, companyModule }));\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const itemsForPortfolio = {\n items: { [easyNumber]: easyNumber },\n count: 1,\n type: ItemType.EASYNUMBER,\n };\n\n const panelData = () => [\n {\n label: t('Industry'),\n value: entity.sector || '-',\n },\n {\n label: t('Country'),\n value: getName(country) || country,\n },\n {\n label: t('Instruments'),\n value: '-',\n },\n ];\n\n const handleRatingRequest = async () => {\n setIsRequestRatingPending(true);\n\n const response = await requestCreditReviewRatings({\n ids: [easyNumber],\n userId,\n organisationId,\n });\n\n if (response.success) {\n setRequested(true);\n setRatingAvailable(true);\n setIsRequestRatingPending(false);\n }\n };\n\n if (!entity) return <Loader />;\n\n return (\n <>\n <CompanyPanel\n loading={isPending}\n title={entity.name || entity.entityName}\n action={\n <>\n {entity.is_sample && (\n <DownloadButton\n url={`/sig/generate-report/${easyNumber}`}\n directDownload\n fileName={`credit review report - ${easyNumber}`}\n >\n {t('PDF')}\n </DownloadButton>\n )}\n <RoundButton label={t('Add to portfolio')} onClick={addToPortfolio.show} marginLeft />\n </>\n }\n items={entity ? panelData() : []}\n activeModule={activeTabs.companyModule}\n onChangeModule={() => {}}\n modules={[modules]}\n />\n {currentEnvironmentModules.find(({ value }) => value === moduleTypes.CREDIT_REVIEW).value ===\n activeTabs.companyModule && (\n <CreditReview\n ratingAvailable={ratingAvailable}\n entity={entity}\n easyNumber={easyNumber}\n isPending={isPending}\n isRequestRatingPending={isRequestRatingPending}\n handleRatingRequest={handleRatingRequest}\n />\n )}\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n itemsData={itemsForPortfolio}\n itemType=\"ENTITY\"\n />\n <CreateNewPortfolioModal\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemsData={itemsForPortfolio}\n itemType=\"ENTITY\"\n />\n </>\n );\n};\n\nexport { EntityDetails };\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport Grid from '@mui/material/Grid';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles(() => ({\n container: {\n 'page-break-after': 'always',\n borderTop: '1px solid #636363',\n bottom: -10,\n width: 'calc(100% - 50px)',\n paddingTop: 15,\n fontSize: 8,\n position: 'absolute',\n },\n}));\n\nconst GenerateReportsFooter = ({ todayDate, pageNum, pageTotal }) => {\n const classes = useStyles();\n\n return (\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n className={classes.container}\n >\n <div className={classes.date}>{todayDate}</div>\n <div className={classes.page}>{`Page ${pageNum}/${pageTotal} `}</div>\n </Grid>\n );\n};\n\nGenerateReportsFooter.propTypes = {\n todayDate: PropTypes.string.isRequired,\n pageNum: PropTypes.number.isRequired,\n pageTotal: PropTypes.number.isRequired,\n};\n\nexport default GenerateReportsFooter;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\nimport { getName } from 'country-list';\n\nconst useStyles = makeStyles(theme => ({\n container: {\n 'page-break-inside': 'avoid',\n boxShadow: '0 1px 2px rgba(0,0,0,.16)',\n backgroundColor: theme.palette.custom.white,\n marginLeft: -60,\n marginBottom: theme.spacing(1),\n top: 0,\n width: 'calc(100% + 120px)',\n },\n header: {\n margin: '0 30px',\n padding: '75px 30px 15px',\n width: 'auto',\n borderBottom: '2px solid rgb(233, 233, 233)',\n },\n title: {\n fontSize: 18,\n fontWeight: 'bold',\n marginBottom: 10,\n },\n companyName: {\n fontSize: 21,\n fontWeight: 'bold',\n },\n imageWrapper: {\n backgroundColor: theme.palette.custom.white,\n boxShadow: '0 1px 2px rgba(0,0,0,.16)',\n padding: '7px 5px 5px',\n display: 'flex',\n },\n textWrapper: {\n paddingRight: 8,\n marginLeft: 7,\n paddingTop: 20,\n },\n image: {\n height: 60,\n paddingRight: 8,\n borderRight: '1px solid rgb(233, 233, 233)',\n },\n tilesWrapper: {\n padding: '15px 60px',\n },\n tiles: {\n fontSize: 12,\n },\n}));\n\nconst GenerateReportsHeaderBig = ({ companyName, industry, country }) => {\n const classes = useStyles();\n\n return (\n <div className={classes.container}>\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"flex-end\"\n className={classes.header}\n >\n <div>\n <Typography color=\"primary\" variant=\"body2\" className={classes.title}>\n Scope\n <br />\n ESG Impact Review\n </Typography>\n <Typography color=\"textPrimary\" component=\"p\" className={classes.companyName}>\n {companyName}\n </Typography>\n </div>\n <div className={classes.imageWrapper}>\n <img className={classes.image} src=\"images/scope-logo.jpg\" alt=\"Scope Group Logotype\" />\n <div className={classes.textWrapper}>\n <Typography color=\"primary\" variant=\"body2\">\n Scope\n </Typography>\n <Typography color=\"textPrimary\" variant=\"body2\">\n Group\n </Typography>\n </div>\n </div>\n </Grid>\n <Grid container className={classes.tilesWrapper}>\n <Grid item xs={3}>\n <Typography color=\"primary\" variant=\"body2\" className={classes.tiles}>\n Industry\n </Typography>\n <Typography color=\"textPrimary\" component=\"p\" className={classes.tiles}>\n {industry}\n </Typography>\n </Grid>\n <Grid item xs={3}>\n <Typography color=\"primary\" variant=\"body2\" className={classes.tiles}>\n Country\n </Typography>\n <Typography color=\"textPrimary\" component=\"p\" className={classes.tiles}>\n {getName(country)}\n </Typography>\n </Grid>\n </Grid>\n </div>\n );\n};\n\nGenerateReportsHeaderBig.propTypes = {\n companyName: PropTypes.string.isRequired,\n industry: PropTypes.string.isRequired,\n country: PropTypes.string.isRequired,\n};\n\nexport default GenerateReportsHeaderBig;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { theme } from 'theme';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport Typography from '@mui/material/Typography';\n\nconst { white } = theme.palette.custom;\n\nconst useStyles = makeStyles(() => ({\n container: {\n 'page-break-inside': 'avoid',\n marginLeft: -60,\n marginBottom: 25,\n top: 0,\n width: 'calc(100% + 120px)',\n },\n header: {\n margin: '15px 30px',\n padding: '35px 30px 15px',\n width: 'auto',\n borderBottom: '2px solid rgb(233, 233, 233)',\n },\n companyName: {\n fontSize: 21,\n fontWeight: 'bold',\n },\n imageWrapper: {\n backgroundColor: white,\n boxShadow: '0 1px 2px rgba(0,0,0,.16)',\n padding: '7px 5px 5px',\n display: 'flex',\n },\n textWrapper: {\n paddingRight: 8,\n marginLeft: 7,\n paddingTop: 11,\n },\n text: {\n fontSize: 10,\n },\n image: {\n height: 40,\n paddingRight: 8,\n borderRight: '1px solid rgb(233, 233, 233)',\n },\n}));\n\nconst GenerateReportsHeaderSection = ({ companyName }) => {\n const classes = useStyles();\n\n return (\n <div className={classes.container}>\n <Grid\n container\n direction=\"row\"\n justifyContent=\"space-between\"\n alignItems=\"flex-end\"\n className={classes.header}\n >\n <Typography color=\"textPrimary\" component=\"p\" className={classes.companyName}>\n {companyName}\n </Typography>\n <div className={classes.imageWrapper}>\n <img className={classes.image} src=\"images/scope-logo.jpg\" alt=\"Scope Group Logotype\" />\n <div className={classes.textWrapper}>\n <Typography color=\"primary\" variant=\"body2\" className={classes.text}>\n Scope\n </Typography>\n <Typography color=\"textPrimary\" variant=\"body2\" className={classes.text}>\n Group\n </Typography>\n </div>\n </div>\n </Grid>\n </div>\n );\n};\n\nGenerateReportsHeaderSection.propTypes = {\n companyName: PropTypes.string.isRequired,\n};\n\nexport default GenerateReportsHeaderSection;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles(() => ({\n container: {\n width: '21cm',\n minHeight: '29.7cm',\n height: '29.7cm',\n maxHeight: '29.7cm',\n display: 'block',\n padding: '0 25px',\n margin: '0 auto 0',\n position: 'relative',\n },\n}));\n\nconst GenerateReportsPage = ({ children }) => {\n const classes = useStyles();\n\n return <div className={classes.container}>{children}</div>;\n};\n\nGenerateReportsPage.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default GenerateReportsPage;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport makeStyles from '@mui/styles/makeStyles';\n\nconst useStyles = makeStyles(() => ({\n container: {\n background: '#fff',\n margin: 0,\n },\n}));\n\nconst GenerateReportsWrapper = ({ children }) => {\n const classes = useStyles();\n\n return <div className={classes.container}>{children}</div>;\n};\n\nGenerateReportsWrapper.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nexport default GenerateReportsWrapper;\n","import React, { useEffect, useState, useRef } from 'react';\nimport { useParams } from 'react-router-dom';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport Grid from '@mui/material/Grid';\nimport { useTranslation } from 'react-i18next';\n\nimport 'shared/styles/hide-hubspot.css';\n\nimport {\n GenerateReportsWrapper,\n GenerateReportsPage,\n GenerateReportsFooter,\n GenerateReportsHeaderBig,\n GenerateReportsHeaderSection,\n} from 'ui/GenerateReports';\n\nimport {\n distributionService,\n impactScoreService,\n peergroupComparisonService,\n regionImpactService,\n industryImpactService,\n scoreOverviewService,\n esgAvailable as impactAvailable,\n externalCostsComparisonService,\n impactOverviewService,\n rankingService,\n fetchESGScoreSummaryTab,\n} from 'services/esg';\nimport { fetchEntityBasic } from 'services';\nimport format from 'date-fns/format';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\nimport { disclaimerDocument } from 'shared/constants/disclaimer';\nimport { useFeatures } from 'shared/hooks';\nimport {\n regionImpactToMapParser,\n regionImpactToTableParser,\n industryImpactToTableParser,\n scoreOverviewParser,\n} from 'shared/parsers/esg';\n\nimport { longDateFormat } from 'shared/constants/dateFormat';\nimport { peergroupComparisonParser } from 'shared/parsers';\nimport {\n ESGDistribution,\n ESGImpactScore,\n ESGImpactMap,\n ESGImpactTable,\n ESGScoreComparison,\n ESGImpactDistribution,\n ESGScoreOverview,\n ESGImpactOverview,\n ESGRanking,\n ESGLendingData,\n ESGLendingImpact,\n} from 'modules/ESG';\nimport {\n getPieByRegion,\n getPieByIndustry,\n getImpactByCountry,\n getImpactByIndustry,\n} from '../../modules/ESG/services/esgLendingService';\n\nfunction useQueryParams() {\n const params = new URLSearchParams(window.location.search);\n return { year: params.get('year'), latestUpdate: params.get('latestUpdate') };\n}\n\nexport const GenerateReportESG = () => {\n const { entityId } = useParams();\n const { year, latestUpdate } = useQueryParams();\n\n const [pages, setPages] = useState(6);\n const { esgLendingData } = useFeatures();\n\n const [impactScore, setImpactScore] = useState({ isPending: true, data: null });\n const [esgAvailable, setEsgAvailable] = useState(false);\n const [scoreComparison, setScoreComparison] = useState({ isPending: true, data: [] });\n const [externalCostsComparison, setExternalCostsComparison] = useState({\n isPending: true,\n data: null,\n });\n const [scoreOverview, setScoreOverview] = useState({ isPending: true, data: [] });\n const [regionImpact, setRegionImpact] = useState({ isPending: true, data: [] });\n const [industryImpact, setIndustryImpact] = useState({ isPending: true, data: [] });\n const [distribution, setDistribution] = useState({ isPending: true, data: null });\n const [impactOverview, setImpactOverview] = useState({ isPending: true, data: null });\n const [ranking, setRanking] = useState({ isPending: true, data: null });\n const [entityData, setEntityData] = useState({\n isPending: true,\n data: null,\n });\n\n const [stats, setStats] = useState({ isPending: true, regions: [], industries: [] });\n const [industryData, setIndustryData] = useState({ isPending: true, data: [] });\n const [countryData, setCountryData] = useState({ isPending: true, data: [] });\n const [showBankLendingSection, setShowBankLendingSection] = useState(false);\n\n const { t } = useTranslation();\n const didUnmount = useRef(false);\n const actualDate = format(new Date(), longDateFormat);\n\n const getEsgAvailable = async () => {\n try {\n const data = await impactAvailable(entityId);\n if (!didUnmount.current) {\n const available = data ? data.data_exists : false;\n setEsgAvailable(available);\n return available;\n }\n } catch (error) {\n if (!didUnmount.current) {\n setEsgAvailable(false);\n }\n }\n return false;\n };\n\n const getEntityData = async () => {\n setEntityData((data) => ({ ...data, isPending: true }));\n\n try {\n const response = await fetchEntityBasic({\n id: entityId,\n ratingType: ratingTypes.ESG_IMPACT,\n params: { year, latestUpdate },\n });\n\n if (!didUnmount.current) {\n setEntityData(() => ({\n isPending: false,\n data: response.success ? response.data : null,\n }));\n }\n } catch (error) {\n if (!didUnmount.current) {\n setEntityData(() => ({ isPending: false, data: null }));\n }\n }\n };\n\n const getEntityDataESGScore = async () => {\n const response = await fetchESGScoreSummaryTab(entityId, { year, latestUpdate });\n checkIfBank(response.companyType);\n };\n\n const getImpactScore = async () => {\n setImpactScore((data) => ({ ...data, isPending: true }));\n try {\n const response = await impactScoreService(entityId, { year, latestUpdate });\n if (!didUnmount.current) {\n setImpactScore(() => ({\n isPending: false,\n data: response.success ? response.total_score : null,\n }));\n }\n } catch (error) {\n if (!didUnmount.current) {\n setImpactScore(() => ({ isPending: false, data: null }));\n }\n }\n };\n\n const getScoreOverview = async () => {\n setScoreOverview((data) => ({ ...data, isPending: true }));\n try {\n const data = await scoreOverviewService(entityId, { year, latestUpdate });\n if (!didUnmount.current) {\n setScoreOverview(() => ({\n isPending: false,\n data: data.error ? [] : scoreOverviewParser(data),\n }));\n }\n } catch (error) {\n if (!didUnmount.current) {\n setScoreOverview(() => ({ isPending: false, data: [] }));\n }\n }\n };\n\n const getScoreComparison = async () => {\n setScoreComparison((data) => ({ ...data, isPending: true }));\n try {\n const data = await peergroupComparisonService(entityId, { year, latestUpdate });\n if (!didUnmount.current) {\n setScoreComparison(() => ({\n isPending: false,\n data: data.error ? [] : peergroupComparisonParser(data),\n }));\n }\n } catch (error) {\n if (!didUnmount.current) {\n setScoreComparison(() => ({ isPending: false, data: [] }));\n }\n }\n };\n\n const getRegionImpact = async () => {\n setRegionImpact({\n ...regionImpact,\n isPending: true,\n });\n\n try {\n const data = await regionImpactService(entityId, { year, latestUpdate });\n if (!didUnmount.current) {\n setRegionImpact({ isPending: false, data });\n }\n } catch (error) {\n if (!didUnmount.current) {\n setRegionImpact({ isPending: false, data: [] });\n }\n }\n };\n\n const getIndustryImpact = async () => {\n setIndustryImpact((data) => ({ ...data, isPending: true }));\n try {\n const data = await industryImpactService(entityId, { year, latestUpdate });\n if (!didUnmount.current) {\n setIndustryImpact(() => ({\n isPending: false,\n data: data.error ? [] : industryImpactToTableParser(data),\n }));\n }\n } catch (error) {\n if (!didUnmount.current) {\n setIndustryImpact(() => ({ isPending: false, data: [] }));\n }\n }\n };\n\n const getDistribution = async () => {\n setDistribution((data) => ({ ...data, isPending: true }));\n try {\n const data = await distributionService(entityId, { year, latestUpdate });\n if (!didUnmount.current) {\n setDistribution(() => ({\n isPending: false,\n data: data.error ? null : data,\n }));\n }\n } catch (error) {\n if (!didUnmount.current) {\n setDistribution(() => ({ isPending: false, data: null }));\n }\n }\n };\n\n const getImpactOverview = async () => {\n setImpactOverview((data) => ({ ...data, isPending: true }));\n try {\n const data = await impactOverviewService(entityId, { year, latestUpdate });\n\n if (!didUnmount.current) {\n setImpactOverview(() => ({\n isPending: false,\n data: data || null,\n }));\n }\n } catch (error) {\n if (!didUnmount.current) {\n setImpactOverview(() => ({ isPending: false, data: null }));\n }\n }\n };\n\n const getRanking = async () => {\n setRanking((data) => ({ ...data, isPending: true }));\n try {\n const data = await rankingService(entityId, { year, latestUpdate });\n if (!didUnmount.current) {\n setRanking(() => ({\n isPending: false,\n data: data || null,\n }));\n }\n } catch (error) {\n if (!didUnmount.current) {\n setRanking(() => ({ isPending: false, data: null }));\n }\n }\n };\n\n const getExternalCostsComparison = async () => {\n setExternalCostsComparison((data) => ({ ...data, isPending: true }));\n try {\n const data = await externalCostsComparisonService(entityId, { year, latestUpdate });\n if (!didUnmount.current) {\n setExternalCostsComparison(() => ({\n isPending: false,\n data: data.error ? null : data,\n }));\n }\n } catch (error) {\n if (!didUnmount.current) {\n setExternalCostsComparison(() => ({ isPending: false, data: null }));\n }\n }\n };\n\n const fetchPieChartData = async () => {\n try {\n const regions = await getPieByRegion(entityId, { year, latestUpdate });\n const industriesData = await getPieByIndustry(entityId, { year, latestUpdate });\n const data = {\n regions: regions.map((el) => ({ name: el.region, exposure: el.exposure })),\n industries: industriesData.map((el) => ({ name: el.industry, exposure: el.exposure })),\n };\n if (!didUnmount.current) {\n setStats({ isPending: false, ...data });\n }\n } catch (error) {\n if (!didUnmount.current) {\n setStats({ isPending: false, regions: null, industries: null });\n setPages(6);\n }\n }\n };\n\n const fetchImpactData = async () => {\n try {\n const countries = await getImpactByCountry(entityId, { year, latestUpdate });\n const industriesData = await getImpactByIndustry(entityId, { year, latestUpdate });\n if (!didUnmount.current) {\n setIndustryData({\n isPending: false,\n data: industriesData.map((el) => ({ ...el, name: el.industry })) || null,\n });\n setCountryData({\n isPending: false,\n data: countries.map((el) => ({ ...el, name: el.country })) || null,\n });\n }\n } catch (error) {\n if (!didUnmount.current) {\n setIndustryData({ isPending: false, data: null });\n setCountryData({ isPending: false, data: null });\n setPages(6);\n }\n }\n };\n\n useEffect(() => {\n if (getEsgAvailable()) {\n getEntityData();\n getDistribution();\n getImpactOverview();\n getImpactScore();\n getScoreOverview();\n getScoreComparison();\n getExternalCostsComparison();\n getRegionImpact();\n getIndustryImpact();\n getRanking();\n getEntityDataESGScore();\n if (esgLendingData) {\n fetchPieChartData();\n fetchImpactData();\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entityId]);\n\n useEffect(() => {\n return () => {\n didUnmount.current = true;\n };\n }, []);\n\n useEffect(() => {\n const _showBankLendingSection =\n stats?.regions?.length &&\n stats?.industries?.length &&\n industryData?.data?.length &&\n countryData?.data?.length;\n setShowBankLendingSection(_showBankLendingSection);\n setPages(6);\n }, [stats, industryData, countryData]);\n\n const ImpactTableData = regionImpact.data && regionImpactToTableParser(regionImpact.data);\n const ImpactMapData = regionImpact.data && regionImpactToMapParser(regionImpact.data);\n\n const esgUnavailable = !esgAvailable && !impactScore.isPending;\n\n return (\n <GenerateReportsWrapper>\n <GenerateReportsPage>\n {entityData && entityData.data && (\n <GenerateReportsHeaderBig\n companyName={entityData.data.name}\n industry={entityData.data.classification.name}\n country={entityData.data.countryCode}\n />\n )}\n <Box mb={1}>\n <ESGImpactScore\n score={impactScore.data}\n data={entityData.data}\n loading={!esgUnavailable && impactScore.isPending}\n />\n </Box>\n {impactOverview && impactOverview.data && (\n <Box mb={1}>\n <ESGImpactOverview data={impactOverview.data} loading={impactOverview.isPending} />\n </Box>\n )}\n {distribution && distribution.data && (\n <Box mb={1}>\n <ESGDistribution data={distribution.data} loading={distribution.isPending} />\n </Box>\n )}\n {ranking && ranking.data && (\n <Box>\n <ESGRanking\n data={ranking.data}\n loading={ranking.isPending}\n id={entityId}\n entityName={entityData.data.name}\n />\n </Box>\n )}\n <GenerateReportsFooter pageNum={1} pageTotal={pages} todayDate={actualDate} />\n </GenerateReportsPage>\n <GenerateReportsPage>\n {entityData && entityData.data && (\n <GenerateReportsHeaderSection companyName={entityData.data.name} />\n )}\n {scoreOverview && scoreOverview.data && (\n <Box mb={3}>\n <ESGScoreOverview scores={scoreOverview.data} loading={scoreOverview.isPending} />\n </Box>\n )}\n {esgAvailable && ImpactMapData && (\n <Box>\n <Paper>\n <Box p={2}>\n <Typography variant=\"h6\">{t('ESG impacts by region')}</Typography>\n </Box>\n <Box pb={2}>\n <Divider />\n </Box>\n <ESGImpactMap data={ImpactMapData} loading={regionImpact.isPending} withLegend />\n </Paper>\n </Box>\n )}\n <GenerateReportsFooter pageNum={2} pageTotal={pages} todayDate={actualDate} />\n </GenerateReportsPage>\n\n <GenerateReportsPage>\n {entityData && entityData.data && (\n <GenerateReportsHeaderSection companyName={entityData.data.name} />\n )}\n {esgAvailable && ImpactTableData && (\n <Box mb={3}>\n <Paper>\n <Box p={2}>\n <Typography variant=\"h6\">{t('ESG impact by region')}</Typography>\n </Box>\n <ESGImpactTable\n data={ImpactTableData}\n loading={regionImpact.isPending}\n type=\"region\"\n />\n </Paper>\n </Box>\n )}\n {esgAvailable && industryImpact && industryImpact.data && (\n <Box>\n <Paper>\n <Box p={2}>\n <Typography variant=\"h6\">{t('ESG impact by industry')}</Typography>\n </Box>\n <ESGImpactTable\n data={industryImpact.data}\n loading={industryImpact.isPending}\n type=\"industry\"\n />\n </Paper>\n </Box>\n )}\n <GenerateReportsFooter pageNum={3} pageTotal={pages} todayDate={actualDate} />\n </GenerateReportsPage>\n\n {esgLendingData && showBankLendingSection && (\n <GenerateReportsPage>\n {entityData && entityData.data && (\n <GenerateReportsHeaderSection companyName={entityData.data.name} />\n )}\n {stats && stats.regions && stats.industries && (\n <Box mb={3}>\n <ESGLendingData statistics={stats} loading={stats.isPending} />\n </Box>\n )}\n <GenerateReportsFooter pageNum={3} pageTotal={pages} todayDate={actualDate} />\n </GenerateReportsPage>\n )}\n {esgLendingData && showBankLendingSection && (\n <GenerateReportsPage>\n {entityData && entityData.data && (\n <GenerateReportsHeaderSection companyName={entityData.data.name} />\n )}\n {industryData && industryData.data && countryData && countryData.data && (\n <Box mb={3}>\n <ESGLendingImpact\n industries={industryData.data}\n countries={countryData.data}\n loading={industryData.isPending || countryData.isPending}\n />\n </Box>\n )}\n <GenerateReportsFooter pageNum={4} pageTotal={pages} todayDate={actualDate} />\n </GenerateReportsPage>\n )}\n\n <GenerateReportsPage>\n {entityData && entityData.data && (\n <GenerateReportsHeaderSection companyName={entityData.data.name} />\n )}\n {esgAvailable && scoreComparison && scoreComparison.data && (\n <Box mb={5}>\n <ESGScoreComparison\n scores={scoreComparison.data}\n loading={scoreComparison.isPending}\n id={entityId}\n />\n </Box>\n )}\n <GenerateReportsFooter pageNum={4} pageTotal={pages} todayDate={actualDate} />\n </GenerateReportsPage>\n\n <GenerateReportsPage>\n {entityData && entityData.data && (\n <GenerateReportsHeaderSection companyName={entityData.data.name} />\n )}\n {esgAvailable &&\n entityData &&\n entityData.data &&\n externalCostsComparison &&\n externalCostsComparison.data && (\n <>\n <Box mb={3}>\n <ESGImpactDistribution\n data={externalCostsComparison.data}\n loading={externalCostsComparison.isPending}\n />\n </Box>\n </>\n )}\n <GenerateReportsFooter pageNum={5} pageTotal={pages} todayDate={actualDate} />\n </GenerateReportsPage>\n\n <GenerateReportsPage>\n {entityData && entityData.data && (\n <GenerateReportsHeaderSection companyName={entityData.data.name} />\n )}\n <Box>\n <Paper>\n <Box p={2}>\n <Typography variant=\"h6\">{t('Disclaimer')}</Typography>\n <Box py={2}>\n <Divider />\n </Box>\n <Grid container>\n <Typography variant=\"body2\">{t(disclaimerDocument)}</Typography>\n </Grid>\n </Box>\n </Paper>\n </Box>\n <GenerateReportsFooter pageNum={6} pageTotal={pages} todayDate={actualDate} />\n </GenerateReportsPage>\n </GenerateReportsWrapper>\n );\n};\n","export enum rsrTabs {\n RATINGS = 'ratings',\n USERS = 'users',\n}\n\nexport const tabNames = {\n ratings: {\n path: rsrTabs.RATINGS,\n name: 'ADMIN.RATINGS.TITLE',\n },\n users: {\n path: rsrTabs.USERS,\n name: 'ADMIN.USERS.TITLE',\n },\n};\n","const emailPattern = /^(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\nexport const validateEmail = (email: string) => {\n return emailPattern.test(String(email).toLowerCase());\n};\n","import React, { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { Autocomplete, Box, DataTable, Dialog, Typography } from '@scope/scope-one-ui/core';\nimport { ColumnDefinition } from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { useToasts } from '@scope/scope-one-ui/core/Messages/context';\nimport { AddUserVariant, AddUserVariants, Rating, SubscriptionRatingType, User } from '../types';\nimport { useRSR } from '../../../../shared/hooks';\nimport { addUser, getRatings, getUsers, updateUserRatings } from '../services/rsrService';\nimport { validateEmail } from '../../../../shared/functions/validators/validateEmail';\n\nexport type AddUserRSRProps = {\n ratingType: SubscriptionRatingType;\n variant: AddUserVariant;\n user?: User;\n open: boolean;\n onClose: (added: boolean) => void;\n};\n\nexport const AddUserRSR: FC<AddUserRSRProps> = ({\n ratingType,\n open,\n onClose,\n user: propUser,\n variant,\n}) => {\n const { t } = useTranslation();\n const { error, success } = useToasts();\n const [user, setUser] = useState<User | undefined>(propUser);\n const [email, setEmail] = useState('');\n const [loading, setLoading] = useState(false);\n\n const initialColumns: ColumnDefinition[] = [\n {\n name: 'entityName',\n label: t('ADMIN.RSR.RSR_NAME'),\n sortable: true,\n customBodyRender: (v) => <div>{v.entityName}</div>,\n },\n {\n name: 'ratingType',\n label: t('ADMIN.RSR.RATING_TYPE'),\n sortable: true,\n },\n ];\n\n const {\n setTotal,\n setRows,\n sort,\n pagination,\n rows,\n isSelectedAll,\n selectAllToggle,\n selectedIds,\n selectToggle,\n clearSelectedIds,\n setSelectedIds,\n tableActions,\n } = useRSR({ initialColumns, defaultSortField: 'entityName' });\n\n useEffect(() => {\n clear();\n setUser(propUser);\n }, [propUser]);\n\n useEffect(() => {\n if (!user?.approvedRatings) return;\n\n const approved = user.approvedRatings.map((rating) => rating.entityId);\n setSelectedIds(approved);\n }, [user]);\n\n const buildRows = (data: Rating[]) =>\n data.map((entity) => {\n const { entityId, entityName, entityType, ratingType: entityRatingType, ratingId } = entity;\n return {\n id: entityId,\n data: {\n entityName: { entityId, entityName },\n entityType,\n ratingType: entityRatingType,\n ratingId,\n },\n };\n });\n\n useEffect(() => {\n setLoading(true);\n getRatings(ratingType, pagination.page, pagination.limit, {\n sort: sort.field,\n dir: sort.order,\n })\n .then((resp) => {\n setRows(buildRows(resp.data));\n setTotal(resp.total);\n })\n .finally(() => setLoading(false));\n }, [ratingType, pagination, sort]);\n\n const submitHandler = async () => {\n const ratings = rows\n .filter((row) => selectedIds.includes(row.id))\n .map((row) => ({\n entityId: row.id,\n ratingId: row.data.ratingId,\n entityType: row.data.entityType,\n }));\n // INVITE\n if (variant === AddUserVariants.INVITE && ratings.length && (user || email)) {\n addUser(ratingType, user?.email ?? email, ratings)\n .then((response) => {\n success({ title: '', content: t('ADMIN.SNACKS.USER_ADDED') });\n clear();\n onClose(true);\n })\n .catch((e) => {\n if (e.responseCode === 409) {\n error({ title: '', content: e.message });\n } else {\n error({ title: '', content: t('ADMIN.SNACKS.USER_ADD_FAILED') });\n }\n });\n }\n // PERMISSIONS\n else if (user && user.userId) {\n updateUserRatings(ratingType, user?.userId, ratings)\n .then((response) => {\n success({ title: '', content: t('ADMIN.SNACKS.USER_UPDATED') });\n clear();\n onClose(true);\n })\n .catch((e) => {\n error({ title: '', content: t('ADMIN.SNACKS.USER_UPDATE_FAILED') });\n });\n }\n };\n\n const [users, setUsers] = useState<User[]>();\n\n const options = users?.map((u) => u.email);\n\n const onSearch = (searchedValue: string | number) => {\n setEmail(searchedValue.toString());\n getUsers(ratingType, 1, 10, undefined, searchedValue.toString()).then((resp) =>\n setUsers(resp.data),\n );\n };\n\n const onSelect = (mail?: string | number) => setUser(users?.find((u) => u.email === mail));\n\n const clear = () => {\n onSelect();\n clearSelectedIds();\n setUser(undefined);\n };\n\n const isValid = (user || validateEmail(email)) && selectedIds.length > 0;\n\n const renderAutocomplete = () => (\n <Autocomplete\n label=\"Email address\"\n placeholder=\"Type email address\"\n noOptionsText=\"\"\n options={options}\n selectedValue={user?.email || ''}\n onSelect={onSelect}\n onSearch={onSearch}\n />\n );\n const renderUserBox = () => {\n const getUserName = () => {\n if (user && user.firstName && user.lastName) {\n return `${user.firstName} ${user.lastName}`;\n }\n return '-';\n };\n\n const data = [\n { label: 'Name', value: getUserName() },\n { label: 'Organization', value: user?.organisationName ?? '-' },\n { label: 'Email', value: user?.email ?? '-' },\n ];\n\n return (\n <Box display=\"flex\" justifyContent=\"space-between\" alignItems=\"center\" p={2} pr={5}>\n {data.map((col) => (\n <Box gridGap={2}>\n <Typography variant=\"body1\" color={COLORS.typography.main}>\n {col.label}\n </Typography>\n <Typography variant=\"h3\">{col.value}</Typography>\n </Box>\n ))}\n </Box>\n );\n };\n\n return (\n <Dialog\n size=\"medium\"\n onConfirm={submitHandler}\n cancelLabel=\"Close\"\n confirmLabel={variant === AddUserVariants.INVITE ? 'Invite' : 'Confirm'}\n disabled={!isValid}\n title={t(\n variant === AddUserVariants.INVITE ? 'ADMIN.USERS.ADD_USER' : 'ADMIN.USERS.EDIT_USER',\n )}\n open={open}\n onClose={() => onClose(false)}\n >\n <Box display=\"flex\" gridGap={1} flexDirection=\"column\">\n <Box py={2} px={3} backgroundColor={COLORS.background.control}>\n {variant === AddUserVariants.INVITE ? renderAutocomplete() : renderUserBox()}\n </Box>\n <Box px={3}>\n <DataTable\n maxHeight={60}\n stickyHeader\n selectable\n cols={initialColumns}\n loading={loading}\n selection={{\n isSelectedAll,\n selectAllToggle,\n selectedIds,\n selectToggle,\n }}\n tableActions={tableActions}\n rows={rows}\n />\n </Box>\n </Box>\n </Dialog>\n );\n};\n","import React, { FC, SetStateAction, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useDebouncedCallback } from 'use-debounce/esm';\nimport { useRSR } from 'shared/hooks';\nimport { LinkButton } from 'ui/Buttons';\nimport { useToasts } from '@scope/scope-one-ui/core/Messages/context';\nimport { ColumnDefinition } from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport { ActionsMenu, ChipButton, DataTable, StatusBadge } from '@scope/scope-one-ui/core';\nimport LockIcon from '@scope/scope-one-ui/assets/icons/lock.svg';\nimport { AddUserRSR } from './Modals/AddUserRSR';\nimport { SetSubscriberConfirmationModal } from './Modals/SetSubscriberConfirmationModal';\nimport { AddUserVariants, SubscriberConfirmation, SubscriptionRatingType, User } from './types';\nimport { deactivateUsers, getUsers } from './services';\nimport UserStatusIndicator from './components/UserStatusIndicator';\nimport SubscriberConfirmationIndicator from './components/SubscriberConfirmationIndicator';\nimport RefreshIcon from '../../../assets/icons/refresh-cw.svg';\nimport UnlockIcon from '../../../assets/icons/unlock.svg';\nimport { ConfirmModal } from './Modals/ConfirmModal';\n\ntype UsersListProps = {\n ratingType: SubscriptionRatingType;\n isAddUserModalOpen: boolean;\n setIsAddUserModalOpen: React.Dispatch<SetStateAction<boolean>>;\n addUserVariant: AddUserVariants;\n setAddUserVariant: React.Dispatch<SetStateAction<AddUserVariants>>;\n};\n\nexport const UsersList: FC<UsersListProps> = ({\n ratingType,\n isAddUserModalOpen,\n setIsAddUserModalOpen,\n setAddUserVariant,\n addUserVariant,\n}) => {\n const { t } = useTranslation();\n const { error, success } = useToasts();\n const toggleAddUserRSRModal = () => setIsAddUserModalOpen(!isAddUserModalOpen);\n\n const [isSubscriberConfirmationModalOpen, setSubscriberConfirmationModalOpen] = useState(false);\n const [selectedUser, setSelectedUser] = useState<User>();\n const [isConfirmModalOpen, setIsConfirmModalOpen] = useState(false);\n\n const editUserHandler = (user: User) => {\n setSelectedUser(user);\n setAddUserVariant(AddUserVariants.PERMISSIONS);\n toggleAddUserRSRModal();\n };\n\n const handleSubscriberConfirmationClose = (changed: boolean) => {\n setSubscriberConfirmationModalOpen(false);\n if (changed) {\n fetchUsers();\n }\n };\n\n const showSubscriberConfirmationModal = (user: User) => {\n setSubscriberConfirmationModalOpen(true);\n setSelectedUser(user);\n };\n\n const userAddedHandler = async (added: boolean) => {\n if (added) {\n fetchUsers();\n }\n toggleAddUserRSRModal();\n setSelectedUser(undefined);\n };\n\n const nameRender = (user: User) => (\n <LinkButton\n to=\"#\"\n label={`${user.firstName || '-'} ${user.lastName || ''}`.toUpperCase()}\n color=\"primary\"\n onClick={() => {\n editUserHandler(user);\n }}\n />\n );\n\n const organisationRenderer = (organisationName: string) => organisationName || '-';\n\n const accesibleRatingsRender = (user: User) => {\n return user.accessibleRatings?.length ? (\n <StatusBadge status=\"CHECKED\" />\n ) : (\n <StatusBadge status=\"CROSSED\" />\n );\n };\n\n const approvedRatingsRender = (user: User) => (\n <ChipButton\n onClick={() => {\n editUserHandler(user);\n }}\n >\n {user.approvedRatings?.length ?? 0}\n </ChipButton>\n );\n\n const subscriberConfirmationRender = (confirmation: SubscriberConfirmation) => {\n return confirmation ? <SubscriberConfirmationIndicator status={confirmation} /> : '-';\n };\n\n const statusRender = (userStatus) => {\n return <UserStatusIndicator status={userStatus} />;\n };\n\n const getActions = (item: User) => [\n {\n label: t('ADMIN.USERS.EDIT_USER'),\n onClick: () => editUserHandler(item),\n icon: <UnlockIcon />,\n },\n {\n label: t('ADMIN.RSR.SET_SUBSCRIBER_CONFIRMATION'),\n onClick: () => showSubscriberConfirmationModal(item),\n icon: <RefreshIcon />,\n },\n {\n label: t('ADMIN.USERS.REVOKE'),\n onClick: () => {\n setSelectedIds([item.userId]);\n setIsConfirmModalOpen(true);\n },\n icon: <LockIcon />,\n },\n ];\n\n const initialColumns: ColumnDefinition[] = [\n {\n name: 'name',\n label: t('ADMIN.RSR.NAME'),\n sortable: true,\n customBodyRender: nameRender,\n searchable: true,\n },\n {\n name: 'organisationName',\n label: t('ADMIN.RSR.ORGANISATION'),\n sortable: true,\n customBodyRender: organisationRenderer,\n },\n {\n name: 'confirmation',\n label: t('ADMIN.RSR.SUBSCRIBER_CONFIRMATION'),\n sortable: true,\n customBodyRender: subscriberConfirmationRender,\n },\n {\n name: 'email',\n label: t('ADMIN.RSR.EMAIL'),\n sortable: true,\n },\n {\n name: 'userStatus',\n label: t('ADMIN.RSR.USER_STATUS'),\n sortable: true,\n customBodyRender: statusRender,\n },\n {\n name: 'access',\n label: t('ADMIN.RSR.ACCESS'),\n customBodyRender: accesibleRatingsRender,\n },\n {\n name: 'approvedRatings',\n label: t('ADMIN.RSR.APPROVED_RATINGS'),\n customBodyRender: approvedRatingsRender,\n },\n {\n name: 'moreActions',\n label: ' ',\n customBodyRender: (user) => <ActionsMenu list={getActions(user)} />,\n },\n ];\n const buildRows = (data: User[]) =>\n data.map((user) => {\n return {\n id: user.userId,\n data: {\n name: user,\n organisationName: user.organisationName,\n confirmation: user.confirmation,\n email: user.email,\n userStatus: user.userStatus,\n access: user,\n approvedRatings: user,\n moreActions: user,\n },\n };\n });\n\n const {\n tableActions,\n selectToggle,\n selectedIds,\n searchedValue,\n sort,\n rows,\n loading,\n setLoading,\n pagination,\n setRows,\n selectAllToggle,\n isSelectedAll,\n setSelectedIds,\n setTotal,\n } = useRSR({ initialColumns, defaultSortField: 'name' });\n const fetchUsers = () => {\n setLoading(true);\n getUsers(\n ratingType,\n pagination.page || 1,\n pagination.limit,\n {\n sort: sort.field,\n dir: sort.order,\n },\n searchedValue,\n )\n .then((response) => {\n setRows(buildRows(response.data));\n setTotal(response.total);\n })\n .finally(() => setLoading(false));\n };\n\n useEffect(() => {\n fetchUsers();\n }, [pagination, sort]);\n\n const fetchDebounce = useDebouncedCallback(fetchUsers, 300);\n\n useEffect(() => {\n fetchDebounce();\n }, [searchedValue]);\n\n const revoke = () => {\n deactivateUsers(ratingType, selectedIds)\n .then(() => {\n success({ title: '', content: t('ADMIN.SNACKS.USERS_REVOKED') });\n fetchUsers();\n })\n .catch(() => error({ title: '', content: t('ADMIN.SNACKS.USERS_REVOKE_FAILED') }));\n };\n\n const headerActions = [\n {\n icon: <LockIcon />,\n label: 'REVOKE ALL RATINGS',\n onClick: () => {\n setIsConfirmModalOpen(true);\n },\n },\n ];\n\n return (\n <>\n <DataTable\n selection={{\n selectedIds,\n selectToggle,\n selectAllToggle,\n isSelectedAll,\n }}\n headerActions={headerActions}\n loading={loading}\n title=\"Users\"\n cols={initialColumns}\n rows={rows}\n selectable\n paginate\n tableActions={tableActions}\n />\n <AddUserRSR\n ratingType={ratingType}\n variant={addUserVariant}\n open={isAddUserModalOpen}\n onClose={userAddedHandler}\n user={selectedUser}\n />\n <SetSubscriberConfirmationModal\n open={isSubscriberConfirmationModalOpen}\n onClose={handleSubscriberConfirmationClose}\n user={selectedUser}\n />\n <ConfirmModal\n title=\"Revoke ratings\"\n variant=\"warning\"\n text=\"Do you want to revoke all ratings for selected users?\"\n confirmLabel=\"Revoke all ratings\"\n onClose={() => setIsConfirmModalOpen(false)}\n onConfirm={() => {\n revoke();\n setIsConfirmModalOpen(false);\n setSelectedIds([]);\n }}\n open={isConfirmModalOpen}\n />\n </>\n );\n};\n","import React, { FC, useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { useToasts } from '@scope/scope-one-ui/core/Messages/context';\nimport { Box, Dialog, Select } from '@scope/scope-one-ui/core';\nimport { Rating, ContractType, ContractTypes, SubscriptionRatingType } from '../types';\nimport { setRatingContractType } from '../services/rsrService';\n\ntype SetContractTypeProps = {\n rating?: Rating;\n open: boolean;\n onClose: (set: boolean) => void;\n ratingType: SubscriptionRatingType;\n};\n\nexport const SetContractTypeModal: FC<SetContractTypeProps> = ({\n open,\n onClose,\n rating,\n ratingType,\n}) => {\n const { t } = useTranslation();\n const { error, success } = useToasts();\n\n const [selectedContractType, setSelectedContractType] = useState<ContractType>();\n\n const contractTypes = [\n { value: ContractTypes.REQUESTED, label: t('ADMIN.RSR.INVESTOR_REQUESTED') },\n { value: ContractTypes.SOLICITED, label: t('ADMIN.RSR.ISSUER_SOLICITED') },\n ];\n\n const handleContractTypeChange = (selected: ContractType) => {\n setSelectedContractType(selected);\n };\n\n const setContractType = async () => {\n if (rating && selectedContractType) {\n try {\n const result = await setRatingContractType(\n ratingType,\n [rating.entityId],\n selectedContractType,\n );\n if (result) {\n success({ title: '', content: t('ADMIN.SNACKS.RATING_CONTRACT_TYPE_SET') });\n }\n } catch (e) {\n error({ title: '', content: t('ADMIN.SNACKS.RATING_CONTRACT_TYPE_FAILED') });\n }\n }\n onClose(true);\n };\n\n useEffect(() => {\n setSelectedContractType(undefined);\n }, [rating]);\n\n return (\n <Dialog\n open={open}\n onClose={() => onClose(false)}\n title=\"Contract Type\"\n confirmLabel=\"Submit\"\n onConfirm={setContractType}\n >\n <Box p={3}>\n <Select\n onChange={(value) => handleContractTypeChange(value as ContractType)}\n value={selectedContractType || rating?.contractType}\n options={contractTypes}\n />\n </Box>\n </Dialog>\n );\n};\n","import React, { FC, useEffect, useState } from 'react';\nimport { useParams } from 'react-router-dom';\nimport { useDebouncedCallback } from 'use-debounce';\nimport { useTranslation } from 'react-i18next';\nimport { LinkButton } from 'ui/Buttons';\nimport { useToasts } from '@scope/scope-one-ui/core/Messages/context';\nimport { ActionsMenu, ChipButton, DataTable, Link } from '@scope/scope-one-ui/core';\nimport {\n ColumnDefinition,\n RowData,\n TableActions,\n} from '@scope/scope-one-ui/core/DataTable/DataTable.d';\nimport EyeIcon from '@scope/scope-one-ui/assets/icons/eye.svg';\nimport ContractIcon from '@scope/scope-one-ui/assets/icons/file.svg';\nimport LockIcon from '@scope/scope-one-ui/assets/icons/lock.svg';\nimport { getRatings, deactivateRatings, getRating } from './services/rsrService';\nimport { Rating, SubscriptionRatingType } from './types';\nimport { SetContractTypeModal } from './Modals/SetContractTypeModal';\nimport { useRSR } from '../../../shared/hooks';\nimport { ConfirmModal } from './Modals/ConfirmModal';\n\ntype RatingsListProps = {\n ratingType: SubscriptionRatingType;\n};\n\nexport const RatingsList: FC<RatingsListProps> = ({ ratingType }) => {\n const { t } = useTranslation();\n const { error, success } = useToasts();\n const [selectedRating, setSelectedRating] = useState<Rating>();\n const [isContractModalOpen, setIsContractModalOpen] = useState(false);\n const [isConfirmModalOpen, setIsConfirmModalOpen] = useState(false);\n\n // RENDERERS\n const nameRenderer = ({ entityId, entityType, entityName }: Rating) => (\n <LinkButton\n to={`/${{ ISSUE: 'instruments', ISSUER: 'entities' }[entityType]}/${entityId}?module=credit`}\n label={entityName?.toUpperCase()}\n color=\"primary\"\n />\n );\n\n const contractTypeRenderer = (contractType: string) =>\n contractType ? t(`ADMIN.RSR.${contractType}`) : '-';\n\n const entityTypeRenderer = (entityType: string) =>\n entityType ? t(`ADMIN.RSR.ENTITY_TYPE_${entityType}`) : '-';\n\n // ACTIONS\n const getActions = (item: Rating) => [\n {\n label: t('ADMIN.RSR.VIEW_DETAILS'),\n icon: <EyeIcon />,\n onClick: () => showRatingDetails(item),\n },\n {\n label: t('ADMIN.RSR.SET_CONTRACT_TYPE'),\n icon: <ContractIcon />,\n\n onClick: () => showContractTypeModal(item),\n },\n {\n label: t('ADMIN.RSR.REVOKE_ALL_USERS'),\n onClick: () => {\n setSelectedIds([item.entityId]);\n setIsConfirmModalOpen(true);\n },\n icon: <LockIcon />,\n },\n ];\n\n // COLUMN DEFINITION\n const initialColumns: ColumnDefinition[] = [\n {\n name: 'entityName',\n label: t('ADMIN.RSR.RSR_NAME'),\n customBodyRender: nameRenderer,\n sortable: true,\n sortComparator: (a, b) => (a.name > b.name ? 1 : -1),\n searchable: true,\n getSearchValue: (v) => v.entityName,\n },\n {\n name: 'entityType',\n label: t('ADMIN.RSR.TYPE'),\n sortable: true,\n customBodyRender: entityTypeRenderer,\n },\n {\n name: 'ratingType',\n label: t('ADMIN.RSR.RATING_TYPE'),\n sortable: true,\n },\n {\n name: 'contractType',\n label: t('ADMIN.RSR.CONTRACT_TYPE'),\n customBodyRender: contractTypeRenderer,\n sortable: true,\n sortComparator: (a, b) => (a.name > b.name ? 1 : -1),\n },\n {\n name: 'count',\n label: t('ADMIN.RSR.NO_OF_REGISTERED_USERS'),\n sortable: true,\n customBodyRender: ({ numberOfUsers, ratingId, entityName, ratingType: entityRatingType }) => (\n <Link\n href={`/ca/admin-panel/${ratingType}/ratings/${ratingId}?name=${encodeURIComponent(\n entityName,\n )}${entityRatingType ? `&ratingType=${encodeURIComponent(entityRatingType)}` : ''}`}\n >\n <ChipButton>{numberOfUsers}</ChipButton>\n </Link>\n ),\n },\n {\n name: 'moreActions',\n label: ' ',\n customBodyRender: (v) => <ActionsMenu list={getActions(v)} />,\n },\n ];\n const {\n tableActions,\n selectToggle,\n selectedIds,\n searchedValue,\n sort,\n rows,\n loading,\n setLoading,\n pagination,\n setRows,\n isSelectedAll,\n selectAllToggle,\n setTotal,\n setSelectedIds,\n clearSelectedIds,\n } = useRSR({ initialColumns, defaultSortField: 'entityName' });\n\n const buildRows = (data: Rating[]) =>\n data.map((entity) => {\n const {\n ratingId,\n entityId,\n entityName,\n entityType,\n ratingType: entityRatingType,\n contractType,\n } = entity;\n\n return {\n id: ratingId,\n data: {\n entityName: { entityId, entityName, entityType },\n entityType,\n ratingType: entityRatingType,\n contractType,\n count: entity,\n moreActions: entity,\n },\n };\n });\n\n const fetchRatings = () => {\n setLoading(true);\n getRatings(\n ratingType,\n pagination.page,\n pagination.limit,\n {\n sort: sort.field,\n dir: sort.order,\n },\n searchedValue,\n )\n .then((response) => {\n setRows(buildRows(response.data));\n setTotal(response.total);\n })\n .catch((er) => {\n error({ title: '', content: 'Error when loading ratings' });\n })\n .finally(() => setLoading(false));\n };\n\n const fetchDebounce = useDebouncedCallback(fetchRatings, 300);\n\n useEffect(() => {\n fetchDebounce();\n }, [pagination, sort, searchedValue]);\n\n const deactivateAllUsers = async (ids: string[]) => {\n try {\n await deactivateRatings(ratingType, ids);\n success({ title: '', content: t('ADMIN.SNACKS.REVOKED_ALL_RATING_USERS') });\n fetchRatings();\n } catch (e) {\n error({ title: '', content: t('ADMIN.SNACKS.REVOKE_ALL_RATING_USERS_FAILED') });\n }\n };\n\n const showRatingDetails = (item: Rating) => {\n const urls = {\n ISSUE: '/ca/instruments/',\n ISSUER: '/ca/entities/',\n } as { [key: string]: string };\n const id = item?.entityId;\n const type = item?.entityType;\n\n if (id && type) {\n window.location.href = `${urls[type]}${id}?module=credit`;\n }\n };\n\n const fetchRating = async (ratingId) =>\n getRating(ratingType, ratingId).then((resp) => {\n setSelectedRating(resp);\n });\n\n const showContractTypeModal = async (item: Rating) => {\n await fetchRating(item.ratingId);\n setIsContractModalOpen(true);\n };\n\n const handleContractTypeModalClose = (isRefreshRequired?: boolean) => {\n setIsContractModalOpen(false);\n if (isRefreshRequired) {\n fetchRatings();\n }\n };\n\n const headerActions = [\n {\n icon: <LockIcon />,\n label: 'REVOKE ALL USERS',\n onClick: () => {\n setIsConfirmModalOpen(true);\n },\n },\n ];\n\n return (\n <>\n <DataTable\n selection={{\n selectedIds,\n selectToggle,\n isSelectedAll,\n selectAllToggle,\n }}\n headerActions={headerActions}\n loading={loading}\n title=\"Ratings\"\n cols={initialColumns}\n rows={rows}\n selectable\n paginate\n tableActions={tableActions}\n />\n <SetContractTypeModal\n open={isContractModalOpen}\n onClose={handleContractTypeModalClose}\n rating={selectedRating}\n ratingType={ratingType}\n />\n <ConfirmModal\n variant=\"warning\"\n title=\"Revoke all\"\n text=\"Do you really want to revoke access for all users?\"\n confirmLabel=\"Revoke all\"\n onClose={(v) => {\n setSelectedIds([]);\n setIsConfirmModalOpen(false);\n }}\n onConfirm={() => {\n if (setSelectedIds.length) {\n deactivateAllUsers(selectedIds);\n setSelectedIds([]);\n setIsConfirmModalOpen(false);\n fetchRatings();\n }\n }}\n open={isConfirmModalOpen}\n />\n </>\n );\n};\n","import React, { FC, useEffect, useState } from 'react';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { Box, Card, IconTextButton, NavMenu, Typography } from '@scope/scope-one-ui/core';\nimport { rsrTabs } from '../../modules/common/RestrictedSubscriptionRatings/const';\nimport { UsersList } from '../../modules/common/RestrictedSubscriptionRatings/UsersList';\nimport { RatingsList } from '../../modules/common/RestrictedSubscriptionRatings/RatingsList';\nimport AddUserIcon from '../../assets/icons/user-plus.svg';\nimport {\n AddUserVariant,\n AddUserVariants,\n SubscriptionRatingType,\n} from '../../modules/common/RestrictedSubscriptionRatings/types';\n\nexport const RestrictedSubscriptionRatings: FC = () => {\n const navigate = useNavigate();\n const { tabSelected, ratingType = 'rsr' } =\n useParams<{ tabSelected: rsrTabs; ratingType: SubscriptionRatingType }>();\n const [isAddUserModalOpen, setIsAddUserModalOpen] = useState(false);\n const [addUserVariant, setAddUserVariant] = useState<AddUserVariant>(AddUserVariants.INVITE);\n\n const views = [\n { label: 'Ratings', path: `/admin-panel/${ratingType}/ratings` },\n { label: 'Users', path: `/admin-panel/${ratingType}/users` },\n ];\n\n const tabs = views.map(({ label, path }) => ({ label, onClick: () => navigate(path) }));\n\n const active =\n tabs.map((tab) => tab.label).find((label) => label.toLowerCase() === tabSelected) ||\n tabs[0].label;\n\n useEffect(() => {\n if (tabSelected) return;\n\n navigate(views[0].path);\n }, [tabSelected, ratingType]);\n\n return (\n <>\n <Box my={2}>\n <Card padded>\n <Box display=\"flex\" justifyContent=\"space-between\" gridGap={1}>\n <Typography variant=\"h1\">\n {ratingType === 'rsr' ? 'Restricted' : 'Private'} Subscription Ratings\n </Typography>\n {tabSelected === rsrTabs.USERS && (\n <Box display=\"flex\" gridGap={1}>\n <IconTextButton\n icon={<AddUserIcon width={32} height={32} />}\n iconSize=\"regular\"\n onClick={() => {\n setAddUserVariant(AddUserVariants.INVITE);\n setIsAddUserModalOpen(true);\n }}\n >\n INVITE USER\n </IconTextButton>\n </Box>\n )}\n </Box>\n </Card>\n </Box>\n <NavMenu active={active} tabs={tabs} />\n <Box mt={2}>\n {tabSelected === rsrTabs.RATINGS && <RatingsList ratingType={ratingType} />}\n {tabSelected === rsrTabs.USERS && (\n <UsersList\n ratingType={ratingType}\n isAddUserModalOpen={isAddUserModalOpen}\n setIsAddUserModalOpen={setIsAddUserModalOpen}\n addUserVariant={addUserVariant}\n setAddUserVariant={setAddUserVariant}\n />\n )}\n </Box>\n </>\n );\n};\n","import React, { FC, useCallback, useEffect, useState } from 'react';\nimport { Box } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { useTranslation } from 'react-i18next';\nimport { Datatable } from 'ui';\nimport { getSearchableRegions, getSearchbleIndustries } from 'selectors/common';\nimport { useSelectedTableRows, useTable } from 'shared/hooks';\nimport { usePortfolioModals } from 'shared/hooks/usePortfolioModals/usePortfolioModals';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { fetchInstruments } from 'services';\nimport { exportCoveredBonds } from 'services/export';\nimport { ItemType, SelectedEntities } from 'shared/types/portfolios';\nimport { useSnackbar } from 'shared/hooks/useSnackbar';\nimport {\n buildCountryFilter,\n getInitialSearchResultsModalFilters,\n} from 'shared/functions/searchFilters/searchFilters';\nimport { UpdateEntitiesModal } from 'modules/common/Modals/UpdateEntitiesModal/UpdateEntitiesModal';\nimport { CreateNewPortfolioModal } from 'modules/common/Modals';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { parseDemandType } from 'shared/parsers';\nimport { useInstrumentRenderers } from 'modules/creditRating/hooks/useInstrumentRenderers';\nimport { useInstrumentsRatingRequest } from 'modules/creditRating/hooks/useInstrumentsRatingRequest';\nimport InstrumentsFiltersModal from 'modules/common/Table/InstrumentsTable/InstrumentsFiltersModal';\nimport { CoveredBondsItem } from './types';\nimport { ratingTypes } from '../../../shared/constants/ratingTypes';\n\nconst useStyles = makeStyles((theme) => ({\n root: {\n backgroundColor: theme.palette.grey[50],\n '& thead > tr': {\n whiteSpace: 'pre',\n },\n },\n}));\n\ntype CoveredBondsListParams = {\n countryCode: string;\n countryCodes: Array<string>;\n};\n\ntype ShouldRefresh = {\n value: boolean;\n reason: string | null;\n};\n\nexport const CoveredBondsList: FC<CoveredBondsListParams> = ({ countryCode, countryCodes }) => {\n const { t } = useTranslation();\n const dispatch = useDispatch();\n const classes = useStyles();\n\n const { singleSelect, multiSelect, currentSelect, selectedAll, onSelectAll, onSelectedChange } =\n useSelectedTableRows(ItemType.ISIN);\n\n const [updating, setUpdating] = useState(false);\n const { createPortfolio, addToPortfolio } = usePortfolioModals();\n const { error } = useSnackbar();\n const [total, setTotal] = useState<number>(0);\n const [coveredBonds, setCoveredBonds] = useState<Array<CoveredBondsItem>>([]);\n const [tableData, setTableData] = useState<any[]>([]);\n const [shouldRefresh, setShouldRefresh] = useState<ShouldRefresh>({\n value: false,\n reason: null,\n });\n\n const { data: regions } = useSelector(getSearchableRegions);\n const industries = useSelector(getSearchbleIndustries);\n\n const [filters, setFilters] = useState({} as { [key: string]: any });\n\n const [availableCountries, setAvailableCountries] = useState([]);\n const [initialFilters, setInitialFilters] = useState({});\n const [initialModalFilters, setInitialModalFilters] = useState({});\n\n const [instrumentsFiltersModalOpen, setInstrumentsFiltersModalOpen] = useState(false);\n const toggleInstrumentsFiltersModal = () =>\n setInstrumentsFiltersModalOpen(!instrumentsFiltersModalOpen);\n\n const onRequested = () => {\n setShouldRefresh({ value: true, reason: refreshReasons.PRODUCT_REQUESTED });\n dispatch(refreshTable);\n };\n\n const { requestLoading, requestRating } = useInstrumentsRatingRequest({ onRequested });\n const { nameRenderer, ratingRenderer, countryRenderer, entityRenderer, valueRenderer } =\n useInstrumentRenderers();\n\n const prepareTableData = (coveredBondsList: Array<CoveredBondsItem>) => {\n return coveredBondsList.map((item: CoveredBondsItem) => [\n item.isin,\n [item.id, item.name],\n [item.issuer.id, item.issuer.name],\n item.issuer.countryCode,\n item.seniorityType,\n [item.issueVolume, item.currencyCode],\n item.ratingType,\n parseDemandType(item.rating?.demandType),\n [\n item.id,\n null,\n item.rating?.rating,\n item.rating?.outlook,\n item.hasLicence,\n null,\n null,\n null,\n null,\n item.rating?.demandType,\n ],\n item.rating?.outlook,\n ]);\n };\n\n const fetchCoveredBondsList = async (\n page: number,\n limit: number,\n sort?: { sort: string; dir: string },\n ) => {\n if (!filters.coveredBond) return;\n setUpdating(true);\n const resp = await fetchInstruments({\n query: undefined,\n page: page + 1 || 1,\n limit,\n sort: { sortColumn: sort?.sort, direction: sort?.dir },\n filter: filters,\n });\n setCoveredBonds(resp.data as Array<CoveredBondsItem>);\n setTotal(resp.total);\n setUpdating(false);\n };\n\n const copyInstrument = () => {\n addToPortfolio.toggle();\n };\n\n const downloadErrorHandler = () => {\n error(t('Failed to export instruments'));\n };\n\n const exportToExcel = (items: SelectedEntities) => {\n const instrumentsIds = Object.values(items.items).map((item) => item[1][0]);\n return exportCoveredBonds({\n items: instrumentsIds,\n countries: countryCode === 'ALL' ? undefined : filters.countries,\n onError: downloadErrorHandler,\n selectedAll,\n });\n };\n\n const handleInstrumentsFiltersModalSubmit = (values: { [key: string]: any }) => {\n const {\n countries,\n industrySectors,\n ratingFrom,\n ratingTo,\n couponRangeFrom,\n couponRangeTo,\n issueVolumeFrom,\n issueVolumeTo,\n maturityDateFrom,\n maturityDateTo,\n issueVolumeCurrency,\n coveredBond,\n seniorityTypes,\n } = values;\n\n const newFilters = {\n ...(countries.length && { countries }),\n ...(industrySectors.length !== 0 && { industrySectors }),\n ...(values.ratingType !== null && { ratingType: [values.ratingType] }),\n ...(ratingFrom !== null && { ratingFrom }),\n ...(ratingTo !== null && { ratingTo }),\n ...(couponRangeFrom !== 0 && { couponRangeFrom }),\n ...(couponRangeTo !== 15 && { couponRangeTo }),\n ...(issueVolumeFrom !== 100000000 && { issueVolumeFrom }),\n ...(issueVolumeTo !== 1000000000 && { issueVolumeTo }),\n ...(maturityDateFrom !== null && { maturityDateFrom }),\n ...(maturityDateTo !== null && { maturityDateTo }),\n ...(issueVolumeCurrency !== null && { issueVolumeCurrency }),\n ...(coveredBond !== false && { coveredBond }),\n ...(seniorityTypes.length && { seniorityTypes }),\n };\n\n setFilters(newFilters);\n setShouldRefresh({ value: true, reason: refreshReasons.FILTERS_APPLIED });\n setInstrumentsFiltersModalOpen(false);\n };\n\n const initialColumns = useCallback(\n () => [\n {\n name: 'isin',\n label: t('COVERED_BONDS.ISIN'),\n options: {\n sort: true,\n },\n },\n {\n name: 'name',\n label: t('COVERED_BONDS.NAME'),\n options: {\n sort: true,\n customBodyRender: nameRenderer,\n },\n },\n {\n name: 'issuerName',\n label: t('COVERED_BONDS.ENTITY_NAME'),\n options: {\n sort: true,\n customBodyRender: entityRenderer,\n },\n },\n {\n name: 'country',\n label: t('COVERED_BONDS.COUNTRY'),\n options: {\n sort: true,\n customBodyRender: countryRenderer,\n },\n },\n {\n name: 'seniorityType',\n label: t('COVERED_BONDS.SENIORITY_TYPE'),\n options: {\n sort: true,\n },\n },\n {\n name: 'issueValue',\n label: t('COVERED_BONDS.INSTRUMENT_VALUE'),\n options: {\n sort: false,\n customBodyRender: valueRenderer,\n },\n },\n {\n name: 'ratingTypeName',\n label: t('COVERED_BONDS.TYPE'),\n options: {\n sort: false,\n },\n },\n {\n name: 'demandType',\n label: t('COVERED_BONDS.DEMAND_TYPE'),\n options: {\n sort: false,\n },\n },\n {\n name: 'notchLabel',\n label: t('COVERED_BONDS.RATING'),\n options: {\n sort: true,\n customBodyRender: ratingRenderer,\n },\n },\n {\n name: 'outlook',\n label: t('COVERED_BONDS.OUTLOOK'),\n options: {\n sort: true,\n },\n },\n ],\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [singleSelect, multiSelect, currentSelect],\n );\n\n const getActions = (items: any) => [\n {\n text: 'Request selected',\n handler: requestRating,\n disabled: !currentSelect.count,\n hidden: true,\n data: currentSelect.itemIds,\n },\n {\n text: 'Add to portfolio',\n handler: copyInstrument,\n hidden: items.count === 0,\n disabled: selectedAll,\n },\n {\n text: 'Export to Excel',\n handler: () => exportToExcel(items),\n hidden: items.count === 0,\n },\n ];\n\n const { columns, pagination, onSortChange, onTableChange, refreshTable, isFiltered } = useTable({\n initialColumns,\n initialFilters,\n } as any);\n\n useEffect(() => {\n const ratingType = ratingTypes.CREDIT_RATING;\n\n const countries = buildCountryFilter(regions, countryCodes);\n const selectedCountry = countries.find((item: { iso: string }) => item.iso === countryCode);\n setAvailableCountries(countries);\n\n const modalFilters = getInitialSearchResultsModalFilters(\n ratingType,\n { countries: selectedCountry ? [selectedCountry] : [] },\n regions,\n industries,\n ) as { [x: string]: any; industries: any; countries: any };\n\n const initial = {\n countries: countryCode === 'ALL' ? [] : [countryCode],\n coveredBond: true,\n ratingFrom: 'D',\n ratingTo: 'AAA',\n };\n\n setInitialFilters(initial);\n setInitialModalFilters(modalFilters);\n\n setFilters(initial);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [regions]);\n\n useEffect(() => {\n fetchCoveredBondsList(\n pagination.page,\n pagination.limit,\n pagination.sort && {\n sort: pagination.sort.sortColumn,\n dir: pagination.sort.direction,\n },\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [pagination, shouldRefresh, filters]);\n\n useEffect(() => {\n setTableData(prepareTableData(coveredBonds));\n }, [coveredBonds]);\n\n return (\n <Box className={classes.root}>\n <Datatable\n loading={updating || requestLoading}\n columns={columns}\n pagination={pagination}\n data={tableData}\n total={total}\n onSelectedChange={onSelectedChange}\n toolbarData={getActions(multiSelect)}\n onTableChange={onTableChange}\n onSortChange={onSortChange}\n selectedAll={selectedAll}\n onSelectAllClick={onSelectAll}\n shouldRefresh={shouldRefresh}\n isFiltered={isFiltered}\n showFilters\n onApplyFiltersClick={() => setInstrumentsFiltersModalOpen(true)}\n removeShadow\n showSelectionExtension\n />\n <InstrumentsFiltersModal\n open={instrumentsFiltersModalOpen}\n onClose={toggleInstrumentsFiltersModal}\n onSubmit={handleInstrumentsFiltersModalSubmit}\n initialFilter={initialModalFilters}\n coveredBond\n countries={availableCountries}\n lockCountry={countryCode !== 'ALL'}\n />\n <UpdateEntitiesModal\n open={addToPortfolio.isOpen}\n onClose={addToPortfolio.close}\n onClickCreateNew={createPortfolio.show}\n itemsData={currentSelect}\n variant=\"add\"\n itemType=\"INSTRUMENT\"\n />\n <CreateNewPortfolioModal\n itemsData={currentSelect}\n open={createPortfolio.isOpen}\n onClose={createPortfolio.close}\n itemType=\"INSTRUMENT\"\n actionVariant=\"add\"\n />\n </Box>\n );\n};\n","import React, { FC, useEffect, useState, useCallback } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport { TabsPanel } from 'ui';\nimport { useParams, useNavigate } from 'react-router-dom';\nimport { fetchCoveredBoundsCountries } from 'services';\nimport { CoveredBondsList } from 'modules/creditRating/CoveredBonds/CoveredBondsList';\nimport { CountryListItem } from 'modules/creditRating/CoveredBonds/types';\nimport { prepareCountriesList } from '../../modules/creditRating/CoveredBonds/functions';\n\nexport const CoveredBonds: FC = () => {\n const { t } = useTranslation();\n const navigate = useNavigate();\n const { countryId } = useParams<{ countryId: string }>();\n const [activeTab, setActiveTab] = useState<string>();\n const [countriesList, setCountriesList] = useState<Array<CountryListItem>>([]);\n const [allTotal, setAllTotal] = useState<number>(0);\n\n const fetchCountriesList = async () => {\n const countries = await fetchCoveredBoundsCountries();\n setCountriesList(prepareCountriesList(countries, 'countryName', 'ASC'));\n const total = countries.reduce((sum: number, item: CountryListItem) => sum + item.number, 0);\n setAllTotal(total);\n setActiveTab(countryId?.toUpperCase());\n };\n\n const onTabChange = useCallback(\n (_: never, value: string) => {\n if (activeTab !== value || activeTab !== countryId) {\n setActiveTab(value);\n navigate(\n {\n pathname: `/covered-bonds/${value}`,\n },\n { replace: true },\n );\n }\n },\n [activeTab, countryId],\n );\n\n useEffect(() => {\n fetchCountriesList();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return activeTab ? (\n <>\n {/* @ts-ignore */}\n <TabsPanel\n key=\"CoveredBondsTabs\"\n active={activeTab}\n hasShadow=\"true\"\n onChange={onTabChange}\n variant=\"scrollable\"\n >\n <div label={t('COVERED_BONDS.ALL')} value=\"ALL\" key=\"ALL\" counter={allTotal}>\n <CoveredBondsList\n countryCode=\"ALL\"\n countryCodes={countriesList.map((country: CountryListItem) => country.countryCode)}\n />\n </div>\n {countriesList &&\n countriesList?.map((item: CountryListItem) => (\n <div\n label={t(item.countryName)}\n value={item.countryCode.toUpperCase()}\n key={item.countryCode}\n counter={item.number}\n >\n <CoveredBondsList\n countryCode={item.countryCode}\n countryCodes={countriesList.map((country: CountryListItem) => country.countryCode)}\n />\n </div>\n ))}\n </TabsPanel>\n </>\n ) : null;\n};\n","import React, { FC } from 'react';\nimport { useSelector } from 'react-redux';\nimport Box from '@mui/material/Box';\nimport Typography from '@mui/material/Typography';\nimport { useTranslation } from 'react-i18next';\nimport { useParams } from 'react-router-dom';\nimport { Loader, TabsPanel } from '../../ui';\nimport { useRegions } from '../../shared/hooks';\nimport { ratingTypes } from '../../shared/constants/ratingTypes';\nimport { getSearchResultEntitiesByRatingType } from '../../selectors/common';\nimport { EntitiesTable } from '../../modules/common';\nimport { searchEntitiesAction } from '../../store/searchResult/searchResultActions';\n\nexport const CreditRatingCoverage: FC = () => {\n const { t } = useTranslation();\n const { countryId } = useParams();\n const entities = useSelector(getSearchResultEntitiesByRatingType(ratingTypes.CREDIT_RATING));\n const regions = useRegions();\n const initialCountry = regions.data.filter((value) => value.iso === countryId);\n if (regions.isPending) {\n return <Loader center />;\n }\n\n return (\n <>\n <Box mb={2}>\n <Typography variant=\"h5\">{t('Credit Rating Coverage')}</Typography>\n </Box>\n {/* @ts-ignore */}\n <TabsPanel active=\"entities\">\n <div label={t('Entities')} value=\"entities\" counter={entities.total}>\n <EntitiesTable\n dataSelector={entities}\n actionCreator={searchEntitiesAction}\n actionCreatorParams={{ ratingType: ratingTypes.CREDIT_RATING }}\n constantFilter={{ withRatingOnly: true }}\n ratingType={ratingTypes.CREDIT_RATING}\n initialFilter={{\n countries: [countryId],\n }}\n initialFilterModalValues={{ countries: initialCountry }}\n />\n </div>\n </TabsPanel>\n </>\n );\n};\n","export const tableRefreshReasonTypes = {\n DELETED: 'DELETED',\n CREATED: 'CREATED',\n ADDED: 'ADDED',\n UPDATED: 'UPDATED',\n MOVED: 'MOVED',\n WATCHLIST_STATE_CHANGED: 'WATCHLIST_STATE_CHANGED',\n PRODUCT_REQUESTED: 'PRODUCT_REQUESTED',\n FILTERS_APPLIED: 'FILTERS_APPLIED',\n SUBSCRIPTION_PURCHASED: 'SUBSCRIPTION_PURCHASED',\n};\n","import { moduleTypes } from '../moduleTypes';\n\nconst experimentalModules = [];\n\nexport const companyInstrumentModules = [\n { value: moduleTypes.CREDIT_RATING, label: 'Credit Rating' },\n { value: moduleTypes.RATING_NEWS, label: 'Rating News' },\n { value: moduleTypes.RESEARCH, label: 'Research' },\n { value: moduleTypes.DOCUMENTS, label: 'Documents' },\n];\n\nexport const companyEntityModules = [\n { value: moduleTypes.SUMMARY_CARD, label: 'Summary Card', spv: true },\n { value: moduleTypes.CREDIT_RATING, label: 'Credit Rating', module: 'credit' },\n { value: moduleTypes.CREDIT_REVIEW, label: 'Credit Review' },\n { value: moduleTypes.ESG_IMPACT, label: 'ESG Impact', module: 'esg' },\n { value: moduleTypes.ESG_SENTIMENT, label: 'ESG Sentiment', module: 'esg', disabled: true },\n { value: moduleTypes.CLIMATE_STRESS_TEST, label: 'Climate Stress Test', module: 'esg' },\n { value: moduleTypes.INSTRUMENTS, label: 'Instruments', spv: true, module: 'credit' },\n { value: moduleTypes.RATING_NEWS, label: 'Rating News', spv: true, module: 'credit' },\n { value: moduleTypes.RESEARCH, label: 'Research', spv: true, module: 'credit' },\n { value: moduleTypes.DOCUMENTS, label: 'Documents', spv: true, module: 'credit' },\n];\n\nexport const getCurrentEnvironmentModules = (areExperimentalModulesAvailable) => {\n const modules = companyEntityModules.filter((item) => !item.disabled);\n\n return areExperimentalModulesAvailable\n ? modules\n : modules.filter(\n ({ value }) => !experimentalModules.map((module) => module.value).includes(value),\n );\n};\n","export const companyInstrumentTabs = [\n { value: 'rating-news', label: 'Rating News' },\n { value: 'research', label: 'Research' },\n];\n\nexport const companyEntityTabs = [\n { value: 'instruments', label: 'Instruments' },\n ...companyInstrumentTabs,\n];\n","export const ratingConstants = {\n entityRating: 'Issuer Rating',\n entityRatingCurrency: 'Issuer Rating (foreign currency)',\n longTermRating: 'Long-term Rating',\n longTermRatingCurrency: 'Long-term rating (local currency)',\n entityReview: 'Entity review',\n};\n\nexport const ratingRange = {\n longTermRange: 'LONG_TERM_RANGE',\n undeterminedRange: 'UNDETERMINED_RANGE',\n shortTermRange: 'SHORT_TERM_RANGE',\n};\n\nexport const companyAvailableRating = [\n ratingConstants.entityRating,\n ratingConstants.entityRatingCurrency,\n ratingConstants.longTermRating,\n ratingConstants.longTermRatingCurrency,\n];\n","import { Action } from 'redux';\n\nexport enum EventsActionType {\n /* All events from our db */\n FETCH_EVENTS = 'FETCH_EVENTS',\n FETCH_EVENTS_SUCCESS = 'FETCH_EVENTS_SUCCESS',\n FETCH_EVENTS_ERROR = 'FETCH_EVENTS_ERROR',\n\n /* Event properties */\n FETCH_EVENT_PROPERTIES = 'FETCH_EVENT_PROPERTIES',\n FETCH_EVENT_PROPERTIES_SUCCESS = 'FETCH_EVENT_PROPERTIES_SUCCESS',\n FETCH_EVENT_PROPERTIES_ERROR = 'FETCH_EVENT_PROPERTIES_ERROR',\n\n /* Event details */\n FETCH_EVENT_DETAILS = 'FETCH_EVENT_DETAILS',\n FETCH_EVENT_DETAILS_SUCCESS = 'FETCH_EVENT_DETAILS_SUCCESS',\n FETCH_EVENT_DETAILS_ERROR = 'FETCH_EVENT_ERROR',\n\n /* Available livestorm event titles */\n FETCH_EVENT_TITLES = 'FETCH_EVENT_TITLES',\n FETCH_EVENT_TITLES_SUCCESS = 'FETCH_EVENT_TITLES_SUCCESS',\n FETCH_EVENT_TITLES_ERROR = 'FETCH_EVENT_TITLES_ERROR',\n\n /* Sessions for given event */\n FETCH_EVENT_SESSIONS = 'FETCH_EVENT_SESSIONS',\n FETCH_EVENT_SESSIONS_SUCCESS = 'FETCH_EVENT_SESSIONS_SUCCESS',\n FETCH_EVENT_SESSIONS_ERROR = 'FETCH_EVENT_SESSIONS_ERROR',\n\n /* Session details */\n FETCH_SESSION_DETAILS = 'FETCH_SESSION_DETAILS',\n FETCH_SESSION_DETAILS_SUCCESS = 'FETCH_SESSION_DETAILS_SUCCESS',\n FETCH_SESSION_DETAILS_ERROR = 'FETCH_SESSION_DETAILS_ERROR',\n\n /* Filters and sorting */\n SET_EVENTS_CATEGORY_FILTER = 'SET_EVENTS_CATEGORY_FILTER',\n SET_EVENTS_TIMELINE_FILTER = 'SET_EVENTS_TIMELINE_FILTER',\n SET_EVENTS_FAVORITES_FILTER = 'SET_EVENTS_FAVORITES_FILTER',\n SET_EVENTS_SORT_DESC = 'SET_EVENTS_SORT_DESC',\n}\n\nexport type EventsAction = Action<EventsActionType> & {\n payload: any;\n};\n\nexport type EventSession = {\n id: string;\n dateTime: Date;\n};\n\nexport type EventCategory = 'CREDIT_ANALYSIS' | 'FUNDS_ANALYSIS' | 'ESG_ANALYSIS';\n\nexport type Document = {\n id: string;\n entityId: string;\n title: string;\n};\n\nexport type Event = {\n id?: string;\n status: 'ACTIVE' | 'DRAFT';\n externalId: string;\n type: string;\n image: File | string;\n title: string;\n shortDescription: string;\n description: string;\n category: EventCategory;\n region: string;\n industry: string;\n eventDate: Date;\n duration: number;\n languages?: 'de' | 'en';\n organiser: string;\n thirdPartySource: boolean;\n segment: string;\n productLine: string;\n marketingLabel: string;\n location: {\n city?: string;\n name: string;\n };\n documentList?: File[] | Document[];\n userRegistered?: boolean;\n favourite?: boolean;\n connectionLink?: string;\n};\n\nexport type EventFilters = {\n category: EventCategory | '';\n timeline: string;\n favourites: boolean;\n};\n\nexport type Response<T = any> = {\n isPending: boolean;\n data: T;\n};\n\nexport type EventsStore = {\n events: Response<any[]>;\n properties: Response<Record<string, SelectOption[]>>;\n filters: EventFilters;\n sortDesc: boolean;\n eventsDetails: Record<string, Response<Event>>;\n eventTitles: Response<\n {\n id: string;\n attributes: {\n title: string;\n };\n }[]\n >;\n eventSessions: Record<string, Response<EventSession[]>>;\n sessionsDetails: Record<string, Response>;\n};\n\nexport type SelectOption = {\n name: string;\n id: string;\n};\n\nexport type FieldControlProps = {\n name: string;\n type?:\n | 'text'\n | 'number'\n | 'select'\n | 'date-time'\n | 'autocomplete'\n | 'rich-text'\n | 'checkbox'\n | 'image'\n | 'documents';\n label: string;\n options?: SelectOption[] | null;\n disabled?: boolean;\n error?: unknown;\n value?: unknown;\n onChange: (name: string, value: unknown) => void;\n /* Tracks control update, that is not yet a value change (eg. input text on autocomplete) */\n onUpdate?: (name: string, value: unknown) => void;\n};\n\nexport type FieldDefinition = Omit<FieldControlProps, 'onChange' | 'onUpdate' | 'disabled'> & {\n width?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n};\n\nexport type GroupDefinition = {\n name: string;\n width?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n type: 'group';\n controls: FieldDefinition[];\n};\n\nexport type SchemaElement = FieldDefinition | GroupDefinition;\n","const toPercentage = value => value * 100;\n\nexport const peergroupComparisonParser = data =>\n data.map(\n ({\n variable,\n value,\n peergroupScoreWorst,\n peergroupScoreAvg,\n peergroupScoreBest,\n peergroupImpactAvg,\n peergroupImpactBest,\n peergroupImpactWorst,\n companyImpact,\n supplyChainImpact,\n }) => ({\n title: variable,\n score: parseFloat(value?.toFixed(1)),\n worstScore: parseFloat(peergroupScoreWorst.toFixed(1)),\n averageScore: parseFloat(peergroupScoreAvg.toFixed(1)),\n bestScore: parseFloat(peergroupScoreBest.toFixed(1)),\n companyImpact: toPercentage(companyImpact).toFixed(1),\n supplyChainImpact: toPercentage(supplyChainImpact).toFixed(1),\n averageImpact: toPercentage(peergroupImpactAvg),\n bestImpact: toPercentage(peergroupImpactBest),\n worstImpact: toPercentage(peergroupImpactWorst),\n }),\n );\n","import { ratingTypes } from 'shared/constants/ratingTypes';\n\nexport const SEARCH_START = 'SEARCH_START';\n\nexport const SEARCH_ENTITIES = 'SEARCH_ENTITIES';\nexport const SEARCH_ENTITIES_SUCCESS = `${SEARCH_ENTITIES}_SUCCESS`;\nexport const SEARCH_ENTITIES_ERROR = `${SEARCH_ENTITIES}_ERROR`;\nexport const SEARCH_ENTITIES_SWITCH_SCENARIO = `${SEARCH_ENTITIES}_SWITCH_SCENARIO`;\n\nexport const SEARCH_INSTRUMENTS = 'SEARCH_INSTRUMENTS';\nexport const SEARCH_INSTRUMENTS_SUCCESS = `${SEARCH_INSTRUMENTS}_SUCCESS`;\nexport const SEARCH_INSTRUMENTS_ERROR = `${SEARCH_INSTRUMENTS}_ERROR`;\n\nexport const SEARCH_RATING_NEWS = 'SEARCH_RATING_NEWS';\nexport const SEARCH_RATING_NEWS_SUCCESS = `${SEARCH_RATING_NEWS}_SUCCESS`;\nexport const SEARCH_RATING_NEWS_ERROR = `${SEARCH_RATING_NEWS}_ERROR`;\n\nexport const SEARCH_RESEARCH = 'SEARCH_RESEARCH';\nexport const SEARCH_RESEARCH_SUCCESS = `${SEARCH_RESEARCH}_SUCCESS`;\nexport const SEARCH_RESEARCH_ERROR = `${SEARCH_RESEARCH}_ERROR`;\n\nexport const SET_SEARCH_FILTERS = 'SET_SEARCH_FILTERS';\n\nexport const searchStartAction = {\n type: SEARCH_START,\n};\n\nexport const switchScenarioAction = ({ scenario }) => ({\n type: SEARCH_ENTITIES_SWITCH_SCENARIO,\n payload: {\n scenario,\n },\n});\n\nexport const searchEntitiesAction = ({\n query,\n page,\n limit,\n sort,\n filter,\n ratingType = ratingTypes.CREDIT_RATING,\n userId,\n}) => ({\n type: SEARCH_ENTITIES,\n payload: {\n query,\n page,\n limit,\n sort,\n filter,\n ratingType,\n userId,\n },\n});\n\nexport const searchInstrumentsAction = ({ query, page, limit, sort, filter }) => ({\n type: SEARCH_INSTRUMENTS,\n payload: {\n query,\n page,\n limit,\n sort,\n filter,\n },\n});\n\nexport const searchRatingNewsAction = ({ query, filters, page, limit }) => ({\n type: SEARCH_RATING_NEWS,\n payload: {\n query,\n filters,\n type: 'RATING_NEWS',\n page,\n limit,\n },\n});\n\nexport const searchResearchAction = ({ query, filters, page, limit }) => ({\n type: SEARCH_RESEARCH,\n payload: {\n query,\n filters,\n type: 'RESEARCH',\n page,\n limit,\n },\n});\n\nexport const setSearchFiltersAction = (payload) => ({\n type: SET_SEARCH_FILTERS,\n payload,\n});\n","import { orderTypes } from 'shared/constants/orderTypes';\n\nexport const GET_INSTRUMENT = 'GET_INSTRUMENT';\nexport const GET_INSTRUMENT_SUCCESS = 'GET_INSTRUMENT_SUCCESS';\nexport const GET_INSTRUMENT_ERROR = 'GET_INSTRUMENT_ERROR';\n\nexport const GET_INSTRUMENT_DOCUMENTS = 'GET_INSTRUMENT_DOCUMENTS';\nexport const GET_INSTRUMENT_DOCUMENTS_SUCCESS = 'GET_INSTRUMENT_DOCUMENTS_SUCCESS';\nexport const GET_INSTRUMENT_DOCUMENTS_ERROR = 'GET_INSTRUMENT_DOCUMENTS_ERROR';\n\nexport const GET_INSTRUMENT_PRODUCTS = 'GET_INSTRUMENT_PRODUCTS';\nexport const GET_INSTRUMENT_PRODUCTS_SUCCESS = 'GET_INSTRUMENT_PRODUCTS_SUCCESS';\nexport const GET_INSTRUMENT_PRODUCTS_ERROR = 'GET_INSTRUMENT_PRODUCTS_ERROR';\n\nexport const GET_INSTRUMENT_RATING_NEWS = 'GET_INSTRUMENT_RATING_NEWS';\nexport const GET_INSTRUMENT_RATING_NEWS_SUCCESS = 'GET_INSTRUMENT_RATING_NEWS_SUCCESS';\nexport const GET_INSTRUMENT_RATING_NEWS_ERROR = 'GET_INSTRUMENT_RATING_NEWS_ERROR';\n\nexport const GET_INSTRUMENT_RESEARCH = 'GET_INSTRUMENT_RESEARCH';\nexport const GET_INSTRUMENT_RESEARCH_SUCCESS = 'GET_INSTRUMENT_RESEARCH_SUCCESS';\nexport const GET_INSTRUMENT_RESEARCH_ERROR = 'GET_INSTRUMENT_RESEARCH_ERROR';\n\nexport const REQUEST_INSTRUMENT_RATING = 'REQUEST_INSTRUMENT_RATING';\nexport const REQUEST_INSTRUMENT_RATING_SUCCESS = 'REQUEST_INSTRUMENT_RATING_SUCCESS';\nexport const REQUEST_INSTRUMENT_RATING_ERROR = 'REQUEST_INSTRUMENT_RATING_ERROR';\n\nexport const REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA = 'REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA';\nexport const REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_SUCCESS =\n 'REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_SUCCESS';\nexport const REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_ERROR =\n 'REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA_ERROR';\n\nexport const getInstrumentAction = ({ id }) => ({\n type: GET_INSTRUMENT,\n payload: {\n id,\n },\n});\n\nexport const getInstrumentDocumentsAction = ({ instrumentId }) => ({\n type: GET_INSTRUMENT_DOCUMENTS,\n payload: {\n instrumentId,\n },\n});\n\nexport const getInstrumentProductsAction = ({ instrumentId }) => ({\n type: GET_INSTRUMENT_PRODUCTS,\n payload: {\n instrumentId,\n },\n});\n\nexport const getInstrumentRatingNewsAction = ({ entityId, query, page, limit }) => ({\n type: GET_INSTRUMENT_RATING_NEWS,\n payload: {\n entityId,\n query,\n type: 'ENTITY_RATING_NEWS',\n page,\n limit,\n },\n});\n\nexport const getInstrumentResearchAction = ({\n entityId,\n query,\n page,\n limit,\n settings,\n industryCode,\n}) => ({\n type: GET_INSTRUMENT_RESEARCH,\n payload: {\n entityId,\n query,\n type: 'INDUSTRY_RESEARCH',\n page,\n limit,\n settings,\n industryCode,\n },\n});\n\nexport const requestInstrumentRatingAction = ({ id, level }) => ({\n type: REQUEST_INSTRUMENT_RATING,\n payload: {\n id,\n type: orderTypes.INSTRUMENT,\n frequency: 0,\n productCategory: level,\n purchaseType: 'ONE_TIME',\n },\n});\n\nexport const requestInstrumentRatingAndFetchDataAction = ({ id, level }) => ({\n type: REQUEST_INSTRUMENT_RATING_AND_FETCH_DATA,\n payload: {\n id,\n type: orderTypes.INSTRUMENT,\n frequency: 0,\n level,\n purchaseType: 'ONE_TIME',\n },\n});\n","export class DetailedError implements Error {\n public name = 'DetailedError';\n\n public message: string;\n\n public responseCode: number;\n\n public responseData: any;\n\n constructor(message?: string, code?: number, data?: any) {\n this.message = message || '';\n this.responseCode = code || 0;\n this.responseData = data;\n }\n}\n","import { fetchApi } from 'shared/functions';\n\nexport const changePasswordService = ({ oldPassword, newPassword }) => {\n const params = {\n method: 'PUT',\n body: JSON.stringify({ oldPassword, newPassword }),\n };\n\n return fetchApi('/sso/password', params);\n};\n","import { useModal } from 'shared/hooks';\n\nexport const makeModalsHook = <T extends string>(\n ...modals: T[]\n): (() => Record<T, ReturnType<typeof useModal>>) => () =>\n modals.reduce(\n (prev, curr) => ({ ...prev, [curr]: useModal() }),\n {} as Record<T, ReturnType<typeof useModal>>,\n );\n","import { fetchApi, getFetchApiJSONResponse, catchFetchApiError } from 'shared/functions';\n\nexport const uploadRequest = async (upload: any) => {\n const formData = new FormData();\n formData.append('file', upload, upload.name);\n\n const params = {\n method: 'POST',\n body: formData,\n };\n\n const url = '/esg/api/company-financial-data-upload/';\n\n return fetchApi(url, params, ['Content-Type'])\n .then(getFetchApiJSONResponse)\n .catch(catchFetchApiError);\n};\n","import React, { useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport { Button } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Grid from '@mui/material/Grid';\nimport LockIcon from '@mui/icons-material/Lock';\n\nimport { shopProductsCategories } from 'modules/shop/shared/constants/shopProductsCategories';\nimport { ShopRelatedProductsModal } from 'modules/shop/components/ShopRelatedProductsModal';\n\nconst useStyles = makeStyles(theme => ({\n contentRow: {\n textAlign: 'center',\n marginTop: theme.spacing(2),\n marginBottom: theme.spacing(2),\n },\n lockIcon: {\n color: theme.palette.primary.main,\n fontSize: 100,\n },\n lockContainer: {\n width: 230,\n },\n unlockButton: {\n height: 50,\n padding: '5px 30px',\n fontSize: '1rem',\n },\n unlockContainer: {\n flexGrow: 1,\n },\n}));\n\nconst SummaryCardLockedRating = ({ data, onUnlock }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const [isRelatedProductsModalOpen, setIsRelatedProductsModalOpen] = useState(false);\n\n const toggleRelatedProductsModal = () =>\n setIsRelatedProductsModalOpen(!isRelatedProductsModalOpen);\n\n const handleConfirm = () => {\n setIsRelatedProductsModalOpen(false);\n onUnlock();\n };\n\n return (\n <Grid container alignItems=\"center\" className={classes.contentRow}>\n <Grid item className={classes.lockContainer}>\n <LockIcon className={classes.lockIcon} />\n </Grid>\n <Grid item className={classes.unlockContainer}>\n <Button\n color=\"primary\"\n variant=\"contained\"\n className={classes.unlockButton}\n onClick={toggleRelatedProductsModal}\n >\n {t('Unlock')}\n </Button>\n {isRelatedProductsModalOpen && data && (\n <ShopRelatedProductsModal\n data={data}\n open={isRelatedProductsModalOpen}\n onClose={toggleRelatedProductsModal}\n onConfirm={handleConfirm}\n />\n )}\n </Grid>\n </Grid>\n );\n};\n\nSummaryCardLockedRating.defaultProps = {\n onUnlock: () => {},\n data: {\n category: shopProductsCategories.creditAnalysis,\n productLine: 'Rating',\n countriesAndIndustries: [],\n },\n};\n\nSummaryCardLockedRating.propTypes = {\n onUnlock: PropTypes.func,\n data: PropTypes.shape({\n category: PropTypes.string,\n productLine: PropTypes.string,\n countriesAndIndustries: PropTypes.arrayOf(\n PropTypes.shape({\n country: PropTypes.string.isRequired,\n industries: PropTypes.arrayOf(PropTypes.string.isRequired),\n }),\n ),\n }),\n};\n\nexport default SummaryCardLockedRating;\n","export const datesLabels = {\n firstRating: 'First rating',\n initialScore: 'Initial score',\n lastRatingAction: 'Last rating action',\n latestRating: 'Latest rating',\n latestChange: 'Latest change',\n firstReview: 'First review',\n lastReviewAction: 'Last review action',\n};\n\nexport const datesLabelsCreditReview = {\n firstRating: 'First rating',\n initialScore: 'Initial assessment',\n lastRatingAction: 'Last rating action',\n latestRating: 'Latest rating',\n latestChange: 'Latest change since request',\n firstReview: 'First review',\n lastReviewAction: 'Last review action',\n};\n","import React, { Fragment } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport round from 'lodash/round';\nimport clsx from 'clsx';\nimport { theme } from 'theme';\nimport makeStyles from '@mui/styles/makeStyles';\nimport withStyles from '@mui/styles/withStyles';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\nimport LinearProgress from '@mui/material/LinearProgress';\n\nimport { Loader, Triangle, Title } from 'ui';\nimport { EmptyDataLabel } from 'ui/Labels';\nimport { ESGScore } from 'modules/ESG';\nimport { useReportPage } from 'shared/hooks';\n\nconst BorderLinearProgress = withStyles({\n root: {\n height: 13,\n borderRadius: 20,\n backgroundColor: '#AECCE5',\n marginBottom: useReportPage ? 5 : 20,\n },\n bar: {\n borderRadius: 20,\n backgroundColor: '#013B6C',\n },\n})(LinearProgress);\n\nconst BorderDownstreamProgress = withStyles({\n root: {\n height: 13,\n borderRadius: 20,\n backgroundColor: 'transparent',\n },\n bar: {\n borderRadius: 20,\n backgroundColor: '#598CB8',\n },\n})(LinearProgress);\n\n// eslint-disable-next-line @typescript-eslint/no-shadow\nconst useStyles = makeStyles((theme) => ({\n divider: {\n alignSelf: 'stretch',\n height: 'auto',\n marginTop: 120,\n },\n treeParent: {\n position: 'relative',\n paddingTop: 50,\n },\n treeParentPDF: {\n width: '80rem',\n transform: 'scale(0.57)',\n marginLeft: '-18rem',\n paddingTop: 0,\n },\n mobileTreeParent: {\n paddingTop: 20,\n },\n treeChild: {\n float: 'left',\n textAlign: 'center',\n position: 'relative',\n padding: `${useReportPage ? '50px' : '120px'} 5px 0 5px`,\n\n '&:before, &:after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n right: '50%',\n borderTop: `2px dashed ${theme.palette.primary.main}`,\n width: '50%',\n height: useReportPage ? 65 : 120,\n },\n\n '&:after': {\n right: 'auto',\n left: useReportPage ? 'calc(50% + 1px)' : 'calc(50% + 2px)',\n borderLeft: `2px dashed ${theme.palette.primary.main}`,\n },\n\n '&:only-child::before, &:only-child::after': {\n display: 'none',\n },\n\n '&:only-child': {\n paddingTop: 0,\n },\n\n '&:first-child::before': {\n borderRight: `2px dashed ${theme.palette.primary.main}`,\n },\n },\n treeLeft: {\n '&::before': {\n border: 0,\n },\n\n '&::after': {\n borderLeft: 0,\n },\n },\n treeRight: {\n '&::after': {\n borderTop: 0,\n },\n },\n treeConnector: {\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: useReportPage ? -12 : 8,\n left: '50%',\n borderLeft: `2px dashed ${theme.palette.primary.main}`,\n width: 0,\n height: useReportPage ? 33 : 40,\n },\n },\n weightBox: {\n position: 'absolute',\n left: '50%',\n top: useReportPage ? -5 : 25,\n transform: `translate(-50%, 0) ${useReportPage ? 'scale(0.7)' : ''}`,\n display: 'flex',\n justifyContent: 'center',\n width: 180,\n margin: '15px auto 0',\n zIndex: 1,\n },\n weight: {\n fontSize: 18,\n marginLeft: 10,\n },\n itemWrapper: {\n maxWidth: '33.2%',\n },\n scoreBox: {\n backgroundColor: theme.palette.primary.main,\n padding: '10px 25px',\n color: theme.palette.primary.contrastText,\n fontSize: 18,\n borderRadius: 10,\n marginBottom: 15,\n marginRight: 10,\n },\n score: {\n fontSize: 40,\n fontWeight: 500,\n },\n scoreTotal: {\n fontSize: 18,\n fontWeight: 500,\n },\n scoreText: {\n position: 'relative',\n width: 185,\n fontSize: 21,\n },\n scoreTextLeft: {\n display: 'flex',\n width: 200,\n },\n scoreTextLeftTotal: {\n marginLeft: useReportPage ? '3.5%' : '14.2%',\n marginTop: useReportPage ? 20 : 36,\n },\n scoreTextBankTotal: {\n marginLeft: useReportPage ? '3.5%' : 0,\n marginTop: useReportPage ? 20 : 36,\n },\n scoreWrapper: {\n position: 'relative',\n padding: '0 50px',\n transform: useReportPage ? 'scale(0.7)' : 'none',\n marginTop: useReportPage ? -65 : 0,\n marginBottom: 4,\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 94,\n left: '50%',\n borderLeft: `2px dashed ${theme.palette.primary.main}`,\n width: 0,\n height: 121,\n },\n },\n scoreWrapperTotal: {\n position: 'relative',\n padding: useReportPage ? '0 180px' : '0 50px',\n transform: useReportPage ? 'scale(0.7)' : 'none',\n marginTop: useReportPage ? -22 : 0,\n marginBottom: 12,\n },\n scoreWrapperTotalBank: {\n padding: useReportPage ? '0' : '0 50px',\n },\n triangleBottom: {\n position: 'absolute',\n left: '37%',\n bottom: -65,\n },\n triangleMiddle: {\n position: 'absolute',\n left: 'calc(50% - 11px)',\n bottom: -21,\n transform: 'translate(-50%, 0)',\n zIndex: 1,\n },\n progressWrapper: {\n width: useReportPage ? 'auto' : 300,\n margin: '0 auto',\n },\n mobileFontSize: {\n fontSize: 10,\n },\n totalExtCosts: {\n position: 'absolute',\n marginTop: 97,\n },\n weightBoxReport: {\n padding: 8,\n width: 210,\n },\n triangleMiddleTotal: {\n top: useReportPage ? 72 : 48,\n transform: useReportPage ? 'scale(1.3) !important' : 'scale(1)',\n },\n textField: {\n width: 210,\n margin: theme.spacing(1, 0),\n background: theme.palette.custom.lightGray,\n textAlign: 'center',\n borderRadius: theme.spacing(1),\n },\n textFieldValue: {\n fontWeight: 'bold',\n padding: theme.spacing(0.5, 0),\n fontSize: useReportPage ? 12 : 16,\n },\n totalExtCostsTitle: {\n fontWeight: 600,\n fontSize: useReportPage ? 34 : 24,\n },\n descriptionBox: {\n fontWeight: 800,\n padding: theme.spacing(2),\n minWidth: 325,\n transform: 'translateY(-30%)',\n textAlign: 'center',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n marginLeft: 'auto',\n marginRight: 'auto',\n },\n scoreTextBank: {\n position: 'relative',\n width: 185,\n fontSize: 18,\n },\n containerBank: {\n width: '31rem',\n },\n withMargin: {\n marginTop: '0.5rem',\n marginBottom: '0.5rem',\n paddingRight: '5rem',\n },\n externalCostWrapper: {\n position: 'relative',\n padding: '0 50px',\n transform: useReportPage ? 'scale(0.7)' : 'none',\n marginTop: useReportPage ? -65 : 0,\n marginBottom: 4,\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 100,\n left: '50%',\n borderLeft: `2px dashed ${theme.palette.primary.main}`,\n width: 0,\n height: 123,\n },\n },\n triangleBottomScore: {\n marginBottom: '30px!important',\n },\n weightBoxTop: {\n marginTop: 0,\n },\n flip: {\n transform: 'rotate(360deg) scaleX(-1)',\n bottom: useReportPage ? 18 : 33,\n },\n}));\n\nconst ESGScoreOverview = ({ scores, loading }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const totalScore = scores[3];\n\n const impactReviewOther = () => (\n <Grid item className={clsx([classes.scoreText, classes.scoreTextLeft])}>\n <Box>\n <span>{t('ESG impact review')}</span>\n <Title\n inline\n tooltip={t(\n 'The underlying of each score is the monetised value a company’s external impacts as a percentage of its revenues.The score reflects how that value compares to the world benchmark, derived from a macroeconomic model (OECD input-output tables) that considers 450 sectors in 44 countries.',\n )}\n />\n </Box>\n <Triangle variant=\"right\" size=\"small\" />\n </Grid>\n );\n\n const externalCostOther = () => (\n <Grid\n item\n className={clsx(classes.scoreText, classes.scoreTextLeft, classes.scoreTextLeftTotal)}\n >\n {t('External cost / 1 EUR revenue')} <Triangle variant=\"right\" size=\"small\" />\n </Grid>\n );\n\n return (\n <Paper>\n <Box p={2}>\n <Typography variant=\"h6\">{t('Score overview')}</Typography>\n {loading ? (\n <Loader center />\n ) : (\n <div>\n {scores.length === 0 ? (\n <Box py={2}>\n <EmptyDataLabel label={t('There are no data available yet.')} />\n </Box>\n ) : (\n <>\n <Box py={2}>\n <Divider />\n </Box>\n <Box\n className={clsx(classes.treeParent, { [classes.treeParentPDF]: useReportPage })}\n >\n <Grid\n container\n justifyContent=\"space-evenly\"\n alignItems=\"center\"\n className={classes.scoreWrapper}\n >\n {impactReviewOther()}\n <Grid item className={classes.scoreBox} p={10}>\n <Typography component=\"span\" className={classes.scoreTotal}>\n <Typography className={classes.score} component=\"span\">\n {totalScore.score}\n </Typography>\n /10\n </Typography>\n <Triangle\n variant=\"top\"\n size=\"small\"\n className={clsx(classes.triangleMiddle)}\n />\n </Grid>\n <Grid item className={classes.scoreText} />\n </Grid>\n <Grid container alignItems=\"center\" className={clsx(classes.scoreWrapperTotal)}>\n {externalCostOther()}\n <Grid item>\n <Box\n className={clsx(classes.weightBox, {\n [classes.weightBoxReport]: useReportPage,\n })}\n >\n <div className={classes.textField}>\n <Typography\n component=\"h6\"\n variant=\"h6\"\n className={clsx(classes.textFieldValue, classes.totalExtCostsTitle)}\n >\n {round(totalScore.extCostsToRevenue, 2)} EUR\n </Typography>\n </div>\n </Box>\n </Grid>\n </Grid>\n <Grid\n container\n className={clsx(classes.treeParent, classes.treeConnector, {\n [classes.mobileTreeParent]: useReportPage,\n })}\n >\n {scores\n .filter(({ title }) => title !== 'Total')\n .map(({ title, score, extCostsToRevenue }, index) => {\n const roundedExtCostsToRevenue = round(extCostsToRevenue, 2);\n return (\n <Fragment key={title}>\n <Grid\n item\n xs\n className={clsx(classes.itemWrapper, classes.treeChild, {\n [classes.treeLeft]: index === 0,\n [classes.treeRight]: index === scores.length - 2,\n })}\n >\n <Box className={classes.weightBox}>\n <div className={classes.textField}>\n <Typography\n component=\"h6\"\n variant=\"h6\"\n className={classes.textFieldValue}\n >\n {roundedExtCostsToRevenue} EUR\n </Typography>\n </div>\n </Box>\n <Box p={2}>\n <ESGScore title={title} score={score} />\n </Box>\n </Grid>\n {index < scores.length - 2 && (\n <Divider className={classes.divider} orientation=\"vertical\" />\n )}\n </Fragment>\n );\n })}\n </Grid>\n </Box>\n </>\n )}\n </div>\n )}\n </Box>\n </Paper>\n );\n};\n\nESGScoreOverview.propTypes = {\n loading: PropTypes.bool.isRequired,\n scores: PropTypes.arrayOf(\n PropTypes.shape({\n title: PropTypes.string,\n score: PropTypes.number.isRequired,\n extCostsToRevenue: PropTypes.number.isRequired,\n }),\n ).isRequired,\n};\n\nexport default ESGScoreOverview;\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Box from '@mui/material/Box';\nimport Divider from '@mui/material/Divider';\nimport Grid from '@mui/material/Grid';\nimport Paper from '@mui/material/Paper';\nimport Typography from '@mui/material/Typography';\n\nimport { Loader, DistributionBar } from 'ui';\nimport { ESGDistributionCalculator } from 'modules/ESG';\nimport { parseToCurrency } from 'shared/functions';\nimport { useReportPage } from 'shared/hooks';\n\nconst useStyles = makeStyles((theme) => ({\n divider: {\n alignSelf: 'stretch',\n height: 'auto',\n margin: theme.spacing(0, 2),\n },\n legendRow: {\n fontSize: 18,\n fontWeight: 'bold',\n marginTop: 20,\n marginLeft: 50,\n },\n title: {\n paddingLeft: theme.spacing(2),\n fontSize: useReportPage ? 12 : 16,\n },\n}));\n\nconst ESGImpactOverview = ({ data, loading }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n\n const {\n impactDistribution: {\n scoreCompanyFactor,\n scoreCompany,\n scoreSupplyChain,\n scoreDownstreamFactor,\n },\n overallMonetization: { externalCostsMillionsEur, externalCostsDividedByRevenue },\n } = data;\n\n const distributionProgress = (scoreCompanyFactor * 100).toFixed(1);\n const downstreamProgress = (scoreDownstreamFactor * 100).toFixed(1);\n const distributionScores = scoreCompany &&\n scoreSupplyChain && {\n scoreCompany,\n scoreSupplyChain,\n scoreDownstreamFactor,\n };\n\n return (\n <Paper>\n <Box p={2} pt={useReportPage ? 1 : 2}>\n <Typography variant=\"h6\">{t('Impact summary')}</Typography>\n {loading ? (\n <Loader center />\n ) : (\n <>\n <Box py={2} pt={useReportPage ? 1 : 2}>\n <Divider />\n </Box>\n <Grid container>\n <Grid item xs={5}>\n <Box mb={2}>\n <Typography variant=\"h6\" className={classes.title}>\n {t('Impact distribution')}\n </Typography>\n </Box>\n\n <Box p={2}>\n <DistributionBar\n distributionScores={distributionScores}\n distributionProgress={distributionProgress}\n downstreamProgress={downstreamProgress}\n labelA={t('Company Sites')}\n labelB={t('Upstream')}\n labelC={t('Downstream')}\n isDouble\n />\n </Box>\n </Grid>\n <Divider className={classes.divider} orientation=\"vertical\" />\n <Grid item xs={6}>\n <Box mb={2}>\n <Typography variant=\"h6\" className={classes.title}>\n {t('Overall monetisation')}\n </Typography>\n </Box>\n <Box p={2} pb={1}>\n <ESGDistributionCalculator\n firstInputLabel={t('Total net externality per EUR revenue')}\n firstInputValue={externalCostsDividedByRevenue.toFixed(2)}\n secondInputLabel={t('Absolute net externality')}\n secondInputValue={parseToCurrency(externalCostsMillionsEur)}\n firstInputUnit=\"EUR\"\n secondInputUnit=\"mEUR\"\n showWeightBox={false}\n />\n </Box>\n </Grid>\n </Grid>\n </>\n )}\n </Box>\n </Paper>\n );\n};\n\nESGImpactOverview.propTypes = {\n loading: PropTypes.bool.isRequired,\n data: PropTypes.shape({\n impactDistribution: PropTypes.object.isRequired,\n overallMonetization: PropTypes.object.isRequired,\n }).isRequired,\n};\n\nexport default ESGImpactOverview;\n","import get from 'lodash/get';\nimport React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport TextField from '@mui/material/TextField';\nimport Chip from '@mui/material/Chip';\nimport range from 'lodash/range';\n\nimport { DialogTitleWithClose, RangeSlider, GroupedSelect } from 'ui';\nimport { useGroupedAutocompleteStyles } from 'shared/styles/groupedAutocompleteStyles/groupedAutocompleteStyles';\nimport { getSortedFlattenedIndustries } from 'selectors/common';\nimport { useRegions } from 'shared/hooks';\n\nconst ESGEntitiesFilterModal = ({\n open,\n onClose,\n onSubmit,\n searchQuery,\n initialFilter,\n filterableIndustries,\n allowEmptyIndustriesFilter,\n}) => {\n const groupedAutocompleteClasses = useGroupedAutocompleteStyles();\n const { t } = useTranslation();\n const industriesData = useSelector(getSortedFlattenedIndustries);\n const regions = useRegions(searchQuery);\n\n const creditScoreValues = range(11).map((level, index) => ({\n value: index + 1,\n label: level.toString(),\n }));\n\n const initialScore = () =>\n creditScoreValues.length\n ? [creditScoreValues[0].value, creditScoreValues[creditScoreValues.length - 1].value]\n : [];\n\n const [values, setValues] = useState({\n countries: [],\n industries: [],\n environment: initialScore(),\n social: initialScore(),\n governance: initialScore(),\n totalScore: initialScore(),\n });\n\n const [industries, setIndustries] = useState([]);\n\n useEffect(() => {\n setValues({\n ...values,\n ...initialFilter,\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFilter]);\n\n useEffect(() => {\n setIndustries(filterableIndustries || industriesData);\n }, [industriesData, filterableIndustries]);\n\n const handleChange = (name) => (value) => {\n setValues({\n ...values,\n [name]: value,\n });\n };\n\n const handleIndustriesChange = (_event, sectors) => {\n let newIndustries = sectors;\n if (!allowEmptyIndustriesFilter && !sectors.length) {\n const initialIndustry = get(initialFilter, 'industries[0]');\n newIndustries = initialIndustry ? [initialIndustry] : [];\n }\n setValues({\n ...values,\n industries: newIndustries,\n });\n };\n\n const handleSubmit = () => {\n const { environment, social, governance, totalScore } = values;\n\n const cleanedValues = {\n ...values,\n countries: values.countries.map(({ iso }) => iso),\n sectors: values.industries.map(({ name }) => name),\n environmentFrom: encodeURIComponent(creditScoreValues[environment[0] - 1].label),\n environmentTo: encodeURIComponent(creditScoreValues[environment[1] - 1].label),\n socialFrom: encodeURIComponent(creditScoreValues[social[0] - 1].label),\n socialTo: encodeURIComponent(creditScoreValues[social[1] - 1].label),\n governanceFrom: encodeURIComponent(creditScoreValues[governance[0] - 1].label),\n governanceTo: encodeURIComponent(creditScoreValues[governance[1] - 1].label),\n totalScoreFrom: encodeURIComponent(creditScoreValues[totalScore[0] - 1].label),\n totalScoreTo: encodeURIComponent(creditScoreValues[totalScore[1] - 1].label),\n };\n\n onSubmit(cleanedValues);\n };\n\n const handleEnvironmentChange = (_event, newValues) => {\n setValues({\n ...values,\n environment: newValues,\n });\n };\n\n const handleSocialChange = (_event, newValues) => {\n setValues({\n ...values,\n social: newValues,\n });\n };\n\n const handleGovernanceChange = (_event, newValues) => {\n setValues({\n ...values,\n governance: newValues,\n });\n };\n\n const handleTotalScoreChange = (_event, newValues) => {\n setValues({\n ...values,\n totalScore: newValues,\n });\n };\n\n const isValueRemovable = () => {\n return allowEmptyIndustriesFilter || values.industries.length > 1;\n };\n\n return (\n <Dialog fullWidth open={open}>\n <DialogTitleWithClose onClose={onClose}>{t('Apply filters')}</DialogTitleWithClose>\n <DialogContent>\n <Box px={2}>\n <GroupedSelect\n multiple\n options={regions.data}\n value={values.countries}\n label={t('Country')}\n onChange={handleChange('countries')}\n getOptionLabel={(option) => option.name}\n groupBy={(option) => option.continent}\n />\n <Autocomplete\n multiple\n options={industries}\n onChange={handleIndustriesChange}\n getOptionLabel={(option) => option.name}\n groupBy={(option) => option.industryName}\n value={values.industries}\n renderInput={(params) => (\n <TextField {...params} label={t('Sectors')} variant=\"outlined\" />\n )}\n renderTags={(value, getTagProps) =>\n value.map((option, index) => (\n <Chip\n label={option.name}\n {...getTagProps({ index })}\n disabled={!isValueRemovable()}\n />\n ))\n }\n classes={groupedAutocompleteClasses}\n />\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Environment')}\n options={creditScoreValues}\n values={values.environment}\n onChange={handleEnvironmentChange}\n />\n </Box>\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Social')}\n options={creditScoreValues}\n values={values.social}\n onChange={handleSocialChange}\n />\n </Box>\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Governance')}\n options={creditScoreValues}\n values={values.governance}\n onChange={handleGovernanceChange}\n />\n </Box>\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Total Score')}\n options={creditScoreValues}\n values={values.totalScore}\n onChange={handleTotalScoreChange}\n />\n </Box>\n </Box>\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" color=\"primary\" onClick={handleSubmit}>\n {t('Apply filters')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nESGEntitiesFilterModal.defaultProps = {\n searchQuery: null,\n initialFilter: {},\n filterableIndustries: null,\n allowEmptyIndustriesFilter: true,\n};\n\nESGEntitiesFilterModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n searchQuery: PropTypes.string,\n initialFilter: PropTypes.object,\n filterableIndustries: PropTypes.arrayOf(PropTypes.object),\n allowEmptyIndustriesFilter: PropTypes.bool,\n};\n\nexport default ESGEntitiesFilterModal;\n","export const esgContractStates = {\n active: 'ACTIVE',\n inactive: 'INACTIVE',\n};\n","export const errorCodes = {\n creditRating: {\n isSubscribed: 1096,\n },\n};\n","export const climateStressTestToTableParser = (data, scenario = 'orderly') =>\n data.map((item) => [\n [item.id, scenario],\n [item, scenario],\n [item.country, scenario],\n [item.industry, scenario],\n [item, scenario],\n [item, scenario],\n [item, scenario],\n [item, scenario],\n ]);\n\nexport const changeScenario = (data, scenario) =>\n data.map((entity) => entity.map((columns) => [columns[0], scenario]));\n","export const downloadBase64File = (file, name) => {\n const downloadLink = document.createElement('a');\n\n downloadLink.href = `data:application/pdf;base64,${file}`;\n downloadLink.download = `${name}.pdf`;\n downloadLink.click();\n};\n","import { saveAs } from 'file-saver';\n\nimport { fetchApi } from 'shared/functions';\nimport { downloadBase64File } from './downloadBase64File';\nimport { downloadServiceWithRetries } from './downloadServiceWithRetries';\n\ntype DownloadServiceParams = {\n path: string;\n name: string;\n options?: Record<string, unknown>;\n retries?: number;\n onError: (error: any) => void;\n onDownloadNotReady?: (message: string) => void;\n};\n\nexport const downloadService = async ({\n path,\n name,\n options,\n retries,\n onError,\n onDownloadNotReady = undefined,\n}: DownloadServiceParams): Promise<boolean> => {\n if (retries) {\n try {\n const response = await fetchApi(path, options, [], false, false).then((res) => ({\n status: res.status,\n ...res.json(),\n }));\n\n if (response.generated || response.ok) {\n downloadBase64File(response.file, name);\n } else if (response.status === 202 && onDownloadNotReady) {\n onDownloadNotReady(response.message || 'Document is being generated');\n } else if (response.status === 404) {\n const retryResponse = await downloadServiceWithRetries(path, retries);\n if (retryResponse.generated) {\n downloadBase64File(response.file, name);\n } else {\n onError(response.message || 'Download failed');\n return false;\n }\n } else {\n onError(response.message || 'Download failed');\n return false;\n }\n return true;\n } catch (e) {\n onError((e as Error).message || 'Download failed');\n }\n\n return false;\n }\n\n try {\n const response = await fetchApi(path, options);\n\n if (!response.ok) {\n onError(response.statusText);\n }\n\n const blob = await response.blob();\n saveAs(blob, name);\n return true;\n } catch (e) {\n onError(e);\n }\n\n return false;\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Bar } from 'react-chartjs-2';\n\nconst HorizontalBarChart = ({ data, options, height }) => (\n <Bar data={data} options={options} height={height} />\n);\n\nHorizontalBarChart.defaultProps = {\n data: {},\n options: {},\n height: 100,\n};\n\nHorizontalBarChart.propTypes = {\n data: PropTypes.object,\n options: PropTypes.object,\n height: PropTypes.number,\n};\n\nexport default HorizontalBarChart;\n","/* eslint-disable camelcase */\nimport { Box, Typography, Divider, Button, Grid } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { COLORS } from '@scope/scope-one-ui/theme';\nimport { useTranslation } from 'react-i18next';\nimport clsx from 'clsx';\nimport React, { FC, useState, useEffect } from 'react';\nimport { ErrorBoundary } from 'shared/errors';\nimport { Loader } from 'ui';\nimport { useReportPage } from 'shared/hooks';\nimport HorizontalBarChart from 'ui/Charts/HorizontalBarChart/HorizontalBarChart';\nimport { LegendColorChip } from 'ui/ColorChips/LegendColorChip';\nimport { IndustryScore, RegionScore } from '../types';\n\nconst useStyles = makeStyles((theme) => ({\n divider: {\n alignSelf: 'stretch',\n height: 'auto',\n margin: theme.spacing(0, 2),\n },\n companies: {\n marginTop: theme.spacing(6),\n },\n bold: {\n fontWeight: 900,\n },\n chipSpacing: {\n marginRight: theme.spacing(1),\n },\n title: {\n paddingLeft: theme.spacing(2),\n fontSize: useReportPage ? 12 : 16,\n },\n graphLabel: {\n color: COLORS.primary.main,\n },\n container: {\n textTransform: 'none',\n fontWeight: 400,\n color: theme.palette.grey[500],\n borderColor: theme.palette.grey[500],\n borderRadius: 16,\n height: 32,\n paddingLeft: theme.spacing(4),\n paddingRight: theme.spacing(4),\n marginRight: theme.spacing(1),\n },\n colorActive: {\n backgroundColor: '#013B6C',\n color: 'white',\n '&:hover': {\n backgroundColor: '#013B6C',\n color: 'white',\n },\n },\n}));\n\ntype ESGLendingImpact = {\n industriesAbsolute: IndustryScore[];\n industriesRelative: IndustryScore[];\n countriesAbsolute: RegionScore[];\n countriesRelative: RegionScore[];\n loading?: boolean;\n};\n\nconst ESGLendingImpact: FC<ESGLendingImpact> = (props) => {\n const { loading = false } = props;\n const classes = useStyles();\n const { t } = useTranslation();\n const [environmentalCostCountry, setEnvironmentalCostCountry] = useState<Array<number>>([]);\n const [socialCostCountry, setSocialCostCountry] = useState<Array<number>>([]);\n const [governanceCostCountry, setGovernanceCostCountry] = useState<Array<number>>([]);\n const [isAbsolute, setIsAbsolute] = useState(true);\n\n const suffix: string = isAbsolute ? 'Absolute' : 'Relative';\n const countries = props[`countries${suffix}`] as RegionScore[];\n const industries = props[`industries${suffix}`] as IndustryScore[];\n\n const mapCountryDatasets = () => {\n const environmentalCost = countries.map((el) => el.eScore);\n const socialCost = countries.map((el) => el.sScore);\n const governanceCost = countries.map((el) => el.gScore);\n\n setEnvironmentalCostCountry(environmentalCost);\n setSocialCostCountry(socialCost);\n setGovernanceCostCountry(governanceCost);\n };\n\n const [environmentalCostIndustry, setEnvironmentalCostIndustry] = useState<Array<number>>([]);\n const [socialCostIndustry, setSocialCostIndustry] = useState<Array<number>>([]);\n const [governanceCostIndustry, setGovernanceCostIndustry] = useState<Array<number>>([]);\n\n const mapIndustryDatasets = () => {\n const environmentalCost = industries.map((el) => el.eScore);\n const socialCost = industries.map((el) => el.sScore);\n const governanceCost = industries.map((el) => el.gScore);\n\n setEnvironmentalCostIndustry(environmentalCost);\n setSocialCostIndustry(socialCost);\n setGovernanceCostIndustry(governanceCost);\n };\n\n const showChart = () => {\n setIsAbsolute(!isAbsolute);\n };\n\n useEffect(() => {\n if (countries.length) {\n mapCountryDatasets();\n }\n\n if (industries.length) {\n mapIndustryDatasets();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [countries, industries, isAbsolute]);\n\n const countryOptions = {\n indexAxis: 'y',\n animation: false,\n elements: {\n bar: {\n borderWidth: 1,\n },\n },\n datasets: {\n bar: {\n barThickness: 20,\n },\n },\n responsive: true,\n plugins: {\n legend: {\n display: false,\n },\n },\n scales: {\n y: {\n stacked: true,\n },\n x: {\n stacked: true,\n ticks: { callback: (value: number) => `${value}` },\n },\n },\n };\n\n const indostryOptions = {\n ...countryOptions,\n scales: {\n y: {\n stacked: true,\n },\n x: {\n stacked: true,\n ticks: { callback: (value: number) => `${value}` },\n },\n },\n plugins: {\n legend: {\n display: false,\n },\n },\n };\n\n const countryData = {\n labels: countries.map((el) => el.country),\n datasets: [\n {\n label: 'Environment',\n data: environmentalCostCountry,\n backgroundColor: ['#013B6C'],\n borderColor: '#013B6C',\n },\n {\n label: 'Social',\n data: socialCostCountry,\n backgroundColor: ['#598CB8'],\n borderColor: '#598CB8',\n },\n {\n label: 'Governance',\n data: governanceCostCountry,\n backgroundColor: ['#AECCE5'],\n borderColor: '#AECCE5',\n },\n ],\n };\n\n const industryData = {\n labels: industries.map((el) => el.industry),\n datasets: [\n {\n label: 'Environment',\n data: environmentalCostIndustry,\n backgroundColor: ['#013B6C'],\n borderColor: '#013B6C',\n },\n {\n label: 'Social',\n data: socialCostIndustry,\n backgroundColor: ['#598CB8'],\n borderColor: '#598CB8',\n },\n {\n label: 'Governance',\n data: governanceCostIndustry,\n backgroundColor: ['#AECCE5'],\n borderColor: '#AECCE5',\n },\n ],\n };\n\n const graphLabel = () => (\n <Box p={1} display=\"flex\" justifyContent=\"flex-end\">\n {isAbsolute ? (\n <Typography variant=\"caption\" className={classes.graphLabel}>\n {t('Absolute Impact (EUR)')}\n </Typography>\n ) : (\n <Typography variant=\"caption\" className={classes.graphLabel}>\n {t('Relative Impact (EUR/EUR of Revenues)')}\n </Typography>\n )}\n </Box>\n );\n\n return (\n <>\n <Box p={2} flexDirection=\"row\">\n <Grid container>\n <Grid item xs={8}>\n <Box display=\"flex\" alignItems=\"baseline\">\n <Typography variant=\"h6\">{t('ESG.NEXT_IMPACT_BY_REG_IND')}</Typography>\n </Box>\n </Grid>\n {!useReportPage ? (\n <Grid container item xs={4} justifyContent=\"flex-end\">\n <Button\n variant={isAbsolute ? 'contained' : 'outlined'}\n className={clsx(classes.container, isAbsolute && classes.colorActive)}\n size=\"small\"\n onClick={showChart}\n >\n Absolute\n </Button>\n <Button\n variant={isAbsolute ? 'outlined' : 'contained'}\n className={clsx(classes.container, !isAbsolute && classes.colorActive)}\n size=\"small\"\n onClick={showChart}\n >\n Relative\n </Button>\n </Grid>\n ) : null}\n </Grid>\n <Box py={2}>\n <Divider />\n </Box>\n </Box>\n <Box p={2} pb={5}>\n {loading ? (\n <Loader center />\n ) : (\n <Box display=\"flex\" flexDirection=\"column\">\n <Box flexGrow={1} padding={2}>\n <Typography variant=\"subtitle1\" className={clsx(classes.title, classes.bold)}>\n {t('ESG.IMPACT_BY_COUNTRY')}\n </Typography>\n\n <Box display=\"flex\" justifyContent=\"center\" width={1} pl={9}>\n <ErrorBoundary>\n <HorizontalBarChart\n data={countryData}\n options={countryOptions}\n height={useReportPage ? 150 : 100}\n />\n </ErrorBoundary>\n </Box>\n {graphLabel()}\n </Box>\n\n <Box flexGrow={1} padding={2}>\n <Typography variant=\"subtitle1\" className={clsx(classes.title, classes.bold)}>\n {t('ESG.IMPACT_BY_INDUSTRY')}\n </Typography>\n <Box display=\"flex\" justifyContent=\"center\" width={1}>\n <ErrorBoundary>\n <HorizontalBarChart\n data={industryData}\n options={indostryOptions}\n height={useReportPage ? 150 : 100}\n />\n </ErrorBoundary>\n </Box>\n {graphLabel()}\n <Box display=\"flex\" alignItems=\"center\" pt={4}>\n <Box display=\"flex\" alignItems=\"center\" pr={4}>\n <LegendColorChip className={classes.chipSpacing} chipColor=\"#013B6C\" />\n <Typography variant=\"body1\" className={classes.bold}>\n Environment\n </Typography>\n </Box>\n <Box display=\"flex\" alignItems=\"center\" pr={4}>\n <LegendColorChip className={classes.chipSpacing} chipColor=\"#598CB8\" />\n <Typography variant=\"body1\" className={classes.bold}>\n Social\n </Typography>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n <LegendColorChip className={classes.chipSpacing} chipColor=\"#AECCE5\" />\n <Typography variant=\"body1\" className={classes.bold}>\n Governance\n </Typography>\n </Box>\n </Box>\n </Box>\n </Box>\n )}\n </Box>\n </>\n );\n};\n\nexport default ESGLendingImpact;\n","export const portfolioUploadSteps = {\n SELECT_TYPE: 0,\n UPLOAD: 1,\n CREATE_DOSSIER: 2,\n SUMMARY: 3,\n FINISH: 4,\n};\n","export const changeDirection = direction => {\n switch (direction) {\n case 'asc':\n return 'desc';\n case 'desc':\n return 'asc';\n default:\n return 'desc';\n }\n};\n","export const filterContinents = (region, entitiesCountries) =>\n entitiesCountries.some(country => country.code === region.iso);\n","import { store } from 'store/store';\n\nexport const getOrganisationId = () => store.getState().auth.data.organisation.id;\n","import { store } from 'store/store';\n\nexport const getUserId = () => store.getState().auth.data.userId;\n","import { isValid, parseISO } from 'date-fns';\nimport format from 'date-fns/format';\n\nexport const formatDate = (date, dateFormat = 'dd/MM/yyyy') => {\n if (!date) {\n return '-';\n }\n if (typeof date === 'string') {\n const parsed = parseISO(date);\n return isValid(parsed) ? format(parsed, dateFormat) : date;\n }\n return format(date, dateFormat);\n};\n","export const formatCurrency = (value, currency) => {\n if (currency) {\n return new Intl.NumberFormat('en-GB', {\n style: 'currency',\n currency,\n minimumFractionDigits: 0,\n }).format(value);\n } else {\n return '';\n }\n};\n","export const formatNumber = (value: number | string): string => {\n if (typeof value === 'string')\n // eslint-disable-next-line no-param-reassign\n value = parseFloat(value);\n return Intl.NumberFormat('en-GB', {\n style: 'decimal',\n minimumFractionDigits: 0,\n maximumFractionDigits: 2,\n }).format(value);\n};\n","export const generateImageUrl = (image, source = null) =>\n source === 'MAGNOLIA'\n ? image\n : `${process.env.REACT_APP_BASE_URL}/ScopeOneApi/images/announcement-img?imageName=${image}`;\n","export const generateKey = (index, generatedWord) => `${index}_${generatedWord}`;\n","export const kebabCase = string =>\n string\n .replace(/\\W+/g, ' ')\n .split(/ |\\B(?=[A-Z])/)\n .map(word => word.toLowerCase())\n .join('-');\n","export const humanize = string =>\n string\n .replace(/\\w\\S*/g, txt => txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase())\n .replace(/_/g, ' ');\n","import { changeDirection } from 'shared/functions';\n\nexport const reorderColumn = (changedColumn, columns) =>\n columns.map(({ name, label, options }) => ({\n name,\n label,\n options: {\n ...options,\n sortDirection: 'none',\n ...(name === changedColumn && {\n sortDirection: changeDirection(options?.sortDirection),\n }),\n },\n }));\n","import React from 'react';\nimport sanitizeReact from 'sanitize-html-react';\n\nimport { theme } from 'theme';\n\nconst sanitize = unsafeHtml =>\n sanitizeReact(unsafeHtml, {\n allowedTags: [\n 'address',\n 'article',\n 'aside',\n 'footer',\n 'header',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'hgroup',\n 'main',\n 'nav',\n 'section',\n 'blockquote',\n 'dd',\n 'div',\n 'dl',\n 'dt',\n 'figcaption',\n 'figure',\n 'hr',\n 'li',\n 'main',\n 'ol',\n 'p',\n 'pre',\n 'ul',\n 'a',\n 'abbr',\n 'b',\n 'bdi',\n 'bdo',\n 'br',\n 'cite',\n 'code',\n 'data',\n 'dfn',\n 'em',\n 'i',\n 'img',\n 'mark',\n 'q',\n 'rb',\n 'rp',\n 'rt',\n 'rtc',\n 's',\n 'samp',\n 'small',\n 'span',\n 'strong',\n 'sub',\n 'sup',\n 'time',\n 'u',\n 'var',\n 'caption',\n 'col',\n 'colgroup',\n 'table',\n 'tbody',\n 'td',\n 'tfoot',\n 'th',\n 'thead',\n 'tr',\n ],\n allowedAttributes: {\n a: ['href', 'name', 'target', 'rel'],\n img: ['src', 'alt'],\n '*': ['style'],\n },\n allowedSchemes: ['http', 'https', 'mailto'],\n transformTags: {\n a: (tagName, attribs) => {\n return {\n tagName: 'a',\n attribs: {\n ...attribs,\n style: `color: ${theme.palette.primary.main}; text-decoration: none;`,\n },\n };\n },\n },\n });\n\nconst sanitizeHtml = (unsafeHtml, className) => {\n const sanitized = sanitize(unsafeHtml);\n // eslint-disable-next-line react/no-danger\n return <div className={className} dangerouslySetInnerHTML={{ __html: sanitized }} />;\n};\n\nexport { sanitizeHtml };\n","export const scrollToRef = ref => ref && window.scrollTo(0, ref.current.offsetTop - 80);\n","export const toBase64 = image =>\n new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(image);\n reader.onload = () => resolve(reader.result);\n reader.onerror = error => reject(error);\n });\n","import { ratingTypes } from 'shared/constants/ratingTypes';\n\nconst productAvailable = productItem => productItem && !productItem.purchased;\nconst sigProductAvailable = productItem => productItem && !productItem.requested;\n\nexport const ratingRequestAvailable = (product, ratingType) => {\n switch (ratingType) {\n case ratingTypes.CREDIT_REVIEW:\n return sigProductAvailable(product);\n case ratingTypes.CREDIT_RATING:\n default:\n return product && (productAvailable(product.l4) || productAvailable(product.l5));\n }\n};\n","import { outlookTypes } from 'shared/constants/outlookTypes';\n\nexport const setRatingColor = outlook => {\n switch (outlook) {\n case outlookTypes.STABLE:\n return 'primary';\n case outlookTypes.NEGATIVE:\n return 'secondary';\n default:\n return 'default';\n }\n};\n","import { put } from 'redux-saga/effects';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nexport const putNotifySuccess = message => put(addNotificationAction({ message, variant: 'success' }));\nexport const putNotifyError = message => put(addNotificationAction({ message, variant: 'error' }));","import { store } from 'store/store';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\nimport { removeFromDossier } from 'services/dossier';\nimport { ratingTypes } from 'shared/constants/ratingTypes';\n\nexport const removeItemsFromPortfolio = ({\n dossierId,\n dossierItemsIds,\n ratingType = ratingTypes.CREDIT_RATING,\n selectAll = false,\n}) => {\n return removeFromDossier({ dossierId, dossierItemsIds, ratingType, selectAll })\n .then(response => {\n store.dispatch(\n addNotificationAction({\n message: 'Item(s) removed successfully',\n variant: 'success',\n }),\n );\n return response;\n })\n .catch(error => {\n store.dispatch(\n addNotificationAction({\n message: 'Failed to remove item from dossier',\n variant: 'error',\n }),\n );\n return Promise.reject(error);\n });\n};\n","import { artifactTypes } from 'shared/constants/artifactTypes';\n\nconst allowedArtifactTypes = Object.keys(artifactTypes);\n\nexport const allowedForPortfolio = artifactType => allowedArtifactTypes.includes(artifactType);\n","import React from 'react';\nimport { Navigate } from 'react-router-dom';\n\nexport const redirectFromHashLinks = () => {\n const url = window.location.href;\n const arr = url.split('/');\n const id = arr[5];\n const link = (path) => (id ? `${path}/${id}` : path);\n\n switch (arr[4]) {\n case '#home':\n return <Navigate to={{ pathname: '/' }} />;\n case '#dossiers':\n return <Navigate to={{ pathname: link('/portfolios') }} />;\n case '#analysts':\n return <Navigate to={{ pathname: link('/analysts') }} />;\n case '#entities':\n return <Navigate to={{ pathname: link('/entities') }} />;\n case '#newscentre':\n return <Navigate to={{ pathname: link('/news-centre') }} />;\n case '#instruments':\n return <Navigate to={{ pathname: link('/instruments') }} />;\n case '#announcements':\n return <Navigate to={{ pathname: link('/announcements') }} />;\n default:\n return null;\n }\n};\n","export const redirectToRootAddress = () => {\n const url = window.location.href;\n localStorage.setItem('lastLocation', url);\n const arr = url.split('/');\n window.location.href = `${arr[0]}//${arr[2]}`;\n};\n","export const getCompanyData = data => {\n const { conflictOfInterests, l4, l5 } = data;\n const level = l5.available ? 'L5' : 'L4';\n const product = l5.available ? l5 : l4;\n const isPublicRating = l5.available;\n const isRatingSubscription = l4.available;\n const { ratings } = product;\n const showRatings = !conflictOfInterests && ratings.length > 0;\n const showRequestRatingBox = !product.available || !ratings.length;\n const showConflictOfInterests = product.purchased && conflictOfInterests;\n const showRatingRequestInProgress =\n product.purchased && !product.approved && !conflictOfInterests;\n\n return {\n ratings,\n level,\n isPublicRating,\n isRatingSubscription,\n showRatings,\n showRequestRatingBox,\n showConflictOfInterests,\n showRatingRequestInProgress,\n };\n};\n","import { outlookTypes } from 'shared/constants/outlookTypes';\n\nexport const getScoreWidgetFooterColor = outlook => {\n const outlookToScoreWidgetFooterColorMap = {\n [outlookTypes.NONE]: 'white',\n [outlookTypes.STABLE]: 'white',\n [outlookTypes.NEGATIVE]: 'red',\n [outlookTypes.POSITIVE]: 'green',\n };\n\n return outlookToScoreWidgetFooterColorMap[outlook] || 'white';\n};\n","import { ESGImpactHexCodesMap } from 'shared/constants/ESGImpactHexCodesMap';\n\nconst { insignificant, veryLow, low, medium, high, veryHigh } = ESGImpactHexCodesMap;\n\nexport const getHexColorByImpact = (impactNumber, impactWeight) => {\n if (impactWeight) {\n if (impactNumber < 0.5) return veryLow;\n if (impactNumber <= 0.8) return low;\n if (impactNumber <= 1.2) return medium;\n if (impactNumber <= 3) return high;\n return veryHigh;\n }\n\n return insignificant;\n};\n\nexport const getHexColorByScoreOverview = v => {\n if (v <= 2) return veryHigh;\n if (v <= 4) return high;\n if (v <= 6) return medium;\n if (v <= 8) return low;\n return veryLow;\n};\n","export const parseToCurrency = (n) => {\n if (typeof n !== 'number') {\n return null;\n }\n\n return new Intl.NumberFormat('en-US', { maximumFractionDigits: 0 }).format(n);\n};\n","export const findModule = moduleType => ({ value }) => value === moduleType;\n","// Performs given operation in next cycle of JS engine's event loop.\nexport const performInNextCycle = callback => setTimeout(callback, 0);\n","export const getMonthsBetweenDates = (fistDate, lastDate) => {\n const resultList = [];\n const date = new Date(fistDate.toString());\n const endDate = new Date(lastDate.toString());\n const monthList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];\n\n while (date <= endDate) {\n resultList.push(`${date.getFullYear()}/${monthList[date.getMonth()]}`);\n date.setMonth(date.getMonth() + 1);\n }\n\n return resultList;\n};\n","import camelCase from 'lodash/camelCase';\n\nexport const transformKeysToCamelCase = data =>\n Object.keys(data)\n .map(key => ({ [camelCase(key)]: data[key] }))\n .reduce((prev, next) => {\n return {\n ...prev,\n ...next,\n };\n }, {});\n","import isEqual from 'lodash/isEqual';\nimport differenceWith from 'lodash/differenceWith';\n\nexport const getShallowObjectsArrayDifference = (initialData, changedData) => {\n const changedDifference = differenceWith(changedData, initialData, isEqual);\n const initialDifference = differenceWith(initialData, changedData, isEqual);\n\n return changedDifference.map((data, index) => {\n const changedKeys = Object.keys(initialDifference[index]).filter(key => {\n return typeof data[key] === 'object' || data[key] !== initialDifference[index][key];\n });\n\n return changedKeys.reduce((prev, current) => {\n return {\n ...prev,\n [current]: data[current],\n };\n }, {});\n });\n};\n","export const GET_NEWS_FEED = 'GET_NEWS_FEED';\nexport const GET_NEWS_FEED_SUCCESS = 'GET_NEWS_FEED_SUCCESS';\nexport const GET_NEWS_FEED_ERROR = 'GET_NEWS_FEED_ERROR';\n\nexport const SAVE_FEED_SETTINGS = 'SAVE_FEED_SETTINGS';\n\nexport const REQUEST_RATING_NEWS = 'REQUEST_RATING_NEWS';\nexport const REQUEST_RATING_NEWS_FINISHED = 'REQUEST_RATING_NEWS_FINISHED';\n\nexport const GET_PREFERENCES = 'GET_PREFERENCES';\nexport const GET_PREFERENCES_FINISHED = 'GET_PREFERENCES_FINISHED';\n\nexport const SAVE_PREFERENCES = 'SAVE_PREFERENCES';\nexport const SAVE_PREFERENCES_FINISHED = 'SAVE_PREFERENCES_FINISHED';\n\nexport const getNewsFeedAction = ({ page, limit, settings, filters }) => ({\n type: GET_NEWS_FEED,\n payload: {\n type: 'DASHBOARD_NEWS',\n page,\n limit,\n settings,\n filters,\n },\n});\n\nexport const saveFeedSettingsAction = ({ settings }) => ({\n type: SAVE_FEED_SETTINGS,\n payload: {\n settings,\n },\n});\n\nexport const requestRatingNewsAction = ({ id, type }) => ({\n type: REQUEST_RATING_NEWS,\n payload: {\n id,\n type,\n },\n});\n\nexport const getPreferencesAction = (defaultPrefs = false) => ({\n type: GET_PREFERENCES,\n payload: {\n defaultPrefs,\n },\n});\n\nexport const savePreferencesAction = ({ emailNotifications, newsFeed, newsletter }) => ({\n type: SAVE_PREFERENCES,\n payload: {\n emailNotifications,\n newsFeed,\n newsletter,\n },\n});\n","export const watchlistItemTypes = {\n DOSSIER: 'dossier',\n};\n","import { validateShopPermissions } from 'modules/shop/shared/parsers';\nimport { mergePermissionsParser, validateRoles } from 'shared/parsers';\nimport {UseAccessParams} from \"shared/types/UseAccessParams\";\n\ntype UseExtendedAccessParams = UseAccessParams & {auth: any}\n\nexport const checkAccess = ({ environment, permission, licence, role, shopPermissions: shopRoles, auth }: UseExtendedAccessParams) => {\n\n const { permissions, licences, roles, shopPermissions } = auth.data ?? {};\n\n const mergedPermissions = permissions ? mergePermissionsParser(permissions) : [];\n\n let checkEnvironment = true;\n if (environment) {\n checkEnvironment = Array.isArray(environment)\n ? environment.includes(process.env.REACT_APP_ENV as string)\n : environment === process.env.REACT_APP_ENV;\n }\n const checkPermission = permission ? mergedPermissions.includes(permission) : true;\n const checkLicence = licence ? licences.includes(licence) : true;\n const checkRole = role ? validateRoles(roles, role) : true;\n const checkShopPermissions =\n shopRoles && shopRoles.length ? validateShopPermissions(shopPermissions, shopRoles) : true\n\n return checkEnvironment && checkPermission && checkLicence && checkRole && checkShopPermissions;\n};\n","export const disclaimer = `© ${new Date().getFullYear()} Scope SE & Co. KGaA and all its subsidiaries including Scope Ratings GmbH, Scope Analysis GmbH, Scope Investor Services GmbH and Scope Risk Solutions GmbH (collectively, Scope). All rights reserved. The information and data supporting Scope’s ratings, rating reports, rating opinions and related research and credit opinions originate from sources Scope considers to be reliable and accurate. Scope does not, however, independently verify the reliability and accuracy of the information and data. Scope’s ratings, rating reports, rating opinions, or related research and credit opinions are provided ‘as is’ without any representation or warranty of any kind. In no circumstance shall Scope or its directors, officers, employees and other representatives be liable to any party for any direct, indirect, incidental or other damages, expenses of any kind, or losses arising from any use of Scope’s ratings, rating reports, rating opinions, related research or credit opinions. Ratings and other related credit opinions issued by Scope are, and have to be viewed by any party as, opinions on relative credit risk and not a statement of fact or recommendation to purchase, hold or sell securities. Past performance does not necessarily predict future results. Any report issued by Scope is not a prospectus or similar document related to a debt security or issuing entity. Scope instruments credit ratings and related research and opinions with the understanding and expectation that parties using them will assess independently the suitability of each security for investment or transaction purposes. Scope’s credit ratings address relative credit risk, they do not address other risks such as market, liquidity, legal, or volatility. The information and data included herein is protected by copyright and other laws. To reproduce, transmit, transfer, disseminate, translate, resell, or store for subsequent use for any such purpose the information and data contained herein, contact Scope Ratings GmbH at Lennéstraße 5 D-10785 Berlin.`;\nexport const disclaimerDocument = `© ${new Date().getFullYear()} Scope SE & Co. KGaA (“Scopeâ€). All rights reserved. The information and data supporting Scope’s ESG Impact Review or related research originate from sources Scope considers to be reliable and accurate. The underlying methodology and data to determine the ESG Impact Review was built by Systain Consulting GmbH in co-operation with Scope. Scope does not, however, independently verify the reliability and accuracy of the information and data. Scope’s ESG Impact Review or related research are provided ‘as is’ without any representation or warranty of any kind. In no circumstance shall Scope or its directors, officers, employees and other representatives be liable to any party for any direct, indirect, incidental or other damages, expenses of any kind, or losses arising from any use of Scope’s ESG Impact Review or related research. ESG Impact Reviews or related research issued by Scope are not a recommendation to purchase, hold or sell securities. Past performance does not necessarily predict future results. Any report issued by Scope is not a prospectus or similar document related to a security or issuing entity. Scope instruments ESG Impact Reviews and related research with the understanding and expectation that parties using them will assess independently the suitability of this assessment and research. ESG Impact Reviews or related research must be treated as strictly confidential and must not transmit, disclose or otherwise reveal the ESG Impact Reviews or its content to any other person, firm, company or institution. The information and data included herein is protected by copyright and other laws. To reproduce, transmit, transfer, disseminate, translate, resell, or store for subsequent use for any such purpose the information and data contained herein, contact Scope SE & Co. KGaA at Lennéstraße 5, D-10785 Berlin. Scope SE & Co. KGaA at Lennéstraße 5, D-10785 Berlin, District Court for Berlin (Charlottenburg) HRB 182023 B, Executive Board: Florian Schoeller, Christopher Hoffmann.`;\n","import { gql } from '@apollo/client';\n\nexport const CREATE_PORTFOLIO = gql`\n mutation CreatePortfolio($name: String!, $description: String) {\n createPortfolio(name: $name, description: $description) {\n portfolio {\n id\n name\n description\n }\n }\n }\n`;\n\nexport const UPDATE_PORTFOLIO = gql`\n mutation UpdatePortfolio(\n $portfolioId: ObjectIdType\n $portfolioName: String\n $portfolioDescription: String\n $watchlistEnabled: Boolean\n ) {\n updatePortfolio(\n id: $portfolioId\n name: $portfolioName\n description: $portfolioDescription\n watchlistEnabled: $watchlistEnabled\n ) {\n portfolio {\n id\n name\n description\n }\n }\n }\n`;\n\nexport const DELETE_PORTFOLIOS = gql`\n mutation DeletePortfolio($portfolioIds: [String]) {\n deletePortfolio(ids: $portfolioIds) {\n ids\n }\n }\n`;\n\n/**\n * POSTFOLIO ITEMS / ENTITIES\n */\n\nexport const ADD_PORTFOLIO_ITEM = gql`\n mutation AddPortfolioItem($portfolioId: ObjectIdType, $artifactIdList: [ArtifactId]) {\n addPortfolioItem(portfolioId: $portfolioId, artifactIdList: $artifactIdList) {\n portfolioItems {\n module\n artifactId\n addedDate\n }\n }\n }\n`;\n\nexport const COPY_PORTFOLIO_ITEMS = gql`\n mutation CopyPortfolioItems(\n $portfolioItemsIds: [String]\n $portfolioId: ObjectIdType\n $sourcePortfolioId: ObjectIdType\n ) {\n copyPortfolioItems(\n portfolioItemsIds: $portfolioItemsIds\n portfolioId: $portfolioId\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const COPY_ALL_PORTFOLIO_ITEMS = gql`\n mutation CopyAllPortfolioItems($portfolioId: ObjectIdType, $sourcePortfolioId: ObjectIdType) {\n copyPortfolioItems(portfolioId: $portfolioId, sourcePortfolioId: $sourcePortfolioId) {\n message\n }\n }\n`;\n\nexport const MOVE_PORTFOLIO_ITEMS = gql`\n mutation MovePortfolioItems(\n $portfolioItemsIds: [String]\n $destinationPortfolioId: ObjectIdType\n $sourcePortfolioId: ObjectIdType\n ) {\n movePortfolioItems(\n portfolioItemsIds: $portfolioItemsIds\n destinationPortfolioId: $destinationPortfolioId\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const MOVE_ALL_PORTFOLIO_ITEMS = gql`\n mutation MoveAllPortfolioItems(\n $sourcePortfolioId: ObjectIdType\n $destinationPortfolioId: ObjectIdType\n ) {\n movePortfolioItems(\n destinationPortfolioId: $destinationPortfolioId\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const DELETE_ENTITIES = gql`\n mutation DeletePortfolioItems(\n $portfolioItemsIds: [String]\n $portfolioId: ObjectIdType\n $selectedAll: Boolean\n ) {\n deletePortfolioItems(\n portfolioItemsIds: $portfolioItemsIds\n portfolioId: $portfolioId\n selectedAll: $selectedAll\n ) {\n message\n }\n }\n`;\n\nexport const TOGGLE_SIG_MONITORING = gql`\n mutation ToggleSigMonitoring($portfolioId: ObjectIdType, $artifactId: String) {\n toggleSigMonitoring(portfolioId: $portfolioId, artifactId: $artifactId) {\n message\n }\n }\n`;\n\n/**\n * INSTRUMENTS\n */\n\nexport const ADD_INSTRUMENTS = gql`\n mutation AddInstruments($portfolioId: ObjectIdType, $artifactIdList: [ArtifactId]) {\n addInstruments(portfolioId: $portfolioId, artifactIdList: $artifactIdList) {\n instruments {\n id\n }\n }\n }\n`;\n\nexport const DELETE_INSTRUMENTS = gql`\n mutation DeleteInstruments(\n $instrumentsIds: [String]\n $portfolioId: ObjectIdType\n $selectedAll: Boolean\n ) {\n deleteInstruments(\n instrumentsIds: $instrumentsIds\n portfolioId: $portfolioId\n selectedAll: $selectedAll\n ) {\n message\n }\n }\n`;\n\nexport const DELETE_UPLOAD = gql`\n mutation deleteUploadHistory(\n $portfolioId: ObjectIdType\n $uploadsIds: [String]\n $selectedAll: Boolean\n ) {\n deleteUploadHistory(\n portfolioId: $portfolioId\n uploadsIds: $uploadsIds\n selectedAll: $selectedAll\n ) {\n message\n }\n }\n`;\n\nexport const MOVE_INSTRUMENTS = gql`\n mutation moveInstruments(\n $destinationPortfolioId: ObjectIdType\n $instrumentsIds: [String]\n $sourcePortfolioId: ObjectIdType\n ) {\n moveInstruments(\n destinationPortfolioId: $destinationPortfolioId\n instrumentsIds: $instrumentsIds\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const MOVE_ALL_INSTRUMENTS = gql`\n mutation moveAllInstruments(\n $destinationPortfolioId: ObjectIdType\n $sourcePortfolioId: ObjectIdType\n ) {\n moveInstruments(\n destinationPortfolioId: $destinationPortfolioId\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const COPY_INSTRUMENTS = gql`\n mutation copyInstruments(\n $portfolioId: ObjectIdType\n $instrumentsIds: [String]\n $sourcePortfolioId: ObjectIdType\n ) {\n copyInstruments(\n portfolioId: $portfolioId\n instrumentsIds: $instrumentsIds\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n instruments {\n id\n name\n date\n volume\n artifactId\n addedDate\n isin\n currencyCode\n entityId\n entityName\n }\n }\n }\n`;\n\nexport const COPY_ALL_INSTRUMENTS = gql`\n mutation copyInstruments($portfolioId: ObjectIdType, $sourcePortfolioId: ObjectIdType) {\n copyInstruments(portfolioId: $portfolioId, sourcePortfolioId: $sourcePortfolioId) {\n message\n instruments {\n id\n name\n date\n volume\n artifactId\n addedDate\n isin\n currencyCode\n entityId\n entityName\n }\n }\n }\n`;\n\n/**\n * FUNDS\n */\n\nexport const ADD_FUNDS = gql`\n mutation AddFunds($portfolioId: ObjectIdType, $artifactIdList: [ArtifactId]) {\n addFunds(portfolioId: $portfolioId, artifactIdList: $artifactIdList) {\n funds {\n id\n }\n }\n }\n`;\n\nexport const DELETE_FUNDS = gql`\n mutation DeleteFunds($isins: [String], $portfolioId: ObjectIdType, $selectedAll: Boolean) {\n deleteFunds(isins: $isins, portfolioId: $portfolioId, selectedAll: $selectedAll) {\n message\n }\n }\n`;\n\nexport const MOVE_FUNDS = gql`\n mutation moveFunds(\n $destinationPortfolioId: ObjectIdType\n $isins: [String]\n $sourcePortfolioId: ObjectIdType\n ) {\n moveFunds(\n destinationPortfolioId: $destinationPortfolioId\n isins: $isins\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const MOVE_ALL_FUNDS = gql`\n mutation moveAllFunds(\n $destinationPortfolioId: ObjectIdType\n $sourcePortfolioId: ObjectIdType\n $selectedAll: Boolean\n ) {\n moveFunds(\n destinationPortfolioId: $destinationPortfolioId\n sourcePortfolioId: $sourcePortfolioId\n selectAll: $selectAll\n ) {\n message\n }\n }\n`;\n\nexport const COPY_FUNDS = gql`\n mutation copyFunds(\n $destinationPortfolioId: ObjectIdType\n $isins: [String]\n $sourcePortfolioId: ObjectIdType\n ) {\n copyFunds(\n destinationPortfolioId: $destinationPortfolioId\n isins: $isins\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const COPY_ALL_FUNDS = gql`\n mutation copyFunds(\n $portfolioId: ObjectIdType\n $sourcePortfolioId: ObjectIdType\n $selectedAll: Boolean\n ) {\n copyFunds(\n destinationPortfolioId: $portfolioId\n sourcePortfolioId: $sourcePortfolioId\n selectedAll: $selectedAll\n ) {\n message\n }\n }\n`;\n\n/**\n * RATING NEWS\n */\n\nexport const ADD_PORTFOLIO_RATING_NEWS = gql`\n mutation addRatingNews($portfolioId: ObjectIdType, $artifactIdList: [ArtifactId]) {\n addRatingNews(portfolioId: $portfolioId, artifactIdList: $artifactIdList) {\n ratingNews {\n artifactId\n language\n title\n addedDate\n publicationDate\n }\n }\n }\n`;\n\nexport const COPY_PORTFOLIO_RATING_NEWS = gql`\n mutation CopyRatingNews(\n $artifactIds: [String]\n $portfolioId: ObjectIdType\n $sourcePortfolioId: ObjectIdType\n ) {\n copyRatingNews(\n portfolioId: $portfolioId\n artifactIds: $artifactIds\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const COPY_ALL_PORTFOLIO_RATING_NEWS = gql`\n mutation CopyRatingNews($portfolioId: ObjectIdType, $sourcePortfolioId: ObjectIdType) {\n copyRatingNews(portfolioId: $portfolioId, sourcePortfolioId: $sourcePortfolioId) {\n message\n }\n }\n`;\n\nexport const MOVE_PORTFOLIO_RATING_NEWS = gql`\n mutation MoveRatingNews(\n $destinationPortfolioId: ObjectIdType\n $artifactIds: [String]\n $sourcePortfolioId: ObjectIdType\n ) {\n moveRatingNews(\n destinationPortfolioId: $destinationPortfolioId\n artifactIds: $artifactIds\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const MOVE_ALL_PORTFOLIO_RATING_NEWS = gql`\n mutation MoveRatingNews($destinationPortfolioId: ObjectIdType, $sourcePortfolioId: ObjectIdType) {\n moveRatingNews(\n destinationPortfolioId: $destinationPortfolioId\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const DELETE_PORTFOLIO_RATING_NEWS = gql`\n mutation DeleteRatingNews(\n $artifactIdList: [ArtifactId]\n $portfolioId: ObjectIdType\n $selectedAll: Boolean\n ) {\n deleteRatingNews(\n artifactIdList: $artifactIdList\n portfolioId: $portfolioI\n selectedAll: $selectedAll\n ) {\n message\n }\n }\n`;\n\n/**\n * RESEARCH\n */\n\nexport const ADD_RESEARCH_ITEMS = gql`\n mutation addResearches($artifactIdList: [ArtifactId], $portfolioId: ObjectIdType) {\n addResearches(artifactIdList: $artifactIdList, portfolioId: $portfolioId) {\n researches {\n artifactId\n language\n title\n addedDate\n publicationDate\n }\n }\n }\n`;\n\nexport const COPY_RESEARCHES = gql`\n mutation copyResearches(\n $portfolioId: ObjectIdType\n $artifactIds: [String]\n $sourcePortfolioId: ObjectIdType\n ) {\n copyResearches(\n portfolioId: $portfolioId\n artifactIds: $artifactIds\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n researches {\n artifactId\n language\n title\n addedDate\n publicationDate\n }\n }\n }\n`;\n\nexport const COPY_ALL_RESEARCHES = gql`\n mutation copyResearches($portfolioId: ObjectIdType, $sourcePortfolioId: ObjectIdType) {\n copyResearches(portfolioId: $portfolioId, sourcePortfolioId: $sourcePortfolioId) {\n message\n researches {\n artifactId\n language\n title\n addedDate\n publicationDate\n }\n }\n }\n`;\n\nexport const MOVE_RESEARCHES = gql`\n mutation moveResearches(\n $destinationPortfolioId: ObjectIdType\n $artifactIds: [String]\n $sourcePortfolioId: ObjectIdType\n ) {\n moveResearches(\n destinationPortfolioId: $destinationPortfolioId\n artifactIds: $artifactIds\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const MOVE_ALL_RESEARCHES = gql`\n mutation moveResearches($destinationPortfolioId: ObjectIdType, $sourcePortfolioId: ObjectIdType) {\n moveResearches(\n destinationPortfolioId: $destinationPortfolioId\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const DELETE_RESEARCH_ITEMS = gql`\n mutation deleteResearches(\n $artifactIdList: [ArtifactId]\n $portfolioId: ObjectIdType\n $selectedAll: Boolean\n ) {\n deleteResearches(\n artifactIdList: $artifactIdList\n portfolioId: $portfolioId\n selectedAll: $selectedAll\n ) {\n message\n }\n }\n`;\n\n/**\n * EVENTS\n */\n\nexport const ADD_EVENTS = gql`\n mutation AddEvents($portfolioId: ObjectIdType, $artifactIdList: [ArtifactId]) {\n addEvents(portfolioId: $portfolioId, artifactIdList: $artifactIdList) {\n events {\n artifactId\n title\n eventDate\n addedDate\n category\n industry\n region\n meta {\n externalId\n connectionLink\n userRegistered\n eventType\n eventStatus\n }\n }\n }\n }\n`;\n\nexport const COPY_EVENTS = gql`\n mutation CopyEvents(\n $portfolioId: ObjectIdType\n $eventsIds: [String]\n $sourcePortfolioId: ObjectIdType\n ) {\n copyEvents(\n portfolioId: $portfolioId\n eventsIds: $eventsIds\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const COPY_ALL_EVENTS = gql`\n mutation CopyEvents($portfolioId: ObjectIdType, $sourcePortfolioId: ObjectIdType) {\n copyEvents(portfolioId: $portfolioId, sourcePortfolioId: $sourcePortfolioId) {\n message\n }\n }\n`;\n\nexport const MOVE_EVENTS = gql`\n mutation MoveEvents(\n $destinationPortfolioId: ObjectIdType\n $eventsIds: [String]\n $sourcePortfolioId: ObjectIdType\n ) {\n moveEvents(\n destinationPortfolioId: $destinationPortfolioId\n eventsIds: $eventsIds\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const MOVE_ALL_EVENTS = gql`\n mutation MoveEvents($destinationPortfolioId: ObjectIdType, $sourcePortfolioId: ObjectIdType) {\n moveEvents(\n destinationPortfolioId: $destinationPortfolioId\n sourcePortfolioId: $sourcePortfolioId\n ) {\n message\n }\n }\n`;\n\nexport const DELETE_EVENTS = gql`\n mutation DeleteEvents($eventsIds: [String], $portfolioId: ObjectIdType, $selectedAll: Boolean) {\n deleteEvents(eventsIds: $eventsIds, portfolioId: $portfolioId, selectedAll: $selectedAll) {\n message\n }\n }\n`;\n","import { gql } from '@apollo/client';\n\nexport const GET_PORTFOLIOS_QUERY = gql`\n query Portfolios($start: Int, $limit: Int, $sort: [SortParam], $filter: FilterParam) {\n portfolios(start: $start, limit: $limit, sort: $sort, filter: $filter) {\n byIsinUpload\n createdDate\n description\n id\n portfolioType\n isDedicated\n activity\n itemsTypeCount {\n issuers\n issues\n }\n modifiedDate\n name\n noOfItems {\n entities\n instruments\n funds\n ratingNews\n researches\n }\n watchlistEnabled\n coverage {\n creditReview\n creditRating\n esg\n }\n }\n total\n }\n`;\n\nexport const GET_PORTFOLIO_QUERY = gql`\n query Portfolio($id: ObjectIdType) {\n portfolio(id: $id) {\n byIsinUpload\n createdDate\n description\n id\n portfolioType\n isDedicated\n activity\n itemsTypeCount {\n issuers\n issues\n }\n modifiedDate\n name\n noOfItems {\n funds\n entities\n instruments\n ratingNews\n researches\n events\n uploads\n }\n watchlistEnabled\n coverage {\n creditReview\n creditRating\n esg\n }\n statistics {\n regions {\n name\n count\n }\n subregions {\n name\n count\n }\n industries {\n name\n count\n }\n }\n summary {\n lastAdded {\n artifactId\n addedDate\n type\n name\n country\n isin\n }\n latestNews {\n artifactId\n title\n type\n publicationDate\n }\n }\n }\n }\n`;\n\nexport const GET_ENTITIES_QUERY = gql`\n query PortfolioItems(\n $portfolioId: ObjectIdType\n $start: Int\n $limit: Int\n $sort: [SortParam]\n $requestedTab: RequestedEntitiesTab\n $filter: EntitiesFilter\n ) {\n totalPortfolioItems(portfolioId: $portfolioId, requestedTab: $requestedTab, filter: $filter)\n portfolioItems(\n portfolioId: $portfolioId\n start: $start\n limit: $limit\n sort: $sort\n requestedTab: $requestedTab\n filter: $filter\n ) {\n module\n name\n artifactId\n addedDate\n id\n sector\n region\n subregion\n industry\n countryCode\n reportedWeight\n meta {\n demandType\n storefrontHasLicence\n storefrontPurchased\n storefrontOldScore\n storefrontRatingType\n storefrontRatingOutlook\n storefrontScoreUpdate\n esgPurchased\n esgRequestState\n esgCustomScore\n esgOldTotalScore\n esgScoreUpdate\n esgSentifiHasScore\n esgSentifiHasCompany\n esgSentifiHasPermission\n esgSentifiRequestState\n sigRequested\n sigOldScore\n sigScoreUpdate\n sigMonitoring\n sigPOD\n sigPODDefinition\n sigCountryRiskAssessment\n artifactIdType\n storefrontSubscriptionType\n sigSubscriptionType\n esgSubscriptionType\n sigCity\n sigPostcode\n sigAddress\n }\n scores {\n creditReview\n creditRating\n creditRatingShortTermRating\n esgTotal\n esgEnvironment\n esgSocial\n esgGovernance\n sentifi {\n esgScore\n eScore\n sScore\n gScore\n status\n }\n cstOrderly {\n climateLoss\n physicalRiskLoss\n transitionRiskLoss\n }\n cstDisorderly {\n climateLoss\n physicalRiskLoss\n transitionRiskLoss\n }\n cstHotHouse {\n climateLoss\n physicalRiskLoss\n transitionRiskLoss\n }\n }\n activity {\n esg\n creditReview\n creditRating\n }\n }\n }\n`;\n\nexport const GET_ENTITIES_QUERY_BY_ARTIFACT_ID = gql`\n query PortfolioItems($artifactIds: [String], $start: Int, $limit: Int, $sort: [SortParam]) {\n totalPortfolioItems(portfolioId: $portfolioId, requestedTab: $requestedTab, filter: $filter)\n portfolioItems(artifactIds: $artifactIds, start: $start, limit: $limit, sort: $sort) {\n module\n name\n addedDate\n id\n sector\n region\n subregion\n industry\n countryCode\n reportedWeight\n meta {\n demandType\n storefrontHasLicence\n storefrontPurchased\n storefrontOldScore\n storefrontScoreUpdate\n esgPurchased\n esgRequestState\n esgCustomScore\n esgOldTotalScore\n esgScoreUpdate\n sigRequested\n sigOldScore\n sigScoreUpdate\n sigMonitoring\n sigPOD\n sigPODDefinition\n sigCountryRiskAssessment\n artifactIdType\n }\n scores {\n creditReview\n creditRating\n esgTotal\n esgEnvironment\n esgSocial\n esgGovernance\n }\n activity {\n esg\n creditReview\n creditRating\n }\n }\n }\n`;\n\nexport const GET_ENTITY_QUERY = gql`\n query PortfolioItem($id: String) {\n portfolioItem(id: $id) {\n module\n name\n artifactId\n addedDate\n id\n sector\n region\n subregion\n industry\n countryCode\n reportedWeight\n meta {\n demandType\n storefrontHasLicence\n storefrontPurchased\n esgPurchased\n esgRequestState\n esgCustomScore\n sigRequested\n sigOldScore\n sigScoreUpdate\n sigMonitoring\n sigPOD\n sigPODDefinition\n sigCountryRiskAssessment\n artifactIdType\n }\n scores {\n creditReview\n creditRating\n esgTotal\n esgEnvironment\n esgSocial\n esgGovernance\n }\n activity {\n esg\n creditReview\n creditRating\n }\n }\n }\n`;\n\nexport const GET_INSTRUMENTS_QUERY = gql`\n query PortfolioInstruments(\n $portfolioId: ObjectIdType\n $start: Int\n $limit: Int\n $sort: [SortParam]\n $filter: InstrumentsFilter\n ) {\n totalInstruments(portfolioId: $portfolioId, filter: $filter)\n instruments(\n portfolioId: $portfolioId\n start: $start\n limit: $limit\n sort: $sort\n filter: $filter\n ) {\n id\n name\n date\n volume\n artifactId\n isin\n currencyCode\n entityId\n entityName\n addedDate\n meta {\n demandType\n available\n hasLicence\n rating\n ratingType\n ratingDate\n }\n coupon {\n artifactId\n couponPercent\n maturityDate\n maturityPerpetualFlag\n }\n }\n }\n`;\n\nexport const GET_FUNDS_QUERY = gql`\n query fund(\n $portfolioId: ObjectIdType\n $start: Int\n $limit: Int\n $sort: [SortParam]\n $filter: FundsFilter\n ) {\n fund(portfolioId: $portfolioId, start: $start, limit: $limit, sort: $sort, filter: $filter) {\n name\n peergroupName\n isin\n rank\n rating\n ratingPoints\n returnValue\n risk\n isAif\n isQualitative\n }\n }\n`;\n\nexport const GET_RATING_NEWS_QUERY = gql`\n query PortfolioRatingNews(\n $portfolioId: ObjectIdType\n $start: Int\n $limit: Int\n $sort: [SortParam]\n ) {\n ratingNews(portfolioId: $portfolioId, start: $start, limit: $limit, sort: $sort) {\n artifactId\n language\n title\n addedDate\n publicationDate\n }\n }\n`;\n\nexport const GET_RESEARCH_QUERY = gql`\n query PortfolioResearchQuery(\n $portfolioId: ObjectIdType\n $language: Language\n $start: Int\n $limit: Int\n $sort: [SortParam]\n ) {\n researches(\n portfolioId: $portfolioId\n language: $language\n start: $start\n limit: $limit\n sort: $sort\n ) {\n artifactId\n language\n title\n addedDate\n publicationDate\n }\n }\n`;\n\nexport const GET_EVENTS_QUERY = gql`\n query PortfolioEvents(\n $portfolioId: ObjectIdType\n $start: Int\n $limit: Int\n $sort: [SortParam]\n $filter: EventFilter\n ) {\n events(portfolioId: $portfolioId, start: $start, limit: $limit, sort: $sort, filter: $filter) {\n id\n artifactId\n title\n eventDate\n addedDate\n category\n industry\n region\n meta {\n externalId\n connectionLink\n userRegistered\n eventType\n eventStatus\n }\n }\n }\n`;\n\nexport const GET_UPLOADS_QUERY = gql`\n query PortfolioUploads($portfolioId: ObjectIdType, $start: Int, $limit: Int, $sort: [SortParam]) {\n uploadHistory(portfolioId: $portfolioId, start: $start, limit: $limit, sort: $sort) {\n id\n userId\n fileName\n uploadType\n itemsType\n uploadStatus\n createdDate\n portfolioId\n link\n errorsLink\n errorReason\n results {\n total\n instrumentsFound\n totalInstruments\n esgFound\n creditRatingFound\n creditReviewFound\n uploadedItems\n validationErrors\n }\n }\n }\n`;\n","import { useQuery } from '@apollo/client';\nimport {\n Entities,\n Instruments,\n Research,\n PortfolioEntity,\n PortfolioItems,\n PortfolioResponse,\n Portfolios,\n Events,\n FiltersData,\n Funds,\n RequestTab,\n} from 'modules/common/PortfolioManager/types';\nimport { SortParam } from 'shared/types/dataTable';\nimport { ArtifactId, PortfolioItem } from 'shared/types/portfolios';\nimport { EventFilters } from 'shared/types/eventFilter';\nimport { makeMutation } from '../utils';\nimport { RatingNews, Uploads } from '../../PortfolioManager/types';\nimport {\n ADD_PORTFOLIO_ITEM,\n COPY_PORTFOLIO_ITEMS,\n COPY_ALL_PORTFOLIO_ITEMS,\n CREATE_PORTFOLIO,\n UPDATE_PORTFOLIO,\n DELETE_PORTFOLIOS,\n DELETE_ENTITIES,\n MOVE_PORTFOLIO_ITEMS,\n MOVE_ALL_PORTFOLIO_ITEMS,\n MOVE_RESEARCHES,\n COPY_RESEARCHES,\n COPY_ALL_RESEARCHES,\n ADD_RESEARCH_ITEMS,\n DELETE_RESEARCH_ITEMS,\n ADD_INSTRUMENTS,\n DELETE_INSTRUMENTS,\n COPY_INSTRUMENTS,\n COPY_ALL_INSTRUMENTS,\n MOVE_INSTRUMENTS,\n ADD_PORTFOLIO_RATING_NEWS,\n COPY_PORTFOLIO_RATING_NEWS,\n COPY_ALL_PORTFOLIO_RATING_NEWS,\n MOVE_PORTFOLIO_RATING_NEWS,\n MOVE_ALL_PORTFOLIO_RATING_NEWS,\n DELETE_PORTFOLIO_RATING_NEWS,\n ADD_EVENTS,\n COPY_EVENTS,\n COPY_ALL_EVENTS,\n MOVE_EVENTS,\n DELETE_EVENTS,\n MOVE_ALL_INSTRUMENTS,\n MOVE_ALL_RESEARCHES,\n MOVE_ALL_EVENTS,\n MOVE_FUNDS,\n ADD_FUNDS,\n COPY_FUNDS,\n COPY_ALL_FUNDS,\n MOVE_ALL_FUNDS,\n DELETE_FUNDS,\n TOGGLE_SIG_MONITORING,\n DELETE_UPLOAD,\n} from './mutations';\nimport {\n GET_ENTITIES_QUERY,\n GET_ENTITIES_QUERY_BY_ARTIFACT_ID,\n GET_ENTITY_QUERY,\n GET_EVENTS_QUERY,\n GET_FUNDS_QUERY,\n GET_INSTRUMENTS_QUERY,\n GET_PORTFOLIOS_QUERY,\n GET_PORTFOLIO_QUERY,\n GET_RATING_NEWS_QUERY,\n GET_RESEARCH_QUERY,\n GET_UPLOADS_QUERY,\n} from './queries';\n\n/* ******************************************************************** */\n/* FETCH FUNCTIONS */\n/* ******************************************************************** */\n\nexport const useFetchPortfolios = (\n start = 0,\n limit = 20,\n sort?: SortParam[],\n filter?: FiltersData,\n) =>\n useQuery<Portfolios>(GET_PORTFOLIOS_QUERY, {\n variables: { start, limit, sort, filter },\n });\n\nexport const useFetchPortfolio = (id: string) =>\n useQuery<PortfolioResponse>(GET_PORTFOLIO_QUERY, { variables: { id } });\n\nexport const useFetchPortfolioItems = (\n portfolioId: string,\n start = 0,\n limit = 20,\n sort?: SortParam[],\n requestedTab?: RequestTab,\n filter?: FiltersData,\n) =>\n useQuery<PortfolioItems<Entities>>(GET_ENTITIES_QUERY, {\n variables: { portfolioId, start, limit, sort, requestedTab, filter },\n });\n\nexport const useFetchPortfolioItemsByArtifactId = (\n artifactId: string,\n start = 0,\n limit = 1,\n sort?: SortParam[],\n) =>\n useQuery<PortfolioItems<Entities>>(GET_ENTITIES_QUERY_BY_ARTIFACT_ID, {\n variables: { artifactIds: [artifactId], start, limit, sort },\n });\n\nexport const useFetchPortfolioItem = (id: string) =>\n useQuery<PortfolioEntity>(GET_ENTITY_QUERY, { variables: { id } });\n\nexport const useFetchPortfolioInstruments = (\n portfolioId: string,\n start = 0,\n limit = 20,\n sort?: SortParam[],\n filter?: FiltersData,\n) =>\n useQuery<PortfolioItems<Instruments>>(GET_INSTRUMENTS_QUERY, {\n variables: { portfolioId, start, limit, sort, filter },\n });\n\nexport const useFetchPortfolioFunds = (\n portfolioId: string,\n start = 0,\n limit = 20,\n sort?: SortParam[],\n filter?: FiltersData,\n) =>\n useQuery<PortfolioItems<Funds>>(GET_FUNDS_QUERY, {\n variables: { portfolioId, start, limit, sort, filter },\n });\n\nexport const useFetchPortfolioRatingNews = (\n portfolioId: string,\n start = 0,\n limit = 20,\n sort?: SortParam[],\n) =>\n useQuery<PortfolioItems<RatingNews>>(GET_RATING_NEWS_QUERY, {\n variables: { portfolioId, start, limit, sort },\n });\n\nexport const useFetchPortfolioResearch = (\n portfolioId: string,\n language = 'en',\n start = 0,\n limit = 20,\n sort?: SortParam[],\n) =>\n useQuery<PortfolioItems<Research>>(GET_RESEARCH_QUERY, {\n variables: { portfolioId, language, start, limit, sort },\n });\n\nexport const useFetchPortfolioEvents = (\n portfolioId: string,\n start = 0,\n limit = 20,\n sort?: SortParam[],\n filter?: EventFilters,\n) =>\n useQuery<PortfolioItems<Events>>(GET_EVENTS_QUERY, {\n variables: { portfolioId, start, limit, sort, filter },\n });\n\nexport const useFetchPortfolioUploads = (\n portfolioId: string,\n start = 0,\n limit = 20,\n sort?: SortParam[],\n) =>\n useQuery<PortfolioItems<Uploads>>(GET_UPLOADS_QUERY, {\n variables: { portfolioId, start, limit, sort },\n });\n\n/* ******************************************************************** */\n/* ADD ITEMS FUNCTIONS */\n/* ******************************************************************** */\n\nconst useAddEntities = makeMutation<{\n portfolioId: string;\n artifactIdList: ArtifactId[];\n}>(ADD_PORTFOLIO_ITEM);\n\nconst useAddInstruments = makeMutation<{\n portfolioId: string;\n artifactIdList: ArtifactId[];\n}>(ADD_INSTRUMENTS);\n\nconst useAddFunds = makeMutation<{\n portfolioId: string;\n artifactIdList: ArtifactId[];\n}>(ADD_FUNDS);\n\nexport const useAddRatingNews = makeMutation<{\n portfolioId: string;\n artifactIdList: ArtifactId[];\n}>(ADD_PORTFOLIO_RATING_NEWS);\n\nexport const useAddToResearch = makeMutation<{\n artifactIdList: ArtifactId[];\n portfolioId: string;\n}>(ADD_RESEARCH_ITEMS);\n\nexport const useAddEvents = makeMutation<{\n portfolioId: string;\n artifactIdList: ArtifactId[];\n}>(ADD_EVENTS);\n\nexport const useAddToPortfolio = (itemType: PortfolioItem) => {\n const addEntities = useAddEntities();\n const addInstruments = useAddInstruments();\n const addFunds = useAddFunds();\n const addToResearch = useAddToResearch();\n const addRatingNews = useAddRatingNews();\n const addEvents = useAddEvents();\n\n if (itemType === 'INSTRUMENT' || itemType === 'ISSUE') {\n return addInstruments;\n }\n\n if (itemType === 'FUND') {\n return addFunds;\n }\n\n if (itemType === 'RATING_NEWS' || itemType === 'MONITORING_NOTES') {\n return addRatingNews;\n }\n\n if (itemType === 'RESEARCH' || itemType === 'COMMENTARY' || itemType === 'COMPANY_NEWS') {\n return addToResearch;\n }\n\n if (itemType === 'EVENT') {\n return addEvents;\n }\n return addEntities;\n};\n\n/* ******************************************************************** */\n/* COPY ITEMS FUNCTIONS */\n/* ******************************************************************** */\n\nexport const useCopyEntities = makeMutation<{\n portfolioId: string;\n portfolioItemsIds: string[];\n sourcePortfolioId: string;\n}>(COPY_PORTFOLIO_ITEMS);\n\nexport const useCopyInstruments = makeMutation<{\n instrumentsIds: string[];\n portfolioId: string;\n sourcePortfolioId: string;\n}>(COPY_INSTRUMENTS);\n\nexport const useCopyFunds = makeMutation<{\n isins: string[];\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n}>(COPY_FUNDS);\n\nexport const useCopyRatingNews = makeMutation<{\n artifactIds: string[];\n portfolioId: string;\n sourcePortfolioId: string;\n}>(COPY_PORTFOLIO_RATING_NEWS);\n\nexport const useCopyResearchItems = makeMutation<{\n portfolioId: string;\n artifactIds: string[];\n sourcePortfolioId: string;\n}>(COPY_RESEARCHES);\n\nexport const useCopyEvents = makeMutation<{\n portfolioId: string;\n eventsIds: string[];\n sourcePortfolioId: string;\n}>(COPY_EVENTS);\n\ntype CopyVariables = {\n portfolioId: string;\n itemIds: string[];\n sourcePortfolioId: string;\n};\n\nexport const useCopyPortfolioItems = (itemType: PortfolioItem) => {\n const copyEntities = useCopyEntities();\n const copyInstruments = useCopyInstruments();\n const copyFunds = useCopyFunds();\n const copyRatingNews = useCopyRatingNews();\n const copyResearches = useCopyResearchItems();\n const copyEvents = useCopyEvents();\n\n if (itemType === 'INSTRUMENT' || itemType === 'ISSUE') {\n return ({ portfolioId, itemIds, sourcePortfolioId }: CopyVariables) =>\n copyInstruments({ portfolioId, instrumentsIds: itemIds, sourcePortfolioId });\n }\n\n if (itemType === 'FUND') {\n return ({ portfolioId, itemIds, sourcePortfolioId }: CopyVariables) =>\n copyFunds({ destinationPortfolioId: portfolioId, isins: itemIds, sourcePortfolioId });\n }\n\n if (itemType === 'RATING_NEWS' || itemType === 'MONITORING_NOTES') {\n return ({ portfolioId, itemIds, sourcePortfolioId }: CopyVariables) =>\n copyRatingNews({ portfolioId, artifactIds: itemIds, sourcePortfolioId });\n }\n\n if (itemType === 'RESEARCH' || itemType === 'COMMENTARY' || itemType === 'COMPANY_NEWS') {\n return ({ portfolioId, itemIds, sourcePortfolioId }: CopyVariables) =>\n copyResearches({ portfolioId, artifactIds: itemIds, sourcePortfolioId });\n }\n\n if (itemType === 'EVENT') {\n return ({ portfolioId, itemIds, sourcePortfolioId }: CopyVariables) =>\n copyEvents({ portfolioId, eventsIds: itemIds, sourcePortfolioId });\n }\n\n return ({ portfolioId, itemIds, sourcePortfolioId }: CopyVariables) =>\n copyEntities({ portfolioId, portfolioItemsIds: itemIds, sourcePortfolioId });\n};\n\n/* ******************************************************************** */\n/* COPY ALL ITEMS FUNCTIONS */\n/* ******************************************************************** */\n\nexport const useCopyAllEntities = makeMutation<{\n portfolioId: string;\n sourcePortfolioId: string;\n}>(COPY_ALL_PORTFOLIO_ITEMS);\n\nexport const useCopyAllInstruments = makeMutation<{\n portfolioId: string;\n sourcePortfolioId: string;\n}>(COPY_ALL_INSTRUMENTS);\n\nexport const useCopyAllFunds = makeMutation<{\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n}>(COPY_ALL_FUNDS);\n\nexport const useCopyAllRatingNews = makeMutation<{\n portfolioId: string;\n sourcePortfolioId: string;\n}>(COPY_ALL_PORTFOLIO_RATING_NEWS);\n\nexport const useCopyAllResearchItems = makeMutation<{\n portfolioId: string;\n sourcePortfolioId: string;\n}>(COPY_ALL_RESEARCHES);\n\nexport const useCopyAllEvents = makeMutation<{\n portfolioId: string;\n sourcePortfolioId: string;\n}>(COPY_ALL_EVENTS);\n\ntype CopyAllVariables = {\n portfolioId: string;\n sourcePortfolioId: string;\n};\n\nexport const useCopyAllPortfolioItems = (itemType: PortfolioItem) => {\n const copyAllEntities = useCopyAllEntities();\n const copyAllInstruments = useCopyAllInstruments();\n const copyAllFunds = useCopyAllFunds();\n const copyAllRatingNews = useCopyAllRatingNews();\n const copyAllResearches = useCopyAllResearchItems();\n const copyAllEvents = useCopyAllEvents();\n\n if (itemType === 'INSTRUMENT' || itemType === 'ISSUE') {\n return ({ portfolioId, sourcePortfolioId }: CopyAllVariables) =>\n copyAllInstruments({ portfolioId, sourcePortfolioId });\n }\n\n if (itemType === 'FUND') {\n return ({ portfolioId, sourcePortfolioId }: CopyAllVariables) =>\n copyAllFunds({ destinationPortfolioId: portfolioId, sourcePortfolioId });\n }\n\n if (itemType === 'RATING_NEWS' || itemType === 'MONITORING_NOTES') {\n return ({ portfolioId, sourcePortfolioId }: CopyAllVariables) =>\n copyAllRatingNews({ portfolioId, sourcePortfolioId });\n }\n\n if (itemType === 'RESEARCH' || itemType === 'COMMENTARY' || itemType === 'COMPANY_NEWS') {\n return ({ portfolioId, sourcePortfolioId }: CopyAllVariables) =>\n copyAllResearches({ portfolioId, sourcePortfolioId });\n }\n\n if (itemType === 'EVENT') {\n return ({ portfolioId, sourcePortfolioId }: CopyAllVariables) =>\n copyAllEvents({ portfolioId, sourcePortfolioId });\n }\n\n return ({ portfolioId, sourcePortfolioId }: CopyAllVariables) =>\n copyAllEntities({ portfolioId, sourcePortfolioId });\n};\n\n/* ******************************************************************** */\n/* MOVE ITEMS FUNCTIONS */\n/* ******************************************************************** */\n\nexport const useMoveEntities = makeMutation<{\n portfolioItemsIds: string[];\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n}>(MOVE_PORTFOLIO_ITEMS);\n\nexport const useMoveInstruments = makeMutation<{\n instrumentsIds: string[];\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n}>(MOVE_INSTRUMENTS);\n\nexport const useMoveFunds = makeMutation<{\n isins: string[];\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n}>(MOVE_FUNDS);\n\nexport const useMoveRatingNews = makeMutation<{\n destinationPortfolioId: string;\n artifactIds: string[];\n sourcePortfolioId: string;\n}>(MOVE_PORTFOLIO_RATING_NEWS);\n\nexport const useMoveResearchItems = makeMutation<{\n artifactIds: string[];\n destinationPortfolioId: string;\n sourcePortfolioId?: string;\n}>(MOVE_RESEARCHES);\n\nexport const useMoveEvents = makeMutation<{\n destinationPortfolioId: string;\n eventsIds: string[];\n sourcePortfolioId: string;\n}>(MOVE_EVENTS);\n\ntype MoveVariables = {\n destinationPortfolioId: string;\n itemIds: string[];\n sourcePortfolioId: string;\n};\n\nexport const useMovePortfolioItems = (itemType: PortfolioItem) => {\n const moveEntities = useMoveEntities();\n const moveInstruments = useMoveInstruments();\n const moveFunds = useMoveFunds();\n const moveRatingNews = useMoveRatingNews();\n const moveResearches = useMoveResearchItems();\n const moveEvents = useMoveEvents();\n\n if (itemType === 'INSTRUMENT' || itemType === 'ISSUE') {\n return ({ destinationPortfolioId, itemIds, sourcePortfolioId }: MoveVariables) =>\n moveInstruments({ destinationPortfolioId, instrumentsIds: itemIds, sourcePortfolioId });\n }\n\n if (itemType === 'FUND') {\n return ({ destinationPortfolioId, itemIds, sourcePortfolioId }: MoveVariables) =>\n moveFunds({ destinationPortfolioId, isins: itemIds, sourcePortfolioId });\n }\n\n if (itemType === 'RATING_NEWS' || itemType === 'MONITORING_NOTES') {\n return ({ destinationPortfolioId, itemIds, sourcePortfolioId }: MoveVariables) =>\n moveRatingNews({ destinationPortfolioId, artifactIds: itemIds, sourcePortfolioId });\n }\n\n if (itemType === 'RESEARCH' || itemType === 'COMMENTARY' || itemType === 'COMPANY_NEWS') {\n return ({ destinationPortfolioId, itemIds, sourcePortfolioId }: MoveVariables) =>\n moveResearches({ artifactIds: itemIds, destinationPortfolioId, sourcePortfolioId });\n }\n\n if (itemType === 'EVENT') {\n return ({ destinationPortfolioId, itemIds, sourcePortfolioId }: MoveVariables) =>\n moveEvents({ destinationPortfolioId, eventsIds: itemIds, sourcePortfolioId });\n }\n\n return ({ destinationPortfolioId, itemIds, sourcePortfolioId }: MoveVariables) =>\n moveEntities({ destinationPortfolioId, portfolioItemsIds: itemIds, sourcePortfolioId });\n};\n\n/* ******************************************************************** */\n/* MOVE ALL ITEMS FUNCTIONS */\n/* ******************************************************************** */\n\nexport const useMoveAllEntities = makeMutation<{\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n}>(MOVE_ALL_PORTFOLIO_ITEMS);\n\nexport const useMoveAllInstruments = makeMutation<{\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n}>(MOVE_ALL_INSTRUMENTS);\n\nexport const useMoveAllFunds = makeMutation<{\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n}>(MOVE_ALL_FUNDS);\n\nexport const useMoveAllRatingNews = makeMutation<{\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n}>(MOVE_ALL_PORTFOLIO_RATING_NEWS);\n\nexport const useMoveAllResearchItems = makeMutation<{\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n}>(MOVE_ALL_RESEARCHES);\n\nexport const useMoveAllEvents = makeMutation<{\n destinationPortfolioId: string;\n sourcePortfolioId?: string;\n}>(MOVE_ALL_EVENTS);\n\ntype MoveAllVariables = {\n destinationPortfolioId: string;\n sourcePortfolioId: string;\n};\n\nexport const useMoveAllPortfolioItems = (itemType?: PortfolioItem) => {\n const moveAllEntities = useMoveAllEntities();\n const moveAllInstruments = useMoveAllInstruments();\n const moveAllFunds = useMoveAllFunds();\n const moveAllRatingNews = useMoveAllRatingNews();\n const moveAllResearches = useMoveAllResearchItems();\n const moveAllEvents = useMoveAllEvents();\n\n if (itemType === 'INSTRUMENT' || itemType === 'ISSUE') {\n return ({ destinationPortfolioId, sourcePortfolioId }: MoveAllVariables) =>\n moveAllInstruments({ destinationPortfolioId, sourcePortfolioId });\n }\n\n if (itemType === 'FUND') {\n return ({ destinationPortfolioId, sourcePortfolioId }: MoveAllVariables) =>\n moveAllFunds({ destinationPortfolioId, sourcePortfolioId });\n }\n\n if (itemType === 'RATING_NEWS' || itemType === 'MONITORING_NOTES') {\n return ({ destinationPortfolioId, sourcePortfolioId }: MoveAllVariables) =>\n moveAllRatingNews({ destinationPortfolioId, sourcePortfolioId });\n }\n\n if (itemType === 'RESEARCH' || itemType === 'COMMENTARY' || itemType === 'COMPANY_NEWS') {\n return ({ destinationPortfolioId, sourcePortfolioId }: MoveAllVariables) =>\n moveAllResearches({ destinationPortfolioId, sourcePortfolioId });\n }\n\n if (itemType === 'EVENT') {\n return ({ destinationPortfolioId, sourcePortfolioId }: MoveAllVariables) =>\n moveAllEvents({ destinationPortfolioId, sourcePortfolioId });\n }\n\n return ({ destinationPortfolioId, sourcePortfolioId }: MoveAllVariables) =>\n moveAllEntities({ destinationPortfolioId, sourcePortfolioId });\n};\n/* ******************************************************************** */\n/* DELETE ITEMS FUNCTIONS */\n/* ******************************************************************** */\n\nexport const useDeleteEntities = makeMutation<{\n portfolioItemsIds: string[];\n portfolioId: string;\n selectedAll: boolean;\n}>(DELETE_ENTITIES);\n\nexport const useDeleteInstruments = makeMutation<{\n instrumentsIds: string[];\n portfolioId: string;\n selectedAll: boolean;\n}>(DELETE_INSTRUMENTS);\n\nexport const useDeleteFunds = makeMutation<{\n isins: string[];\n portfolioId: string;\n selectedAll: boolean;\n}>(DELETE_FUNDS);\n\nexport const useDeleteRatingNews = makeMutation<{\n artifactIdList: ArtifactId[];\n portfolioId: string;\n selectedAll: boolean;\n}>(DELETE_PORTFOLIO_RATING_NEWS);\n\nexport const useDeleteResearchItems = makeMutation<{\n artifactIdList: ArtifactId[];\n portfolioId: string;\n selectedAll: boolean;\n}>(DELETE_RESEARCH_ITEMS);\n\nexport const useDeleteEvents = makeMutation<{\n eventsIds: string[];\n portfolioId: string;\n selectedAll: boolean;\n}>(DELETE_EVENTS);\n\nexport const useDeletePortfolios = makeMutation<{\n portfolioIds: string[];\n}>(DELETE_PORTFOLIOS);\n\nexport const useDeleteUpload = makeMutation<{\n uploadsIds: string[];\n portfolioId: string;\n}>(DELETE_UPLOAD);\n\n/* ******************************************************************** */\n/* OTHER FUNCTIONS */\n/* ******************************************************************** */\n\nexport const useCreatePortfolio = makeMutation<{\n name: string;\n description?: string;\n}>(CREATE_PORTFOLIO);\n\nexport const useUpdatePortfolio = makeMutation<{\n portfolioId: string;\n portfolioName?: string;\n portfolioDescription?: string;\n watchlistEnabled?: boolean;\n}>(UPDATE_PORTFOLIO);\n\nexport const useToggleSigMonitoring = makeMutation<{\n portfolioId: string;\n artifactId: string;\n}>(TOGGLE_SIG_MONITORING);\n","import { useTranslation } from 'react-i18next';\nimport { tableRefreshReasonTypes as refreshReasons } from 'shared/constants/tableRefreshReasonTypes';\nimport { ItemType, PortfolioItem, SelectedEntities } from 'shared/types/portfolios';\nimport {\n useAddToPortfolio,\n useCopyPortfolioItems,\n useCopyAllPortfolioItems,\n useMovePortfolioItems,\n useMoveAllPortfolioItems,\n} from '../GraphQL/portfolios/hooks';\n\nexport const useVariantAction = (\n itemsData: SelectedEntities,\n itemType: PortfolioItem,\n sourcePortfolioId: string,\n) => {\n const { t } = useTranslation();\n const addToPortfolio = useAddToPortfolio(itemType);\n const copyPortfolioItems = useCopyPortfolioItems(itemType);\n const copyAllPortfolioItems = useCopyAllPortfolioItems(itemType);\n const movePortfolioItems = useMovePortfolioItems(itemType);\n const moveAllPortfolioItems = useMoveAllPortfolioItems(itemType);\n\n const result = {\n add: {\n title: t('TOOLBAR.ADD_TO_PORTFOLIO'),\n submit: t('ADD'),\n itemSubmitSuccess: t('PORTFOLIO.ITEMS_ADDED_TO_NEW_PORTFOLIO'),\n refreshSettings: { refresh: true, reason: refreshReasons.ADDED },\n action: (portfolioId: string) =>\n addToPortfolio({\n portfolioId,\n artifactIdList: Object.values(itemsData.itemIds || itemsData.items).map(id => ({\n value: id,\n type: itemsData.type ?? ItemType.UNKNOWN,\n })),\n }),\n },\n copy: {\n title: t('TOOLBAR.COPY_TO_PORTFOLIO'),\n submit: t('COPY'),\n itemSubmitSuccess: t('PORTFOLIO.ITEMS_COPIED_TO_NEW_PORTFOLIO'),\n refreshSettings: { refresh: false, reason: '' },\n action: (portfolioId: string) =>\n copyPortfolioItems({\n portfolioId,\n itemIds: Object.values(itemsData.itemIds),\n sourcePortfolioId,\n }),\n },\n copy_all: {\n title: t('TOOLBAR.COPY_TO_PORTFOLIO'),\n submit: t('COPY'),\n itemSubmitSuccess: t('PORTFOLIO.ITEMS_COPIED_TO_NEW_PORTFOLIO'),\n refreshSettings: { refresh: false, reason: '' },\n action: (portfolioId: string) =>\n copyAllPortfolioItems({\n portfolioId,\n sourcePortfolioId,\n }),\n },\n move: {\n title: t('TOOLBAR.MOVE_TO_PORTFOLIO'),\n submit: t('MOVE'),\n itemSubmitSuccess: t('PORTFOLIO.ITEMS_MOVED_TO_NEW_PORTFOLIO'),\n refreshSettings: { refresh: true, reason: refreshReasons.MOVED },\n action: (portfolioId: string) =>\n movePortfolioItems({\n destinationPortfolioId: portfolioId,\n itemIds: Object.values(itemsData.itemIds),\n sourcePortfolioId,\n }),\n },\n move_all: {\n title: t('TOOLBAR.MOVE_TO_PORTFOLIO'),\n submit: t('MOVE'),\n itemSubmitSuccess: t('PORTFOLIO.ITEMS_MOVED_TO_NEW_PORTFOLIO'),\n refreshSettings: { refresh: true, reason: refreshReasons.MOVED },\n action: (portfolioId: string) =>\n moveAllPortfolioItems({\n destinationPortfolioId: portfolioId,\n sourcePortfolioId,\n }),\n },\n };\n return result;\n};\n","import React, { useEffect, useState } from 'react';\nimport PropTypes from 'prop-types';\nimport { useTranslation } from 'react-i18next';\nimport Button from '@mui/material/Button';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport DialogTitle from '@mui/material/DialogTitle';\nimport { Typography, Box, Grid, Avatar } from '@mui/material';\nimport makeStyles from '@mui/styles/makeStyles';\nimport LockOpenIcon from '@mui/icons-material/LockOpen';\nimport FormControlLabel from '@mui/material/FormControlLabel';\nimport Checkbox from '@mui/material/Checkbox';\nimport Link from '@mui/material/Link';\nimport format from 'date-fns/format';\nimport addDays from 'date-fns/addDays';\nimport differenceInCalendarDays from 'date-fns/differenceInCalendarDays';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Loader } from 'ui';\nimport { shortDateFormat } from 'shared/constants/dateFormat';\nimport { usePrevious } from 'shared/hooks';\nimport { downloadService } from 'services';\nimport { addNotificationAction } from 'store/notifications/notificationsActions';\n\nimport { getProductById } from '../../selectors/shopSelectors';\n\nconst useStyles = makeStyles(theme => ({\n avatar: {\n width: 200,\n height: 200,\n backgroundColor: theme.palette.primary.contrastText,\n boxShadow: '0 4px 4px 3px rgba(155, 155, 155, 0.3)',\n margin: '0 auto',\n },\n lockOpenIcon: {\n fontSize: 100,\n color: '#0cd4a4',\n fontWeight: 'bold',\n },\n termsLabel: {\n userSelect: 'none',\n lineHeight: 2,\n },\n}));\n\nconst ShopProductTrialModal = ({ open, onClose, onConfirm, data }) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const dispatch = useDispatch();\n\n const watchedProduct = useSelector(getProductById(data.id));\n const isPurchased = usePrevious(data.purchased);\n const termsDocument =\n watchedProduct &&\n watchedProduct.documents &&\n watchedProduct.documents.find(({ name }) => name === 'Terms and conditions.pdf');\n\n const [isSuccess, setIsSuccess] = useState(data.purchased);\n const [isLoading, setIsLoading] = useState(false);\n const [termsChecked, setTermsChecked] = useState(false);\n\n const startDate = new Date();\n const endDate = addDays(startDate, data.trialPeriod);\n\n const handleConfirm = () => {\n setIsLoading(true);\n onConfirm();\n };\n\n const throwFetchError = () =>\n dispatch(\n addNotificationAction({\n variant: 'error',\n message: t('Failed to get terms and conditions. Please try again or contact support.'),\n }),\n );\n\n const downloadTerms = () => {\n downloadService({\n path: `/shop/file-download/${termsDocument.id}/`,\n name: termsDocument.name,\n onError: throwFetchError,\n });\n };\n\n useEffect(() => {\n if (!isPurchased && watchedProduct && watchedProduct.purchased) {\n setIsSuccess(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [watchedProduct]);\n\n return (\n <div>\n <Dialog open={open} onClose={onClose}>\n <DialogTitle>{data.name}</DialogTitle>\n <DialogContent>\n {isSuccess ? (\n <Box width={500} height={400} py={8}>\n <Grid container alignContent=\"center\" justifyContent=\"center\">\n <Grid item>\n <Avatar className={classes.avatar}>\n <LockOpenIcon className={classes.lockOpenIcon} />\n </Avatar>\n <Box mt={4}>\n <Typography variant=\"h6\">{t('Your subscription is active')}</Typography>\n </Box>\n </Grid>\n </Grid>\n </Box>\n ) : (\n <>\n <Box>\n <Typography>{t('Your free trial starts today.')}</Typography>\n </Box>\n\n <Box mt={4}>\n <Typography>\n {t('Subscription:')} <strong>{data.name}</strong>\n </Typography>\n <Typography>\n {t('Start:')} <strong>{format(startDate, shortDateFormat)}</strong>\n </Typography>\n <Typography>\n {t('End:')} <strong>{format(endDate, shortDateFormat)}</strong>\n </Typography>\n <Typography>\n {t('Amount:')}{' '}\n <strong>{differenceInCalendarDays(endDate, startDate)} days</strong>\n </Typography>\n </Box>\n\n <Box mt={4}>\n <Typography>\n {t(\n 'The free trial provides access to the content covered by this subscription except for downloading data, which is deactivated during the period of the free trial. The trial ends automatically, without any further action needed from you.',\n )}\n </Typography>\n </Box>\n <Box mt={4}>\n <Typography>\n {t(\n 'If you would like to prolong the trial or get more information, please contact your personal advisor or the Service Center.',\n )}\n </Typography>\n </Box>\n </>\n )}\n {termsDocument && (\n <Box mt={4}>\n <FormControlLabel\n control={\n <Checkbox\n checked={termsChecked}\n onChange={event => setTermsChecked(event.target.checked)}\n color=\"primary\"\n />\n }\n label={\n <span className={classes.termsLabel}>\n {t('I have read and agree to the ')}\n {/* eslint-disable-next-line jsx-a11y/anchor-is-valid */}\n <Link component=\"button\" variant=\"body1\" onClick={downloadTerms}>\n {t('terms & conditions.')}\n </Link>\n </span>\n }\n />\n </Box>\n )}\n </DialogContent>\n <DialogActions>\n {isSuccess ? (\n <Grid container justifyContent=\"flex-end\">\n <Grid item>\n <Button color=\"primary\" variant=\"contained\" onClick={onClose}>\n {t('Close')}\n </Button>\n </Grid>\n </Grid>\n ) : (\n <>\n <Button onClick={onClose} color=\"primary\" variant=\"outlined\">\n {t('Cancel')}\n </Button>\n {isLoading ? (\n <Box px={2}>\n <Loader />\n </Box>\n ) : (\n <Button\n onClick={handleConfirm}\n color=\"primary\"\n variant=\"contained\"\n autoFocus\n disabled={termsDocument && !termsChecked}\n >\n {t('Confirm')}\n </Button>\n )}\n </>\n )}\n </DialogActions>\n </Dialog>\n </div>\n );\n};\n\nShopProductTrialModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onConfirm: PropTypes.func.isRequired,\n data: PropTypes.shape({\n id: PropTypes.number.isRequired,\n name: PropTypes.string.isRequired,\n trialPeriod: PropTypes.number.isRequired,\n purchased: PropTypes.bool.isRequired,\n }).isRequired,\n};\n\nexport { ShopProductTrialModal };\n","export type AdminTab = {\n path: string;\n name: string;\n};\n\nexport enum AddUserVariants {\n INVITE = 'invite',\n PERMISSIONS = 'permissions',\n}\n\nexport type AddUserVariant = AddUserVariants.INVITE | AddUserVariants.PERMISSIONS;\n\nexport enum UserStatuses {\n INVITED = 'INVITED',\n ACTIVE = 'ACTIVE',\n PENDING = 'PENDING',\n DISABLED = 'DISABLED',\n BLOCKED = 'BLOCKED',\n CONFIRMED = 'CONFIRMED',\n UNCONFIRMED = 'UNCONFIRMED',\n}\n\nexport type UserStatus =\n | UserStatuses.INVITED\n | UserStatuses.ACTIVE\n | UserStatuses.DISABLED\n | UserStatuses.PENDING\n | UserStatuses.BLOCKED\n | UserStatuses.CONFIRMED\n | UserStatuses.UNCONFIRMED;\n\nexport enum RatingStatuses {\n APPROVED = 'APPROVED',\n REVOKED = 'REVOKED',\n INVITED = 'INVITED',\n}\n\nexport type RatingStatus =\n | RatingStatuses.APPROVED\n | RatingStatuses.REVOKED\n | RatingStatuses.INVITED;\nexport enum SubscriberConfirmations {\n BLANK = '',\n SIGNED = 'SIGNED',\n SENT = 'SENT',\n}\n\nexport type SubscriberConfirmation =\n | SubscriberConfirmations.BLANK\n | SubscriberConfirmations.SIGNED\n | SubscriberConfirmations.SENT;\n\nexport enum RatingTypes {\n ISSUE = 'ISSUE',\n ISSUER = 'ISSUER',\n}\n\nexport type RatingType = RatingTypes.ISSUE | RatingTypes.ISSUER;\n\nexport enum ContractTypes {\n SOLICITED = 'ISSUER_SOLICITED',\n REQUESTED = 'INVESTOR_REQUESTED',\n}\n\nexport type ContractType = ContractTypes.SOLICITED | ContractTypes.REQUESTED;\n\nexport type UserRating = {\n entityId: string;\n entityName: string;\n entityType: string;\n};\n\nexport type User = {\n userId: string;\n email: string;\n firstName?: string;\n lastName?: string;\n userStatus: UserStatus;\n newRsrUser?: boolean;\n organisationId?: string;\n organisationName?: string;\n confirmation: SubscriberConfirmation;\n accessibleRatings?: Array<UserRating>;\n approvedRatings?: Array<UserRating>;\n};\n\nexport type Rating = {\n entityId: string;\n ratingId: string;\n entityName: string;\n contractType: ContractType;\n entityType: RatingType;\n ratingType: string;\n numberOfUsers?: number;\n};\n\nexport type RatingUser = {\n userId: string;\n email: string;\n firstName: string;\n lastName: string;\n newRsrUser: boolean;\n organisationId: string;\n organisationName: string;\n userStatus: UserStatus;\n confirmation: SubscriberConfirmation;\n ratingStatus: RatingStatus;\n ratingStatusDate: Date;\n};\n\nexport type UserRatingStatus = {\n userId: string;\n ratingEntityId: string;\n ratingEntityType: string;\n status: RatingStatus;\n statusDate: Date;\n modifiedBy: string;\n modifiedByName?: string;\n modifiedByEmail?: string;\n};\n\nexport type SubscriptionRatingType = 'rsr' | 'psr';\n","module.exports = __webpack_public_path__ + \"static/media/esg-baner.148f1d41.jpg\";","var _circle, _path;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgInfo = function SvgInfo(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"1 1 22 22\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n }, props), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 12,\n cy: 12,\n r: 10\n })), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M12 16v-4M12 8h.01\"\n })));\n};\n\nexport default SvgInfo;","export const cofaceContractStates = {\n active: 'ACTIVE',\n};\n","import { createSelector } from 'reselect';\n\nconst getCreditReview = ({ creditReview }) => creditReview;\n\nexport const getCofaceRequestsAllowed = createSelector(\n getCreditReview,\n ({ cofaceRequestsAllowed }) => cofaceRequestsAllowed,\n);\n\nexport const getCofaceTotalAmount = createSelector(\n getCreditReview,\n ({ cofaceTotalAmount }) => cofaceTotalAmount,\n);\n","module.exports = __webpack_public_path__ + \"static/media/credit-review-free-trial-invitation.5db4edbf.jpg\";","export const columns = [\n {\n name: 'Name',\n label: 'Name',\n options: {\n sortCompare: (obj) => (a, b) => {\n if (a.data && a.data.length > 0 && b.data && b.data.length > 0) {\n if (obj === 'asc') {\n return a.data[0] > b.data[0] ? -1 : 1;\n }\n return b.data[0] > a.data[0] ? -1 : 1;\n }\n return 0;\n },\n },\n },\n];\n","import React, {FC, useEffect, useState} from 'react';\nimport {useTranslation} from 'react-i18next';\nimport {Box, Dialog, Select} from \"@scope/scope-one-ui/core\";\nimport {useToasts} from '@scope/scope-one-ui/core/Messages/context';\nimport {SubscriberConfirmation, SubscriberConfirmations, User} from '../types';\nimport {setSubscriberConfirmation} from '../services/rsrService';\n\ntype SetSubscriberConfirmationProps = {\n user?: User;\n open: boolean;\n onClose: (set: boolean) => void;\n};\n\nexport const SetSubscriberConfirmationModal: FC<SetSubscriberConfirmationProps> = ({open, onClose, user}) => {\n const {t} = useTranslation();\n const {error, success} = useToasts();\n\n const [selectedConfirmation, setSelectedConfirmation] = useState<SubscriberConfirmation>(SubscriberConfirmations.BLANK);\n\n const contractTypes = [\n {value: SubscriberConfirmations.BLANK, label: \"-\"},\n {value: SubscriberConfirmations.SENT, label: t('ADMIN.RSR.CONFIRMATION_SENT')},\n {value: SubscriberConfirmations.SIGNED, label: t('ADMIN.RSR.CONFIRMATION_SIGNED')},\n ];\n\n const handleConfirmationChange = (value: string | number | string[]) => {\n setSelectedConfirmation(value as SubscriberConfirmations);\n };\n\n const setConfirmationHandler = async () => {\n if (user && user.organisationId) {\n try {\n const result = await setSubscriberConfirmation([user.organisationId], selectedConfirmation);\n if (result) {\n success({title: '', content: t('ADMIN.SNACKS.COFIRMATION_SET')});\n }\n } catch (e) {\n error({title: '', content: t('ADMIN.SNACKS.CONFIRMATION_FAILED')});\n }\n } else {\n error({title: '', content: 'User has no organization assigned'})\n }\n onClose(true);\n };\n\n useEffect(() => {\n setSelectedConfirmation(SubscriberConfirmations.BLANK);\n }, [open]);\n\n return (<Dialog\n title='Subscriber Confirmation Status'\n open={open}\n onClose={() => onClose(false)}\n confirmLabel='Submit'\n onConfirm={setConfirmationHandler}\n >\n <Box p={3}>\n <Select\n onChange={handleConfirmationChange}\n value={selectedConfirmation || user?.confirmation || SubscriberConfirmations.BLANK}\n options={contractTypes}\n />\n </Box>\n </Dialog>\n );\n};\n","import React, {FC} from 'react';\nimport Typography from '@mui/material/Typography';\n\nimport {BaseProps} from 'shared/types/base';\nimport {UserStatus, UserStatuses} from '../types';\nimport {Box, StatusBadge} from '@scope/scope-one-ui/core';\nimport {Status} from '@scope/scope-one-ui/core/StatusBadge/StatusBadge.d';\n\n\ntype UserStatusIndicatorProps = {\n status: UserStatus;\n showLabel?: boolean;\n} & BaseProps;\n\nconst UserStatusIndicator: FC<UserStatusIndicatorProps> = ({status}) => {\n\n const statuses: Record<UserStatus, Status> = {\n [UserStatuses.INVITED]: 'INVITED',\n [UserStatuses.ACTIVE]: 'ACTIVE',\n [UserStatuses.DISABLED]: 'DISABLED',\n [UserStatuses.PENDING]: 'PENDING',\n [UserStatuses.BLOCKED]: 'DEACTIVATED',\n [UserStatuses.CONFIRMED] : 'AFFIRMED',\n [UserStatuses.UNCONFIRMED] : 'UNCONFIRMED',\n };\n\n return status ? (\n <Box display='flex' alignItems='center'>\n <StatusBadge status={statuses[status]}/>\n </Box>\n ) : (\n <Typography>-</Typography>\n );\n};\n\nexport default UserStatusIndicator;\n","import React, {FC} from 'react';\nimport {StatusBadge} from \"@scope/scope-one-ui/core\"; \nimport makeStyles from '@mui/styles/makeStyles';\n\nimport {BaseProps} from 'shared/types/base';\nimport {SubscriberConfirmation, SubscriberConfirmations} from '../types';\n\nconst useStyles = makeStyles(theme => ({\n icon: {\n position: 'relative',\n marginRight: theme.spacing(0.5),\n fontSize: 'inherit',\n },\n wrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n}));\n\ntype SubscriberConfirmationIndicatorProps = {\n status: SubscriberConfirmation;\n} & BaseProps;\n\nconst SubscriberConfirmationIndicator: FC<SubscriberConfirmationIndicatorProps> = ({status}) => {\n const classes = useStyles();\n\n return (\n <div className={classes.wrapper}>\n {status === SubscriberConfirmations.SIGNED && <StatusBadge status='SIGNED'/>}\n {status === SubscriberConfirmations.SENT && <StatusBadge status='SENT'/>}\n </div>\n );\n};\n\nexport default SubscriberConfirmationIndicator;\n","var _path, _path2;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgRefreshCw = function SvgRefreshCw(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"refresh-cw_svg__feather refresh-cw_svg__feather-refresh-cw\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M23 4v6h-6M1 20v-6h6\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M3.51 9a9 9 0 0114.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0020.49 15\"\n })));\n};\n\nexport default SvgRefreshCw;","var _path, _circle, _path2;\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nimport React from \"react\";\n\nvar SvgUserPlus = function SvgUserPlus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\",\n className: \"user-plus_svg__feather user-plus_svg__feather-user-plus\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M16 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2\"\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 8.5,\n cy: 7,\n r: 4\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M20 8v6M23 11h-6\"\n })));\n};\n\nexport default SvgUserPlus;","import { useState, useRef, useEffect } from 'react';\nimport { selectedItemsToProductsParser, ratingRequestParser } from 'shared/parsers';\nimport { purchaseTypes } from 'shared/constants/purchaseTypes';\nimport { postOrderMany } from 'services/orders';\nimport { orderTypes } from 'shared/constants/orderTypes';\n\ntype UseInstrumentsRatingRequestProps = {\n onRequested: () => void;\n};\n\nexport const useInstrumentsRatingRequest = ({ onRequested }: UseInstrumentsRatingRequestProps) => {\n const [requestLoading, setRequestLoading] = useState(false);\n const didUnmount = useRef(false);\n\n useEffect(() => {\n return () => {\n didUnmount.current = true;\n };\n }, []);\n\n const requestRating = (items: any) => {\n setRequestLoading(true);\n\n const selectedItems = Object.values(items);\n const filteredRatingRequest = ratingRequestParser(selectedItems);\n\n const products = selectedItemsToProductsParser({\n selected: filteredRatingRequest,\n artifactType: orderTypes.INSTRUMENT,\n frequency: 0,\n purchaseType: purchaseTypes.ONE_TIME,\n });\n\n postOrderMany({ products })\n .then(() => {\n if (!didUnmount.current) {\n if (onRequested) {\n onRequested();\n }\n }\n })\n .finally(() => {\n if (!didUnmount.current) {\n setRequestLoading(false);\n }\n });\n };\n\n return {\n requestLoading,\n requestRating,\n };\n};\n","export const logJSON = json => console.log(JSON.stringify(json, null, 2)); // eslint-disable-line no-console\n","const url = window.location.href;\nconst arr = url.split('/');\nconst path = `${arr[0]}//${arr[2]}/api`;\nconst protocols = {\n http: arr[0],\n websocket: arr[0].replace('http', 'ws'),\n};\n\nexport const API_URL = process.env.NODE_ENV === 'production' ? path : '/api';\nexport const FULL_API_URL = `${protocols.http}//${window.location.host}`;\nexport const WS_API_URL = `${protocols.websocket}//${process.env.REACT_APP_API_HOST ||\n window.location.host}/api/notificationscentre-ws`;\n","import { ratingTypes } from 'shared/constants/ratingTypes';\n\nexport const serviceUrlPrefix = {\n [ratingTypes.CREDIT_RATING]: '',\n [ratingTypes.CREDIT_REVIEW]: '/sig/api',\n [ratingTypes.ESG_IMPACT]: '/esg/api',\n [ratingTypes.SENTIMENT]: '/sentifi',\n};\n","export const generateCSV = data => {\n let csvData = '';\n if (Array.isArray(data)) {\n if (typeof data[0] === 'object') {\n const keys = Object.keys(data[0]);\n csvData = `${keys.join(',')}\\n`;\n data.forEach(item => {\n csvData += `${Object.values(item).join(',')}\\n`;\n });\n } else {\n csvData = `${data.join('\\n')}`;\n }\n } else {\n csvData = `${data.join('\\n')}`;\n }\n\n return `data:text/csv;charset=UTF-8,${encodeURIComponent(csvData)}`;\n};\n","export { logJSON } from './log/log';\nexport { API_URL, FULL_API_URL, WS_API_URL } from './apiUrl/apiUrl';\nexport { serviceUrlPrefix } from './serviceUrlPrefix/serviceUrlPrefix';\nexport { generateCSV } from './files/csv';\n\nexport const getScopeOneUrl = (path) => `https://staging.dev.scope-one.com/ca/${path}`;\n\n/*\n An ISIN is a 12-character code that identifies a financial security.\n\n An ISIN consists of three parts:\n • A two-letter country code\n • A nine-character alphanumeric national security identifier\n • A single check digit.\n\n For example: US9311421039 (Walmart)\n\n Financial and referential instruments issued in the European Union but not relating to a specific EU country jurisdiction would be allocated an ISIN with an EU-prefix.\n*/\nexport const isIsin = (value) => /^[A-Z]{2}[0-9A-Z]{9}[0-9]{1}$/i.test(value);\n\nexport const equals = (target, match, caseSensitive = false) =>\n caseSensitive ? target === match : target?.toLowerCase() === match?.toLowerCase();\n","export const ratingTrends = {\n up: 'UP',\n down: 'DOWN',\n};\n","import React from 'react';\nimport PropTypes from 'prop-types';\nimport clsx from 'clsx';\nimport makeStyles from '@mui/styles/makeStyles';\nimport { green, red } from '@mui/material/colors';\nimport FiberManualRecordIcon from '@mui/icons-material/FiberManualRecord';\n\nimport { ratingTrends } from 'shared/constants/ratingTrends';\n\nconst useTrendStyles = makeStyles({\n icon: {\n marginLeft: 10,\n },\n better: {\n color: green[400],\n },\n worse: {\n color: red[400],\n },\n wrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nconst TrendIcon = ({ trend }) => {\n const trendClasses = useTrendStyles();\n\n const getRatingTrendClass = value => {\n switch (value) {\n case ratingTrends.up:\n return trendClasses.better;\n case ratingTrends.down:\n return trendClasses.worse;\n default:\n return undefined;\n }\n };\n\n if (!trend) {\n return null;\n }\n\n return <FiberManualRecordIcon className={clsx(trendClasses.icon, getRatingTrendClass(trend))} />;\n};\n\nTrendIcon.defaultProps = {\n trend: undefined,\n};\n\nTrendIcon.propTypes = {\n trend: PropTypes.oneOf([ratingTrends.up, ratingTrends.down]),\n};\n\nexport default TrendIcon;\n","import React, { FC, useState } from 'react';\nimport { Blur } from 'ui';\nimport { Chip, Tooltip, Button } from '@mui/material';\nimport { useMessages } from '@scope/scope-one-ui/core';\nimport makeStyles from '@mui/styles/makeStyles';\nimport LockIcon from '@mui/icons-material/Lock';\nimport { requestRating } from 'modules/common/RestrictedSubscriptionRatings/services/rsrService';\nimport TrendIcon from 'modules/common/Table/TrendIcon';\nimport { useQuery } from 'shared/hooks';\nimport { useTranslation } from 'react-i18next';\nimport { outlookLabels } from 'shared/constants/outlookTypes';\nimport { formatCurrency, formatDate, setRatingColor } from 'shared/functions';\nimport { LinkButton } from 'ui/Buttons';\nimport { getName } from 'country-list';\nimport { OrangeRatingChip } from '../../../shared/styles/OrangeRatingChip/OrangeRatingChip';\n\nconst useStyles = makeStyles({\n wrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n});\n\nexport type RequestRatingButtonProps = {\n id: string;\n};\n\nexport const RequestRatingButton: FC<RequestRatingButtonProps> = ({ id }) => {\n const { success, error } = useMessages();\n const [pendingRequest, setPendingRequest] = useState(false);\n\n const handleRequest = () => {\n setPendingRequest(true);\n requestRating(id)\n .then(() => success({ content: 'Rating requested' }))\n .catch((err) =>\n error({\n title: err?.status || 'Error',\n content: err?.message || 'Unable to request rating',\n }),\n )\n .finally(() => setPendingRequest(false));\n };\n\n return (\n <Button\n size=\"small\"\n variant=\"contained\"\n disabled={pendingRequest}\n style={{ whiteSpace: 'nowrap' }}\n onClick={handleRequest}\n >\n Request\n </Button>\n );\n};\n\nexport const useInstrumentRenderers = () => {\n const classes = useStyles();\n const { t } = useTranslation();\n const { module } = useQuery();\n\n const nameRenderer = ([issueId, issueName, isBlurred]: string[]) =>\n isBlurred ? (\n <Blur />\n ) : (\n <LinkButton\n to={`instruments/${issueId}${module ? `?module=${module}` : ''}`}\n label={issueName}\n withPathname\n />\n );\n\n const ratingRenderer = (v: any) => {\n const [\n _,\n product,\n rating,\n outlook,\n hasLicence,\n ratingTrend,\n previousRating,\n previousOutlook,\n ratingDate,\n demandType,\n isBlurred,\n ratingId,\n notchSuffix,\n preliminaryFlag,\n ] = v;\n\n if (isBlurred) {\n return <RequestRatingButton id={ratingId} />;\n }\n\n if (rating) {\n const isUnsolicited = demandType?.includes('Unsolicited without participation');\n\n const ratingLabel = (\n <span>\n {preliminaryFlag && <span>(P) </span>}\n {rating}\n {notchSuffix && <sub> {notchSuffix}</sub>}\n </span>\n );\n\n const tooltip = (\n <>\n <div>\n {t('Rating')}: {ratingLabel}\n </div>\n <div>{outlook ? `${t('Outlook')}: ${t(outlookLabels[outlook])}` : ''}</div>\n {ratingTrend && (\n <>\n <div>\n {t('Previous rating')}: {previousRating}\n </div>\n <div>\n {t('Previous outlook')}: {previousOutlook}\n </div>\n <div>\n {t('Change as of latest rating action')}: {formatDate(ratingDate)}\n </div>\n </>\n )}\n </>\n );\n\n return (\n <Tooltip title={tooltip}>\n <div className={classes.wrapper}>\n {isUnsolicited ? (\n <OrangeRatingChip label={ratingLabel} variant=\"outlined\" />\n ) : (\n <Chip label={ratingLabel} variant=\"outlined\" color={setRatingColor(outlook)} />\n )}\n <TrendIcon trend={ratingTrend} />\n </div>\n </Tooltip>\n );\n }\n\n if (product) {\n return hasLicence ? 'N/A' : <LockIcon />;\n }\n\n if (!hasLicence) {\n return <LockIcon />;\n }\n\n return '';\n };\n\n const addedDateRenderer = ([value, isBlurred]) => {\n if (isBlurred) return <Blur />;\n\n return value ? formatDate(value, 'dd/MM/yyyy') : '-';\n };\n\n const entityRenderer = ([issuerId, issuerName]: string[]) => (\n <LinkButton\n to={`/search-result/entities/${issuerId}${module ? `?module=${module}` : ''}`}\n label={issuerName?.toUpperCase()}\n color=\"primary\"\n />\n );\n\n const countryRenderer = (code: string) => (code ? getName(code) : '');\n\n const valueRenderer = (v: any) => {\n const [value, currencyCode] = v;\n return formatCurrency(value, currencyCode || 'EUR');\n };\n\n const protectedRenderer = ([value, isBlurred]) => (isBlurred ? <Blur /> : value);\n\n return {\n nameRenderer,\n ratingRenderer,\n addedDateRenderer,\n entityRenderer,\n countryRenderer,\n valueRenderer,\n protectedRenderer,\n };\n};\n","import React, { useState, useEffect } from 'react';\nimport PropTypes from 'prop-types';\nimport { useSelector } from 'react-redux';\nimport { useTranslation } from 'react-i18next';\nimport makeStyles from '@mui/styles/makeStyles';\nimport Autocomplete from '@mui/material/Autocomplete';\nimport Button from '@mui/material/Button';\nimport Box from '@mui/material/Box';\nimport Dialog from '@mui/material/Dialog';\nimport DialogActions from '@mui/material/DialogActions';\nimport DialogContent from '@mui/material/DialogContent';\nimport Grid from '@mui/material/Grid';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\nimport DatePicker from '@mui/lab/DatePicker';\n\nimport { DialogTitleWithClose, RangeSlider, SelectWithSearch, GroupedSelect } from 'ui';\nimport { currencies } from 'shared/constants/currencies';\nimport { creditRatingRangeValues } from 'shared/constants/creditRatingRangeValues';\nimport { useGroupedAutocompleteStyles } from 'shared/styles/groupedAutocompleteStyles/groupedAutocompleteStyles';\nimport { flattenIndustries } from 'shared/parsers';\nimport { useRegions } from 'shared/hooks';\nimport { fetchCoveredBoundsSeniorityRatings } from 'services/coveredBonds/coveredBondsServices';\n\nconst useStyles = makeStyles(theme => ({\n datePicker: {\n marginTop: theme.spacing(1),\n },\n}));\n\nconst currenciesOptions = currencies.map(({ code, name }) => ({ value: code, label: name }));\n\nconst couponRangeSliderValues = Array(16)\n .fill(null)\n .map((_, index) => ({ label: `${index}%`, value: index }));\n\nconst InstrumentsFiltersModal = ({\n open,\n onClose,\n onSubmit,\n searchQuery,\n initialFilter,\n coveredBond,\n countries,\n lockCountry,\n}) => {\n const { t } = useTranslation();\n const classes = useStyles();\n const groupedAutocompleteClasses = useGroupedAutocompleteStyles();\n const { data: industriesData } = useSelector(({ shared }) => shared.industries);\n const regions = useRegions(searchQuery);\n\n const ratingTypes = [\n { value: 'PUBLIC', label: t('Public') },\n { value: 'ON_REQUEST', label: t('Subscription') },\n ];\n\n const issueVolumeRangeSliderValues = [100, 200, 300, 400, 500, 600, 700, 800, 900].map(x => ({\n label: `${x} ${t('mil')}`,\n value: x * 1000000,\n }));\n\n issueVolumeRangeSliderValues.push({\n label: `1 ${t('bil')}`,\n value: 1000000000,\n });\n\n const [values, setValues] = useState({\n seniorityTypes: [],\n countries: initialFilter.countries ? initialFilter.countries : [],\n industries: [],\n ratingType: null,\n ratingRange: [\n creditRatingRangeValues[0].value,\n creditRatingRangeValues[creditRatingRangeValues.length - 1].value,\n ],\n couponRange: [\n couponRangeSliderValues[0].value,\n couponRangeSliderValues[couponRangeSliderValues.length - 1].value,\n ],\n issueVolumeRange: [\n issueVolumeRangeSliderValues[0].value,\n issueVolumeRangeSliderValues[issueVolumeRangeSliderValues.length - 1].value,\n ],\n maturityDateFrom: null,\n maturityDateTo: null,\n currency: null,\n ...initialFilter,\n });\n\n useEffect(() => {\n setValues({ ...values, ...initialFilter });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [initialFilter]);\n\n const [industries, setIndustries] = useState([]);\n\n useEffect(() => {\n setIndustries(flattenIndustries(industriesData));\n }, [industriesData]);\n\n const [seniorityTypes, setSeniorityTypes] = useState([]);\n\n const fetchSeniorityTypes = async () => {\n const seniorityTypesData = await fetchCoveredBoundsSeniorityRatings();\n const data = seniorityTypesData.data.map(item => ({ value: item, label: item })) || [];\n setSeniorityTypes(data);\n };\n\n useEffect(() => {\n if (coveredBond) {\n fetchSeniorityTypes();\n }\n }, [coveredBond]);\n\n const handleSelectWithSearchChange = name => value => {\n setValues({\n ...values,\n [name]: value,\n });\n };\n\n const handleSeniorityTypesChange = (event, types) => {\n setValues({\n ...values,\n seniorityTypes: types,\n });\n };\n\n const handleIndustriesChange = (event, sectors) => {\n setValues({\n ...values,\n industries: sectors,\n });\n };\n\n const handleDateChange = name => date => {\n setValues({\n ...values,\n [name]: date ? new Date(date) : null,\n });\n };\n\n const handleRangeSliderChange = name => (event, newValues) => {\n setValues({\n ...values,\n [name]: newValues,\n });\n };\n\n const handleSubmit = () => {\n const {\n ratingRange,\n couponRange,\n issueVolumeRange,\n currency,\n maturityDateFrom,\n maturityDateTo,\n } = values;\n\n const cleanedValues = {\n ...values,\n countries: values.countries.map(({ iso }) => iso),\n industrySectors: values.industries.map(({ code, industryCode }) => ({\n sector: code,\n industry: industryCode,\n })),\n coveredBond: coveredBond || undefined,\n seniorityTypes: coveredBond ? values.seniorityTypes.map(({ value }) => value) : undefined,\n ratingFrom: encodeURIComponent(creditRatingRangeValues[ratingRange[0] - 1].label),\n ratingTo: encodeURIComponent(creditRatingRangeValues[ratingRange[1] - 1].label),\n couponRangeFrom: couponRange[0],\n couponRangeTo: couponRange[1],\n issueVolumeFrom: issueVolumeRange[0],\n issueVolumeTo: issueVolumeRange[1],\n issueVolumeCurrency: currency,\n maturityDateFrom: maturityDateFrom && maturityDateFrom.toISOString(),\n maturityDateTo: maturityDateTo && maturityDateTo.toISOString(),\n };\n\n onSubmit(cleanedValues);\n };\n\n return (\n <Dialog fullWidth open={open}>\n <DialogTitleWithClose onClose={onClose}>{t('Apply filters')}</DialogTitleWithClose>\n <DialogContent>\n {coveredBond && (\n <Autocomplete\n multiple\n options={seniorityTypes}\n onChange={handleSeniorityTypesChange}\n getOptionLabel={option => option.label}\n value={values.seniorityTypes}\n renderInput={params => (\n <TextField {...params} label={t('Seniority Type')} variant=\"outlined\" />\n )}\n classes={groupedAutocompleteClasses}\n />\n )}\n\n <GroupedSelect\n multiple\n options={coveredBond ? countries : regions.data}\n value={values.countries}\n label={t('Country')}\n onChange={handleSelectWithSearchChange('countries')}\n getOptionLabel={option => option.name}\n groupBy={option => option.continent}\n disabled={lockCountry}\n />\n <Autocomplete\n multiple\n options={industries}\n onChange={handleIndustriesChange}\n getOptionLabel={option => option.name}\n groupBy={option => option.industryName}\n value={values.industries}\n renderInput={params => (\n <TextField {...params} label={t('Industries')} variant=\"outlined\" />\n )}\n classes={groupedAutocompleteClasses}\n />\n <SelectWithSearch\n label={t('Rating type')}\n options={ratingTypes}\n value={values.ratingType}\n onChange={handleSelectWithSearchChange('ratingType')}\n />\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Instrument credit rating range')}\n options={creditRatingRangeValues}\n values={values.ratingRange}\n onChange={handleRangeSliderChange('ratingRange')}\n />\n </Box>\n {!coveredBond && (\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Coupon range')}\n options={couponRangeSliderValues}\n values={values.couponRange}\n onChange={handleRangeSliderChange('couponRange')}\n />\n </Box>\n )}\n <Box mt={2} mb={1}>\n <RangeSlider\n label={t('Instrument volume')}\n options={issueVolumeRangeSliderValues}\n values={values.issueVolumeRange}\n onChange={handleRangeSliderChange('issueVolumeRange')}\n />\n </Box>\n <Box mb={1}>\n <Typography>{t('Maturity date')}</Typography>\n </Box>\n <Grid container alignItems=\"center\" spacing={2}>\n <Grid item>\n <DatePicker\n className={classes.datePicker}\n disableToolbar\n inputFormat=\"dd/MM/yyyy\"\n renderInput={() => <TextField label=\"From\" />}\n margin=\"normal\"\n id=\"date-picker-inline\"\n value={values.maturityDateFrom}\n onChange={handleDateChange('maturityDateFrom')}\n KeyboardButtonProps={{\n 'aria-label': 'change date',\n }}\n />\n </Grid>\n <Grid item>\n <Typography>{t('to')}</Typography>\n </Grid>\n <Grid item>\n <DatePicker\n className={classes.datePicker}\n disableToolbar\n inputFormat=\"dd/MM/yyyy\"\n margin=\"normal\"\n id=\"date-picker-inline\"\n renderInput={() => <TextField label=\"To\" />}\n value={values.maturityDateTo}\n onChange={handleDateChange('maturityDateTo')}\n KeyboardButtonProps={{\n 'aria-label': 'change date',\n }}\n />\n </Grid>\n </Grid>\n <SelectWithSearch\n label={t('Currency')}\n options={currenciesOptions}\n value={values.currency}\n onChange={handleSelectWithSearchChange('currency')}\n />\n </DialogContent>\n <DialogActions>\n <Button variant=\"contained\" color=\"primary\" onClick={handleSubmit}>\n {t('Apply filters')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nInstrumentsFiltersModal.defaultProps = {\n searchQuery: null,\n initialFilter: {},\n coveredBond: false,\n countries: [],\n lockCountry: false,\n};\n\nInstrumentsFiltersModal.propTypes = {\n open: PropTypes.bool.isRequired,\n onClose: PropTypes.func.isRequired,\n onSubmit: PropTypes.func.isRequired,\n searchQuery: PropTypes.string,\n initialFilter: PropTypes.object,\n coveredBond: PropTypes.bool,\n countries: PropTypes.array,\n lockCountry: PropTypes.bool,\n};\n\nexport default InstrumentsFiltersModal;\n","export const currencies = [\n { code: 'AED', name: 'United Arab Emirates Dirham' },\n { code: 'AFN', name: 'Afghanistan Afghani' },\n { code: 'ALL', name: 'Albania Lek' },\n { code: 'AMD', name: 'Armenia Dram' },\n { code: 'ANG', name: 'Netherlands Antilles Guilder' },\n { code: 'AOA', name: 'Angola Kwanza' },\n { code: 'ARS', name: 'Argentina Peso' },\n { code: 'ATS', name: 'Austrian Schilling' },\n { code: 'AUD', name: 'Australia Dollar' },\n { code: 'AWG', name: 'Aruba Guilder' },\n { code: 'AZN', name: 'Azerbaijan New Manat' },\n { code: 'BAM', name: 'Bosnia and Herzegovina Convertible Marka' },\n { code: 'BBD', name: 'Barbados Dollar' },\n { code: 'BDT', name: 'Bangladesh Taka' },\n { code: 'BEF', name: 'Belgian Franc' },\n { code: 'BGN', name: 'Bulgaria Lev' },\n { code: 'BHD', name: 'Bahrain Dinar' },\n { code: 'BIF', name: 'Burundi Franc' },\n { code: 'BMD', name: 'Bermuda Dollar' },\n { code: 'BND', name: 'Brunei Darussalam Dollar' },\n { code: 'BOB', name: 'Bolivia Boliviano' },\n { code: 'BRL', name: 'Brazil Real' },\n { code: 'BSD', name: 'Bahamas Dollar' },\n { code: 'BTN', name: 'Bhutan Ngultrum' },\n { code: 'BWP', name: 'Botswana Pula' },\n { code: 'BYR', name: 'Belarus Ruble' },\n { code: 'BZD', name: 'Belize Dollar' },\n { code: 'CAD', name: 'Canada Dollar' },\n { code: 'CDF', name: 'Congo/Kinshasa Franc' },\n { code: 'CHF', name: 'Switzerland Franc' },\n { code: 'CLF', name: 'Chilean Unidad de Fomento' },\n { code: 'CLP', name: 'Chile Peso' },\n { code: 'CNY', name: 'China Yuan Renminbi' },\n { code: 'COP', name: 'Colombia Peso' },\n { code: 'CRC', name: 'Costa Rica Colon' },\n { code: 'CUC', name: 'Cuba Convertible Peso' },\n { code: 'CUP', name: 'Cuba Peso' },\n { code: 'CVE', name: 'Cape Verde Escudo' },\n { code: 'CZK', name: 'Czech Republic Koruna' },\n { code: 'DEM', name: 'German Mark' },\n { code: 'DJF', name: 'Djibouti Franc' },\n { code: 'DKK', name: 'Denmark Krone' },\n { code: 'DOP', name: 'Dominican Republic Peso' },\n { code: 'DZD', name: 'Algeria Dinar' },\n { code: 'EGP', name: 'Egypt Pound' },\n { code: 'ERN', name: 'Eritrea Nakfa' },\n { code: 'ETB', name: 'Ethiopia Birr' },\n { code: 'EUR', name: 'Euro' },\n { code: 'FIM', name: 'Finnish Markka' },\n { code: 'FJD', name: 'Fiji Dollar' },\n { code: 'FKP', name: 'Falkland Islands (Malvinas) Pound' },\n { code: 'FRF', name: 'French Franc' },\n { code: 'GBP', name: 'United Kingdom Pound' },\n { code: 'GEL', name: 'Georgia Lari' },\n { code: 'GGP', name: 'Guernsey Pound' },\n { code: 'GHS', name: 'Ghana Cedi' },\n { code: 'GIP', name: 'Gibraltar Pound' },\n { code: 'GMD', name: 'Gambia Dalasi' },\n { code: 'GNF', name: 'Guinea Franc' },\n { code: 'GTQ', name: 'Guatemala Quetzal' },\n { code: 'GYD', name: 'Guyana Dollar' },\n { code: 'HKD', name: 'Hong Kong Dollar' },\n { code: 'HNL', name: 'Honduras Lempira' },\n { code: 'HRK', name: 'Croatia Kuna' },\n { code: 'HTG', name: 'Haiti Gourde' },\n { code: 'HUF', name: 'Hungary Forint' },\n { code: 'IDR', name: 'Indonesia Rupiah' },\n { code: 'ILS', name: 'Israel Shekel' },\n { code: 'IMP', name: 'Isle of Man Pound' },\n { code: 'INR', name: 'India Rupee' },\n { code: 'IQD', name: 'Iraq Dinar' },\n { code: 'IRR', name: 'Iran Rial' },\n { code: 'ISK', name: 'Iceland Krona' },\n { code: 'ITL', name: 'Italian Lira' },\n { code: 'JEP', name: 'Jersey Pound' },\n { code: 'JMD', name: 'Jamaica Dollar' },\n { code: 'JOD', name: 'Jordan Dinar' },\n { code: 'JPY', name: 'Japan Yen' },\n { code: 'KES', name: 'Kenya Shilling' },\n { code: 'KGS', name: 'Kyrgyzstan Som' },\n { code: 'KHR', name: 'Cambodia Riel' },\n { code: 'KMF', name: 'Comoros Franc' },\n { code: 'KPW', name: 'Korea (North) Won' },\n { code: 'KRW', name: 'Korea (South) Won' },\n { code: 'KWD', name: 'Kuwait Dinar' },\n { code: 'KYD', name: 'Cayman Islands Dollar' },\n { code: 'KZT', name: 'Kazakhstan Tenge' },\n { code: 'LAK', name: 'Laos Kip' },\n { code: 'LBP', name: 'Lebanon Pound' },\n { code: 'LKR', name: 'Sri Lanka Rupee' },\n { code: 'LRD', name: 'Liberia Dollar' },\n { code: 'LSL', name: 'Lesotho Loti' },\n { code: 'LTL', name: 'Lithuania Litas' },\n { code: 'LVL', name: 'Latvia Lat' },\n { code: 'LYD', name: 'Libya Dinar' },\n { code: 'MAD', name: 'Morocco Dirham' },\n { code: 'MDL', name: 'Moldova Leu' },\n { code: 'MGA', name: 'Madagascar Ariary' },\n { code: 'MKD', name: 'Macedonia Denar' },\n { code: 'MMK', name: 'Myanmar (Burma) Kyat' },\n { code: 'MNT', name: 'Mongolia Tughrik' },\n { code: 'MOP', name: 'Macau Pataca' },\n { code: 'MRO', name: 'Mauritania Ouguiya' },\n { code: 'MUR', name: 'Mauritius Rupee' },\n { code: 'MVR', name: 'Maldives (Maldive Islands) Rufiyaa' },\n { code: 'MWK', name: 'Malawi Kwacha' },\n { code: 'MXN', name: 'Mexico Peso' },\n { code: 'MXV', name: 'Mexican Unidad de Inversion' },\n { code: 'MYR', name: 'Malaysia Ringgit' },\n { code: 'MZN', name: 'Mozambique Metical' },\n { code: 'NAD', name: 'Namibia Dollar' },\n { code: 'NGN', name: 'Nigeria Naira' },\n { code: 'NIO', name: 'Nicaragua Cordoba' },\n { code: 'NLG', name: 'Dutch Guilder' },\n { code: 'NOK', name: 'Norway Krone' },\n { code: 'NPR', name: 'Nepal Rupee' },\n { code: 'NZD', name: 'New Zealand Dollar' },\n { code: 'OMR', name: 'Oman Rial' },\n { code: 'PAB', name: 'Panama Balboa' },\n { code: 'PEN', name: 'Peru Nuevo Sol' },\n { code: 'PGK', name: 'Papua New Guinea Kina' },\n { code: 'PHP', name: 'Philippines Peso' },\n { code: 'PKR', name: 'Pakistan Rupee' },\n { code: 'PLN', name: 'Poland Zloty' },\n { code: 'PTE', name: 'Portuguese escudo' },\n { code: 'PYG', name: 'Paraguay Guarani' },\n { code: 'QAR', name: 'Qatar Riyal' },\n { code: 'RON', name: 'Romania New Leu' },\n { code: 'RSD', name: 'Serbia Dinar' },\n { code: 'RUB', name: 'Russia Ruble' },\n { code: 'RWF', name: 'Rwanda Franc' },\n { code: 'SAR', name: 'Saudi Arabia Riyal' },\n { code: 'SBD', name: 'Solomon Islands Dollar' },\n { code: 'SCR', name: 'Seychelles Rupee' },\n { code: 'SDG', name: 'Sudan Pound' },\n { code: 'SEK', name: 'Sweden Krona' },\n { code: 'SGD', name: 'Singapore Dollar' },\n { code: 'SHP', name: 'Saint Helena Pound' },\n { code: 'SKK', name: 'Slovak Koruna' },\n { code: 'SLL', name: 'Sierra Leone Leone' },\n { code: 'SOS', name: 'Somalia Shilling' },\n { code: 'SPL', name: 'Seborga Luigino' },\n { code: 'SRD', name: 'Suriname Dollar' },\n { code: 'STD', name: 'São Tomé and PrÃncipe Dobra' },\n { code: 'SVC', name: 'El Salvador Colon' },\n { code: 'SYP', name: 'Syria Pound' },\n { code: 'SZL', name: 'Swaziland Lilangeni' },\n { code: 'THB', name: 'Thailand Baht' },\n { code: 'TJS', name: 'Tajikistan Somoni' },\n { code: 'TMT', name: 'Turkmenistan Manat' },\n { code: 'TND', name: 'Tunisia Dinar' },\n { code: 'TOP', name: \"Tonga Pa'anga\" },\n { code: 'TRY', name: 'Turkey Lira' },\n { code: 'TTD', name: 'Trinidad and Tobago Dollar' },\n { code: 'TVD', name: 'Tuvalu Dollar' },\n { code: 'TWD', name: 'Taiwan New Dollar' },\n { code: 'TZS', name: 'Tanzania Shilling' },\n { code: 'UAH', name: 'Ukraine Hryvna' },\n { code: 'UGX', name: 'Uganda Shilling' },\n { code: 'USD', name: 'US Dollar' },\n { code: 'UYU', name: 'Uruguay Peso' },\n { code: 'UZS', name: 'Uzbekistan Som' },\n { code: 'VEF', name: 'Venezuela Bolivar' },\n { code: 'VND', name: 'Viet Nam Dong' },\n { code: 'VUV', name: 'Vanuatu Vatu' },\n { code: 'WST', name: 'Samoa Tala' },\n { code: 'XAF', name: 'CFA Franc (BEAC)' },\n { code: 'XCD', name: 'East Caribbean Dollar' },\n { code: 'XDR', name: 'International Monetary Fund (IMF)' },\n { code: 'XOF', name: 'Communauté Financière Africaine (BCEAO) Franc' },\n { code: 'XPF', name: 'Comptoirs Français du Pacifique (CFP) Franc' },\n { code: 'YER', name: 'Yemen Rial' },\n { code: 'ZAR', name: 'South Africa Rand' },\n { code: 'ZMW', name: 'Zambia Kwacha' },\n { code: 'ZWD', name: 'Zimbabwe Dollar' },\n];\n","import { ratingTypes } from 'shared/constants/ratingTypes';\n\nexport const REFRESH_DOSSIERS = 'REFRESH_DOSSIERS';\n\nexport const GET_DOSSIER = 'GET_DOSSIER';\nexport const GET_DOSSIER_SUCCESS = 'GET_DOSSIER_SUCCESS';\nexport const GET_DOSSIER_ERROR = 'GET_DOSSIER_ERROR';\n\nexport const GET_DOSSIER_ITEMS = 'GET_DOSSIER_ITEMS';\nexport const GET_DOSSIER_ITEMS_SUCCESS = 'GET_DOSSIER_ITEMS_SUCCESS';\nexport const GET_DOSSIER_ITEMS_ERROR = 'GET_DOSSIER_ITEMS_ERROR';\n\nexport const GET_DOSSIERS = 'GET_DOSSIERS';\nexport const GET_DOSSIERS_SUCCESS = 'GET_DOSSIERS_SUCCESS';\nexport const GET_DOSSIERS_ERROR = 'GET_DOSSIERS_ERROR';\n\nexport const CREATE_DOSSIER = 'CREATE_DOSSIER';\nexport const CREATE_DOSSIER_SUCCESS = 'CREATE_DOSSIER_SUCCESS';\nexport const CREATE_DOSSIER_ERROR = 'CREATE_DOSSIER_ERROR';\n\nexport const DELETE_DOSSIER = 'DELETE_DOSSIER';\nexport const DELETE_DOSSIER_SUCCESS = 'DELETE_DOSSIER_SUCCESS';\nexport const DELETE_DOSSIER_ERROR = 'DELETE_DOSSIER_ERROR';\n\nexport const TOGGLE_DOSSIER_WATCHED_STATE = 'TOGGLE_DOSSIER_WATCHED_STATE';\nexport const TOGGLE_DOSSIER_WATCHED_STATE_FINISHED = 'TOGGLE_DOSSIER_WATCHED_STATE_FINISHED';\n\nexport const getDossierAction = ({ id, ratingType = ratingTypes.CREDIT_RATING }) => ({\n type: GET_DOSSIER,\n payload: {\n id,\n ratingType,\n },\n});\n\nexport const getDossierItemsAction = ({\n dossierId,\n listId,\n itemType,\n ratingType,\n page,\n start,\n limit,\n sort,\n filter,\n}) => ({\n type: GET_DOSSIER_ITEMS,\n payload: {\n dossierId,\n listId,\n itemType,\n ratingType,\n page,\n start,\n limit,\n sort,\n filter,\n },\n});\n\nexport const refreshDossiersAction = ({ reason, ratingType = ratingTypes.CREDIT_RATING }) => ({\n type: REFRESH_DOSSIERS,\n payload: {\n reason,\n ratingType,\n },\n});\n\nexport const getDossiersAction = ({ ratingType, requestParams }) => ({\n type: GET_DOSSIERS,\n payload: {\n ratingType,\n requestParams,\n },\n});\n\nexport const createDossierAction = ({\n name,\n description,\n id,\n itemsData,\n organisationId,\n ratingType = ratingTypes.CREDIT_RATING,\n selectAll = false,\n sourceDossierId,\n}) => ({\n type: CREATE_DOSSIER,\n payload: {\n name,\n description,\n id,\n itemsData: !selectAll ? itemsData : undefined,\n ratingType,\n organisationId,\n selectAll,\n sourceDossierId,\n },\n});\n\nexport const deleteDossiersAction = ({ ids, ratingType = ratingTypes.CREDIT_RATING }) => ({\n type: DELETE_DOSSIER,\n payload: {\n ids,\n ratingType,\n },\n});\n\nexport const toggleDossierWatchedStateAction = ({\n mode,\n id,\n ratingType = ratingTypes.CREDIT_RATING,\n}) => ({\n type: TOGGLE_DOSSIER_WATCHED_STATE,\n payload: {\n mode,\n id,\n ratingType,\n },\n});\n"],"sourceRoot":""}