{"version":3,"sources":["assets/img/hfr-logo.png","assets/hfr-logo-white.png","shared/SearchExFirmLabel.ts","routes/Dashboard/DashboardTab/SearchForm/redux/searchParamsSlice.tsx","slice/appDataSlice.ts","slice/appEventSlice.ts","shared/SearchExFundLabel.ts","slice/appSettingsSlice.ts","slice/authSlice.ts","slice/userSlice.ts","app/rootReducer.ts","app/store.ts","shared/api/services/auth.service.ts","shared/history.ts","shared/strings.js","shared/api/services/event.service.ts","shared/api/index.ts","shared/api/services/common.service.ts","shared/api/services/data.service.ts","shared/api/services/portfolio-model.service.ts","shared/api/services/fund-universe-list.ts","shared/api/services/fund.service.ts","shared/api/services/firm.service.ts","shared/api/services/fund-detail.service.ts","shared/api/services/firm-detail.service.ts","shared/api/services/benchmark.service.ts","shared/api/services/activity-log.service.ts","shared/api/services/analysis.service.ts","shared/api/services/user.service.ts","shared/api/services/index-manager.service.ts","shared/api/services/code-of-conduct.service.ts","shared/api/services/peer-group.service.ts","shared/api/services/user-fund.service.ts","shared/api/services/universe-manager.service.ts","shared/api/services/code-table.service.ts","shared/api/services/admin.service.ts","shared/api/services/content.service.ts","shared/api/services/minority.service.ts","shared/components/LoadingDetails.tsx","routes/Admin/Admin.tsx","shared/hooks/useServiceState.ts","shared/api/context/AnalysisGroupListContext.tsx","shared/api/context/FundDetailDropdownContext.tsx","shared/colors.ts","shared/components/ContactUsModal.tsx","shared/components/MainLayout.tsx","routes/Analysis/GroupTable.tsx","routes/Analysis/AddGroupModal.tsx","routes/Analysis/AddFundModal.tsx","routes/Analysis/BenchmarkOptions.tsx","routes/Analysis/PanelDetailGraph.tsx","routes/Analysis/VamiGraph.tsx","routes/Analysis/FundList.tsx","routes/Analysis/CalculateModal.tsx","routes/Analysis/AssignUserModal.tsx","routes/Analysis/DuplicateGroupModal.tsx","routes/Analysis/MoveToGroupModal.tsx","shared/components/ResponsiveTitle.tsx","routes/Analysis/GroupList.tsx","routes/Analysis/Analysis.tsx","shared/components/ExternalMainLayout.tsx","routes/Auth/ChangePassword/UserProfileChangePasswordForm.tsx","shared/api/context/FundDetailDataContext.tsx","shared/api/context/FirmDetailDataContext.tsx","shared/DraftManager.tsx","shared/components/TabContentWrapper.tsx","routes/Dashboard/DashboardTab/ActivityBlock.tsx","routes/Dashboard/DashboardTab/ColumnBuilder/FundSearchColumnContext.tsx","routes/Dashboard/DashboardTab/CreatedUpdatedFunds.tsx","routes/Dashboard/DashboardTab/DraftTab.tsx","routes/Dashboard/DashboardTab/FavoritedTab.tsx","shared/SearchFirmLabel.ts","shared/SearchFundLabel.tsx","shared/utils/gen-util.ts","routes/Dashboard/DashboardTab/AddToFavoritedModal.tsx","routes/Dashboard/DashboardTab/AddToIndexModal.tsx","routes/Dashboard/DashboardTab/AddToModal.tsx","routes/Dashboard/DashboardTab/DeleteFundModal.tsx","shared/components/CustomNumberInput.tsx","shared/components/FormItemComponents.tsx","routes/Dashboard/DashboardTab/UpdateBenchmarkModal.tsx","routes/Dashboard/DashboardTab/FundSearch.tsx","routes/Dashboard/DashboardTab/ColumnBuilder/FundSearchColumnBuilder.tsx","routes/Dashboard/DashboardTab/ModalEditQuerySearch.tsx","routes/Dashboard/DashboardTab/FundQuerySearch.tsx","routes/Dashboard/DashboardTab/ModalCreateFundFirm.tsx","routes/Dashboard/DashboardTab/PeerGroupSearch.tsx","routes/Dashboard/DashboardTab/FundTableHeader.tsx","routes/Dashboard/DashboardTab/RecentlyEditedTab.tsx","routes/Dashboard/DashboardTab/DashboardTab.tsx","shared/api/context/FirmDetailLabelSearchContext.tsx","shared/components/FFPerfectScrollbar.tsx","shared/components/DividerForm.tsx","shared/api/context/ExFundDetailLabelSearchContext.tsx","shared/components/RenderLabelExFund.tsx","shared/api/context/FundDetailLabelSearchContext.tsx","shared/components/RenderLabelForm.tsx","shared/utils/formUtils.ts","shared/components/FundESGSection.tsx","shared/api/context/ExFirmDetailLabelSearchContext.tsx","shared/components/RenderLabelExFirm.tsx","shared/components/RenderLabelFormFirm.tsx","shared/components/FirmESGSection.tsx","routes/Dashboard/FirmDetail/Co-Investment/FirmCoInvestment.tsx","routes/Dashboard/FirmDetail/CodeOfConduct/ModalEditConduct.tsx","routes/Dashboard/FirmDetail/CodeOfConduct/CodeOfConduct.tsx","routes/Dashboard/FirmDetail/DueDiligence/FirmDueDiligence.tsx","shared/utils/datetimeUtils.ts","routes/Dashboard/FundDetail/FundROR/PerformanceUpdate.tsx","shared/utils/validateData.ts","shared/components/ModalConfirmUpload.tsx","shared/components/DataSheet.tsx","shared/components/NextBackButton.tsx","routes/Dashboard/FirmDetail/FirmAssets/FirmAssets.tsx","routes/Dashboard/FirmDetail/FirmDI/FirmDI.tsx","routes/Dashboard/FirmDetail/CCMC/FirmCCMC.tsx","routes/Dashboard/FirmDetail/CMIC/FirmCMIC.tsx","routes/Dashboard/FirmDetail/FirmExecutiveOrders/FirmExecutiveOrders.tsx","routes/Dashboard/FirmDetail/FirmReg/FirmNonSecInfo.tsx","routes/Dashboard/FirmDetail/FirmReg/FirmSecInfo.tsx","routes/Dashboard/FirmDetail/FirmReg/FirmRegMain.tsx","routes/ExternalDashboard/ModalFundActivation.tsx","shared/components/FundOfFirmTable.tsx","routes/ExternalDashboard/ExColumnBuilder/columnSource.tsx","routes/ExternalDashboard/ExColumnBuilder/ColumnBuilder.tsx","routes/Dashboard/FundDetail/FundROR/PerformanceDataSheet.tsx","routes/ExternalDashboard/DataConfirmationModal.tsx","routes/ExternalDashboard/utils/validateData.ts","routes/ExternalDashboard/ExFundDetail/ExFundPerformanceItem.tsx","routes/Dashboard/FirmDetail/FundOfFirm/FirmLatestPerformance.tsx","routes/Dashboard/FirmDetail/FundOfFirm/FundsOfFirm.tsx","routes/Dashboard/FirmDetail/MainInformation/FirmContactInfo.tsx","routes/Dashboard/FirmDetail/MainInformation/FirmOwnershipDescription.tsx","routes/Dashboard/FirmDetail/MainInformation/ManagerFirmInfo.tsx","routes/Dashboard/FirmDetail/MainInformation/FirmMainInformation.tsx","routes/Dashboard/FirmDetail/FirmMultiManagerPodPlatform/FirmMultiManagerPodPlatform.tsx","shared/components/EditableTable/EditableContext.tsx","shared/components/EditableTable/EditableFormRow.tsx","shared/components/EditableTable/EditableCell.tsx","shared/components/FundFamilyTable.tsx","routes/Dashboard/FirmDetail/FundFamily/FirmFundFamily.tsx","routes/Dashboard/FirmDetail/FirmDetailMain.tsx","shared/components/FundDetailPreview/DistributionGraph.tsx","shared/components/FundDetailPreview/DrawdownGraph.tsx","shared/components/FundDetailPreview/FirmFundDescription.tsx","shared/components/FundDetailPreview/RenderTableCell.tsx","shared/components/FundDetailPreview/fund-details-utils.ts","shared/components/FundDetailPreview/FundStrategyDescription.tsx","shared/components/FundDetailPreview/PerformanceVersusUniverseChart.tsx","shared/components/FundDetailPreview/PeerGroupForm.tsx","shared/components/FundDetailPreview/utils.ts","shared/components/FundDetailPreview/UpDownCaptureGraph.tsx","shared/components/FundDetailPreview/YearlyMonthlyDatatable.tsx","shared/components/FundDetailPreview/FundDetailPreview.tsx","routes/Dashboard/FundDetail/CMIC/CMIC.tsx","routes/ExternalDashboard/ExFundCardTitle.tsx","shared/hooks/useEffectFieldValidate.ts","routes/ExternalDashboard/RequiredDataHelper.ts","routes/ExternalDashboard/ExFundDetail/ExFundContact.tsx","routes/ExternalDashboard/ExFundDetail/ExFundDetail.tsx","routes/ExternalDashboard/ExFundDetail/ExFundDI.tsx","routes/ExternalDashboard/ExFundDetail/ExFundFeeSchedule.tsx","shared/components/IndustryTable.tsx","routes/ExternalDashboard/ExFundDetail/ExFundIndustry.tsx","shared/components/InstrumentsTable.tsx","routes/ExternalDashboard/ExFundDetail/ExFundInstruments.tsx","shared/components/RegionsTable.tsx","routes/Dashboard/FundDetail/FundInformation/Region/FundInfoRegion.tsx","routes/ExternalDashboard/ExFundDetail/ExFundInvestmentStrategy.tsx","shared/components/InvestorTypeTable.tsx","routes/ExternalDashboard/ExFundDetail/ExFundInvestorType.tsx","routes/ExternalDashboard/ExFundDetail/ExFundOverview.tsx","routes/ExternalDashboard/ExFundDetail/ExFundPerformance/ExPerformanceAssetsBTC.tsx","routes/ExternalDashboard/ExFundDetail/ExFundPerformance/ExPerformanceNAV.tsx","routes/ExternalDashboard/ExFundDetail/ExFundPerformance/ExPerformanceRateOfReturn.tsx","routes/ExternalDashboard/ExFundDetail/ExFundPerformance.tsx","routes/Dashboard/FundDetail/FundInformation/FundInfo/ModalEditPrincipals.tsx","routes/Dashboard/FundDetail/FundInformation/FundInfo/Principals.tsx","routes/ExternalDashboard/ExFundDetail/ExFundPrincipals.tsx","routes/ExternalDashboard/ExFundDetail/ExFundRegions.tsx","routes/ExternalDashboard/ExFundDetail/ExFundServiceProviders.tsx","routes/ExternalDashboard/ExFundDetail/ExFundStructure.tsx","routes/ExternalDashboard/ExFundDetail/ExFundFamily.tsx","routes/ExternalDashboard/ExFundDetailMain.tsx","routes/Dashboard/FundDetail/BasicInformation/FundBasicInformation.tsx","routes/Dashboard/FundDetail/DueDiligence/ModalFundDueDiligence.tsx","routes/Dashboard/FundDetail/DueDiligence/Activities.tsx","routes/Dashboard/FundDetail/DueDiligence/Checklist/ChecklistMain.tsx","routes/Dashboard/FundDetail/DueDiligence/Checklist/LegalDocuments.tsx","routes/Dashboard/FundDetail/DueDiligence/Checklist/OldBackgroundChecks.tsx","routes/Dashboard/FundDetail/DueDiligence/Checklist/Checklist.tsx","routes/Dashboard/FundDetail/DueDiligence/Contact/ModalEditTableContact.tsx","routes/Dashboard/FundDetail/DueDiligence/Contact/DueDiligenceContacts.tsx","routes/Dashboard/FundDetail/DueDiligence/DueDiligenceDocuments.tsx","routes/Dashboard/FundDetail/DueDiligence/InvestOpinion.tsx","routes/Dashboard/FundDetail/DueDiligence/ModalEditTableMeeting.tsx","routes/Dashboard/FundDetail/DueDiligence/Meetings.tsx","routes/Dashboard/FundDetail/DueDiligence/ModalEditTableMonthly.tsx","routes/Dashboard/FundDetail/DueDiligence/Monthly.tsx","routes/Dashboard/FundDetail/DueDiligence/ScorecardModal.tsx","routes/Dashboard/FundDetail/DueDiligence/ScoreCard.tsx","routes/Dashboard/FundDetail/DueDiligence/SepAcct/ReceiveSepActModal.tsx","routes/Dashboard/FundDetail/DueDiligence/SepAcct/ReceivedSepAcct.tsx","routes/Dashboard/FundDetail/DueDiligence/SepAcct/SentSepActModal.tsx","routes/Dashboard/FundDetail/DueDiligence/SepAcct/SentSepAcct.tsx","routes/Dashboard/FundDetail/DueDiligence/SepAcct/SepAcct.tsx","routes/Dashboard/FundDetail/DueDiligence/DueDiligenceMain.tsx","routes/Dashboard/FundDetail/CCMC/CCMC.tsx","routes/Dashboard/FundDetail/ExecutiveOrders/ExecutiveOrders.tsx","routes/Dashboard/FundDetail/ExportSetup/ExportSetup.tsx","routes/Dashboard/FundDetail/FundCardTitle.tsx","routes/Dashboard/FundDetail/FundInformation/ElectronicTrading/FundInfoElectronicTrading.tsx","routes/Dashboard/FundDetail/FundInformation/FundContact/FirmSelectModal.tsx","routes/Dashboard/FundDetail/FundInformation/FundContact/FundContact.tsx","routes/Dashboard/FundDetail/FundInformation/FundInfo/Fees.tsx","routes/Dashboard/FundDetail/FundInformation/FundInfo/Information.tsx","routes/Dashboard/FundDetail/FundInformation/FundInfo/Structure.tsx","routes/Dashboard/FundDetail/FundInformation/FundInfo/FundInfoMain.tsx","routes/Dashboard/FundDetail/FundInformation/FundInvestmentInfo/InvestmentInfo.tsx","routes/Dashboard/FundDetail/FundInformation/FundInvestmentInfo/StrategyDescription.tsx","routes/Dashboard/FundDetail/FundInformation/FundInvestmentInfo/FundInvestmentInfoMain.tsx","routes/Dashboard/FundDetail/FundInformation/Industry/FundInfoIndustry.tsx","routes/Dashboard/FundDetail/FundInformation/Instrument/FundInfoInstrument.tsx","routes/Dashboard/FundDetail/FundInformation/InvestorType/FundInfoInvestorType.tsx","routes/Dashboard/FundDetail/FundInformation/Leverage/FundInfoLeverage.tsx","routes/Dashboard/FundDetail/FundInformation/OffshoreFundInfo/OffshoreFundInfo.tsx","routes/Dashboard/FundDetail/FundInformation/FundInformationMain.tsx","routes/Dashboard/FundDetail/FundProperties/ModalEditTableFundProperties.tsx","routes/Dashboard/FundDetail/FundProperties/FundProperties.tsx","routes/Dashboard/FundDetail/NAVMMMain/APGL.tsx","routes/Dashboard/FundDetail/NAVMMMain/Distributions.tsx","routes/Dashboard/FundDetail/HistoricalData.tsx","routes/Dashboard/FundDetail/NAVMMMain/NAVMM/MilionsManaged.tsx","routes/Dashboard/FundDetail/NAVMMMain/NAVMM/ModalCalculateNAV.tsx","routes/Dashboard/FundDetail/NAVMMMain/NAVMM/NAVPerUnit.tsx","routes/Dashboard/FundDetail/FundROR/FundROR.tsx","routes/Dashboard/FundDetail/FundROR/FundPerformance.tsx","routes/Dashboard/FundDetail/HFRAMInfo/HFRArchiveNotes.tsx","routes/Dashboard/FundDetail/HFRAMInfo/HFRInvestmentInfo.tsx","routes/Dashboard/FundDetail/HFRAMInfo/HFRNotes.tsx","routes/Dashboard/FundDetail/HFRAMInfo/HFRAMInfoMain.tsx","shared/api/models/FundDetails.ts","routes/Dashboard/FundDetail/Indices/utils.tsx","routes/Dashboard/FundDetail/Indices/FundIndexEligibilityDetailsForm.tsx","routes/Dashboard/FundDetail/Indices/Indices.tsx","routes/Dashboard/FundDetail/Universes/Universes.tsx","routes/Dashboard/FundDetail/FundDI/FundDI.tsx","routes/Dashboard/FundDetail/FundFamily/FundFamily.tsx","routes/Dashboard/FundDetail/FundDetailMain.tsx","shared/api/context/ExNewFundContext.tsx","routes/Dashboard/Dashboard.tsx","routes/ExternalDashboard/ExDashboardPerformance.tsx","routes/ExternalDashboard/ExDraftTab.tsx","routes/ExternalDashboard/ExFundTableHeader.tsx","routes/ExternalDashboard/ExpandedRowRender.tsx","routes/ExternalDashboard/ExRecentlyEditedTab.tsx","routes/ExternalDashboard/ModalCodeOfConduct.tsx","routes/ExternalDashboard/ModalMultiManagerPlatform.tsx","routes/ExternalDashboard/ModalDiversityInclusion.tsx","routes/ExternalDashboard/ExDashboardTab.tsx","shared/SearchExNewFundLabel.ts","shared/api/context/ExNewFundLabelSearchContext.tsx","shared/components/RenderLabelExNewFund.tsx","routes/ExternalDashboard/ExNewFund/NextBackExNewFundTab.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundContact.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundCreateFundProfile.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundDI.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundESGFactor.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundFeeSchedule.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundFinalStep.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundInstruction.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundInvestStrategy.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundPerformance.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundRequirement.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundServiceProvider.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundStructure.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundTitle.tsx","routes/ExternalDashboard/ExNewFund/ExNewFundMain.tsx","routes/ExternalDashboard/ExFirmDetail/AUM.tsx","routes/ExternalDashboard/ExFirmDetail/ContactInformation.tsx","routes/ExternalDashboard/ExFirmDetail/ExFirmDI.tsx","routes/ExternalDashboard/ExFirmDetail/FirmCoInvestments.tsx","routes/ExternalDashboard/ExFirmDetail/FirmESGPolicies.tsx","routes/ExternalDashboard/ExFirmDetail/FirmOwnership.tsx","routes/ExternalDashboard/ExFirmDetail/FirmRegistration.tsx","routes/ExternalDashboard/ExFirmDetail/ExFirmFundFamily.tsx","routes/ExternalDashboard/MyFirm.tsx","routes/ExternalDashboard/ExDashboard.tsx","routes/HelpAndFaq/HelpAndFaqMain.tsx","routes/ManagerList/ColumnBuilder/FirmSearchColumnContext.tsx","routes/ManagerList/DeleteFirmModal.tsx","routes/ManagerList/ColumnBuilder/FirmSearchColumnBuilder.tsx","routes/ManagerList/FirmTableHeader.tsx","routes/ManagerList/FirmSearch.tsx","routes/ManagerList/ManagerList.tsx","shared/api/models/FundKeysMapping.ts","routes/System/DrawerActivityLogInfo.tsx","routes/System/LegacyLogTableDiff.tsx","routes/System/LegacyLogModal.tsx","routes/System/LegacyActivityLog.tsx","routes/System/ActivityLog.tsx","routes/System/BenchmarkFormModal.tsx","routes/System/ListOfFundBenchmark.tsx","routes/System/Benchmarks.tsx","routes/System/CodeTableFormModal.tsx","routes/System/CodeTable.tsx","routes/System/IndexManagerModalAddFund.tsx","routes/System/IndexManagerDetails.tsx","routes/System/IndexManagerFormModal.tsx","routes/System/IndexManager.tsx","routes/System/SearchQueryManage.tsx","routes/System/UniverseManagerModalAddFund.tsx","routes/System/UniverseManagerDetails.tsx","routes/System/UniverseManagerFormModal.tsx","routes/System/UniverseManager.tsx","routes/System/System.tsx","ProtectedRoute.tsx","routes/Auth/AuthLayout.tsx","routes/Auth/ForgotPassword/ForgotPassword.tsx","routes/Auth/signup/PreSignUpForm.tsx","shared/states.ts","routes/Auth/signup/SignUpForm.tsx","routes/Auth/signup/ThankYouPage.tsx","routes/Auth/signup/SignUpView.tsx","shared/hooks/useSafeState.ts","shared/hooks/useFetchState.ts","routes/Auth/CheckCodeLogin.tsx","routes/Auth/signup/DbToMlForm.tsx","routes/Auth/LoginView.tsx","routes/Auth/Auth.tsx","shared/components/FallbackUI.tsx","App.tsx","serviceWorker.ts","index.tsx"],"names":["module","exports","LeftNavExFirmEnum","searchParams","createSlice","name","initialState","fundSearchParams","exFundSearchParams","firmSearchParams","activityLogParams","reducers","updateFundSearchParams","state","action","payload","updateExFundSearchParams","updateFirmSearchParams","updateActivityLogParams","reducer","actions","updateExSearchParams","appData","fetchAppDataSuccess","key","data","appEvent","fundRorUpdated","fundNavUpdated","fundAssetUpdated","fundRORUpdated","resetROR","resetNav","resetAsset","LeftNavExFundEnum","renderSearchListExFirm","leftNav","ASSETS_UNDER_MANAGEMENT","REGISTRATION","CONTACT_INFORMATION","OWNERSHIP","CO_INVESTMENT","FIRM_ESG_POLICIES","FundFirmTypeEnum","SEARCH_FIELD_INDEX","FUND_DETAIL","INVESTMENT_STRATEGY","FEE_SCHEDULE","SERVICE_PROVIDERS","FUND_STRUCTURE","FUND_ESG_FACTORS","FUND_CONTACT","FUND_PERFORMANCE","FUND_CMIC","EX_OVERVIEW_KEY","exFundTableColumns","fundSearchColumns","firmSearchColumns","fundsOfFirmColumns","fundFirmTabs","tabList","activeTab","exTabs","firmTabs","fundDraft","exFirmDraft","exFundDraft","firmDraft","performanceNavDate","undefined","showPrompt","appSettings","updateNavDate","val","navStartDate","fromDate","navToDate","toDate","updateFundsOfFirmColumns","updateExFundColumns","updateFundSearchColumns","updateFirmSearchColumns","updateSelectedNav","index","findIndex","item","id","activeNav","addTabs","tabId","includes","find","e","type","FIRMS_IN_FUNDS","FUND_OVERVIEW","push","hyperlinkTable","current","isPreview","previewTab","FIRMS","existingTab","tab","viewMode","i","path","updateTabTitle","updatedTabId","selectedTab","selectedExTab","tabName","updateActiveTabs","removeTabs","removeTabId","newState","filter","removingFundDraft","lastFieldChange","_lastFieldChanged","addDraft","drafts","currentSnapshot","snapshotId","draft","removeDraft","updateFirmActiveTabs","removeFirmTabs","toggleShowPrompt","startLoading","isLoading","error","authSlice","accessToken","loginStart","loginSuccess","loginFailure","logoutStart","logoutSuccess","clearToken","saveToken","token","dispatch","a","APIService","setToken","logout","authService","console","toString","userSlice","user","fetchUserStart","log","fetchUserSuccess","fetchUserFailure","fetchUser","fetchUserProfile","has_manager_link_access","notification","warn","message","description","appSettingsConfig","storage","blacklist","appReducer","combineReducers","searchParamsSlice","auth","appDataSlice","persistReducer","appSettingsSlice","appEventSlice","rootReducer","intialState","migrations","0","localStorage","removeItem","_persist","version","rehydrated","persistConfig","whitelist","stateReconciler","autoMergeLevel2","migrate","createMigrate","debug","persistedReducer","store","configureStore","persistor","persistStore","EventCodes","history","createBrowserHistory","sanatizeToSnakeCase","map","entries","Object","newMap","forEach","str","value","snakeCase","TrackingEventSource","EventService","request","sendViewPgaEvent","source","platform","browser","post","os","user_agent","navigator","userAgent","url","window","location","href","sendEvent","code","VIEW_PGA_EVENT","json_data","activeRequests","requestTimeOut","commonService","appDataService","portfolioModelService","fundUniverseListService","fundService","firmService","fundDetailService","firmDetailService","benchmarkService","activityLogService","analysisService","userService","indexManagerService","codeOfConductService","peerGroupAnalysisService","userFundService","universeManagerService","codeTableService","adminService","contentService","eventService","minorityService","this","Axios","create","baseURL","process","maxRedirects","paramsSerializer","params","paramsSerialize","preLogin","email","password","manager_link","login","rememberMe","remember_me","signUp","formData","preSignUp","checkCode","verificationCode","requestPasswordReset","resetPassword","newPassword","new_password","updatePassword","updateProfile","get","updateDbToMl","fund_or_vehicle_name","heard_about_hfr_from","reports_fund_performance_to_hfr","fetchAllCountries","fetchDisclaimer","placement","fetchDisclaimerPrompt","approveDisclaimerPrompt","CommonService","fetchStrategies","fetchRegionalFocus","fetchLiquidAltTypes","fetchLiquidAltRegions","fetchMax12B1Fees","fetchMaxDeferredFees","fetchMaxFrontFees","fetchProductClasses","fetchBenchmarks","fetchAdvanceNotices","fetchFundCurrencyCodes","fetchReportings","fetchReportingStyles","fetchRedemptions","fetchSubscriptions","fetchFirmAssetCurrencies","fetchStaticIndexes","fetchDynamicIndexes","AppDataService","fetchPortfolioModels","fetchPortfolioModelFunds","modelId","fetchPortfolioModelStats","fetchPortfolioModelVami","createNewModel","funds","updatePortfolioModel","put","deleteModel","delete","sharePortfolioModel","shareTo","isShareAll","user_ids","all","PortfolioModelService","fetchFundList","fetchFundListByListId","listId","page","sortBy","orderBy","sort_by","sendGroupReportByListId","createFundList","fundIds","fund_ids","updateFundList","deleteFundList","shareFundList","fetchUniverseList","fetchFundsByUniverseListId","sendGroupREportByUniverseListId","FundAndUniverseListService","fetchRORDetails","fundId","trim","from","to","fetchAUMDetails","fetchRORDetailsForBenchmarks","JSON","stringify","Number","fetchFunds","fetchFundDetails","fetchExFunds","fetchFundName","text","query","fetchFundIds","exportFunds","responseType","generateFundPdfReport","fetchFirmDetails","firmId","fetchProfileStatsDetail","benchmark1","benchmark2","benchmark3","startDate","endDate","parseInt","start_date","end_date","fetchStateCodes","fetchRORDateRange","fetchFundPdfReport","bulkUpdateFund","fetchRecentlyEdited","fetchFavorited","updateFavorited","fetchListCreatedFund","fetchListUpdateFund","searchFunds","fetchFundSearchAllFundId","fetchAllField","fetchRORExport","tableName","table_name","fund_or_firm_id","uploadRORImport","file","FormData","append","headers","fetchFundSearchMinorityType","fetchFundSearchQuery","fetchMeFundSearch","createFundSearchQuery","json","fetchFundSearchQueryDetail","queryId","updateFundSearchQueryDetail","deleteFundSearchQueryDetail","fetchLatestPerformance","updateLatestPerformance","validateLatestPerformance","postDownloadFile","downloadFileByUrl","FundService","searchFirms","fetchAllColumns","FirmService","fetchFundBasicInfo","fetchFundROR","fetchNAVAssets","fetchNAVNavs","fetchFundDistributions","fetchFundLeverages","fetchFundInstruments","fetchFundIndustryGroups","fetchFundInvestorTypes","fetchFundRegionWeights","fetchDataDropdown","fetchFundUniverses","fetchFundBenchmark","fetchCalculateNAV","saveToDb","save_to_db","fetchLegacyStrategy","fetchAsiStrategy","validateFundROR","validateFundAsset","updateFundROR","updateNAVROR","updateAssetROR","updateFundBasicInfo","param","updateFundUniverses","createFundBasicInfo","updateFundDistributions","updateFundIndices","createFundLeverage","updateFundLeverage","deleteFundLeverage","date","work_date","createFundInstrument","updateFundInstrument","deleteFundInstrument","createFundIndustry","updateFundIndustry","deleteFundIndustry","createFundInvestorType","updateFundInvestorType","deleteFundInvestorType","createFundRegionWeight","updateFundRegionWeight","deleteFundRegionWeight","fetchDueDiligenceInvestor","updateDueDiligenceInvestor","fetchDueDiligenceScoreCard","resetDueDiligenceScoreCard","updateDueDiligenceScoreCard","fetchDueDiligenceMonthly","updateDueDiligenceMonthly","createDueDiligenceMonthly","deleteDueDiligenceMonthly","fetchDueDiligenceDocuments","fetchFundPrincipals","updateFundPrincipals","createFundPrincipals","deleteFundPrincipals","fetchFundAPGL","fetchFundProperties","updateFundProperties","createFundProperties","deleteFundProperties","prodId","prop_id","fetchFundTableDropdown","updateFundStatusActivate","cloneFund","fundName","fund_name","fetchListPlatform","updateListPlatform","platforms","previewDeleteFund","deleteFund","fetchESGStrategies","fetchFundIndexEligibilityDetails","indexFamilyId","updateFundIndexEligibilityDetails","body","FundDetailService","fetchFirmInfo","fetchFirmAssets","fetchFirmAssetsHedgeFund","fetchFirmCCMC","fetchFirmCMIC","fetchFundsOfFirm","fetchAllFirms","updateFirmInfo","updateFirmAssets","updateFirmAssetsHedgeFund","updateFirmCCMC","updates","updateFirmCMIC","createFirmInfo","getFileDueDiligence","getListDueDiligenceAct","createDueDiligenceAct","updateDueDiligenceAct","getDueDiligenceSentMess","createDueDiligenceSentMess","deleteDueDiligenceSentMess","getDueDiligenceReceiveMess","createDueDiligenceReceiveMess","updateDueDiligenceReceiveMess","deleteDueDiligenceReceiveMess","getChecklistMain","getLegalChecklist","getOldBackgroundChecklist","updateChecklistMain","updateLegalChecklist","updateOldChecklist","fetchDueDiligenceContact","updateDueDiligenceContact","deleteDueDiligenceContact","contactName","contact_name","createDueDiligenceContact","fetchDueDiligenceMeeting","createDueDiligenceMeeting","updateDueDiligenceMeeting","deleteDueDiligenceMeeting","fetchCodeOfConduct","updateCodeOfConduct","createCodeOfConduct","deleteCodeOfConduct","previewDeleteFirm","deleteFirm","fetchFirmUser","fetchMultiManagerPlatform","updateMultiManagerPlatform","patch","FirmDetailService","getAllBenchmark","createBenchmark","updateBenchmark","deleteBenchmark","getBenchmark","getFundBenchmark","BenchmarkService","fetchDataEvent","fetchEventDetail","eventId","fetchListUser","fetchListCode","fetchLegacyLog","fetchListUserByText","ActivityLogService","getAllGroups","getOwnerGroups","getDetailsGroup","groupCode","createGroup","parentGroupCode","cloneCode","parent_group_code","clone_code","updateGroup","deletedFundIds","delete_fund_ids","username","deleteGroup","fetchGroupStats","peerGroupVAMI","b1","b2","b3","exportHistoricalData","source_type","sourceType","data_type","dataType","period","entity_id","entityId","AnalysisService","fetchInternalUsers","UserService","getAllIndexManager","createIndexManager","index_eligibility","updateIndexManager","indexId","deleteIndexManager","getIndexManagerDetail","updateIndexManagerDetail","IndexManagerService","getCodeOfConduct","agreed","firm_id","CodeOfConductService","fetchUniverseStats","universeListId","fundListId","portfolioModelId","staticIndexIds","dynamicIndexIds","strategy","subStrategy","regionalFocus","inHFRI","inEmergingMarkets","universe_list_id","fund_list_id","portfolio_model_id","static_index_ids","dynamic_index_ids","sub_strategy","regional_focus","in_HFRI","String","in_emerging_markets","fetchFundAndBenchmark","fetchPeerGroupPdfReport","PeerGroupAnalysisService","fetchAllUserFunds","fetchUserFundDetails","createNewUserFund","updateUserFund","deleteUserFund","shareUserFund","universe_list_ids","fund_list_ids","portfolio_model_ids","UserFundService","getUniverseManagerList","createUniverseManager","updateUniverseManager","universeId","deleteUniverseManager","getUniverseManagerDetail","UniverseManagerService","getCodeTableList","createCodeTable","updateCodeTable","deleteCodeTable","CodeTableService","openAdmin","then","res","responseURL","AdminService","fetchArticles","fetchArticleDetail","articleId","ContentService","fetchMinorityTypes","countryCode","fetchFundMinorityStatuses","fetchFirmMinorityStatuses","updateFundMinorityStatuses","updateFirmMinorityStatuses","MinorityService","interceptors","response","use","status","config","Authorization","_setupLoadingIndicator","qs","keys","reduce","s","Array","isArray","length","req","clearTimeout","setTimeout","nProgress","done","APIClient","shouldShowProgressBar","isCancel","canceledIndex","_","startsWith","start","set","LoadingDetails","style","position","top","left","background","width","height","display","alignItems","justifyContent","zIndex","tip","Admin","useHistory","useState","setIsLoading","useSelector","React","useEffect","showAdmin","is_staff","spinning","title","subTitle","extra","onClick","useServiceState","serviceFunction","loading","setLoading","setError","setData","invoke","result","f","AnalysisGroupListContext","createContext","refetchGroup","setAddedRow","AnalysisGroupListProvider","children","getAllGroup","addedRow","addedRowTree","useMemo","parentId","group_code","results","Provider","defaultValue","fundDataDropdown","dataFirms","firmIdChoose","dataBenchmark","refetchFirm","setFirmIdChoose","dataMinoritySearch","FundDetailDropdownContext","FundDetailDropdownProvider","isExternal","getDataDropdown","getMinoritySearch","getAllFirms","moreFundDataDropdown","setMoreFundDataDropdown","newVal","Colors","ContactUsModal","showModal","onRequestClose","visible","onCancel","footer","flexDirection","Header","Layout","Content","Footer","StyledHeader","styled","StyledFooter","StyledContent","LogoContainer","Link","ImgLogo","img","MainLayout","useRouteMatch","useDispatch","setShowModal","disclaimerData","invokeDisclaimerData","dontShowAgain","setDontShowAgain","alt","src","logo","className","mode","theme","defaultSelectedKeys","selectedKeys","Item","BulbOutlined","SubMenu","target","UserOutlined","first_name","last_name","KeyOutlined","LogoutOutlined","margin","color","cursor","rel","marginLeft","TwitterOutlined","LinkedinOutlined","YoutubeOutlined","prompt","show_prompt","checked","onChange","dangerouslySetInnerHTML","__html","content","highLightAnim","keyframes","Wrapper","ResizableTitle","props","onResize","restProps","handle","stopPropagation","draggableOpts","enableUserSelectHack","GroupTable","selectedGroup","onSelectGroup","isShownInModal","expandedRowKeys","onExpand","useContext","searchText","setSearchText","searchedColumn","setSearchedColumn","columnsWidth","setColumnsWidth","searchInput","useRef","getColumnSearchProps","dataIndex","filterDropdown","setSelectedKeys","confirm","clearFilters","padding","ref","placeholder","marginTop","handleSearch","icon","SearchOutlined","size","handleReset","filterIcon","filtered","onFilterDropdownVisibleChange","select","columns","ellipsis","onHeaderCell","column","handleResize","fundGroupData","toLowerCase","dataGroup","hashTable","aData","dataTree","sort","b","group_name","parentGroup","transformData","expandable","components","header","cell","rowKey","rowClassName","record","dataSource","pagination","scroll","y","x","rowSelection","fixed","columnWidth","selectedRowKeys","selectedRows","AddGroupModal","isOpen","setParentGroup","submitting","setSubmitting","isAddToSubGroup","setAddToSubGroup","useForm","form","resetFields","onOk","validateFields","getFieldValue","success","catch","err","finally","confirmLoading","layout","label","required","rules","marginBottom","group","AddFundModal","onRefetch","setFundIds","updatedFundIds","split","TextArea","rows","Option","Select","BenchmarkOptions","benchmarks","handleChange","renderBenchmarkOptions","option","gutter","span","showSearch","optionFilterProp","filterOption","input","indexOf","allowClear","Panel","Collapse","PanelDetailGraph","graphData","graphLayout","defaultActiveKey","showArrow","useResizeHandler","displaylogo","memo","vami","datesArray","hovertemplate","getHoverText","toUpperCase","slice","autosize","xaxis","showgrid","showline","tickformat","categoryorder","categoryarray","Set","yaxis","l","r","t","pad","getVAMIGraphData","ExportTypeEnum","Title","Typography","StyledModal","Modal","TableWrapper","StyledRow","Row","StyledCol","Col","RenderTableCell","toLocaleString","minimumFractionDigits","CalculateModal","getStats","dataStats","getVAMI","dataVAMI","setBenchmarks","render","hypothetical_performance_history","yearlyRecord","year","total","rors","ror","maximumFractionDigits","month","padStart","toFixed","maxHeight","overflow","level","backgroundColor","annualized_ror","annualized_standard_deviation","average_monthly_ror","standard_deviation","winning_months","high_month","low_month","sharpe_ratio","fund","StyledCard","Card","FundList","getFundList","dataFundList","loadingFundList","resolvedRowTree","selectedRowId","parent","unshift","selectedFunds","setSelectedFunds","showCalculationModal","setShowCalculation","showAddFund","setShowAddFund","deleting","setDeleting","sorter","nameA","nameB","defaultSortOrder","currentSource","setCurrentSource","handleExport","JsFileDownload","handleExportClick","List","Papa","unparse","HistoricalROR","HistoricalAUM","HistoricalYearlyROR","row","justify","disabled","CalculatorOutlined","PlusOutlined","onConfirm","danger","DeleteOutlined","_pagination","_filter","_sorter","currentDataSource","showTotal","range","defaultPageSize","locale","emptyText","image","Empty","PRESENTED_IMAGE_SIMPLE","trigger","overlay","bottom","DownloadOutlined","AssignUserModal","selectedUser","setSelectedUser","options","internal_users","DuplicateGroupModal","setName","noStyle","MoveToGroupModal","moveToGroup","setMoveToGroup","isMoveToSubGroup","setMoveToSubGroup","visibleWidth","ResponsiveTitle","Container","div","ActionsContainer","GroupList","showDuplicateModal","setShowDuplicateModal","showCopyModal","setShowCopyModal","showAssignModal","setShowAssignModal","expandedKeys","setExpandedKeys","actionContainerRef","useLayoutEffect","document","querySelector","scrollIntoView","behavior","expanded","prev","CopyOutlined","EditOutlined","UserAddOutlined","LeftContainer","RightContainer","Handler","ResizeMask","MaskLeft","MaskRight","Analysis","setSelectedGroup","isShowAddGroup","setIsShowAddGroup","setWidth","startX","setStartX","dragging","setDragging","lastX","resizeMaskRef","onTouchMove","event","minWidth","touches","clientX","onTouchEnd","onMouseUp","onMouseMove","bodyStyle","flex","opacity","onMouseDown","onTouchStart","ExternalMainLayout","marginRight","lineHeight","open","textDecoration","DUE_DILIGENCE_REQUEST_ENUM","PERFORMANCE_REQUEST_ENUM","UserProfileChangePasswordForm","hfrml_internal_user","RenderChangePassword","loadingSubmit","setLoadingSubmit","onFinish","labelCol","wrapperCol","prefix","Icon","pattern","RegExp","QuestionCircleFilled","validator","rule","Promise","reject","resolve","htmlType","dataFirmDetail","refetch","dataFirmDetailSubmitRef","dataChanged","setDataChanged","FirmDetailDataContext","FirmDetailDataProvider","getFirmDetail","initialValue","clearSnapshot","loadSnapshot","saveSnapshot","DraftManagerContext","DraftManagerProvider","usage","dateFields","getName","useCallback","btoa","setItem","userId","replace","rawData","getItem","changedValues","parse","acc","moment","useDraft","dataFundDetail","getDueDiligenceRequest","getPerformanceRequest","getFundDetail","dataChecklistMain","loadingChecklistMain","setDataChangeChecklistMain","dataChangeChecklistMain","dataLegalChecklist","loadingLegalChecklist","setDataChangeLegalChecklist","dataChangeLegalChecklist","dataOldChecklist","loadingOldChecklist","setDataChangeOldChecklist","dataChangeOldChecklist","dataInvestorOpinion","loadingInvestorOpinion","dataChangeInvestor","setDataChangeInvestor","dataLatestPerformance","latestPerformanceLoading","performanceDataChange","setPerformanceDataChange","setRORDataChange","dataRORLoading","dataROR","rorDataChange","values","setAssetDataChange","assetDataChange","dataAssetLoading","dataAsset","dataDistribution","dataDistributionLoading","distributionDataChange","setDistributionDataChange","setNAVDataChange","navDataChange","dataNAVLoading","dataNAV","originalFundIndexEligibilityDetail","setOriginalFundIndexEligibilityDetail","fundIndexEligibilityDetailChange","setFundIndexEligibilityDetailChange","dataFundDetailChange","snapshot","setDataFundDetailChange","setViewMode","userOptions","FundDetailDataContext","FundDetailDataProvider","shouldUpdate","onClearUpdatedPerformance","getInternalUsers","internalUsers","setSnapshot","_latestPerformanceDataChange","_RORDataChange","_distributionDataChange","_navDataChange","_assetDataChange","_dataChangeChecklistMain","_dataChangeLegalChecklist","_dataChangeOldChecklist","_dataChangeInvestor","appSetting","view","getDataChecklistMain","getChecklistLegalDoc","getChecklistOldBackground","getInvestorOpinion","DUE_DILIGENCE_MAIN","DUE_DILIGENCE_LEGAL_CHECKLIST","DUE_DILIGENCE_OLD_CHECKLIST","DUE_DILIGENCE_INVESTOR","fund_id","latestPerformance","getFundROR","getNAVAssets","getNAVNavs","getDistributions","LATEST_PERFORMANCE","ROR","ASSET","NAV","DISTRIBUTION","debounceRef","prevState","_fundIndexEligibilityDetailChange","TabContentWrapper","StyledIcon","ActivityBlock","countUpdated","countCreated","setTypeSelectActivity","setActiveTab","ACTIVITIES_DATA","paddingTop","InfoCircleOutlined","fontSize","textTransform","percent","strokeWidth","showInfo","strokeColor","renderActivityProgress","dataAllColumns","defaultColumns","DEFAULT_COLUMNS","FundSearchColumnContext","FundSearchColumnProvider","getAllColumns","allColumnLoading","defaultKey","human_readable_name","TextID","Text","Flex","StyledList","CreatedUpdatedFunds","bordered","renderItem","fontWeight","FUNDS","DraftTab","myDrafts","LeftNavFirmEnum","RightTabFirmEnum","CollapseFirmEnum","tabInCollapseFirmEnum","FundFirmName","FavoritedTab","dataFavorited","onChangeFavorited","listFundSelected","setListFundSelected","isEdited","setIsEdited","loadingDelete","setLoadingDelete","localeCompare","sortDirections","onSelectChange","LeftNavFundEnum","RightTabFundEnum","CollapseFundEnum","TabInCollapseFundEnum","renderSearchListFirm","MAIN_INFORMATION","rightTab","FIRM_INFO","FIRM_REG_INFORMATION","SEC_INFO","NON_SEC_INFO","CO_INVESTMENTS","FIRM_ESG","getFundIndexEligibilityDetailsOptions","prefixName","INDICES","getFundIndexEligibilityReviewOptions","renderSearchListFund","BASIC_INFO","PERFORMANCE","INFORMATION","FUND_INFO","collapse","STRUCTURE","FEES","FUND_INVESTMENT_INFO","INVESTMENT_INFO","STRATEGY_DESCRIPTION","OFFSHORE_FUND_INFO","OFFSHORE_FUND_INFORMATION","REGION","ELECTRONIC_TRADING_PLATFORM","FUND_ESG","EXPORT_SETUP","DUE_DILIGENCE","INVEST_OPINIONS","HFR_AM_INFO","HFR_AM_INFO_NOTE","HFR_AM_INFO_ARCHIVE_NOTES","EXECUTIVE_ORDERS","GenUtil","namespace","precision","numeral","format","AddToFavoritedModal","selectedFundsAddFavorited","add","AddToIndexModal","getAllIndex","dataIndexManager","loadingIndexManager","selectedIndex","setSelectedIndex","AddToModal","DeleteFundModal","selectedFund","selectedFundName","onSubmitDeleting","submitText","setSubmitText","previewData","handleSubmit","okText","minHeight","okButtonProps","textAlign","linked_entities","compare","multiple","CustomNumberInput","max","min","onBlur","otherProps","isInteger","Error","inputVal","inputNumber","isNaN","inRange","FormItemInput","labelAlign","normalize","typeField","maxLength","notConnected","suffix","convertToNumber","convertToFloat","parseFloat","prevValues","nextValues","validateStatus","getFieldError","FormItemInputNumber","FormItemCheckBox","disable","valuePropName","borderRadius","FormItemSelect","selectProps","aria-autocomplete","FormItemDatePicker","picker","_isValid","FormItemTextArea","isVertical","FormItemRadio","radioProps","rest","Group","o","FormItemAutoComplete","UpdateBenchmarkModal","LIST_FORM","strategies","strategy_code","strategy_name","subStrategies","sub_strategy_code","sub_strategy_name","region_inv_focus","code_code","code_description","fund_status_code","Form","initialForm","strategy_code_new","sub_strategy_code_new","setFieldsValue","WrapperTable","FooterLeft","FooterRight","FundSearch","currKey","foundColumnKey","currColumn","filter_type","getLegacyStrategy","dataLegacy","getAsiStrategy","dataAsi","setPage","pageSize","setPageSize","selectedFundIds","setSelectedFundIds","setSelectedFundName","loadingExport","setLoadingExport","showAddToGroup","setShowAddToGroup","showAddToIndex","setShowAddToIndex","showAddToFavorited","setShowAddToFavorited","showUpdateBenchmark","setShowUpdateBenchmark","setSelectedFundsAddFavorited","showDeleteFund","setShowDeleteFund","setSortBy","setOrderBy","fundSearchParamsRedux","filteredInfo","fundData","allFundIds","invokeSearchFundIds","handlePageSizeChange","lteDate","gteDate","lte","gte","supports_exact_match","contains","equals","array_anyof","where","peer_group_code","limit","order_by","exportFundSearch","file_type","resFile","removeFromFilter","editedSearch","addToFilter","filterType","optionsDropdown","codeOptions","region_inv_focus_country","align","ReloadOutlined","onPressEnter","legacy_strategies","sub_strategies","asi_strategies","asi_sub_strategies","esgStrategies","esgSubStrategies","newOptions","tabIndex","handleClearAll","handleSelectAll","renderAddToList","alignSelf","overflowY","tagValue","join","closable","onClose","order","columnKey","handleTableChange","can_delete_fund","showSizeChanger","currentPage","pageSizeOptions","onShowSizeChange","columnIndex","filteredValue","onCell","firm_name","Intl","NumberFormat","currency","firm_denomination","FIRM_ASSETS","denomination","getFormattedYearAndMonth","getFormattedYearMonthAndDay","DroppableIds","getListStyle","isDraggingOver","getItemStyle","isDragging","draggableStyle","userSelect","grid","border","HeaderGroup","groupName","onAddAll","FundSearchColumnBuilder","setOpen","dataAllColumn","textColumnSearch","setTextColumnSearch","activePanels","setActivePanels","fundSearchAllColumns","curr","currentColumn","foundIndex","section","flattenAllColumns","flatMap","fundColumns","foundColumn","targetColumns","setTargetColumns","sourceColumns","c","some","uniqueColumns","onDragEnd","destination","droppableId","TargetColumns","SourceColumns","list","startIndex","endIndex","splice","removed","reorder","droppableSource","droppableDestination","sourceClone","destClone","move","remove","innerRef","targetCol","draggableId","provided","dragHandleProps","draggableProps","flatenColumns","draggableIndex","activeKey","col","ModalEditQuerySearch","selectedQuery","setCreatedQueryName","refetchQuery","paramsSearch","searchName","centered","FundQuerySearch","showSaveQuery","setShowSaveQuery","showCreateQuery","setShowCreateQuery","setSelectedQuery","createdQueryName","fetchSearchQuery","dataSearchQuery","selected","handleUpdateQuery","handleDeleteQuery","SaveOutlined","DeleteTwoTone","twoToneColor","ModalCreateFundFirm","typeCreate","optionFirm","setOptionFirm","sortedFirms","filterOptions","firmName","onSearch","PeerGroupSearch","fetchPeerGroup","peerGroupData","selectedPeerGroups","maxTagCount","RightTitle","FundTableHeader","onShowSideBar","showSidebar","showColumnBuilder","setShowColumnBuilder","setTypeCreate","handleMenuClick","lg","LeftOutlined","RightOutlined","PlusSquareOutlined","TableOutlined","RecentlyEditedTab","getRecentlyEdited","dataEdited","TabPane","Tabs","StyledMyFundTab","DashboardTab","typeSelectActivity","isAllUser","setIsAllUser","setShowSidebar","getListCreated","listCreateFund","loadingListCreate","getListUpdated","listUpdateFund","loadingListUpdate","all_users","getFavorited","loadingFavorited","handleRefetchFavorited","md","checkedChildren","CheckOutlined","unCheckedChildren","CloseOutlined","count","hideAdd","FirmDetailLabelSearchContext","boldText","filterArr","isFiltering","FirmDetailLabelSearchProvider","FFPerfectScrollbar","containerRef","_getBoundingClientRect","getBoundingClientRect","original","Math","round","DividerForm","notMargin","ExFundDetailLabelSearchContext","ExFundDetailLabelSearchProvider","RenderLabelExFund","subtitle","whiteSpace","FundDetailLabelSearchContext","FundDetailLabelSearchProvider","RenderLabelForm","updateFieldValue","getInternalHooks","namePath","MODE_ESG_VIEW","ListItem","FundESGSection","modeView","isFundESG","isConsiderESG","esgStrategyCode","esgSubStrategyCode","esgSubStrategyDropdown","selectableESGStrategies","selectableESGSubStrategies","availableESGSubStrategyCodes","availableESGSubStrategies","esg_strategy","DESCRIBE_BEST_DESCRIBE","DESCRIBE_ESG_CRITERIA","DESCRIBE_ESG_SOCIAL","DESCRIBE_GOVERNANCE","ESG_DATA_SOURCES","currentValue","isInput","currentESGSubStrategy","optionEsg","is_fund_esg","INTERNAL","findOptionsRadio","renderLabelField","EXTERNAL","fontStyle","ExFirmDetailLabelSearchContext","ExFirmDetailLabelSearchProvider","RenderLabelExFirm","RenderLabelFormFirm","FIRM_INSTRUMENTS","FirmESGSection","dataListFund","isFirmEsg","isFirmPolicies","receiveGuidance","field","is_firm_esg","xl","xs","thirdparty_guidance","FirmCoInvestment","offer_coinvestments","hasOfferCoinvestments","private_equity","borderBottom","typical_size","typical_liquidity","coinvestment_number","public_equity","private_debt","public_debt","other_instrument","vehicle_commingled_fund","vehicle_fund_of_one","vehicle_managed_account","other_vehicle","ModalEditConduct","selectedConduct","setSelectedConduct","updateConduct","time_stamp","LIST_FIELD","placeHolder","MailOutlined","FieldTimeOutlined","isDate","HomeOutlined","InfoOutlined","HighlightOutlined","submitData","code_of_conduct","original_code_of_conduct","job_title","company","initials","agreement_version","original_agreement_version","handleUpdateRow","CodeOfConduct","itemDelete","setItemDelete","dataCodeOfConduct","deleteConduct","FirmDueDiligence","getDataDocs","dataDocs","firm_url","search_url","getMonthRange","dateStart","dateEnd","tempStart","clone","headerRow","readOnly","PerformanceUpdate","fundDetails","inceptionDate","setGrid","isUpdate","setIsUpdate","draftData","setDraftData","updateGrid","hasNoPerformance","latest_asset","latest_nav","latest_ror","latestROR","latestNav","latestAsset","dateList","subtract","dateRow","latestRorMoment","latestAssetMoment","latestNavMoment","dateRowMoment","isAfter","isSame","rorChanges","yyyy_mm","latest_ror_value","assetChanges","latest_asset_value","navChanges","latest_nav_value","arrayUpdate","rowIndex","cellIndex","parseGridData","valueViewer","isAsset","isNAV","abs","valueRenderer","isCellNavigable","onCellsChanged","changes","tempGrid","isWarningAssetData","next","percentageDifference","ModalConfirmUpload","setFileData","minDate","accept","showUploadList","beforeUpload","skipEmptyLines","complete","textYear","reducerData","cur","yearData","accum","DataSheetType","monthConvert","originalValue","sortByYear","isAscending","DataSheet","initialData","isReadOnly","isInCreateNewExFund","currencyValue","onCellSelect","originalGrid","setOriginalGrid","fileData","showModalUpload","setShowModalUpload","setIsAscending","formatNumber","FIRM_ASSETS_HF","generateDataSheetData","calculateAnnual","numerator","exp","transformedData","accumulator","currentRow","rowData","finalRow","rowTemplate","fill","finalData","generatedInitialData","hashedOriginalData","v","YearSelect","onCommit","onRevert","setEvent","autoFocus","openMenuOnFocus","menuPlacement","opt","onKeyDown","which","persist","styles","indicatorSeparator","sortedGrid","currentYears","setFileName","handleExportCSV","fileName","UploadOutlined","cancelText","onSelect","selection","end","j","selectedYear","selectedMonth","CaretUpOutlined","CaretDownOutlined","dataEditor","isDuplicated","ExclamationCircleFilled","prevMonthAsDate","prevCell","originalCell","isWarning","prevValue","nextValue","compareCellValue","isOutOfDateRange","isBefore","resolvedValue","tempGridROR","indexRow","NextBackButton","FirmAssets","dataFirmAsset","dataLoadingFirmAssets","firmAssetDataChange","setFirmAssetsDataChange","firmAssetsSubmitting","firmAssetsHFDataChange","dataFirmAssetHF","loadingFirmAssetHF","submittingFirmAssetHF","onUpdateHFData","canAdd","founded","WrapperMinority","FirmDI","minorityTypes","setDataFirmDetailSubmit","firmCountry","isMinorityOwnedFirm","direction","minority_type","minority_description","FirmCCMC","has_securities","manager_confirms","download","isSeparateShareClassesEdited","separate_share_classes","isPreTradeEdited","pre_trade_compliance_restrictions","isOtherEdited","other_measures","subscription_notice","subscription_advance_notice","hideOnSinglePage","FirmCMIC","StyledTabs","FirmExecutiveOrders","ccmcData","cmicData","initialCMICData","initialCCMCData","FirmNonSecInfo","non_sec_country","non_sec_reg_auth","FirmSecInfo","sec_country","sec_state","organization_type","sec_exemption_reason_type","RIGHT_TAB_PANE","FirmRegMain","listSearch","renderTab","ModalFundActivation","setSelectedFund","updateListFund","contact_person","contact_phone","business_phone","contact_email","additional_comments","EXFUND_FIRM_TABLE","multiSelectField","dateField","numbericField","FundOfFirmTable","initialColumn","loadingTable","reloadTable","initialFilter","showModalFundStatus","setShowModalFundStatus","setFilteredInfo","EXFUND","exportFirmFund","RangePicker","onFilter","fundValue","dateRange","isBetween","sortColumn","sortColumnNumber","FIRM","allColumns","fundFamilyColumns","allExColumns","InfoText","ColumnBuilder","isInternal","fundTableColumns","finalAllColumns","indexFamilyColumns","indexFamilyKey","storedColumns","InfoCircleTwoTone","groupIndex","PerformanceDataSheet","onDataChange","cols","isNav","prevRow","parsedGrid","DataConfirmationModal","flaggedAssets","flaggedRors","latestRORData","Date","latestNAVData","latestAssetData","latestUpdatedDate","isDataValid","ExFundPerformanceItem","setShouldUpdate","setUpdatedFundPerformance","showDiscardDataSheet","setShowDiscardDataSheet","setFlaggedRors","setFlaggedAssets","handleSubmitPerformance","navs","assets","statusText","validatePerformanceData","fund_status","flaggedData","flagged_rors","flagged_assets","isPerformanceUpToDate","inception_date","isin","bloomberg_ticker","CheckCircleTwoTone","InboxOutlined","curr_code","FUND_STATUS_SHOW_PERFORMANCE","FirmLatestPerformance","dataFundsFirm","FundsOfFirm","rootState","fofColumns","getFundOfFirm","loadingFirm","FirmContactInfo","getFirmUsers","firmUsers","fetchingFirmUser","userColumns","change_user_admin_url","user_events_url","contact_state","contact_country","FirmOwnershipDescription","REGISTRATION_OPTIONS","ManagerFirmInfo","isMinorityFirm","minority_own_type","minority_own_level","xxl","isKeepOptions","hfr_analyst","offset","OWNERSHIP_DESCRIPTION","FirmMainInformation","StyledRadio","Radio","TextWrapper","p","FirmMultiManagerPodPlatform","isFirmUpdated","onChangeAll","loadingCMICData","loadingMultiManagerPlatform","firmCMICData","multiManagerPlatform","fundRowData","setFundRowData","allOption","setAllOption","newData","responses","foundData","multi_manager_platform","updateIsMultiManager","newValue","_value","newDataRecord","_multiManagerPlatformChange","EditableContext","EditableFormRow","component","EditableCell","editable","editingRow","setEditingRow","optionSelect","isDirty","inputRef","showTooltip","setShowTooltip","save","fund_family_code","childNode","endDateOfQuarter","quarter","endOf","resolvedQuarter","inputValue","validateTrigger","borderColor","minLength","paddingRight","FundFamilyTable","variant","fundFamilyData","onRefecth","isSubmitting","setIsSubmitting","editedData","setEditedData","dirtyData","setDirtyData","changedData","d","fund_family_id","inputProps","newRecord","FirmFundFamily","strategyOptions","subStrategyOptions","stategy_op","stategy_code","sub_stategy_op","sub_stategy_code","region_inv_focus_op","region_inv_focus_country_op","StyledForm","StyledTabList","active","TAB_LIST","CODE_OF_CONDUCT","FIRM_DIVERSITY_INCLUSION","FUNDS_OF_FIRM","FIRM_MULTI_MANAGER_POD_PLATFORM","FUND_FAMILY","FIRM_DATE_FIELDS","FirmDetailMain","initialPath","loadingSubmitForm","setLoadingSubmitForm","optionFilter","setOptionFilter","textFilterSearch","settextFilterSearch","setIsFirmUpdated","setFirmAssetsSubmitting","firmAssetsDataChange","setFirmAssetsHFDataChange","setSubmittingFirmAssetHF","firmCCMCDataChange","setFirmCCMCDataChange","firmCMICDataChange","setFirmCMICDataChange","multiManagerPlatformChange","setMultiManagerPlatformChange","getAllMinorityTypes","country","_firmAssetsDataChange","_firmAssetsHFDataChange","_firmCCMCDataChange","_firmCMICDataChange","parsedCCMCData","getFirmMinority","dataFirmMinority","firmMinorityStatuses","firm_minority_statuses","initialDataForm","firm_asset_date","firm_assets_date_hf","firm_assets_date_fof","getFirmAssets","getFirmAssetsHF","getFirmCCMC","firmCCMCData","getFirmCMIC","getMultiManagerPlatform","route","activeFirmNav","firm_contact_country","debouceRef","fieldChange","is_minority_firm","dataMinority","dataChange","minorityChange","initialValues","onFieldsChange","onValuesChange","allValues","convertObject","ccmcChanges","cmicChanges","MMPChange","multiManagerPlatformChangeKeys","isUpdateFirm","optionFillter","renderTabContent","CardTitle","optionShow","setOptionShow","handleCancel","flexWrap","newOption","saveOption","hfrml_readonly_internal_user","distribution","sortedXAxis","distGroup","o1","o2","a_val","b_val","getDistributionGraphData","drawdown","getDrawdownGraphData","FirmFundDescription","idx","show","renderHeaderCell","FundDetailsUtils","getFundStatsTableData","fund_si","fundStatsTableData","tableCellObj","category","fundStatsTableColumns","tableData","getFormattedTableDataForRORAndAUM","fetchedData","fetchedAnnualData","ele","digitWithMaxPrecision","cur_value","years","getDatesRangeList","datesRangesArr","fy","fm","ty","tm","fromYear","toMonth","toYear","m","fillBooleanField","getFirmDescription","firmData","principals","firm_assets_date","firm_assets_currency","firm_assets","getformattedNumber","iard_crd_number","sec_number","sec_registered","is_diversity_firm","address","city","postal_code","first_contact","second_contact","phone","getFundDescription","firm","fund_info","fund_fees","mgmt_fee","max_12b1_fee","liquid_alt_product","max_front_fee","max_deferred_fee","incentive_fee","ucits_compliant","firm_contact","high_watermark","hurdle_rate","leverage","product_class","liquid_alt_region","liquid_alt_type","domicile","structure","fund_assets_rep_date","fund_assets_currency","fund_assets","minimum_investment","min_investment_curr","subscriptions","redemptions","advance_notice","lockup","FundStrategyDescription","fundStrategyDescription","LegendContainer","Legend","PerformanceVersusUniverseChart","BAR_X","getScatterData","dataByName","KEYS","marker","line","symbol","zeroline","barmode","showlegend","UniverseSelectTypeEnum","StyledTable","Table","renderTable","Column","row1","row2","prevMonth","threeMonths","sixMonths","ytd","oneYear","twoYears","threeYears","fiveYears","PeerGroupForm","userFundData","endDateOptions","fundAndBenchmarkService","universeStatsService","benchmarkOptions","regionalFocusOptions","hfrDynamicIndexes","hfrStaticIndexes","portfolioModels","fundList","universeList","universeListData","universes","universeItem","HFR","fundItem","LIST","portfolios","portfolioItem","PORTFOLIO","hfrIndexes","staticIndexes","staticItem","dynamicIndexes","dynamicItem","selectedEndDate","setSelectedEndDate","fundAndBenchmarkData","invokeFundAndBenchmark","fundBenchmarkLoading","universeStatData","invokeUniverseStatData","universeStatLoading","selectedBenchmarks","setSelectedBenchmarks","filteredSubStrategy","setFilteredSubStrategy","strategyFromForm","generatePeerGroupPdfReport","modelList","resolvedUniverseStatData","sourceData","first_month","previous_month","three_month","six_month","one_year","two_year","three_year","five_year","resolveUniverseStatData","resolvedFundAndBenchmarkData","getBenchmarkName","selectedBenchmarkId","resolveFundAndBenchmarkData","extractedEmptyArrayProps","jsonData","hfrdb_trial","hfrml_external_user","common_end_date","fundBenchmarkData","up_and_down","ups","downs","responsive","getUpDownCaptureData","YEARLY_MONTHLY_COLUMNS","YearlyMonthlyDatatable","concat","ActiveTabEnum","Anchor","FixedHeader","PerfectScrollbar","StyledDownloadBtn","Button","FundDetailsPreview","isShowButtonFactsheet","Profile","invokeFundDetails","loadingFundDetails","rorData","invokeRORData","aumData","invokeAUMData","profileStatsData","invokeProfileStats","setFromDate","setToDate","datesRangeArray","setDatesRangeArray","setBenchmark1","setBenchmark2","setBenchmark3","isDateRangeUpdated","setIsDateRangeUpdated","loadingDownloadFactsheet","setLoadingDownloadFactsheet","rorItem","yyyymmm","datesRange","generatePdfReport","downloadFactsheet","benchmark_1","benchmark_2","benchmark_3","fetchRorAumProfileStats","affix","defaultActiveFirstOption","PeerGroup","tabBarGutter","handleTabChange","reverse","strategy_description","reporting_style","returns_currency","annualized_rors","items","fund_si_start_date","fund_si_end_date","CMIC","hasSecurities","separate_share_classes_14032","pre_trade_compliance_restrictions_14032","other_measures_14032","manager_confirms_14032","has_securities_14032","ExFundCardTitle","setTextFilterSearch","isUpdateFund","onPreview","isPreviewing","ContainerOutlined","useFieldValidate","arrayFieldValidate","onUpdateTabDirty","RequiredDataHelper","requiredFields","fieldNames","fields","leftNavKey","listField","listFieldInLeftNav","ckey","getFieldsValue","errorData","fieldName","instance","FIELDS","isRequired","contact_company","contact_address1","contact_address2","contact_city","contact_postal_code","contact_fax","contact_web","ExFundContact","contactCountry","sm","default","registerRequirement","ucitsiii","fund_assets_date","accepts_new_investment","min_invest","add_invest","min_invest_indv","accepts_mgd_accts","run_sep_mgd_accts","ExFundDetail","fundStatusField","acceptMgdAcct","removeRequiredFields","addRequiredFields","liquidAltProduct","isHurdleRate","LIST_SELECT_FORM","isValidateField","optionsMinInvest","optionsAddInvest","optionsAssetSize","gate_fund","currentValues","ExFundDI","isMinorityManagedFund","isFieldTouched","OPTION_INCENTIVE_FEE","redemption_fee","administrative_fee","redemption_fee_months","sales_fee","is_high_watermark","ExFundFeeSchedule","isLiquidCheck","checkHurdleRate","IndustryTable","isOverview","dataDropdown","getIndustry","industryData","dataLoading","localData","setLocalData","showAddNew","setShowAddNew","handleAddRow","long_value","short","net","handleDeleteRow","submit","ExFundIndustry","InstrumentsTable","getInstruments","instrumentData","localInstrument","setLocalInstrument","ExFundInstruments","RegionsTable","getRegionWeights","regionWeightData","EMERGING_MARKET_SET","FundInfoRegion","selectedRegion","regionCountryOptions","isCheckBox","regionValue","is_emerging_markets_fund","ExFundInvestmentStrategy","GlobaldataDropdown","selectedStrategy","optionSubstrategy","isFundActive","InvestorTypeTable","getInvestorType","investorTypeData","selectOptions","selectedInvestor","number","ExFundInvestorType","ExFundOverview","TextFieldYesNo","LIST_OVER_VIEW","indexTab","isDescription","equity_subscription","equity_redemption","subscription_cutoff_time","subscription_cutoff_timezone","subscription_settlement_days","is_lockup","lockup_type","use_of_leverage_type","lockup_period","gate_investor","INSTRUMENTS","REGIONS","INDUSTRY","INVESTOR_TYPE","ExPerformanceAssetsBTC","ExPerformanceNAV","ExPerformanceRateOfReturn","StyledTabPane","ExFundPerformance","setIsUpdateFund","dataChangeRef","showConfirm","setShowConfirm","targetKey","setTargetKey","PERFORMANCE_UPDATE","setActiveKey","hyperlink","hyperlinked","ModalEditPrincipals","selectedPrincipals","setSelectedPrincipals","updatePrincipals","submitUpdate","identifier","rank","Principals","getPrincipals","dataPrincipals","itemPrincipals","paramsSubmit","deletePrincipals","ExFundPrincipals","ExFundRegions","is_annual_performance_audit","last_audit_date","auditor_name","legal_adviser","prime_broker","administrator","placement_agent","banking_agent","custodian","consultant","ExFundServiceProviders","isSpecifiedAuditorName","setIsSpecifiedAuditorName","isSpecifiedLegalAdviser","setIsSpecifiedLegalAdviser","isSpecifiedPrimeBroker","setIsSpecifiedPrimeBroker","isSpecifiedAdministrator","setIsSpecifiedAdministrator","optionsAuditorName","optionsLegalAdviser","optionsPrimeBroker","optionsAdministrator","is_offshore","registration_code","investor_type","redemption_advance_notice","redemption_return_percent","redemption_return_days","balance_redemption_return_days","performance_reporting","ExFundStructure","isRadio","lockupField","listHeight","ExFundFamily","loadingFundOfFirms","TAB_STATUS_ENUM","DEFAULT","tooltipText","FUND_DIVERITY_INCLUSION","FUND_PRINCIPALS","numberDateField","EXFUND_DATE_FIELDS","ExFundDetailMain","disableSnapshot","showPreview","setShowPreview","setTabList","getFundTableDropdown","dataTableDropdown","principalData","contryCode","getFundMinority","dataFundMinority","fundMinorityStatuses","fund_minority_statuses","numberWithCommas","handleUpdateDirty","checkFields","errorFields","checkFormData","allErrorFieldsNumber","currentTabFields","allRequiredFieldsNumber","tabItem","SUCCESS","tabRequiredFieldsNumber","tabErrorFieldsNumber","EDIT","WARNING","validateRORAUMData","handleSubmitForm","isValidRor","isValidAsset","isSubmittingFailed","dataFundDetailChangeObj","auditor_name_input","legal_adviser_input","prime_broker_input","administrator_input","dataFinalUpload","onFinishFailed","changedFields","touched","updatedValues","resetRelativeFields","MANAGER_LINK_EXTERNAL","has_index_factsheet","EditTwoTone","WarningTwoTone","activeTabId","instruments","region_weights","industries","investor_types","FundBasicInformation","dataListIndices","sortedListIndices","slicedFirms","FORMITEM_GROUP_MIDDLE","THIRD_GROUP_FORM","isDatePicker","data_source","allocation","ModalFundDueDiligence","isShowModal","setIsShowModal","selectedActivity","setSelectedActivity","updateDueDiligence","match","date_time","dateTimeUpdate","oper_id","comment","Activities","selectedComment","setSelectedComment","showComment","setShowComment","dataListDueDiligenceAct","ChecklistMain","editedDataChecklist","setEditedDataChecklist","indexRowEdit","setIndexRowEdit","textEditRow","setTextEditRow","readonly","LegalDocuments","OldBackgroundChecks","StyledCollapse","Checklist","ModalEditTableContact","selectedContact","setSelectedContact","updateContact","isEditedContactName","setIsEditedContactName","FileZipOutlined","PhoneOutlined","ChromeOutlined","fieldSubmit","old_contact_name","department","fax","web","state_code","zip","address1","address2","address3","new_contact_name","FileTextOutlined","DueDiligenceContacts","getDataContact","dataContact","DueDiligenceDocuments","LIST_FORM_TEXTAREA","InvestOpinion","MEETING_OPTIONS_TYPE","ModalEditTableMeeting","selectedMeeting","setSelectedMeeting","updateMeeting","meeting_date","meeting_type","attendee","comments","Meetings","getDataMeeting","dataMeeting","deleteMeeting","ModalEditTableMonthly","selectedMonthly","setSelectedMonthly","updateMonthly","monthly","slippage","internal","Monthly","getDataMonthly","dataMonthly","deleteMonthly","ScorecardModal","selectedScorecard","setSelectedScorecard","updateScorecard","weight","score","ScoreCard","getDataScorecard","dataScorecard","last_update","scorecards","RECORD_TYPE_OPTIONS","ReceiveSepActModal","updateReceiveSepAct","setSelectedReceiveMesseage","selectedReceiveMesseage","record_type","rec_type","minimum","maximum","reserved_capacity","incentive","liquidity","ReceivedSepAcct","getListMessage","listMesseage","deleteMessage","SentSepActModal","updateSentSepAct","sent_to","SentSepAcct","sent_date","SepAcct","LIST_TAB_PANE","DOCUMENTS","ACTIVITIES","SEP_ACCT","CHECKLIST","SCORE_CARD","CONTACTS","MEETINGS","MONTHLY","DueDiligenceMain","CCMC","ExecutiveOrders","FORM_CHECKBOX_LIST","ExportSetup","showCloneModal","setShowCloneModal","clonedFundName","setClonedFundName","isCloning","setIsCloning","handleClone","FundInfoElectronicTrading","isChangePlatform","setIsChangePlatform","dataListPlatform","listPlatform","setListPlatform","updateLoading","setUpdateLoading","FirmSelectModal","loadingFirmDetail","selectedFirmId","setSelectedFirmId","useDebounce","debouncedText","compareFirm","lowercaseSearch","stateLabel","countryLabel","foundState","op","foundCountry","strong","searchValue","contact_name1","hideValue","area","hasNoValue","FundContact","isModalOpen","setIsModalOpen","contactInfo","FORM_INPUT_GROUP_FOOTER","FORM_LEFT_GROUP","FORM_MIDDLE_GROUP","LIST_FIELD_EDITED_LIQUID_CHECK","Fees","isCheckHurdleRate","setIsCheckHurdleRate","CHECK_BOX_GROUP","Information","paddingBottom","contact_status","minority_manage_type","minority_manage_level","OPTION_USE_OF_LEVERAGE","Structure","SELECT_GROUP","isAutoComplete","woman_managed","isCheckbox","aifmd_compliant","sma_weeklyliquid_10mm","sma_monthlyliquid_20mm","isEmpty","sma_monthlyliquid_50mm","COLLAPSE_LIST","PRINCIPALS","FundInfoMain","arrCollapse","activeCollapse","setActiveCollapse","lastKey","renderCollapse","InvestmentInfo","isLockup","RIGHT_TOP_GROUP_FORMITEM","RIGHT_BOT_GROUP_FORMITEM","StrategyDescription","FundInvestmentInfoMain","FundInfoIndustry","FundInfoInstrument","FundInfoInvestorType","FundInfoLeverage","getLeverage","leverageData","localLeverage","setLocalLeverage","average","OffshoreFundInfo","invokeSearch","offshoreFund","fetchFundDetail","offshore_id","notFoundContent","LEVERAGE","INSTRUMENT","FundInformationMain","electronic_trading_platforms","ModalEditTableFundProperties","setIsOpen","selectedProperties","setSelectedProperties","updateProperties","listProperties","prop_value","prop_name","FundProperties","getFundProperties","dataFundProperties","idDelete","setIdDelete","fund_properties","codes","MonthList","APGL","getAPGL","dataAPGL","monthly_data","currentYear","monthCurrent","currentytd","ytd_data","Distributions","HistoricalData","selectedDate","setSelectedDate","getAllLogEvent","dataAllEvent","loadingAllEvent","getLogEvent","dataLogEvent","showAll","setShowAll","resolvedType","show_json_data","allHistoricalData","events","changedDate","change_data","dateAsKey","yyyymm","created_date","old","new","author","user__username","historicalDataSource","selectedDateAsKey","handleExportHistorical","MilionsManaged","selectedHistorical","setSelectedHistorical","ModalCalculateNAV","getCalculate","dataCalculate","dataSheet","NAVPerUnit","FundROR","reporting_frequency","LIST_TABPANE","DISTRIBUTIONS","FundPerformance","HFRArchiveNotes","OPTION_DAYS_TYPE","OPTION_DAYS","FORM_INPUT_HEADER","GROUP_FORM_CENTER","name_left","name_input","name_right","FORM_INPUT_FOOTER","HFRInvestmentInfo","HFRNotes","INDEX_ELIGIBILITY_ENUM","WAIVE_ENUM","LIST_COLLAPSE","HFRAMInfoMain","FundIndexEligibilityDetailsKeys","IndexEligibilitySelect","IndexEligibilityOptions","ConfirmedInfo","WaiveCriteriaForm","fundInfo","WaiveOptions","ReviewerInfo","optionsToDic","ELIGIBLE","NOT_ELIGIBLE","UNDER_REVIEW","MonthlyOptions","QuarterlyOptions","WILLING_TO_WAIVE","NOT_WILLING_TO_WAIVE","NOT_RESPONDED","ExclusionReasonOptions","SubscriptionDayTypeDic","transformFundIndexEligibilityDetailDataToSubmit","output","index_family_id","transformResponseToDataForm","parsedDateFormat","dateString","FundIndexEligibilityDetailsForm","indexElgibleManager","tempKey","setTempKey","tabData","isActive","TabWrapper","TabContent","getDetails","details","loadingGetDetails","currentBody","subscriptionInfo","dayType","subscription_day_type","subscription_days","equityRedemptionInfo","codeDescription","fundGateInfo","fundInvestorInfo","curValue","_isAMomentObject","Indices","loadingListIndices","selectedAsiStrategy","optionAsiSubstrategy","asi_strategy_id","manager","asi_sub_strategy","Universes","getUniverses","dataUniverses","listUniverseSelected","setListUniverseSelected","loadingAssign","setLoadingAssign","refetchUniverses","getIsActive","selectedRow","universe_id","is_active_in_universe","getIsInUniverse","is_in_universe","universe_name","universe_description","universeSubmit","FundDI","FundFamily","UNIVERSES","FUND_DIVERSITY_INCLUSION","FUND_PROPERTIES","FUND_DATE_FIELDS","monthFormattedFields","FundDetailMain","RORDataChange","NAVDataChange","activeExTab","setActiveExTab","listTab","setListTab","activeFundNav","om_date","multi_manager_platform_reviewed_date","liquidated_at","most_recent_review","hfri500_reviewed","added_to_hfri","removed_from_hfri","added_to_db","hfr_indices","findInitialValue","rorMonth","indicesChange","index_id","dataUpload","containsStr","MANAGER_LINK_INTERNAL","inputString","stringArray","SymbolTab","Dashboard","search","useLocation","fundIdFromUrl","firmIdFromUrl","URLSearchParams","selectActiveNav","onEdit","RenderTitleTabPane","ExNewFundContext","ExNewFundProvider","ExDashboardPerformance","dataExFunds","ExDraftTab","ExFundTableHeader","ExpandedRowRender","refreshUser","setShowModel","setSelectedFirm","signCheck","setSignCheck","ExRecentlyEditedTab","ModalCodeOfConduct","ReactHtmlParser","ModalMultiManagerPlatform","axios","isAxiosError","ModalDiversityInclusion","selectedFirm","setIsMinorityOwnedFirm","loadingMinorityTypes","isFieldsTouched","is_minority_or_woman_owned_firm","getValueFromEvent","LeftNavExNewFundEnum","ScrollBar","StopCOCDate","StyledButton","ExDashboardTab","multiManagerPlatformResponses","setMultiManagerPlatformResponses","selectedMMPFirm","setSelectedMMPFirm","showCOCModal","setShowCOCModal","showDAIModal","setShowDAIModal","showMMPModal","setShowMMPModal","notResponsedCOCFirms","setNotResponsedCOCFirms","notSetDAIFirms","setNotSetDAIFirms","notCompletedMMPFirms","setNotCompletedMMPFirms","getExFund","agreed_to_code_of_conduct","exFundColumns","latest_firm_asset","latest_firm_asset_hedge_fund","expandedRowRender","expandIcon","defaultExpandAllRows","ExNewFundLabelSearchContext","ExNewFundLabelSearchProvider","renderSearchListExNewFund","CREATE_FUND_PROFILE","RenderLabelExNewFund","NextBackNewFundTab","setStepTab","stepTab","ArrayValidateField","indexActive","TAB_LIST_CREATE_NEW_FUND","ARRAY_FIELD_VALIDATE","ExNewFundContact","maxlength","ExNewFundCreateFundProfile","liquidAltTypeValue","arrayValidate","LIST_FORM_FOOTER","ExNewFundDI","ExNewFundESGFactor","selectedSubStrategyCodeNew","esg_sub_strategy","esg_stategy","ExNewFundFeeSchedule","LIST_FORM_INPUT","hide","ExNewFundFinalStep","LIST_NOTE","ExNewFundInstruction","orientation","ExNewFundInvestStrategy","dataFundDetailChangeRef","ExNewFundPerformance","assetData","navData","reportingStyle","ExNewFundRequirement","isManager","setIsManager","optionsAdditional","LIST_FORM_INPUT_BOTTOM","ExNewFundServiceProviders","array","ExNewFundStructure","domicileField","domicile_input","ArrayValidate","arrayField","LIST_FORM_LOCKUP","LIST_FORM_GATE","ExNewFundTitle","isCanSelect","INSTRUCTION","INVESTMENT_REQUIREMENTS","COMPLETE","dateFormattedFields","fieldFormatNumber","fieldFormatInput","fieldInputNotAdd","ExNewFundMain","isUpdated","setIsUpdated","_rorDataChange","handleSubmitMinorityType","handleSubmitROR","handleSubmitAsset","handleSubmitNav","autoComplete","indexStep","borderRight","AUM","loadingFirmAsset","submittingFirmAsset","onUpdateRORData","ContactInformation","LIST_FORM_CONTACT","ExFirmDI","FirmCoInvestments","yesSelected","setYesSelected","FirmESGPolicies","listFundOfFirm","FirmOwnership","FirmRegistration","stateDisabled","setStateDisabled","secCountry","ExFirmFundFamily","FIRM_CMIC","EXFIRM_DATE_FIELDS","MyFirm","setSubmittingFirmAsset","parsedCMICData","registration","non_sec_reg_auth_type","form_non_sec_country","non_sec_reg_num","contact_description","owned_by_employees","employees_with_ownership_stake","future","onKeyPress","preventDefault","ExDashboard","updatedFundPerformance","fundEsg","firmEsg","updatedFund","HelpAndFaqMain","RenderHelpAndFaq","articleData","setArticleData","articlesData","invokeArticlesData","articlesLoading","prevArticles","CaretRightOutlined","rotate","article","FirmSearchColumnContext","FirmSearchColumnProvider","DeleteFirmModal","selectedFirmName","FirmSearchColumnBuilder","firmSearchAllColumns","firmColumns","FirmTableHeader","FirmSearch","searchFirm","selectedFirmIds","setSelectedFirmIds","setSelectedFirmName","showDeleteFirmModal","setShowDeleteFirmModal","fundSearchParamsResolved","exportManagerList","handleClearAllFilter","firms","can_delete_firm","StyledTab","ManagerList","FundKeysMapping","app_esgintegration","app_impactinvest","app_negativescreen","app_positivescreen","app_sustaininvest","capacity","constituent_count","data_bloomberg","data_factset","data_internal","data_msci","data_other","data_sustainalytics","dead_fund","env_cleantech","env_climatechange","env_description","env_greenbuilding","env_pollutiontaxes","env_sustainable","env_waterconservation","fund_contact","gov_anticorruption","gov_boarddiversity","gov_boardindependence","gov_corppolcontrib","gov_description","gov_executivecomp","hfr_am_info_liquidity","hfr_am_info_notes","hfr_database","hfr_la_fund","hfr_risk_premia","hfrb_fund","hfri500_eligibility","hfri500_exclusion_reason","hfri_500_fund","hfri_fund","hfri_i_fund","hfri_institutional_fund","hfri_pending_fund","hfri_pending_removal","hfri_woman_access_fund","hfrrparity_fund","hfrrparity_i_fund","hfru_fund","hfrx_fund","index_pricing","is_aum_distributed","is_nav_distributed","is_feeder_fund","is_hfr_funded","is_hurdle_rate","is_liquidated","is_minority_fund","monthly_redemption_day_type","monthly_redemption_days","monthly_redemption_percent","need_to_fund","notes","other_fees","remaining_capacity","remaining_hfrx_capacity","sec_pfid_number","soc_avoidtobacco","soc_communitydev","soc_description","soc_diversityantibias","soc_humanrights","soc_laborrelations","soc_workplacebenefits","soc_workplacesafety","sub_strategy_desc","subscription_settlement","team_engagepcm","use_of_leverage","weekly_hfrx_redemption_day_type","weekly_hfrx_redemption_days","weekly_hfrx_redemption_percent","weekly_redemption_days","weekly_redemption_percent","weekly_redemption_day_type","columnsUpdateROR","ROR_TABLE_UPLOAD","DrawerActivityLogInfo","showDrawer","setShowDrawer","getLogDetail","dataLogDetail","findDescription","changeKey","hasOwnProperty","dropdownListAtKey","dataTable","oldValue","dataRORTable","k","showRaw","setShowRaw","event_file_url","indentWidth","LegacyLogTableDiff","selectedLogDiff","dataDiff","LegacyLogModal","LegacyActivityLog","fetchDataLegacy","selectedLegacyLog","setSelectedLegacyLog","legacyParams","valueFilter","action_done","fields_of_operation","is_www","new1","new2","new3","new4","new5","new6","new7","new8","new9","new10","old1","old2","old3","old4","old5","old6","old7","old8","old9","old10","remarks","screen_name","paddingLeft","diff","SOURCE_OPTIONS","ActivityLog","getListUserByText","dataUserSearch","loadingUser","getListCode","dataCode","selectedEvent","setSelectedEvent","activityParams","exportActivityLog","optionsCode","optionsSource","BenchmarkFormModal","selectedBenchmark","showFormModal","setShowFormModal","setSelectedBenchmark","textSearch","setTextSearch","benchmark_disclaimer","error_code","ListOfFundBenchmark","dataFundBenchmark","_dataIndex","Benchmarks","loadingDeleteBenchmark","setLoadingDeleteBenchmark","loadingBenchmark","strategy_new_name","sub_strategy_new_name","CodeTableFormModal","selectedCodeTable","setSelectedCodeTable","code_id","is_active","new_code_description","CodeTable","loadingDeleteCodeTable","setLoadingDeleteCodeTable","getTableList","tableList","loadingTableList","IndexManagerModalAddFund","actionFunds","IndexManagerActionFund","ADD_FUNDS","IndexManagerDetails","dataDetail","setActionFunds","index_funds","latest_ror_date","DELETE_FUNDS","IndexManagerFormModal","selectedIndexManager","setSelectedIndexManager","IndexManager","loadingDeleteIndexManager","setLoadingDeleteIndexManager","fieldData","SearchQueryManage","refetchSearchQuery","handleSelectQuery","UniverseManagerModalAddFund","updateUniverseManagerDetail","UniverseManagerDetails","loadingMultiDelete","setLoadingMultiDelete","listFundDelete","setListFundDelete","hasSelected","setHasSelected","does_accept_new_invest","is_hfrx_fund","is_index_fund","UniverseManagerFormModal","selectedUniverseManager","setSelectedUniverseManager","UniverseManager","loadingDeleteUniverseManager","setLoadingDeleteUniverseManager","getUniverseList","dataUniverseManager","loadingUniverseManager","System","ProtectedRoute","userLoading","has","esg_strategies","esg_sub_strategies","esg_sub_strategy_dropdown","info","exact","ExternalDashboard","Cover","CoverTitle","h1","CoverSub","h2","AuthLayout","Inline","ForgotPassword","showPasswordField","setShowPasswordField","confirmDirty","setConfirmDirty","formNoValidate","NumberOutlined","hasFeedback","Password","LockOutlined","dependencies","SignUpContainer","PreSignUpForm","nextStep","setVerificationCode","setEmail","verifyingCode","setVerifyingCode","States","AL","AK","AS","AZ","AR","CA","CO","CT","DE","DC","FM","FL","GA","GU","HI","ID","IL","IN","IA","KS","KY","LA","ME","MH","MD","MA","MI","MN","MS","MO","MT","NE","NV","NH","NJ","NM","NY","NC","ND","MP","OH","OK","OR","PW","PA","PR","RI","SC","SD","TN","TX","UT","VT","VI","VA","WA","WV","WI","WY","SignUpForm","fundOrVehicleName","setFundOrVehicleName","heardAboutHfrFrom","setHeardAboutHfrFrom","countriesData","countriesLoading","invokeFetchCountries","passwordConfirm","ShopOutlined","ProjectOutlined","statesOptions","stateKey","getStateOptions","countryCodes","countryKey","getCountryOptions","QuestionCircleOutlined","visibility","SignUpSteps","ThankYouPage","SignUpView","PRE_SIGN_UP","signUpStep","setSignUpStep","THANK_YOU","SIGN_UP","useSafeState","mountedRef","setState","defaultInitialState","CheckCodeLogin","authError","loginRes","LoginSteps","DbToMlForm","setIsDbToMl","isUpdateSuccess","setIsUpdateSuccess","LoginContainer","LogoImg","ErrorMessage","LoginView","LOGIN","step","setStep","setPassword","setRememberMe","initialStates","useFetchState","showVerifyForm","setShowVerifyForm","isDbToMl","handleVerify","Logo","disable_2fa","CHECK_CODE","float","Auth","FallbackUI","resetErrorBoundary","App","Rollbar","captureUncaught","captureUnhandledRejections","environment","FallbackComponent","Boolean","hostname","ReactDOM","getElementById","serviceWorker","ready","unregister"],"mappings":"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","file":"static/js/main.214de8fe.chunk.js","sourcesContent":["module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWgAAACWCAYAAADzChIIAAAACXBIWXMAAAsTAAALEwEAmpwYAAAF92lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDggNzkuMTY0MDM2LCAyMDE5LzA4LzEzLTAxOjA2OjU3ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoTWFjaW50b3NoKSIgeG1wOkNyZWF0ZURhdGU9IjIwMjAtMDItMjdUMDk6MDI6NDUtMDg6MDAiIHhtcDpNb2RpZnlEYXRlPSIyMDIwLTAyLTI3VDA5OjAzOjQ3LTA4OjAwIiB4bXA6TWV0YWRhdGFEYXRlPSIyMDIwLTAyLTI3VDA5OjAzOjQ3LTA4OjAwIiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyIgcGhvdG9zaG9wOklDQ1Byb2ZpbGU9InNSR0IgSUVDNjE5NjYtMi4xIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOmUyNWNkNGRiLWE5NWQtNDc4Yi04MmZmLTUwZDFlMDQ1MmYzNSIgeG1wTU06RG9jdW1lbnRJRD0iYWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjk3ZGZiNDQyLWMyOWItNjM0MC05MDI4LTNkNmU0MjgyYjYzMSIgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjZlZTQyODFkLTc2ZDctNGMwMy1iMWJhLTgxYzQxMGI5Y2I0MSI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6NmVlNDI4MWQtNzZkNy00YzAzLWIxYmEtODFjNDEwYjljYjQxIiBzdEV2dDp3aGVuPSIyMDIwLTAyLTI3VDA5OjAyOjQ1LTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoTWFjaW50b3NoKSIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6ZTI1Y2Q0ZGItYTk1ZC00NzhiLTgyZmYtNTBkMWUwNDUyZjM1IiBzdEV2dDp3aGVuPSIyMDIwLTAyLTI3VDA5OjAzOjQ3LTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjEuMCAoTWFjaW50b3NoKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6KSGmPAAASU0lEQVR4Ae3BCZClBX0g8N/75vXd/V53MwMzHAMMcigQHcAVcdAUoKCgMVEhVkCJ7CbBNcnuqpTW7hpjqBhWdHMgbkiCa8UDMmQTNOQQucwqYbmKY4FwjsM1DHN09+tj+vy2nF7p6urpnvleX1+/9//9CmmaCiGEkD+JEEIIuZQIIYSQS4kQQgi5lAghhJBLiRBCCLmUCCGEkEuJEEIIuZQIIYSQS4kQQgi5lAghhJBLiRBCCLmUCCGEkEuJEEIIuZQIIYSQS4kQQgi5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\"","module.exports = \"data:image/png;base64,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\"","export enum LeftNavExFirmEnum {\n ASSETS_UNDER_MANAGEMENT = 'Assets Under Management (AUM)',\n REGISTRATION = 'Registration',\n CONTACT_INFORMATION = 'Contact Information',\n OWNERSHIP = 'Ownership',\n CO_INVESTMENT = 'Co-Investments',\n FIRM_ESG_POLICIES = 'Firm ESG Policies',\n FIRM_DIVERSITY_INCLUSION = 'Firm Diversity Inclusion',\n FIRM_CMIC = 'Firm CMIC',\n FIRM_MULTI_MANAGER_POD_PLATFORM = `Firm Multi-Manager \"Pod Shop\" Platform`,\n FUND_FAMILY = 'Fund Family',\n}\nexport interface ListSearchExFirmType {\n key: string\n name: string\n leftNav: LeftNavExFirmEnum\n}\nexport const renderSearchListExFirm: ListSearchExFirmType[] = [\n {\n key: 'denominationAssetUnderManagement',\n name: 'Denomination',\n leftNav: LeftNavExFirmEnum.ASSETS_UNDER_MANAGEMENT,\n },\n {\n key: 'firmRegistration',\n name: 'Firm Registration',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'sec_registered',\n name: 'Is Firm registered as an Investment Advisor with the SEC?',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'sec_number',\n name: 'Firm SEC Number',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'iard_crd_number',\n name: 'Firm IARD / CRD Number',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'organization_type',\n name: 'Organization Type',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'country',\n name: 'Under the laws of which Country is Firm organized?',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'sec_state',\n name: \"If 'USA', under the laws of which State is Firm organized?\",\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'sec_exemption_reason_type',\n name: 'If Exempt Reporting Advisor (\"ERA\"), exemption reason',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'non_sec_country',\n name: 'Country',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'regulatoryAuthority',\n name: 'Non-SEC Regulatory Authority',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'registrationType',\n name: 'Non-SEC Registration Type',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'registrationNumber',\n name: 'Non-SEC Registration Number',\n leftNav: LeftNavExFirmEnum.REGISTRATION,\n },\n {\n key: 'ContactName1Contact',\n name: 'Contact Name 1',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'ContactName2Contact',\n name: 'Contact Name 2',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'AddressContact',\n name: 'Address',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'AddressContact2',\n name: 'Address 2',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'CityContact',\n name: 'City',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'StateContact',\n name: 'State',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'ZipContact',\n name: 'Zip',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'CountryContact',\n name: 'Country',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'PhoneContact',\n name: 'Phone',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'FaxContact',\n name: 'Fax',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'EmailContact',\n name: 'Email',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'WebsiteContact',\n name: 'Website',\n leftNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'YearFounded',\n name: 'Year Founded',\n leftNav: LeftNavExFirmEnum.OWNERSHIP,\n },\n {\n key: '% of firm owned by employees',\n name: '% of firm owned by employees',\n leftNav: LeftNavExFirmEnum.OWNERSHIP,\n },\n {\n key: '# of employees with ownership stake',\n name: '# of employees with ownership stake',\n leftNav: LeftNavExFirmEnum.OWNERSHIP,\n },\n {\n key: 'Is this a minority-owned firm?',\n name: 'Is this a minority-owned firm?',\n leftNav: LeftNavExFirmEnum.OWNERSHIP,\n },\n {\n key: 'Minority ownership type',\n name: 'Minority ownership type',\n leftNav: LeftNavExFirmEnum.OWNERSHIP,\n },\n {\n key: 'Minority ownership level',\n name: 'Minority ownership level',\n leftNav: LeftNavExFirmEnum.OWNERSHIP,\n },\n {\n key: 'Does your firm offer co-investment opportunities?',\n name: 'Does your firm offer co-investment opportunities?',\n leftNav: LeftNavExFirmEnum.CO_INVESTMENT,\n },\n {\n key: 'is_firm_esg',\n name: 'Does Your Firm Have A Formal Firmwide ESG Policy?',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n {\n key: 'applied_firmculture',\n name: 'Firm Culture',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n {\n key: 'applied_investmentprocess',\n name: 'Investment Process',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n {\n key: 'applied_portfolioconstruction',\n name: 'Portfolio Construction',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n {\n key: 'applied_esgproducts',\n name: 'ESG Products',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n {\n key: 'applied_esgintegration',\n name: 'ESG Integration',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n {\n key: 'applied_esgactivist',\n name: 'Activist / Engaged Ownership',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n {\n key: 'applied_diversityinclusion',\n name: 'Diversity And Inclusion',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n {\n key: 'receive_guidance',\n name:\n 'Does Your Firm Receive ESG Investment Guidance From Or Follow The Principles Of A Third-Party Company/Association/Network?',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n {\n key: 'thirdparty_guidance',\n name: 'Identify The Third-Party Company',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n {\n key: 'future',\n name: 'Do You Have Plans To Incorporate ESG In The Future?',\n leftNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n },\n]\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { ActivitiesFiltered } from '../../../../../shared/api/models/ActivityLog'\n\nexport interface SearchParamsType {\n fundSearchParams: {\n [key: string]: { value: string[]; type?: 'equals' | 'contains' | 'array_anyof' }\n }\n exFundSearchParams: Record\n\n firmSearchParams: {\n [key: string]: { value: string[]; type?: 'equals' | 'contains' | 'array_anyof' }\n }\n activityLogParams: ActivitiesFiltered\n}\n\nconst initialState: SearchParamsType = {\n fundSearchParams: {},\n exFundSearchParams: {},\n firmSearchParams: {},\n activityLogParams: {},\n}\n\nconst searchParams = createSlice({\n name: 'searchParams',\n initialState,\n reducers: {\n updateFundSearchParams: (state, action: PayloadAction) => {\n state.fundSearchParams = action.payload\n },\n updateExFundSearchParams: (state, action: PayloadAction) => {\n state.exFundSearchParams = action.payload\n },\n updateFirmSearchParams: (state, action: PayloadAction) => {\n state.firmSearchParams = action.payload\n },\n updateActivityLogParams: (state, action: PayloadAction) => {\n state.activityLogParams = action.payload\n },\n },\n})\n\nconst { reducer, actions } = searchParams\n\nexport const {\n updateFundSearchParams,\n updateExFundSearchParams: updateExSearchParams,\n updateFirmSearchParams,\n updateActivityLogParams,\n} = actions\nexport default reducer\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { AppThunk } from '../app/store'\nimport APIService from '../shared/api'\nimport { FundDetailStrategy, FundDetailSubStrategy, FundESGStrategies } from '../shared/api/models/FundDetails'\nimport { BenchmarkRecord } from '../shared/api/models/ResponsesTypes'\n\ninterface AppDataState {\n strategies: FundDetailStrategy[]\n subStrategies: FundDetailSubStrategy[]\n benchmarks: BenchmarkRecord[]\n esgStrategies: FundESGStrategies['esg_strategies']\n esgSubStrategies: FundESGStrategies['esg_sub_strategies']\n esgSubStrategyDropdown: FundESGStrategies['esg_sub_strategy_dropdown']\n // regionalFocus: FundDetailRegionalFocus[]\n // fundList: ExtendFundListRecord[]\n // universeList: ExtendFundListRecord[]\n // hfrStaticIndexes: FundListRecord[]\n // hfrDynamicIndexes: FundListRecord[]\n // portfolioModels: PortfolioModelRecord[]\n}\n\nconst initialState: Partial = {}\n\nconst appData = createSlice({\n name: 'appData',\n initialState,\n reducers: {\n fetchAppDataSuccess: (state, action: PayloadAction<{ key: keyof AppDataState; data: any }>) => {\n return { ...state, [action.payload.key]: action.payload.data }\n },\n },\n})\n\nconst { reducer, actions } = appData\n\nexport const { fetchAppDataSuccess } = actions\nexport default reducer\n\nexport const fetchAppData = (): AppThunk => async (dispatch) => {\n const {\n fetchStrategies,\n fetchBenchmarks,\n // fetchRegionalFocus,\n // fetchDynamicIndexes,\n // fetchStaticIndexes,\n } = APIService.appDataService\n // const { fetchPortfolioModels } = APIService.portfolioModelService\n // const { fetchFundList, fetchUniverseList } = APIService.fundUniverseListService\n const { fetchESGStrategies } = APIService.fundDetailService\n\n try {\n fetchStrategies().then(({ data }) => {\n dispatch(fetchAppDataSuccess({ key: 'strategies', data: data.strategies }))\n dispatch(fetchAppDataSuccess({ key: 'subStrategies', data: data.sub_strategies }))\n fetchBenchmarks().then(({ data }) => dispatch(fetchAppDataSuccess({ key: 'benchmarks', data })))\n // fetchRegionalFocus().then(({ data }) => dispatch(fetchAppDataSuccess({ key: 'regionalFocus', data })))\n // fetchDynamicIndexes().then(({ data }) => dispatch(fetchAppDataSuccess({ key: 'hfrDynamicIndexes', data })))\n // fetchStaticIndexes().then(({ data }) => dispatch(fetchAppDataSuccess({ key: 'hfrStaticIndexes', data })))\n // fetchPortfolioModels().then(({ data }) => dispatch(fetchAppDataSuccess({ key: 'portfolioModels', data })))\n // // fundList, universeList\n // fetchFundList().then(({ data }) => dispatch(fetchAppDataSuccess({ key: 'fundList', data })))\n // fetchUniverseList().then(({ data }) => dispatch(fetchAppDataSuccess({ key: 'universeList', data })))\n })\n\n fetchESGStrategies().then(({ data }) => {\n dispatch(fetchAppDataSuccess({ key: 'esgStrategies', data: data.esg_strategies }))\n dispatch(fetchAppDataSuccess({ key: 'esgSubStrategies', data: data.esg_sub_strategies }))\n dispatch(fetchAppDataSuccess({ key: 'esgSubStrategyDropdown', data: data.esg_sub_strategy_dropdown }))\n })\n } catch (err) {\n console.info(err.toString())\n }\n}\n","import { createSlice } from '@reduxjs/toolkit'\n\ninterface AppEventState {\n fundRorUpdated: boolean\n fundNavUpdated: boolean\n fundAssetUpdated: boolean\n}\n\nconst initialState: AppEventState = {\n fundRorUpdated: false,\n fundNavUpdated: false,\n fundAssetUpdated: false,\n}\n\nconst appEvent = createSlice({\n name: 'appEvent',\n initialState,\n reducers: {\n fundRORUpdated: (state) => {\n state.fundRorUpdated = true\n },\n fundNavUpdated: (state) => {\n state.fundNavUpdated = true\n },\n fundAssetUpdated: (state) => {\n state.fundAssetUpdated = true\n },\n resetROR: (state) => {\n state.fundRorUpdated = false\n },\n resetNav: (state) => {\n state.fundNavUpdated = false\n },\n resetAsset: (state) => {\n state.fundAssetUpdated = false\n },\n },\n})\n\nconst { reducer, actions } = appEvent\n\nexport const { fundRORUpdated, fundNavUpdated, fundAssetUpdated, resetAsset, resetNav, resetROR } = actions\nexport default reducer\n","export enum LeftNavExFundEnum {\n FUND_OVERVIEW = 'Overview',\n FUND_DETAIL = 'Fund Detail',\n INVESTMENT_STRATEGY = 'Investment Strategy',\n FEE_SCHEDULE = 'Fee Schedule',\n SERVICE_PROVIDERS = 'Service Providers',\n FUND_STRUCTURE = 'Fund Structure',\n FUND_ESG_FACTORS = 'Fund ESG Factors',\n FUND_DIVERITY_INCLUSION = 'Fund Diversity & Inclusion',\n FUND_PRINCIPALS = 'Fund Principals',\n FUND_CONTACT = 'Fund Contact',\n FUND_PERFORMANCE = 'Fund Performance',\n INSTRUMENTS = 'Instruments',\n REGIONS = 'Regions',\n INDUSTRY = 'Industry',\n INVESTOR_TYPE = 'Investor Type',\n FUND_CMIC = 'Fund CMIC',\n FUND_FAMILY = 'Fund Family',\n}\nexport interface ListSearchExFundType {\n key: string\n name: string\n leftNav: LeftNavExFundEnum\n}\nexport const SEARCH_FIELD_INDEX: ListSearchExFundType[] = [\n { key: 'liquid_alt_product', name: 'Liquid Alt Product', leftNav: LeftNavExFundEnum.FUND_DETAIL },\n {\n key: 'liquid_alt_type',\n name: 'Liquid alternative product type',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'liquid_alt_region',\n name: 'Country of Registration',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'product_class',\n name: 'Fund Share Class',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'firm_assets',\n name: 'Firm Assets AUD (MM)',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'fund_assets',\n name: 'Fund Assets',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'firm_assets_date',\n name: 'Firm Assets Date',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'inception_date',\n name: 'Inception Date',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'ucitsiii',\n name: 'UCITS Compliant?',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'accepts_new_investment',\n name: 'Open to New Investment?',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'min_invest',\n name: 'Minimum Investment',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'accepts_mgd_accts',\n name: `Is manager open to running a separately managed account pari-passu to this fund?`,\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'multi_manager_platform',\n name: `Does fund utilize an internal Multi-Manager Platform (aka, \"Pods\")?`,\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n {\n key: 'add_invest',\n name: 'Additional Investments',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n\n {\n key: 'min_invest_indv',\n name: 'Managed Account Minimum Asset Size',\n leftNav: LeftNavExFundEnum.FUND_DETAIL,\n },\n\n {\n key: 'strategy_code_new',\n name: 'Main Strategy Classification',\n leftNav: LeftNavExFundEnum.INVESTMENT_STRATEGY,\n },\n {\n key: 'sub_strategy_code_new',\n name: 'Sub-Strategy Classification',\n leftNav: LeftNavExFundEnum.INVESTMENT_STRATEGY,\n },\n {\n key: 'region_inv_focus',\n name: 'Regional Investment Focus',\n leftNav: LeftNavExFundEnum.INVESTMENT_STRATEGY,\n },\n {\n key: 'region_inv_focus_country',\n name: 'Sub-Region Focus',\n leftNav: LeftNavExFundEnum.INVESTMENT_STRATEGY,\n },\n {\n key: 'strategy_description',\n name: 'Strategy Description',\n leftNav: LeftNavExFundEnum.INVESTMENT_STRATEGY,\n },\n {\n key: 'mgmt_fee',\n name: 'Management Fee %',\n leftNav: LeftNavExFundEnum.FEE_SCHEDULE,\n },\n {\n key: 'redemption_fee',\n name: 'Redemption Fee %',\n leftNav: LeftNavExFundEnum.FEE_SCHEDULE,\n },\n {\n key: 'redemption_fee_months',\n name: 'If less than (number of months)',\n leftNav: LeftNavExFundEnum.FEE_SCHEDULE,\n },\n {\n key: 'incentive_fee',\n name: 'Incentive Fee %',\n leftNav: LeftNavExFundEnum.FEE_SCHEDULE,\n },\n {\n key: 'sales_fee',\n name: 'Sales Fee %',\n leftNav: LeftNavExFundEnum.FEE_SCHEDULE,\n },\n {\n key: 'high_watermark',\n name: 'High Watermark',\n leftNav: LeftNavExFundEnum.FEE_SCHEDULE,\n },\n {\n key: 'hurdle_rate',\n name: 'Hurdle Rate',\n leftNav: LeftNavExFundEnum.FEE_SCHEDULE,\n },\n {\n key: 'max_12b1_fee',\n name: 'Maximum 12B-1 Fee %',\n leftNav: LeftNavExFundEnum.FEE_SCHEDULE,\n },\n {\n key: 'max_front_fee',\n name: 'Maximum Front-End Sales Load Fee %',\n leftNav: LeftNavExFundEnum.FEE_SCHEDULE,\n },\n {\n key: 'max_deferred_fee',\n name: 'Maximum Deferred Sales Load Fee %',\n leftNav: LeftNavExFundEnum.FEE_SCHEDULE,\n },\n {\n key: 'is_annual_performance_audit',\n name: 'Annual Performance Audit',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'last_audit_date',\n name: 'Last Audit Date',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'auditor_name',\n name: 'Auditor Name',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'auditor_name_input',\n name: 'If Other, Specify Auditor Name',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'legal_adviser',\n name: 'Legal Adviser',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'legal_adviser_input',\n name: 'If Other, Specify Legal Adviser',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'prime_broker',\n name: 'Prime Broker',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'prime_broker_input',\n name: 'If Other, Specify Prime Broker',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'administrator',\n name: 'Administrator',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'administrator_input',\n name: 'If Other, Specify Administrator',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'placement_agent',\n name: 'Placement Agent (Enter None, If Not Applicable)',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'banking_agent',\n name: 'Banking Agent (Enter None, If Not Applicable)',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'custodian',\n name: 'Custodian (Enter None, If Not Applicable)',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'consultant',\n name: 'Consultant (Enter None, If Not Applicable)',\n leftNav: LeftNavExFundEnum.SERVICE_PROVIDERS,\n },\n {\n key: 'structure',\n name: 'Structure',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'investor_type',\n name: 'Open To Investor Type',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'equity_subscription',\n name: 'Subscription Frequency',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'subscription_advance_notice',\n name: 'Subscription Advanced Notice (Days)',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'subscription_cutoff_time',\n name: 'Subscription Cut Off By (Time)',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'subscription_cutoff_timezone',\n name: 'Subscription Cut Off By (Time Zone)',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'subscription_settlement_days',\n name: 'Subscription Settlement (Days)',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'equity_redemption',\n name: 'Redemption Frequency',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'redemption_advance_notice',\n name: 'Redemption Advanced Notice (Days)',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'is_lockup',\n name: 'Lockup',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'lockup_type',\n name: 'Lockup Type',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'lockup_period',\n name: 'Lockup Period',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'redemption_return_percent',\n name: 'Initial % Of Redemption Returned',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'redemption_return_days',\n name: 'Initial Redemption Returned Within (Days)',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'balance_redemption_return_days',\n name: 'Redemption Balance Returned Within (Days)',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'gate_fund',\n name: 'Gate:Fund Level',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'gate_investor',\n name: 'Investor Level',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'performance_reporting',\n name: 'Performance Reporting Interval',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'use_of_leverage_type',\n name: 'Leverage Type',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'bloomberg_ticker',\n name: 'Ticker',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n {\n key: 'isin',\n name: 'ISIN',\n leftNav: LeftNavExFundEnum.FUND_STRUCTURE,\n },\n { key: 'is_fund_esg', name: 'Does Fund Consider ESG Factors?', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'esg_strategy', name: 'ESG Strategy', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'esg_sub_strategy', name: 'ESG Sub-Strategy', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'app_positivescreen', name: 'Positive/best-in-class Screening', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'app_negativescreen', name: 'Negative/Exclusionary Screening', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'app_esgintegration', name: 'ESG Integration', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'app_impactinvest', name: 'Impact Investing', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'app_sustaininvest', name: 'Sustainability-themed Investing', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'env_greenbuilding', name: 'Green Building/ Smart Growth', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'env_climatechange', name: 'Climate Change/ Carbon', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'env_cleantech', name: 'Clean Technology', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'env_pollutiontaxes', name: 'Pollution / Toxics', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n {\n key: 'env_sustainable',\n name: 'Sustainable Natural Resources / Agriculture',\n leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS,\n },\n { key: 'env_waterconservation', name: 'Water Use & Conservation', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n {\n key: 'env_description',\n name: 'Additional Description Of How ENVIRONMENTAL Is Considered When Investing',\n leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS,\n },\n { key: 'soc_workplacesafety', name: 'Workplace Safety', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'soc_laborrelations', name: 'Labor Relations', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'soc_workplacebenefits', name: 'Workplace Benefits', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'soc_diversityantibias', name: 'Diversity & Anti-Bias Issues', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'soc_communitydev', name: 'Community Development', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n {\n key: 'soc_avoidtobacco',\n name: 'Avoidance Of Tobacco Or Other Harmful Products',\n leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS,\n },\n { key: 'soc_humanrights', name: 'Human Rights', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n {\n key: 'soc_description',\n name: 'Additional Description Of How SOCIAL Is Considered When Investing',\n leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS,\n },\n { key: 'gov_corppolcontrib', name: 'Corporate Political Contributions', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'gov_executivecomp', name: 'Executive Compensation', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'gov_boarddiversity', name: 'Board Diversity', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'gov_anticorruption', name: 'Anti-Corruption Pilicies', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'gov_boardindependence', name: 'Board Independence', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n {\n key: 'gov_description',\n name: 'Additional Description Of How GOVERNANCE Is Considered When Investing',\n leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS,\n },\n {\n key: 'team_engagepcm',\n name: `Does This Fund's Investment Team Engage With The Management Teams Of Companies In This Fund's Underlying Poritfolio, Re:ESG Or Diversity Issues?`,\n leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS,\n },\n { key: 'data_msci', name: 'MSCI', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'data_sustainalytics', name: 'Sustainalytics', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'data_bloomberg', name: 'Bloomberg', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n { key: 'data_factset', name: 'FactSet', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n {\n key: 'data_internal',\n name: 'Proprietary Or Internally Developed Metrics',\n leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS,\n },\n { key: 'data_other', name: 'Other', leftNav: LeftNavExFundEnum.FUND_ESG_FACTORS },\n\n {\n key: 'contact_name',\n name: 'Name',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_company',\n name: 'Company',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_country',\n name: 'Country',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_address1',\n name: 'Address 1',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_address2',\n name: 'Address 2',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_city',\n name: 'City',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_state',\n name: 'State',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_postal_code',\n name: 'Postal Code',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_phone',\n name: 'Phone',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_fax',\n name: 'Fax',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_email',\n name: 'Email',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_web',\n name: 'Website',\n leftNav: LeftNavExFundEnum.FUND_CONTACT,\n },\n {\n key: 'reporting_style',\n name: 'Reporting Style',\n leftNav: LeftNavExFundEnum.FUND_PERFORMANCE,\n },\n {\n key: 'denomination',\n name: 'Denom',\n leftNav: LeftNavExFundEnum.FUND_PERFORMANCE,\n },\n {\n key: 'has_securities',\n name: '',\n leftNav: LeftNavExFundEnum.FUND_CMIC,\n },\n {\n key: 'manager_confirms',\n name: '',\n leftNav: LeftNavExFundEnum.FUND_CMIC,\n },\n {\n key: 'separate_share_classes',\n name: '',\n leftNav: LeftNavExFundEnum.FUND_CMIC,\n },\n {\n key: 'pre_trade_compliance_restrictions',\n name: '',\n leftNav: LeftNavExFundEnum.FUND_CMIC,\n },\n {\n key: 'other_measures',\n name: '',\n leftNav: LeftNavExFundEnum.FUND_CMIC,\n },\n {\n key: 'subscription_advance_notice',\n name: '',\n leftNav: LeftNavExFundEnum.FUND_CMIC,\n },\n]\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { DraftType, Snapshot, ViewModeType } from '../shared/DraftManager'\nimport { LeftNavExFirmEnum } from '../shared/SearchExFirmLabel'\nimport { LeftNavExFundEnum } from '../shared/SearchExFundLabel'\n\nexport const DASHBOARD_KEY = 'dashboard'\nexport const MANAGER_LIST_KEY = 'manager-list'\nexport const PREFIX_EXTERNAL = 'ex'\nexport const EX_OVERVIEW_KEY = `${PREFIX_EXTERNAL}-overview`\n\nexport enum FundFirmTypeEnum {\n FUNDS = 'FUNDS',\n FIRMS_IN_FUNDS = 'FIRMS_IN_FUNDS',\n FIRMS = 'FIRMS',\n}\n\ninterface FundTabsType {\n fundFirmTabs: {\n tabList: {\n name?: string\n id: string\n type: FundFirmTypeEnum\n path?: string\n viewMode?: ViewModeType\n hyperlinkTable?: string\n isPreview?: boolean\n previewTab?: string\n }[]\n activeTab: string\n }\n}\n\ninterface ExTabsType {\n exTabs: {\n tabList: {\n name?: string\n id: string\n type: FundFirmTypeEnum\n activeNav: LeftNavExFundEnum | LeftNavExFirmEnum\n path?: string\n hyperlinkTable?: string\n isPreview?: boolean\n previewTab?: string\n }[]\n activeTab: string\n }\n}\n\ninterface FirmTabsType {\n firmTabs: {\n tabList: {\n id: string\n name?: string\n type: FundFirmTypeEnum\n path?: string\n }[]\n activeTab: string\n }\n}\n\ninterface AppSettingsState {\n exFundTableColumns: string[]\n fundSearchColumns: string[]\n firmSearchColumns: string[]\n fundsOfFirmColumns: string[]\n performanceNavDate: { navStartDate: string; navToDate: string } | undefined\n showPrompt: boolean\n}\n\nconst initialState: AppSettingsState & FundTabsType & ExTabsType & FirmTabsType & { [key in DraftType]: Snapshot[] } = {\n exFundTableColumns: [],\n fundSearchColumns: [],\n firmSearchColumns: [],\n fundsOfFirmColumns: [],\n\n fundFirmTabs: { tabList: [], activeTab: DASHBOARD_KEY },\n exTabs: { tabList: [], activeTab: EX_OVERVIEW_KEY },\n firmTabs: { tabList: [], activeTab: MANAGER_LIST_KEY },\n fundDraft: [],\n exFirmDraft: [],\n exFundDraft: [],\n firmDraft: [],\n performanceNavDate: undefined,\n showPrompt: true,\n}\n\nconst appSettings = createSlice({\n name: 'appSettings',\n initialState,\n reducers: {\n // Nav From & To Date\n updateNavDate: (state, action: PayloadAction<{ fromDate: string; toDate: string }>) => {\n const val = { navStartDate: action.payload.fromDate, navToDate: action.payload.toDate }\n state.performanceNavDate = val\n },\n\n // funds of firm columns\n updateFundsOfFirmColumns: (state, action: PayloadAction) => {\n state.fundsOfFirmColumns = action.payload\n },\n\n // fund/firm search columns\n updateExFundColumns: (state, action: PayloadAction) => {\n state.exFundTableColumns = action.payload\n },\n updateFundSearchColumns: (state, action: PayloadAction) => {\n state.fundSearchColumns = action.payload\n },\n updateFirmSearchColumns: (state, action: PayloadAction) => {\n state.firmSearchColumns = action.payload\n },\n\n updateSelectedNav: (\n state,\n action: PayloadAction<{ id: string; activeNav: LeftNavExFirmEnum | LeftNavExFundEnum }>,\n ) => {\n const index = state.exTabs.tabList.findIndex((item) => item.id === action.payload.id)\n if (index > -1) {\n state.exTabs.tabList[index].activeNav = action.payload.activeNav\n }\n },\n // Tab\n addTabs: (\n state,\n action: PayloadAction<{\n name?: string\n id: string\n type: FundFirmTypeEnum\n activeNav?: LeftNavExFirmEnum | LeftNavExFundEnum\n path?: string\n viewMode?: ViewModeType\n hyperlinkTable?: string\n isPreview?: boolean\n previewTab?: string\n }>,\n ) => {\n const tabId = action.payload.id\n // External Tabs\n if (tabId.includes(PREFIX_EXTERNAL)) {\n // add new tab\n if (!state.exTabs.tabList.find((e) => e.id === tabId)) {\n const activeNav =\n action.payload.activeNav || action.payload.type === FundFirmTypeEnum.FIRMS_IN_FUNDS\n ? LeftNavExFirmEnum.ASSETS_UNDER_MANAGEMENT\n : LeftNavExFundEnum.FUND_OVERVIEW\n state.exTabs.tabList.push({\n ...action.payload,\n activeNav,\n })\n }\n // update active nav (left side nav)\n if (action.payload.activeNav) {\n const index = state.exTabs.tabList.findIndex((item) => item.id === tabId)\n state.exTabs.tabList[index].activeNav = action.payload.activeNav\n // update active table for Fund Performance - hyperlink feature\n if (action.payload.hyperlinkTable) {\n state.exTabs.tabList[index].hyperlinkTable = action.payload.hyperlinkTable\n }\n }\n const current = state.exTabs.tabList.findIndex((item) => item.id === tabId)\n state.exTabs.tabList[current].isPreview = action.payload.isPreview\n state.exTabs.tabList[current].previewTab = action.payload.previewTab\n\n state.exTabs.activeTab = action.payload.id\n return\n }\n\n // Internal\n\n // // Manager List (Firm Menu)\n if (action.payload.type === FundFirmTypeEnum.FIRMS) {\n const existingTab = state.firmTabs.tabList.findIndex((tab) => tab.id === tabId)\n if (existingTab === -1) {\n state.firmTabs.tabList.push(action.payload)\n } else {\n state.firmTabs.tabList[existingTab] = action.payload\n }\n state.firmTabs.activeTab = action.payload.id\n return\n }\n\n // // Dashboard Tabs\n const existingTab = state.fundFirmTabs.tabList.findIndex((e) => e.id === tabId)\n if (existingTab === -1) {\n const viewMode = state.fundDraft.find((i) => i.id === action.payload.id)?.viewMode\n state.fundFirmTabs.tabList.push({ viewMode: viewMode || 'internal', ...action.payload })\n } else {\n state.fundFirmTabs.tabList[existingTab] = { ...action.payload, ...state.fundFirmTabs.tabList[existingTab] }\n state.fundFirmTabs.tabList[existingTab].isPreview = action.payload.isPreview\n state.fundFirmTabs.tabList[existingTab].previewTab = action.payload.previewTab\n }\n // update active nav (left side nav)\n if (action.payload.activeNav) {\n const index = state.fundFirmTabs.tabList.findIndex((item) => item.id === tabId)\n state.fundFirmTabs.tabList[index].path = action.payload.activeNav\n }\n state.fundFirmTabs.activeTab = action.payload.id\n },\n\n updateTabTitle: (state, action: PayloadAction<{ id: string; tabName: string }>) => {\n const updatedTabId = action.payload.id\n const selectedTab = state.fundFirmTabs.tabList.find((item) => item.id === updatedTabId)\n const selectedExTab = state.exTabs.tabList.find((item) => item.id === updatedTabId)\n if (selectedTab) {\n selectedTab.name = action.payload.tabName\n }\n if (selectedExTab) {\n selectedExTab.name = action.payload.tabName\n }\n },\n updateActiveTabs: (state, action: PayloadAction) => {\n if (action.payload.includes(PREFIX_EXTERNAL)) {\n state.exTabs.activeTab = action.payload\n return\n }\n state.fundFirmTabs.activeTab = action.payload\n },\n removeTabs: (state, action: PayloadAction) => {\n const removeTabId = action.payload\n if (removeTabId.includes(PREFIX_EXTERNAL)) {\n const newState = state.exTabs.tabList.filter((item) => item.id !== removeTabId)\n state.exTabs.tabList = newState\n if (state.exTabs.activeTab === removeTabId) {\n state.exTabs.activeTab = EX_OVERVIEW_KEY\n }\n return\n }\n const newState = state.fundFirmTabs.tabList.filter((item) => item.id !== removeTabId)\n state.fundFirmTabs.tabList = newState\n const removingFundDraft = state.fundDraft.find((item) => item.id === removeTabId)\n if (removingFundDraft && removingFundDraft.lastFieldChange) {\n removingFundDraft._lastFieldChanged = removingFundDraft.lastFieldChange\n }\n if (state.fundFirmTabs.activeTab === removeTabId) {\n state.fundFirmTabs.activeTab = DASHBOARD_KEY\n }\n },\n // Draft\n addDraft: (state, action: PayloadAction<{ type: DraftType; data: Snapshot }>) => {\n const { type, data } = action.payload\n const drafts = state[type]\n\n // keep `lastFieldUpdate` if not provided\n const currentSnapshot = drafts.find((item) => item.snapshotId === data.snapshotId)\n return {\n ...state,\n [type]: [\n ...drafts.filter((draft) => draft.snapshotId !== data.snapshotId),\n {\n ...data,\n lastFieldChange:\n data.lastFieldChange === undefined ? currentSnapshot?.lastFieldChange : data.lastFieldChange,\n },\n ],\n }\n },\n removeDraft: (state, action: PayloadAction<{ type: DraftType; snapshotId: string }>) => {\n const { type, snapshotId } = action.payload\n const drafts = state[type]\n return { ...state, [type]: drafts.filter((draft) => draft.snapshotId !== snapshotId) }\n },\n\n updateFirmActiveTabs: (state, action: PayloadAction) => {\n state.firmTabs.activeTab = action.payload\n },\n removeFirmTabs: (state, action: PayloadAction) => {\n const removeTabId = action.payload\n const newState = state.firmTabs.tabList.filter((item) => item.id !== removeTabId)\n state.firmTabs.tabList = newState\n if (state.firmTabs.activeTab === removeTabId) {\n state.firmTabs.activeTab = MANAGER_LIST_KEY\n }\n },\n toggleShowPrompt: (state, action: PayloadAction) => {\n return { ...state, showPrompt: action.payload }\n },\n },\n})\n\nconst { reducer, actions } = appSettings\n\nexport const {\n updateFundSearchColumns,\n updateFirmSearchColumns,\n updateExFundColumns,\n updateFundsOfFirmColumns,\n addTabs,\n updateNavDate,\n updateActiveTabs,\n removeTabs,\n updateTabTitle,\n updateSelectedNav,\n updateFirmActiveTabs,\n removeFirmTabs,\n addDraft,\n removeDraft,\n toggleShowPrompt,\n} = actions\nexport default reducer\n","import { createSlice } from '@reduxjs/toolkit'\nimport { notification } from 'antd'\nimport { AppThunk } from '../app/store'\nimport APIService from '../shared/api'\n\ninterface AuthState {\n isLoading: boolean\n accessToken: string | null\n error: string | null\n}\n\nconst initialState: AuthState = {\n isLoading: false,\n accessToken: null,\n error: null,\n}\n\nfunction startLoading(state: AuthState) {\n state.isLoading = true\n state.error = null\n}\n\nconst authSlice = createSlice({\n name: 'auth',\n initialState,\n reducers: {\n loginStart: startLoading,\n loginSuccess: (state, action) => {\n state.isLoading = false\n state.accessToken = action.payload\n },\n loginFailure: (state, action) => {\n state.accessToken = null\n state.isLoading = false\n state.error = action.payload\n },\n logoutStart: startLoading,\n logoutSuccess: (state) => {\n state.accessToken = null\n state.isLoading = false\n },\n clearToken: (state) => {\n state.accessToken = null\n },\n },\n})\n\nconst { reducer, actions } = authSlice\n\nexport const { loginStart, loginSuccess, loginFailure, logoutStart, logoutSuccess, clearToken } = actions\nexport default reducer\n\nexport const login = (email: string, password: string, code: string, rememberMe: boolean): AppThunk => async (\n dispatch,\n) => {\n try {\n dispatch(loginStart())\n const loginRes = await APIService.authService.login(email, password, code, rememberMe)\n dispatch(saveToken(loginRes.data.token))\n } catch (err) {\n if (err.response.status === 403) {\n notification.error({ message: err.response.data.message })\n return\n }\n dispatch(loginFailure(err.response.status))\n notification.error({ message: err.response.data.message })\n }\n}\n\nexport const saveToken = (token: string): AppThunk => async (dispatch) => {\n APIService.setToken(token)\n dispatch(loginSuccess(token))\n}\n\nexport const logout = (): AppThunk => async (dispatch) => {\n try {\n dispatch(logoutStart())\n await APIService.authService.logout()\n dispatch(logoutSuccess())\n APIService.clearToken()\n } catch (err) {\n console.error(err.toString())\n }\n}\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit'\nimport { UserProfileDetails } from '../shared/api/models/ResponsesTypes'\nimport APIService from '../shared/api'\nimport { notification } from 'antd'\nimport { AppThunk } from '../app/store'\nimport { logout } from './authSlice'\n\ninterface UserState {\n isLoading: boolean\n user: UserProfileDetails | null\n error: string | null\n}\n\nconst initialState: UserState = {\n isLoading: true,\n user: null,\n error: null,\n}\n\nconst userSlice = createSlice({\n name: 'user',\n initialState,\n reducers: {\n fetchUserStart: (state) => {\n console.log('fetchUserStart')\n state.isLoading = true\n },\n fetchUserSuccess: (state, { payload }: PayloadAction) => {\n console.log('fetchUserSuccess')\n state.user = payload\n state.isLoading = false\n state.error = null\n },\n fetchUserFailure: (state, action) => {\n console.log('fetchUserFailure')\n state.isLoading = false\n state.error = action.payload\n },\n },\n})\n\nconst { reducer, actions } = userSlice\n\nexport const { fetchUserFailure, fetchUserStart, fetchUserSuccess } = actions\n\nexport default reducer\n\nexport const fetchUser = (): AppThunk => async (dispatch) => {\n try {\n dispatch(fetchUserStart())\n const user = await APIService.authService.fetchUserProfile()\n if (!user.data.has_manager_link_access) {\n notification.warn({\n message: 'Permission Denied',\n description: 'You do not have permission to access Manager Link',\n })\n dispatch(logout())\n } else {\n dispatch(fetchUserSuccess(user.data))\n }\n } catch (err) {\n dispatch(fetchUserFailure(err.toString()))\n }\n}\n","import { combineReducers, PayloadAction } from '@reduxjs/toolkit'\nimport storage from 'redux-persist/lib/storage'\nimport { persistReducer } from 'redux-persist'\nimport searchParamsSlice from '../routes/Dashboard/DashboardTab/SearchForm/redux/searchParamsSlice'\nimport appDataSlice from '../slice/appDataSlice'\nimport appEventSlice from '../slice/appEventSlice'\nimport appSettingsSlice from '../slice/appSettingsSlice'\nimport authSlice from '../slice/authSlice'\nimport userSlice from '../slice/userSlice'\n\nconst appSettingsConfig = {\n key: 'appSettings',\n storage: storage,\n blacklist: ['showPrompt'],\n}\n\nconst appReducer = combineReducers({\n // slices go here\n searchParams: searchParamsSlice,\n auth: authSlice,\n user: userSlice,\n appData: appDataSlice,\n appSettings: persistReducer(appSettingsConfig, appSettingsSlice),\n appEvent: appEventSlice,\n})\n\nconst rootReducer = (state: ReturnType, action: PayloadAction) => {\n if (action.type === 'auth/logoutSuccess') {\n const intialState = appReducer(undefined, action)\n return {\n ...intialState,\n appSettings: {\n ...intialState.appSettings,\n // Keep fund/firm drafts\n exFundDraft: state.appSettings.exFundDraft,\n exFirmDraft: state.appSettings.exFirmDraft,\n fundDraft: state.appSettings.fundDraft,\n firmDraft: state.appSettings.firmDraft,\n },\n }\n }\n return appReducer(state, action)\n}\n\nexport type RootState = ReturnType\n\nexport default rootReducer\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport { Action, configureStore, ThunkAction } from '@reduxjs/toolkit'\nimport {\n createMigrate,\n MigrationManifest,\n PersistConfig,\n PersistedState,\n persistReducer,\n persistStore,\n} from 'redux-persist'\nimport autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2'\nimport storage from 'redux-persist/lib/storage'\nimport rootReducer, { RootState } from './rootReducer'\n\nconst resetStoreMigration = (state: PersistedState) => {\n if (!state) {\n return { _persist: { version: -1, rehydrated: false } }\n }\n localStorage.removeItem('persist:root')\n return { _persist: state._persist }\n}\n\n// Do a migration to reset the persisted store for a specific version\nconst migrations: MigrationManifest = {\n 0: resetStoreMigration,\n}\n\nconst persistConfig: PersistConfig = {\n key: 'root',\n storage,\n whitelist: ['auth', 'searchParams', 'exSearchParams'],\n blacklist: ['auth.userLoading'],\n version: 2,\n stateReconciler: autoMergeLevel2,\n migrate: createMigrate(migrations, { debug: false }),\n}\n\n// TODO: Fix this!!!\n// @ts-ignore\nconst persistedReducer = persistReducer(persistConfig, rootReducer)\n\nconst store = configureStore({\n reducer: persistedReducer,\n})\n\nexport const persistor = persistStore(store)\n\n// @ts-ignore\nif (process.env.NODE_ENV === 'development' && module.hot) {\n // @ts-ignore\n module.hot.accept('./rootReducer', () => {\n // eslint-disable-next-line\n const newRootReducer = require('./rootReducer').default\n store.replaceReducer(newRootReducer)\n })\n}\n\nexport type AppDispatch = typeof store.dispatch\nexport type AppThunk = ThunkAction>\n\nexport default store\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { sanatizeToSnakeCase } from '../../strings'\nimport { UserProfileDetails } from '../models/ResponsesTypes'\n\nexport enum EventCodes {\n LOG_OUT_EVENT = 'LOG_OUT',\n}\nexport interface SignUpParams {\n code: string\n firstName: string\n lastName: string\n email: string\n password: string\n passwordConfirm: string\n company: string\n jobTitle: string\n businessPhone: string\n address: string\n address2: string\n city: string\n state: string\n postalCode: string\n registrationCode: string\n fund_or_vehicle_name: string\n heard_about_hfr_from: string\n reports_fund_performance_to_hfr: boolean\n manager_link: boolean\n}\nexport interface EventParams {\n code: EventCodes\n source: string\n user_agent: string\n os: string\n client_created_date: string\n fund_id: string\n url: string\n json_data: string\n}\nexport interface AuthService {\n preLogin: (email: string, password: string) => AxiosPromise<{ disable_2fa: boolean }>\n login: (email: string, password: string, code: string, rememberMe: boolean) => AxiosPromise<{ token: string }>\n logout: () => AxiosPromise\n signUp: (formData: Partial) => AxiosPromise\n preSignUp: (email: string) => AxiosPromise\n checkCode: (email: string, verificationCode: string) => AxiosPromise\n requestPasswordReset: (email: string) => AxiosPromise\n resetPassword: (email: string, code: string, newPassword: string) => AxiosPromise\n updatePassword: ({ password, newPassword }: { password: string; newPassword: string }) => AxiosPromise\n updateProfile: (params: Partial) => AxiosPromise\n fetchUserProfile: () => AxiosPromise\n updateDbToMl: (\n email: string,\n password: string,\n fundName?: string,\n heardFrom?: string,\n isReportPerformance?: boolean,\n ) => AxiosPromise\n}\n\nexport const AuthService = (request: AxiosInstance): AuthService => {\n return {\n preLogin: (email, password) => request.post('/pre-login', { email, password, manager_link: true }),\n login: (email, password, code, rememberMe) =>\n request.post('/login', { email, password, code, remember_me: rememberMe, manager_link: true }),\n logout: () => request.post('/logout'),\n signUp: (formData) => request.post('/user', { ...sanatizeToSnakeCase(formData), manager_link: true }),\n preSignUp: (email) => request.post('/pre-sign-up', { email }),\n checkCode: (email, verificationCode) => request.post('/check-code', { email, code: verificationCode }),\n requestPasswordReset: (email) => request.post('/request-password-reset', { email }),\n resetPassword: (email, code, newPassword) =>\n request.post('/password-reset', {\n email,\n code,\n new_password: newPassword,\n }),\n updatePassword: ({ password, newPassword }) =>\n request.post('/manager-link/change-password', {\n password,\n new_password: newPassword,\n }),\n updateProfile: (params) => request.post('/user/update', params),\n fetchUserProfile: () => request.get('/me'),\n updateDbToMl: (email, password, fund_or_vehicle_name, heard_about_hfr_from, reports_fund_performance_to_hfr) =>\n request.post('/hfrdb-to-hfrml', {\n email,\n password,\n fund_or_vehicle_name,\n heard_about_hfr_from,\n reports_fund_performance_to_hfr,\n }),\n }\n}\n","import { createBrowserHistory } from 'history'\n\nexport const history = createBrowserHistory()\n","/**\n * Helper to check valid Strings: not null, not undefined, not blank\n * @returns true if the string is Valid, otherwise false\n * @param str\n */\nimport { snakeCase } from 'snake-case'\n\nexport const isValidString = (str) => {\n if (str === undefined || str === null) {\n return false\n }\n return str !== ''\n}\n\nexport const sanatizeToSnakeCase = (map) => {\n const entries = Object.entries(map)\n const newMap = {}\n entries.forEach(([key, value]) => {\n if (isValidString(value)) {\n newMap[snakeCase(key)] = value\n }\n })\n return newMap\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport browser from 'browser-detect'\n\nexport interface EventParams {\n source: string\n user_agent: string\n code: EventCodes\n os: string\n // screen_x: string;\n // screen_y: string;\n client_created_date: string\n fund_id: string\n url: string\n json_data: string\n}\n\nexport enum EventCodes {\n // Session EVENTS\n LOG_IN_EVENT = 'LOG_IN',\n SIGN_UP_EVENT = 'SIGN_UP',\n FORGOT_PASSWORD_EVENT = 'FORGOT_PASSWORD',\n LOG_OUT_EVENT = 'LOG_OUT',\n ACCEPT_DISCLAIMER_EVENT = 'ACCEPT_DISCLAIMER',\n // Access EVENTS\n SEARCH_FUNDS_ACCESS_EVENT = 'SEARCH_FUNDS_ACCESS',\n ADVANCE_SEARCH_ACCESS_EVENT = 'ADVANCE_SEARCH_ACCESS',\n UPLOAD_FUNDS_ACCESS_EVENT = 'UPLOAD_FUNDS_ACCESS',\n DOWNLOAD_FILE_ACCESS_EVENT = 'DOWNLOAD_FILE_ACCESS',\n // Search UI EVENTS\n CHART_VIEW_EVENT = 'CHART_VIEW',\n SEARCH_VIEW_EVENT = 'SEARCH_VIEW',\n FUND_SEARCH_STATS_CHART_VIEW_EVENT = 'FUND_SEARCH_STATS_CHART_VIEW',\n // Funds Events\n VIEW_FUND_PROFILE_EVENT = 'VIEW_FUND_PROFILE',\n VIEW_PGA_EVENT = 'VIEW_PGA',\n // My Data Events\n MY_LIST_ACCESS_EVENT = 'MY_LIST_ACCESS',\n MY_MODELS_ACCESS_EVENT = 'MY_MODELS_ACCESS',\n MY_FUNDS_ACCESS_EVENT = 'MY_FUNDS_ACCESS',\n // User Created List Events\n VIEW_UCL_EVENT = 'VIEW_UCL',\n // Models Events\n VIEW_PORTFOLIO_MODEL_EVENT = 'VIEW_PORTFOLIO_MODEL',\n // My Funds Events\n VIEW_MY_FUNDS_EVENT = 'VIEW_MY_FUNDS',\n VIEW_MY_FUND_EVENT = 'VIEW_MY_FUND',\n // Rankings\n VIEW_STRATEGY_RANKING = 'VIEW_STRATEGY_RANKING',\n VIEW_FUND_RANKING = 'VIEW_FUND_RANKING',\n VIEW_RISK_PREMIA_RANKING = 'VIEW_RISK_PREMIA_RANKING',\n VIEW_INDEX_FAMILY = 'VIEW_INDEX_FAMILY',\n}\n\nexport enum TrackingEventSource {\n MANAGER_LINK_EXTERNAL = 'MANAGER_LINK_EXTERNAL',\n MANAGER_LINK_INTERNAL = 'MANAGER_LINK_INTERNAL',\n SYSTEM_SOURCE = 'SYSTEM_SOURCE',\n}\n\nexport interface EventService {\n sendViewPgaEvent: (type: TrackingEventSource, data: string) => AxiosPromise\n}\n\nconst sendEvent = (request: AxiosInstance, source: TrackingEventSource, data: Partial) => {\n const platform = browser()\n return request.post('/event', {\n ...data,\n os: platform.os,\n source: source,\n user_agent: navigator.userAgent,\n url: window.location.href,\n })\n}\n\nexport const EventService = (request: AxiosInstance): EventService => {\n return {\n sendViewPgaEvent: (source, data) =>\n sendEvent(request, source, { code: EventCodes.VIEW_PGA_EVENT, json_data: data }),\n }\n}\n","import { notification } from 'antd'\nimport Axios, { AxiosInstance, AxiosRequestConfig } from 'axios'\nimport nProgress from 'nprogress'\nimport qs from 'querystring'\nimport store from '../../app/store'\nimport { clearToken } from '../../slice/authSlice'\nimport { history } from '../history'\nimport '../nprogress.css'\nimport { ActivityLogService } from './services/activity-log.service'\nimport { AdminService } from './services/admin.service'\nimport { AnalysisService } from './services/analysis.service'\nimport { AuthService } from './services/auth.service'\nimport { BenchmarkService } from './services/benchmark.service'\nimport { CodeOfConductService } from './services/code-of-conduct.service'\nimport { CodeTableService } from './services/code-table.service'\nimport { CommonService } from './services/common.service'\nimport { ContentService } from './services/content.service'\nimport { AppDataService } from './services/data.service'\nimport { EventService } from './services/event.service'\nimport { FirmDetailService } from './services/firm-detail.service'\nimport { FirmService } from './services/firm.service'\nimport { FundDetailService } from './services/fund-detail.service'\nimport { FundAndUniverseListService } from './services/fund-universe-list'\nimport { FundService } from './services/fund.service'\nimport { IndexManagerService } from './services/index-manager.service'\nimport { MinorityService } from './services/minority.service'\nimport { PeerGroupAnalysisService } from './services/peer-group.service'\nimport { PortfolioModelService } from './services/portfolio-model.service'\nimport { UniverseManagerService } from './services/universe-manager.service'\nimport { UserFundService } from './services/user-fund.service'\nimport { UserService } from './services/user.service'\n\nclass APIClient {\n private request: AxiosInstance\n\n public accessToken: string | null = null\n private activeRequests: AxiosRequestConfig[] = []\n private requestTimeOut?: number\n public authService: AuthService\n public commonService: CommonService\n public appDataService: AppDataService\n public portfolioModelService: PortfolioModelService\n public fundUniverseListService: FundAndUniverseListService\n public fundService: FundService\n public firmService: FirmService\n public fundDetailService: FundDetailService\n public firmDetailService: FirmDetailService\n public benchmarkService: BenchmarkService\n public activityLogService: ActivityLogService\n public analysisService: AnalysisService\n public userService: UserService\n public indexManagerService: IndexManagerService\n public codeOfConductService: CodeOfConductService\n public peerGroupAnalysisService: PeerGroupAnalysisService\n public userFundService: UserFundService\n public universeManagerService: UniverseManagerService\n public codeTableService: CodeTableService\n public adminService: AdminService\n public contentService: ContentService\n public eventService: EventService\n public minorityService: MinorityService\n\n private paramsSerialize(params: any) {\n return qs.stringify(\n Object.keys(params).reduce((s: { [key: string]: any }, key: string) => {\n if (!params[key] || (Array.isArray(params[key]) && params[key].length === 0)) {\n return s\n }\n return {\n [key]: Array.isArray(params[key]) ? JSON.stringify(params[key]) : params[key],\n ...s,\n }\n }, {}),\n )\n }\n\n constructor() {\n this.request = Axios.create({\n baseURL: process.env.REACT_APP_AUTH_API_URL,\n maxRedirects: 0,\n paramsSerializer: (params) => this.paramsSerialize(params),\n })\n\n this.authService = AuthService(this.request)\n this.commonService = CommonService(this.request)\n this.appDataService = AppDataService(this.request)\n this.portfolioModelService = PortfolioModelService(this.request)\n this.fundUniverseListService = FundAndUniverseListService(this.request)\n this.fundService = FundService(this.request)\n this.firmService = FirmService(this.request)\n this.fundDetailService = FundDetailService(this.request)\n this.firmDetailService = FirmDetailService(this.request)\n this.benchmarkService = BenchmarkService(this.request)\n this.activityLogService = ActivityLogService(this.request)\n this.analysisService = AnalysisService(this.request)\n this.userService = UserService(this.request)\n this.indexManagerService = IndexManagerService(this.request)\n this.codeOfConductService = CodeOfConductService(this.request)\n this.peerGroupAnalysisService = PeerGroupAnalysisService(this.request)\n this.userFundService = UserFundService(this.request)\n this.universeManagerService = UniverseManagerService(this.request)\n this.codeTableService = CodeTableService(this.request)\n this.adminService = AdminService(this.request)\n this.contentService = ContentService(this.request)\n this.eventService = EventService(this.request)\n this.minorityService = MinorityService(this.request)\n\n this.request.interceptors.response.use(\n (response) => response,\n (error) => {\n if (error) {\n if (this.accessToken && error.response && error.response.status === 401) {\n this.accessToken = null\n store.dispatch(clearToken())\n notification.error({ message: 'Unauthorized!' })\n history.push('/auth')\n return\n }\n }\n throw error\n },\n )\n\n this.request.interceptors.request.use((config) => {\n if (this.accessToken) {\n config.headers.Authorization = `Bearer ${this.accessToken}`\n }\n return config\n })\n this._setupLoadingIndicator()\n }\n\n private static shouldShowProgressBar(req: AxiosRequestConfig) {\n // No Progress Bar when Downloading files.\n if (!(req.url && req.url.startsWith('/files/'))) {\n nProgress.start()\n nProgress.set(0.1)\n }\n }\n\n private _setupLoadingIndicator() {\n this.request.interceptors.request.use((req) => {\n if (this.requestTimeOut) {\n clearTimeout(this.requestTimeOut)\n }\n this.requestTimeOut = setTimeout(() => nProgress.done(), 10000)\n this.activeRequests.push(req)\n APIClient.shouldShowProgressBar(req)\n return req\n })\n\n this.request.interceptors.response.use(\n (res) => {\n if (res) {\n this.activeRequests = this.activeRequests.filter((i) => i !== res.config)\n if (!this.activeRequests.length) {\n nProgress.done()\n }\n }\n return res\n },\n (error) => {\n if (Axios.isCancel(error)) {\n const canceledIndex = this.activeRequests.findIndex((i) => i.url && i.url.includes(error.message))\n this.activeRequests = this.activeRequests.filter((_, i) => i !== canceledIndex)\n } else {\n this.activeRequests = this.activeRequests.filter((i) => i !== error.config)\n }\n if (!this.activeRequests.length) {\n nProgress.done()\n }\n throw error\n },\n )\n }\n\n public setToken(token: string) {\n this.accessToken = token\n }\n public clearToken() {\n this.accessToken = null\n }\n}\n\nconst APIService = new APIClient()\nexport default APIService\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { DisclaimerResponse, DisclaimerPrompt } from '../models/ResponsesTypes'\n\nexport interface CommonService {\n fetchAllCountries: () => AxiosPromise\n fetchDisclaimer: (placement: 'universe' | 'model' | 'profile' | 'ranking') => AxiosPromise\n fetchDisclaimerPrompt: () => AxiosPromise\n approveDisclaimerPrompt: () => AxiosPromise\n}\n\nexport const CommonService = (request: AxiosInstance): CommonService => {\n return {\n fetchAllCountries: () => request.get('/country'),\n fetchDisclaimer: (placement: 'universe' | 'model' | 'profile' | 'ranking') =>\n request.get(`/disclaimer/${placement}`),\n fetchDisclaimerPrompt: () => request.get('/disclaimer/prompt/hfrml'),\n approveDisclaimerPrompt: () => request.post('/disclaimer/prompt/hfrml/approve'),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { FundDetailRegionalFocus, StrategyResponse } from '../models/FundDetails'\nimport { BenchmarkRecord, CodeRecord, FundListRecord, ValueRecord } from '../models/ResponsesTypes'\n\nexport type AppDataService = {\n // funds-api\n fetchStrategies: () => AxiosPromise\n fetchRegionalFocus: () => AxiosPromise\n fetchLiquidAltTypes: () => AxiosPromise\n fetchLiquidAltRegions: () => AxiosPromise\n fetchMax12B1Fees: () => AxiosPromise\n fetchMaxFrontFees: () => AxiosPromise\n fetchMaxDeferredFees: () => AxiosPromise\n fetchProductClasses: () => AxiosPromise\n fetchBenchmarks: () => AxiosPromise\n fetchAdvanceNotices: () => AxiosPromise\n fetchFundCurrencyCodes: () => AxiosPromise\n fetchReportings: () => AxiosPromise\n fetchReportingStyles: () => AxiosPromise\n fetchRedemptions: () => AxiosPromise\n fetchSubscriptions: () => AxiosPromise\n fetchFirmAssetCurrencies: () => AxiosPromise\n // end funds-api\n\n // hfr indexes\n fetchStaticIndexes: () => AxiosPromise\n fetchDynamicIndexes: () => AxiosPromise\n}\n\nexport const AppDataService = (request: AxiosInstance): AppDataService => {\n return {\n // funds-api\n fetchStrategies: () => request.get('/manager-link/strategies'),\n fetchRegionalFocus: () => request.get('/funds-api/data/regional-focus'),\n fetchLiquidAltTypes: () => request.get('/funds-api/data/liquid-alt-types'),\n fetchLiquidAltRegions: () => request.get('/funds-api/data/liquid-alt-regions'),\n fetchMax12B1Fees: () => request.get('/funds-api/data/max-12b1-fees'),\n fetchMaxDeferredFees: () => request.get('/funds-api/data/max-deferred-fees'),\n fetchMaxFrontFees: () => request.get('/funds-api/data/max-front-fees'),\n fetchProductClasses: () => request.get('/funds-api/data/product-classes'),\n fetchBenchmarks: () => request.get('/funds-api/data/available-benchmarks'),\n fetchAdvanceNotices: () => request.get('/funds-api/data/advance-notice-days'),\n fetchFundCurrencyCodes: () => request.get('/funds-api/data/fund-currency-codes'),\n fetchReportings: () => request.get('/funds-api/data/reporting'),\n fetchReportingStyles: () => request.get('/funds-api/data/reporting-style'),\n fetchRedemptions: () => request.get('/funds-api/data/redemptions'),\n fetchSubscriptions: () => request.get('/funds-api/data/subscriptions'),\n fetchFirmAssetCurrencies: () => request.get('/funds-api/data/firm-currency-codes'),\n\n // hfr-indexes\n fetchStaticIndexes: () => request.get('/index/static'),\n fetchDynamicIndexes: () => request.get('/index/dynamic'),\n }\n}\n","import { AxiosPromise, AxiosInstance } from 'axios'\nimport {\n Benchmarks,\n DateValueRecordList,\n PortfolioModelFundRecord,\n PortfolioModelRecord,\n PortfolioModelStats,\n} from '../models/ResponsesTypes'\n\nexport interface UpdatePortfolioModelParam {\n update?: Array<{ fund_id: string; weight: number } | { user_fund_id: number; weight: number }>\n add?: Array<{ fund_id: string; weight: number } | { user_fund_id: number; weight: number }>\n delete?: Array\n user_fund_delete?: Array\n name?: string\n}\n\nexport interface PortfolioModelService {\n fetchPortfolioModels: () => AxiosPromise\n fetchPortfolioModelFunds: (modelId: string) => AxiosPromise\n fetchPortfolioModelStats: (modelId: string) => AxiosPromise\n fetchPortfolioModelVami: ({\n modelId,\n params,\n }: {\n modelId: string\n params: Benchmarks\n }) => AxiosPromise\n createNewModel: (\n name: string,\n funds: Array<{ fund_id: string; weight: number } | { user_fund_id: number; weight: number }>,\n ) => AxiosPromise\n updatePortfolioModel: ({ modelId, data }: { modelId: string; data: UpdatePortfolioModelParam }) => AxiosPromise\n deleteModel: (modelId: string) => Promise\n sharePortfolioModel: (id: number, shareTo: number[], isShareAll: boolean) => Promise\n}\n\nexport const PortfolioModelService = (request: AxiosInstance): PortfolioModelService => {\n return {\n fetchPortfolioModels: () => request.get('/portfolio-model'),\n fetchPortfolioModelFunds: (modelId: string) => request.get(`/portfolio-model/${modelId}`),\n fetchPortfolioModelStats: (modelId: string) => request.get(`/portfolio-model/${modelId}/stats`),\n fetchPortfolioModelVami: ({ modelId, params }: { modelId: string; params: Benchmarks }) =>\n request.get(`/portfolio-model/${modelId}/vami`, { params }),\n createNewModel: (name, funds) => request.post('/portfolio-model', { name, funds }),\n updatePortfolioModel: ({ modelId, data }) => request.put(`/portfolio-model/${modelId}`, data),\n deleteModel: (modelId: string) => request.delete(`/portfolio-model/${modelId}`),\n sharePortfolioModel: (id, shareTo, isShareAll) =>\n request.post(`/portfolio-model/${id}/share`, {\n user_ids: shareTo,\n all: isShareAll,\n }),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { FundListRecord } from '../models/ResponsesTypes'\n\nexport interface UniverseFundListRecord {\n fund_id: string\n fund_name: string\n firm_name: string\n strategy_name: string\n sub_strategy_name: string\n inception_date: string\n user_fund_id: string\n user_fund_name: string\n user_fund_strategy_name: string\n user_fund_sub_strategy_name: string\n}\n\nexport interface UpdateFundListParams {\n name?: string\n add?: string[]\n delete?: string[]\n user_fund_add?: number[]\n user_fund_delete?: string[]\n}\n\nexport interface UniverseFundListResponse {\n count: number\n funds: UniverseFundListRecord[]\n}\n\nexport interface FundAndUniverseListService {\n fetchFundList: () => AxiosPromise\n fetchFundListByListId: ({\n listId,\n page,\n sortBy,\n orderBy,\n }: {\n listId: string\n page?: number\n sortBy: 'ASC' | 'DESC'\n orderBy: keyof UniverseFundListRecord\n }) => AxiosPromise\n sendGroupReportByListId: (listId: string) => AxiosPromise\n createFundList: (name: string, fundIds: string[]) => AxiosPromise\n updateFundList: (id: string, data: UpdateFundListParams) => AxiosPromise\n deleteFundList: (fundId: string) => AxiosPromise\n shareFundList: (id: string, shareTo: number[], isShareAll: boolean) => AxiosPromise\n\n fetchUniverseList: () => AxiosPromise\n fetchFundsByUniverseListId: (listId: string) => AxiosPromise\n sendGroupREportByUniverseListId: (listId: string) => AxiosPromise\n}\n\nexport const FundAndUniverseListService = (request: AxiosInstance): FundAndUniverseListService => {\n return {\n fetchFundList: () => request.get('/fund-list'),\n fetchFundListByListId: ({ listId, page, sortBy, orderBy }) =>\n request.get(`/fund-list/${listId}`, {\n params: {\n page,\n sort_by: sortBy,\n orderBy: orderBy,\n },\n }),\n sendGroupReportByListId: (listId) => request.post(`/fund-list/${listId}/group-report`),\n createFundList: (name, fundIds) =>\n request.post(`/fund-list`, {\n name,\n fund_ids: fundIds,\n }),\n updateFundList: (id, data) => request.put(`/fund-list/${id}`, data),\n deleteFundList: (id) => request.delete(`/fund-list/${id}`),\n shareFundList: (id, shareTo, isShareAll) =>\n request.post(`/fund-list/${id}/share`, {\n user_ids: shareTo,\n all: isShareAll,\n }),\n\n fetchUniverseList: () => request.get('/universe-list', { params: { manager_link: true } }),\n fetchFundsByUniverseListId: (listId) => request.get(`/universe-list/${listId}`),\n sendGroupREportByUniverseListId: (listId) => request.post(`/universe-list/${listId}/group-report`),\n }\n}\n","import { RcFile } from 'antd/lib/upload'\nimport { AxiosInstance, AxiosPromise } from 'axios'\nimport { RORResponseType } from '../../components/DataSheet'\nimport { sanatizeToSnakeCase } from '../../strings'\nimport { ExFundDetails } from '../models/ExFundDetails'\nimport { FetchFundParams } from '../models/FetchFundParams'\nimport {\n FirmDetailResponse,\n FundAllInfo,\n FundDetailsPreviewType,\n FundSearchParams,\n FundSearchResponse,\n ListFundIdResponse,\n} from '../models/FundDetails'\nimport {\n BulkUpdateFund,\n FavoritedFundsResponse,\n FavoritedFundUpdate,\n FundSearchColumnSourceResponse,\n RecentlyEditedResponse,\n RORImportResponse,\n SearchQueryList,\n} from '../models/Funds'\nimport { AUMRecord, ListResponse, ProfileStats, RORDetails, RORRecord } from '../models/ResponsesTypes'\nimport { FlaggedDataType } from './fund-detail.service'\nimport { MinorityType } from './minority.service'\n\nexport interface FetchFundPdfParams {\n start_date: string\n end_date: string\n benchmark1: string\n benchmark2: string\n benchmark3: string\n}\n\nexport interface LatestPerformanceResponse {\n latest_ror: string | null\n latest_ror_value: number | null\n latest_asset: string | null\n latest_asset_value: number | null\n latest_nav: string | null\n latest_nav_value: number | null\n curr_code: string | null\n}\n\nexport interface LatestPerformanceRequest {\n rors?: RORResponseType[]\n navs?: RORResponseType[]\n assets?: RORResponseType[]\n}\n\nexport interface FundService {\n fetchRORDetails: ({\n fundId,\n fromDate,\n toDate,\n }: {\n fundId: string\n fromDate?: string\n toDate?: string\n }) => AxiosPromise\n fetchAUMDetails: ({\n fundId,\n fromDate,\n toDate,\n }: {\n fundId: string\n fromDate?: string\n toDate?: string\n }) => AxiosPromise>\n fetchRORDetailsForBenchmarks: ({\n fundIds,\n fromDate,\n toDate,\n }: {\n fundIds: string[]\n fromDate?: string\n toDate?: string\n }) => AxiosPromise>\n\n fetchFunds: (params: Partial) => AxiosPromise>\n fetchExFunds: () => AxiosPromise\n fetchFundName: ({ text }: { text: string }) => AxiosPromise<{ fund_id: string; fund_name: string }[]>\n fetchFundIds: (params: Partial) => AxiosPromise>\n exportFunds: (params: Partial) => AxiosPromise\n generateFundPdfReport: ({ fundId, data }: { fundId: string; data: FetchFundPdfParams }) => AxiosPromise\n\n fetchFirmDetails: (firmId: string) => AxiosPromise\n fetchProfileStatsDetail: ({\n fundId,\n benchmark1,\n benchmark2,\n benchmark3,\n startDate,\n endDate,\n }: {\n fundId: string\n benchmark1: string\n benchmark2: string\n benchmark3: string\n startDate?: string\n endDate?: string\n }) => AxiosPromise\n fetchStateCodes: () => AxiosPromise\n fetchRORDateRange: () => AxiosPromise<{\n start_date: string\n end_date: string\n }>\n fetchFundDetails: (fundId: string) => AxiosPromise\n fetchFundPdfReport: ({ fundId, data }: { fundId: string; data: FetchFundPdfParams }) => AxiosPromise\n bulkUpdateFund: (params: Partial) => AxiosPromise\n fetchRecentlyEdited: () => AxiosPromise\n fetchFavorited: () => AxiosPromise\n updateFavorited: (params: Partial) => AxiosPromise\n fetchListCreatedFund: (params?: { all_users: boolean }) => AxiosPromise\n fetchListUpdateFund: (params?: { all_users: boolean }) => AxiosPromise\n //Fund Search\n searchFunds: (params: Partial) => AxiosPromise\n fetchFundSearchAllFundId: (params: Partial) => AxiosPromise\n fetchAllField: () => AxiosPromise\n //Import, Export ROR\n fetchRORExport: (tableName: string, id: string) => AxiosPromise\n uploadRORImport: (file: RcFile) => AxiosPromise\n //Fund Search Query\n fetchFundSearchQuery: () => AxiosPromise\n createFundSearchQuery: (name: string, json: string) => AxiosPromise\n fetchMeFundSearch: () => AxiosPromise\n fetchFundSearchMinorityType: () => AxiosPromise\n\n fetchFundSearchQueryDetail: (queryId: number) => AxiosPromise\n updateFundSearchQueryDetail: (queryId: number, name: string, json: string) => AxiosPromise\n deleteFundSearchQueryDetail: (queryId: number) => AxiosPromise\n fetchLatestPerformance: (fundId: string) => AxiosPromise\n updateLatestPerformance: (fundId: string, latestPerformanceData: LatestPerformanceRequest) => AxiosPromise\n\n validateLatestPerformance: (\n fundId: string,\n latestPerformanceData: LatestPerformanceRequest,\n ) => AxiosPromise<{ flagged_rors: FlaggedDataType; flagged_assets: FlaggedDataType }>\n // Export File\n postDownloadFile: (params: {\n file_type: string\n data: Partial<\n FundSearchParams & {\n fund_id: string\n benchmark_1: string\n benchmark_2: string\n benchmark_3: string\n start_date: string\n end_date: string\n }\n >\n }) => AxiosPromise<{ url: string }>\n downloadFileByUrl: (url: string) => AxiosPromise\n}\n\nexport const FundService = (request: AxiosInstance): FundService => {\n return {\n fetchRORDetails: ({ fundId, fromDate, toDate }) =>\n request.get(`/funds-api/fund/${fundId.trim()}/ror`, {\n params: {\n manager_link: true,\n from: fromDate ? fromDate : null,\n to: toDate ? toDate : null,\n },\n }),\n fetchAUMDetails: ({ fundId, fromDate, toDate }) =>\n request.get(`/funds-api/fund/${fundId.trim()}/aum`, {\n params: {\n manager_link: true,\n from: fromDate ? fromDate : null,\n to: toDate ? toDate : null,\n },\n }),\n fetchRORDetailsForBenchmarks: ({ fundIds, fromDate, toDate }) =>\n request.get('/funds-api/fund/ror', {\n params: {\n fund_ids: JSON.stringify(fundIds.map((id) => Number(id.trim()))),\n from: fromDate ? fromDate : null,\n to: toDate ? toDate : null,\n },\n }),\n\n fetchFunds: (params: Partial) =>\n request.post('/funds-api/fund', { ...sanatizeToSnakeCase(params) }),\n fetchFundDetails: (fundId) => request.get(`/funds-api/fund/${fundId.trim()}`, { params: { manager_link: true } }),\n fetchExFunds: () => request.get(`manager-link/funds`),\n fetchFundName: ({ text }) => request.get(`/manager-link/funds/name-search`, { params: { query: text, page: 1 } }),\n fetchFundIds: (params: Partial) =>\n request.post('/funds-api/fund/ids', { ...sanatizeToSnakeCase(params) }),\n exportFunds: (params: Partial) =>\n request.post(\n '/funds-api/fund/export',\n { ...sanatizeToSnakeCase(params) },\n {\n responseType: 'blob',\n },\n ),\n generateFundPdfReport: ({ fundId, data }: { fundId: string; data: FetchFundPdfParams }) =>\n request.post(`/funds-api/fund/${fundId}/pdf`, data, {\n responseType: 'blob',\n }),\n\n fetchFirmDetails: (firmId) => request.get(`/funds-api/firm/${firmId.trim()}`),\n fetchProfileStatsDetail: ({ fundId, benchmark1, benchmark2, benchmark3, startDate, endDate }) => {\n return request.get(`/funds-api/fund/${parseInt(fundId)}/profile-stats`, {\n params: {\n manager_link: true,\n benchmark1: parseInt(benchmark1, 10),\n benchmark2: parseInt(benchmark2, 10),\n benchmark3: parseInt(benchmark3, 10),\n start_date: startDate ? startDate : null,\n end_date: endDate ? endDate : null,\n },\n })\n },\n fetchStateCodes: () => request.get('/funds-api/data/state-codes'),\n fetchRORDateRange: () => request.get('/funds-api/data/ror-date-range'),\n fetchFundPdfReport: ({ fundId, data }: { fundId: string; data: FetchFundPdfParams }) =>\n request.post(\n `/funds-api/fund/${fundId}/pdf`,\n { ...data, manager_link: true },\n {\n responseType: 'blob',\n },\n ),\n bulkUpdateFund: (params) => request.post(`/manager-link/bulk-update`, params),\n fetchRecentlyEdited: () => request.get(`/manager-link/recently-edited-funds`),\n fetchFavorited: () => request.get(`/manager-link/favorited-funds`),\n updateFavorited: (params) => request.put(`/manager-link/favorited-funds`, params),\n fetchListCreatedFund: (params) =>\n request.get(`/manager-link/created-funds`, params ? { params: params } : undefined),\n\n fetchListUpdateFund: (params) =>\n request.get(`/manager-link/updated-funds`, params ? { params: params } : undefined),\n\n //Fund Search\n searchFunds: (params) => request.post(`/manager-link/funds/search`, params),\n fetchFundSearchAllFundId: (params) => request.post(`/manager-link/funds/search/fund_ids`, params),\n fetchAllField: () => request.get(`/manager-link/funds/search/fields-metadata`),\n //Import, Export ROR\n fetchRORExport: (tableName, id) =>\n request.post(`/manager-link/rorlike-tables/csv-export`, { table_name: tableName, fund_or_firm_id: id }),\n uploadRORImport: (file) => {\n const formData = new FormData()\n formData.append('csv_file', file)\n return request.post(`/manager-link/rorlike-tables/csv-import`, formData, {\n headers: {\n 'content-type': 'multipart/form-data',\n },\n })\n },\n fetchFundSearchMinorityType: () => request.get(`/manager-link/minority-types`),\n fetchFundSearchQuery: () => request.get(`/manager-link/query`),\n fetchMeFundSearch: () => request.get(`/manager-link/query/me`),\n createFundSearchQuery: (name, json) => request.post(`/manager-link/query`, { name: name, json: json }),\n\n fetchFundSearchQueryDetail: (queryId) => request.get(`/manager-link/query/${queryId}`),\n updateFundSearchQueryDetail: (queryId, name, json) =>\n request.put(`/manager-link/query/${queryId}`, { name: name, json: json }),\n deleteFundSearchQueryDetail: (queryId) => request.delete(`/manager-link/query/${queryId}`),\n\n fetchLatestPerformance: (fundId) => request.get(`/manager-link/funds/${fundId}/latest-performance`),\n updateLatestPerformance: (fundId, data) => request.post(`/manager-link/funds/${fundId}/latest-performance`, data),\n validateLatestPerformance: (fundId, data) =>\n request.post(`/manager-link/funds/${fundId}/flag-latest-performance`, data),\n postDownloadFile: (params) => request.post(`/manager-link/files`, params),\n downloadFileByUrl: (url) => request.get(`/manager-link/files/${url}`),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { FirmParams, FirmSearchColumnResponse, FirmSearchResponse } from '../models/FirmDetails'\n\nexport interface FirmService {\n searchFirms: (params: Partial) => AxiosPromise\n fetchAllColumns: () => AxiosPromise\n}\n\nexport const FirmService = (request: AxiosInstance): FirmService => {\n return {\n searchFirms: (params) => request.post(`/manager-link/firms/search`, params),\n fetchAllColumns: () => request.get(`/manager-link/firms/search/fields-metadata`),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { RORResponseCalculate, RORResponseType, UpdateRORType } from '../../components/DataSheet'\nimport {\n APGLResponse,\n AsiStrategyResponse,\n DueDiligenceDocumentsResponse,\n DueDiligenceInvestor,\n DueDiligenceInvestorUpdate,\n DueDiligenceMonthly,\n DueDiligenceMonthlyUpdate,\n DueDiligenceScoreCardResponse,\n DueDiligenceScoreCardUpdate,\n FundActivationParams,\n FundBenchmark,\n FundDetails,\n FundDetailsUniverses,\n FundDropdownType,\n FundESGStrategies,\n FundIndexEligibilityDetails,\n FundIndexEligibilityDetailsResponse,\n FundIndicesUpdate,\n FundPropertiesParams,\n FundPropertiesResponse,\n FundTableDropDown,\n IndustryGroupsType,\n InstrumentCreateRequestType,\n InstrumentResponseType,\n InstrumentUpdateRequestType,\n InvestorCreateRequestType,\n InvestorType,\n InvestorUpdateRequestType,\n LegacyStrategyResponse,\n LeverageCreateRequestType,\n LeverageResponseType,\n LeverageUpdateRequestType,\n ListPlatformResponse,\n PrincipalsResponse,\n PrincipalsUpdateParams,\n RegionWeightType,\n UniversesUpdate,\n} from '../models/FundDetails'\n\nexport type FlaggedDataType = [[string, number]]\n\nexport interface FundDetailService {\n fetchFundBasicInfo: (fundId: string) => AxiosPromise\n fetchFundROR: (fundId: string) => AxiosPromise\n fetchNAVAssets: (fundId: string) => AxiosPromise\n fetchNAVNavs: (fundId: string) => AxiosPromise\n fetchFundDistributions: (fundId: string) => AxiosPromise\n fetchFundLeverages: (fundId: string) => AxiosPromise\n fetchFundInstruments: (fundId: string) => AxiosPromise\n fetchFundIndustryGroups: (fundId: string) => AxiosPromise\n fetchFundInvestorTypes: (fundId: string) => AxiosPromise\n fetchFundRegionWeights: (fundId: string) => AxiosPromise\n fetchFundUniverses: (fundId: string) => AxiosPromise\n fetchFundBenchmark: () => AxiosPromise\n //NAV per unit calculate\n fetchCalculateNAV: ({\n fundId,\n fromDate,\n toDate,\n saveToDb,\n }: {\n fundId: string\n fromDate: string\n toDate: string\n saveToDb?: boolean\n }) => AxiosPromise\n\n fetchDataDropdown: () => AxiosPromise\n\n validateFundROR: ({\n fundId,\n data,\n }: {\n fundId: string\n data: UpdateRORType\n }) => AxiosPromise<{ flagged_rors: FlaggedDataType }>\n validateFundAsset: ({\n fundId,\n data,\n }: {\n fundId: string\n data: UpdateRORType\n }) => AxiosPromise<{ flagged_assets: FlaggedDataType }>\n\n updateFundROR: (fundId: string, data: UpdateRORType) => AxiosPromise\n updateNAVROR: (fundId: string, data: UpdateRORType) => AxiosPromise\n updateAssetROR: (fundId: string, data: UpdateRORType) => AxiosPromise\n updateFundBasicInfo: (fundId: string, param: Partial) => AxiosPromise\n createFundBasicInfo: (param: Partial) => AxiosPromise<{ fund_id: string; message: string }>\n updateFundDistributions: (fundId: string, data: UpdateRORType) => AxiosPromise\n updateFundUniverses: (fundId: string, param: UniversesUpdate) => AxiosPromise\n updateFundIndices: (fundId: string, param: FundIndicesUpdate) => AxiosPromise\n fetchLegacyStrategy: () => AxiosPromise\n fetchAsiStrategy: () => AxiosPromise\n\n // fund > Information\n createFundLeverage: (fundId: string, data: LeverageCreateRequestType) => AxiosPromise\n updateFundLeverage: (fundId: string, data: LeverageUpdateRequestType) => AxiosPromise\n deleteFundLeverage: (fundId: string, date: string) => AxiosPromise\n\n createFundInstrument: (fundId: string, data: InstrumentCreateRequestType) => AxiosPromise\n updateFundInstrument: (fundId: string, data: InstrumentUpdateRequestType) => AxiosPromise\n deleteFundInstrument: (fundId: string, date: string, name: string) => AxiosPromise\n\n createFundIndustry: (fundId: string, data: InstrumentCreateRequestType) => AxiosPromise\n updateFundIndustry: (fundId: string, data: InstrumentUpdateRequestType) => AxiosPromise\n deleteFundIndustry: (fundId: string, date: string, name: string) => AxiosPromise\n\n createFundInvestorType: (fundId: string, data: InvestorCreateRequestType) => AxiosPromise\n updateFundInvestorType: (fundId: string, data: InvestorUpdateRequestType) => AxiosPromise\n deleteFundInvestorType: (fundId: string, date: string, name: string) => AxiosPromise\n\n createFundRegionWeight: (fundId: string, data: InstrumentCreateRequestType) => AxiosPromise\n updateFundRegionWeight: (fundId: string, data: InstrumentUpdateRequestType) => AxiosPromise\n deleteFundRegionWeight: (fundId: string, date: string, name: string) => AxiosPromise\n //Due Diligence Investor Opinion\n fetchDueDiligenceInvestor: (fundId: string) => AxiosPromise\n updateDueDiligenceInvestor: (fundId: string, params: Partial) => AxiosPromise\n //Due Diligence Scorecard\n fetchDueDiligenceScoreCard: (fundId: string) => AxiosPromise\n resetDueDiligenceScoreCard: (fundId: string) => AxiosPromise\n updateDueDiligenceScoreCard: (\n fundId: string,\n params: { updates: DueDiligenceScoreCardUpdate[] },\n ) => AxiosPromise\n //Due Diligence Monthly\n fetchDueDiligenceMonthly: (firmId: string) => AxiosPromise\n updateDueDiligenceMonthly: (firmId: string, params: Partial) => AxiosPromise\n createDueDiligenceMonthly: (firmId: string, params: Partial) => AxiosPromise\n deleteDueDiligenceMonthly: (firmId: string, params: { date: string }) => AxiosPromise\n //Due Diligence Documents\n fetchDueDiligenceDocuments: (firmId: string) => AxiosPromise\n //Principals\n fetchFundPrincipals: (fundId: string) => AxiosPromise\n createFundPrincipals: (fundId: string, params: Partial) => AxiosPromise\n updateFundPrincipals: (fundId: string, params: Partial) => AxiosPromise\n deleteFundPrincipals: (fundId: string, params: Partial) => AxiosPromise\n //APGL\n fetchFundAPGL: (fundId: string) => AxiosPromise\n //Fund Properties\n fetchFundProperties: (fundId: string) => AxiosPromise\n updateFundProperties: (fundId: string, params: FundPropertiesParams) => AxiosPromise\n createFundProperties: (fundId: string, params: FundPropertiesParams) => AxiosPromise\n deleteFundProperties: (fundId: string, prodId: number) => AxiosPromise\n //Fund Table Dropdown\n fetchFundTableDropdown: () => AxiosPromise\n //Fund Status Activate\n updateFundStatusActivate: (fundId: string, params: FundActivationParams) => AxiosPromise\n\n cloneFund: (fundId: string, fundName: string) => AxiosPromise<{ fund_id: string }>\n //Electronic Platform\n fetchListPlatform: (fundId: string) => AxiosPromise\n updateListPlatform: (fundId: string, platforms: string[]) => AxiosPromise\n previewDeleteFund: (fundId: string) => AxiosPromise<{ [key: string]: number }>\n deleteFund: (fundId: string) => AxiosPromise\n // Fund ESG Strategies\n fetchESGStrategies: () => AxiosPromise\n // Fund Index Eligibility Details\n fetchFundIndexEligibilityDetails: (params: {\n fundId: string\n indexFamilyId: number\n }) => AxiosPromise\n updateFundIndexEligibilityDetails: (params: {\n fundId: string\n indexFamilyId: number\n body: FundIndexEligibilityDetails\n }) => AxiosPromise<{ message: string }>\n}\n\nexport const FundDetailService = (request: AxiosInstance): FundDetailService => {\n return {\n fetchFundBasicInfo: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}`),\n fetchFundROR: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/rors`),\n fetchNAVAssets: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/assets`),\n fetchNAVNavs: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/navs`),\n fetchFundDistributions: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/distributions`),\n fetchFundLeverages: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/leverages`),\n fetchFundInstruments: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/instruments`),\n fetchFundIndustryGroups: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/industry-groups`),\n fetchFundInvestorTypes: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/investor-types`),\n fetchFundRegionWeights: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/region-weights`),\n fetchDataDropdown: () => request.get('/manager-link/dropdown-values'),\n fetchFundUniverses: (fundId) => request.get(`/manager-link/legacy-universe-list/funds/${fundId.trim()}`),\n fetchFundBenchmark: () => request.get(`/manager-link/benchmark-funds`),\n //NAV per unit calculate\n // ({ fundId, benchmark1, benchmark2, benchmark3, startDate, endDate })\n fetchCalculateNAV: ({ fundId, fromDate, toDate, saveToDb }) => {\n return request.post(`/manager-link/funds/${fundId.trim()}/navs/calculate_rors`, {\n start_date: fromDate,\n end_date: toDate,\n save_to_db: saveToDb,\n })\n },\n fetchLegacyStrategy: () => request.get(`/manager-link/legacy-strategies`),\n fetchAsiStrategy: () => request.get(`/manager-link/asi-strategies`),\n\n // ror/aum data validating\n validateFundROR: ({ fundId, data }) => request.post(`/manager-link/funds/${fundId.trim()}/flag-rors`, data),\n validateFundAsset: ({ fundId, data }) => request.post(`/manager-link/funds/${fundId.trim()}/flag-assets`, data),\n\n // update\n updateFundROR: (fundId, data) => request.put(`/manager-link/funds/${fundId.trim()}/rors`, data),\n updateNAVROR: (fundId, data) => request.put(`/manager-link/funds/${fundId.trim()}/navs`, data),\n updateAssetROR: (fundId, data) => request.put(`/manager-link/funds/${fundId.trim()}/assets`, data),\n updateFundBasicInfo: (fundId, param) => request.put(`/manager-link/funds/${fundId.trim()}`, param),\n updateFundUniverses: (fundId, data) =>\n request.put(`/manager-link/legacy-universe-list/funds/${fundId.trim()}`, data),\n createFundBasicInfo: (param) => request.post(`/manager-link/funds`, param),\n updateFundDistributions: (fundId, param) =>\n request.put(`/manager-link/funds/${fundId.trim()}/distributions`, param),\n updateFundIndices: (fundId, param) => request.put(`/manager-link/funds/${fundId}/hfr-indices`, param),\n\n createFundLeverage: (fundId, data) => request.post(`/manager-link/funds/${fundId.trim()}/leverages`, data),\n updateFundLeverage: (fundId, data) => request.put(`/manager-link/funds/${fundId.trim()}/leverages`, data),\n deleteFundLeverage: (fundId, date) =>\n request.delete(`/manager-link/funds/${fundId.trim()}/leverages`, {\n data: {\n work_date: date,\n },\n }),\n\n createFundInstrument: (fundId, data) => request.post(`/manager-link/funds/${fundId.trim()}/instruments`, data),\n updateFundInstrument: (fundId, data) => request.put(`/manager-link/funds/${fundId.trim()}/instruments`, data),\n deleteFundInstrument: (fundId, date, name) =>\n request.delete(`/manager-link/funds/${fundId.trim()}/instruments`, {\n data: {\n work_date: date,\n name,\n },\n }),\n\n createFundIndustry: (fundId, data) => request.post(`/manager-link/funds/${fundId.trim()}/industry-groups`, data),\n updateFundIndustry: (fundId, data) => request.put(`/manager-link/funds/${fundId.trim()}/industry-groups`, data),\n deleteFundIndustry: (fundId, date, name) =>\n request.delete(`/manager-link/funds/${fundId.trim()}/industry-groups`, {\n data: {\n work_date: date,\n name,\n },\n }),\n\n createFundInvestorType: (fundId, data) => request.post(`/manager-link/funds/${fundId.trim()}/investor-types`, data),\n updateFundInvestorType: (fundId, data) => request.put(`/manager-link/funds/${fundId.trim()}/investor-types`, data),\n deleteFundInvestorType: (fundId, date, name) =>\n request.delete(`/manager-link/funds/${fundId.trim()}/investor-types`, {\n data: {\n work_date: date,\n name,\n },\n }),\n\n createFundRegionWeight: (fundId, data) => request.post(`/manager-link/funds/${fundId.trim()}/region-weights`, data),\n updateFundRegionWeight: (fundId, data) => request.put(`/manager-link/funds/${fundId.trim()}/region-weights`, data),\n deleteFundRegionWeight: (fundId, date, name) =>\n request.delete(`/manager-link/funds/${fundId.trim()}/region-weights`, {\n data: {\n work_date: date,\n name,\n },\n }),\n //Due diligence Investor\n fetchDueDiligenceInvestor: (fundId) => request.get(`/manager-link/due-diligence/investor-opinion/${fundId.trim()}`),\n updateDueDiligenceInvestor: (fundId, params) =>\n request.put(`/manager-link/due-diligence/investor-opinion/${fundId.trim()}`, params),\n //Due Diligence Scorecard\n fetchDueDiligenceScoreCard: (fundId) => request.get(`/manager-link/due-diligence/scorecard/${fundId.trim()}`),\n resetDueDiligenceScoreCard: (fundId) => request.delete(`/manager-link/due-diligence/scorecard/${fundId.trim()}`),\n updateDueDiligenceScoreCard: (fundId, params) =>\n request.put(`/manager-link/due-diligence/scorecard/${fundId.trim()}`, params),\n //Due Diligence Monthly\n fetchDueDiligenceMonthly: (fundId) => request.get(`/manager-link/due-diligence/monthly/${fundId.trim()}`),\n updateDueDiligenceMonthly: (fundId, params) =>\n request.put(`/manager-link/due-diligence/monthly/${fundId.trim()}`, params),\n createDueDiligenceMonthly: (fundId, params) =>\n request.post(`/manager-link/due-diligence/monthly/${fundId.trim()}`, params),\n deleteDueDiligenceMonthly: (fundId, params) =>\n request.delete(`/manager-link/due-diligence/monthly/${fundId.trim()}`, { data: params }),\n //Due Diligence Documents\n fetchDueDiligenceDocuments: (firmId) => request.get(`/manager-link/firms/${firmId.trim()}/sharepoint_urls`),\n // Principals\n fetchFundPrincipals: (fundId) => request.get(`/manager-link/fund-principals/${fundId.trim()}`),\n updateFundPrincipals: (fundId, params) => request.put(`/manager-link/fund-principals/${fundId.trim()}`, params),\n createFundPrincipals: (fundId, params) => request.post(`/manager-link/fund-principals/${fundId.trim()}`, params),\n deleteFundPrincipals: (fundId, params) =>\n request.delete(`/manager-link/fund-principals/${fundId.trim()}`, { data: params }),\n //APGL\n fetchFundAPGL: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/apgl`),\n //Fund Properties\n fetchFundProperties: (fundId) => request.get(`/manager-link/fund-properties/${fundId.trim()}`),\n updateFundProperties: (fundId, params) => request.put(`/manager-link/fund-properties/${fundId}`, params),\n createFundProperties: (fundId, params) => request.post(`/manager-link/fund-properties/${fundId}`, params),\n deleteFundProperties: (fundId, prodId) =>\n request.delete(`/manager-link/fund-properties/${fundId}`, { data: { prop_id: prodId } }),\n //Fund Table Dropdown\n fetchFundTableDropdown: () => request.get(`/manager-link/table-dropdowns`),\n //Fund Status Activate\n updateFundStatusActivate: (fundId, params) => request.post(`/manager-link/funds/${fundId.trim()}/activate`, params),\n cloneFund: (fundId, fundName) =>\n request.post(`/manager-link/funds/${fundId.trim()}/clone`, {\n fund_name: fundName,\n }),\n //Electronic Platform\n fetchListPlatform: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/electronic-trading-platforms`),\n updateListPlatform: (fundId, platforms) =>\n request.put(`/manager-link/funds/${fundId.trim()}/electronic-trading-platforms`, { platforms: platforms }),\n previewDeleteFund: (fundId) => request.get(`/manager-link/funds/${fundId.trim()}/preview-delete`),\n deleteFund: (fundId) => request.delete(`/manager-link/funds/${fundId.trim()}`),\n // Fund ESG Strategies\n fetchESGStrategies: () => request.get('/manager-link/esg-strategies'),\n // Fund Index Eligibility Details\n fetchFundIndexEligibilityDetails: ({ fundId, indexFamilyId }) =>\n request.get(`/manager-link/funds/${fundId}/index-families/${indexFamilyId}/eligibility-details`),\n updateFundIndexEligibilityDetails: ({ fundId, indexFamilyId, body }) =>\n request.post(`/manager-link/funds/${fundId}/index-families/${indexFamilyId}/eligibility-details`, body),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { RORResponseType, UpdateRORType } from '../../components/DataSheet'\nimport { ExFundDetails } from '../models/ExFundDetails'\nimport {\n ChecklistLegalDoc,\n ChecklistMainType,\n ChecklistMainUpdate,\n CodeOfConductResponse,\n DueDiligenceMeetingCreate,\n DueDiligenceMeetingDelete,\n DueDiligenceMeetingResponse,\n DueDiligenceMeetingUpdate,\n DueDiligenceReceiveSepAct,\n DueDiligenceReceiveSepActUpdate,\n DueDiligenceSentSepAct,\n DueDiligenceSentSepActCreate,\n ExFirmDetails,\n FirmDetails,\n FirmDueDiligenceActivities,\n FirmDueDiligenceActivitiesUpdate,\n FirmDueDiligenceDetails,\n FirmDueDiligenceParams,\n FirmMoreField,\n LegalChecklistUpdate,\n MultiManagerPlatformType,\n MultiManagerPlatformUpdate,\n} from '../models/FirmDetails'\nimport { DueDiligenceContact, FundCCMCResponse } from '../models/FundDetails'\n\nexport interface FirmDetailService {\n fetchFirmInfo: (firmId: string) => AxiosPromise\n fetchFirmAssets: (firmId: string) => AxiosPromise\n fetchFirmAssetsHedgeFund: (firmId: string) => AxiosPromise\n fetchFirmCCMC: (firmId: string) => AxiosPromise<{ responses: FundCCMCResponse[] }>\n fetchFirmCMIC: (firmId: string) => AxiosPromise<{ responses: FundCCMCResponse[] }>\n fetchFundsOfFirm: (firmId: string) => AxiosPromise\n fetchAllFirms: () => AxiosPromise\n\n updateFirmInfo: (fundId: string, param: Partial) => AxiosPromise\n updateFirmAssets: (firmId: string, data: UpdateRORType) => AxiosPromise\n updateFirmAssetsHedgeFund: (firmId: string, data: UpdateRORType) => AxiosPromise\n updateFirmCCMC: (firmId: string, data: FundCCMCResponse[]) => AxiosPromise\n updateFirmCMIC: (firmId: string, data: FundCCMCResponse[]) => AxiosPromise\n\n createFirmInfo: (param: Partial) => AxiosPromise<{ firm_id: string; message: string }>\n getFileDueDiligence: (param: FirmDueDiligenceParams) => AxiosPromise\n\n //Due Diligence Activities\n getListDueDiligenceAct: (firmId: string) => AxiosPromise\n createDueDiligenceAct: (firmId: string, params: Partial) => AxiosPromise\n updateDueDiligenceAct: (firmId: string, params: Partial) => AxiosPromise\n //Due Diligence Sent Message\n getDueDiligenceSentMess: (firmId: string) => AxiosPromise\n createDueDiligenceSentMess: (firmId: string, params: DueDiligenceSentSepActCreate) => AxiosPromise\n deleteDueDiligenceSentMess: (firmId: string, params: { fund_id: string }) => AxiosPromise\n\n //Due Diligence Receive Message\n getDueDiligenceReceiveMess: (firmId: string) => AxiosPromise\n createDueDiligenceReceiveMess: (\n firmId: string,\n params: Partial,\n ) => AxiosPromise\n updateDueDiligenceReceiveMess: (\n firmId: string,\n params: Partial,\n ) => AxiosPromise\n deleteDueDiligenceReceiveMess: (\n firmId: string,\n params: Partial,\n ) => AxiosPromise\n // Checklist\n getChecklistMain: (firmId: string) => AxiosPromise\n getLegalChecklist: (firmId: string) => AxiosPromise\n getOldBackgroundChecklist: (firmId: string) => AxiosPromise\n updateChecklistMain: (firmId: string, params: { updates: ChecklistMainUpdate[] }) => AxiosPromise\n updateLegalChecklist: (firmId: string, params: { updates: LegalChecklistUpdate[] }) => AxiosPromise\n updateOldChecklist: (firmId: string, params: { updates: LegalChecklistUpdate[] }) => AxiosPromise\n //Due Diligence Contact\n fetchDueDiligenceContact: (firmId: string) => AxiosPromise\n updateDueDiligenceContact: (firmId: string, params: Partial) => AxiosPromise\n deleteDueDiligenceContact: (firmId: string, contactName: string) => AxiosPromise\n createDueDiligenceContact: (\n firmId: string,\n params: Partial,\n ) => AxiosPromise\n //Due Diligence Meeting\n fetchDueDiligenceMeeting: (firmId: string) => AxiosPromise\n updateDueDiligenceMeeting: (firmId: string, params: Partial) => AxiosPromise\n createDueDiligenceMeeting: (firmId: string, params: Partial) => AxiosPromise\n deleteDueDiligenceMeeting: (firmId: string, params: DueDiligenceMeetingDelete) => AxiosPromise\n //Code of Conduct\n fetchCodeOfConduct: (firmId: string) => AxiosPromise\n updateCodeOfConduct: (\n firmId: string,\n params: Partial,\n ) => AxiosPromise\n createCodeOfConduct: (firmId: string, params: Partial) => AxiosPromise\n deleteCodeOfConduct: (\n firmId: string,\n params: Partial,\n ) => AxiosPromise\n previewDeleteFirm: (firmId: string) => AxiosPromise<{ [key: string]: number }>\n deleteFirm: (firmId: string) => AxiosPromise\n fetchFirmUser: (firmId: string) => AxiosPromise\n // Multi Manager Platform\n fetchMultiManagerPlatform: (firmId: string) => AxiosPromise<{ funds: MultiManagerPlatformType[] }>\n updateMultiManagerPlatform: (\n firmId: string,\n params: MultiManagerPlatformUpdate,\n ) => AxiosPromise<{ funds: MultiManagerPlatformType[] }>\n}\n\nexport const FirmDetailService = (request: AxiosInstance): FirmDetailService => {\n return {\n fetchFirmInfo: (firmId) => request.get(`/manager-link/firms/${firmId.trim()}`),\n fetchFirmAssets: (firmId) => request.get(`manager-link/firms/${firmId.trim()}/assets`),\n fetchFirmAssetsHedgeFund: (firmId) => request.get(`manager-link/firms/${firmId.trim()}/assets-hf`),\n fetchFirmCCMC: (firmId) => request.get(`/manager-link/firms/${firmId}/executive-order-13959`),\n fetchFirmCMIC: (firmId) => request.get(`/manager-link/firms/${firmId}/executive-order-14032`),\n fetchFundsOfFirm: (firmId) => request.get(`manager-link/firms/${firmId.trim()}/funds`),\n fetchAllFirms: () => request.get(`/manager-link/firms`),\n\n updateFirmInfo: (firmId, param) => request.put(`/manager-link/firms/${firmId.trim()}`, param),\n updateFirmAssets: (firmId, param) => request.put(`/manager-link/firms/${firmId.trim()}/assets`, param),\n updateFirmAssetsHedgeFund: (firmId, param) => request.put(`/manager-link/firms/${firmId.trim()}/assets-hf`, param),\n updateFirmCCMC: (firmId, param) =>\n request.put(`/manager-link/firms/${firmId}/executive-order-13959`, {\n updates: param,\n }),\n updateFirmCMIC: (firmId, param) =>\n request.put(`/manager-link/firms/${firmId}/executive-order-14032`, {\n updates: param,\n }),\n\n createFirmInfo: (param) => request.post(`/manager-link/firms`, param),\n getFileDueDiligence: (param) => request.post(`/manager-link/due-diligence/list-files`, param),\n\n //Due Diligence Activities\n getListDueDiligenceAct: (firmId) => request.get(`/manager-link/due-diligence/activities/${firmId.trim()}`),\n createDueDiligenceAct: (firmId, params) =>\n request.post(`/manager-link/due-diligence/activities/${firmId.trim()}`, params),\n updateDueDiligenceAct: (firmId, params) =>\n request.put(`/manager-link/due-diligence/activities/${firmId.trim()}`, params),\n //Due Diligence Sent Message\n getDueDiligenceSentMess: (firmId) => request.get(`/manager-link/due-diligence/sent-messages/${firmId.trim()}`),\n createDueDiligenceSentMess: (firmId, params) =>\n request.post(`/manager-link/due-diligence/sent-messages/${firmId.trim()}`, params),\n deleteDueDiligenceSentMess: (firmId, params) =>\n request.delete(`/manager-link/due-diligence/sent-messages/${firmId.trim()}`, { data: params }),\n //Due Diligence Receive Message\n getDueDiligenceReceiveMess: (firmId: string) =>\n request.get(`/manager-link/due-diligence/received-messages/${firmId.trim()}`),\n createDueDiligenceReceiveMess: (firmId, params) =>\n request.post(`/manager-link/due-diligence/received-messages/${firmId.trim()}`, params),\n updateDueDiligenceReceiveMess: (firmId, params) =>\n request.put(`/manager-link/due-diligence/received-messages/${firmId.trim()}`, params),\n deleteDueDiligenceReceiveMess: (firmId, params) =>\n request.delete(`/manager-link/due-diligence/received-messages/${firmId.trim()}`, { data: params }),\n //Checklist\n getChecklistMain: (firmId) => request.get(`/manager-link/due-diligence/main-checklist/${firmId.trim()}`),\n getLegalChecklist: (firmId) => request.get(`/manager-link/due-diligence/legal-checklist/${firmId.trim()}`),\n getOldBackgroundChecklist: (firmId) =>\n request.get(`/manager-link/due-diligence/old-background-check-checklist/${firmId}`),\n updateChecklistMain: (firmId, params) =>\n request.put(`/manager-link/due-diligence/main-checklist/${firmId.trim()}`, params),\n updateLegalChecklist: (firmId, params) =>\n request.put(`/manager-link/due-diligence/legal-checklist/${firmId.trim()}`, params),\n updateOldChecklist: (firmId, params) =>\n request.put(`/manager-link/due-diligence/old-background-check-checklist/${firmId.trim()}`, params),\n //Due Diligence Contact\n fetchDueDiligenceContact: (firmId) => request.get(`/manager-link/due-diligence/contact/${firmId.trim()}`),\n updateDueDiligenceContact: (firmId, params) =>\n request.put(`/manager-link/due-diligence/contact/${firmId.trim()}`, params),\n deleteDueDiligenceContact: (firmId, contactName) =>\n request.delete(`/manager-link/due-diligence/contact/${firmId.trim()}`, { data: { contact_name: contactName } }),\n createDueDiligenceContact: (firmId, params) =>\n request.post(`/manager-link/due-diligence/contact/${firmId}`, params),\n //Due Diligence Meeting\n fetchDueDiligenceMeeting: (firmId) => request.get(`/manager-link/due-diligence/meeting/${firmId.trim()}`),\n createDueDiligenceMeeting: (firmId, params) =>\n request.post(`/manager-link/due-diligence/meeting/${firmId.trim()}`, params),\n updateDueDiligenceMeeting: (firmId, params) =>\n request.put(`/manager-link/due-diligence/meeting/${firmId.trim()}`, params),\n deleteDueDiligenceMeeting: (firmId, params) =>\n request.delete(`/manager-link/due-diligence/meeting/${firmId.trim()}`, { data: params }),\n //Code Of Conduct\n fetchCodeOfConduct: (firmId) => request.get(`/manager-link/firms/${firmId}/code-of-conducts`),\n updateCodeOfConduct: (firmId, params) =>\n request.put(`/manager-link/firms/${firmId.trim()}/code-of-conducts`, params),\n createCodeOfConduct: (firmId, params) =>\n request.post(`/manager-link/firms/${firmId.trim()}/code-of-conducts`, params),\n deleteCodeOfConduct: (firmId, params) =>\n request.delete(`/manager-link/firms/${firmId}/code-of-conducts`, { data: params }),\n previewDeleteFirm: (firmId) => request.get(`/manager-link/firms/${firmId.trim()}/preview-delete`),\n deleteFirm: (firmId) => request.delete(`/manager-link/firms/${firmId.trim()}`),\n fetchFirmUser: (firmId) => request.get(`/manager-link/firms/${firmId.trim()}/users`),\n // Multi Manager Platform\n fetchMultiManagerPlatform: (firmId) => request.get(`/manager-link/firms/${firmId}/multi-manager-platform`),\n updateMultiManagerPlatform: (firmId, params) =>\n request.patch(`/manager-link/firms/${firmId}/multi-manager-platform`, params),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { BenchmarkType, FundBenchmarkResponse } from '../models/Benchmark'\n\nexport interface BenchmarkService {\n getAllBenchmark: () => AxiosPromise\n createBenchmark: (param: Partial) => AxiosPromise\n updateBenchmark: (fundId: string, param: Partial) => AxiosPromise\n deleteBenchmark: (fundId: string) => AxiosPromise\n getBenchmark: (fundId: string) => AxiosPromise\n getFundBenchmark: (fundId: string) => AxiosPromise\n}\nexport const BenchmarkService = (request: AxiosInstance): BenchmarkService => {\n return {\n getAllBenchmark: () => request.get(`/manager-link/benchmark-manager`),\n createBenchmark: (param) => request.post(`/manager-link/benchmark-manager`, param),\n updateBenchmark: (fundId, param) => request.put(`/manager-link/benchmark-manager/${fundId.trim()}`, param),\n deleteBenchmark: (fundId) => request.delete(`/manager-link/benchmark-manager/${fundId.trim()}`),\n getBenchmark: (fundId) => request.get(`/manager-link/benchmark-manager/${fundId.trim()}`),\n getFundBenchmark: (fundId) => request.get(`/manager-link/benchmarks/${fundId.trim()}/funds`),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport {\n ActivityLogDetail,\n ActivityLogParams,\n ActivityLogResponse,\n LegacyLogParams,\n LegacyLogResponse,\n ListUserActivities,\n} from '../models/ActivityLog'\n\nexport interface ActivityLogService {\n fetchDataEvent: (params: Partial) => AxiosPromise\n fetchEventDetail: (eventId: string) => AxiosPromise\n fetchListUser: () => AxiosPromise\n fetchListUserByText: ({ text }: { text: string }) => AxiosPromise<{ username: string }[]>\n fetchListCode: () => AxiosPromise\n fetchLegacyLog: (params: Partial) => AxiosPromise\n}\nexport const ActivityLogService = (request: AxiosInstance): ActivityLogService => {\n return {\n fetchDataEvent: (params) => request.post('/manager-link/events', params),\n fetchEventDetail: (eventId) => request.get(`/manager-link/events/${eventId.trim()}`),\n fetchListUser: () => request.get(`/manager-link/users`),\n fetchListCode: () => request.get(`/manager-link/event-codes`),\n fetchLegacyLog: (params) => request.post(`/manager-link/log-activities`, params),\n fetchListUserByText: ({ text }) => request.get(`/manager-link/users/search`, { params: { query: text, page: 1 } }),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { AnalysisStats, AnalysisType, FundListType, VAMIResponse } from '../models/Analysis'\n\nexport type HistoricalSourceType = 'peer_group'\nexport type HistoricalType = 'aum' | 'ror'\nexport type HistoricalPeriodType = 'monthly' | 'yearly'\n\nexport type HistoricalDataParams = {\n sourceType: HistoricalSourceType\n dataType: HistoricalType\n period: HistoricalPeriodType\n entityId: number\n}\n\nexport interface AnalysisService {\n getAllGroups: () => AxiosPromise\n getOwnerGroups: () => AxiosPromise\n getDetailsGroup: (groupCode: number) => AxiosPromise\n createGroup: (\n name: string,\n parentGroupCode: number,\n cloneCode?: number,\n ) => AxiosPromise<{ group_code: number; message: string }>\n updateGroup: ({\n groupCode,\n fundIds,\n parentGroupCode,\n deletedFundIds,\n user,\n }: {\n groupCode: number\n fundIds?: string[]\n parentGroupCode?: number\n deletedFundIds?: string[]\n user?: string\n }) => AxiosPromise\n deleteGroup: (groupCode: number) => AxiosPromise\n fetchGroupStats: (groupCode: number) => AxiosPromise\n peerGroupVAMI: ({\n groupCode,\n b1,\n b2,\n b3,\n }: {\n groupCode: number\n b1: string\n b2: string\n b3: string\n }) => AxiosPromise\n exportHistoricalData: (params: HistoricalDataParams) => AxiosPromise\n}\nexport const AnalysisService = (request: AxiosInstance): AnalysisService => {\n return {\n getAllGroups: () => request.get(`/manager-link/groups`),\n getOwnerGroups: () => request.get(`/manager-link/groups?owned_by_user=true`),\n getDetailsGroup: (groupCode) => request.get(`/manager-link/groups/${groupCode}`),\n createGroup: (name, parentGroupCode, cloneCode) =>\n request.post(`/manager-link/groups`, {\n name,\n parent_group_code: parentGroupCode,\n clone_code: cloneCode,\n }),\n updateGroup: ({ groupCode, fundIds, parentGroupCode, deletedFundIds, user }) =>\n request.put(`/manager-link/groups/${groupCode}`, {\n fund_ids: fundIds,\n parent_group_code: parentGroupCode,\n delete_fund_ids: deletedFundIds,\n username: user,\n }),\n deleteGroup: (groupCode) => request.delete(`/manager-link/groups/${groupCode}`),\n fetchGroupStats: (groupCode) =>\n request.get(`/manager-link/groups/${groupCode}/stats\n `),\n peerGroupVAMI: ({ groupCode, b1, b2, b3 }) =>\n request.post(`/manager-link/groups/${groupCode}/vami`, {\n benchmark1: b1,\n benchmark2: b2,\n benchmark3: b3,\n }),\n exportHistoricalData: (params) =>\n request.post(\n '/historical-data/export',\n {\n source_type: params.sourceType,\n data_type: params.dataType,\n period: params.period,\n entity_id: params.entityId,\n },\n {\n responseType: 'blob',\n },\n ),\n }\n}\n","import { AxiosPromise, AxiosInstance } from 'axios'\n\nexport interface UserService {\n fetchInternalUsers: () => AxiosPromise<{ internal_users: string[] }>\n}\n\nexport const UserService = (request: AxiosInstance): UserService => {\n return {\n fetchInternalUsers: () => request.get(`/manager-link/users`),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { IndexManagerDetailType, IndexManagerDetailUpdate, IndexManagerType } from '../models/IndexManager'\n\nexport interface IndexManagerService {\n getAllIndexManager: () => AxiosPromise\n createIndexManager: (name: string, description: string, index_eligibility?: boolean) => AxiosPromise\n updateIndexManager: (\n indexId: number,\n name: string,\n description: string,\n index_eligibility?: boolean,\n ) => AxiosPromise\n deleteIndexManager: (indexId: number) => AxiosPromise\n getIndexManagerDetail: (indexId: number) => AxiosPromise\n updateIndexManagerDetail: (indexId: number, params: Partial) => AxiosPromise\n}\nexport const IndexManagerService = (request: AxiosInstance): IndexManagerService => {\n return {\n getAllIndexManager: () => request.get(`/manager-link/hfr-indices`),\n createIndexManager: (name, description, index_eligibility) =>\n request.post(`/manager-link/hfr-indices`, { name, description, index_eligibility }),\n updateIndexManager: (indexId, name, description, index_eligibility) =>\n request.put(`/manager-link/hfr-indices/${indexId}`, { name, description, index_eligibility }),\n deleteIndexManager: (indexId) => request.delete(`/manager-link/hfr-indices/${indexId}`),\n getIndexManagerDetail: (indexId) => request.get(`/manager-link/hfr-indices/${indexId}`),\n updateIndexManagerDetail: (indexId, params) => request.put(`/manager-link/hfr-indices/${indexId}`, params),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { CodeOfConductType } from '../models/CodeOfConduct'\n\nexport interface CodeOfConductService {\n getCodeOfConduct: () => AxiosPromise\n updateCodeOfConduct: (firmId: string, version: string, agreed?: boolean) => AxiosPromise\n}\nexport const CodeOfConductService = (request: AxiosInstance): CodeOfConductService => {\n return {\n getCodeOfConduct: () => request.get(`/manager-link/code-of-conduct`),\n updateCodeOfConduct: (firmId, version, agreed = true) =>\n request.post(`/manager-link/code-of-conduct`, { firm_id: firmId, version, agreed }),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport moment from 'moment'\nimport { PeerGroupFundBenchmarkResponse, PeerGroupUniverseStatsResponse } from '../models/ResponsesTypes'\n\nexport interface FetchPeerGroupPdfParams {\n benchmark1: string\n benchmark2: string\n benchmark3: string\n end_date: string\n universe_list_id: number[]\n fund_list_id: number[]\n portfolio_model_id: number[]\n static_index_ids: number[]\n dynamic_index_ids: number[]\n strategy?: number[]\n sub_strategy?: number[]\n regional_focus?: number[]\n in_HFRI?: boolean\n in_emerging_markets?: boolean\n}\n\nexport interface PeerGroupAnalysisService {\n fetchUniverseStats: ({\n fundId,\n universeListId,\n fundListId,\n portfolioModelId,\n endDate,\n staticIndexIds,\n dynamicIndexIds,\n strategy,\n subStrategy,\n regionalFocus,\n inHFRI,\n inEmergingMarkets,\n }: {\n fundId: string\n universeListId?: string[]\n fundListId?: string[]\n portfolioModelId?: string[]\n endDate: string\n staticIndexIds: string[]\n dynamicIndexIds: string[]\n strategy: string[]\n subStrategy: string[]\n regionalFocus: string[]\n inHFRI: boolean\n inEmergingMarkets: boolean\n }) => AxiosPromise\n fetchFundAndBenchmark: ({\n fundId,\n benchmark1,\n benchmark2,\n benchmark3,\n endDate,\n }: {\n fundId: string\n benchmark1: string\n benchmark2: string\n benchmark3: string\n endDate: string | moment.Moment\n }) => AxiosPromise\n fetchPeerGroupPdfReport: (fundId: string, data: FetchPeerGroupPdfParams) => AxiosPromise\n}\n\nexport const PeerGroupAnalysisService = (request: AxiosInstance): PeerGroupAnalysisService => {\n return {\n fetchUniverseStats: ({\n fundId,\n universeListId,\n fundListId,\n portfolioModelId,\n endDate,\n staticIndexIds,\n dynamicIndexIds,\n strategy,\n subStrategy,\n regionalFocus,\n inHFRI,\n inEmergingMarkets,\n }) =>\n request.get(`/funds-api/fund/${parseInt(fundId)}/peer-group-analysis/universe-stats`, {\n params: {\n manager_link: true,\n universe_list_id: universeListId,\n fund_list_id: fundListId,\n portfolio_model_id: portfolioModelId,\n end_date: endDate,\n static_index_ids: staticIndexIds,\n dynamic_index_ids: dynamicIndexIds,\n strategy,\n sub_strategy: subStrategy,\n regional_focus: regionalFocus,\n in_HFRI: inHFRI === undefined ? undefined : String(inHFRI),\n in_emerging_markets: inEmergingMarkets === undefined ? undefined : String(inHFRI),\n },\n }),\n fetchFundAndBenchmark: ({ fundId, benchmark1, benchmark2, benchmark3, endDate }) =>\n request.get(`/funds-api/fund/${parseInt(fundId)}/peer-group-analysis/fund-and-benchmark`, {\n params: {\n manager_link: true,\n benchmark1,\n benchmark2,\n benchmark3,\n end_date: endDate,\n },\n }),\n fetchPeerGroupPdfReport: (fundId, data: FetchPeerGroupPdfParams) =>\n request.post(\n `/funds-api/fund/${fundId}/peer-group-analysis/pdf`,\n { ...data, manager_link: true },\n {\n responseType: 'blob',\n },\n ),\n }\n}\n","import { AxiosPromise, AxiosInstance } from 'axios'\nimport moment from 'moment'\nimport {\n UserFundRecord,\n UserFundDetails,\n UserFundCreateRequest,\n UserFundUpdateRequest,\n PeerGroupUniverseStatsResponse,\n PeerGroupFundBenchmarkResponse,\n} from '../models/ResponsesTypes'\nimport { sanatizeToSnakeCase } from '../../strings'\n\nexport type FetchUserFundPeerGroupPdfParams = {\n benchmark1: string\n benchmark2: string\n benchmark3: string\n end_date: string\n universe_list_ids: number[]\n fund_list_ids: number[]\n portfolio_model_ids: number[]\n static_index_ids: number[]\n dynamic_index_ids: number[]\n strategy?: number[]\n sub_strategy?: number[]\n regional_focus?: number[]\n in_HFRI?: boolean\n in_emerging_markets?: boolean\n}\n\nexport interface UserFundService {\n fetchAllUserFunds: () => AxiosPromise\n fetchUserFundDetails: (id: string) => AxiosPromise\n createNewUserFund: (data: UserFundCreateRequest) => AxiosPromise\n updateUserFund: (id: string, data: UserFundUpdateRequest) => AxiosPromise\n deleteUserFund: (id: number) => AxiosPromise\n shareUserFund: (id: number, shareTo: number[], isShareAll: boolean) => AxiosPromise\n fetchUniverseStats: ({\n fundId,\n universeListId,\n fundListId,\n portfolioModelId,\n endDate,\n staticIndexIds,\n dynamicIndexIds,\n strategy,\n subStrategy,\n regionalFocus,\n inHFRI,\n inEmergingMarkets,\n }: {\n fundId: string\n universeListId?: string[]\n fundListId?: string[]\n portfolioModelId?: string[]\n endDate: string\n staticIndexIds: string[]\n dynamicIndexIds: string[]\n strategy: string[]\n subStrategy: string[]\n regionalFocus: string[]\n inHFRI: boolean\n inEmergingMarkets: boolean\n }) => AxiosPromise\n fetchFundAndBenchmark: ({\n fundId,\n benchmark1,\n benchmark2,\n benchmark3,\n endDate,\n }: {\n fundId: string\n benchmark1: string\n benchmark2: string\n benchmark3: string\n endDate: string | moment.Moment\n }) => AxiosPromise\n fetchFundPdfReport: ({\n fundId,\n data,\n }: {\n fundId: string\n data: FetchUserFundPeerGroupPdfParams\n }) => AxiosPromise\n}\n\nexport const UserFundService = (request: AxiosInstance): UserFundService => {\n return {\n fetchAllUserFunds: () => request.get('/user-fund'),\n fetchUserFundDetails: (id) => request.get(`/user-fund/${id}`),\n createNewUserFund: (data) => request.post('/user-fund', sanatizeToSnakeCase(data)),\n updateUserFund: (id, data) => request.put(`/user-fund/${id}`, sanatizeToSnakeCase(data)),\n deleteUserFund: (id) => request.delete(`/user-fund/${id}`),\n shareUserFund: (id, shareTo, isShareAll) =>\n request.post(`/user-fund/${id}/share`, {\n user_ids: shareTo,\n all: isShareAll,\n }),\n fetchUniverseStats: ({\n fundId,\n universeListId,\n portfolioModelId,\n fundListId,\n endDate,\n staticIndexIds,\n dynamicIndexIds,\n strategy,\n subStrategy,\n regionalFocus,\n inHFRI,\n inEmergingMarkets,\n }) => {\n return request.post(`/user-fund/${parseInt(fundId)}/peer-group-analysis/universe-stats`, {\n universe_list_ids: universeListId,\n fund_list_ids: fundListId,\n portfolio_model_ids: portfolioModelId,\n end_date: endDate,\n static_index_ids: staticIndexIds,\n dynamic_index_ids: dynamicIndexIds,\n strategy,\n sub_strategy: subStrategy,\n regional_focus: regionalFocus,\n in_HFRI: inHFRI,\n in_emerging_markets: inEmergingMarkets,\n })\n },\n fetchFundAndBenchmark: ({ fundId, benchmark1, benchmark2, benchmark3, endDate }) =>\n request.post(`/user-fund/${parseInt(fundId)}/peer-group-analysis/fund-and-benchmark`, {\n benchmark1,\n benchmark2,\n benchmark3,\n end_date: endDate,\n }),\n fetchFundPdfReport: ({ fundId, data }: { fundId: string; data: FetchUserFundPeerGroupPdfParams }) =>\n request.post(`/user-fund/${fundId}/peer-group-analysis/pdf`, data, {\n responseType: 'blob',\n }),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { UniverseDetailsType, UniverseManagerCreateType, UniverseManagerList } from '../models/UniverseManager'\n\nexport interface UniverseManagerService {\n getUniverseManagerList: () => AxiosPromise\n createUniverseManager: (params: Partial) => AxiosPromise\n updateUniverseManager: (universeId: number, params: Partial) => AxiosPromise\n deleteUniverseManager: (universeId: number) => AxiosPromise\n getUniverseManagerDetail: (universeId: number) => AxiosPromise\n}\nexport const UniverseManagerService = (request: AxiosInstance): UniverseManagerService => {\n return {\n getUniverseManagerList: () => request.get(`/manager-link/legacy-universe-list`),\n createUniverseManager: (params) => request.post(`/manager-link/legacy-universe-list`, params),\n updateUniverseManager: (universeId, params) =>\n request.put(`/manager-link/legacy-universe-list/${universeId}`, params),\n deleteUniverseManager: (universeId) => request.delete(`/manager-link/legacy-universe-list/${universeId}`),\n getUniverseManagerDetail: (universeId) => request.get(`/manager-link/legacy-universe-list/${universeId}`),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\nimport { CodeTableType } from '../models/CodeTable'\n\nexport interface CodeTableService {\n getCodeTableList: () => AxiosPromise\n createCodeTable: (params: CodeTableType) => AxiosPromise\n updateCodeTable: (params: CodeTableType) => AxiosPromise\n deleteCodeTable: (params: Partial) => AxiosPromise\n}\nexport const CodeTableService = (request: AxiosInstance): CodeTableService => {\n return {\n getCodeTableList: () => request.get(`/manager-link/code-table`),\n createCodeTable: (params) => request.post(`/manager-link/code-table`, params),\n updateCodeTable: (params) => request.put(`/manager-link/code-table`, params),\n deleteCodeTable: (params) => request.delete(`/manager-link/code-table`, { data: params }),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\n\nexport interface AdminService {\n openAdmin: () => AxiosPromise\n}\n\nexport const AdminService = (request: AxiosInstance): AdminService => ({\n openAdmin: () =>\n request.get('/manager-link/admin').then((res) => {\n window.location = res.request.responseURL\n return res\n }),\n})\n","import { AxiosInstance, AxiosPromise } from 'axios'\n\nexport interface ArticlesResponse {\n id: number\n name: string\n created_date: string\n}\n\nexport interface ArticleDetailResponse {\n id: number\n name: string\n content: string\n created_date: string\n}\n\nexport interface ContentService {\n fetchArticles: () => AxiosPromise\n fetchArticleDetail: (articleId: number) => AxiosPromise\n}\n\nexport const ContentService = (request: AxiosInstance): ContentService => {\n return {\n fetchArticles: () => request.get('/manager-link/article'),\n fetchArticleDetail: (articleId) => request.get(`/manager-link/article/${articleId}`),\n }\n}\n","import { AxiosInstance, AxiosPromise } from 'axios'\n\nexport type MinorityType = {\n id: string\n minority_type: string\n minority_description: string\n order: number\n}\n\ntype MinorityStatusType = {\n firm_id: string\n minority_type: number\n status: boolean\n}\n\nexport type MinorityStatusUpdate = {\n updates: { minority_type: number; status: boolean | null }[]\n}\n\nexport interface MinorityService {\n fetchMinorityTypes: (countryCode: string) => AxiosPromise\n fetchFundMinorityStatuses: (fundId: string) => AxiosPromise<{ fund_minority_statuses: MinorityStatusType[] }>\n fetchFirmMinorityStatuses: (firmId: string) => AxiosPromise<{ firm_minority_statuses: MinorityStatusType[] }>\n updateFundMinorityStatuses: (fundId: string, param: MinorityStatusUpdate) => AxiosPromise\n updateFirmMinorityStatuses: (firmId: string, param: MinorityStatusUpdate) => AxiosPromise\n}\n\nexport const MinorityService = (request: AxiosInstance): MinorityService => {\n return {\n fetchMinorityTypes: (countryCode) => request.get(`/manager-link/countries/${countryCode}/minority-types`),\n fetchFundMinorityStatuses: (fundId) => request.get(`/manager-link/funds/${fundId}/minority-statuses`),\n fetchFirmMinorityStatuses: (firmId) => request.get(`/manager-link/firms/${firmId}/minority-statuses`),\n updateFundMinorityStatuses: (fundId, param) =>\n request.post(`/manager-link/funds/${fundId}/minority-statuses`, param),\n updateFirmMinorityStatuses: (firmId, param) =>\n request.post(`/manager-link/firms/${firmId}/minority-statuses`, param),\n }\n}\n","import { Spin } from 'antd'\nimport React from 'react'\ntype Props = {\n name: string\n}\nexport const LoadingDetails: React.FC = ({ name }) => {\n return (\n \n \n \n )\n}\n","import { Button, Result, Spin } from 'antd'\nimport 'antd/dist/antd.css'\nimport React, { useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport { useHistory } from 'react-router-dom'\nimport { RootState } from '../../app/rootReducer'\nimport APIService from '../../shared/api'\nimport { LoadingDetails } from '../../shared/components/LoadingDetails'\n\nexport const Admin: React.FC = () => {\n const history = useHistory()\n const [isLoading, setIsLoading] = useState(true)\n const { user } = useSelector((state: RootState) => state.user)\n\n React.useEffect(() => {\n const showAdmin = async () => {\n try {\n setIsLoading(true)\n await APIService.adminService.openAdmin()\n } finally {\n setIsLoading(false)\n }\n }\n if (user?.is_staff) {\n showAdmin()\n }\n }, [user])\n\n if (isLoading) {\n return \n }\n\n if (!user?.is_staff) {\n return (\n history.push('/')} type=\"primary\">\n Back Home\n \n }\n />\n )\n }\n return \n}\n","import { AxiosPromise } from 'axios'\nimport * as React from 'react'\n\ntype InvokeType = Args extends undefined ? () => void : (params?: Args) => void\n\ntype ServiceState = {\n invoke: InvokeType\n data?: T\n error: string\n loading: boolean\n}\n\ntype FuncType = Args extends undefined ? () => AxiosPromise : (params: Args) => AxiosPromise\n\nexport const useServiceState = (serviceFunction: FuncType): ServiceState => {\n const [loading, setLoading] = React.useState(false)\n const [error, setError] = React.useState('')\n const [data, setData] = React.useState()\n\n const invoke = React.useCallback>(\n // @ts-ignore\n (params: Args) => {\n const f = async (params: Args) => {\n setLoading(true)\n let result\n try {\n result = await serviceFunction(params)\n setData(result.data)\n } catch (e) {\n setError(e)\n } finally {\n setLoading(false)\n }\n }\n f(params)\n },\n [serviceFunction],\n )\n\n return { invoke, data, error, loading }\n}\n","import React from 'react'\nimport APIService from '..'\nimport { useServiceState } from '../../hooks/useServiceState'\nimport { AnalysisType } from '../models/Analysis'\n\nexport type AnalysisGroupListType = {\n data: AnalysisType[] | undefined\n loading: boolean\n refetchGroup: () => void\n addedRowTree?: number[]\n setAddedRow: (addedRow?: number) => void\n}\n\nexport const AnalysisGroupListContext = React.createContext({\n data: undefined,\n loading: true,\n refetchGroup: () => undefined,\n setAddedRow: () => undefined,\n})\n\nexport const AnalysisGroupListProvider: React.FC = ({ children }) => {\n const { invoke: getAllGroup, data, loading } = useServiceState(APIService.analysisService.getAllGroups)\n const [addedRow, setAddedRow] = React.useState()\n\n const addedRowTree = React.useMemo(() => {\n if (!data || !data.length || !addedRow) {\n return\n }\n let parentId = data.find((item) => item.group_code === addedRow)?.parent_group_code\n const results = [addedRow]\n while (parentId && parentId !== -1) {\n results.push(parentId)\n parentId = data.find((item) => item.group_code === parentId)?.parent_group_code\n }\n return results\n }, [addedRow, data])\n\n const refetchGroup = () => {\n getAllGroup()\n }\n\n React.useEffect(() => {\n getAllGroup()\n }, [getAllGroup])\n\n const value = {\n data,\n loading,\n refetchGroup,\n addedRowTree,\n setAddedRow,\n }\n\n return {children}\n}\n","import React, { Dispatch, SetStateAction } from 'react'\nimport APIService from '..'\nimport { useServiceState } from '../../hooks/useServiceState'\nimport { ExFirmDetails, MultiManagerPlatformType } from '../models/FirmDetails'\nimport { FundBenchmark, FundDropdownCodeType, FundDropdownType } from '../models/FundDetails'\nimport { MinorityType } from '../services/minority.service'\n\nexport type MMPFirmType = {\n id: string\n name: string\n funds: MultiManagerPlatformType[]\n}\n\nexport type FundDetailDropdownContextType = {\n fundDataDropdown?: FundDropdownType\n loading?: boolean\n dataFirms?: ExFirmDetails[]\n dataBenchmark?: FundBenchmark[]\n refetchFirm: () => void\n setFirmIdChoose: Dispatch>\n firmIdChoose?: string\n dataMinoritySearch?: MinorityType[]\n}\n\nconst defaultValue: FundDetailDropdownContextType = {\n fundDataDropdown: undefined,\n loading: true,\n dataFirms: undefined,\n firmIdChoose: undefined,\n dataBenchmark: undefined,\n refetchFirm: () => undefined,\n setFirmIdChoose: () => undefined,\n dataMinoritySearch: undefined,\n}\nexport const FundDetailDropdownContext = React.createContext(defaultValue)\ntype Props = {\n isExternal?: boolean\n}\nexport const FundDetailDropdownProvider: React.FC = ({ isExternal, children }) => {\n const [firmIdChoose, setFirmIdChoose] = React.useState(undefined)\n //\n const { invoke: getDataDropdown, data: fundDataDropdown, loading } = useServiceState(\n APIService.fundDetailService.fetchDataDropdown,\n )\n const { invoke: getMinoritySearch, data: dataMinoritySearch } = useServiceState(\n APIService.fundService.fetchFundSearchMinorityType,\n )\n const { invoke: getAllFirms, data: dataFirms } = useServiceState(APIService.firmDetailService.fetchAllFirms)\n\n const { invoke: getAllBenchmark, data: dataBenchmark } = useServiceState(\n APIService.fundDetailService.fetchFundBenchmark,\n )\n //\n const refetchFirm = () => {\n getAllFirms()\n }\n\n //\n React.useEffect(() => {\n getMinoritySearch()\n }, [getMinoritySearch])\n\n React.useEffect(() => {\n if (!dataFirms) {\n return\n }\n setFirmIdChoose(dataFirms[0].firm_id)\n }, [dataFirms])\n\n React.useEffect(() => {\n getAllFirms()\n }, [getAllFirms])\n\n React.useEffect(() => {\n if (isExternal) {\n return\n }\n getAllBenchmark()\n }, [getAllBenchmark, isExternal])\n\n React.useEffect(() => {\n getDataDropdown()\n }, [getDataDropdown])\n\n const [moreFundDataDropdown, setMoreFundDataDropdown] = React.useState()\n React.useEffect(() => {\n if (!fundDataDropdown) {\n setMoreFundDataDropdown(undefined)\n return\n }\n const newVal = { ...fundDataDropdown }\n newVal['multi_manager_platform_reviewed_by'] = fundDataDropdown['idx__9__accepting_new_investments_confirmed_by']\n // copy users filter options\n setMoreFundDataDropdown(newVal)\n }, [fundDataDropdown])\n\n const value = {\n fundDataDropdown: moreFundDataDropdown,\n loading,\n dataFirms,\n dataBenchmark,\n refetchFirm,\n firmIdChoose,\n setFirmIdChoose,\n dataMinoritySearch,\n }\n return {children}\n}\n","export const Colors = {\n primary: '#1890ff',\n secondary: '#91d5ff',\n danger: '#f5222d',\n text: '#262626',\n\n gray: '#bfbfbf',\n border: '#e8e8e8',\n white: '#FFF',\n black: '#000',\n success: '#73d13d',\n}\n","import { Button } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\ntype Props = {\n showModal: boolean\n onRequestClose: () => void\n}\nexport const ContactUsModal: React.FC = ({ showModal, onRequestClose }) => {\n return (\n \n Close\n \n }\n >\n
\n

Contact Us

\n
\n If you are having problems with ManagerLink or are unsure about any functionality please contact HFR at\n 312-658-0955 or via email performance@hfr.com.\n
\n
\n
\n We would be happy to walk you through any issue you may have over the phone.\n
\n
\n
\n We hope to make ManagerLink as user-friendly as possible. Your questions and feedback are very much\n appreciated.\n
\n
\n \n )\n}\n","import React from 'react'\nimport {\n BulbOutlined,\n KeyOutlined,\n LinkedinOutlined,\n LogoutOutlined,\n TwitterOutlined,\n UserOutlined,\n YoutubeOutlined,\n} from '@ant-design/icons'\nimport { Button, Checkbox, Layout, Menu, Modal, Spin } from 'antd'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Link, useHistory, useRouteMatch } from 'react-router-dom'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport logo from '../../assets/img/hfr-logo.png'\nimport { logout } from '../../slice/authSlice'\nimport { toggleShowPrompt } from '../../slice/appSettingsSlice'\nimport APIService from '../api'\nimport { Colors } from '../colors'\nimport { useServiceState } from '../hooks/useServiceState'\nimport { ContactUsModal } from './ContactUsModal'\nimport { UserProfileDetails } from '../api/models/ResponsesTypes'\n\nconst { Header, Content, Footer } = Layout\n\nconst StyledHeader = styled(Header)`\n padding: 0;\n display: flex;\n justify-content: space-between;\n`\nconst StyledFooter = styled(Footer)`\n background: #001529;\n height: 64px;\n padding: 0 50px;\n display: flex;\n justify-content: space-between;\n color: ${Colors.white};\n`\n\nconst StyledContent = styled(Content)`\n padding: 16px 24px;\n flex: 1;\n display: flex;\n`\n\nconst LogoContainer = styled(Link)`\n float: left;\n`\n\nconst ImgLogo = styled.img`\n margin: 6px 10px;\n height: 36px;\n width: auto;\n`\n\ntype Props = {}\n\nexport interface StateProps {\n user: UserProfileDetails\n showPrompt: boolean\n}\n\ninterface DispatchProps {\n toggleShowPrompt: (showPrompt: boolean) => void\n}\n\nconst MainLayout: React.FC = ({ children }) => {\n const history = useHistory()\n const location = useRouteMatch()\n const { isLoading } = useSelector((state: RootState) => state.auth)\n const dispatch = useDispatch()\n\n const [showModal, setShowModal] = React.useState(false)\n const { data: disclaimerData, invoke: invokeDisclaimerData } = useServiceState(\n APIService.commonService.fetchDisclaimerPrompt,\n )\n\n const { invoke: approveDisclaimerPrompt, loading } = useServiceState(APIService.commonService.approveDisclaimerPrompt)\n const [dontShowAgain, setDontShowAgain] = React.useState(false)\n\n const { user } = useSelector((state: RootState) => state.user)\n const { showPrompt } = useSelector((state: RootState) => state.appSettings)\n\n React.useEffect(() => {\n invokeDisclaimerData()\n }, [invokeDisclaimerData])\n\n const handleSubmitPrompt = () => {\n if (dontShowAgain) {\n approveDisclaimerPrompt()\n }\n dispatch(toggleShowPrompt(false))\n }\n\n return (\n \n \n \n \n \n \n history.push('/')}>\n Dashboard\n \n history.push('/manager-list')}>\n Manager List\n \n history.push('/analysis')}>\n Analysis\n \n history.push('/help-and-faqs')}>\n \n Help And FAQs\n \n \n history.push('/system/code-table')}>\n Code Table\n \n \n \n Code List\n \n \n \n \n Strategy & Sub-Strategy\n \n \n\n history.push('/system/benchmarks')}>\n Benchmark\n \n history.push('/system/activity-log')}>\n Activity Log\n \n history.push('/system/index-manager')}>\n Index Manager\n \n history.push('/system/universe-manager')}>\n Universe Manager\n \n history.push('/system/search-query')}>\n Search Query Manager\n \n \n \n \n Asset\n \n \n \n \n NAV\n \n \n \n \n ROR\n \n \n \n \n HFRX Constituents\n \n \n \n \n \n ) : (\n <>\n {user?.first_name} {user?.last_name}\n \n )\n }\n >\n {/* history.push('/user/profile')}>\n \n Your Profile\n */}\n\n \n \n \n Open Admin Panel\n \n \n\n history.push('/user/change-password')}>\n \n Change Password\n \n dispatch(logout())}>\n \n Logout\n \n \n \n \n {children}\n \n

© 2025 HFR

\n
\n
setShowModal(true)} style={{ cursor: 'pointer' }}>\n Contact Us\n
\n \n Privacy Policy\n \n \n \n \n \n \n \n \n \n \n
\n
\n setShowModal(false)} />\n {disclaimerData && (\n dispatch(toggleShowPrompt(false))}\n footer={\n <>\n setDontShowAgain(e.target.checked)}>\n Don't show this again\n \n \n \n }\n >\n \n \n )}\n
\n )\n}\n\nexport default MainLayout\n","import { SearchOutlined } from '@ant-design/icons'\nimport { Button, Input, Space, Table } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React, { useMemo } from 'react'\nimport styled, { keyframes } from 'styled-components'\nimport { AnalysisGroupListContext } from '../../shared/api/context/AnalysisGroupListContext'\nimport { AnalysisType } from '../../shared/api/models/Analysis'\nimport { Resizable, ResizeCallbackData } from 'react-resizable'\n\nconst highLightAnim = keyframes`\n 0% {\n background: transparent;\n }\n 50% {\n background: #e6f7ff;\n }\n 100% {\n background: transparent;\n }\n`\n\nconst Wrapper = styled('div')`\n width: 100%;\n .highlight {\n animation: ${highLightAnim} 3s linear 0s 1;\n }\n .react-resizable {\n position: relative;\n background-clip: padding-box;\n user-select: none;\n }\n .react-resizable-handle {\n position: absolute;\n right: -2px;\n bottom: 0;\n z-index: 1;\n width: 4px;\n height: 100%;\n cursor: col-resize;\n background: #ccc;\n }\n`\ntype ResizableTitleProps = {\n onResize: () => void\n width: number\n}\nconst ResizableTitle: React.FC = (props) => {\n const { onResize, width, ...restProps } = props\n\n if (!width) {\n return \n }\n\n return (\n {\n e.stopPropagation()\n }}\n />\n }\n onResize={onResize}\n draggableOpts={{ enableUserSelectHack: false }}\n >\n \n \n )\n}\n\ntype AnalysisGroupRowType = AnalysisType & { children?: AnalysisGroupRowType[] }\n\nconst transformData = (dataGroup: AnalysisType[]) => {\n const hashTable = Object.create(null) as AnalysisGroupRowType[]\n dataGroup.forEach((aData: AnalysisType) => (hashTable[aData.group_code] = { ...aData }))\n const dataTree: AnalysisGroupRowType[] = []\n dataGroup\n .sort((a, b) => {\n if (a.group_name.toLowerCase().trim() > b.group_name.toLowerCase().trim()) {\n return 1\n }\n if (a.group_name.toLowerCase().trim() < b.group_name.toLowerCase().trim()) {\n return -1\n }\n return 0\n })\n .forEach((aData: AnalysisType) => {\n if (aData.parent_group_code !== -1) {\n const parentGroup = hashTable[aData.parent_group_code]\n if (parentGroup) {\n if (!parentGroup.children || parentGroup.children?.length === 0) {\n parentGroup.children = []\n }\n parentGroup.children.push(hashTable[aData.group_code])\n }\n } else {\n dataTree.push(hashTable[aData.group_code])\n }\n })\n return dataTree\n}\n\ntype Props = {\n selectedGroup?: AnalysisType\n onSelectGroup: (groupId: AnalysisType) => void\n isShownInModal?: boolean\n expandedRowKeys?: number[]\n onExpand?: (expanded: boolean, record: AnalysisType) => void\n}\n\nconst GroupTable: React.FC = ({\n selectedGroup,\n onSelectGroup,\n isShownInModal = false,\n expandedRowKeys,\n onExpand,\n}) => {\n const { data, loading, addedRowTree } = React.useContext(AnalysisGroupListContext)\n\n const [searchText, setSearchText] = React.useState()\n const [searchedColumn, setSearchedColumn] = React.useState('group_code')\n const [columnsWidth, setColumnsWidth] = React.useState([200, 60, 40])\n\n const searchInput = React.useRef(null)\n\n const handleSearch = (selectedKeys: React.ReactText[], confirm: (() => void) | undefined, dataIndex: string) => {\n confirm && confirm()\n setSearchText(selectedKeys[0] as string)\n setSearchedColumn(dataIndex as keyof AnalysisType)\n }\n\n const handleReset = (clearFilters: (() => void) | undefined) => {\n clearFilters && clearFilters()\n setSearchText(undefined)\n }\n\n const getColumnSearchProps = (dataIndex: keyof AnalysisType): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (\n
\n {\n setSelectedKeys(e.target.value ? [e.target.value] : [])\n }}\n />\n \n handleSearch(selectedKeys, confirm, dataIndex)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n
\n ),\n filterIcon: (filtered) => ,\n // onFilter: (value, record) => {\n // return record[dataIndex]\n // ? record[dataIndex].toString().toLowerCase().includes(value.toString().toLowerCase())\n // : false\n // },\n onFilterDropdownVisibleChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput && searchInput.current && searchInput.current.select())\n }\n },\n })\n\n const columns = useMemo[]>(\n () => [\n {\n title: 'Group Name',\n key: 'group_name',\n dataIndex: 'group_name',\n // fixed: true,\n ellipsis: true,\n width: columnsWidth[0],\n // @ts-ignore\n onHeaderCell: (column) => ({\n width: columnsWidth[0],\n onResize: handleResize(0),\n }),\n ...getColumnSearchProps('group_name'),\n },\n {\n title: 'User',\n key: 'username',\n dataIndex: 'username',\n ellipsis: true,\n width: columnsWidth[1],\n // @ts-ignore\n onHeaderCell: (column) => ({\n width: columnsWidth[1],\n onResize: handleResize(1),\n }),\n ...getColumnSearchProps('username'),\n },\n {\n title: 'GC',\n key: 'gc',\n dataIndex: 'group_code',\n width: columnsWidth[2],\n // @ts-ignore\n onHeaderCell: (column) => ({\n width: columnsWidth[2],\n onResize: handleResize(2),\n }),\n ...getColumnSearchProps('group_code'),\n },\n ],\n [columnsWidth],\n )\n\n const fundGroupData = React.useMemo(() => {\n if (data) {\n if (!searchText) {\n return transformData(data)\n }\n const filteredData = data.filter((item) => {\n if (!item[searchedColumn]) {\n return false\n }\n return item[searchedColumn].toString().toLowerCase().includes(searchText.toLowerCase())\n })\n return filteredData\n }\n }, [data, searchText, searchedColumn])\n\n const handleResize = (index: number): ((e: React.SyntheticEvent, data: ResizeCallbackData) => void) => (\n _,\n { size },\n ) => {\n const newState = [...columnsWidth]\n newState[index] = size.width\n setColumnsWidth(newState)\n }\n\n return (\n \n \n addedRowTree && addedRowTree[0] === record.group_code ? `gc-${record.group_code} highlight` : ''\n }\n dataSource={fundGroupData}\n pagination={false}\n loading={loading}\n scroll={{\n y: isShownInModal ? '500px' : selectedGroup ? 'calc(100vh - 355px)' : 'calc(100vh - 295px)',\n x: 'min-content',\n }}\n rowSelection={{\n type: 'radio',\n fixed: true,\n columnWidth: 30,\n selectedRowKeys: selectedGroup ? [selectedGroup.group_code] : undefined,\n onChange: (_, selectedRows) => {\n onSelectGroup(selectedRows[0])\n },\n }}\n />\n \n )\n}\n\nexport default GroupTable\n","import { Checkbox, Form, Input, notification } from 'antd'\nimport { useForm } from 'antd/lib/form/util'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport APIService from '../../shared/api'\nimport { AnalysisGroupListContext } from '../../shared/api/context/AnalysisGroupListContext'\nimport GroupTable from './GroupTable'\n\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n}\n\nconst AddGroupModal: React.FC = ({ isOpen, onRequestClose }) => {\n const [parentGroup, setParentGroup] = React.useState()\n const [submitting, setSubmitting] = React.useState(false)\n const [isAddToSubGroup, setAddToSubGroup] = React.useState(false)\n\n const { refetchGroup, setAddedRow } = React.useContext(AnalysisGroupListContext)\n\n const [form] = useForm()\n\n const handleSubmit = () => {\n form.validateFields(['name']).then(() => {\n const name = form.getFieldValue('name')\n setSubmitting(true)\n APIService.analysisService\n .createGroup(name, parentGroup || -1)\n .then((res) => {\n notification.success({ message: `${name} Group created!` })\n onRequestClose()\n refetchGroup()\n setAddedRow && setAddedRow(res.data.group_code)\n })\n .catch((err) => {\n console.error(err)\n notification.error({ message: 'Failed To Create Group!' })\n })\n .finally(() => {\n setSubmitting(false)\n setAddToSubGroup(false)\n form.resetFields()\n })\n })\n }\n\n return (\n {\n onRequestClose()\n setAddToSubGroup(false)\n form.resetFields()\n }}\n onOk={handleSubmit}\n confirmLoading={submitting}\n >\n
\n \n \n \n {\n if (e.target.checked) {\n setParentGroup(undefined)\n }\n setAddToSubGroup(e.target.checked)\n }}\n >\n Add To Sub-Group\n \n {isAddToSubGroup && (\n \n setParentGroup(group.group_code)} />\n \n )}\n \n \n )\n}\n\nexport default AddGroupModal\n","import React from 'react'\nimport Modal from 'antd/lib/modal/Modal'\nimport { Form, Input, notification } from 'antd'\nimport APIService from '../../shared/api'\nimport { AnalysisType } from '../../shared/api/models/Analysis'\n\ntype Props = {\n selectedGroup?: AnalysisType\n isOpen: boolean\n onRefetch: () => void\n onRequestClose: () => void\n}\n\nconst AddFundModal: React.FC = ({ selectedGroup, isOpen, onRefetch, onRequestClose }) => {\n const [submitting, setSubmitting] = React.useState(false)\n const [fundIds, setFundIds] = React.useState()\n const handleSubmit = () => {\n if (!selectedGroup) {\n notification.warn({ message: 'Please select a group to add funds to!' })\n return\n }\n if (!fundIds || !fundIds.trim()) {\n return\n }\n const updatedFundIds = fundIds.trim().split('\\n')\n setSubmitting(true)\n APIService.analysisService\n .updateGroup({ groupCode: selectedGroup.group_code, fundIds: updatedFundIds })\n .then(() => {\n notification.success({ message: `Add ${updatedFundIds.length} funds to group ${selectedGroup.group_name}!` })\n onRequestClose()\n setFundIds(undefined)\n onRefetch()\n })\n .catch((err) => {\n console.error(err)\n notification.error({ message: 'Failed to add funds to group!' })\n })\n .finally(() => setSubmitting(false))\n }\n\n return (\n \n
\n \n setFundIds(e.target.value)}\n rows={10}\n />\n Funds which are already inside the group will be ignored\n \n
\n \n )\n}\n\nexport default AddFundModal\n","import { Col, Row, Select } from 'antd'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../app/rootReducer'\nimport { Benchmarks } from '../../shared/api/models/ResponsesTypes'\n\ninterface Props {\n benchmarks: Benchmarks\n handleChange: (benchmarks: Benchmarks) => void\n}\n\nconst { Option } = Select\n/**\n * Rendering all the three benchmark Options in Model Analysis\n * @param benchmarks - values of benchmark-1, 2, and 3\n * @param handleBenchmarkChange - method to propagate updated values of benchmarks up in ModelAnalysis\n */\nconst BenchmarkOptions: React.FC = ({ benchmarks, handleChange }) => {\n const { benchmarks: dataBenchmark } = useSelector((state: RootState) => state.appData)\n const { benchmark1, benchmark2, benchmark3 } = benchmarks\n\n const renderBenchmarkOptions = () => {\n return dataBenchmark?.map((option) => {\n return (\n \n )\n })\n }\n\n return (\n \n \n Benchmark 1\n
\n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n allowClear\n onChange={(val: string) => {\n handleChange({\n benchmark1: val,\n benchmark2,\n benchmark3,\n })\n }}\n >\n {renderBenchmarkOptions()}\n \n \n \n Benchmark 2\n
\n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n onChange={(val: string) => {\n handleChange({\n benchmark1,\n benchmark2: val,\n benchmark3,\n })\n }}\n >\n {renderBenchmarkOptions()}\n \n \n \n Benchmark 3\n
\n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n onChange={(val: string) => {\n handleChange({\n benchmark1,\n benchmark2,\n benchmark3: val,\n })\n }}\n >\n {renderBenchmarkOptions()}\n \n \n
\n )\n}\n\nexport default BenchmarkOptions\n","import { Collapse, Spin } from 'antd'\nimport React from 'react'\nimport Plot from 'react-plotly.js'\n\nconst { Panel } = Collapse\n/**\n * Component rendering Plotly graph within Collapsible Panel\n * @param header - header for the panel\n * @param graphData - data to plotted\n * @param graphLayout - layout object for the graph\n * @param loading - boolean to render spinning icon\n */\nconst PanelDetailGraph = ({\n header,\n graphData,\n graphLayout,\n loading = false,\n}: {\n header: string\n graphData: any\n graphLayout: any\n loading?: boolean\n}) => {\n if (!loading) {\n return (\n \n {header}} key=\"1\">\n \n \n \n )\n } else {\n return (\n \n \n \n \n \n )\n }\n}\n\nexport default PanelDetailGraph\n","import React from 'react'\nimport { default as Plotly, PlotData } from 'plotly.js'\nimport PanelDetailGraph from './PanelDetailGraph'\nimport { DateValueRecordList, DateValueRecord } from '../../shared/api/models/ResponsesTypes'\n\ninterface OwnProps {\n vami: DateValueRecordList | undefined\n loading?: boolean\n}\n\n/**\n * This will render VAMI graph component\n * @param vami - VAMI graph data\n * @param loading - whether to show loading icon or not\n * @constructor\n */\nconst VamiGraph: React.FC = ({ vami, loading }) => {\n const getHoverText = (item: DateValueRecord) => {\n return `Value: : ${item.value}
Date: ${item.date}
`\n }\n\n const getVAMIGraphData = () => {\n const graphData: Partial[] = []\n const datesArray: string[] = []\n if (vami) {\n for (const key in vami) {\n const x: string[] = []\n const y: number[] = []\n const hovertemplate: string[] = []\n\n vami[key as keyof DateValueRecordList].forEach((item) => {\n x.push(item.date)\n y.push(item.value)\n datesArray.push(item.date)\n hovertemplate.push(getHoverText(item))\n })\n graphData.push({\n x,\n y,\n hovertemplate,\n name: key[0].toUpperCase() + key.slice(1),\n })\n }\n }\n\n const graphLayout: Partial = {\n autosize: true,\n xaxis: {\n showgrid: false,\n showline: false,\n tickformat: '%Y-%m',\n categoryorder: 'array',\n categoryarray: [...new Set(datesArray)],\n },\n yaxis: {},\n margin: {\n l: 50,\n r: 50,\n b: 100,\n t: 100,\n pad: 4,\n },\n title: 'VAMI - Growth of 1000',\n }\n return {\n header: 'Value Added Money Index',\n graphData: graphData,\n graphLayout: graphLayout,\n loading,\n }\n }\n\n return \n}\n\nexport default React.memo(VamiGraph)\n","import { CalculatorOutlined, DeleteOutlined, DownloadOutlined, PlusOutlined } from '@ant-design/icons'\nimport {\n Breadcrumb,\n Button,\n Card,\n Checkbox,\n Dropdown,\n Empty,\n Menu,\n notification,\n Popconfirm,\n Row,\n Space,\n Tooltip,\n} from 'antd'\nimport { ClickParam } from 'antd/lib/menu'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport JsFileDownload from 'js-file-download'\nimport Papa from 'papaparse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { AnalysisGroupListContext } from '../../shared/api/context/AnalysisGroupListContext'\nimport { AnalysisType, FundInFundList, FundListType } from '../../shared/api/models/Analysis'\nimport { HistoricalPeriodType, HistoricalType } from '../../shared/api/services/analysis.service'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport AddFundModal from './AddFundModal'\nimport CalculateModal from './CalculateModal'\n\nenum ExportTypeEnum {\n List = 'list',\n HistoricalROR = 'historical_ror',\n HistoricalAUM = 'historical_aum',\n HistoricalYearlyROR = 'historical_yearly_ror',\n}\n\nconst StyledCard = styled(Card)`\n display: flex;\n flex-direction: column;\n width: 100%;\n\n .ant-card-head {\n border-bottom: none;\n font-size: 1rem;\n padding: 0 1rem;\n }\n .ant-card-body {\n padding: 1rem 0 0 0;\n }\n`\n\ntype Props = {\n selectedGroup?: AnalysisType\n onSelectGroup: (group?: AnalysisType) => void\n}\n\nconst FundList: React.FC = ({ selectedGroup, onSelectGroup }) => {\n const { invoke: getFundList, data: dataFundList, loading: loadingFundList } = useServiceState(\n APIService.analysisService.getDetailsGroup,\n )\n const { data } = React.useContext(AnalysisGroupListContext)\n React.useEffect(() => {\n if (selectedGroup) {\n getFundList(selectedGroup.group_code)\n }\n }, [getFundList, selectedGroup])\n\n const resolvedRowTree = React.useMemo(() => {\n if (!selectedGroup || !data || !data.length) {\n return\n }\n const selectedRowId = selectedGroup.group_code\n\n let parent = data.find((item) => item.group_code === selectedRowId)\n const results = []\n while (parent) {\n results.unshift(parent)\n parent = data.find((item) => item.group_code === parent?.parent_group_code)\n }\n return results\n }, [data, selectedGroup])\n\n // const [data, setData] = React.useState()\n const [selectedFunds, setSelectedFunds] = React.useState([])\n const [showCalculationModal, setShowCalculation] = React.useState(false)\n const [showAddFund, setShowAddFund] = React.useState(false)\n const [deleting, setDeleting] = React.useState(false)\n\n const handleDeleteFunds = () => {\n if (!selectedGroup || !selectedFunds || !selectedFunds.length) {\n return\n }\n setDeleting(true)\n APIService.analysisService\n .updateGroup({ groupCode: selectedGroup.group_code, deletedFundIds: selectedFunds })\n .then(() => {\n notification.success({ message: `Deleted ${selectedFunds.length} funds from ${selectedGroup.group_name}` })\n getFundList(selectedGroup.group_code)\n })\n .catch((err) => {\n console.error(err)\n notification.error({ message: `Failed to delete funds from ${selectedGroup.group_name}` })\n })\n .finally(() => setDeleting(false))\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Fund ID',\n key: 'fund_id',\n dataIndex: 'fund_id',\n fixed: 'left',\n width: 100,\n },\n {\n title: 'Fund Name',\n key: 'fund_name',\n dataIndex: 'fund_name',\n fixed: 'left',\n sorter: (a, b) => {\n if (!a.fund_name && !b.fund_name) {\n return 0\n }\n if (!a.fund_name && b.fund_name) {\n return 1\n }\n if (a.fund_name && !b.fund_name) {\n return -1\n }\n if (a.fund_name && b.fund_name) {\n const nameA = a.fund_name.toLowerCase()\n const nameB = b.fund_name.toLowerCase()\n if (nameA < nameB) {\n return -1\n }\n if (nameA > nameB) {\n return 1\n }\n }\n return 0\n },\n defaultSortOrder: 'ascend',\n },\n {\n title: 'Fund Rank',\n key: 'fund_rank',\n dataIndex: 'fund_rank',\n width: 120,\n },\n {\n title: 'Geographic',\n key: 'geographic',\n dataIndex: 'geographic',\n },\n {\n title: 'Strategy',\n key: 'strategy_name',\n dataIndex: 'strategy_name',\n },\n {\n title: 'Sub-Strategy (New)',\n key: 'sub_strategy_new_name',\n dataIndex: 'sub_strategy_new_name',\n },\n {\n title: 'Country',\n key: 'country',\n dataIndex: 'country',\n },\n {\n title: 'Is AUM Distributed?',\n key: 'is_aum_distributed',\n dataIndex: 'is_aum_distributed',\n render: (value) => {\n return \n },\n },\n {\n title: 'Strategy (New)',\n key: 'strategy_new_name',\n dataIndex: 'strategy_new_name',\n },\n {\n title: 'Regional Focus',\n key: 'regional_focus',\n dataIndex: 'regional_focus',\n },\n {\n title: 'Equity Redemption',\n key: 'equity_redemption',\n dataIndex: 'equity_redemption',\n },\n {\n title: 'Advance Notice',\n key: 'advance_notice',\n dataIndex: 'advance_notice',\n },\n ]\n\n const [currentSource, setCurrentSource] = React.useState([])\n\n React.useEffect(() => {\n if (dataFundList && dataFundList.funds) {\n setCurrentSource(dataFundList.funds)\n }\n }, [dataFundList])\n\n const handleExportAnalyst = () => {\n JsFileDownload(Papa.unparse(currentSource), `analyst-results.csv`, 'application/csv')\n }\n\n const handleExport = async (dataType: HistoricalType, period: HistoricalPeriodType) => {\n if (!selectedGroup) {\n return\n }\n const { data } = await APIService.analysisService.exportHistoricalData({\n sourceType: 'peer_group',\n entityId: selectedGroup?.group_code,\n dataType,\n period,\n })\n JsFileDownload(data, `${selectedGroup.group_name}-${period}-${dataType}.csv`, 'application/csv')\n }\n\n const handleExportClick = (e: ClickParam) => {\n switch (e.key) {\n case ExportTypeEnum.List:\n handleExportAnalyst()\n break\n case ExportTypeEnum.HistoricalROR:\n handleExport('ror', 'monthly')\n break\n case ExportTypeEnum.HistoricalAUM:\n handleExport('aum', 'monthly')\n break\n case ExportTypeEnum.HistoricalYearlyROR:\n handleExport('ror', 'yearly')\n break\n default:\n }\n }\n\n return (\n \n {resolvedRowTree.map((row) => (\n \n {row.group_code !== selectedGroup?.group_code ? (\n \n ) : (\n row.group_name\n )}\n \n ))}\n \n ) : (\n 'Fund List'\n )\n }\n extra={\n \n \n \n \n \n \n \n \n {selectedGroup && selectedFunds && selectedFunds.length > 0 && (\n \n Are you sure you want to delete these funds from {selectedGroup?.group_name}?\n \n }\n onConfirm={handleDeleteFunds}\n >\n \n \n )}\n \n \n }\n >\n {\n setCurrentSource(extra.currentDataSource)\n }}\n pagination={{\n showTotal: (total, range) => `${range[0]}-${range[1]} of ${total} items`,\n defaultPageSize: 20,\n }}\n rowSelection={{\n onChange: (selectedRowKeys) => {\n setSelectedFunds(selectedRowKeys as string[])\n },\n }}\n locale={{\n emptyText: (\n \n ),\n }}\n />\n {selectedGroup && currentSource.length > 0 && (\n (\n \n List\n Historical ROR\n Historical AUM\n Historical Yearly ROR\n \n )}\n >\n \n \n )}\n\n {selectedGroup && showCalculationModal && (\n setShowCalculation(false)}\n />\n )}\n selectedGroup?.group_code && getFundList(selectedGroup.group_code)}\n onRequestClose={() => setShowAddFund(false)}\n selectedGroup={selectedGroup}\n />\n \n )\n}\n\nexport default FundList\n","import { Col, Divider, Modal, Row, Table, Typography } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport ReactPerfectScrollbar from 'react-perfect-scrollbar'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { Benchmarks, YearTableRowRecord } from '../../shared/api/models/ResponsesTypes'\nimport { LoadingDetails } from '../../shared/components/LoadingDetails'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport BenchmarkOptions from './BenchmarkOptions'\nimport VamiGraph from './VamiGraph'\n\nconst { Title } = Typography\n\nconst StyledModal = styled(Modal)`\n width: 90vh;\n .ant-modal-content {\n max-height: 85vh;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .ant-modal-body {\n overflow-y: auto;\n flex: 1;\n }\n`\n\nconst Header = styled(Title)`\n position: relative;\n text-align: center;\n height: auto;\n margin: 0.5rem 0 1.5rem 0;\n display: block;\n`\n\nconst TableWrapper = styled('div')`\n td,\n th {\n padding: 16px 4px !important;\n }\n`\n\nconst StyledRow = styled(Row)`\n width: 100%;\n height: 50px;\n padding: 10px 5px;\n`\n\nconst StyledCol = styled(Col)`\n font-weight: 200;\n padding-top: 12px;\n`\n\n/**\n * This component renders table cells based on its value ('-' for undefined and red for negative value)\n * @param val\n * @constructor\n */\nconst RenderTableCell = (val: number) => {\n if (val === null || val === undefined) {\n return - \n }\n return val < 0 ? (\n {val.toLocaleString(undefined, { minimumFractionDigits: 2 })}\n ) : (\n {val.toLocaleString(undefined, { minimumFractionDigits: 2 })} \n )\n}\n\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n groupCode: number\n}\n\nconst CalculateModal: React.FC = ({ isOpen, onRequestClose, groupCode }) => {\n const { invoke: getStats, data: dataStats, loading } = useServiceState(APIService.analysisService.fetchGroupStats)\n\n const { invoke: getVAMI, data: dataVAMI } = useServiceState(APIService.analysisService.peerGroupVAMI)\n const [benchmarks, setBenchmarks] = React.useState({\n benchmark1: '2899',\n benchmark2: '2898',\n benchmark3: '52545',\n })\n\n React.useEffect(() => {\n getStats(groupCode)\n }, [getStats, groupCode])\n\n React.useEffect(() => {\n if (benchmarks.benchmark1 !== '' && benchmarks.benchmark2 !== '' && benchmarks.benchmark3 !== '') {\n getVAMI({ groupCode, b1: benchmarks.benchmark1, b2: benchmarks.benchmark2, b3: benchmarks.benchmark3 })\n }\n }, [benchmarks, getVAMI, groupCode])\n\n const columns: ColumnProps[] = [\n { title: 'Year', dataIndex: 'year', key: 'year', width: 100 },\n {\n title: 'Jan',\n dataIndex: '001',\n key: '001',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Feb',\n dataIndex: '002',\n key: '002',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Mar',\n dataIndex: '003',\n key: '003',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Apr',\n dataIndex: '004',\n key: '004',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'May',\n dataIndex: '005',\n key: '005',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Jun',\n dataIndex: '006',\n key: '006',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Jul',\n dataIndex: '007',\n key: '007',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Aug',\n dataIndex: '008',\n key: '008',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Sep',\n dataIndex: '009',\n key: '009',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Oct',\n dataIndex: '010',\n key: '010',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Nov',\n dataIndex: '011',\n key: '011',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Dec',\n dataIndex: '012',\n key: '012',\n width: 100,\n render: RenderTableCell,\n },\n {\n title: 'Total',\n dataIndex: 'total',\n key: 'total',\n width: 100,\n render: RenderTableCell,\n },\n ]\n const dataSource: YearTableRowRecord[] = []\n\n if (dataStats) {\n for (const yearlyRecord of dataStats.hypothetical_performance_history) {\n const record: YearTableRowRecord = {} as YearTableRowRecord\n record.year = `${yearlyRecord.year}`\n record.total = `${yearlyRecord.rors\n .reduce((s, ror) => s + ror.ror, 0)\n .toLocaleString(undefined, { maximumFractionDigits: 2 })}`\n for (const ror of yearlyRecord.rors) {\n record[String(ror.month).padStart(3, '0')] = ror.ror.toFixed(2)\n }\n dataSource.push(record)\n }\n }\n\n return (\n \n {dataStats && (\n \n \n
Hypothetical Performance History
\n \n \n \n
\n Analytics\n
\n \n \n \n Annualized Ror\n \n \n \n \n {dataStats.annualized_ror} % \n \n \n \n Annualized Standard Deviation\n \n \n \n \n {dataStats.annualized_standard_deviation} %\n \n \n \n Annualized Monthly Ror\n \n \n \n \n {dataStats.average_monthly_ror} %\n \n \n \n Standard Deviation\n \n \n \n \n {dataStats.standard_deviation} %\n \n \n \n \n \n Winning Months\n \n \n \n \n {dataStats.winning_months} %\n \n \n \n High Month\n \n \n \n \n {dataStats.high_month} %\n \n \n \n Low Month\n \n \n \n \n {dataStats.low_month} %\n \n \n \n Sharpe Ratio\n \n \n \n \n {dataStats.sharpe_ratio} %\n \n \n \n \n \n \n \n \n )}\n {loading && }\n \n )\n}\n\nexport default CalculateModal\n","import { Form, Modal, notification, Select } from 'antd'\nimport React from 'react'\nimport APIService from '../../shared/api'\nimport { AnalysisGroupListContext } from '../../shared/api/context/AnalysisGroupListContext'\nimport { AnalysisType } from '../../shared/api/models/Analysis'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\n\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n selectedGroup: AnalysisType\n}\n\nconst AssignUserModal: React.FC = ({ isOpen, onRequestClose, selectedGroup }) => {\n const { data, loading, invoke: fetchInternalUsers } = useServiceState<{ internal_users: string[] }, undefined>(\n APIService.userService.fetchInternalUsers,\n )\n const [selectedUser, setSelectedUser] = React.useState(selectedGroup.username)\n const { refetchGroup } = React.useContext(AnalysisGroupListContext)\n const [submitting, setSubmitting] = React.useState(false)\n\n React.useEffect(() => {\n fetchInternalUsers()\n }, [fetchInternalUsers])\n\n const handleSubmit = () => {\n if (selectedUser === selectedGroup.username) {\n onRequestClose()\n return\n }\n setSubmitting(true)\n APIService.analysisService\n .updateGroup({ groupCode: selectedGroup.group_code, user: selectedUser })\n .then(() => {\n notification.success({ message: `Assign ${selectedGroup.group_name} to ${selectedUser}` })\n onRequestClose()\n refetchGroup()\n })\n .catch((err) => {\n notification.error({ message: `Failed to assign user to ${selectedGroup.group_name}!` })\n })\n .finally(() => setSubmitting(false))\n }\n\n return (\n \n Assign User to {selectedGroup.group_name}\n \n }\n >\n
\n \n setSelectedUser(value)}\n options={data?.internal_users.map((item) => ({ value: item, label: item }))}\n >\n \n \n \n )\n}\n\nexport default AssignUserModal\n","import React from 'react'\nimport Modal from 'antd/lib/modal/Modal'\nimport { Form, Input, notification } from 'antd'\nimport { AnalysisType } from '../../shared/api/models/Analysis'\nimport APIService from '../../shared/api'\nimport { AnalysisGroupListContext } from '../../shared/api/context/AnalysisGroupListContext'\n\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n selectedGroup: AnalysisType\n}\n\nconst DuplicateGroupModal: React.FC = ({ isOpen, onRequestClose, selectedGroup }) => {\n const [name, setName] = React.useState()\n const [submitting, setSubmitting] = React.useState(false)\n\n const { refetchGroup, setAddedRow } = React.useContext(AnalysisGroupListContext)\n\n const handleDuplicate = () => {\n if (!selectedGroup) {\n return\n }\n if (!name) {\n notification.warn({ message: 'Name is required!' })\n return\n }\n setSubmitting(true)\n APIService.analysisService\n .createGroup(name, selectedGroup.parent_group_code, selectedGroup.group_code)\n .then((res) => {\n refetchGroup()\n notification.success({ message: 'Duplicate Group Successfully!' })\n onRequestClose()\n setAddedRow && setAddedRow(res.data.group_code)\n })\n .catch((err) => {\n console.error(err)\n notification.error({ message: 'Failed To Duplicate Selected Group!' })\n })\n .finally(() => setSubmitting(false))\n }\n\n return (\n Duplicate {selectedGroup.group_name}}\n onCancel={onRequestClose}\n onOk={handleDuplicate}\n confirmLoading={submitting}\n >\n
\n \n setName(e.target.value)} />\n \n \n \n )\n}\n\nexport default DuplicateGroupModal\n","import { Modal, notification, Checkbox } from 'antd'\nimport React from 'react'\nimport GroupTable from './GroupTable'\nimport { AnalysisType } from '../../shared/api/models/Analysis'\nimport APIService from '../../shared/api'\nimport { AnalysisGroupListContext } from '../../shared/api/context/AnalysisGroupListContext'\n\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n selectedGroup: AnalysisType\n}\n\nconst MoveToGroupModal: React.FC = ({ selectedGroup, isOpen, onRequestClose }) => {\n const [moveToGroup, setMoveToGroup] = React.useState()\n const [submitting, setSubmitting] = React.useState(false)\n const { refetchGroup, setAddedRow } = React.useContext(AnalysisGroupListContext)\n const [isMoveToSubGroup, setMoveToSubGroup] = React.useState(false)\n\n const handleSubmit = () => {\n setSubmitting(true)\n APIService.analysisService\n .updateGroup({ groupCode: selectedGroup.group_code, parentGroupCode: moveToGroup?.group_code || -1 })\n .then(() => {\n notification.success({\n message: `Moved ${selectedGroup.group_name} into ${moveToGroup?.group_name || 'Root'}!`,\n })\n refetchGroup()\n onRequestClose()\n setAddedRow && setAddedRow(selectedGroup.group_code)\n })\n .catch((err) => {\n notification.error({ message: 'Failed To Move The Selected Group!' })\n console.error(err)\n })\n .finally(() => setSubmitting(false))\n }\n\n return (\n \n Move {selectedGroup.group_name} To...\n \n }\n onCancel={onRequestClose}\n onOk={handleSubmit}\n confirmLoading={submitting}\n >\n {\n if (e.target.checked) {\n setMoveToGroup(undefined)\n }\n setMoveToSubGroup(e.target.checked)\n }}\n >\n Move To Sub-Group\n \n {isMoveToSubGroup && }\n \n )\n}\n\nexport default MoveToGroupModal\n","import React from 'react'\nimport styled from 'styled-components'\n\nconst Title = styled.span<{ visibleWidth: number }>`\n @media (max-width: ${(props) => props.visibleWidth}px) {\n display: none !important;\n }\n`\ntype ResponsiveTitleProps = {\n visibleWidth: number\n}\nexport const ResponsiveTitle: React.FC = ({ children, visibleWidth }) => (\n {children}\n)\n","import { CopyOutlined, DeleteOutlined, EditOutlined, UserAddOutlined } from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Row } from 'antd'\nimport React, { useRef } from 'react'\nimport APIService from '../../shared/api'\nimport { AnalysisGroupListContext } from '../../shared/api/context/AnalysisGroupListContext'\nimport { AnalysisType } from '../../shared/api/models/Analysis'\nimport AssignUserModal from './AssignUserModal'\nimport DuplicateGroupModal from './DuplicateGroupModal'\nimport GroupTable from './GroupTable'\nimport MovetToGroupModal from './MoveToGroupModal'\nimport styled from 'styled-components'\nimport { ResponsiveTitle } from '../../shared/components/ResponsiveTitle'\n\nconst Container = styled.div`\n width: 100%;\n`\ntype Props = {\n onSelectGroup: (group?: AnalysisType) => void\n selectedGroup?: AnalysisType\n}\n\nconst ActionsContainer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n`\n\nconst GroupList: React.FC = ({ selectedGroup, onSelectGroup }) => {\n const [showDuplicateModal, setShowDuplicateModal] = React.useState(false)\n const [showCopyModal, setShowCopyModal] = React.useState(false)\n const [showAssignModal, setShowAssignModal] = React.useState(false)\n const [expandedKeys, setExpandedKeys] = React.useState()\n const { addedRowTree, setAddedRow, refetchGroup } = React.useContext(AnalysisGroupListContext)\n const actionContainerRef = useRef(null)\n\n const handleExpand = (expanded: boolean, record: AnalysisType) => {\n if (addedRowTree && addedRowTree.length > 0) {\n setAddedRow(undefined)\n }\n setExpandedKeys((prev) =>\n !expanded ? prev?.filter((item) => item !== record.group_code) : [...(prev || []), record.group_code],\n )\n }\n\n const handleDeleteGroup = () => {\n if (!selectedGroup) {\n return\n }\n APIService.analysisService.deleteGroup(selectedGroup.group_code).then(() => {\n notification.success({ message: `Delete ${selectedGroup.group_name} successfully!` })\n onSelectGroup(undefined)\n refetchGroup()\n })\n }\n\n React.useEffect(() => {\n if (!addedRowTree) {\n return\n }\n setExpandedKeys(addedRowTree)\n }, [addedRowTree])\n\n React.useLayoutEffect(() => {\n if (!addedRowTree) {\n return\n }\n document.querySelector(`.gc-${addedRowTree[0]}`)?.scrollIntoView({ behavior: 'smooth' })\n }, [addedRowTree, expandedKeys, setAddedRow])\n\n return (\n \n \n {selectedGroup && (\n \n \n \n\n \n \n \n Are you sure you want to delete {selectedGroup.group_name}?\n \n }\n onConfirm={handleDeleteGroup}\n >\n \n \n \n\n setShowDuplicateModal(false)}\n />\n setShowCopyModal(false)}\n />\n setShowAssignModal(false)}\n />\n \n )}\n \n )\n}\n\nexport default GroupList\n","import { PlusOutlined } from '@ant-design/icons'\nimport { Button, Card } from 'antd'\nimport React, { DragEventHandler, TouchEventHandler, useRef } from 'react'\nimport styled from 'styled-components'\nimport { AnalysisGroupListProvider } from '../../shared/api/context/AnalysisGroupListContext'\nimport { FundDetailDropdownProvider } from '../../shared/api/context/FundDetailDropdownContext'\nimport { AnalysisType } from '../../shared/api/models/Analysis'\nimport MainLayout from '../../shared/components/MainLayout'\nimport AddGroupModal from './AddGroupModal'\nimport FundList from './FundList'\nimport GroupList from './GroupList'\n\nconst Wrapper = styled('div')`\n width: 100%;\n background: #fff;\n padding: 16px;\n overflow: hidden;\n display: flex;\n flex-direction: row;\n flex: 1;\n position: relative;\n\n .ant-table-content {\n min-height: calc(100vh - 280px);\n }\n`\n\nconst StyledCard = styled(Card)`\n .ant-card-head {\n border-bottom: none;\n font-size: 1rem;\n padding: 0 1rem;\n }\n\n .ant-card-body {\n padding: 1rem 0 0 0;\n }\n`\n\nconst LeftContainer = styled.div`\n overflow: hidden;\n display: flex;\n`\nconst RightContainer = styled.div`\n overflow: hidden;\n flex: 1;\n display: flex;\n`\n\nconst Handler = styled.div`\n width: 5px;\n background: #ccc;\n height: 80px;\n align-self: center;\n border-radius: 10px;\n margin: 0 4px;\n &:hover {\n background: #bbb;\n }\n`\n\nconst ResizeMask = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: #1890ff02;\n padding: 16px;\n display: flex;\n flex-direction: row;\n`\nconst MaskLeft = styled.div`\n border: dashed 1px #91d5ff;\n background: #91d5ff55;\n flex: 0;\n margin-right: 18px;\n`\nconst MaskRight = styled.div`\n flex: 1;\n background: #91d5ff55;\n border: dashed 1px #91d5ff;\n`\n\ntype Props = {}\nconst Analysis: React.FC = () => {\n const [selectedGroup, setSelectedGroup] = React.useState()\n const [isShowAddGroup, setIsShowAddGroup] = React.useState(false)\n const [width, setWidth] = React.useState(500)\n const [startX, setStartX] = React.useState(0)\n const [dragging, setDragging] = React.useState(false)\n const lastX = useRef(0)\n const resizeMaskRef = useRef(null)\n\n const handleDragStart: DragEventHandler = (event) => {\n setStartX(event.clientX)\n setDragging(true)\n if (resizeMaskRef.current) {\n resizeMaskRef.current.style.minWidth = `${width}px`\n }\n return false\n }\n\n const handleDrag: DragEventHandler = (event) => {\n if (resizeMaskRef.current && dragging) {\n resizeMaskRef.current.style.minWidth = `${width + event.clientX - startX}px`\n }\n }\n const handleDragEnd: DragEventHandler = (event) => {\n if (dragging) {\n setWidth(width + event.clientX - startX)\n setDragging(false)\n return true\n }\n }\n const handleTouchStart: TouchEventHandler = (event) => {\n setStartX(event.touches[0].clientX)\n setDragging(true)\n if (resizeMaskRef.current) {\n resizeMaskRef.current.style.minWidth = `${width}px`\n lastX.current = event.touches[0].clientX\n }\n return false\n }\n const handleTouchEnd: TouchEventHandler = (event) => {\n if (dragging) {\n setWidth(width + lastX.current - startX)\n setDragging(false)\n }\n }\n const handleTouchDrag: TouchEventHandler = (event) => {\n if (resizeMaskRef.current && dragging) {\n resizeMaskRef.current.style.minWidth = `${width + event.touches[0].clientX - startX}px`\n lastX.current = event.touches[0].clientX\n }\n }\n\n return (\n \n \n \n \n \n setIsShowAddGroup(true)}>\n \n Add Group\n \n }\n >\n \n setIsShowAddGroup(false)} />\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default Analysis\n","import {\n BulbOutlined,\n KeyOutlined,\n LinkedinOutlined,\n LogoutOutlined,\n TwitterOutlined,\n UserOutlined,\n YoutubeOutlined,\n} from '@ant-design/icons'\nimport { Layout, Menu, Spin } from 'antd'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Link, useHistory, useRouteMatch } from 'react-router-dom'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport logo from '../../assets/img/hfr-logo.png'\nimport { logout } from '../../slice/authSlice'\nimport { Colors } from '../colors'\nimport { ContactUsModal } from './ContactUsModal'\n\nconst { Content, Footer } = Layout\n\nconst StyledContent = styled(Content)`\n padding: 16px 24px;\n flex: 1;\n display: flex;\n`\nconst StyledFooter = styled(Footer)`\n background: #001529;\n padding: 15px 50px;\n display: flex;\n justify-content: space-between;\n color: ${Colors.white};\n`\nconst ImgLogo = styled.img`\n margin: 6px 10px;\n height: 36px;\n width: auto;\n`\n\ntype Props = {}\n\nconst ExternalMainLayout: React.FC = ({ children }) => {\n const history = useHistory()\n const location = useRouteMatch()\n const { isLoading } = useSelector((state: RootState) => state.auth)\n const { user } = useSelector((state: RootState) => state.user)\n const dispatch = useDispatch()\n\n const [showModal, setShowModal] = React.useState(false)\n\n return (\n \n \n
\n \n \n \n \n HFR.com\n \n
\n \n window.open('https://www.hfr.com/hfr-media-mgr-form/')}\n style={{ lineHeight: '48px' }}\n >\n New: Broadcast to HFR Clients\n \n \n window.open(\n 'https://go.hfr.com/l/1020832/2024-01-02/74j5g?source=ManagerLink&relatedsalesperson=indexdata@hfr.com',\n )\n }\n style={{ lineHeight: '48px' }}\n >\n License HFR Indices\n \n history.push('/')} style={{ lineHeight: '48px' }}>\n Dashboard\n \n history.push('/help-and-faqs')} style={{ lineHeight: '48px' }}>\n \n Help And FAQs\n \n \n ) : (\n <>\n {user?.first_name} {user?.last_name}\n \n )\n }\n >\n history.push('/user/change-password')}>\n \n Change Password\n \n dispatch(logout())}>\n \n Logout\n \n \n \n
\n {children}\n \n

© 2025 HFR

\n
\n
setShowModal(true)} style={{ cursor: 'pointer' }}>\n Contact Us\n
\n \n Privacy Policy\n \n \n \n \n \n \n \n \n \n \n
\n
\n setShowModal(false)} />\n
\n )\n}\n\nexport default ExternalMainLayout\n","import Icon, { QuestionCircleFilled } from '@ant-design/icons'\nimport { Button, Form, Input, notification, Row, Tooltip, Typography } from 'antd'\nimport { useForm } from 'antd/lib/form/util'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport ExternalMainLayout from '../../../shared/components/ExternalMainLayout'\nimport MainLayout from '../../../shared/components/MainLayout'\nconst Wrapper = styled('div')`\n width: 100%;\n background: #fff;\n padding: 16px;\n overflow: hidden;\n`\nconst { Title } = Typography\n\nconst Header = styled(Title)`\n position: relative;\n padding: 10px 0;\n height: auto;\n margin: 0.5rem 0 1.5rem 0;\n display: block;\n`\n\nexport const UserProfileChangePasswordForm: React.FC = () => {\n const { user } = useSelector((state: RootState) => state.user)\n return user && user.hfrml_internal_user ? (\n \n \n \n ) : (\n \n \n \n )\n}\n\nexport const RenderChangePassword: React.FC = () => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const formItemLayout = {\n labelCol: { span: 6 },\n wrapperCol: { span: 14 },\n }\n\n const [form] = useForm()\n\n const handleSubmit = () => {\n setLoadingSubmit(true)\n APIService.authService\n .updatePassword({ password: form.getFieldValue('yourPassword'), newPassword: form.getFieldValue('newPassword') })\n .then(() => {\n notification.success({ message: 'Password Updated!' })\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Password Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n })\n }\n return (\n \n
\n
Change Password
\n \n }\n type=\"password\"\n placeholder=\"Your Current password\"\n />\n \n \n
\n \n Password is invalid\n
\n \n ),\n },\n ]}\n >\n }\n type=\"password\"\n placeholder=\"Choose Password\"\n />\n \n ({\n validator(rule, value) {\n if (!value || getFieldValue('newPassword') === value) {\n return Promise.resolve()\n }\n return Promise.reject('The two passwords that you entered do not match!')\n },\n }),\n ]}\n >\n }\n type=\"password\"\n placeholder=\"Confirm Password\"\n />\n \n \n \n Update\n \n \n \n
\n )\n}\n","import React, { Dispatch, SetStateAction, useRef, useState } from 'react'\nimport { useSelector } from 'react-redux'\nimport APIService from '..'\nimport { RootState } from '../../../app/rootReducer'\nimport { RORResponseType, UpdateRORType } from '../../components/DataSheet'\nimport { useDraft, ViewModeType } from '../../DraftManager'\nimport { useServiceState } from '../../hooks/useServiceState'\nimport { ChecklistLegalDoc, ChecklistMainType, ChecklistMainUpdate, LegalChecklistUpdate } from '../models/FirmDetails'\nimport {\n DueDiligenceInvestor,\n DueDiligenceInvestorUpdate,\n ExFundFieldChange,\n FundDetails,\n FundDropdownType,\n FundIndexEligibilityDetails,\n} from '../models/FundDetails'\nimport { LatestPerformanceResponse } from '../services/fund.service'\n\nexport enum DUE_DILIGENCE_REQUEST_ENUM {\n DUE_DILIGENCE_MAIN,\n DUE_DILIGENCE_LEGAL_CHECKLIST,\n DUE_DILIGENCE_OLD_CHECKLIST,\n DUE_DILIGENCE_INVESTOR,\n}\n\nexport enum PERFORMANCE_REQUEST_ENUM {\n LATEST_PERFORMANCE,\n ROR,\n ASSET,\n NAV,\n DISTRIBUTION,\n}\n\nexport type PerformanceUpdateType = {\n rorChanges?: RORResponseType[]\n navChanges?: RORResponseType[]\n assetChanges?: RORResponseType[]\n}\n\ntype ExtraTablesKeys = {\n _latestPerformanceDataChange: PerformanceUpdateType\n _RORDataChange: UpdateRORType\n _distributionDataChange: UpdateRORType\n _assetDataChange: UpdateRORType\n _navDataChange: UpdateRORType\n _dataChangeChecklistMain: ChecklistMainUpdate[]\n _dataChangeLegalChecklist: LegalChecklistUpdate[]\n _dataChangeOldChecklist: LegalChecklistUpdate[]\n _dataChangeInvestor: Partial\n}\nexport type FundDetailDataContextType = {\n dataFundDetail?: FundDetails\n loading: boolean\n refetch: () => void\n getDueDiligenceRequest: (type: DUE_DILIGENCE_REQUEST_ENUM) => void\n getPerformanceRequest: (type: PERFORMANCE_REQUEST_ENUM) => void\n //\n getFundDetail: () => void\n //Checklist Main\n dataChecklistMain?: ChecklistMainType[]\n loadingChecklistMain: boolean\n setDataChangeChecklistMain: (value: ChecklistMainUpdate[] | undefined) => void\n dataChangeChecklistMain: ChecklistMainUpdate[] | undefined\n //LegalChecklist\n dataLegalChecklist?: ChecklistLegalDoc[]\n loadingLegalChecklist: boolean\n setDataChangeLegalChecklist: (value: LegalChecklistUpdate[] | undefined) => void\n dataChangeLegalChecklist: LegalChecklistUpdate[] | undefined\n //Old Checklist\n dataOldChecklist?: ChecklistLegalDoc[]\n loadingOldChecklist: boolean\n setDataChangeOldChecklist: (value: LegalChecklistUpdate[] | undefined) => void\n dataChangeOldChecklist: LegalChecklistUpdate[] | undefined\n //investor opinion\n dataInvestorOpinion?: DueDiligenceInvestor\n loadingInvestorOpinion: boolean\n dataChangeInvestor: Partial | undefined\n setDataChangeInvestor: Dispatch | undefined>>\n // Performance Update\n dataLatestPerformance: LatestPerformanceResponse | undefined\n latestPerformanceLoading: boolean\n performanceDataChange: PerformanceUpdateType | undefined\n setPerformanceDataChange: Dispatch>\n //ROR\n setRORDataChange: Dispatch>\n rorDataChange: UpdateRORType\n dataRORLoading: boolean\n dataROR: RORResponseType[] | undefined\n // Distribution\n dataDistribution: RORResponseType[] | undefined\n dataDistributionLoading: boolean\n distributionDataChange: UpdateRORType\n setDistributionDataChange: Dispatch>\n //Asset\n setAssetDataChange: Dispatch>\n assetDataChange: UpdateRORType\n dataAssetLoading: boolean\n dataAsset: RORResponseType[] | undefined\n //Nav\n setNAVDataChange: Dispatch>\n navDataChange: UpdateRORType\n dataNAVLoading: boolean\n dataNAV: RORResponseType[] | undefined\n // Fund Index Eligibility Detail\n originalFundIndexEligibilityDetail?: FundIndexEligibilityDetails\n setOriginalFundIndexEligibilityDetail: Dispatch>\n fundIndexEligibilityDetailChange?: Partial\n setFundIndexEligibilityDetailChange: Dispatch | undefined>>\n // Fund Detail Change\n dataFundDetailChange: React.MutableRefObject> | null\n snapshot: Partial | null\n setDataFundDetailChange: (\n action: SetStateAction>,\n lastFieldChange?: string,\n ) => void\n clearSnapshot: () => void\n dataChanged: number\n setDataChanged: Dispatch>\n\n //View Mode\n viewMode: ViewModeType\n setViewMode: (value: ViewModeType) => void\n\n fundDataDropdown: FundDropdownType | undefined\n //\n userOptions: {\n value: string | number\n text: string\n disabled?: boolean\n }[]\n}\n\nconst defaultValue: FundDetailDataContextType = {\n dataFundDetail: undefined,\n loading: true,\n refetch: () => undefined,\n getDueDiligenceRequest: () => undefined,\n getPerformanceRequest: () => undefined,\n //\n getFundDetail: () => undefined,\n //Checklist Main\n\n dataChecklistMain: undefined,\n loadingChecklistMain: true,\n setDataChangeChecklistMain: () => undefined,\n dataChangeChecklistMain: undefined,\n //Legal Checklist\n\n dataLegalChecklist: undefined,\n loadingLegalChecklist: true,\n setDataChangeLegalChecklist: () => undefined,\n dataChangeLegalChecklist: undefined,\n //Old Background Checklist\n\n dataOldChecklist: undefined,\n loadingOldChecklist: true,\n setDataChangeOldChecklist: () => undefined,\n dataChangeOldChecklist: undefined,\n //investor opinion\n\n dataInvestorOpinion: undefined,\n loadingInvestorOpinion: true,\n dataChangeInvestor: undefined,\n setDataChangeInvestor: () => undefined,\n\n // Performance Update\n dataLatestPerformance: undefined,\n latestPerformanceLoading: true,\n performanceDataChange: {},\n setPerformanceDataChange: () => undefined,\n\n //ROR\n setRORDataChange: () => undefined,\n dataRORLoading: true,\n dataROR: undefined,\n rorDataChange: { values: undefined },\n //Asset\n setAssetDataChange: () => undefined,\n assetDataChange: { values: undefined },\n dataAssetLoading: true,\n dataAsset: undefined,\n //Distribution\n dataDistribution: undefined,\n dataDistributionLoading: true,\n distributionDataChange: { values: undefined },\n setDistributionDataChange: () => undefined,\n //NAV\n setNAVDataChange: () => undefined,\n navDataChange: { values: undefined },\n dataNAVLoading: true,\n dataNAV: undefined,\n // Fund Index Eligibility Detail\n originalFundIndexEligibilityDetail: undefined,\n setOriginalFundIndexEligibilityDetail: () => undefined,\n fundIndexEligibilityDetailChange: undefined,\n setFundIndexEligibilityDetailChange: () => undefined,\n //Fund Detail Change\n dataFundDetailChange: null,\n snapshot: {},\n setDataFundDetailChange: () => undefined,\n clearSnapshot: () => undefined,\n dataChanged: 1,\n setDataChanged: () => undefined,\n\n //View Mode\n viewMode: 'internal',\n setViewMode: () => undefined,\n\n fundDataDropdown: undefined,\n //\n userOptions: [],\n}\ntype Props = {\n id: string\n type: 'internal' | 'external'\n shouldUpdate?: boolean\n onClearUpdatedPerformance?: () => void\n}\nexport const FundDetailDataContext = React.createContext(defaultValue)\nexport const FundDetailDataProvider: React.FC = ({\n children,\n id,\n type,\n shouldUpdate,\n onClearUpdatedPerformance,\n}) => {\n const { invoke: getFundDetail, data: dataFundDetail, loading } = useServiceState(\n APIService.fundDetailService.fetchFundBasicInfo,\n )\n const { invoke: getDataDropdown, data: fundDataDropdown } = useServiceState(\n APIService.fundDetailService.fetchDataDropdown,\n )\n const { invoke: getInternalUsers, data: internalUsers } = useServiceState(APIService.userService.fetchInternalUsers)\n\n const [dataChanged, setDataChanged] = useState(1)\n const { clearSnapshot, saveSnapshot, loadSnapshot } = useDraft()\n\n React.useEffect(() => {\n getFundDetail(id)\n }, [getFundDetail, id])\n\n React.useEffect(() => {\n getDataDropdown()\n }, [getDataDropdown])\n\n React.useEffect(() => {\n getInternalUsers()\n }, [getInternalUsers])\n\n const userOptions = React.useMemo(() => {\n if (!internalUsers) {\n return []\n }\n\n return internalUsers.internal_users.sort().map((id) => {\n return {\n value: id,\n text: id,\n }\n })\n }, [internalUsers])\n\n React.useEffect(() => {\n if (shouldUpdate) {\n getFundDetail(id)\n onClearUpdatedPerformance && onClearUpdatedPerformance()\n }\n }, [getFundDetail, id, onClearUpdatedPerformance, shouldUpdate])\n\n React.useEffect(() => {\n const draft = loadSnapshot(type === 'internal' ? 'fundDraft' : 'exFundDraft', id)\n if (draft) {\n setSnapshot(draft)\n setPerformanceDataChange(draft._latestPerformanceDataChange || undefined)\n setRORDataChange(draft._RORDataChange || { values: undefined })\n setDistributionDataChange(draft._distributionDataChange || { values: undefined })\n setNAVDataChange(draft._navDataChange || { values: undefined })\n setAssetDataChange(draft._assetDataChange || { values: undefined })\n setDataChangeChecklistMain(draft._dataChangeChecklistMain)\n setDataChangeLegalChecklist(draft._dataChangeLegalChecklist)\n setDataChangeOldChecklist(draft._dataChangeOldChecklist)\n setDataChangeInvestor(draft._dataChangeInvestor)\n dataFundDetailChange.current = draft\n draft.viewMode && setViewMode(draft.viewMode)\n }\n }, [id, loadSnapshot, type])\n\n const refetch = () => {\n getFundDetail(id)\n setPerformanceDataChange(undefined)\n setRORDataChange({ values: undefined })\n setDistributionDataChange({ values: undefined })\n setNAVDataChange({ values: undefined })\n setAssetDataChange({ values: undefined })\n setDataChangeChecklistMain(undefined)\n setDataChangeLegalChecklist(undefined)\n setDataChangeOldChecklist(undefined)\n setDataChangeInvestor(undefined)\n setFundIndexEligibilityDetailChange(undefined)\n }\n\n const appSetting = useSelector((state: RootState) => state.appSettings)\n\n React.useEffect(() => {\n if (appSetting.fundDraft.find((item) => item.id === id)?.viewMode) {\n const view = appSetting.fundDraft.find((item) => item.id === id)?.viewMode\n view && setViewMode(view)\n }\n }, [appSetting.fundDraft, id])\n\n const { invoke: getDataChecklistMain, data: dataChecklistMain, loading: loadingChecklistMain } = useServiceState(\n APIService.firmDetailService.getChecklistMain,\n )\n\n const [dataChangeChecklistMain, setDataChangeChecklistMain] = React.useState(\n undefined,\n )\n\n const { invoke: getChecklistLegalDoc, data: dataLegalChecklist, loading: loadingLegalChecklist } = useServiceState(\n APIService.firmDetailService.getLegalChecklist,\n )\n\n const [dataChangeLegalChecklist, setDataChangeLegalChecklist] = React.useState(\n undefined,\n )\n\n const { invoke: getChecklistOldBackground, data: dataOldChecklist, loading: loadingOldChecklist } = useServiceState(\n APIService.firmDetailService.getOldBackgroundChecklist,\n )\n\n const [dataChangeOldChecklist, setDataChangeOldChecklist] = React.useState(\n undefined,\n )\n\n const { invoke: getInvestorOpinion, data: dataInvestorOpinion, loading: loadingInvestorOpinion } = useServiceState(\n APIService.fundDetailService.fetchDueDiligenceInvestor,\n )\n\n const [dataChangeInvestor, setDataChangeInvestor] = React.useState | undefined>(\n undefined,\n )\n\n const [snapshot, setSnapshot] = React.useState | null>(\n null,\n )\n\n const getDueDiligenceRequest = React.useCallback(\n (type: DUE_DILIGENCE_REQUEST_ENUM) => {\n if (!dataFundDetail) {\n return\n }\n switch (type) {\n case DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_MAIN:\n return getDataChecklistMain(dataFundDetail?.firm_id)\n case DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_LEGAL_CHECKLIST:\n return getChecklistLegalDoc(dataFundDetail?.firm_id)\n case DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_OLD_CHECKLIST:\n return getChecklistOldBackground(dataFundDetail?.firm_id)\n case DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_INVESTOR:\n return getInvestorOpinion(dataFundDetail?.fund_id)\n }\n },\n [dataFundDetail, getChecklistLegalDoc, getChecklistOldBackground, getDataChecklistMain, getInvestorOpinion],\n )\n\n const {\n data: latestPerformance,\n invoke: fetchLatestPerformance,\n loading: latestPerformanceLoading,\n } = useServiceState(APIService.fundService.fetchLatestPerformance)\n\n const { invoke: getFundROR, data: dataROR, loading: dataRORLoading } = useServiceState(\n APIService.fundDetailService.fetchFundROR,\n )\n\n const [performanceDataChange, setPerformanceDataChange] = React.useState()\n const [rorDataChange, setRORDataChange] = React.useState({ values: undefined })\n const [assetDataChange, setAssetDataChange] = React.useState({ values: undefined })\n const [navDataChange, setNAVDataChange] = React.useState({ values: undefined })\n const [distributionDataChange, setDistributionDataChange] = React.useState({ values: undefined })\n const [originalFundIndexEligibilityDetail, setOriginalFundIndexEligibilityDetail] = React.useState<\n Partial\n >()\n const [fundIndexEligibilityDetailChange, setFundIndexEligibilityDetailChange] = React.useState<\n Partial\n >()\n const [viewMode, setViewMode] = React.useState('internal')\n\n const { invoke: getNAVAssets, data: dataAsset, loading: dataAssetLoading } = useServiceState(\n APIService.fundDetailService.fetchNAVAssets,\n )\n\n const { invoke: getNAVNavs, data: dataNAV, loading: dataNAVLoading } = useServiceState(\n APIService.fundDetailService.fetchNAVNavs,\n )\n\n const { invoke: getDistributions, data: dataDistribution, loading: dataDistributionLoading } = useServiceState(\n APIService.fundDetailService.fetchFundDistributions,\n )\n\n const getPerformanceRequest = React.useCallback(\n (type: PERFORMANCE_REQUEST_ENUM) => {\n if (!dataFundDetail) {\n return\n }\n switch (type) {\n case PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE:\n return fetchLatestPerformance(dataFundDetail.fund_id)\n case PERFORMANCE_REQUEST_ENUM.ROR:\n return getFundROR(dataFundDetail.fund_id)\n case PERFORMANCE_REQUEST_ENUM.ASSET:\n return getNAVAssets(dataFundDetail.fund_id)\n case PERFORMANCE_REQUEST_ENUM.NAV:\n return getNAVNavs(dataFundDetail.fund_id)\n case PERFORMANCE_REQUEST_ENUM.DISTRIBUTION:\n return getDistributions(dataFundDetail.fund_id)\n }\n },\n [dataFundDetail, fetchLatestPerformance, getDistributions, getFundROR, getNAVAssets, getNAVNavs],\n )\n\n const dataFundDetailChange = useRef>({})\n const debounceRef = useRef(null)\n const setDataFundDetailChange = React.useCallback(\n (\n action: SetStateAction>,\n lastFieldChange?: string,\n ): void => {\n if (dataFundDetail) {\n dataFundDetailChange.current = typeof action === 'object' ? action : action(dataFundDetailChange.current)\n Object.keys(dataFundDetailChange.current).forEach((key) => {\n if (dataFundDetailChange.current[key as keyof Partial] === undefined) {\n delete dataFundDetailChange.current[key as keyof Partial]\n }\n })\n\n if (debounceRef.current) {\n clearTimeout(debounceRef.current)\n }\n // if (Object.keys(dataFundDetailChange.current).length > 0) {\n debounceRef.current = setTimeout(() => {\n saveSnapshot(\n type === 'internal' ? 'fundDraft' : 'exFundDraft',\n {\n id: id,\n data: Object.keys(dataFundDetailChange.current).length > 0 ? dataFundDetailChange.current : undefined,\n name: dataFundDetail.fund_name,\n },\n viewMode,\n lastFieldChange,\n )\n setDataChanged((prev) => prev + 1)\n }, 300)\n // }\n }\n },\n [dataFundDetail, id, saveSnapshot, type, viewMode],\n )\n\n // effect that detect changes in Tables like ROR/NAV/Assets/Distribution...\n React.useEffect(() => {\n setDataFundDetailChange((prevState) => {\n return {\n ...prevState,\n _latestPerformanceDataChange:\n Object.keys(performanceDataChange || {}).length > 0 ? performanceDataChange : undefined,\n _RORDataChange: rorDataChange.values ? rorDataChange : undefined,\n _distributionDataChange: distributionDataChange.values ? distributionDataChange : undefined,\n _navDataChange: navDataChange.values ? navDataChange : undefined,\n _assetDataChange: assetDataChange.values ? assetDataChange : undefined,\n _dataChangeChecklistMain: dataChangeChecklistMain,\n _dataChangeLegalChecklist: dataChangeLegalChecklist,\n _dataChangeOldChecklist: dataChangeOldChecklist,\n _dataChangeInvestor: dataChangeInvestor,\n _fundIndexEligibilityDetailChange: fundIndexEligibilityDetailChange,\n }\n })\n }, [\n assetDataChange,\n dataChangeChecklistMain,\n dataChangeInvestor,\n dataChangeLegalChecklist,\n dataChangeOldChecklist,\n distributionDataChange,\n navDataChange,\n performanceDataChange,\n rorDataChange,\n fundIndexEligibilityDetailChange,\n setDataFundDetailChange,\n ])\n\n const value = {\n dataFundDetail,\n loading,\n refetch,\n getFundDetail: () => getFundDetail(id),\n getDueDiligenceRequest,\n dataChecklistMain,\n loadingChecklistMain,\n setDataChangeChecklistMain,\n dataChangeChecklistMain,\n dataLegalChecklist,\n loadingLegalChecklist,\n setDataChangeLegalChecklist,\n dataChangeLegalChecklist,\n dataOldChecklist,\n loadingOldChecklist,\n setDataChangeOldChecklist,\n dataChangeOldChecklist,\n dataInvestorOpinion,\n loadingInvestorOpinion,\n dataChangeInvestor,\n setDataChangeInvestor,\n //Performance Request\n getPerformanceRequest,\n // Performance Update\n dataLatestPerformance: latestPerformance,\n latestPerformanceLoading,\n performanceDataChange,\n setPerformanceDataChange,\n //ROR\n dataROR,\n dataRORLoading,\n rorDataChange,\n setRORDataChange,\n //Asset\n setAssetDataChange,\n assetDataChange,\n dataAssetLoading,\n dataAsset,\n //Distribution\n setDistributionDataChange,\n dataDistribution,\n dataDistributionLoading,\n distributionDataChange,\n //Nav\n setNAVDataChange,\n navDataChange,\n dataNAVLoading,\n dataNAV,\n // Fund Index Eligibility Detail\n originalFundIndexEligibilityDetail,\n setOriginalFundIndexEligibilityDetail,\n fundIndexEligibilityDetailChange,\n setFundIndexEligibilityDetailChange,\n //Fund Detail Change\n dataFundDetailChange,\n setDataFundDetailChange,\n snapshot,\n dataChanged,\n setDataChanged,\n clearSnapshot: () => clearSnapshot(type === 'internal' ? 'fundDraft' : 'exFundDraft', id),\n //View Mode\n viewMode,\n setViewMode,\n fundDataDropdown,\n // Internal Users\n userOptions,\n }\n return {children}\n}\n","import React, { Dispatch, SetStateAction } from 'react'\nimport APIService from '..'\nimport { UpdateRORType } from '../../components/DataSheet'\nimport { useServiceState } from '../../hooks/useServiceState'\nimport { FirmDetails, FirmMoreField } from '../models/FirmDetails'\nimport { FundDropdownType } from '../models/FundDetails'\nexport type FirmDetailDataContextType = {\n dataFirmDetail?: FirmDetails\n loading: boolean\n id: string\n refetch: () => void\n dataFirmDetailSubmitRef: React.MutableRefObject<\n Partial\n > | null\n fundDataDropdown?: FundDropdownType\n dataChanged: number\n setDataChanged: Dispatch>\n}\n\nconst defaultValue: FirmDetailDataContextType = {\n dataFirmDetail: undefined,\n id: '',\n loading: true,\n refetch: () => undefined,\n dataFirmDetailSubmitRef: null,\n fundDataDropdown: undefined,\n dataChanged: 1,\n setDataChanged: () => undefined,\n}\ntype Props = {\n id: string\n}\nexport const FirmDetailDataContext = React.createContext(defaultValue)\nexport const FirmDetailDataProvider: React.FC = ({ children, id }) => {\n const [dataChanged, setDataChanged] = React.useState(1)\n const { invoke: getFirmDetail, data: dataFirmDetail, loading } = useServiceState(\n APIService.firmDetailService.fetchFirmInfo,\n )\n const { invoke: getDataDropdown, data: fundDataDropdown } = useServiceState(\n APIService.fundDetailService.fetchDataDropdown,\n )\n\n const dataFirmDetailSubmitRef = React.useRef<\n Partial\n >({})\n\n React.useEffect(() => {\n getFirmDetail(id)\n }, [getFirmDetail, id])\n\n React.useEffect(() => {\n getDataDropdown()\n }, [getDataDropdown])\n\n const refetch = () => {\n getFirmDetail(id)\n }\n\n const value = {\n dataFirmDetail,\n loading,\n refetch,\n id,\n dataFirmDetailSubmitRef,\n fundDataDropdown,\n dataChanged,\n setDataChanged,\n }\n return {children}\n}\n","import moment from 'moment'\nimport React, { useCallback, useContext } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '../app/rootReducer'\nimport { addDraft, removeDraft } from '../slice/appSettingsSlice'\n\nexport type DraftType = 'fundDraft' | 'firmDraft' | 'exFundDraft' | 'exFirmDraft'\n\nexport type ViewModeType = 'internal' | 'external'\n\nexport interface Snapshot {\n id: string\n name: string\n type?: DraftType\n snapshotId?: string\n data?: any\n userId?: string\n viewMode?: ViewModeType\n lastFieldChange?: string\n _lastFieldChanged?: string\n}\n\ntype DraftManagerContextType = {\n saveSnapshot: (type: DraftType, data: Snapshot, viewMode?: ViewModeType, lastFieldChange?: string) => void\n loadSnapshot: (type: DraftType, id: string) => any | undefined\n clearSnapshot: (type: DraftType, id: string) => void\n}\nconst initialValue: DraftManagerContextType = {\n clearSnapshot: () => undefined,\n loadSnapshot: () => undefined,\n saveSnapshot: () => undefined,\n}\nconst DraftManagerContext = React.createContext(initialValue)\n\nexport const DraftManagerProvider: React.FC<{ usage: 'internal' | 'external'; dateFields: string[] }> = ({\n usage,\n children,\n dateFields,\n}) => {\n const { user } = useSelector((state: RootState) => state.user)\n const dispatch = useDispatch()\n\n const getName = useCallback((type: string, id: string) => user && `${usage}_${type}_${btoa(user.email)}_${id}`, [\n usage,\n user,\n ])\n\n const saveSnapshot = useCallback(\n (type: DraftType, data: Snapshot, viewMode?: ViewModeType, lastFieldChange?: string) => {\n if (user && data.data) {\n const name = getName(type, data.id) || ''\n window.localStorage.setItem(name, JSON.stringify(data.data))\n dispatch(\n addDraft({\n type,\n data: {\n userId: user.email,\n name: data.name || data.id.replace('-', ' ').toUpperCase(),\n id: data.id,\n type,\n snapshotId: name,\n viewMode: viewMode,\n lastFieldChange,\n },\n }),\n )\n }\n },\n [dispatch, getName, user],\n )\n\n const loadSnapshot = useCallback(\n (type: DraftType, id: string) => {\n if (user) {\n const name = getName(type, id) || ''\n const rawData = window.localStorage.getItem(name)\n if (rawData) {\n const changedValues = JSON.parse(rawData)\n const convertObject = Object.keys(changedValues).reduce((acc, key) => {\n if (dateFields.includes(key)) {\n return { ...acc, [key]: moment(changedValues[key]) }\n }\n return { ...acc, [key]: changedValues[key] }\n }, {})\n return convertObject\n }\n }\n return\n },\n [getName, user],\n )\n\n const clearSnapshot = useCallback(\n (type: DraftType, id: string) => {\n if (user) {\n const name = getName(type, id) || ''\n window.localStorage.removeItem(name)\n dispatch(\n removeDraft({\n type,\n snapshotId: name,\n }),\n )\n }\n },\n [dispatch, getName, user],\n )\n return (\n \n {children}\n \n )\n}\n\nexport const useDraft = () => useContext(DraftManagerContext)\n","import styled from 'styled-components'\n\nexport const TabContentWrapper = styled('div')`\n width: 100%;\n .ant-tabs-content {\n border: none !important;\n margin-top: 0 !important;\n }\n`\n","import { InfoCircleOutlined, PlusOutlined } from '@ant-design/icons'\nimport { Col, Progress, Row } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { Colors } from '../../../shared/colors'\nimport { LoadingDetails } from '../../../shared/components/LoadingDetails'\n\ntype ActivityChartType = {\n id: number\n type: 'updated' | 'created'\n value: number | undefined\n}\n\nconst StyledIcon = styled.div`\n position: absolute;\n left: calc(50% - 10px);\n top: calc(50% - 10px);\n`\n\nconst renderActivityProgress = (\n item: ActivityChartType,\n setTypeSelectActivity: (value: string) => void,\n setActiveTab: (value: string) => void,\n) => {\n let color\n let icon\n switch (item.type) {\n case 'updated':\n color = '#FFC069'\n icon = \n break\n case 'created':\n color = '#95DE64'\n icon = \n break\n default:\n break\n }\n\n return (\n
\n {item.type}\n {\n setTypeSelectActivity(item.type)\n setActiveTab('InforFund')\n }}\n >\n \n {icon}\n \n {item.value}\n \n )\n}\n\ntype Props = {\n countUpdated: number | undefined\n countCreated: number | undefined\n loading: boolean\n setTypeSelectActivity: (value: string) => void\n setActiveTab: (value: string) => void\n}\nconst ActivityBlock: React.FC = ({\n countUpdated,\n countCreated,\n loading,\n setTypeSelectActivity,\n setActiveTab,\n}) => {\n const ACTIVITIES_DATA: ActivityChartType[] = React.useMemo(() => {\n return [\n {\n id: 1,\n type: 'updated',\n value: countUpdated,\n },\n {\n id: 2,\n type: 'created',\n value: countCreated,\n },\n ]\n }, [countCreated, countUpdated])\n return (\n \n {loading && }\n {ACTIVITIES_DATA.map((item) => renderActivityProgress(item, setTypeSelectActivity, setActiveTab))}\n \n )\n}\n\nexport default ActivityBlock\n","import React, { useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '../../../../app/rootReducer'\nimport APIService from '../../../../shared/api'\nimport { FundSearchColumnSourceResponse } from '../../../../shared/api/models/Funds'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { updateFundSearchColumns } from '../../../../slice/appSettingsSlice'\nimport { FundSearchColumnPropsExtended } from './FundSearchColumnSource'\n\nexport type FundSearchAllColumnContextType = {\n dataAllColumns: FundSearchColumnSourceResponse | undefined\n defaultColumns: FundSearchColumnPropsExtended[]\n loading: boolean\n}\n\nconst defaultValue: FundSearchAllColumnContextType = {\n dataAllColumns: undefined,\n defaultColumns: [],\n loading: true,\n}\n\nconst DEFAULT_COLUMNS = [\n 'fund_id',\n 'fund_name',\n 'firm_id',\n 'firm_name',\n 'fund_status_code',\n 'latest_ror',\n 'latest_ror_date',\n 'fund_assets',\n 'fund_assets_date',\n 'is_fund_esg',\n 'is_firm_esg',\n]\n\nexport const FundSearchColumnContext = React.createContext(defaultValue)\nexport const FundSearchColumnProvider: React.FC = ({ children }) => {\n const dispatch = useDispatch()\n const { invoke: getAllColumns, data: dataAllColumns, loading: allColumnLoading } = useServiceState<\n FundSearchColumnSourceResponse,\n undefined\n >(APIService.fundService.fetchAllField)\n\n const { fundSearchColumns } = useSelector((state: RootState) => state.appSettings)\n\n React.useEffect(() => {\n getAllColumns()\n }, [getAllColumns])\n\n const defaultColumns: FundSearchColumnPropsExtended[] | undefined = React.useMemo(() => {\n if (!dataAllColumns) {\n return []\n }\n return DEFAULT_COLUMNS.map((defaultKey) => ({\n ...dataAllColumns[defaultKey],\n key: defaultKey,\n title: dataAllColumns[defaultKey].human_readable_name,\n sorter: true,\n dataIndex: defaultKey,\n }))\n }, [dataAllColumns])\n\n useEffect(() => {\n if (fundSearchColumns.length > 0) {\n return\n }\n if (defaultColumns.length) {\n dispatch(updateFundSearchColumns(defaultColumns.map((item) => item.key)))\n }\n }, [defaultColumns, dispatch, fundSearchColumns.length])\n\n const value = {\n dataAllColumns,\n loading: allColumnLoading,\n defaultColumns,\n }\n return {children}\n}\n","import { Button, List } from 'antd'\nimport Text from 'antd/lib/typography/Text'\nimport React from 'react'\nimport { useDispatch } from 'react-redux'\nimport styled from 'styled-components'\nimport { RecentlyEditedResponse } from '../../../shared/api/models/Funds'\nimport { LoadingDetails } from '../../../shared/components/LoadingDetails'\nimport { addTabs, FundFirmTypeEnum } from '../../../slice/appSettingsSlice'\nconst TextID = styled(Text)`\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n`\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst StyledList = styled(List)`\n flex: 1;\n padding: 8px;\n overflow: auto;\n max-height: 46vh;\n .ant-list-item {\n padding: 4px;\n }\n`\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: column;\n`\ntype Props = { data: RecentlyEditedResponse | undefined; loading: boolean }\nexport const CreatedUpdatedFunds: React.FC = ({ data, loading }) => {\n const dispatch = useDispatch()\n return (\n \n {data && (\n (\n \n
\n Fund #{item.fund_id}\n \n \n
\n \n dispatch(addTabs({ name: item.fund_name, id: item.fund_id, type: FundFirmTypeEnum.FUNDS }))\n }\n >\n {item.fund_name}\n \n
\n
\n
\n
\n
\n )}\n />\n )}\n {loading && }\n
\n )\n}\n","import React, { FC } from 'react'\nimport styled from 'styled-components'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '../../../app/rootReducer'\nimport { Button, List } from 'antd'\nimport { addTabs, FundFirmTypeEnum } from '../../../slice/appSettingsSlice'\nimport Text from 'antd/lib/typography/Text'\n\nconst Wrapper = styled.div`\n width: 100%;\n flex: 1;\n overflow-y: scroll;\n overflow-x: hidden;\n height: calc(100vh - 550px);\n`\nconst TextID = styled(Text)`\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n`\nconst StyledList = styled(List)`\n flex: 1;\n overflow: auto;\n border: none;\n .ant-list-item {\n padding: 4px;\n }\n`\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\n\nexport const DraftTab: FC = () => {\n const { fundDraft, firmDraft } = useSelector((state: RootState) => state.appSettings)\n const { user } = useSelector((state: RootState) => state.user)\n const myDrafts = [\n ...fundDraft.filter((value) => value.userId === user?.email),\n ...firmDraft.filter((value) => value.userId === user?.email),\n ]\n\n const dispatch = useDispatch()\n return (\n \n (\n \n
\n \n {item.type === 'fundDraft' ? 'Fund' : 'Firm'} #{item.id}\n \n \n \n
\n \n dispatch(\n addTabs({\n name: item.name,\n id: item.id,\n type: item.type === 'fundDraft' ? FundFirmTypeEnum.FUNDS : FundFirmTypeEnum.FIRMS_IN_FUNDS,\n }),\n )\n }\n >\n {item.name}\n \n
\n
\n
\n
\n
\n )}\n />\n
\n )\n}\n","import { Button, notification, Table } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport { useDispatch } from 'react-redux'\nimport styled from 'styled-components'\nimport APIService from '../../../shared/api'\nimport { FavoritedFundsResponse } from '../../../shared/api/models/Funds'\nimport { Colors } from '../../../shared/colors'\nimport { addTabs, FundFirmTypeEnum } from '../../../slice/appSettingsSlice'\n\nconst FundFirmName = styled('span')`\n color: ${Colors.primary};\n cursor: pointer;\n`\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: column;\n\n .ant-table-fixed-left .ant-table-body-inner {\n overflow-x: hidden;\n }\n\n .ant-table-content {\n min-height: calc(70vh - 300px);\n }\n\n .ant-table-footer {\n padding: 16px 0 0 0;\n background: none;\n }\n`\ntype Props = {\n dataFavorited: FavoritedFundsResponse[] | undefined\n loading: boolean\n onChangeFavorited: () => void\n}\nexport const FavoritedTab: React.FC = ({ dataFavorited, loading, onChangeFavorited }) => {\n const [listFundSelected, setListFundSelected] = React.useState([])\n const [isEdited, setIsEdited] = React.useState(false)\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n\n const dispatch = useDispatch()\n\n const columns: ColumnProps[] = [\n {\n title: 'Fund ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n width: '30%',\n sorter: (a, b) => {\n if (a.fund_id && b.fund_id) {\n return a.fund_id.localeCompare(b.fund_id)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Fund Name',\n dataIndex: 'fund_name',\n key: 'fund_name',\n width: '70%',\n sorter: (a, b) => {\n if (a.fund_name && b.fund_name) {\n return a.fund_name.localeCompare(b.fund_name)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n render: (_, record) => (\n \n dispatch(addTabs({ name: record.fund_name, id: record.fund_id, type: FundFirmTypeEnum.FUNDS }))\n }\n >\n {record.fund_name}\n \n ),\n },\n ]\n\n const onSelectChange = (selectedRowKeys: string[]) => {\n setListFundSelected(selectedRowKeys)\n setIsEdited(selectedRowKeys.length > 0)\n }\n\n const handleSubmit = () => {\n setLoadingDelete(true)\n\n APIService.fundService\n .updateFavorited({ delete: listFundSelected })\n .then(() => {\n notification.success({\n message: `Delete ${listFundSelected.length} funds to Favorited Funds successfully!`,\n })\n onChangeFavorited()\n })\n .catch((err) => {\n notification.error({ message: `Failed to delete funds to Favorited Funds!` })\n })\n .finally(() => setLoadingDelete(false))\n }\n\n return (\n \n {\n onSelectChange(selectedRowKeys as string[])\n },\n }}\n dataSource={dataFavorited}\n columns={columns}\n scroll={{ y: 'calc(70vh - 360px)', x: 'min-content' }}\n pagination={dataFavorited && dataFavorited.length > 10 ? undefined : false}\n loading={loading}\n />\n
\n \n
\n
\n )\n}\n","export enum LeftNavFirmEnum {\n MAIN_INFORMATION = 'Main Information',\n FIRM_ASSETS = 'Firm Assets',\n FIRM_REG_INFORMATION = 'Firm Reg. Information',\n CODE_OF_CONDUCT = 'Code of Conduct',\n CO_INVESTMENTS = 'Co-Investments',\n FIRM_ESG = 'Firm ESG',\n FIRM_DIVERSITY_INCLUSION = 'Firm Diversity & Inclusion',\n FUNDS_OF_FIRM = 'Funds of Firm',\n DUE_DILIGENCE = 'Due Diligence',\n EXECUTIVE_ORDERS = 'Executive Orders',\n FIRM_MULTI_MANAGER_POD_PLATFORM = `Firm Multi-Manager \"Pod Shop\" Platform`,\n FUND_FAMILY = 'Fund Family',\n}\n\nexport enum RightTabFirmEnum {\n FIRM_INFO = 'Firm Info',\n CONTACT_INFORMATION = 'Contact Information',\n OWNERSHIP_DESCRIPTION = 'Ownership Description',\n SEC_INFO = 'SEC Info',\n NON_SEC_INFO = 'Non SEC Info',\n}\n\nexport enum CollapseFirmEnum {}\nexport enum tabInCollapseFirmEnum {}\n\nexport interface ListSearchFirmType {\n key: string\n name: string\n leftNav: LeftNavFirmEnum\n rightTab?: RightTabFirmEnum\n collapse?: CollapseFirmEnum\n tabInCollapse?: tabInCollapseFirmEnum\n}\nexport const renderSearchListFirm: ListSearchFirmType[] = [\n {\n key: 'firm_name',\n name: 'Firm Name',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'founded',\n name: 'Year Founded',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'firm_asset',\n name: 'Firm Assets',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: '%_of_owned_by_employees',\n name: '% of owned by employees',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'MMasof',\n name: 'MM as of',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'Registration',\n name: 'Registration',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'ofAnalyst',\n name: 'of Analyst',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: '#_of_Managers_Gained',\n name: '# of Managers Gained',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: '#_of_employees_w/ownership_stake',\n name: '# of employees w/ ownership stake',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'denomination',\n name: 'Denom.',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'Is_Firm_ESG?',\n name: 'Is Firm ESG?',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'Firm_AUM_Dedicated_to_HF',\n name: 'Firm AUM Dedicated to HF',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'as_of_1',\n name: 'as of',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'ESG_Receive_Guidance',\n name: 'ESG Receive Guidance',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'Firm_AUM_Dedicated_to_FOF',\n name: 'Firm AUM Dedicated to FOF',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'as_of_2',\n name: 'as of',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'ESG_3rd_Party_Guidance',\n name: 'ESG 3rd Party Guidance',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: '#_of_Managers_Lost',\n name: '# of Managers Lost',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'Ptf.Mgr.',\n name: 'Ptf.Mgr.',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'is_minority_firm',\n name: 'Is Minority Firm',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'Minority_Own_Level',\n name: 'Minority Own Level',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'minority_own_type',\n name: 'Minority Own Type',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.FIRM_INFO,\n },\n {\n key: 'contact_info_name',\n name: 'Name',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_company',\n name: 'Company',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_address',\n name: 'Address',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_city',\n name: 'City',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_postal_code',\n name: 'Postal Code',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_phone',\n name: 'Phone',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_state',\n name: 'State',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_country',\n name: 'Country',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_fax',\n name: 'Fax',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_email',\n name: 'Email',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_web',\n name: 'Web',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'contact_info_notes',\n name: 'HFR Notes',\n leftNav: LeftNavFirmEnum.MAIN_INFORMATION,\n rightTab: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n key: 'firm_reg_registered',\n name: 'Registered',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.SEC_INFO,\n },\n {\n key: 'firm_reg_SEC_Number',\n name: 'SEC Number',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.SEC_INFO,\n },\n {\n key: 'firm_reg_IARD_CRD_Number',\n name: 'IARD-CRD Number',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.SEC_INFO,\n },\n {\n key: 'firm_reg_Org.Type',\n name: 'Org. Type',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.SEC_INFO,\n },\n {\n key: 'firm_reg_country',\n name: 'Country',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.SEC_INFO,\n },\n {\n key: 'firm_reg_state',\n name: 'State',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.SEC_INFO,\n },\n {\n key: 'firm_reg_Exempt_Reason',\n name: 'Exempt. Reason',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.SEC_INFO,\n },\n {\n key: 'non_sec_info_country',\n name: 'Country',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.NON_SEC_INFO,\n },\n {\n key: 'non_sec_info_Reg_Authority',\n name: 'Reg Authority',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.NON_SEC_INFO,\n },\n {\n key: 'non_sec_info_Reg_Auth_TypeNo',\n name: 'Reg Auth Type No.',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.NON_SEC_INFO,\n },\n {\n key: 'non_sec_info_Reg_Auth_Type',\n name: 'Reg Auth Type',\n leftNav: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n rightTab: RightTabFirmEnum.NON_SEC_INFO,\n },\n {\n key: 'firm_co_investment_Typical_Deal_Size',\n name: 'Typical Deal Size',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'firm_co_investment_Typical_Liquity',\n name: 'Typical Liquidity',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'firm_co_investment_Private_Equity',\n name: 'Private Equity',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'firm_co_investment_Public_Equity',\n name: 'Public Equity',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'firm_co_investment_Private_Debt',\n name: 'Private Debt',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'firm_co_investment_Public_Debt',\n name: 'Public Debt',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'firm_co_investment_Other',\n name: 'Other',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'firm_co_investment_Commingled_Fund',\n name: 'Commingled Fund',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'firm_co_investment_Fund_of_One',\n name: 'Fund of One',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'firm_co_investment_Separate_Managed_Acct',\n name: 'Separate Managed Acct',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'firm_co_investment_Other_2',\n name: 'Other',\n leftNav: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n key: 'is_firm_esg',\n name: 'Does Your Firm Have A Formal Firmwide ESG Policy?',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n key: 'applied_firmculture',\n name: 'Firm Culture',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n key: 'applied_investmentprocess',\n name: 'Investment Process',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n key: 'applied_portfolioconstruction',\n name: 'Portfolio Construction',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n key: 'applied_esgproducts',\n name: 'ESG Products',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n key: 'applied_esgintegration',\n name: 'ESG Integration',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n key: 'applied_esgactivist',\n name: 'Activist / Engaged Ownership',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n key: 'applied_diversityinclusion',\n name: 'Diversity And Inclusion',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n key: 'receive_guidance',\n name:\n 'Does Your Firm Receive ESG Investment Guidance From Or Follow The Principles Of A Third-Party Company/Association/Network?',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n key: 'thirdparty_guidance',\n name: 'Identify The Third-Party Company',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n key: 'future',\n name: 'Do You Have Plans To Incorporate ESG In The Future?',\n leftNav: LeftNavFirmEnum.FIRM_ESG,\n },\n]\n","export enum LeftNavFundEnum {\n BASIC_INFO = 'Basic Information',\n PERFORMANCE = 'Performance',\n INFORMATION = 'Information',\n EXPORT_SETUP = 'Export Setup',\n DUE_DILIGENCE = 'Due Diligence',\n UNIVERSES = 'Universes',\n HFR_AM_INFO = 'HFR AM Info',\n FUND_ESG = 'Fund ESG',\n FUND_DIVERSITY_INCLUSION = 'Fund Diversity & Inclusion',\n FUND_PROPERTIES = 'Fund Properties',\n INDICES = 'Index Eligibility',\n EXECUTIVE_ORDERS = 'Executive Orders',\n FUND_FAMILY = 'Fund Family',\n}\nexport enum RightTabFundEnum {\n ROR = 'ROR',\n NAV = 'NAV',\n ASSET = 'Asset',\n DISTRIBUTIONS = 'Distributions',\n APGL = 'APGL',\n PERFORMANCE_UPDATE = 'Performance Update',\n FUND_INFO = 'Fund Info',\n FUND_INVESTMENT_INFO = 'Fund Investment Info',\n OFFSHORE_FUND_INFO = 'Offshore Fund Info',\n FUND_CONTACT = 'Fund Contact',\n LEVERAGE = 'Leverage',\n INSTRUMENT = 'Instrument',\n INDUSTRY = 'Industry',\n INVESTOR_TYPE = 'Investor Type',\n REGION = 'Region',\n ELECTRONIC_TRADING_PLATFORM = 'Electronic Trading Platform',\n DOCUMENTS = 'Documents',\n ACTIVITIES = 'Activities',\n SEP_ACCT = 'Sep. Acct',\n CHECKLIST = 'Checklist',\n INVEST_OPINIONS = 'Invest. Opinions',\n SCORE_CARD = 'Score Card',\n CONTACTS = 'Contacts',\n MEETINGS = 'Meetings',\n MONTHLY = 'Monthly',\n}\n\nexport enum CollapseFundEnum {\n MILIONS_MANAGED = 'Milions Managed',\n NAV_PER_UNIT = 'NAV Per Unit',\n INFORMATION = 'Information',\n STRUCTURE = 'Structure',\n FEES = 'Fees',\n PRINCIPALS = 'Principals',\n INVESTMENT_INFO = 'Investment Info',\n HFR_AM_INFO_NOTE = 'Notes',\n HFR_AM_INFO_ARCHIVE_NOTES = 'Archive Notes',\n\n STRATEGY_DESCRIPTION = 'Strategy Description',\n OFFSHORE_FUND_INFORMATION = 'Offshore Fund Information',\n FUND_ESG = 'Fund ESG',\n DESCRIBE_ESG_CRITERIA = 'Describe ESG Criteria',\n TEAM_AND_DATA = 'Team and Data',\n}\n\nexport enum TabInCollapseFundEnum {\n ENVIRONMENTAL = 'Environmental',\n SOCIAL = 'Social',\n GOVERNANCE = 'Governance',\n TEAM = 'Team',\n DATA = 'Data',\n}\n\nexport interface ListSearchFundType {\n key: string\n name: string\n leftNav: LeftNavFundEnum\n rightTab?: RightTabFundEnum\n collapse?: CollapseFundEnum\n tabInCollapse?: TabInCollapseFundEnum\n}\n\nconst getFundIndexEligibilityDetailsOptions = (prefixName: string, label: string) => {\n return [\n {\n key: prefixName,\n name: `${label} (Index Tab)`,\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: `${prefixName}_index_eligibility`,\n name: `${label} Index Eligibility`,\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: `${prefixName}_last_confirmed_date`,\n name: `${label} Last Confirmed Date`,\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: `${prefixName}_confirmed_by`,\n name: `${label} Confirmed By`,\n leftNav: LeftNavFundEnum.INDICES,\n },\n ]\n}\n\nconst getFundIndexEligibilityReviewOptions = (prefixName: string, label: string) => {\n return [\n {\n key: prefixName,\n name: `${label} (Index Tab)`,\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: `${prefixName}_reviewed_date`,\n name: `${label} Reviewed Date`,\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: `${prefixName}_reviewed_by`,\n name: `${label} Reviewed By`,\n leftNav: LeftNavFundEnum.INDICES,\n },\n ]\n}\n\nexport const renderSearchListFund: ListSearchFundType[] = [\n {\n key: 'fund_name',\n name: 'Fund Name',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'firm_id',\n name: 'Firm Name',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfri_fund',\n name: 'HFRI Fund',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'strategy_code_new',\n name: 'Strategy',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'sub_strategy_code_new',\n name: 'Sub-Strategy',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'allocation',\n name: 'Allocation',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'style',\n name: 'Style',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'added_to_db',\n name: 'Added To DB',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfri_pending',\n name: 'HFRI Pending',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfri_500',\n name: 'HFRI 500',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfri_woman_access',\n name: 'HFRI Woman Access',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfri_i_fund',\n name: 'HFRI-I Fund',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfrx_fund',\n name: 'HFRX Fund',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfrb_fund',\n name: 'HFRB Fund',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfri_institutional',\n name: 'HFRI Institutional',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfru_fund',\n name: 'HFRU Fund',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfr_la_fund',\n name: 'HFR LA Fund',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfrr_parity',\n name: 'HFRRParity',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfrr_parity_i',\n name: 'HFRRParity-I',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'denomination',\n name: 'Denom.',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'fund_status_code',\n name: 'Fund Status',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'product_class',\n name: 'Product Class',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'bloomberg_ticker',\n name: 'Bloomberg Ticker',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'isin',\n name: 'ISIN',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'sec_pfid_number',\n name: 'SEC-PFID',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'liquidated_at',\n name: 'Liquidated at',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'data_source',\n name: 'Data Source',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'hfr_analyst',\n name: 'HFR Analyst',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'notes',\n name: 'Note',\n leftNav: LeftNavFundEnum.BASIC_INFO,\n },\n {\n key: 'benchmark',\n name: 'Benchmark',\n leftNav: LeftNavFundEnum.PERFORMANCE,\n rightTab: RightTabFundEnum.ROR,\n },\n {\n key: 'reporting_style',\n name: 'Reporting Style',\n leftNav: LeftNavFundEnum.PERFORMANCE,\n rightTab: RightTabFundEnum.ROR,\n },\n {\n key: 'reporting_frequency',\n name: 'Req. Freq',\n leftNav: LeftNavFundEnum.PERFORMANCE,\n rightTab: RightTabFundEnum.ROR,\n },\n\n {\n key: 'is_aum_distributed',\n name: 'Is AUM Distributed ?',\n leftNav: LeftNavFundEnum.PERFORMANCE,\n rightTab: RightTabFundEnum.ASSET,\n },\n {\n key: 'is_nav_distributed',\n name: 'Is NAV Distributed ?',\n leftNav: LeftNavFundEnum.PERFORMANCE,\n rightTab: RightTabFundEnum.NAV,\n },\n {\n key: 'fund_assets',\n name: 'Fund Assets',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'firm_assets',\n name: 'Firm Assets',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'fund_assets_date',\n name: 'Fund Asset Date',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'firm_assets_date',\n name: 'Firm Asset Date',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'om_date',\n name: 'OM Date',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'inception_date',\n name: 'Inception Date',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'is_offshore',\n name: 'Is Offshore',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'is_feeder_fund',\n name: 'Feeder Fund',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'is_hfr_funded',\n name: 'Is HFR Fund',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'is_minority_fund',\n name: 'Is Minority Managed',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'contact_status',\n name: 'Contact Status',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'liquidity',\n name: 'Liquidity',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'minority_manage_type',\n name: 'Minority Manage Type',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'minority_manage_level',\n name: 'Minority Manage Level',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.INFORMATION,\n },\n {\n key: 'domicile',\n name: 'Domicile',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'structure',\n name: 'Structure',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'registration_code',\n name: 'Registration',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'ucitsiii',\n name: 'UCITSIII',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'liquid_alt_type',\n name: 'Liquid Alt Type',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'sma_weeklyliquid_10mm',\n name: 'SMA Weekly $10MM',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'sma_monthlyliquid_20mm',\n name: 'SMA Monthly $20MM',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'sma_monthlyliquid_50mm',\n name: 'SMA Monthly $50MM',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'multi_manager_platform_reviewed_date',\n name: 'MM Platform Reviewed Date',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'multi_manager_platform_reviewed_by',\n name: 'MM Platform Reviewed By',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'aifmd_compliant',\n name: 'AIFMD',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'multi_manager_platform',\n name: 'Multi-Manager Platform',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'min_invest',\n name: 'Min. Investment',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'add_invest',\n name: 'Add Investment',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'woman_managed',\n name: 'Woman Managed',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'use_of_leverage',\n name: 'Use of Leverage',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'liquid_alt_region',\n name: 'Liquid Alt Regions',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n\n {\n key: 'min_invest_indv',\n name: 'Ind. Account Min.',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'accepts_mgd_accts',\n name: 'Accepts Mng. Accts?',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'run_sep_mgd_accts',\n name: 'Run Sep Mng Accts?',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'use_of_leverage_type',\n name: 'Use of Leverage Type',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'liquid_alt_product',\n name: 'Liquid Alt Product',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n {\n key: 'long_only_product',\n name: 'Long Only Product',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.STRUCTURE,\n },\n\n {\n key: 'mgmt_fee',\n name: 'Mgmt. Fee %',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'administrative_fee',\n name: 'Admin. Fee %',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'other_fees',\n name: 'Other Fee %',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'incentive_fee',\n name: 'Incentive Fee %',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'sales_fee',\n name: 'Sales Fee %',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'redemption_fee',\n name: 'Rdm. Fee %',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'redemption_fee_months',\n name: 'If Less Than',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'is_high_watermark',\n name: 'High Watermark',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'hurdle_rate',\n name: 'Hurdle Rate',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'max_12b1_fee',\n name: 'Max 12B-1 Fee %',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'max_front_fee',\n name: 'Max Front-End Load Fee %',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'max_deferred_fee',\n name: 'Max Deferred Sale Load Fee %',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INFO,\n collapse: CollapseFundEnum.FEES,\n },\n {\n key: 'equity_subscription',\n name: 'Equity Subscriptions',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'subscription_advance_notice',\n name: 'Subscription Advanced Notice (days)',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'subscription_cutoff_time',\n name: 'Subscription Cutoff by',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'subscription_settlement_days',\n name: 'Subscription Settment (days)',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'equity_redemption',\n name: 'Equity Redemptions',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'redemption_advance_notice',\n name: 'Redemption Advance Notice (days)',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'redemption_return_percent',\n name: '% Redemption Returned within (days)',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'balance_redemption_return_days',\n name: 'Redemption Balance Returned within (days)',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'investor_type',\n name: 'Accred. Investor Type',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'performance_reporting',\n name: 'Perf. Rept. to Investors',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'prime_broker',\n name: 'Prime Broker',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'banking_agent',\n name: 'Banking Agent',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'legal_adviser',\n name: 'Legal Adviser',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'auditor_name',\n name: 'Auditor',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'placement_agent',\n name: 'Placement Agent',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'administrator',\n name: 'Administrator',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'consultant',\n name: 'Consultant',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'custodian',\n name: 'Custodian',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'constituent_count',\n name: '# of Constituents',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'sub_strategy_desc',\n name: 'Sub-Strategy Desc',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'last_audit_date',\n name: 'Annual Performance Audit at',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'is_lockup',\n name: 'Is Lockup',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'lockup_period',\n name: 'Lockup Period',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'lockup_type',\n name: 'Lockup Type',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'gate_fund',\n name: 'Gate: Fund-Level',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'gate_investor',\n name: 'Gate: Investor-Level',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'accepts_new_investment',\n name: 'Accepting New Investment',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'strategy_description',\n name: 'Strategy Description',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_INVESTMENT_INFO,\n collapse: CollapseFundEnum.STRATEGY_DESCRIPTION,\n },\n {\n key: 'offshore_id',\n name: 'Offshore Fund',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.OFFSHORE_FUND_INFO,\n collapse: CollapseFundEnum.OFFSHORE_FUND_INFORMATION,\n },\n {\n key: 'contact_name',\n name: 'Name',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_company',\n name: 'Company',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_address1',\n name: 'Address 1',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_address2',\n name: 'Address 2',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_city',\n name: 'City',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_postal_code',\n name: 'Postal Code',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_phone',\n name: 'Phone',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_email',\n name: 'Email',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_web',\n name: 'Web',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_state',\n name: 'State',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_country',\n name: 'Country',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'contact_fax',\n name: 'Fax',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.FUND_CONTACT,\n },\n {\n key: 'region_inv_focus',\n name: 'Regional Investment Focus',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.REGION,\n },\n {\n key: 'region_inv_focus_country',\n name: 'Sub-Region',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.REGION,\n },\n {\n key: 'is_emerging_markets_fund',\n name: 'Is Emerging Markets',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.REGION,\n },\n {\n key: 'electronic_trading_platform',\n name: 'Electronic Trading Platform',\n leftNav: LeftNavFundEnum.INFORMATION,\n rightTab: RightTabFundEnum.ELECTRONIC_TRADING_PLATFORM,\n },\n { key: 'is_fund_esg', name: 'Does Fund Consider ESG Factors?', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'esg_strategy', name: 'ESG Strategy', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'esg_sub_strategy', name: 'ESG Sub-Strategy', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'app_positivescreen', name: 'Positive/best-in-class Screening', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'app_negativescreen', name: 'Negative/Exclusionary Screening', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'app_esgintegration', name: 'ESG Integration', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'app_impactinvest', name: 'Impact Investing', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'app_sustaininvest', name: 'Sustainability-themed Investing', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'env_greenbuilding', name: 'Green Building/ Smart Growth', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'env_climatechange', name: 'Climate Change/ Carbon', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'env_cleantech', name: 'Clean Technology', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'env_pollutiontaxes', name: 'Pollution / Toxics', leftNav: LeftNavFundEnum.FUND_ESG },\n {\n key: 'env_sustainable',\n name: 'Sustainable Natural Resources / Agriculture',\n leftNav: LeftNavFundEnum.FUND_ESG,\n },\n { key: 'env_waterconservation', name: 'Water Use & Conservation', leftNav: LeftNavFundEnum.FUND_ESG },\n {\n key: 'env_description',\n name: 'Additional Description Of How ENVIRONMENTAL Is Considered When Investing',\n leftNav: LeftNavFundEnum.FUND_ESG,\n },\n { key: 'soc_workplacesafety', name: 'Workplace Safety', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'soc_laborrelations', name: 'Labor Relations', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'soc_workplacebenefits', name: 'Workplace Benefits', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'soc_diversityantibias', name: 'Diversity & Anti-Bias Issues', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'soc_communitydev', name: 'Community Development', leftNav: LeftNavFundEnum.FUND_ESG },\n {\n key: 'soc_avoidtobacco',\n name: 'Avoidance Of Tobacco Or Other Harmful Products',\n leftNav: LeftNavFundEnum.FUND_ESG,\n },\n { key: 'soc_humanrights', name: 'Human Rights', leftNav: LeftNavFundEnum.FUND_ESG },\n {\n key: 'soc_description',\n name: 'Additional Description Of How SOCIAL Is Considered When Investing',\n leftNav: LeftNavFundEnum.FUND_ESG,\n },\n { key: 'gov_corppolcontrib', name: 'Corporate Political Contributions', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'gov_executivecomp', name: 'Executive Compensation', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'gov_boarddiversity', name: 'Board Diversity', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'gov_anticorruption', name: 'Anti-Corruption Pilicies', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'gov_boardindependence', name: 'Board Independence', leftNav: LeftNavFundEnum.FUND_ESG },\n {\n key: 'gov_description',\n name: 'Additional Description Of How GOVERNANCE Is Considered When Investing',\n leftNav: LeftNavFundEnum.FUND_ESG,\n },\n {\n key: 'team_engagepcm',\n name: `Does This Fund's Investment Team Engage With The Management Teams Of Companies In This Fund's Underlying Poritfolio, Re:ESG Or Diversity Issues?`,\n leftNav: LeftNavFundEnum.FUND_ESG,\n },\n { key: 'data_msci', name: 'MSCI', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'data_sustainalytics', name: 'Sustainalytics', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'data_bloomberg', name: 'Bloomberg', leftNav: LeftNavFundEnum.FUND_ESG },\n { key: 'data_factset', name: 'FactSet', leftNav: LeftNavFundEnum.FUND_ESG },\n {\n key: 'data_internal',\n name: 'Proprietary Or Internally Developed Metrics',\n leftNav: LeftNavFundEnum.FUND_ESG,\n },\n { key: 'data_other', name: 'Other', leftNav: LeftNavFundEnum.FUND_ESG },\n\n {\n key: 'dead_fund',\n name: 'HFR Dead Funds Database',\n leftNav: LeftNavFundEnum.EXPORT_SETUP,\n },\n {\n key: 'hfr_database',\n name: 'HFR Database',\n leftNav: LeftNavFundEnum.EXPORT_SETUP,\n },\n {\n key: 'hfr_risk_premia',\n name: 'HFR Risk Premia AM Database',\n leftNav: LeftNavFundEnum.EXPORT_SETUP,\n },\n {\n key: 'rationale',\n name: 'Investment Rationale',\n leftNav: LeftNavFundEnum.DUE_DILIGENCE,\n rightTab: RightTabFundEnum.INVEST_OPINIONS,\n },\n {\n key: 'firm',\n name: 'Firm',\n leftNav: LeftNavFundEnum.DUE_DILIGENCE,\n rightTab: RightTabFundEnum.INVEST_OPINIONS,\n },\n {\n key: 'strategy',\n name: 'Strategy',\n leftNav: LeftNavFundEnum.DUE_DILIGENCE,\n rightTab: RightTabFundEnum.INVEST_OPINIONS,\n },\n {\n key: 'asi_strategy',\n name: 'ASI Strategy',\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: 'asi_sub_strategy',\n name: 'ASI Sub-Strategy',\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: 'indexRegion',\n name: 'Index Region',\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: 'countryIndexInfo',\n name: 'Index Country',\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: 'strategy_code',\n name: 'Legacy Strategy',\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: 'sub_strategy_code',\n name: 'Legacy Sub-Strategy',\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: 'performance_added_to_family_as_of',\n name: 'Performance Added to Family as of',\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: 'removed_from_family_after',\n name: 'Removed from Family after',\n leftNav: LeftNavFundEnum.INDICES,\n },\n {\n key: 'family_pending_removal',\n name: 'Family Pending Removal',\n leftNav: LeftNavFundEnum.INDICES,\n },\n ...getFundIndexEligibilityDetailsOptions('accepting_new_investments', 'Accepting New Investments'),\n ...getFundIndexEligibilityDetailsOptions('subscriptions_monthly', 'Subscriptions'),\n ...getFundIndexEligibilityDetailsOptions('subscriptions_advanced', 'Subscriptions, Advanced Notice'),\n ...getFundIndexEligibilityDetailsOptions('redemptions_quarterly', 'Redemptions'),\n ...getFundIndexEligibilityDetailsOptions('redemptions_advanced', 'Redemptions, Advanced Notice'),\n ...getFundIndexEligibilityDetailsOptions('lockup', 'Lockup'),\n ...getFundIndexEligibilityDetailsOptions('gate_investor', 'Gate Investor'),\n ...getFundIndexEligibilityDetailsOptions('gate_fund', 'Gate Fund'),\n ...getFundIndexEligibilityReviewOptions('eligibility_status', 'Eligibility Status'),\n ...getFundIndexEligibilityReviewOptions('exclusion_reason', 'Exclusion Reason'),\n {\n key: 'capacity',\n name: 'Capacity',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'need_to_fund',\n name: 'Need To Fund',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'investment_info_management_fee',\n name: 'Management Fee',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n // {\n // key: 'incentive_fee',\n // name: 'Incentive Fee',\n // leftNav: LeftNavFundEnum.HFR_AM_INFO,\n // collapse: CollapseFundEnum.INVESTMENT_INFO,\n // },\n {\n key: 'weekly_redemption_percent',\n name: 'Weekly Redemption',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'weekly_hfrx_redemption_percent',\n name: 'Weekly HFRX Redemption',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'monthly_redemption_percent',\n name: 'Monthly Redemption',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'subscription_days',\n name: 'Subscriptions',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'most_recent_review',\n name: 'Most Recent Review',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'remaining_capacity',\n name: 'Remaining Capacity',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'pof_info_management_fee',\n name: 'Management Fee',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'index_pricing',\n name: 'Index Pricing',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n // {\n // key: 'isin',\n // name: 'ISIN',\n // leftNav: LeftNavFundEnum.HFR_AM_INFO,\n // collapse: CollapseFundEnum.INVESTMENT_INFO,\n // },\n {\n key: 'hfr_am_info_liquidity',\n name: 'Liquidity',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n key: 'hfr_am_info_notes',\n name: 'Notes',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.HFR_AM_INFO_NOTE,\n },\n {\n key: 'market_commentary',\n name: '',\n leftNav: LeftNavFundEnum.HFR_AM_INFO,\n collapse: CollapseFundEnum.HFR_AM_INFO_ARCHIVE_NOTES,\n },\n {\n key: 'has_securities',\n name: '',\n leftNav: LeftNavFundEnum.EXECUTIVE_ORDERS,\n },\n {\n key: 'manager_confirms',\n name: '',\n leftNav: LeftNavFundEnum.EXECUTIVE_ORDERS,\n },\n {\n key: 'separate_share_classes',\n name: '',\n leftNav: LeftNavFundEnum.EXECUTIVE_ORDERS,\n },\n {\n key: 'pre_trade_compliance_restrictions',\n name: '',\n leftNav: LeftNavFundEnum.EXECUTIVE_ORDERS,\n },\n {\n key: 'other_measures',\n name: '',\n leftNav: LeftNavFundEnum.EXECUTIVE_ORDERS,\n },\n {\n key: 'subscription_advance_notice',\n name: '',\n leftNav: LeftNavFundEnum.EXECUTIVE_ORDERS,\n },\n]\n","import numeral from 'numeral'\nimport moment from 'moment'\nclass GenUtil {\n static clearNamespace({ namespace = '' }) {\n if (namespace) {\n for (const key in localStorage) {\n if (key.split('_')[0] === namespace) {\n localStorage.removeItem(key)\n }\n }\n }\n }\n\n static digitWithExactPrecision(x: string | number, precision = 2): string {\n return Number(x).toFixed(precision)\n }\n\n static digitWithMaxPrecision(x: string | number, precision = 2): number {\n return Number(Number(x).toFixed(precision))\n }\n\n static getformattedNumber(x: string | number): string {\n return numeral(x).format('0,0[.]00')\n }\n // returns date in YYYY-MM format\n static getFormattedYearAndMonth(date: string | moment.Moment, format: string | undefined = undefined): string {\n return format ? moment(date, format).format('YYYY-MM') : moment(date).format('YYYY-MM')\n }\n // returns date in YYYY-MM-DD format\n static getFormattedYearMonthAndDay(date: string | moment.Moment, format: string | undefined = undefined): string {\n return format ? moment(date, format).format('YYYY-MM-DD') : moment(date).format('YYYY-MM-DD')\n }\n}\n\nexport default GenUtil\n","import { List, notification, Row } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport Text from 'antd/lib/typography/Text'\nimport React from 'react'\nimport APIService from '../../../shared/api'\n\ntype Props = {\n onChangeFavorited: () => void\n isOpen: boolean\n onRequestClose: () => void\n selectedFundsAddFavorited: { fund_id: string; fund_name: string }[]\n}\n\nconst AddToFavoritedModal: React.FC = ({\n onChangeFavorited,\n isOpen,\n onRequestClose,\n selectedFundsAddFavorited,\n}) => {\n const [submitting, setSubmitting] = React.useState(false)\n\n const handleSubmit = () => {\n setSubmitting(true)\n APIService.fundService\n .updateFavorited({ add: selectedFundsAddFavorited.map((item) => item.fund_id) })\n .then(() => {\n notification.success({\n message: `Added ${selectedFundsAddFavorited.length} funds to Favorited Funds successfully!`,\n })\n onChangeFavorited()\n onRequestClose()\n })\n .catch((err) => {\n notification.error({ message: `Failed to add funds to Favorited Funds!` })\n })\n .finally(() => setSubmitting(false))\n }\n\n return (\n onRequestClose()}\n onOk={handleSubmit}\n confirmLoading={submitting}\n >\n \n {selectedFundsAddFavorited.length} Funds Selected\n \n (\n \n
\n \n Fund #{item.fund_id} - {item.fund_name}\n \n
\n
\n )}\n />\n \n )\n}\n\nexport default AddToFavoritedModal\n","import { notification, Row } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport APIService from '../../../shared/api'\nimport { IndexManagerType } from '../../../shared/api/models/IndexManager'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\n\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n selectedFunds: string[]\n}\n\nconst AddToIndexModal: React.FC = ({ isOpen, onRequestClose, selectedFunds }) => {\n const { invoke: getAllIndex, data: dataIndexManager, loading: loadingIndexManager } = useServiceState<\n IndexManagerType[],\n undefined\n >(APIService.indexManagerService.getAllIndexManager)\n\n const [selectedIndex, setSelectedIndex] = React.useState(undefined)\n const [submitting, setSubmitting] = React.useState(false)\n\n React.useEffect(() => {\n getAllIndex()\n }, [getAllIndex])\n\n const handleSubmit = () => {\n if (!selectedIndex) {\n onRequestClose()\n return\n }\n setSubmitting(true)\n APIService.indexManagerService\n .updateIndexManagerDetail(selectedIndex, { fund_ids: selectedFunds })\n .then(() => {\n notification.success({\n message: `Added ${selectedFunds.length} funds to Index successfully!`,\n })\n onRequestClose()\n })\n .catch((err) => {\n notification.error({ message: `Failed to add funds to Index!` })\n })\n .finally(() => setSubmitting(false))\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n\n sorter: (a, b) => {\n if (a.id && b.id) {\n return a.id - b.id\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Name',\n dataIndex: 'name',\n key: 'name',\n sorter: (a, b) => {\n if (a.name && b.name) {\n return a.name.localeCompare(b.name)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n ]\n\n const onSelectChange = (selectedRowKeys: number[]) => {\n setSelectedIndex(selectedRowKeys[0])\n }\n\n return (\n onRequestClose()}\n onOk={handleSubmit}\n confirmLoading={submitting}\n >\n \n {selectedFunds.length} funds selected\n \n {\n onSelectChange(selectedRowKeys as number[])\n },\n }}\n dataSource={dataIndexManager}\n columns={columns}\n loading={loadingIndexManager}\n />\n \n )\n}\n\nexport default AddToIndexModal\n","import { Row, notification } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport GroupTable from '../../Analysis/GroupTable'\nimport APIService from '../../../shared/api'\nimport { AnalysisType } from '../../../shared/api/models/Analysis'\n\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n selectedFunds: string[]\n}\n\nconst AddToModal: React.FC = ({ isOpen, onRequestClose, selectedFunds }) => {\n const [selectedGroup, setSelectedGroup] = React.useState()\n\n const [submitting, setSubmitting] = React.useState(false)\n\n const handleSubmit = () => {\n if (!selectedGroup) {\n notification.warn({ message: 'Please Select A Group!' })\n return\n }\n setSubmitting(true)\n APIService.analysisService\n .updateGroup({ groupCode: selectedGroup.group_code, fundIds: selectedFunds })\n .then(() => {\n notification.success({\n message: `Added ${selectedFunds.length} funds to group successfully!`,\n })\n onRequestClose()\n })\n .catch((err) => {\n notification.error({ message: `Failed to add funds to group ${selectedGroup}!` })\n })\n .finally(() => setSubmitting(false))\n }\n\n return (\n onRequestClose()}\n onOk={handleSubmit}\n confirmLoading={submitting}\n >\n \n {selectedFunds.length} funds selected\n \n \n \n )\n}\n\nexport default AddToModal\n","import { Col, Input, Modal, notification, Row, Table } from 'antd'\nimport React, { useEffect } from 'react'\nimport APIService from '../../../shared/api'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\n\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n selectedFund: string\n selectedFundName: string\n onSubmitDeleting: () => void\n}\n\nconst DeleteFundModal: React.FC = ({\n isOpen,\n onRequestClose,\n selectedFund,\n selectedFundName,\n onSubmitDeleting,\n}) => {\n const [submitting, setSubmitting] = React.useState(false)\n const [submitText, setSubmitText] = React.useState()\n\n const { data, invoke: previewData, loading } = useServiceState(APIService.fundDetailService.previewDeleteFund)\n\n useEffect(() => {\n if (!selectedFund) {\n return\n }\n previewData(selectedFund)\n }, [previewData, selectedFund])\n\n const handleSubmit = async () => {\n if (!selectedFund) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.deleteFund(selectedFund)\n notification.success({ message: 'Fund Deleted!' })\n onSubmitDeleting()\n onRequestClose()\n } catch (err) {\n notification.error({ message: err.response.data.message })\n } finally {\n setSubmitting(false)\n }\n }\n\n return (\n onRequestClose()}\n onOk={handleSubmit}\n okText={'Delete'}\n confirmLoading={submitting}\n style={{ minHeight: '60vh' }}\n okButtonProps={\n submitText?.toLowerCase() !== selectedFund.toLowerCase()\n ? { disabled: true, className: 'modal-footer-hiden-button' }\n : { danger: true }\n }\n >\n \n
\n By deleting the fund, these number of linked entities in these tables will also be deleted. Please enter{' '}\n Fund ID to confirm.\n setSubmitText(e.target.value)}\n />\n \n \n ({\n table_name: key,\n linked_entities: data[key],\n }))\n : []\n }\n columns={[\n {\n title: 'Table Name',\n dataIndex: 'table_name',\n key: 'table_name',\n sorter: {\n compare: (a, b) => {\n return a.table_name.toLowerCase() > b.table_name.toLowerCase() ? 1 : -1\n },\n multiple: 1,\n },\n defaultSortOrder: 'ascend',\n },\n {\n title: 'Number of Linked Entities',\n dataIndex: 'linked_entities',\n key: 'linked_entities',\n sorter: {\n compare: (a, b) => {\n return a.linked_entities - b.linked_entities\n },\n multiple: 2,\n },\n defaultSortOrder: 'descend',\n },\n ]}\n />\n \n )\n}\n\nexport default DeleteFundModal\n","import React from 'react'\nimport { Input } from 'antd'\nimport { InputProps } from 'antd/lib/input'\n\ntype CustomNumberInputProps = InputProps & {\n precision?: number\n}\n\nexport function CustomNumberInput(props: CustomNumberInputProps) {\n const { value, onChange, max = 100.01, min = 0, precision = 0, onBlur, ...otherProps } = props\n if (!Number.isInteger(precision) || precision < 0) {\n throw new Error('precision is not right')\n }\n\n return (\n {\n const inputVal = e.target.value\n const inputNumber = inputVal.replace(/[^0-9\\.]/g, '')\n if (!isNaN(Number(inputNumber)) && inRange(Number(inputVal), Number(min), Number(max))) {\n onChange && onChange(e)\n }\n }}\n onBlur={(e) => {\n const value = e.target.value\n if (typeof value === 'undefined' || value === null || value === '') {\n onBlur && onBlur(e)\n return ''\n }\n const inputNumber = Number(value) || 0\n /** formate */\n e.target.value = Number(inputNumber).toFixed(precision)\n onChange && onChange(e)\n onBlur && onBlur(e)\n }}\n />\n )\n}\n\nfunction inRange(x: number, min: number, max: number) {\n if (x >= min && x <= max) {\n return true\n }\n return false\n}\n","import { AutoComplete, Checkbox, DatePicker, Form, Input, InputNumber, Radio, Select } from 'antd'\nimport { Rule } from 'antd/lib/form'\nimport { FormItemProps } from 'antd/lib/form/FormItem'\nimport TextArea from 'antd/lib/input/TextArea'\nimport { RadioGroupProps, RadioProps } from 'antd/lib/radio'\nimport { SelectProps } from 'antd/lib/select'\nimport moment from 'moment'\nimport React, { ReactNode, useEffect } from 'react'\nimport { FirmDetailDataContext } from '../api/context/FirmDetailDataContext'\nimport { FundDetailDataContext } from '../api/context/FundDetailDataContext'\nimport { InputNumberProps } from 'antd/lib/input-number'\nimport { CustomNumberInput } from './CustomNumberInput'\nimport { InputProps } from 'antd/lib/input'\n\ntype PropsInput = {\n name: string\n label?: string | ReactNode\n labelCol?: number\n wrapperCol?: number\n rules?: Rule[]\n labelAlign?: string\n normalize?: string\n placeholder?: string\n disabled?: boolean\n typeField?: string\n maxLength?: number\n prefix?: ReactNode\n notConnected?: boolean\n suffix?: string\n min?: number\n allowClear?: boolean\n}\nexport const FormItemInput: React.FC = ({\n name,\n label,\n labelCol,\n wrapperCol,\n rules,\n labelAlign,\n normalize,\n placeholder,\n disabled,\n typeField,\n maxLength,\n notConnected,\n prefix,\n suffix,\n min,\n allowClear,\n}) => {\n const convertToNumber = (value: string) => (value ? parseInt(value) : null)\n const convertToFloat = (value: string) => (value ? parseFloat(value) : null)\n\n const { dataFundDetailChange } = React.useContext(FundDetailDataContext)\n const { dataFirmDetailSubmitRef } = React.useContext(FirmDetailDataContext)\n\n return (\n nextValues[name] !== prevValues[name]}>\n {(form) => (\n 0 ||\n ((form.getFieldValue(name) === null || form.getFieldValue(name) === undefined) && rules && rules !== [])\n ? 'error'\n : 'warning'\n : undefined\n // @ts-ignore\n //Object.keys(form.draft || {}).includes(name) || form.isFieldTouched(name) ? 'warning' : ''\n }\n {...{ labelCol: { span: labelCol }, wrapperCol: { span: wrapperCol } }}\n style={{ display: 'flex', flex: 1 }}\n labelAlign={labelAlign ? (labelAlign === 'left' ? 'left' : 'right') : undefined}\n normalize={normalize === 'number' ? convertToNumber : normalize === 'float' ? convertToFloat : undefined}\n >\n \n \n )}\n \n )\n}\n\ntype FormItemInputNumberProps = {\n name: string\n label?: string | ReactNode\n labelCol?: number\n wrapperCol?: number\n rules?: Rule[]\n labelAlign?: string\n normalize?: string\n notConnected?: boolean\n} & InputProps\n\nexport const FormItemInputNumber: React.FC = ({\n name,\n label,\n labelCol,\n wrapperCol,\n rules,\n labelAlign,\n normalize,\n notConnected,\n style,\n ...props\n}) => {\n const convertToNumber = (value: string) => (value ? parseInt(value) : null)\n const convertToFloat = (value: string) => (value ? parseFloat(value) : null)\n\n const { dataFundDetailChange, fundIndexEligibilityDetailChange } = React.useContext(FundDetailDataContext)\n const { dataFirmDetailSubmitRef } = React.useContext(FirmDetailDataContext)\n\n return (\n nextValues[name] !== prevValues[name]}>\n {(form) => (\n 0 ||\n ((form.getFieldValue(name) === null || form.getFieldValue(name) === undefined) && rules && rules !== [])\n ? 'error'\n : 'warning'\n : undefined\n // @ts-ignore\n //Object.keys(form.draft || {}).includes(name) || form.isFieldTouched(name) ? 'warning' : ''\n }\n {...{ labelCol: { span: labelCol }, wrapperCol: { span: wrapperCol } }}\n style={{ display: 'flex', flex: 1 }}\n labelAlign={labelAlign ? (labelAlign === 'left' ? 'left' : 'right') : undefined}\n normalize={normalize === 'number' ? convertToNumber : normalize === 'float' ? convertToFloat : undefined}\n >\n \n \n )}\n \n )\n}\n\ntype PropsCheckBox = {\n text?: string | ReactNode\n label?: string | ReactNode\n name: string\n initialValue?: boolean\n notConnected?: boolean\n labelCol?: number\n wrapperCol?: number\n disable?: boolean\n rules?: Rule[]\n}\nexport const FormItemCheckBox: React.FC = ({\n name,\n text,\n label,\n initialValue,\n notConnected,\n disable,\n labelCol,\n wrapperCol,\n rules,\n}) => {\n const { dataFundDetailChange, fundIndexEligibilityDetailChange } = React.useContext(FundDetailDataContext)\n const { dataFirmDetailSubmitRef } = React.useContext(FirmDetailDataContext)\n\n return (\n nextValues[name] !== prevValues[name]}>\n {(form) => (\n \n \n {text && (\n 0 ||\n ((form.getFieldValue(name) === null || form.getFieldValue(name) === undefined) &&\n rules &&\n rules !== [])\n ? '#ff4d4f'\n : '#fffbe6'\n : undefined,\n // @ts-ignore\n // Object.keys(form.draft || {}).includes(name) || form.isFieldTouched(name) ? '#fffbe6' : undefined,\n }}\n >\n {text}\n \n )}\n \n \n )}\n \n )\n}\n\ntype PropsSelect = {\n name: string\n label?: string | ReactNode\n labelCol?: number\n wrapperCol?: number\n rules?: Rule[]\n options: {\n value: string | number\n text: string\n disabled?: boolean\n }[]\n defaultValue?: string\n value?: {\n value: string\n text: string\n }\n labelAlign?: string\n disabled?: boolean\n placeholder?: string\n notConnected?: boolean\n loading?: boolean\n selectProps?: SelectProps\n allowClear?: boolean\n}\nexport const FormItemSelect: React.FC = ({\n name,\n label,\n labelCol,\n wrapperCol,\n rules,\n options,\n labelAlign,\n disabled,\n placeholder,\n notConnected,\n loading,\n selectProps,\n allowClear,\n}) => {\n const { dataFundDetailChange, fundIndexEligibilityDetailChange } = React.useContext(FundDetailDataContext)\n const { dataFirmDetailSubmitRef } = React.useContext(FirmDetailDataContext)\n return (\n nextValues[name] !== prevValues[name]}>\n {(form) => {\n return (\n 0 ||\n ((form.getFieldValue(name) === null || form.getFieldValue(name) === undefined) &&\n rules &&\n rules.length > 0)\n ? 'error'\n : 'warning'\n : undefined\n // @ts-ignore\n //Object.keys(form.draft || {}).includes(name) || form.isFieldTouched(name) ? 'warning' : ''\n }\n className={notConnected ? 'notConnected' : undefined}\n {...{ labelCol: { span: labelCol }, wrapperCol: { span: wrapperCol } }}\n style={{ display: 'flex', flex: 1 }}\n labelAlign={labelAlign ? (labelAlign === 'left' ? 'left' : 'right') : undefined}\n >\n \n {options.map((item) => {\n return (\n \n {item.text}\n \n )\n })}\n \n \n )\n }}\n \n )\n}\n\ntype PropsDatePicker = {\n label?: string | ReactNode\n name: string\n labelCol?: number\n wrapperCol?: number\n disabled?: boolean\n labelAlign?: string\n notConnected?: boolean\n picker?: 'time' | 'month' | 'date' | 'week' | 'quarter'\n rules?: Rule[]\n allowClear?: boolean\n}\nexport const FormItemDatePicker: React.FC = ({\n label,\n labelCol,\n name,\n wrapperCol,\n disabled,\n labelAlign,\n notConnected,\n picker = 'date',\n rules,\n allowClear,\n}) => {\n const { dataFundDetailChange, fundIndexEligibilityDetailChange } = React.useContext(FundDetailDataContext)\n const { dataFirmDetailSubmitRef } = React.useContext(FirmDetailDataContext)\n return (\n nextValues[name] !== prevValues[name]}>\n {(form) => (\n 0 ||\n ((form.getFieldValue(name) === null || form.getFieldValue(name) === undefined) &&\n rules &&\n rules.length > 0)\n ? 'error'\n : 'warning'\n : undefined\n // @ts-ignore\n //Object.keys(form.draft || {}).includes(name) || form.isFieldTouched(name) ? 'warning' : ''\n }\n {...{ labelCol: { span: labelCol }, wrapperCol: { span: wrapperCol } }}\n style={{ display: 'flex', flex: 1 }}\n labelAlign={labelAlign ? (labelAlign === 'left' ? 'left' : 'right') : undefined}\n className={notConnected ? 'notConnected' : undefined}\n normalize={(value) => {\n if (value === null) {\n return undefined\n }\n if (picker === 'month' && value?._isValid) {\n return moment(value, 'YYYY-MM')\n }\n return value\n }}\n >\n {\n // @ts-ignore\n \n }\n \n )}\n \n )\n}\ntype PropsTextArea = {\n row: number\n name: string\n label?: string | ReactNode\n labelCol?: number\n wrapperCol?: number\n value?: string\n maxLength?: number\n notConnected?: boolean\n disable?: boolean\n rules?: Rule[]\n isVertical?: boolean\n}\nexport const FormItemTextArea: React.FC = ({\n row,\n name,\n labelCol,\n wrapperCol,\n label,\n maxLength,\n notConnected,\n disable,\n rules,\n isVertical,\n}) => {\n const { dataFundDetailChange } = React.useContext(FundDetailDataContext)\n const { dataFirmDetailSubmitRef } = React.useContext(FirmDetailDataContext)\n return (\n nextValues[name] !== prevValues[name]}>\n {(form) => (\n 0 ||\n ((form.getFieldValue(name) === null || form.getFieldValue(name) === undefined) &&\n rules &&\n rules.length > 0)\n ? 'error'\n : 'warning'\n : undefined\n // @ts-ignore\n //Object.keys(form.draft || {}).includes(name) || form.isFieldTouched(name) ? 'warning' : ''\n }\n style={{ flex: 1, display: 'flex', flexDirection: isVertical ? 'column' : undefined }}\n labelAlign={isVertical ? 'left' : undefined}\n {...{ labelCol: { span: labelCol }, wrapperCol: { span: wrapperCol } }}\n className={notConnected ? 'notConnected' : undefined}\n >\n \n \n )}\n \n )\n}\n\ntype PropsRadio = {\n label?: string | ReactNode\n name: string\n notConnected?: boolean\n options: { value: any; title: string }[]\n disabled?: boolean\n defaultValue?: string\n radioProps?: RadioProps\n}\nexport const FormItemRadio: React.FC> = ({\n label,\n name,\n notConnected,\n options,\n disabled,\n defaultValue,\n radioProps,\n ...rest\n}) => {\n const { dataFundDetailChange } = React.useContext(FundDetailDataContext)\n const { dataFirmDetailSubmitRef } = React.useContext(FirmDetailDataContext)\n return (\n nextValues[name] !== prevValues[name]}>\n {(form) => (\n \n 0\n ? 'error'\n : '#fffbe6'\n : undefined,\n // @ts-ignore\n //Object.keys(form.draft || {}).includes(name) || form.isFieldTouched(name) ? '#fffbe6' : undefined,\n borderRadius: 2,\n padding: 2,\n }}\n {...radioProps}\n >\n {options.map((o) => (\n \n {o.title}\n \n ))}\n \n \n )}\n \n )\n}\n\ntype PropsAutoComplete = {\n name: string\n label?: string | ReactNode\n options: {\n text: string\n value: string | number\n }[]\n labelCol?: number\n wrapperCol?: number\n notConnected?: boolean\n normalize?: string\n disable?: boolean\n isKeepOptions?: boolean\n rules?: Rule[]\n maxLength?: number\n}\nexport const FormItemAutoComplete: React.FC = ({\n name,\n options,\n labelCol,\n wrapperCol,\n label,\n notConnected,\n normalize,\n disable,\n rules,\n maxLength,\n}) => {\n const convertToNumber = (value: string) => (value ? parseInt(value.replace(/,0/g, '0')) : null)\n const convertToFloat = (value: string) => (value ? parseFloat(value.replace(/,0/g, '0')) : null)\n // const [isEdited, setIsEdited] = React.useState(false)\n\n const { dataFundDetailChange } = React.useContext(FundDetailDataContext)\n const { dataFirmDetailSubmitRef } = React.useContext(FirmDetailDataContext)\n\n // const numberClearCommas = (x: string) => {\n // return x.toString().replace(/,0/g, '0')\n // }\n\n return (\n nextValues[name] !== prevValues[name]}>\n {(form) => (\n 0 ||\n ((form.getFieldValue(name) === null || form.getFieldValue(name) === undefined) &&\n rules &&\n rules.length > 0)\n ? 'error'\n : 'warning'\n : undefined\n // @ts-ignore\n //Object.keys(form.draft || {}).includes(name) || form.isFieldTouched(name) ? 'warning' : ''\n }\n {...{ labelCol: { span: labelCol }, wrapperCol: { span: wrapperCol } }}\n normalize={normalize === 'number' ? convertToNumber : normalize === 'float' ? convertToFloat : undefined}\n className={notConnected ? 'notConnected' : undefined}\n rules={rules}\n >\n ({ value: item.value, label: item.text }))}\n allowClear\n // filterOption={(inputValue, option) => {\n // return true\n // if (investField) {\n // const numberValue = numberClearCommas(inputValue)\n // return isEdited ? option?.value.toUpperCase().indexOf(numberValue.toUpperCase()) !== -1 : true\n // }\n // return isKeepOptions\n // ? true\n // : option?.value.toString().toUpperCase().indexOf(inputValue.toString().toUpperCase()) !== -1\n // }}\n >\n \n \n \n )}\n \n )\n}\n","import { Col, Form, notification, Row, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\n\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n selectedFunds: string[]\n}\nexport const UpdateBenchmarkModal: React.FC = ({ isOpen, onRequestClose, selectedFunds }) => {\n const { invoke: getFundDetail, data: dataFundDetail } = useServiceState(\n APIService.fundDetailService.fetchFundBasicInfo,\n )\n\n const appData = useSelector((state: RootState) => state.appData)\n\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const { dataBenchmark } = React.useContext(FundDetailDropdownContext)\n\n const LIST_FORM = [\n {\n name: 'strategy_code_new',\n label: 'Strategy',\n options:\n appData?.strategies && appData?.strategies.length > 0\n ? appData.strategies.map((item) => ({\n value: item.strategy_code,\n text: item.strategy_name,\n }))\n : [],\n },\n {\n name: 'sub_strategy_code_new',\n label: 'Sub-Strategy',\n options:\n appData?.subStrategies && appData?.subStrategies.length > 0\n ? appData.subStrategies.map((item) => ({\n value: item.sub_strategy_code,\n text: item.sub_strategy_name,\n }))\n : [],\n },\n {\n name: 'region_inv_focus',\n label: 'Regional Focus',\n options:\n fundDataDropdown?.region_inv_focus && fundDataDropdown?.region_inv_focus.length > 0\n ? fundDataDropdown.region_inv_focus.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'fund_status_code',\n label: 'Fund Status Code',\n options:\n fundDataDropdown?.fund_status_code && fundDataDropdown?.fund_status_code.length > 0\n ? fundDataDropdown.fund_status_code.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n ]\n\n const [submitting, setSubmitting] = React.useState(false)\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (selectedFunds.length === 1) {\n getFundDetail(selectedFunds[0])\n }\n }, [getFundDetail, selectedFunds])\n\n React.useEffect(() => {\n if (selectedFunds.length === 1 && dataFundDetail) {\n const initialForm = {\n b1: dataFundDetail.benchmark1,\n b2: dataFundDetail.benchmark2,\n b3: dataFundDetail.benchmark3,\n strategy_code_new: dataFundDetail.strategy_code_new,\n sub_strategy_code_new: dataFundDetail.sub_strategy_code_new,\n region_inv_focus: dataFundDetail.region_inv_focus,\n fund_status_code: dataFundDetail.fund_status_code,\n }\n form.setFieldsValue(initialForm)\n } else {\n form.resetFields()\n }\n }, [dataFundDetail, form, selectedFunds])\n\n const handleSubmit = () => {\n setSubmitting(true)\n APIService.fundService\n .bulkUpdateFund({\n fund_ids: selectedFunds,\n b1: form.getFieldValue('b1'),\n b2: form.getFieldValue('b2'),\n b3: form.getFieldValue('b3'),\n strategy_code_new: +form.getFieldValue('strategy_code_new') || undefined,\n sub_strategy_code_new: +form.getFieldValue('sub_strategy_code_new') || undefined,\n region_inv_focus: +form.getFieldValue('region_inv_focus') || undefined,\n fund_status_code: form.getFieldValue('fund_status_code') || undefined,\n })\n .then(() => {\n notification.success({\n message: `${selectedFunds.length} funds updated!`,\n })\n onRequestClose()\n })\n .catch(() => {\n notification.error({ message: `Update Failed!` })\n })\n .finally(() => setSubmitting(false))\n }\n\n return (\n onRequestClose()}\n onOk={handleSubmit}\n confirmLoading={submitting}\n >\n \n {selectedFunds.length} funds selected\n \n
\n {dataBenchmark ? (\n <>\n \n
\n ({ text: item.fund_name, value: item.fund_id }))}\n loading={selectedFunds.length === 1 && !dataFundDetail}\n />\n \n \n ({ text: item.fund_name, value: item.fund_id }))}\n loading={selectedFunds.length === 1 && !dataFundDetail}\n />\n \n \n ({ text: item.fund_name, value: item.fund_id }))}\n loading={selectedFunds.length === 1 && !dataFundDetail}\n />\n \n \n \n {LIST_FORM.map((item) => {\n return (\n \n \n \n )\n })}\n \n \n ) : (\n \n )}\n \n \n )\n}\n","import { ReloadOutlined, SearchOutlined } from '@ant-design/icons'\nimport {\n Button,\n DatePicker,\n Dropdown,\n Input,\n Menu,\n notification,\n Pagination,\n Radio,\n Row,\n Select,\n Space,\n Tag,\n Tooltip,\n} from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport { SorterResult } from 'antd/lib/table/interface'\nimport JsFileDownload from 'js-file-download'\nimport moment from 'moment'\nimport React, { useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport { AnalysisGroupListProvider } from '../../../shared/api/context/AnalysisGroupListContext'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport {\n FilterInfoColumn,\n FundDropdownCodeType,\n FundDropdownType,\n FundSearchColumnResponse,\n FundSearchWhereParams,\n} from '../../../shared/api/models/FundDetails'\nimport { FilterTypeColumnTable } from '../../../shared/api/models/Funds'\nimport { Colors } from '../../../shared/colors'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { LeftNavFirmEnum } from '../../../shared/SearchFirmLabel'\nimport { LeftNavFundEnum } from '../../../shared/SearchFundLabel'\nimport GenUtil from '../../../shared/utils/gen-util'\nimport { addTabs, FundFirmTypeEnum } from '../../../slice/appSettingsSlice'\nimport AddToFavoritedModal from './AddToFavoritedModal'\nimport AddToIndexModal from './AddToIndexModal'\nimport AddToModal from './AddToModal'\nimport { FundSearchColumnContext } from './ColumnBuilder/FundSearchColumnContext'\nimport { FundSearchColumnPropsExtended } from './ColumnBuilder/FundSearchColumnSource'\nimport DeleteFundModal from './DeleteFundModal'\nimport { updateFundSearchParams } from './SearchForm/redux/searchParamsSlice'\nimport { UpdateBenchmarkModal } from './UpdateBenchmarkModal'\n\nconst Wrapper = styled.div`\n width: 100%;\n`\n\nconst FundFirmName = styled('span')`\n color: ${Colors.primary};\n cursor: pointer;\n`\nconst WrapperTable = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: column;\n\n .ant-table-container {\n border-bottom: solid 1px #f0f0f0;\n }\n .ant-table-fixed-left .ant-table-body-inner {\n overflow-x: hidden;\n }\n .ant-table-body {\n min-height: calc(100vh - 468px);\n }\n\n .ant-table-footer {\n padding: 16px 0 0 0;\n background: none;\n }\n`\n\nconst Footer = styled.div`\n display: flex;\n flex-direction: row;\n flex-wrap: wrap;\n justify-content: space-between;\n`\nconst FooterLeft = styled.div`\n margin-bottom: 8px;\n`\nconst FooterRight = styled.div`\n display: flex;\n justify-self: stretch;\n`\ntype ListTabType = {\n id: string\n name: string\n type: FundFirmTypeEnum\n}\n\ntype Props = { onChangeFavorited: () => void }\nexport const FundSearch: React.FC = ({ onChangeFavorited }) => {\n const { fundDataDropdown, dataMinoritySearch } = React.useContext(FundDetailDropdownContext)\n\n const { user } = useSelector((state: RootState) => state.user)\n\n const dispatch = useDispatch()\n // column section\n const { dataAllColumns, loading: allColumnLoading, defaultColumns } = React.useContext(FundSearchColumnContext)\n const { fundSearchColumns } = useSelector((state: RootState) => state.appSettings)\n\n const columns = React.useMemo(() => {\n return dataAllColumns && fundSearchColumns.length\n ? fundSearchColumns.reduce((acc, currKey) => {\n const foundColumnKey = Object.keys(dataAllColumns).find((item) => item === currKey)\n if (foundColumnKey) {\n const currColumn = {\n title: dataAllColumns[foundColumnKey].human_readable_name,\n dataIndex: foundColumnKey,\n key: foundColumnKey,\n filter_type: dataAllColumns[foundColumnKey].filter_type,\n sorter: true,\n }\n return [...acc, currColumn]\n }\n return acc\n }, [] as FundSearchColumnPropsExtended[])\n : defaultColumns\n }, [dataAllColumns, defaultColumns, fundSearchColumns])\n\n //Fetch Legacy-Strategy\n const { invoke: getLegacyStrategy, data: dataLegacy } = useServiceState(\n APIService.fundDetailService.fetchLegacyStrategy,\n )\n const { invoke: getAsiStrategy, data: dataAsi } = useServiceState(APIService.fundDetailService.fetchAsiStrategy)\n\n React.useEffect(() => {\n getLegacyStrategy()\n getAsiStrategy()\n }, [getAsiStrategy, getLegacyStrategy])\n\n const searchInput = React.useRef(null)\n const appData = useSelector((state: RootState) => state.appData)\n\n const [page, setPage] = React.useState(1)\n const [pageSize, setPageSize] = React.useState(25)\n\n const [selectedFundIds, setSelectedFundIds] = React.useState()\n const [selectedFundName, setSelectedFundName] = React.useState()\n const [loadingExport, setLoadingExport] = React.useState(false)\n\n const [showAddToGroup, setShowAddToGroup] = React.useState(false)\n const [showAddToIndex, setShowAddToIndex] = React.useState(false)\n const [showAddToFavorited, setShowAddToFavorited] = React.useState(false)\n const [showUpdateBenchmark, setShowUpdateBenchmark] = React.useState(false)\n const [selectedFundsAddFavorited, setSelectedFundsAddFavorited] = React.useState<\n { fund_id: string; fund_name: string }[]\n >()\n\n const [showDeleteFund, setShowDeleteFund] = React.useState(false)\n\n const [sortBy, setSortBy] = React.useState()\n const [orderBy, setOrderBy] = React.useState()\n\n const { fundSearchParams: fundSearchParamsRedux } = useSelector((state: RootState) => state.searchParams)\n\n const filteredInfo = React.useMemo(() => {\n if (Object.keys(fundSearchParamsRedux).length === 0) {\n return {}\n }\n const filtered = Object.keys(fundSearchParamsRedux).reduce((acc, key) => {\n if (key === 'is_minority_owned_firm' || key === 'is_minority_managed_fund') {\n return acc\n }\n\n return { ...acc, [key]: fundSearchParamsRedux[key as keyof FilterInfoColumn]?.value }\n }, {} as FilterInfoColumn)\n return filtered\n }, [fundSearchParamsRedux])\n\n const { invoke: searchFunds, data: fundData, loading } = useServiceState(APIService.fundService.searchFunds)\n\n const { data: allFundIds, invoke: invokeSearchFundIds } = useServiceState(\n APIService.fundService.fetchFundSearchAllFundId,\n )\n\n const handlePageSizeChange = (current: number, size: number) => {\n setPageSize(size)\n if (current !== 1) {\n setPage(1)\n }\n }\n\n const handleTableChange = (sorter: SorterResult) => {\n setSortBy(sorter.order ? sorter.columnKey?.toString() : undefined)\n setOrderBy(sorter.order ? (sorter.order === 'ascend' ? 'ASC' : 'DESC') : undefined)\n }\n\n const fundSearchParams = React.useMemo(() => {\n setPage(1)\n if (Object.keys(filteredInfo).length === 0) {\n return {}\n }\n const searchParams: Partial = Object.keys(filteredInfo).reduce((acc, key) => {\n if (filteredInfo[key as keyof FilterInfoColumn] && dataAllColumns && dataAllColumns[key]?.filter_type) {\n if (\n [\n 'sub_strategy_code_new',\n 'strategy_code_new',\n 'fund_status_code_code',\n 'region_inv_focus_code',\n 'region_inv_focus_country_code',\n ].includes(key)\n ) {\n return { ...acc, [key]: filteredInfo[key as keyof FilterInfoColumn] }\n }\n if (['fund_cmic', 'has_securities'].includes(key)) {\n return { ...acc, [key]: filteredInfo[key as keyof FilterInfoColumn] }\n }\n switch (dataAllColumns[key].filter_type) {\n case 'boolean':\n return {\n ...acc,\n [key]: filteredInfo[key as keyof FilterInfoColumn]?.[0],\n }\n case 'date':\n case 'year_month':\n const lteDate = filteredInfo[key as keyof FilterInfoColumn]?.[1]\n const gteDate = filteredInfo[key as keyof FilterInfoColumn]?.[0]\n return {\n ...acc,\n [key]: {\n lte: lteDate && lteDate !== '' ? lteDate : undefined,\n gte: gteDate && gteDate !== '' ? gteDate : undefined,\n },\n }\n case 'string_search':\n if (dataAllColumns[key].supports_exact_match === true) {\n const type = fundSearchParamsRedux[key].type\n if (type === 'contains') {\n return { ...acc, [key]: { contains: filteredInfo[key as keyof FilterInfoColumn]?.[0] } }\n }\n if (type === 'equals') {\n return { ...acc, [key]: { equals: filteredInfo[key as keyof FilterInfoColumn]?.[0] } }\n }\n return acc\n }\n return { ...acc, [key]: filteredInfo[key as keyof FilterInfoColumn]?.[0] }\n\n case 'multiselect':\n return { ...acc, [key]: filteredInfo[key as keyof FilterInfoColumn] }\n case 'numeric':\n const lte = filteredInfo[key as keyof FilterInfoColumn]?.[1]\n const gte = filteredInfo[key as keyof FilterInfoColumn]?.[0]\n return {\n ...acc,\n [key]: {\n lte: lte && lte !== '' ? Number(lte) : undefined,\n gte: gte && gte !== '' ? Number(gte) : undefined,\n },\n }\n case 'array_anyof':\n const type = fundSearchParamsRedux[key].type\n if (type === 'array_anyof') {\n return { ...acc, [key]: { array_anyof: filteredInfo[key as keyof FilterInfoColumn] } }\n }\n // case 'year_month':\n // return { ...acc, [key]: { lte: filteredInfo[key as keyof FilterInfoColumn]?.[0] } }\n default:\n break\n }\n }\n // skip\n return acc\n }, {})\n return searchParams\n }, [dataAllColumns, filteredInfo, fundSearchParamsRedux])\n\n React.useEffect(() => {\n if (!dataAllColumns) {\n return\n }\n searchFunds({\n where: Object.keys(fundSearchParams).length > 0 ? fundSearchParams : undefined,\n peer_group_code:\n filteredInfo.peer_group_code && filteredInfo.peer_group_code.length > 0\n ? filteredInfo.peer_group_code\n : undefined,\n page,\n limit: pageSize,\n sort_by: sortBy,\n order_by: orderBy,\n columns: fundSearchColumns,\n })\n invokeSearchFundIds({\n where: fundSearchParams,\n peer_group_code:\n filteredInfo.peer_group_code && filteredInfo.peer_group_code.length > 0\n ? filteredInfo.peer_group_code\n : undefined,\n })\n }, [\n dataAllColumns,\n fundSearchParams,\n searchFunds,\n invokeSearchFundIds,\n orderBy,\n page,\n pageSize,\n sortBy,\n fundSearchColumns,\n filteredInfo,\n ])\n\n const exportFundSearch = async () => {\n setLoadingExport(true)\n try {\n const res = await APIService.fundService.postDownloadFile({\n file_type: 'MANAGER_LINK_INTERNAL_FUND_SEARCH_EXPORT',\n data: {\n where: Object.keys(fundSearchParams).length > 0 ? fundSearchParams : undefined,\n peer_group_code:\n filteredInfo.peer_group_code && filteredInfo.peer_group_code.length > 0\n ? filteredInfo.peer_group_code\n : undefined,\n columns: fundSearchColumns,\n },\n })\n\n const resFile = await APIService.fundService.downloadFileByUrl(res.data.url)\n JsFileDownload(resFile.data, 'search-results.csv', 'application/csv')\n } catch (error) {\n console.log(error.response)\n notification.error({ message: 'Failed to export Funds!' })\n } finally {\n setLoadingExport(false)\n }\n }\n\n const refetch = () => {\n searchFunds({\n where: Object.keys(fundSearchParams).length > 0 ? fundSearchParams : undefined,\n peer_group_code:\n filteredInfo.peer_group_code && filteredInfo.peer_group_code.length > 0\n ? filteredInfo.peer_group_code\n : undefined,\n page,\n limit: pageSize,\n sort_by: sortBy,\n order_by: orderBy,\n columns: fundSearchColumns,\n })\n invokeSearchFundIds({\n where: fundSearchParams,\n peer_group_code:\n filteredInfo.peer_group_code && filteredInfo.peer_group_code.length > 0\n ? filteredInfo.peer_group_code\n : undefined,\n })\n }\n\n const handleClearAllFilter = () => {\n dispatch(updateFundSearchParams({}))\n }\n const removeFromFilter = (dataIndex: string, clearFilters?: (() => void) | undefined) => {\n const editedSearch = Object.keys(fundSearchParamsRedux).reduce((acc, key) => {\n if (key === dataIndex) {\n return acc\n }\n return { ...acc, [key]: fundSearchParamsRedux[key] }\n }, {})\n dispatch(updateFundSearchParams(editedSearch))\n clearFilters && clearFilters()\n }\n\n const addToFilter = (dataIndex: string, selectedKeys: React.ReactText[], confirm: (() => void) | undefined) => {\n dispatch(\n updateFundSearchParams({\n ...fundSearchParamsRedux,\n [dataIndex]: { value: selectedKeys as string[] },\n }),\n )\n confirm && confirm()\n }\n\n const getColumnSearchProps = (\n dataIndex: string,\n filterType: FilterTypeColumnTable,\n ): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => {\n const optionsDropdown = (fundDataDropdown && fundDataDropdown[dataIndex as keyof FundDropdownType]) || []\n // Hard-coded cases\n if (\n [\n 'sub_strategy_code_new',\n 'strategy_code_new',\n 'fund_status_code_code',\n 'region_inv_focus_code',\n 'region_inv_focus_country_code',\n ].includes(dataIndex)\n ) {\n let codeOptions: { label: string; value: string }[] = []\n switch (dataIndex) {\n case 'strategy_code_new':\n if (!appData?.strategies || !appData?.strategies?.length) {\n return\n }\n codeOptions = appData.strategies.map((item) => ({\n value: item.strategy_code.toString(),\n label: item.strategy_code.toString(),\n }))\n break\n case 'sub_strategy_code_new':\n if (!appData || !appData.subStrategies || !appData.subStrategies.length) {\n return\n }\n const uniqueSubStrategy = new Set(\n appData.subStrategies.map((item) => {\n return item.sub_strategy_code\n }),\n )\n uniqueSubStrategy.forEach((item) =>\n codeOptions.push({\n value: item.toString(),\n label: item.toString(),\n }),\n )\n break\n case 'region_inv_focus_code':\n codeOptions = fundDataDropdown\n ? fundDataDropdown.region_inv_focus.map((item) => ({\n value: item.code_code,\n label: item.code_code,\n }))\n : []\n break\n case 'region_inv_focus_country_code':\n codeOptions = fundDataDropdown\n ? fundDataDropdown.region_inv_focus_country.map((item) => ({\n value: item.code_code,\n label: item.code_code,\n }))\n : []\n break\n case 'fund_status_code_code':\n codeOptions = fundDataDropdown\n ? fundDataDropdown.fund_status_code.map((item) => ({\n value: item.code_code,\n label: item.code_code,\n }))\n : []\n break\n default:\n break\n }\n return (\n \n \n setSelectedKeys(e as string[])}\n options={codeOptions}\n showSearch\n filterOption={(input, option: any) => {\n return option.label.toLowerCase().includes(input.toLowerCase())\n }}\n />\n {\n if (selectedKeys.length > 0) {\n return addToFilter(dataIndex, selectedKeys, confirm)\n }\n return removeFromFilter(dataIndex, clearFilters)\n }}\n icon={}\n />\n \n {\n dispatch(\n updateFundSearchParams({\n ...fundSearchParamsRedux,\n [dataIndex]: { value: selectedKeys as string[], type: 'contains' },\n }),\n )\n\n confirm && confirm()\n }}\n >\n Partial\n \n \n \n \n \n )\n case 'date':\n return (\n
\n {\n setSelectedKeys([e ? moment(e).format('YYYY-MM-DD') : '', selectedKeys[1]])\n }}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n {\n setSelectedKeys([selectedKeys[0], e ? moment(e).format('YYYY-MM-DD') : ''])\n }}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n addToFilter(dataIndex, selectedKeys, confirm)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n
\n )\n\n case 'multiselect':\n let options: { label: string; value: string }[] = []\n switch (dataIndex) {\n case 'firm_denomination':\n case 'denomination':\n options = (optionsDropdown as Array).map((item) => ({\n value: item.code_code,\n label: item.code_code,\n }))\n break\n case 'strategy_new':\n if (!appData?.strategies || !appData?.strategies.length) {\n return\n }\n options = appData.strategies.map((item) => ({\n value: item.strategy_name.toString(),\n label: item.strategy_name.toString(),\n }))\n break\n case 'strategy':\n if (!dataLegacy?.legacy_strategies || !dataLegacy?.legacy_strategies?.length) {\n return\n }\n options = dataLegacy.legacy_strategies.map((item) => ({\n value: item.strategy_code.toString(),\n label: item.strategy_name.toString(),\n }))\n break\n case 'sub_strategy':\n if (!dataLegacy?.sub_strategies || !dataLegacy?.sub_strategies?.length) {\n return\n }\n const uniqueSubStrategy = new Set(\n dataLegacy.sub_strategies.map((item) => {\n return item.sub_strategy_name\n }),\n )\n uniqueSubStrategy.forEach((item) => options.push({ value: item, label: item }))\n\n break\n case 'sub_strategy_new':\n if (!appData?.subStrategies || !appData?.subStrategies.length) {\n return\n }\n const uniqueNewSubStrategy = new Set(\n appData.subStrategies.map((item) => {\n return item.sub_strategy_name\n }),\n )\n uniqueNewSubStrategy.forEach((item) => options.push({ value: item, label: item }))\n\n break\n case 'asi_strategy':\n if (!dataAsi?.asi_strategies || !dataAsi?.asi_strategies?.length) {\n return\n }\n options = dataAsi?.asi_strategies.map((item) => ({\n value: item.name,\n label: item.name,\n }))\n break\n case 'asi_sub_strategy':\n if (!dataAsi?.asi_sub_strategies || !dataAsi?.asi_sub_strategies?.length) {\n return\n }\n const uniqueAsiSubStrategy = new Set(\n dataAsi?.asi_sub_strategies.map((item) => {\n return item.name\n }),\n )\n uniqueAsiSubStrategy.forEach((item) => options.push({ value: item, label: item }))\n\n break\n case 'esg_strategy':\n if (!appData?.esgStrategies || !appData?.esgStrategies?.length) {\n return\n }\n const uniqueESGStrategy = new Set(appData.esgStrategies.map((item) => item.name))\n uniqueESGStrategy.forEach((item) => options.push({ value: item, label: item }))\n break\n case 'esg_sub_strategy':\n if (!appData?.esgSubStrategies || !appData?.esgSubStrategies?.length) {\n return\n }\n const uniqueESGSubStrategy = new Set(appData.esgSubStrategies.map((item) => item.name))\n uniqueESGSubStrategy.forEach((item) => options.push({ value: item, label: item }))\n break\n default:\n options = (optionsDropdown as Array).map((item) =>\n typeof item === 'string'\n ? { value: item, label: item }\n : { value: item.code_description, label: item.code_description },\n )\n }\n\n return (\n \n \n setSelectedKeys(e as string[])}\n options={options}\n />\n {\n if (selectedKeys.length > 0) {\n return addToFilter(dataIndex, selectedKeys, confirm)\n }\n return removeFromFilter(dataIndex, clearFilters)\n }}\n icon={}\n />\n \n \n \n \n )\n case 'year_month':\n return (\n
\n {\n setSelectedKeys([e ? moment(e).format('YYYY-MM') : '', selectedKeys[1]])\n }}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n {\n setSelectedKeys([selectedKeys[0], e ? moment(e).format('YYYY-MM') : ''])\n }}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n addToFilter(dataIndex, selectedKeys, confirm)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n />\n\n removeFromFilter(dataIndex, clearFilters)}\n size=\"small\"\n style={{ width: 90 }}\n icon={}\n />\n \n
\n )\n default:\n break\n }\n },\n\n filterIcon: (filtered) => ,\n onFilterDropdownVisibleChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput && searchInput.current && searchInput.current.select())\n }\n },\n })\n\n const handleClearAll = () => {\n setSelectedFundIds([])\n }\n\n const handleSelectAll = () => {\n if (!fundData || !allFundIds) {\n return\n }\n setSelectedFundIds(allFundIds.fund_ids)\n }\n const handleAddTo = () => {\n setShowAddToGroup(true)\n }\n\n const handleAddToIndex = () => {\n setShowAddToIndex(true)\n }\n const handleAddToFavorited = () => {\n setShowAddToFavorited(true)\n }\n\n const renderAddToList = () => (\n {\n if (e.key === '1') {\n handleAddTo()\n return\n }\n if (e.key === '2') {\n handleAddToIndex()\n return\n }\n if (e.key === '3') {\n handleAddToFavorited()\n }\n }}\n >\n Add To Group\n Add To Index\n Add To Favorited\n \n )\n\n return (\n \n \n
\n {Object.keys(filteredInfo).map((item) => {\n if (item === 'peer_group_code') {\n return\n }\n const value = filteredInfo[item as keyof FilterInfoColumn]\n if (!value || !dataAllColumns || !dataAllColumns[item]) {\n return\n }\n\n if (\n [\n 'sub_strategy_code_new',\n 'strategy_code_new',\n 'fund_status_code_code',\n 'region_inv_focus_code',\n 'region_inv_focus_country_code',\n ].includes(item)\n ) {\n const tagValue = value.join(', ')\n return (\n {\n e.stopPropagation()\n removeFromFilter(item)\n }}\n >\n {dataAllColumns[item].human_readable_name}: \n \n {tagValue.length > 50 ? `${tagValue.slice(0, 50)}...` : tagValue || null}\n \n \n )\n }\n if (typeof value[0] === 'boolean') {\n return (\n {\n e.stopPropagation()\n removeFromFilter(item)\n // dispatch(updateSearchParams({ ...fundSearchParamsRedux, [item]: null }))\n }}\n >\n {dataAllColumns[item].human_readable_name}: \n {value[0] === true ? 'Yes' : 'No'}\n \n )\n }\n if (dataAllColumns[item]?.filter_type === 'numeric' || dataAllColumns[item]?.filter_type === 'date') {\n return (\n {\n e.stopPropagation()\n removeFromFilter(item)\n // dispatch(updateSearchParams({ ...fundSearchParamsRedux, [item]: null }))\n }}\n >\n {dataAllColumns[item].human_readable_name}: \n\n {value[0] && value[0] !== '' ? value[0] : 'N/A'}\n {value[1] && value[1] !== '' ? ' - ' + value[1] : ' - N/A'}\n \n )\n }\n if (dataAllColumns[item]?.supports_exact_match === true) {\n const type = fundSearchParamsRedux[item].type\n const tagValue = value.join(', ')\n return tagValue.length > 50 ? (\n \n {\n e.stopPropagation()\n removeFromFilter(item)\n }}\n >\n {dataAllColumns[item].human_readable_name}: \n {type && [{type.toUpperCase()}] }\n {tagValue.length > 50 ? `${tagValue.slice(0, 50)}...` : tagValue || null}\n \n \n ) : (\n {\n e.stopPropagation()\n removeFromFilter(item)\n }}\n >\n {dataAllColumns[item].human_readable_name}: \n {type && [{type.toUpperCase()}] }\n {tagValue || null}\n \n )\n }\n const tagValue = value.join(', ')\n return (\n {\n e.stopPropagation()\n removeFromFilter(item)\n }}\n >\n {dataAllColumns[item]?.human_readable_name}: \n \n {tagValue.length > 50 ? `${tagValue.slice(0, 50)}...` : tagValue || null}\n \n \n )\n })}\n {Object.keys(filteredInfo).filter((item) => !!filteredInfo[item as keyof FilterInfoColumn]).length > 1 && (\n \n )}\n
\n\n {\n handleTableChange(sorter)\n }}\n size=\"small\"\n scroll={{ y: 'calc(100vh - 468px)', x: 'min-content' }}\n rowSelection={{\n selectedRowKeys: selectedFundIds,\n onChange: (_, selectedRows) => {\n setSelectedFundIds(selectedRows.map((row) => row.fund_id))\n if (selectedRows.length === 1) {\n setSelectedFundName(selectedRows[0].fund_name)\n }\n setSelectedFundsAddFavorited(\n selectedRows.map((row) => ({ fund_id: row.fund_id, fund_name: row.fund_name })),\n )\n },\n }}\n footer={(record) =>\n record.length > 0 ? (\n
\n \n \n \n \n \n \n \n \n setShowUpdateBenchmark(true)}\n >\n Bulk Update\n \n \n {user?.can_delete_fund && (\n \n )}\n \n {showAddToGroup && selectedFundIds && (\n \n setShowAddToGroup(false)}\n />\n \n )}\n {showAddToIndex && selectedFundIds && (\n setShowAddToIndex(false)}\n />\n )}\n {showAddToFavorited && selectedFundsAddFavorited && (\n setShowAddToFavorited(false)}\n />\n )}\n {showUpdateBenchmark && selectedFundIds && (\n setShowUpdateBenchmark(false)}\n />\n )}\n {showDeleteFund && selectedFundIds && selectedFundName && selectedFundIds.length === 1 && (\n setShowDeleteFund(false)}\n onSubmitDeleting={() => {\n setSelectedFundIds(undefined)\n setSelectedFundName(undefined)\n refetch()\n }}\n />\n )}\n \n \n \n `${range[0]}-${range[1]} of ${total} items`}\n onChange={(currentPage) => setPage(currentPage)}\n total={fundData ? fundData.total : 0}\n current={page}\n pageSize={pageSize}\n pageSizeOptions={['10', '25', '50', '100']}\n onShowSizeChange={handlePageSizeChange}\n />\n \n
\n ) : null\n }\n columns={\n columns && columns.length\n ? columns.map((item, columnIndex) => {\n if (item.key === 'fund_id' || item.key === 'firm_id') {\n return {\n ...item,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n sorter: item.sorter,\n fixed: columnIndex === 0,\n width: item.width || 200,\n ellipsis: true,\n ...getColumnSearchProps(item.key, item.filter_type),\n }\n }\n if (item.key === 'fund_name') {\n return {\n ...item,\n sorter: true,\n width: 200,\n fixed: columnIndex === 0,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: string) => {text},\n onCell: (record: FundSearchColumnResponse) => ({\n onClick: () => {\n dispatch(\n addTabs({ name: record.fund_name, id: record.fund_id, type: FundFirmTypeEnum.FUNDS }),\n )\n },\n }),\n }\n } else if (item.key === 'firm_name') {\n return {\n ...item,\n sorter: true,\n width: 200,\n fixed: columnIndex === 0,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: string) => {text},\n onCell: (record: FundSearchColumnResponse) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.firm_name,\n id: record.firm_id,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n }),\n )\n },\n }),\n }\n }\n if (item.key === 'firm_assets') {\n return {\n ...item,\n width: 150,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: number, record: FundSearchColumnResponse) => (\n \n {text\n ? Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: record.firm_denomination || 'USD',\n maximumFractionDigits: 0,\n minimumFractionDigits: 0,\n }).format(text)\n : ''}\n \n ),\n onCell: (record: FundSearchColumnResponse) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.firm_name,\n id: record.firm_id,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n path: LeftNavFirmEnum.FIRM_ASSETS,\n }),\n )\n },\n }),\n }\n }\n if (item.key === 'fund_assets') {\n return {\n ...item,\n width: 150,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: number, record: FundSearchColumnResponse) => (\n \n {text && record.denomination\n ? Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: record.denomination,\n maximumFractionDigits: 3,\n minimumFractionDigits: 3,\n }).format(text)\n : text\n ? text.toFixed(3)\n : ''}\n \n ),\n onCell: (record: FundSearchColumnResponse) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: record.fund_id,\n type: FundFirmTypeEnum.FUNDS,\n path: LeftNavFundEnum.PERFORMANCE,\n hyperlinkTable: item.key,\n }),\n )\n },\n }),\n }\n }\n if (item.key === 'fund_assets_date') {\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: number) => {text},\n onCell: (record: FundSearchColumnResponse) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: record.fund_id,\n type: FundFirmTypeEnum.FUNDS,\n path: LeftNavFundEnum.PERFORMANCE,\n hyperlinkTable: item.key,\n }),\n )\n },\n }),\n }\n }\n if (item.key === 'latest_ror' || item.key === 'latest_ror_date') {\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: number) => {text},\n onCell: (record: FundSearchColumnResponse) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_id,\n id: record.fund_id,\n type: FundFirmTypeEnum.FUNDS,\n path: LeftNavFundEnum.PERFORMANCE,\n hyperlinkTable: item.key,\n }),\n )\n },\n }),\n }\n }\n if (item.key === 'is_fund_esg') {\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: string) => {text},\n onCell: (record: FundSearchColumnResponse) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: record.fund_id,\n type: FundFirmTypeEnum.FUNDS,\n path: LeftNavFundEnum.FUND_ESG,\n hyperlinkTable: 'fund_esg',\n }),\n )\n },\n }),\n }\n }\n if (item.key === 'is_firm_esg') {\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: string) => {text},\n onCell: (record: FundSearchColumnResponse) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.firm_name,\n id: record.firm_id,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n path: LeftNavFirmEnum.FIRM_ESG,\n hyperlinkTable: 'firm_esg',\n }),\n )\n },\n }),\n }\n }\n if (item.key === 'fund_cmic') {\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: string) => {text},\n onCell: (record: FundSearchColumnResponse) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: record.fund_id,\n type: FundFirmTypeEnum.FUNDS,\n path: LeftNavFundEnum.EXECUTIVE_ORDERS,\n }),\n )\n },\n }),\n }\n }\n if (item.key === 'firm_ccmc') {\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: string) => {text},\n onCell: (record: FundSearchColumnResponse) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.firm_name,\n id: record.firm_id,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n path: LeftNavFirmEnum.EXECUTIVE_ORDERS,\n }),\n )\n },\n }),\n }\n }\n if (item.filter_type === 'boolean') {\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (value: boolean | undefined) => {\n if (value) {\n return 'Yes'\n }\n if (value === false) {\n return 'No'\n }\n return null\n },\n }\n }\n if (item.filter_type === 'year_month') {\n return {\n ...item,\n sorter: true,\n width: 200,\n fixed: columnIndex === 0,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (date: string | undefined) => {\n return date ? GenUtil.getFormattedYearAndMonth(date) : null\n },\n }\n }\n if (item.filter_type === 'date') {\n return {\n ...item,\n sorter: true,\n width: 200,\n fixed: columnIndex === 0,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (date: string | undefined) => {\n return date ? GenUtil.getFormattedYearMonthAndDay(date) : null\n },\n }\n }\n return {\n ...item,\n sorter: true,\n width: 200,\n fixed: columnIndex === 0,\n filteredValue: filteredInfo[item.key as keyof FilterInfoColumn] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n }\n })\n : []\n }\n />\n
\n
\n )\n}\n","import { Button, Col, Collapse, Input, Modal, notification, Row, Space } from 'antd'\nimport React, { CSSProperties, useMemo } from 'react'\nimport {\n DragDropContext,\n Draggable,\n DraggableLocation,\n DraggingStyle,\n Droppable,\n DropResult,\n NotDraggingStyle,\n} from 'react-beautiful-dnd'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../../app/rootReducer'\nimport { Colors } from '../../../../shared/colors'\nimport { LoadingDetails } from '../../../../shared/components/LoadingDetails'\nimport { updateFundSearchColumns } from '../../../../slice/appSettingsSlice'\nimport { FundSearchColumnContext } from './FundSearchColumnContext'\nimport { FundSearchColumnPropsExtended, FundSearchColumnSource } from './FundSearchColumnSource'\n\nconst Wrapper = styled.div`\n max-height: 90vh;\n`\n\nenum DroppableIds {\n TargetColumns = 'targetColumns',\n SourceColumns = 'sourceColumns',\n}\n\nconst { Panel } = Collapse\n\nconst grid = 8\n\nconst getListStyle = (isDraggingOver: boolean) => ({\n background: isDraggingOver ? 'lightblue' : 'lightgrey',\n borderRadius: '5px',\n padding: grid,\n minHeight: '100%',\n})\n\nconst getItemStyle = (\n isDragging: boolean,\n draggableStyle: DraggingStyle | NotDraggingStyle | undefined,\n): CSSProperties => ({\n // some basic styles to make the items look a bit nicer\n userSelect: 'none',\n padding: grid * 2,\n\n // change background colour if dragging\n background: isDragging ? Colors.primary : 'white',\n border: `1px solid ${Colors.primary}`,\n borderRadius: '5px',\n marginBottom: '3px',\n\n // styles we need to apply on draggables\n ...draggableStyle,\n})\n\nconst reorder = (list: FundSearchColumnPropsExtended[] | undefined, startIndex: number, endIndex: number) => {\n if (!list || !list.length) {\n return []\n }\n const result = Array.from(list)\n const [removed] = result.splice(startIndex, 1)\n result.splice(endIndex, 0, removed)\n\n return result\n}\n\nconst remove = (target: FundSearchColumnPropsExtended[], startIndex: number) => {\n const results = Array.from(target)\n results.splice(startIndex, 1)\n return results\n}\n\nconst move = (\n source: FundSearchColumnSource[],\n destination: unknown[],\n droppableSource: DraggableLocation,\n droppableDestination: DraggableLocation,\n) => {\n const sourceClone = source.reduce(\n (s, i) => (i.columns ? [...s, ...i.columns] : s),\n [],\n )\n\n const destClone = Array.from(destination)\n const [removed] = sourceClone.splice(droppableSource.index - 1, 1)\n destClone.splice(droppableDestination.index, 0, removed)\n\n return {\n [droppableSource.droppableId]: sourceClone,\n [droppableDestination.droppableId]: destClone,\n }\n}\n\ninterface HeaderGroupProps {\n groupName: string\n onAddAll: () => void\n}\n\nconst Flex = styled('div')`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`\n\nconst HeaderGroup: React.FC = ({ groupName, onAddAll }) => {\n return (\n \n {groupName}\n \n \n )\n}\n\ninterface Props {\n isOpen: boolean\n setOpen: (isOpen: boolean) => void\n}\n\nconst FundSearchColumnBuilder: React.FC = ({ isOpen, setOpen }) => {\n const { dataAllColumns: dataAllColumn, loading, defaultColumns } = React.useContext(FundSearchColumnContext)\n const { fundSearchColumns } = useSelector((state: RootState) => state.appSettings)\n const [textColumnSearch, setTextColumnSearch] = React.useState('')\n const dispatch = useDispatch()\n const [activePanels, setActivePanels] = React.useState([])\n\n const fundSearchAllColumns: FundSearchColumnSource[] = React.useMemo(() => {\n if (!dataAllColumn) {\n return []\n }\n return Object.keys(dataAllColumn).reduce((acc, curr) => {\n const currentColumn = dataAllColumn[curr]\n // TODO: Refactor to reduce complexity\n const foundIndex = acc.findIndex((item) => item.groupName === currentColumn.section)\n if (foundIndex === -1) {\n return [\n ...acc,\n {\n groupName: currentColumn.section,\n columns: [\n {\n title: currentColumn.human_readable_name,\n dataIndex: curr,\n key: curr,\n filter_type: currentColumn.filter_type,\n sorter: true,\n },\n ],\n },\n ]\n }\n\n return [\n ...acc.slice(0, foundIndex),\n {\n ...acc[foundIndex],\n columns: [\n ...acc[foundIndex].columns,\n {\n title: currentColumn.human_readable_name,\n dataIndex: curr,\n key: curr,\n filter_type: currentColumn.filter_type,\n sorter: true,\n },\n ],\n },\n ...acc.slice(foundIndex + 1, acc.length),\n ]\n }, [] as FundSearchColumnSource[])\n }, [dataAllColumn])\n\n const flattenAllColumns = fundSearchAllColumns && fundSearchAllColumns.flatMap((item) => item.columns)\n const fundColumns = fundSearchColumns\n ? fundSearchColumns.reduce((acc, currKey) => {\n const foundColumn = flattenAllColumns.find((item) => item.key === currKey)\n if (foundColumn) {\n return [...acc, foundColumn]\n }\n return acc\n }, [] as FundSearchColumnPropsExtended[])\n : defaultColumns\n\n const [targetColumns, setTargetColumns] = React.useState(\n fundColumns.length ? fundColumns : defaultColumns,\n )\n\n const sourceColumns = useMemo(() => {\n if (textColumnSearch !== '') {\n return fundSearchAllColumns.map((i) => ({\n ...i,\n columns: i.columns.filter(\n (c) =>\n c.title?.toString().toLowerCase().includes(textColumnSearch.toLowerCase()) &&\n !targetColumns.some((t) => t.key === c.key),\n ),\n }))\n }\n return fundSearchAllColumns.map((i) => ({\n ...i,\n columns: i.columns.filter((c) => !targetColumns.some((t) => t.key === c.key)),\n }))\n }, [fundSearchAllColumns, targetColumns, textColumnSearch])\n\n React.useEffect(() => {\n textColumnSearch && setActivePanels(sourceColumns.map((item) => item.groupName))\n }, [sourceColumns, textColumnSearch])\n\n const onDragEnd = (result: DropResult) => {\n const { source, destination } = result\n\n if (!destination) {\n return\n }\n\n if (source.droppableId === DroppableIds.TargetColumns && destination.droppableId !== DroppableIds.TargetColumns) {\n const result = remove(targetColumns, source.index)\n\n setTargetColumns(result)\n return\n }\n\n if (source.droppableId === DroppableIds.SourceColumns && destination.droppableId === DroppableIds.TargetColumns) {\n const result = move(sourceColumns, targetColumns, source, destination)\n\n setTargetColumns(result[DroppableIds.TargetColumns] as FundSearchColumnPropsExtended[])\n return\n }\n\n if (source.droppableId === DroppableIds.TargetColumns && destination.droppableId === DroppableIds.TargetColumns) {\n const result = reorder(targetColumns, source.index, destination.index)\n\n setTargetColumns(result)\n return\n }\n }\n\n const uniqueColumns = (columns: FundSearchColumnPropsExtended[]) =>\n Array.from(new Set(columns.map((item) => item.key))).map((key) => {\n return columns.find((item) => item.key === key) as FundSearchColumnPropsExtended\n })\n\n const handleAddGroupColumns = (columns: FundSearchColumnPropsExtended[]) => {\n setTargetColumns(uniqueColumns([...targetColumns, ...columns]))\n }\n\n const handleSubmit = () => {\n dispatch(updateFundSearchColumns(targetColumns.map((item) => item.key)))\n notification.success({ message: 'Updated columns successfully!', placement: 'bottomLeft' })\n setOpen(false)\n }\n\n const handleReset = () => {\n setTargetColumns(defaultColumns)\n }\n\n const handleAddAll = () => {\n const flatenColumns = fundSearchAllColumns.flatMap((item) => item.columns)\n setTargetColumns(uniqueColumns(flatenColumns))\n }\n\n return (\n setOpen(false)}\n >\n {!loading && (\n \n \n \n
\n setTextColumnSearch(e.target.value)} />\n
\n
\n \n
\n

\n Displayed Columns\n \n

\n \n {({ innerRef, placeholder }, snapshot) => {\n return (\n
\n {targetColumns &&\n targetColumns.map((targetCol, index) => (\n \n {(provided, snapshot) => (\n \n {targetCol.title}\n
\n )}\n \n ))}\n {placeholder}\n \n )\n }}\n
\n \n \n

\n All Columns\n \n \n activePanels.length > 0\n ? setActivePanels([])\n : setActivePanels(sourceColumns.map((source) => source.groupName))\n }\n >\n {activePanels.length > 0 ? 'Collapse all' : 'Expand all'}\n \n \n \n

\n \n {({ innerRef, placeholder }, snapshot) => {\n let draggableIndex = 0\n\n return (\n
\n {\n setActivePanels(key as string[])\n }}\n >\n {sourceColumns.map((group) => {\n if (textColumnSearch !== '' && group.columns.length === 0) {\n return null\n }\n return (\n handleAddGroupColumns(group.columns)}\n />\n }\n key={`${group.groupName}`}\n >\n {group.columns &&\n group.columns.map((col) => {\n draggableIndex++\n return (\n \n {(provided, snapshot) => (\n \n {col.title}\n
\n )}\n \n )\n })}\n {placeholder}\n \n )\n })}\n \n \n )\n }}\n
\n \n \n \n \n )}\n {loading && }\n \n )\n}\n\nexport default FundSearchColumnBuilder\n","import { Form, Modal, notification, Spin } from 'antd'\nimport { useForm } from 'antd/lib/form/util'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport { FormItemInput } from '../../../shared/components/FormItemComponents'\ntype Props = {\n showModal: boolean\n setShowModal: (value: boolean) => void\n selectedQuery?: { id: number; name: string } | undefined\n refetchQuery: () => void\n setCreatedQueryName?: (value: string | undefined) => void\n}\nexport const ModalEditQuerySearch: React.FC = ({\n showModal,\n setShowModal,\n selectedQuery,\n setCreatedQueryName,\n refetchQuery,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [form] = useForm()\n const paramsSearch = useSelector((state: RootState) => state.searchParams)\n const { fundSearchColumns } = useSelector((state: RootState) => state.appSettings)\n\n const handleChangeQuery = () => {\n form.validateFields(['searchName']).then(() => {\n setLoadingSubmit(true)\n const name = form.getFieldValue('searchName')\n selectedQuery\n ? APIService.fundService\n .updateFundSearchQueryDetail(\n selectedQuery.id,\n name,\n JSON.parse(JSON.stringify({ params: paramsSearch.fundSearchParams, columns: fundSearchColumns })),\n )\n .then(() => {\n notification.success({ message: 'Search Query Updated!' })\n refetchQuery()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Search Query Updated Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n })\n : APIService.fundService\n .createFundSearchQuery(\n name,\n JSON.parse(JSON.stringify({ params: paramsSearch.fundSearchParams, columns: fundSearchColumns })),\n )\n .then(() => {\n notification.success({ message: 'Search Query Created!' })\n setCreatedQueryName && setCreatedQueryName(name)\n refetchQuery()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Search Query Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n })\n })\n }\n\n React.useEffect(() => {\n if (selectedQuery) {\n form.setFieldsValue({ searchName: selectedQuery.name })\n } else {\n form.resetFields()\n }\n }, [form, selectedQuery])\n\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={() => {\n handleChangeQuery()\n }}\n onCancel={() => {\n setShowModal(false)\n form.resetFields()\n }}\n >\n
\n \n \n \n )\n}\n","import { CopyOutlined, DeleteTwoTone, EditOutlined, SaveOutlined } from '@ant-design/icons'\nimport { Button, Dropdown, Menu, notification, Select, Tooltip } from 'antd'\nimport React from 'react'\nimport { useDispatch } from 'react-redux'\nimport APIService from '../../../shared/api'\nimport { Colors } from '../../../shared/colors'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { updateFundSearchColumns } from '../../../slice/appSettingsSlice'\nimport { ModalEditQuerySearch } from './ModalEditQuerySearch'\nimport { updateFundSearchParams } from './SearchForm/redux/searchParamsSlice'\n\ntype Props = {}\nexport const FundQuerySearch: React.FC = () => {\n const [showSaveQuery, setShowSaveQuery] = React.useState(false)\n const [showCreateQuery, setShowCreateQuery] = React.useState(false)\n const [selectedQuery, setSelectedQuery] = React.useState<{ id: number; name: string } | undefined>()\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n const [createdQueryName, setCreatedQueryName] = React.useState()\n\n const { invoke: fetchSearchQuery, data: dataSearchQuery } = useServiceState(APIService.fundService.fetchMeFundSearch)\n\n const dispatch = useDispatch()\n\n React.useEffect(() => {\n fetchSearchQuery()\n }, [fetchSearchQuery])\n\n React.useEffect(() => {\n if (createdQueryName && dataSearchQuery) {\n const selected = dataSearchQuery.find((item) => item.name === createdQueryName)\n if (selected) {\n selected && setSelectedQuery({ id: selected.id, name: selected.name })\n setCreatedQueryName(undefined)\n }\n }\n }, [createdQueryName, dataSearchQuery])\n\n const renderAction = () => {\n return (\n {\n if (e.key === '1') {\n setShowSaveQuery(true)\n }\n if (e.key === '2') {\n setShowCreateQuery(true)\n }\n if (e.key === '3') {\n handleDeleteQuery()\n }\n }}\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n }\n\n const handleUpdateQuery = async (id: number) => {\n try {\n const res = await APIService.fundService.fetchFundSearchQueryDetail(id)\n const data = res.data.json\n\n data && data.params && dispatch(updateFundSearchParams(data.params))\n data && data.columns && dispatch(updateFundSearchColumns(data.columns))\n } catch (err) {\n console.error({ err })\n notification.error({ message: 'Load Query Failed!' })\n }\n }\n\n const refetchQuery = () => {\n fetchSearchQuery()\n }\n\n const handleDeleteQuery = () => {\n if (!selectedQuery) {\n return\n }\n setLoadingDelete(true)\n APIService.fundService\n .deleteFundSearchQueryDetail(selectedQuery?.id)\n .then(() => {\n notification.success({ message: 'Search Query Delete!' })\n refetchQuery()\n setSelectedQuery(undefined)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Search Query Delete Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n\n React.useEffect(() => {\n if (dataSearchQuery && selectedQuery) {\n const index = dataSearchQuery.findIndex((item) => item.id === selectedQuery.id)\n if (index > -1 && dataSearchQuery[index].name !== selectedQuery.name)\n setSelectedQuery({ id: dataSearchQuery[index].id, name: dataSearchQuery[index].name })\n }\n }, [dataSearchQuery, selectedQuery])\n\n return (\n
\n {dataSearchQuery && (\n
\n Query:\n {\n if (e) {\n handleUpdateQuery(Number(e))\n const selected = dataSearchQuery.find((item) => item.id === e)\n selected && setSelectedQuery({ id: selected.id, name: selected.name })\n } else {\n setSelectedQuery(undefined)\n }\n }}\n >\n {dataSearchQuery.map((item) => {\n return (\n \n {item.name}\n \n )\n })}\n \n \n \n \n
\n )}\n\n {showSaveQuery && selectedQuery && (\n \n )}\n {showCreateQuery && (\n \n )}\n
\n )\n}\n","import { Col, Form, notification, Row, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport { useDispatch } from 'react-redux'\nimport APIService from '../../../shared/api'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { ExFirmDetails } from '../../../shared/api/models/FirmDetails'\nimport { FormItemInput, FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { addTabs, FundFirmTypeEnum } from '../../../slice/appSettingsSlice'\n\ntype Props = {\n showModal: boolean\n setShowModal: (value: boolean) => void\n typeCreate: FundFirmTypeEnum\n}\nexport const ModalCreateFundFirm: React.FC = ({ showModal, setShowModal, typeCreate }) => {\n const { dataFirms } = React.useContext(FundDetailDropdownContext)\n const [optionFirm, setOptionFirm] = React.useState()\n\n const compareFirm = (a: ExFirmDetails, b: ExFirmDetails) => {\n return a.firm_name && b.firm_name ? a.firm_name.localeCompare(b.firm_name) : 0\n }\n\n const sortedFirms = dataFirms ? dataFirms.sort(compareFirm) : undefined\n\n const filterOptions = React.useCallback(\n (val: string) => {\n if (!sortedFirms) {\n return\n }\n if (!val) {\n return sortedFirms.slice(0, 20)\n }\n return sortedFirms\n .filter((item) => item.firm_name && item.firm_name.toLowerCase().includes(val.toLowerCase()))\n .slice(0, 20)\n },\n [sortedFirms],\n )\n\n React.useEffect(() => {\n setOptionFirm(filterOptions(''))\n }, [filterOptions])\n\n function onSearch(val: string) {\n setOptionFirm(filterOptions(val))\n }\n\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [form] = Form.useForm()\n const dispatch = useDispatch()\n\n const submitCreateFundFirm = () => {\n form.validateFields(['fundName', 'firmName']).then(() => {\n setLoadingSubmit(true)\n const fundName = form.getFieldValue('fundName')\n const firmName = form.getFieldValue('firmName')\n if (typeCreate === FundFirmTypeEnum.FUNDS) {\n return APIService.fundDetailService\n .createFundBasicInfo({ fund_name: fundName, firm_id: firmName })\n .then((res) => {\n notification.success({ message: 'Fund Created!' })\n dispatch(addTabs({ id: res.data.fund_id, type: typeCreate }))\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n })\n }\n return APIService.firmDetailService\n .createFirmInfo({ firm_name: firmName })\n .then((res) => {\n notification.success({ message: 'Firm Created!' })\n dispatch(addTabs({ id: res.data.firm_id, type: typeCreate }))\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n })\n })\n }\n\n return (\n {\n form.resetFields()\n setShowModal(false)\n }}\n title={typeCreate === FundFirmTypeEnum.FUNDS ? 'Create Fund' : 'Create Firm'}\n okText={\n loadingSubmit ? (\n <>\n \n \n ) : (\n 'OK'\n )\n }\n onOk={submitCreateFundFirm}\n >\n
\n
\n \n {typeCreate === FundFirmTypeEnum.FUNDS && (\n
\n \n \n )}\n \n {typeCreate === FundFirmTypeEnum.FUNDS ? (\n ({\n value: item.firm_id,\n text: item.firm_name,\n }))) ||\n []\n }\n selectProps={{\n onSearch,\n }}\n />\n ) : (\n \n )}\n \n \n \n \n \n )\n}\n","import { Select } from 'antd'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { updateFundSearchParams } from './SearchForm/redux/searchParamsSlice'\n\ntype Props = {}\n\nconst PeerGroupSearch: React.FC = () => {\n const { invoke: fetchPeerGroup, data: peerGroupData } = useServiceState(APIService.analysisService.getOwnerGroups)\n\n const { fundSearchParams: fundSearchParamsRedux } = useSelector((state: RootState) => state.searchParams)\n\n const dispatch = useDispatch()\n\n React.useEffect(() => {\n fetchPeerGroup()\n }, [fetchPeerGroup])\n\n return (\n
\n Peer Group:\n {\n const selectedPeerGroups = e as string[]\n if (selectedPeerGroups.length > 0) {\n dispatch(\n updateFundSearchParams({\n ...fundSearchParamsRedux,\n peer_group_code: { value: selectedPeerGroups },\n }),\n )\n } else {\n const { peer_group_code: _, ...rest } = fundSearchParamsRedux\n dispatch(updateFundSearchParams(rest))\n }\n }}\n maxTagCount={2}\n options={peerGroupData\n ?.sort((a, b) => (a.group_name > b.group_name ? 1 : -1))\n .map((item) => ({\n value: item.group_code,\n label: `${item.group_name} (${item.group_code})`,\n }))}\n filterOption={(input, option: any) =>\n option.label && option.label && (option.label as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n >\n
\n )\n}\n\nexport default PeerGroupSearch\n","import { LeftOutlined, PlusSquareOutlined, RightOutlined, TableOutlined } from '@ant-design/icons'\nimport { Button, Col, Dropdown, Menu, Row } from 'antd'\nimport { ClickParam } from 'antd/lib/menu'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundFirmTypeEnum } from '../../../slice/appSettingsSlice'\nimport FundSearchColumnBuilder from './ColumnBuilder/FundSearchColumnBuilder'\nimport { FundQuerySearch } from './FundQuerySearch'\nimport { ModalCreateFundFirm } from './ModalCreateFundFirm'\nimport PeerGroupSearch from './PeerGroupSearch'\n\nconst RightTitle = styled.div`\n display: flex;\n margin-left: 8px;\n flex: 1;\n`\n\ntype TableHeaderProps = {\n onShowSideBar: () => void\n showSidebar: boolean\n}\n\nconst FundTableHeader: React.FC = ({ onShowSideBar, showSidebar }) => {\n const [showColumnBuilder, setShowColumnBuilder] = React.useState(false)\n const [showModal, setShowModal] = React.useState(false)\n const [typeCreate, setTypeCreate] = React.useState(FundFirmTypeEnum.FUNDS)\n\n const handleMenuClick = (e: ClickParam) => {\n if (e.key === '1') {\n setShowModal(true)\n setTypeCreate(FundFirmTypeEnum.FUNDS)\n\n return\n }\n if (e.key === '2') {\n setShowModal(true)\n setTypeCreate(FundFirmTypeEnum.FIRMS_IN_FUNDS)\n return\n }\n }\n\n const renderAddNewList = () => (\n \n Add New Fund\n Add New Firm\n \n )\n\n return (\n \n
\n \n \n All Funds\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n {showColumnBuilder && }\n \n )\n}\n\nexport default FundTableHeader\n","import { Button, List } from 'antd'\nimport Text from 'antd/lib/typography/Text'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { addTabs, DASHBOARD_KEY, FundFirmTypeEnum } from '../../../slice/appSettingsSlice'\n\nconst TextID = styled(Text)`\n color: rgba(0, 0, 0, 0.25);\n font-size: 12px;\n`\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst StyledList = styled(List)`\n flex: 1;\n border: none;\n .ant-list-item {\n padding: 4px;\n }\n`\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n overflow-y: scroll;\n overflow-x: hidden;\n height: calc(100vh - 550px);\n flex: 1;\n flex-direction: column;\n`\nexport const RecentlyEditedTab: React.FC = () => {\n const { invoke: getRecentlyEdited, data: dataEdited, loading } = useServiceState(\n APIService.fundService.fetchRecentlyEdited,\n )\n const { fundFirmTabs } = useSelector((state: RootState) => state.appSettings)\n const dispatch = useDispatch()\n\n React.useEffect(() => {\n if (fundFirmTabs.activeTab === DASHBOARD_KEY) {\n getRecentlyEdited()\n }\n }, [getRecentlyEdited, fundFirmTabs.activeTab])\n\n return (\n \n {dataEdited && (\n (\n \n
\n Fund #{item.fund_id}\n \n
\n \n dispatch(addTabs({ name: item.fund_name, id: item.fund_id, type: FundFirmTypeEnum.FUNDS }))\n }\n >\n {item.fund_name}\n \n
\n
\n
\n
\n )}\n />\n )}\n
\n )\n}\n","import { CheckOutlined, CloseOutlined } from '@ant-design/icons'\nimport { Card, Col, Row, Switch, Tabs } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../shared/api'\nimport { TabContentWrapper } from '../../../shared/components/TabContentWrapper'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport ActivityBlock from './ActivityBlock'\nimport { FundSearchColumnProvider } from './ColumnBuilder/FundSearchColumnContext'\nimport { CreatedUpdatedFunds } from './CreatedUpdatedFunds'\nimport { DraftTab } from './DraftTab'\nimport { FavoritedTab } from './FavoritedTab'\nimport { FundSearch } from './FundSearch'\nimport FundTableHeader from './FundTableHeader'\nimport { RecentlyEditedTab } from './RecentlyEditedTab'\n\nconst { TabPane } = Tabs\n\nconst StyledCard = styled(Card)`\n display: flex;\n flex-direction: column;\n\n .ant-card-head {\n border-bottom: none;\n font-size: 1rem;\n padding: 0 1rem;\n }\n .ant-card-body {\n padding: 0 0.5rem 0.5rem 0.5rem;\n flex: 1;\n }\n`\n\nconst StyledMyFundTab = styled(Tabs)`\n display: flex;\n flex-direction: column;\n .ant-card-body {\n flex: 1;\n }\n`\n\n// type ColumnsProps = {\n// fundName: string\n// firm: string\n// strategy: string\n// subStrategy: string\n// }\n\nconst DashboardTab: React.FC = () => {\n const [typeSelectActivity, setTypeSelectActivity] = React.useState(undefined)\n const [activeTab, setActiveTab] = React.useState('Recently Edited')\n const [isAllUser, setIsAllUser] = React.useState(false)\n const [showSidebar, setShowSidebar] = React.useState(true)\n\n const { invoke: getListCreated, data: listCreateFund, loading: loadingListCreate } = useServiceState(\n APIService.fundService.fetchListCreatedFund,\n )\n\n const { invoke: getListUpdated, data: listUpdateFund, loading: loadingListUpdate } = useServiceState(\n APIService.fundService.fetchListUpdateFund,\n )\n\n React.useEffect(() => {\n getListCreated(isAllUser ? { all_users: true } : undefined)\n getListUpdated(isAllUser ? { all_users: true } : undefined)\n }, [getListCreated, getListUpdated, isAllUser])\n\n const { invoke: getFavorited, data: dataFavorited, loading: loadingFavorited } = useServiceState(\n APIService.fundService.fetchFavorited,\n )\n\n React.useEffect(() => {\n getFavorited()\n }, [getFavorited])\n\n const handleRefetchFavorited = () => {\n getFavorited()\n }\n\n const renderSidebar = () => {\n return (\n
\n {/* */}\n\n \n setIsAllUser(e)}\n checkedChildren={}\n unCheckedChildren={}\n style={{ marginRight: 8 }}\n />\n All Users\n
\n }\n >\n \n \n \n {\n setActiveTab(key)\n }}\n activeKey={activeTab}\n >\n {typeSelectActivity && (\n \n \n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n )\n }\n\n return (\n \n \n {showSidebar && (\n
\n {renderSidebar()}\n \n )}\n \n \n setShowSidebar(!showSidebar)} showSidebar={showSidebar} />}\n >\n \n \n \n \n \n \n )\n}\n\nexport default DashboardTab\n","import React from 'react'\nimport { ListSearchFirmType } from '../../SearchFirmLabel'\n\nconst defaultValue = {\n boldText: '',\n filterArr: [] as ListSearchFirmType[],\n isFiltering: false,\n}\ntype Props = {\n text: string\n filterArr: ListSearchFirmType[]\n}\nexport const FirmDetailLabelSearchContext = React.createContext(defaultValue)\nexport const FirmDetailLabelSearchProvider: React.FC = ({ children, text, filterArr }) => {\n const isFiltering = text === '' ? false : true\n const value = {\n boldText: text,\n filterArr,\n isFiltering,\n }\n return {children}\n}\n","import React from 'react'\nimport PerfectScrollbar from 'react-perfect-scrollbar'\n\nconst FFPerfectScrollbar: React.FC = ({ children }) => (\n {\n if (ref) {\n // @ts-ignore\n ref._getBoundingClientRect = ref.getBoundingClientRect\n\n ref.getBoundingClientRect = () => {\n // @ts-ignore\n const original = ref._getBoundingClientRect()\n\n return { ...original, height: Math.round(original.height) }\n }\n }\n }}\n >\n {children}\n \n)\n\nexport default FFPerfectScrollbar\n","import Text from 'antd/lib/typography/Text'\nimport React, { ReactNode } from 'react'\nimport styled from 'styled-components'\nimport { Colors } from '../colors'\ntype Props = {\n text?: string | ReactNode\n notMargin?: boolean\n}\nconst Flex = styled.div`\n flex: 1;\n display: flex;\n`\nexport const DividerForm: React.FC = ({ text, notMargin }) => {\n return (\n
\n \n
{text && {text}}
\n
\n
\n
\n )\n}\n","import React from 'react'\nimport { ListSearchExFundType } from '../../SearchExFundLabel'\n\nconst defaultValue = {\n boldText: '',\n filterArr: [] as ListSearchExFundType[],\n isFiltering: false,\n}\ntype Props = {\n text: string\n filterArr: ListSearchExFundType[]\n}\nexport const ExFundDetailLabelSearchContext = React.createContext(defaultValue)\nexport const ExFundDetailLabelSearchProvider: React.FC = ({ children, text, filterArr }) => {\n const isFiltering = text === '' ? false : true\n const value = {\n boldText: text,\n filterArr,\n isFiltering,\n }\n return {children}\n}\n","import React from 'react'\nimport { ExFundDetailLabelSearchContext } from '../api/context/ExFundDetailLabelSearchContext'\nimport { Colors } from '../colors'\ntype Props = {\n value: string\n boldText?: string\n subtitle?: React.ReactElement\n}\nexport const RenderLabelExFund: React.FC = ({ value, subtitle }) => {\n const { boldText } = React.useContext(ExFundDetailLabelSearchContext)\n const index = value?.toUpperCase().indexOf(boldText.toUpperCase())\n return (\n \n {boldText === '' || index === -1 ? (\n \n {value}\n {subtitle}\n \n ) : (\n \n {value.slice(0, index)}\n \n {value.slice(index, index + boldText.length)}\n \n {value.slice(index + boldText.length, value.length)}\n {subtitle}\n \n )}\n \n )\n}\n","import React from 'react'\nimport { ListSearchFundType } from '../../SearchFundLabel'\n\nconst defaultValue = {\n boldText: '',\n filterArr: [] as ListSearchFundType[],\n isFiltering: false,\n}\ntype Props = {\n text: string\n filterArr: ListSearchFundType[]\n}\nexport const FundDetailLabelSearchContext = React.createContext(defaultValue)\nexport const FundDetailLabelSearchProvider: React.FC = ({ children, text, filterArr }) => {\n const isFiltering = text === '' ? false : true\n const value = {\n boldText: text,\n filterArr,\n isFiltering,\n }\n return {children}\n}\n","import React, { HTMLProps } from 'react'\nimport { FundDetailLabelSearchContext } from '../api/context/FundDetailLabelSearchContext'\nimport { Colors } from '../colors'\n\ntype Props = HTMLProps & {\n value: string\n boldText?: string\n}\nexport const RenderLabelForm: React.FC = ({ value, ...rest }) => {\n const { boldText } = React.useContext(FundDetailLabelSearchContext)\n const index = value.toUpperCase().indexOf(boldText.toUpperCase())\n return (\n \n {boldText === '' || index === -1 ? (\n {value}\n ) : (\n \n {value.slice(0, index)}\n \n {value.slice(index, index + boldText.length)}\n \n {value.slice(index + boldText.length, value.length)}\n \n )}\n \n )\n}\n","import { FormInstance } from 'antd/lib/form'\n\nexport function updateFieldValue(form: FormInstance, name: string, value: any) {\n ;(form as any).getInternalHooks('RC_FORM_INTERNAL_HOOKS').dispatch({\n type: 'updateValue',\n namePath: [name],\n value: value,\n })\n}\n","import { Col, Form, List, Radio, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport { addTabs, FundFirmTypeEnum, PREFIX_EXTERNAL } from '../../slice/appSettingsSlice'\nimport { FundDetailDataContext } from '../api/context/FundDetailDataContext'\nimport { FundDetailDropdownContext } from '../api/context/FundDetailDropdownContext'\nimport { FundDropdownCodeType, FundDropdownType } from '../api/models/FundDetails'\nimport { Colors } from '../colors'\nimport { LeftNavExFirmEnum } from '../SearchExFirmLabel'\nimport { LeftNavFirmEnum } from '../SearchFirmLabel'\nimport { FormItemRadio, FormItemSelect, FormItemTextArea } from './FormItemComponents'\nimport { RenderLabelExFund } from './RenderLabelExFund'\nimport { RenderLabelForm } from './RenderLabelForm'\nimport { updateFieldValue } from '../utils/formUtils'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n flex-direction: column;\n padding: 0 2rem;\n`\nconst ListItem = styled(List.Item)`\n padding: 0 24px;\n`\n\nexport enum MODE_ESG_VIEW {\n INTERNAL,\n EXTERNAL,\n}\n\ntype Props = {\n form: FormInstance\n modeView: MODE_ESG_VIEW\n}\n\n// const ARRAY_FIELD_VALIDATE: string[] = []\n\nexport const FundESGSection: React.FC = ({ form, modeView }) => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const isFundESG = form.getFieldValue('is_fund_esg')\n const isConsiderESG = isFundESG === '1'\n const esgStrategyCode = form.getFieldValue('esg_strategy')\n const esgSubStrategyCode = form.getFieldValue('esg_sub_strategy')\n\n const { esgStrategies, esgSubStrategies, esgSubStrategyDropdown } = useSelector((state: RootState) => state.appData)\n\n const dispatch = useDispatch()\n\n const { selectableESGStrategies, selectableESGSubStrategies } = React.useMemo(() => {\n if (!dataFundDetail || !dataFundDetail.sub_strategy_code_new || !esgSubStrategyDropdown) {\n return { selectableESGStrategies: undefined, selectableESGSubStrategies: undefined }\n }\n const availableESGSubStrategyCodes = esgSubStrategyDropdown[dataFundDetail.sub_strategy_code_new]\n // set selectable options to undefined if sub_strategy_code_new is not match any Sub Strategy Dropdown\n if (!availableESGSubStrategyCodes) {\n return { selectableESGStrategies: undefined, selectableESGSubStrategies: undefined }\n }\n //\n const availableESGSubStrategies = esgSubStrategies\n ? esgSubStrategies.filter((item) => availableESGSubStrategyCodes.includes(item.code))\n : undefined\n return {\n selectableESGStrategies: esgStrategies\n ? esgStrategies.filter((item) => availableESGSubStrategies?.some((i) => i.esg_strategy === item.code))\n : undefined,\n selectableESGSubStrategies: availableESGSubStrategies,\n }\n }, [dataFundDetail, esgStrategies, esgSubStrategies, esgSubStrategyDropdown])\n\n // Reset Esg value in is_fund_esg change to No\n React.useEffect(() => {\n if (isFundESG === '2') {\n const currentEsgStrategyCode = form.getFieldValue('esg_strategy')\n !!currentEsgStrategyCode && updateFieldValue(form, 'esg_strategy', null)\n const currentEsgSubStrategyCode = form.getFieldValue('esg_sub_strategy')\n !!currentEsgSubStrategyCode && updateFieldValue(form, 'esg_sub_strategy', null)\n const currentTeamEngagepcm = form.getFieldValue('team_engagepcm')\n currentTeamEngagepcm !== '2' && updateFieldValue(form, 'team_engagepcm', '2')\n\n //\n const allFields = [\n ...DESCRIBE_BEST_DESCRIBE,\n ...DESCRIBE_ESG_CRITERIA,\n ...DESCRIBE_ESG_SOCIAL,\n ...DESCRIBE_GOVERNANCE,\n ...ESG_DATA_SOURCES,\n ]\n allFields.map((f) => {\n const currentValue = form.getFieldValue(f.name)\n if (f.isInput) {\n !!currentValue && updateFieldValue(form, f.name, null)\n } else {\n currentValue !== '2' && updateFieldValue(form, f.name, '2')\n }\n return null\n })\n }\n }, [form, isFundESG])\n\n // Reset sub-strategy whenever esg is being changed\n React.useEffect(() => {\n const currentESGSubStrategy = esgSubStrategies?.find((item) => item.code === esgSubStrategyCode)\n if (esgStrategyCode !== currentESGSubStrategy?.esg_strategy) {\n const currentEsgSubStrategyCode = form.getFieldValue('esg_sub_strategy')\n !!currentEsgSubStrategyCode && updateFieldValue(form, 'esg_sub_strategy', null)\n }\n }, [form, esgStrategyCode, esgSubStrategyCode, esgSubStrategies])\n\n const optionEsg = React.useMemo(() => {\n return fundDataDropdown?.is_fund_esg && fundDataDropdown.is_fund_esg.length > 0\n ? fundDataDropdown.is_fund_esg\n .map((item) => ({\n value: item.code_code,\n title: item.code_description,\n }))\n .filter((item) => modeView === MODE_ESG_VIEW.INTERNAL || item.value !== '0')\n : []\n }, [fundDataDropdown?.is_fund_esg, modeView])\n\n const findOptionsRadio = (name: string) => {\n return fundDataDropdown &&\n fundDataDropdown[name as keyof FundDropdownType] &&\n fundDataDropdown[name as keyof FundDropdownType].length > 0\n ? (fundDataDropdown[name as keyof FundDropdownType] as Array)\n .map((item) =>\n typeof item === 'string'\n ? { value: item, title: item }\n : {\n value: item.code_code,\n title: item.code_description,\n },\n )\n .filter(\n (item) =>\n modeView === MODE_ESG_VIEW.INTERNAL || (typeof item === 'string' ? item !== '0' : item.value !== '0'),\n )\n : []\n }\n\n const renderLabelField = (value: string, subtitle?: React.ReactElement) => {\n return modeView === MODE_ESG_VIEW.EXTERNAL ? (\n \n ) : (\n \n )\n }\n\n const LabelComponent = () => (\n \n \n   Note: ESG Strategy/Sub-Strategy options dependent on Main Strategy / Sub-strategy classifications in HFR\n Database (‘Investment Strategy’ module)\n \n \n )\n\n return (\n \n \n Open Firm ESG:\n {\n if (dataFundDetail && modeView === MODE_ESG_VIEW.INTERNAL) {\n dispatch(\n addTabs({\n name: dataFundDetail?.firm_name,\n id: dataFundDetail.firm_id,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n path: LeftNavFirmEnum.FIRM_ESG,\n }),\n )\n }\n if (dataFundDetail && modeView === MODE_ESG_VIEW.EXTERNAL) {\n dispatch(\n addTabs({\n name: dataFundDetail?.firm_name,\n id: `${PREFIX_EXTERNAL}-${dataFundDetail?.firm_id}`,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n activeNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n }),\n )\n }\n }}\n style={{ cursor: 'pointer', color: Colors.primary, marginLeft: 5 }}\n >\n {dataFundDetail?.firm_name || dataFundDetail?.firm_id}\n \n \n \n
\n \n \n \n \n
If Yes, please answer questions:
\n
\n 0\n ? selectableESGStrategies.map((item) => ({ value: item.code, text: item.name }))\n : []\n }\n />\n \n ESG Strategy Definitions available here:  \n \n HFR ESG Definitions PDF\n \n \n \n\n \n 0\n ? selectableESGSubStrategies\n .filter((item) => item.esg_strategy === form.getFieldValue('esg_strategy'))\n .map((item) => ({ value: item.code, text: item.name }))\n : []\n }\n />\n \n
\n DESCRIBE WHICH BEST DESCRIBES THE FUND'S APPLICATION OF ESG\n
\n
Select "Yes" or "No" foreach:
\n\n (\n \n
\n \n
\n
\n )}\n />\n \n \n
Select "Yes" or "No" foreach:
\n ENVIRONMENTAL}\n bordered\n dataSource={DESCRIBE_ESG_CRITERIA}\n style={{ width: '100%' }}\n renderItem={(item) => (\n \n
\n {item.isInput ? (\n \n ) : (\n \n )}\n
\n
\n )}\n />\n
\n \n
DESCRIBE ESG CRITERIA
\n
Select "Yes" or "No" foreach:
\n SOCIAL}\n bordered\n dataSource={DESCRIBE_ESG_SOCIAL}\n style={{ width: '100%' }}\n renderItem={(item) => (\n \n
\n {item.isInput ? (\n \n ) : (\n \n )}\n
\n
\n )}\n />\n
\n\n \n
Select "Yes" or "No" foreach:
\n GOVERNANCE}\n bordered\n dataSource={DESCRIBE_GOVERNANCE}\n style={{ width: '100%' }}\n renderItem={(item) => (\n \n
\n {item.isInput ? (\n \n ) : (\n \n )}\n
\n
\n )}\n />\n
\n \n
\n \n \n \n \n
WHAT ESG DATA SOURCES ARE USED IN YOUR PROCESS
\n
Select "Yes" or "No" foreach:
\n (\n \n
\n {item.isInput ? (\n \n ) : (\n \n )}\n
\n
\n )}\n />\n
\n \n )\n}\n//\ntype FieldType = {\n name: string\n label: string\n isInput?: boolean\n}\nconst DESCRIBE_BEST_DESCRIBE: FieldType[] = [\n {\n name: 'app_positivescreen',\n label: 'Positive/best-in-class Screening',\n },\n {\n name: 'app_negativescreen',\n label: 'Negative/Exclusionary Screening',\n },\n {\n name: 'app_esgintegration',\n label: 'ESG Integration',\n },\n {\n name: 'app_impactinvest',\n label: 'Impact Investing',\n },\n {\n name: 'app_sustaininvest',\n label: 'Sustainability-themed Investing',\n },\n]\nconst DESCRIBE_ESG_CRITERIA: FieldType[] = [\n {\n name: 'env_greenbuilding',\n label: 'Green Building/ Smart Growth',\n },\n {\n name: 'env_climatechange',\n label: 'Climate Change/ Carbon',\n },\n {\n name: 'env_cleantech',\n label: 'Clean Technology',\n },\n {\n name: 'env_pollutiontaxes',\n label: 'Pollution / Toxics',\n },\n {\n name: 'env_sustainable',\n label: 'Sustainable Natural Resources / Agriculture',\n },\n {\n name: 'env_waterconservation',\n label: 'Water Use & Conservation',\n },\n {\n name: 'env_description',\n label: 'Additional Description Of How ENVIRONMENTAL Is Considered When Investing',\n isInput: true,\n },\n]\nconst DESCRIBE_ESG_SOCIAL: FieldType[] = [\n {\n name: 'soc_workplacesafety',\n label: 'Workplace Safety',\n },\n {\n name: 'soc_laborrelations',\n label: 'Labor Relations',\n },\n {\n name: 'soc_workplacebenefits',\n label: 'Workplace Benefits',\n },\n {\n name: 'soc_diversityantibias',\n label: 'Diversity & Anti-Bias Issues',\n },\n {\n name: 'soc_communitydev',\n label: 'Community Development',\n },\n {\n name: 'soc_avoidtobacco',\n label: 'Avoidance Of Tobacco Or Other Harmful Products',\n },\n {\n name: 'soc_humanrights',\n label: 'Human Rights',\n },\n {\n name: 'soc_description',\n label: 'Additional Description Of How SOCIAL Is Considered When Investing',\n isInput: true,\n },\n]\nconst DESCRIBE_GOVERNANCE: FieldType[] = [\n {\n name: 'gov_corppolcontrib',\n label: 'Corporate Political Contributions',\n },\n {\n name: 'gov_executivecomp',\n label: 'Executive Compensation',\n },\n {\n name: 'gov_boarddiversity',\n label: 'Board Diversity',\n },\n {\n name: 'gov_anticorruption',\n label: 'Anti-Corruption Pilicies',\n },\n {\n name: 'gov_boardindependence',\n label: 'Board Independence',\n },\n {\n name: 'gov_description',\n label: 'Additional Description Of How GOVERNANCE Is Considered When Investing',\n isInput: true,\n },\n]\nconst ESG_DATA_SOURCES: FieldType[] = [\n {\n name: 'data_msci',\n label: 'MSCI',\n },\n {\n name: 'data_sustainalytics',\n label: 'Sustainalytics',\n },\n {\n name: 'data_bloomberg',\n label: 'Bloomberg',\n },\n {\n name: 'data_factset',\n label: 'FactSet',\n },\n {\n name: 'data_internal',\n label: 'Proprietary Or Internally Developed Metrics',\n },\n {\n name: 'data_other',\n label: 'Other',\n isInput: true,\n },\n]\n","import React from 'react'\nimport { ListSearchExFirmType } from '../../SearchExFirmLabel'\n\nconst defaultValue = {\n boldText: '',\n filterArr: [] as ListSearchExFirmType[],\n isFiltering: false,\n}\ntype Props = {\n text: string\n filterArr: ListSearchExFirmType[]\n}\nexport const ExFirmDetailLabelSearchContext = React.createContext(defaultValue)\nexport const ExFirmDetailLabelSearchProvider: React.FC = ({ children, text, filterArr }) => {\n const isFiltering = text === '' ? false : true\n const value = {\n boldText: text,\n filterArr,\n isFiltering,\n }\n return {children}\n}\n","import React from 'react'\nimport { ExFirmDetailLabelSearchContext } from '../api/context/ExFirmDetailLabelSearchContext'\nimport { Colors } from '../colors'\ntype Props = {\n value: string\n boldText?: string\n}\nexport const RenderLabelExFirm: React.FC = ({ value }) => {\n const { boldText } = React.useContext(ExFirmDetailLabelSearchContext)\n const index = value.toUpperCase().indexOf(boldText.toUpperCase())\n return (\n \n {boldText === '' || index === -1 ? (\n {value}\n ) : (\n \n {value.slice(0, index)}\n \n {value.slice(index, index + boldText.length)}\n \n {value.slice(index + boldText.length, value.length)}\n \n )}\n \n )\n}\n","import React from 'react'\nimport { FirmDetailLabelSearchContext } from '../api/context/FirmDetailLabelSearchContext'\nimport { Colors } from '../colors'\ntype Props = {\n value: string\n boldText?: string\n}\nexport const RenderLabelFormFirm: React.FC = ({ value }) => {\n const { boldText } = React.useContext(FirmDetailLabelSearchContext)\n const index = value.toUpperCase().indexOf(boldText.toUpperCase())\n return (\n \n {boldText === '' || index === -1 ? (\n {value}\n ) : (\n \n {value.slice(0, index)}\n \n {value.slice(index, index + boldText.length)}\n \n {value.slice(index + boldText.length, value.length)}\n \n )}\n \n )\n}\n","import { Col, List, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React, { useEffect } from 'react'\nimport { useDispatch } from 'react-redux'\nimport styled from 'styled-components'\nimport { addTabs, FundFirmTypeEnum, PREFIX_EXTERNAL } from '../../slice/appSettingsSlice'\nimport { FundDetailDropdownContext } from '../api/context/FundDetailDropdownContext'\nimport { ExFundDetails } from '../api/models/ExFundDetails'\nimport { FundDropdownCodeType, FundDropdownType } from '../api/models/FundDetails'\nimport { Colors } from '../colors'\nimport { LeftNavExFundEnum } from '../SearchExFundLabel'\nimport { DividerForm } from './DividerForm'\nimport { FormItemRadio, FormItemSelect } from './FormItemComponents'\nimport { MODE_ESG_VIEW } from './FundESGSection'\nimport { RenderLabelExFirm } from './RenderLabelExFirm'\nimport { RenderLabelFormFirm } from './RenderLabelFormFirm'\nimport { updateFieldValue } from '../utils/formUtils'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 0 1rem;\n margin-top: 1rem;\n flex-direction: column;\n`\nconst FundFirmName = styled.div`\n color: ${Colors.primary};\n cursor: pointer;\n`\ntype Props = {\n form: FormInstance\n modeView: MODE_ESG_VIEW\n dataListFund?: {\n fund_id: string\n fund_name: string\n }[]\n}\nconst FIRM_INSTRUMENTS = [\n {\n name: 'applied_firmculture',\n label: 'Firm Culture',\n },\n {\n name: 'applied_investmentprocess',\n label: 'Investment Process',\n },\n {\n name: 'applied_portfolioconstruction',\n label: 'Portfolio Construction',\n },\n {\n name: 'applied_esgproducts',\n label: 'ESG Products',\n },\n {\n name: 'applied_esgintegration',\n label: 'ESG Integration',\n },\n {\n name: 'applied_esgactivist',\n label: 'Activist / Engaged Ownership',\n },\n {\n name: 'applied_diversityinclusion',\n label: 'Diversity And Inclusion',\n },\n]\n\nexport const FirmESGSection: React.FC = ({ form, modeView, dataListFund }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const isFirmEsg = form.getFieldValue('is_firm_esg')\n const isFirmPolicies = isFirmEsg === '1'\n const receiveGuidance = form.getFieldValue('receive_guidance')\n // change all sub fields of is_firm_esg to no when itself is no\n useEffect(() => {\n if (isFirmEsg === '2') {\n FIRM_INSTRUMENTS.map((field) => {\n const currentValue = form.getFieldValue(field.name)\n if (currentValue !== '2') {\n updateFieldValue(form, field.name, '2')\n }\n return null\n })\n }\n }, [isFirmEsg, form])\n // change all sub fields of receiveGuidance to no when itself is no\n useEffect(() => {\n if (receiveGuidance === '2') {\n //\n const currentValue = form.getFieldValue('thirdparty_guidance')\n !!currentValue && updateFieldValue(form, 'thirdparty_guidance', null)\n }\n }, [receiveGuidance, form])\n\n const dispatch = useDispatch()\n\n const renderLabelField = (value: string) => {\n return modeView === MODE_ESG_VIEW.EXTERNAL ? (\n \n ) : (\n \n )\n }\n\n const columns: ColumnProps>[] = [\n {\n title: 'Fund ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n },\n {\n title: 'Fund Name',\n dataIndex: 'fund_name',\n key: 'fund_name',\n render: (_, record) => (\n {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: `${PREFIX_EXTERNAL}-${record.fund_id}`,\n type: FundFirmTypeEnum.FUNDS,\n activeNav: LeftNavExFundEnum.FUND_ESG_FACTORS,\n }),\n )\n }}\n >\n {record.fund_name}\n \n ),\n },\n ]\n\n const optionEsg =\n fundDataDropdown?.is_firm_esg && fundDataDropdown.is_firm_esg.length > 0\n ? fundDataDropdown.is_firm_esg\n .map((item) => ({\n value: item.code_code,\n title: item.code_description,\n }))\n .filter((item) => modeView === MODE_ESG_VIEW.INTERNAL || item.value !== '0')\n : []\n\n const findOptionsRadio = (name: string) => {\n return fundDataDropdown &&\n fundDataDropdown[name as keyof FundDropdownType] &&\n fundDataDropdown[name as keyof FundDropdownType].length > 0\n ? (fundDataDropdown[name as keyof FundDropdownType] as Array)\n .map((item) =>\n typeof item === 'string'\n ? { value: item, title: item }\n : {\n value: item.code_code,\n title: item.code_description,\n },\n )\n .filter(\n (item) =>\n modeView === MODE_ESG_VIEW.INTERNAL || (typeof item === 'string' ? item !== '0' : item.value !== '0'),\n )\n : []\n }\n\n return (\n \n \n

Update Firm ESG Policies

\n
All Fields Are Required unless otherwise Noted
\n \n \n
\n \n \n \n
If Yes, please answer the following:
\n
HOW IS ESG APPLIED AT YOUR FIRM
\n
Select "Yes" or "No" foreach:
\n (\n \n
\n \n
\n \n )}\n />\n \n \n \n
\n \n \n \n
If Yes, please answer the following:
\n \n
\n 0\n ? fundDataDropdown.thirdparty_guidance.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n disabled={!receiveGuidance}\n />\n \n \n \n \n \n {dataListFund && (\n \n

Open Fund ESG

\n 10 ? undefined : false}\n columns={columns}\n />\n
\n )}\n \n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport { Colors } from '../../../../shared/colors'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FormItemRadio, FormItemSelect } from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelFormFirm } from '../../../../shared/components/RenderLabelFormFirm'\nimport { FormInstance } from 'antd/lib/form'\nimport { updateFieldValue } from '../../../../shared/utils/formUtils'\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n`\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\n\ntype Props = { form: FormInstance }\nexport const FirmCoInvestment: React.FC = ({ form }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const offer_coinvestments = form.getFieldValue('offer_coinvestments')\n const hasOfferCoinvestments = offer_coinvestments === '1'\n\n React.useEffect(() => {\n const { getFieldValue } = form\n if (offer_coinvestments === '1') {\n return\n }\n !!getFieldValue('typical_size') && updateFieldValue(form, 'typical_size', null)\n !!getFieldValue('typical_liquidity') && updateFieldValue(form, 'typical_liquidity', null)\n !!getFieldValue('coinvestment_number') && updateFieldValue(form, 'coinvestment_number', null)\n //\n !!getFieldValue('private_equity') && updateFieldValue(form, 'private_equity', null)\n !!getFieldValue('public_equity') && updateFieldValue(form, 'public_equity', null)\n !!getFieldValue('private_debt') && updateFieldValue(form, 'private_debt', null)\n !!getFieldValue('public_debt') && updateFieldValue(form, 'public_debt', null)\n !!getFieldValue('other_instrument') && updateFieldValue(form, 'other_instrument', null)\n //\n !!getFieldValue('vehicle_commingled_fund') && updateFieldValue(form, 'vehicle_commingled_fund', null)\n !!getFieldValue('vehicle_fund_of_one') && updateFieldValue(form, 'vehicle_fund_of_one', null)\n !!getFieldValue('vehicle_managed_account') && updateFieldValue(form, 'vehicle_managed_account', null)\n !!getFieldValue('other_vehicle') && updateFieldValue(form, 'other_vehicle', null)\n }, [offer_coinvestments])\n\n console.log(fundDataDropdown?.private_equity)\n\n return (\n \n \n Firm Co-Investments\n \n\n \n }\n options={[\n { value: '0', title: 'Not Responded' },\n { value: '1', title: 'Yes' },\n { value: '2', title: 'No' },\n ]}\n />\n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.typical_size && fundDataDropdown.typical_size.length > 0\n ? fundDataDropdown.typical_size.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.typical_liquidity && fundDataDropdown.typical_liquidity.length > 0\n ? fundDataDropdown.typical_liquidity.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.coinvestment_number && fundDataDropdown.coinvestment_number.length > 0\n ? fundDataDropdown.coinvestment_number.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.private_equity && fundDataDropdown.private_equity.length > 0\n ? fundDataDropdown.private_equity.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.public_equity && fundDataDropdown.public_equity.length > 0\n ? fundDataDropdown.public_equity.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.private_debt && fundDataDropdown.private_debt.length > 0\n ? fundDataDropdown.private_debt.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.public_debt && fundDataDropdown.public_debt.length > 0\n ? fundDataDropdown.public_debt.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.other_instrument && fundDataDropdown.other_instrument.length > 0\n ? fundDataDropdown.other_instrument.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.vehicle_commingled_fund && fundDataDropdown.vehicle_commingled_fund.length > 0\n ? fundDataDropdown.vehicle_commingled_fund.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.vehicle_fund_of_one && fundDataDropdown.vehicle_fund_of_one.length > 0\n ? fundDataDropdown.vehicle_fund_of_one.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.vehicle_managed_account && fundDataDropdown.vehicle_managed_account.length > 0\n ? fundDataDropdown.vehicle_managed_account.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={6}\n wrapperCol={6}\n disabled={!hasOfferCoinvestments}\n allowClear\n options={\n fundDataDropdown?.other_vehicle && fundDataDropdown.other_vehicle.length > 0\n ? fundDataDropdown.other_vehicle.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n )\n}\n","import {\n FieldTimeOutlined,\n HighlightOutlined,\n HomeOutlined,\n InfoOutlined,\n MailOutlined,\n UserOutlined,\n} from '@ant-design/icons'\nimport { Col, Form, Modal, notification, Row, Spin } from 'antd'\nimport moment from 'moment'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { CodeOfConductResponse } from '../../../../shared/api/models/FirmDetails'\nimport { FormItemDatePicker, FormItemInput, FormItemSelect } from '../../../../shared/components/FormItemComponents'\n\nconst StyledModal = styled(Modal)`\n .ant-modal-body {\n padding: 0 1.5rem;\n overflow: auto;\n }\n`\ntype Props = {\n selectedConduct: CodeOfConductResponse | undefined\n showModal: boolean\n setShowModal: (value: boolean) => void\n setSelectedConduct: (value: CodeOfConductResponse | undefined) => void\n updateConduct: () => void\n firmId: string\n}\nexport const ModalEditConduct: React.FC = ({\n selectedConduct,\n showModal,\n setShowModal,\n setSelectedConduct,\n updateConduct,\n firmId,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (selectedConduct) {\n form.setFieldsValue({\n ...selectedConduct,\n time_stamp: selectedConduct.time_stamp ? moment(selectedConduct.time_stamp) : null,\n })\n } else {\n form.resetFields()\n }\n }, [form, selectedConduct])\n\n const handleUpdateRow = () => {\n const submitData = {\n email: form.getFieldValue('email'),\n time_stamp: selectedConduct\n ? selectedConduct.time_stamp\n : form.getFieldValue('time_stamp')\n ? moment(form.getFieldValue('time_stamp')).format('YYYY-MM-DD')\n : undefined,\n code_of_conduct: form.getFieldValue('code_of_conduct'),\n original_code_of_conduct: selectedConduct?.code_of_conduct,\n first_name: form.getFieldValue('first_name'),\n last_name: form.getFieldValue('last_name'),\n job_title: form.getFieldValue('job_title'),\n company: form.getFieldValue('company'),\n initials: form.getFieldValue('initials'),\n source: form.getFieldValue('source'),\n agreement_version: form.getFieldValue('agreement_version'),\n original_agreement_version: selectedConduct?.agreement_version,\n }\n\n form.validateFields(['email', 'time_stamp']).then(() => {\n setLoadingSubmit(true)\n selectedConduct\n ? APIService.firmDetailService\n .updateCodeOfConduct(firmId, submitData)\n .then(() => {\n notification.success({ message: 'Code Of Conduct Updated!' })\n updateConduct()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Code Of Conduct Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedConduct(undefined)\n form.resetFields()\n })\n : APIService.firmDetailService\n .createCodeOfConduct(firmId, submitData)\n .then(() => {\n notification.success({ message: 'Code Of Conduct Created!' })\n updateConduct()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Code Of Conduct Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedConduct(undefined)\n form.resetFields()\n })\n })\n }\n\n const LIST_FIELD = [\n {\n name: 'email',\n label: 'E-mail',\n placeHolder: 'E-mail',\n prefix: ,\n rules: [{ required: true, message: 'Email is required' }],\n },\n {\n name: 'time_stamp',\n label: 'Time Stamp',\n placeHolder: 'Time Stamp',\n prefix: ,\n rules: [{ required: true, message: 'Time Stamp is required' }],\n isDate: true,\n },\n {\n name: 'code_of_conduct',\n label: 'Code Of Conduct',\n options: [\n { text: 'Yes', value: 'Yes' },\n { text: 'No', value: 'No' },\n ],\n placeHolder: 'Code Of Conduct',\n },\n {\n name: 'first_name',\n label: 'First Name',\n placeHolder: 'First Name',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'last_name',\n label: 'Last Name',\n placeHolder: 'Last Name',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'job_title',\n label: 'Job Title',\n placeHolder: 'Job Title',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'company',\n label: 'Company',\n placeHolder: 'Company',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'initials',\n label: 'Initials',\n placeHolder: 'Initials',\n prefix: ,\n maxLength: 30,\n },\n {\n name: 'source',\n label: 'Source',\n placeHolder: 'Source',\n prefix: ,\n maxLength: 30,\n },\n {\n name: 'agreement_version',\n label: 'Agreement Version',\n placeHolder: 'Agreement Version',\n prefix: ,\n maxLength: 30,\n },\n ]\n\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={() => handleUpdateRow()}\n onCancel={() => {\n setSelectedConduct(undefined)\n setShowModal(false)\n }}\n >\n
\n
\n \n {LIST_FIELD.map((item) => {\n return item.isDate ? (\n \n ) : item.options ? (\n
\n \n \n ) : (\n \n \n \n )\n })}\n \n \n \n \n )\n}\n","import { DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Spin, Table, Tooltip } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FirmDetailDataContext } from '../../../../shared/api/context/FirmDetailDataContext'\nimport { CodeOfConductResponse } from '../../../../shared/api/models/FirmDetails'\nimport { Colors } from '../../../../shared/colors'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { ModalEditConduct } from './ModalEditConduct'\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow-x: auto;\n`\nexport const CodeOfConduct: React.FC = () => {\n const { dataFirmDetail } = React.useContext(FirmDetailDataContext)\n const [showModal, setShowModal] = React.useState(false)\n const [selectedConduct, setSelectedConduct] = React.useState()\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n const [itemDelete, setItemDelete] = React.useState()\n const { invoke: getCodeOfConduct, data: dataCodeOfConduct, loading } = useServiceState(\n APIService.firmDetailService.fetchCodeOfConduct,\n )\n\n React.useEffect(() => {\n getCodeOfConduct(dataFirmDetail?.firm_id)\n }, [dataFirmDetail, getCodeOfConduct])\n\n const deleteConduct = (record: CodeOfConductResponse) => {\n if (dataFirmDetail?.firm_id) {\n setLoadingDelete(true)\n APIService.firmDetailService\n .deleteCodeOfConduct(dataFirmDetail.firm_id, {\n email: record.email,\n time_stamp: record.time_stamp,\n agreement_version: record.agreement_version,\n code_of_conduct: record.code_of_conduct,\n })\n .then(() => {\n notification.success({ message: 'Code Of Conduct Delete!' })\n updateConduct()\n setItemDelete(undefined)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Code Of Conduct Delete Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n }\n\n const updateConduct = () => {\n dataFirmDetail && getCodeOfConduct(dataFirmDetail.firm_id)\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Time Stamp',\n dataIndex: 'time_stamp',\n key: 'time_stamp',\n },\n {\n title: 'First Name',\n dataIndex: 'first_name',\n key: 'first_name',\n },\n {\n title: 'Last Name',\n dataIndex: 'last_name',\n key: 'last_name',\n },\n {\n title: 'Company',\n dataIndex: 'company',\n key: 'company',\n },\n {\n title: 'Job Title',\n dataIndex: 'job_title',\n key: 'job_title',\n },\n {\n title: 'Email',\n dataIndex: 'email',\n key: 'email',\n },\n {\n title: 'Agreement Version',\n dataIndex: 'agreement_version',\n key: 'agreement_version',\n },\n {\n title: 'Code Of Conduct',\n dataIndex: 'code_of_conduct',\n key: 'code_of_conduct',\n width: 40,\n },\n {\n title: 'SOURCE',\n dataIndex: 'source',\n key: 'source',\n },\n {\n title: 'Initials',\n dataIndex: 'initials',\n key: 'initials',\n },\n {\n title: 'Action',\n key: 'action',\n render: (_, record) =>\n loadingDelete && record.email === itemDelete?.email && record.time_stamp === itemDelete.time_stamp ? (\n \n ) : (\n <>\n {\n setShowModal(true)\n setSelectedConduct(record)\n }}\n >\n \n \n \n \n\n {\n setItemDelete(record)\n deleteConduct(record)\n }}\n >\n \n \n \n ),\n },\n ]\n return (\n \n \n Submitter Code of Conduct\n \n
\n setShowModal(true)}\n disabled={loadingDelete}\n >\n Create New Code Of Conduct\n \n
\n 10 ? undefined : false}\n />\n {dataFirmDetail?.firm_id && (\n \n )}\n
\n )\n}\n","import { List } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FirmDetailDataContext } from '../../../../shared/api/context/FirmDetailDataContext'\nimport { LoadingDetails } from '../../../../shared/components/LoadingDetails'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 1rem;\n`\n\nexport const FirmDueDiligence: React.FC = () => {\n const { dataFirmDetail } = React.useContext(FirmDetailDataContext)\n const { invoke: getDataDocs, data: dataDocs, loading } = useServiceState(\n APIService.fundDetailService.fetchDueDiligenceDocuments,\n )\n\n React.useEffect(() => {\n dataFirmDetail?.firm_id && getDataDocs(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getDataDocs])\n\n const dataSource = React.useMemo(() => {\n if (!dataDocs) {\n return []\n }\n return [\n { label: 'Open Firm in Sharepoint', url: dataDocs.firm_url },\n { label: 'Search Firm ID in Sharepoint', url: dataDocs.search_url },\n ]\n }, [dataDocs])\n return (\n \n {dataDocs && (\n (\n \n \n {item.label}\n \n \n )}\n />\n )}\n {loading && }\n \n )\n}\n","import moment from 'moment'\n\nexport const getMonthRange = (startDate: string, endDate: string) => {\n const dateStart = moment(startDate, 'YYYY-MN')\n const dateEnd = moment(endDate, 'YYYY-MM')\n const tempStart = dateStart.clone()\n const results = []\n\n while (dateEnd > tempStart || tempStart.format('M') === dateEnd.format('M')) {\n results.push(tempStart.format('YYYY-MM'))\n tempStart.add(1, 'month')\n }\n return results\n}\n","import { notification, Row } from 'antd'\nimport moment from 'moment'\nimport React, { useEffect } from 'react'\nimport ReactDataSheet from 'react-datasheet'\nimport styled from 'styled-components'\nimport {\n FundDetailDataContext,\n PerformanceUpdateType,\n PERFORMANCE_REQUEST_ENUM,\n} from '../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetails } from '../../../../shared/api/models/FundDetails'\nimport { Colors } from '../../../../shared/colors'\nimport { LoadingDetails } from '../../../../shared/components/LoadingDetails'\nimport { getMonthRange } from '../../../../shared/utils/datetimeUtils'\n\nconst Wrapper = styled.div`\n input::-webkit-outer-spin-button,\n input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n input[type='number'] {\n -moz-appearance: textfield;\n }\n\n .data-grid-container .data-grid .cell.read-only {\n background: #f3f3f3;\n }\n\n padding: 1rem;\n`\n\nexport const DATE_FORMAT = 'YYYY-MM'\n\nexport interface GridElement extends ReactDataSheet.Cell {\n value: string | null\n originalValue?: string | null\n date?: string | null\n}\n\nconst headerRow = [\n { readOnly: true, value: 'Outstanding performance updates' },\n { readOnly: true, value: 'Returns (%)' },\n { readOnly: true, value: 'Asset (MM)' },\n { readOnly: true, value: 'NAV' },\n]\n\nexport const PerformanceUpdate: React.FC<{ fundDetails?: FundDetails; inceptionDate?: string }> = ({\n fundDetails,\n inceptionDate,\n}) => {\n const [grid, setGrid] = React.useState([headerRow])\n const [isUpdate, setIsUpdate] = React.useState(false)\n\n const {\n setPerformanceDataChange,\n getPerformanceRequest,\n performanceDataChange,\n dataLatestPerformance,\n latestPerformanceLoading: loading,\n } = React.useContext(FundDetailDataContext)\n\n const [draftData, setDraftData] = React.useState(performanceDataChange)\n\n React.useEffect(() => {\n if (draftData && dataLatestPerformance) {\n setIsUpdate(true)\n }\n }, [draftData, dataLatestPerformance])\n\n const parseGridData = (data: GridElement[][]): PerformanceUpdateType => {\n const arrayUpdate: PerformanceUpdateType = {}\n\n data.forEach((row, rowIndex) => {\n if (rowIndex === 0) {\n return\n }\n\n row.forEach((cell, cellIndex) => {\n if (cellIndex === 0) {\n return\n }\n\n // ROR\n if (cellIndex === 1 && row[0].value && cell.value && cell.value !== '') {\n arrayUpdate.rorChanges = [\n ...(arrayUpdate.rorChanges || []),\n {\n yyyy_mm: row[0].value,\n value: +cell.value,\n },\n ]\n }\n if (cellIndex === 2 && row[0].value && cell.value && cell.value !== '') {\n arrayUpdate.assetChanges = [\n ...(arrayUpdate.assetChanges || []),\n {\n yyyy_mm: row[0].value,\n value: +cell.value,\n },\n ]\n }\n if (cellIndex === 3 && row[0].value && cell.value && cell.value !== '') {\n arrayUpdate.navChanges = [\n ...(arrayUpdate.navChanges || []),\n {\n yyyy_mm: row[0].value,\n value: +cell.value,\n },\n ]\n }\n })\n })\n\n return arrayUpdate\n }\n\n useEffect(() => {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n }, [getPerformanceRequest])\n\n const updateGrid = React.useCallback(\n (data?: PerformanceUpdateType) => {\n if (!dataLatestPerformance) {\n return\n }\n const hasNoPerformance =\n !dataLatestPerformance.latest_asset && !dataLatestPerformance.latest_nav && !dataLatestPerformance.latest_ror\n\n const latestROR = dataLatestPerformance.latest_ror\n const latestNav = dataLatestPerformance.latest_nav\n const latestAsset = dataLatestPerformance.latest_asset\n\n // get the min date of latest data\n const startDate = moment.min([\n latestROR ? moment(latestROR, DATE_FORMAT) : moment(),\n latestNav ? moment(latestNav, DATE_FORMAT) : moment(),\n latestAsset ? moment(latestAsset, DATE_FORMAT) : moment(),\n ])\n\n // Prepare the available row as remaining months till now\n const dateList = getMonthRange(\n hasNoPerformance ? moment(inceptionDate).format(DATE_FORMAT) : startDate.format(DATE_FORMAT),\n moment().subtract(1, 'month').format(DATE_FORMAT),\n )\n\n const grid = [\n headerRow,\n ...dateList.map((dateRow) => {\n const latestRorMoment = moment(latestROR, DATE_FORMAT)\n const latestAssetMoment = moment(latestAsset, DATE_FORMAT)\n const latestNavMoment = moment(latestNav, DATE_FORMAT)\n const dateRowMoment = moment(dateRow, DATE_FORMAT)\n\n return [\n { readOnly: true, value: dateRow },\n {\n readOnly:\n !hasNoPerformance &&\n (latestRorMoment.isAfter(dateRowMoment, 'month') ||\n latestRorMoment.isSame(dateRowMoment, 'month') ||\n !latestRorMoment),\n value:\n data?.rorChanges?.find((item) => item.yyyy_mm === dateRow)?.value?.toString() ||\n (dataLatestPerformance &&\n dataLatestPerformance.latest_ror === dateRow &&\n dataLatestPerformance.latest_ror_value?.toFixed(4)) ||\n '',\n },\n {\n readOnly:\n !hasNoPerformance &&\n (latestAssetMoment.isAfter(dateRowMoment) ||\n latestAssetMoment.isSame(dateRowMoment, 'month') ||\n !latestAsset),\n value:\n data?.assetChanges?.find((item) => item.yyyy_mm === dateRow)?.value?.toString() ||\n (dataLatestPerformance &&\n dataLatestPerformance.latest_asset === dateRow &&\n dataLatestPerformance.latest_asset_value?.toFixed(3)) ||\n '',\n },\n {\n readOnly:\n !hasNoPerformance &&\n (latestNavMoment.isAfter(dateRowMoment) ||\n latestNavMoment.isSame(dateRowMoment, 'month') ||\n !latestNav),\n value:\n data?.navChanges?.find((item) => item.yyyy_mm === dateRow)?.value?.toString() ||\n (dataLatestPerformance &&\n dataLatestPerformance.latest_nav === dateRow &&\n dataLatestPerformance.latest_nav_value?.toFixed(6)) ||\n '',\n },\n ]\n }),\n ]\n\n setGrid(grid)\n },\n [dataLatestPerformance, inceptionDate],\n )\n\n React.useEffect(() => {\n // Clear draft if no draft is given (used for when cancel)\n if (!performanceDataChange || Object.keys(performanceDataChange).length <= 0) {\n setDraftData(undefined)\n updateGrid(undefined)\n setIsUpdate(false)\n }\n }, [performanceDataChange, updateGrid])\n\n // draw the grid\n React.useEffect(() => {\n updateGrid(draftData)\n }, [draftData, updateGrid])\n\n React.useEffect(() => {\n if (isUpdate && setPerformanceDataChange) {\n setPerformanceDataChange(parseGridData(grid))\n }\n }, [grid, isUpdate, setPerformanceDataChange])\n\n return (\n \n \n \n Currency: {fundDetails?.denomination}\n \n \n \n data={\n grid\n ? grid.map((row) => [\n // First Column\n {\n ...row[0],\n valueViewer: (cell) => {\n return (\n \n {cell.value}\n \n )\n },\n },\n // Rest Columns\n ...row.slice(1, row.length).map((item, index) => {\n const isAsset = index === 1\n const isNAV = index === 2\n return {\n ...item,\n className: item.value ? 'edited' : '',\n valueViewer: (props: any) => {\n return (\n \n \n {Number.isNaN(parseFloat(props.value)) && props.value}\n {!Number.isNaN(parseFloat(props.value)) &&\n (parseFloat(props.value) < 0\n ? `(${Math.abs(parseFloat(props.value)).toFixed(isNAV ? 6 : isAsset ? 3 : 4)})`\n : Math.abs(parseFloat(props.value)).toFixed(isNAV ? 6 : isAsset ? 3 : 4))}\n \n \n )\n },\n }\n }),\n ])\n : []\n }\n valueRenderer={(cell) => cell.value}\n isCellNavigable={(cell) => !cell.readOnly}\n onCellsChanged={(changes) => {\n if (changes[0].value && isNaN(+changes[0].value)) {\n notification.warn({ message: 'Input must be Number!' })\n return\n }\n\n const tempGrid = grid.map((row) => [...row])\n changes.forEach(({ row, col, value }) => {\n // ROR columns\n if (col === 1) {\n if (value && parseFloat(value) < -100) {\n notification.error({ message: 'Value must be greater than or equal to -100' })\n return\n }\n tempGrid[row][col] = {\n ...tempGrid[row][col],\n value: value && !isNaN(+value) ? parseFloat(value).toFixed(4) : null,\n }\n }\n if (col === 2) {\n tempGrid[row][col] = {\n ...tempGrid[row][col],\n value: value && !isNaN(+value) && +value >= 0 ? parseFloat(value).toFixed(3) : null,\n }\n if (value && +value < 0) {\n notification.warn({ message: 'Asset/NAV values should be positive' })\n }\n }\n if (col === 3) {\n tempGrid[row][col] = {\n ...tempGrid[row][col],\n value: value && !isNaN(+value) && +value > 0 ? parseFloat(value).toFixed(6) : null,\n }\n if (value && +value < 0) {\n notification.warn({ message: 'Asset/NAV values should be positive' })\n }\n }\n })\n setGrid(tempGrid)\n setIsUpdate(true)\n }}\n />\n {loading && }\n \n )\n}\n","export const isWarningAssetData = (prev?: number | null, next?: number | null): boolean => {\n if (next === null || next === undefined || prev === null || prev === undefined) {\n return false\n }\n const percentageDifference = ((next - prev) / prev) * 100\n\n if (prev <= 20 && (percentageDifference >= 1000 || percentageDifference <= -75)) {\n return true\n }\n if (prev <= 100 && prev > 20 && (percentageDifference >= 500 || percentageDifference <= -75)) {\n return true\n }\n if (prev <= 1000 && prev > 100 && (percentageDifference >= 100 || percentageDifference <= -50)) {\n return true\n }\n if (prev > 1000 && (percentageDifference >= 50 || percentageDifference <= -25)) {\n return true\n }\n return false\n}\n","import { Button, Modal, notification, Row, Upload } from 'antd'\nimport moment from 'moment'\nimport Papa from 'papaparse'\nimport React from 'react'\nimport { RORResponseType } from './DataSheet'\n\ntype Props = {\n isOpen: boolean\n setOpen: (value: boolean) => void\n setFileData: (value: RORResponseType[]) => void\n setIsUpdate: (value: boolean) => void\n minDate?: string | null\n}\nexport const ModalConfirmUpload: React.FC = ({ isOpen, setOpen, setFileData, setIsUpdate, minDate }) => {\n return (\n \n
\n \n
\n {\n Papa.parse(file, {\n header: true,\n skipEmptyLines: true,\n complete: (results) => {\n // validate year from file. Should be between Inception Date and now\n if (\n results.data.some((row) => {\n const textYear = Object.keys(row).find((item) => item.toLowerCase() === 'year') || ''\n if (\n !textYear ||\n (minDate && +row[textYear] < moment(minDate).year()) ||\n +row[textYear] > moment().year()\n ) {\n return true\n }\n })\n ) {\n notification.error({\n message: 'Invalid file format. Make sure the years are in range of Inception Date and now!',\n })\n return false\n }\n const reducerData = results.data.reduce((acc, cur) => {\n const textYear = Object.keys(cur).find((item) => item.toLowerCase() === 'year') || ''\n\n const yearData: RORResponseType[] = Object.keys(cur).reduce((accum, key) => {\n if (cur[key] === '' && key.toLowerCase() !== 'year') {\n return accum\n }\n return key.toLowerCase() === 'year'\n ? [...accum]\n : key.length === 1\n ? [...accum, { yyyy_mm: `${cur[textYear]}-0${key}`, value: +cur[key] }]\n : [...accum, { yyyy_mm: `${cur[textYear]}-${key}`, value: +cur[key] }]\n }, [] as RORResponseType[])\n return [...acc, ...yearData]\n }, [] as RORResponseType[])\n notification.success({ message: `File ${file.name} imported!` })\n setFileData(reducerData)\n setIsUpdate(true)\n setOpen(false)\n },\n })\n // Prevent upload\n return false\n }}\n >\n \n \n \n }\n >\n \n \n )\n}\n","import {\n CaretDownOutlined,\n CaretUpOutlined,\n DownloadOutlined,\n ExclamationCircleFilled,\n UploadOutlined,\n} from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Row, Select, Spin, Tooltip } from 'antd'\nimport JsFileDownload from 'js-file-download'\nimport moment from 'moment'\nimport React, { useMemo, useState } from 'react'\nimport ReactDataSheet from 'react-datasheet'\nimport { Link } from 'react-router-dom'\nimport ReactSelect, { ValueType } from 'react-select'\nimport styled from 'styled-components'\nimport { DATE_FORMAT } from '../../routes/Dashboard/FundDetail/FundROR/PerformanceUpdate'\nimport APIService from '../api'\nimport { FirmDetailDataContext } from '../api/context/FirmDetailDataContext'\nimport { FundDetailDataContext } from '../api/context/FundDetailDataContext'\nimport { Colors } from '../colors'\nimport { getMonthRange } from '../utils/datetimeUtils'\nimport { isWarningAssetData } from '../utils/validateData'\nimport { ModalConfirmUpload } from './ModalConfirmUpload'\n\nconst Wrapper = styled.div`\n input::-webkit-outer-spin-button,\n input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n input[type='number'] {\n -moz-appearance: textfield;\n }\n`\n\nexport enum DataSheetType {\n ROR = 'ROR',\n ASSET = 'ASSET',\n NAV = 'NAV',\n DISTRIBUTION = 'DISTRIBUTION',\n FIRM_ASSETS = 'FIRM_ASSET',\n FIRM_ASSETS_HF = 'FIRM_ASSET_HF',\n}\n\nexport interface GridElement extends ReactDataSheet.Cell {\n value: string | null\n originalValue?: string | null\n date?: string | null\n}\n\nexport interface RORResponseType {\n value: number | null\n yyyy_mm: string\n isEdited?: boolean\n isReadOnly?: boolean\n}\n\nexport interface RORResponseCalculate {\n value: number\n date: string\n}\n\nexport interface UpdateRORType {\n values: RORResponseType[] | undefined\n}\n\nconst monthConvert = [\n { text: 'Jan', value: '01' },\n { text: 'Feb', value: '02' },\n { text: 'Mar', value: '03' },\n { text: 'Apr', value: '04' },\n { text: 'May', value: '05' },\n { text: 'Jun', value: '06' },\n { text: 'Jul', value: '07' },\n { text: 'Aug', value: '08' },\n { text: 'Sep', value: '09' },\n { text: 'Oct', value: '10' },\n { text: 'Nov', value: '11' },\n { text: 'Dec', value: '12' },\n]\n\nconst parseGridData = (data: GridElement[][]): UpdateRORType => {\n const arrayUpdate: RORResponseType[] = []\n\n data.forEach((row, rowIndex) => {\n if (rowIndex === 0) {\n return\n }\n\n row.forEach((cell, cellIndex) => {\n if (cellIndex === 0 || cellIndex === 13) {\n return\n }\n const year = row[0].value\n if (!year) {\n return\n }\n\n if (cell.value && cell.value !== '') {\n arrayUpdate.push({\n yyyy_mm: `${row[0].value}-${monthConvert.find((item) => item.text === data[0][cellIndex].value)?.value}`,\n value: +cell.value,\n isEdited: cell.value !== cell.originalValue,\n })\n }\n })\n })\n\n return {\n values: arrayUpdate,\n }\n}\n\nconst sortByYear = (isAscending: boolean) => (a: GridElement[], b: GridElement[]) => {\n if (b[0].value === 'Year') {\n return 1\n }\n if (!a[0].value) {\n return 1\n }\n if (!b[0].value) {\n return -1\n }\n\n return isAscending\n ? Number.parseInt(a[0].value) - Number.parseInt(b[0].value)\n : Number.parseInt(b[0].value) - Number.parseInt(a[0].value)\n}\n\nconst compareCellValue = (prev: string | null, next: string | null, type?: DataSheetType) => {\n const prevValue = prev ? +prev : null\n const nextValue = next ? +next : null\n if (type === DataSheetType.ASSET) {\n if (!prev && next) {\n return false\n }\n return isWarningAssetData(prevValue, nextValue)\n }\n if (type === DataSheetType.NAV) {\n if (next !== null && nextValue === 0) {\n return true\n }\n }\n if (type === DataSheetType.ROR && nextValue !== null) {\n if (nextValue >= 20 || nextValue <= -20 || (next && nextValue === 0)) {\n return true\n }\n }\n\n return false\n}\n\ntype Props = {\n draft?: RORResponseType[]\n initialData?: RORResponseType[]\n loading?: boolean\n canAdd?: boolean\n setRORDataChange?: (value: UpdateRORType) => void\n type?: DataSheetType\n isReadOnly?: boolean\n isInCreateNewExFund?: boolean\n currencyValue?: string\n minDate?: string | null\n onCellSelect?: (date: string) => void\n isExternal?: boolean\n}\n\n//////////////////////////////////////\nconst DataSheet: React.FC = ({\n draft,\n initialData,\n loading,\n setRORDataChange,\n type,\n isReadOnly,\n isInCreateNewExFund,\n currencyValue,\n minDate,\n onCellSelect,\n isExternal = false,\n}) => {\n const headerRow = React.useMemo(() => {\n const header = [\n { readOnly: true, value: 'Year' },\n ...monthConvert.map((item) => ({ readOnly: true, value: item.text })),\n ]\n return type === DataSheetType.ROR ? [...header, { value: 'Annual', readOnly: true }] : header\n }, [type])\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { dataFirmDetail } = React.useContext(FirmDetailDataContext)\n const [grid, setGrid] = React.useState([headerRow])\n const [originalGrid, setOriginalGrid] = React.useState([headerRow])\n const [fileData, setFileData] = React.useState()\n const [draftData, setDraftData] = useState(draft)\n const [showModalUpload, setShowModalUpload] = React.useState(false)\n const [isUpdate, setIsUpdate] = React.useState(false)\n\n const [isAscending, setIsAscending] = React.useState(true)\n\n React.useEffect(() => {\n // Clear draft if no draft is given (used for when cancel)\n if (!draft) {\n setDraftData(undefined)\n setIsUpdate(false)\n setGrid(originalGrid)\n }\n }, [draft, originalGrid])\n\n const formatNumber = React.useCallback(\n (value: number) => {\n return type === DataSheetType.ASSET || type === DataSheetType.FIRM_ASSETS || type === DataSheetType.FIRM_ASSETS_HF\n ? value.toFixed(3)\n : type === DataSheetType.NAV\n ? value.toFixed(6)\n : type === DataSheetType.ROR\n ? value.toFixed(4)\n : value.toFixed(2)\n },\n [type],\n )\n\n // HFRDB-1751 - generate table from firm's year founded to the current month - 1 for External Firm Asset/Firm Asset HF\n const generateDataSheetData = React.useCallback(\n (data?: RORResponseType[]) => {\n // console.log(minDate)\n // if (!minDate) {\n // return data\n // }\n const startDate = moment.min([\n data && data.length ? moment(data[0].yyyy_mm, DATE_FORMAT) : moment(),\n minDate ? moment(minDate, 'YYYY-MM') : moment('2016-01', DATE_FORMAT),\n ])\n\n const endDate = moment.max([\n data && data.length ? moment(data[data.length - 1].yyyy_mm, DATE_FORMAT) : moment().subtract(1, 'month'),\n moment().subtract(1, 'month'),\n ])\n\n const monthRange = getMonthRange(startDate.format(DATE_FORMAT), endDate.format(DATE_FORMAT))\n\n return monthRange.reduce((acc, curr) => {\n const value = data && data.find((item) => item.yyyy_mm === curr)?.value\n return [...acc, { yyyy_mm: curr, value: value != null ? value : null }]\n }, [] as RORResponseType[])\n },\n [minDate],\n )\n\n const calculateAnnual = React.useCallback(\n (data: GridElement[]) => {\n const numerator =\n data\n .filter((x, index) => x.value && index !== 0 && x.value !== '')\n .map((x) => {\n const value = x.value ? parseFloat(x.value) : 0\n return Math.log(1 + value / 100)\n })\n .reduce((x, y) => x + y, 0) * 12\n\n const value = 100 * (-1 + Math.exp(numerator / 12))\n return { value: formatNumber(value), readOnly: true }\n },\n [formatNumber],\n )\n\n // transform data from yyyy_mm format to GridElement[][]\n const transformedData = React.useCallback(\n (data: RORResponseType[], type?: DataSheetType) => {\n return data.reduce((accumulator, currentValue) => {\n const year = currentValue.yyyy_mm.split('-')[0]\n const month = +currentValue.yyyy_mm.split('-')[1]\n const index = accumulator.findIndex((item) => item[0] && item[0].value === year)\n if (index > -1) {\n const currentRow = accumulator[index]\n const rowData = [\n ...currentRow.slice(0, month),\n {\n value: currentValue.value != null ? formatNumber(currentValue.value) : null,\n originalValue: currentValue.value != null ? formatNumber(currentValue.value) : null,\n date: currentValue.yyyy_mm,\n },\n ...currentRow.slice(month + 1, currentRow.length),\n ]\n\n const finalRow =\n type === DataSheetType.ROR\n ? [...rowData.slice(0, rowData.length - 1), calculateAnnual(rowData.slice(0, rowData.length - 1))]\n : rowData\n\n return [...accumulator.slice(0, index), finalRow, ...accumulator.slice(index + 1, accumulator.length)]\n }\n\n // special case to handle calculating the annual if there is only data for the last month of the first year\n if (month === 12 && type === DataSheetType.ROR) {\n const rowTemplate = [{ value: year }, ...new Array(13).fill({ date: '' })]\n const rowData = [\n ...rowTemplate.slice(0, 12),\n {\n value: currentValue.value != null ? formatNumber(currentValue.value) : null,\n originalValue: currentValue.value != null ? formatNumber(currentValue.value) : null,\n date: currentValue.yyyy_mm,\n },\n calculateAnnual([\n ...rowTemplate.slice(0, 12),\n {\n value: currentValue.value != null ? formatNumber(currentValue.value) : null,\n originalValue: currentValue.value != null ? formatNumber(currentValue.value) : null,\n date: currentValue.yyyy_mm,\n },\n ]),\n ]\n return [...accumulator, rowData]\n }\n\n const rowTemplate = [{ value: year }, ...new Array(type === DataSheetType.ROR ? 13 : 12).fill({ date: '' })]\n const rowData = [\n ...rowTemplate.slice(0, month),\n {\n value: currentValue.value != null ? formatNumber(currentValue.value) : null,\n originalValue: currentValue.value != null ? formatNumber(currentValue.value) : null,\n date: currentValue.yyyy_mm,\n },\n ...rowTemplate.slice(month + 1, rowTemplate.length),\n ]\n return [...accumulator, rowData]\n }, [] as GridElement[][])\n },\n [calculateAnnual, formatNumber],\n )\n\n React.useEffect(() => {\n if (draftData) {\n setIsUpdate(true)\n }\n }, [draftData])\n\n const finalData = useMemo(() => {\n const data = fileData || draftData || initialData\n const generatedData = generateDataSheetData(data)\n return generatedData\n }, [fileData, draftData, initialData, generateDataSheetData])\n\n React.useEffect(() => {\n if (initialData) {\n setIsUpdate(false)\n }\n }, [initialData])\n\n React.useEffect(() => {\n if (isUpdate && setRORDataChange) {\n setRORDataChange(parseGridData(grid))\n }\n }, [grid, isUpdate, setRORDataChange])\n\n React.useEffect(() => {\n if (initialData) {\n const generatedInitialData = generateDataSheetData(initialData)\n generatedInitialData && setOriginalGrid([headerRow, ...transformedData(generatedInitialData, type)])\n }\n }, [generateDataSheetData, headerRow, initialData, transformedData, type])\n\n const hashedOriginalData = useMemo(() => {\n if (!initialData) {\n return\n }\n return initialData.reduce((s, v) => {\n const year = v.yyyy_mm.split('-')[0]\n const month = +v.yyyy_mm.split('-')[1]\n\n return {\n ...s,\n [`${year}_${month}`]:\n v.value != null\n ? type === DataSheetType.ASSET ||\n type === DataSheetType.FIRM_ASSETS ||\n type === DataSheetType.FIRM_ASSETS_HF\n ? +v.value.toFixed(3)\n : type === DataSheetType.NAV\n ? +v.value.toFixed(6)\n : type === DataSheetType.ROR\n ? +v.value.toFixed(4)\n : +v.value.toFixed(2)\n : null,\n }\n }, {} as { [key: string]: number | null })\n }, [initialData, type])\n\n React.useEffect(() => {\n if (finalData) {\n setGrid([headerRow, ...transformedData(finalData, type)])\n }\n }, [finalData, headerRow, transformedData, type])\n\n // const handleAddRow = () => {\n // setGrid((prev) => [\n // ...prev,\n // type === DataSheetType.ROR ? [...new Array(13).fill({}), { readOnly: true }] : new Array(13).fill({}),\n // ])\n // }\n\n const handleRevertChanges = () => {\n setFileData(undefined)\n setGrid(originalGrid)\n setRORDataChange && setRORDataChange(parseGridData(originalGrid))\n setIsUpdate(false)\n }\n\n type OptionType = { label: string; value: string }\n\n const YearSelect = ({\n value,\n onCommit,\n onRevert,\n }: {\n value: string | undefined\n onCommit: (value: string, event?: React.KeyboardEvent) => void\n onRevert: () => void\n }) => {\n const ENTER_KEY = 13\n const TAB_KEY = 9\n const [event, setEvent] = React.useState | undefined>()\n\n function handleChange(opt: ValueType) {\n if (minDate && parseInt((opt as OptionType).value) - moment(minDate).year() < 0) {\n notification.error({\n message:\n type === DataSheetType.FIRM_ASSETS || type === DataSheetType.FIRM_ASSETS_HF\n ? `Year value must be on or after the year of Firm's Founded Date.`\n : `Year value must be on or after the year of Fund's Inception Date.`,\n })\n return onRevert()\n }\n if (!opt) {\n return onRevert()\n }\n onCommit((opt as OptionType).value, event)\n }\n\n function handleKeyDown(e: React.KeyboardEvent) {\n // record last key pressed so we can handle enter\n if (e.which === ENTER_KEY || e.which === TAB_KEY) {\n e.persist()\n setEvent(e)\n } else {\n setEvent(undefined)\n }\n }\n\n const options = new Array(2100 - 1970)\n .fill(null)\n .map((_, index) => ({ label: (1970 + index).toString(), value: (1970 + index).toString() }))\n\n return (\n ({ display: 'none' }),\n }}\n >\n {options.map((option) => {\n return (\n \n {option.label}\n \n )\n })}\n \n )\n }\n\n // object with year keys to track duplicated year\n\n const sortedGrid = React.useMemo(() => grid.sort(sortByYear(isAscending)), [grid, isAscending])\n\n const currentYears = React.useMemo(\n () =>\n grid.slice(1, grid.length).reduce<{ [key: string]: number[] }>((acc, row, index) => {\n if (row[0].value) return { ...acc, [row[0].value]: [...(acc[row[0].value] || []), index] }\n return acc\n }, {}),\n [grid],\n )\n\n const setFileName = (type: DataSheetType) => {\n switch (type) {\n case DataSheetType.ASSET:\n return 'asset'\n case DataSheetType.ROR:\n return 'ror'\n case DataSheetType.NAV:\n return 'nav'\n case DataSheetType.DISTRIBUTION:\n return 'distribution'\n case DataSheetType.FIRM_ASSETS:\n return 'firm_asset'\n default:\n break\n }\n }\n\n const handleExportCSV = async () => {\n if (!type) {\n return\n }\n const fileName = setFileName(type) || ''\n if (dataFirmDetail) {\n const id = dataFirmDetail.firm_id\n const res = await APIService.fundService.fetchRORExport(fileName, id)\n JsFileDownload(res.data, `${id}-${fileName}.csv`, 'application/csv')\n }\n if (dataFundDetail) {\n const id = dataFundDetail.fund_id\n const res = await APIService.fundService.fetchRORExport(fileName, id)\n JsFileDownload(res.data, `${id}-${fileName}.csv`, 'application/csv')\n }\n }\n\n return (\n \n {!isReadOnly && (\n <>\n \n
\n {!isInCreateNewExFund && (\n \n )}\n {!isExternal && (\n <>\n \n\n {showModalUpload && (\n \n )}\n \n \n \n \n )}\n
\n {type !== DataSheetType.FIRM_ASSETS && type !== DataSheetType.FIRM_ASSETS_HF && (\n
\n \n \n \n
\n )}\n
\n {currencyValue && (\n \n \n Currency: {currencyValue}\n \n \n )}\n \n )}\n \n onSelect={(selection) => {\n // single select\n if (\n onCellSelect &&\n selection.end.i === selection.start.i &&\n selection.start.j === selection.end.j &&\n selection.start.i >= 1 &&\n 1 <= selection.start.j &&\n selection.start.j <= 12\n ) {\n const selectedYear = grid[selection.start.i][0].value\n const selectedMonth = selection.start.j < 10 ? `0${selection.start.j}` : selection.start.j\n selectedYear && setTimeout(() => onCellSelect(`${selectedYear}-${selectedMonth}`), 0)\n }\n }}\n data={\n sortedGrid\n ? sortedGrid.map((row, index) => [\n index === 0\n ? {\n ...row[0],\n readOnly: isReadOnly ? true : row[0].readOnly,\n valueViewer: (props) => {\n return (\n setIsAscending(!isAscending)}\n >\n {isAscending ? : }\n {props.value}\n \n )\n },\n }\n : {\n ...row[0],\n readOnly: true, // disable editting year according to https://hfrsvc.atlassian.net/jira/software/projects/HFRDB/boards/1?assignee=61d7b2c068926d0068780b3f&selectedIssue=HFRDB-2083\n dataEditor: (props) => (\n \n ),\n valueViewer: (props) => {\n const isDuplicated = row[0].value && currentYears[row[0].value.toString()]?.length > 1\n return (\n \n {isDuplicated && (\n \n \n \n )}\n {props.value}\n \n )\n },\n },\n\n ...row.slice(1, row.length).map((item, rowIndex) => {\n const year = row[0].value\n const prevMonthAsDate = moment(`${year}-${rowIndex + 1}`, DATE_FORMAT).subtract(1, 'month')\n\n let prevCell = null\n\n if (prevMonthAsDate.get('month') === 11 && index > 1) {\n prevCell =\n sortedGrid[index - 1].find((item) => item.date === prevMonthAsDate.format(DATE_FORMAT))?.value ||\n null\n } else {\n prevCell = row.find((item) => item.date === prevMonthAsDate.format(DATE_FORMAT))?.value || null\n }\n\n const originalCell =\n hashedOriginalData &&\n hashedOriginalData[`${year}_${rowIndex + 1}`] !== undefined &&\n hashedOriginalData[`${year}_${rowIndex + 1}`] !== null\n ? `${hashedOriginalData[`${year}_${rowIndex + 1}`]}`\n : null\n\n const isEdited =\n ((!item.value && originalCell) ||\n (item.value && !originalCell) ||\n (item.value && originalCell && +item.value !== +originalCell)) &&\n index !== 0 &&\n rowIndex !== 12 &&\n !(isExternal && dataFundDetail?.fund_status_code === '2' && originalCell === null)\n\n const isWarning =\n rowIndex !== 12 &&\n item.value &&\n (compareCellValue(type === DataSheetType.ASSET ? prevCell : originalCell, item.value, type) ||\n (type === DataSheetType.ASSET && +item.value === 0))\n\n const isOutOfDateRange =\n rowIndex !== 12 &&\n (moment()\n .subtract(1, 'month')\n .isBefore(moment(`${year}-${rowIndex + 1}`)) ||\n (moment().subtract(1, 'month').month() < rowIndex &&\n year &&\n parseInt(year) === moment().year()) ||\n (minDate &&\n moment(minDate).month() > rowIndex &&\n year &&\n parseInt(year) === moment(minDate).year()))\n\n return {\n ...item,\n className: isEdited && !isOutOfDateRange ? 'edited' : '',\n // readOnly for all cells in tables in Overview tab and the Annual Column in ROR Tables\n\n readOnly:\n isReadOnly ||\n rowIndex === 12 ||\n // ((type === DataSheetType.FIRM_ASSETS || type === DataSheetType.FIRM_ASSETS_HF) &&\n // originalCell &&\n // isExternal) ||\n isOutOfDateRange ||\n (isExternal && dataFundDetail?.fund_status_code === '2' && originalCell === null)\n ? true\n : row[0].readOnly,\n\n valueViewer: (props: any) => {\n if (isOutOfDateRange) {\n return
\n }\n return (\n \n {isWarning && !isReadOnly && (\n \n \n \n )}\n \n {parseFloat(props.value) < 0\n ? `(${formatNumber(Math.abs(parseFloat(props.value)))})`\n : props.value}\n \n
\n )\n },\n }\n }),\n ])\n : []\n }\n valueRenderer={(cell) => cell.value}\n onCellsChanged={(changes) => {\n if (isReadOnly || !changes.length) {\n return\n }\n if (changes[0].value && isNaN(+changes[0].value)) {\n notification.error({ message: 'Input must be Number!' })\n return\n }\n if (\n changes[0].value &&\n parseFloat(changes[0].value) < 0 &&\n (type === DataSheetType.FIRM_ASSETS ||\n type === DataSheetType.ASSET ||\n type === DataSheetType.NAV ||\n type === DataSheetType.FIRM_ASSETS_HF)\n ) {\n notification.error({ message: 'Value must be greater than 0' })\n return\n }\n if (changes[0].value && parseFloat(changes[0].value) < -100) {\n notification.error({ message: 'Value must be greater than or equal to -100' })\n return\n }\n const tempGrid = grid.map((row) => [...row])\n changes.forEach(({ row, col, value }) => {\n if (col === 0) {\n tempGrid[row][col] = { ...tempGrid[row][col], value }\n } else {\n let resolvedValue: string | null = value\n\n // Disable delete original cell data for External user\n if (\n isExternal &&\n originalGrid.sort(sortByYear(isAscending))[row][col].originalValue &&\n (value == null || value === '')\n ) {\n notification.warn({ message: 'Delete historical data is not allowed', key: 'delete-not-allowed' })\n return\n }\n\n if (\n !value ||\n isNaN(+value) ||\n ((type === DataSheetType.FIRM_ASSETS ||\n type === DataSheetType.ASSET ||\n type === DataSheetType.NAV ||\n type === DataSheetType.FIRM_ASSETS_HF) &&\n +value < 0)\n ) {\n resolvedValue = null\n }\n tempGrid[row][col] = {\n ...tempGrid[row][col],\n value: resolvedValue ? formatNumber(+resolvedValue) : null,\n }\n }\n })\n\n const tempGridROR = tempGrid.map((row, indexRow) => {\n if (indexRow === 0) {\n return row\n }\n return [...row.slice(0, row.length - 1), { ...calculateAnnual(row.slice(0, row.length - 1)) }]\n })\n\n if (type === DataSheetType.ROR) {\n setGrid(tempGridROR)\n } else {\n setGrid(tempGrid)\n }\n setIsUpdate(true)\n }}\n />\n\n {/* {!isReadOnly && !(type === DataSheetType.ROR || type === DataSheetType.NAV || type === DataSheetType.ASSET) && (\n \n \n \n )} */}\n {loading && (\n \n \n \n )}\n
\n )\n}\n\nexport default DataSheet\n","import React from 'react'\n\ntype Props = {\n loading?: boolean\n submitForm?: boolean\n}\nexport const NextBackButton: React.FC = () => {\n return (\n
\n {/* {*/}\n {/* console.log('back')*/}\n {/* }}*/}\n {/* style={{ marginRight: 8 }}*/}\n {/*>*/}\n {/* Back*/}\n {/**/}\n {/**/}\n {/* Next*/}\n {/**/}\n
\n )\n}\n","import { Row } from 'antd'\nimport React from 'react'\nimport { FirmDetailDataContext } from '../../../../shared/api/context/FirmDetailDataContext'\nimport DataSheet, { DataSheetType, RORResponseType, UpdateRORType } from '../../../../shared/components/DataSheet'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\n\ntype Props = {\n dataFirmAsset: RORResponseType[] | undefined\n dataLoadingFirmAssets: boolean\n firmAssetsSubmitting: boolean\n firmAssetDataChange: UpdateRORType\n setFirmAssetsDataChange: (value: UpdateRORType) => void\n firmAssetsHFDataChange: UpdateRORType\n dataFirmAssetHF: RORResponseType[] | undefined\n loadingFirmAssetHF: boolean\n submittingFirmAssetHF: boolean\n onUpdateHFData: (value: UpdateRORType) => void\n}\nexport const FirmAssets: React.FC = ({\n dataFirmAsset,\n dataLoadingFirmAssets,\n firmAssetDataChange,\n setFirmAssetsDataChange,\n firmAssetsSubmitting,\n firmAssetsHFDataChange,\n dataFirmAssetHF,\n loadingFirmAssetHF,\n submittingFirmAssetHF,\n onUpdateHFData,\n}) => {\n const { dataFirmDetail } = React.useContext(FirmDetailDataContext)\n return (\n \n \n \n \n \n \n \n )\n}\n","import { Col, Row, Space } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React, { useState } from 'react'\nimport styled from 'styled-components'\nimport { FundDropdownCodeType } from '../../../../shared/api/models/FundDetails'\nimport { MinorityType } from '../../../../shared/api/services/minority.service'\nimport { FormItemCheckBox, FormItemRadio } from '../../../../shared/components/FormItemComponents'\nimport { MODE_ESG_VIEW } from '../../../../shared/components/FundESGSection'\nimport { RenderLabelExFirm } from '../../../../shared/components/RenderLabelExFirm'\nimport { RenderLabelFormFirm } from '../../../../shared/components/RenderLabelFormFirm'\n\nconst Wrapper = styled.div`\n padding: 1rem;\n`\n\nconst WrapperMinority = styled.div`\n padding: 1rem;\n`\n\ntype Props = {\n modeView: number\n form: FormInstance\n minorityTypes?: MinorityType[]\n setDataFirmDetailSubmit: any\n firmCountry: FundDropdownCodeType | undefined\n}\n\nconst FirmDI: React.FC = ({ modeView, form, minorityTypes, setDataFirmDetailSubmit, firmCountry }) => {\n const isMinorityOwnedFirm = form.getFieldValue('is_minority_or_woman_owned_firm')\n\n React.useEffect(() => {\n if (!minorityTypes || !minorityTypes.length) {\n return\n }\n if (isMinorityOwnedFirm === false) {\n minorityTypes?.map((item) => {\n const currentValue = form.getFieldValue(`minority_type_${item.id}`)\n if (!currentValue) {\n return\n }\n setDataFirmDetailSubmit((prevState: any) => ({\n ...prevState,\n [`minority_type_${item.id}`]: false,\n }))\n form.setFieldsValue({ [`minority_type_${item.id}`]: false })\n })\n }\n }, [form, isMinorityOwnedFirm, minorityTypes, setDataFirmDetailSubmit])\n\n const renderLabelField = (value: string) => {\n return modeView === MODE_ESG_VIEW.EXTERNAL ? (\n \n ) : (\n \n )\n }\n\n return (\n \n \n \n
\n

Minority- or Woman-Owned Management Company

\n \n \n \n \n \n Applicable only to the management firm that is physically headquartered in{' '}\n {firmCountry === undefined ? '[Firm_country]' : firmCountry.code_description}\n \n \n \n \n \n \n Minority- or Woman-Owned: A hedge fund management company is deemed to be a minority- or woman-owned\n business if: Greater than 50% of the management company is owned by one or more minorities or women, or in\n the case of a publicly owned business, greater than 50% of all issued stock is owned by one or more\n minorities or women; and whose management and daily business operations are controlled by one or more such\n individuals.\n \n \n \n \n \n \n \n \n \n {isMinorityOwnedFirm ? (\n \n \n If ‘Yes’, please check all that apply:\n \n \n ) : null}\n \n {isMinorityOwnedFirm ? (\n \n \n \n Type\n \n \n Description\n \n \n {minorityTypes?.map((item, index) => {\n return (\n \n \n \n \n {item.minority_description}\n \n )\n })}\n \n ) : null}\n \n \n )\n}\n\nexport default FirmDI\n","import { Checkbox, Col, Form, Radio, Row, Select } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport TextArea from 'antd/lib/input/TextArea'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FirmDetailDataContext } from '../../../../shared/api/context/FirmDetailDataContext'\nimport { FundCCMCResponse } from '../../../../shared/api/models/FundDetails'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 1rem;\n\n th.ant-table-cell {\n vertical-align: top;\n }\n\n td.ant-table-cell {\n vertical-align: top;\n }\n .ant-form-item {\n margin-bottom: 0;\n }\n .ant-radio-wrapper {\n white-space: normal;\n }\n`\n\ntype Props = {\n initialData?: FundCCMCResponse[]\n data?: FundCCMCResponse[]\n form: FormInstance\n}\n\nconst FirmCCMC: React.FC = ({ initialData, data, form }) => {\n const { fundDataDropdown } = React.useContext(FirmDetailDataContext)\n\n const columns: ColumnProps[] = [\n {\n title: 'Fund Name',\n key: 'fund_name',\n dataIndex: 'fund_name',\n render: (value) => {value},\n width: '30%',\n },\n {\n title: (\n
\n 1(a). Does the fund currently hold any investments whether directly or indirectly (e.g.,{' '}\n publicly traded stocks, bonds, derivatives, warrants, ADRs, GDRs, ETFs, index funds and mutual funds)\n related to the securities identified in{' '}\n E.O. 13959?\n
\n ),\n key: 'has_securities',\n render: (_, rowData) => {\n const isEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.has_securities !== initialData.find((item) => item.fund_id === rowData.fund_id)?.has_securities\n return (\n \n \n Yes\n No\n Does Not Apply to Fund\n \n \n )\n },\n width: '20%',\n },\n {\n title: (\n
\n 1(b). If “Yes” to 1(a), confirm your plan\n to divest of these assets by the{' '}\n November 11, 2021 U.S. deadline, and\n that you will not add to such positions in the meantime.\n
\n ),\n key: 'manager_confirms',\n render: (_, rowData) => {\n const isEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.manager_confirms !==\n initialData.find((item) => item.fund_id === rowData.fund_id)?.manager_confirms\n return (\n \n \n Manager Confirms\n Manager Does Not Confirm\n \n \n )\n },\n width: '20%',\n },\n {\n title: (\n <>\n

\n 2. Identify or describe any measures you have or will be implementing to prevent the international or\n inadvertent purchase of investments related to the prohibited securities on an ongoing basis.\n

\n

\n \n Below is a link to the complete list of prohibited securities available on the U.S. Department of Treasury\n website:\n \n

\n \n https://www.treasury.gov/ofac/downloads/ccmc/nsccmclist.pdf\n \n \n ),\n width: '30%',\n render: (_, rowData) => {\n const isSeparateShareClassesEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.separate_share_classes !==\n initialData.find((item) => item.fund_id === rowData.fund_id)?.separate_share_classes\n const isPreTradeEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.pre_trade_compliance_restrictions !==\n initialData.find((item) => item.fund_id === rowData.fund_id)?.pre_trade_compliance_restrictions\n const isOtherEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.other_measures !== initialData.find((item) => item.fund_id === rowData.fund_id)?.other_measures\n return (\n <>\n \n
\n \n \n Separate Share Classes\n \n \n \n \n Pre-trade Compliance Restrictions\n \n \n \n \n \n \n \n \n )\n },\n },\n {\n title: '3. Subscription Advanced Notice (# days)',\n width: 120,\n render: (_, rowData) => {\n const isEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.subscription_notice !==\n initialData.find((item) => item.fund_id === rowData.fund_id)?.subscription_notice\n return (\n \n 0\n ? fundDataDropdown?.subscription_advance_notice.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n )\n },\n },\n ]\n\n const finalData = React.useMemo(\n () =>\n (data || initialData || [])\n .sort((a, b) => (a.fund_name > b.fund_name ? 1 : -1))\n .map((item) => ({\n ...item,\n fund_name: initialData?.find((i) => i.fund_id === item.fund_id)?.fund_name || '',\n })),\n [data, initialData],\n )\n\n return (\n \n (a.fund_name > b.fund_name ? 1 : -1))}\n pagination={{ hideOnSinglePage: true }}\n scroll={{ y: 'calc(100% - 400px)' }}\n />\n \n )\n}\n\nexport default FirmCCMC\n","import { Checkbox, Col, Form, Radio, Row, Select } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport TextArea from 'antd/lib/input/TextArea'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FirmDetailDataContext } from '../../../../shared/api/context/FirmDetailDataContext'\nimport { FundCCMCResponse } from '../../../../shared/api/models/FundDetails'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 1rem;\n\n th.ant-table-cell {\n vertical-align: top;\n }\n\n td.ant-table-cell {\n vertical-align: top;\n }\n .ant-form-item {\n margin-bottom: 0;\n }\n .ant-radio-wrapper {\n white-space: normal;\n }\n`\n\ntype Props = {\n initialData?: FundCCMCResponse[]\n data?: FundCCMCResponse[]\n form: FormInstance\n}\n\nconst FirmCMIC: React.FC = ({ initialData, data, form }) => {\n const { fundDataDropdown } = React.useContext(FirmDetailDataContext)\n\n const columns: ColumnProps[] = [\n {\n title: 'Fund Name',\n key: 'fund_name',\n dataIndex: 'fund_name',\n render: (value) => {value},\n width: '30%',\n },\n {\n title: (\n
\n 1(a). Does the fund currently hold any investments whether directly or indirectly (e.g.,{' '}\n publicly traded stocks, bonds, derivatives, warrants, ADRs, GDRs, ETFs, index funds and mutual funds)\n related to the securities identified in{' '}\n E.O. 14032?\n
\n ),\n key: 'has_securities',\n render: (_, rowData) => {\n const isEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.has_securities !== initialData.find((item) => item.fund_id === rowData.fund_id)?.has_securities\n return (\n \n \n Yes\n No\n Does Not Apply to Fund\n \n \n )\n },\n width: '20%',\n },\n {\n title: (\n
\n 1(b). If Yes to 1(a), confirm your plan to\n divest of these assets by the U.S. deadline of{' '}\n June 23, 2022, and that you will not add\n to such positions in the meantime.\n
\n ),\n key: 'manager_confirms',\n render: (_, rowData) => {\n const isEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.manager_confirms !==\n initialData.find((item) => item.fund_id === rowData.fund_id)?.manager_confirms\n return (\n \n \n Manager Confirms\n Manager Does Not Confirm\n \n \n )\n },\n width: '20%',\n },\n {\n title: (\n <>\n

\n 2. Identify or describe any measures you have or will be implementing to prevent the intentional or\n inadvertent purchase of investments related to the prohibited securities on an ongoing basis.\n

\n \n Below is a link to the complete list of prohibited securities available on the U.S. Department of Treasury\n website:\n \n

\n PDF: \n \n https://www.treasury.gov/ofac/downloads/ccmc/nscmiclist.pdf\n \n

\n

\n TXT: \n \n https://www.treasury.gov/ofac/downloads/ccmc/nscmiclist.txt\n \n

\n \n ),\n width: '30%',\n render: (_, rowData) => {\n const isSeparateShareClassesEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.separate_share_classes !==\n initialData.find((item) => item.fund_id === rowData.fund_id)?.separate_share_classes\n const isPreTradeEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.pre_trade_compliance_restrictions !==\n initialData.find((item) => item.fund_id === rowData.fund_id)?.pre_trade_compliance_restrictions\n const isOtherEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.other_measures !== initialData.find((item) => item.fund_id === rowData.fund_id)?.other_measures\n return (\n <>\n \n
\n \n \n Separate Share Classes\n \n \n \n \n Pre-trade Compliance Restrictions\n \n \n \n \n \n \n \n \n )\n },\n },\n {\n title: '3. Subscription Advanced Notice (# days)',\n width: 120,\n render: (_, rowData) => {\n const isEdited =\n !initialData || initialData.length === 0\n ? false\n : rowData.subscription_notice !==\n initialData.find((item) => item.fund_id === rowData.fund_id)?.subscription_notice\n return (\n \n 0\n ? fundDataDropdown?.subscription_advance_notice.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n )\n },\n },\n ]\n\n const finalData = React.useMemo(\n () =>\n (data || initialData || [])\n .sort((a, b) => (a.fund_name > b.fund_name ? 1 : -1))\n .map((item) => ({\n ...item,\n fund_name: initialData?.find((i) => i.fund_id === item.fund_id)?.fund_name || '',\n })),\n [data, initialData],\n )\n\n return (\n \n (a.fund_name > b.fund_name ? 1 : -1))}\n pagination={{ hideOnSinglePage: true }}\n scroll={{ y: 'calc(100% - 400px)' }}\n />\n \n )\n}\n\nexport default FirmCMIC\n","import { Tabs } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundCCMCResponse } from '../../../../shared/api/models/FundDetails'\nimport FirmCCMC from '../CCMC/FirmCCMC'\nimport FirmCMIC from '../CMIC/FirmCMIC'\n\nconst { TabPane } = Tabs\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n padding: 05;\n`\n\ntype Props = {\n initialCCMCData?: FundCCMCResponse[]\n initialCMICData?: FundCCMCResponse[]\n ccmcData?: FundCCMCResponse[]\n cmicData?: FundCCMCResponse[]\n form: FormInstance\n}\n\nconst FirmExecutiveOrders: React.FC = ({ ccmcData, cmicData, initialCMICData, initialCCMCData, form }) => {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default FirmExecutiveOrders\n","import React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FormItemInput, FormItemSelect, FormItemTextArea } from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelFormFirm } from '../../../../shared/components/RenderLabelFormFirm'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 0.5rem 3rem;\n flex-direction: column;\n`\n\nexport const FirmNonSecInfo: React.FC = () => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n return (\n \n }\n labelCol={5}\n wrapperCol={10}\n allowClear\n options={\n fundDataDropdown?.non_sec_country && fundDataDropdown.non_sec_country.length > 0\n ? fundDataDropdown.non_sec_country.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n allowClear\n labelCol={5}\n wrapperCol={10}\n options={\n fundDataDropdown?.non_sec_reg_auth && fundDataDropdown.non_sec_reg_auth.length > 0\n ? fundDataDropdown.non_sec_reg_auth.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={5}\n wrapperCol={10}\n maxLength={30}\n />\n \n
Reg Auth Type
\n \n
\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport {\n FormItemCheckBox,\n FormItemInput,\n FormItemSelect,\n FormItemTextArea,\n} from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelFormFirm } from '../../../../shared/components/RenderLabelFormFirm'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 1rem 3rem;\n flex-direction: column;\n`\n\nexport const FirmSecInfo: React.FC = () => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n return (\n \n } />\n
\n }\n labelCol={10}\n wrapperCol={14}\n maxLength={10}\n />\n }\n labelCol={10}\n wrapperCol={14}\n allowClear\n options={\n fundDataDropdown?.sec_country && fundDataDropdown.sec_country.length > 0\n ? fundDataDropdown.sec_country.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n
\n
\n }\n labelCol={10}\n wrapperCol={14}\n maxLength={6}\n />\n }\n labelCol={10}\n wrapperCol={14}\n allowClear\n options={\n fundDataDropdown?.sec_state && fundDataDropdown.sec_state.length > 0\n ? fundDataDropdown.sec_state.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n
\n }\n labelCol={5}\n wrapperCol={7}\n allowClear\n options={\n fundDataDropdown?.organization_type && fundDataDropdown.organization_type.length > 0\n ? fundDataDropdown.organization_type.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n }\n labelCol={5}\n wrapperCol={10}\n allowClear\n options={\n fundDataDropdown?.sec_exemption_reason_type && fundDataDropdown.sec_exemption_reason_type.length > 0\n ? fundDataDropdown.sec_exemption_reason_type.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n
\n )\n}\n","import { Tabs } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FirmDetailLabelSearchContext } from '../../../../shared/api/context/FirmDetailLabelSearchContext'\nimport { LeftNavFirmEnum, RightTabFirmEnum } from '../../../../shared/SearchFirmLabel'\nimport { FirmNonSecInfo } from './FirmNonSecInfo'\nimport { FirmSecInfo } from './FirmSecInfo'\nconst { TabPane } = Tabs\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n`\nconst RIGHT_TAB_PANE = [\n {\n id: RightTabFirmEnum.SEC_INFO,\n },\n {\n id: RightTabFirmEnum.NON_SEC_INFO,\n },\n]\nexport const FirmRegMain: React.FC = () => {\n const { isFiltering, filterArr } = React.useContext(FirmDetailLabelSearchContext)\n\n const listSearch = React.useMemo(() => {\n return filterArr.filter((item) => item.leftNav === LeftNavFirmEnum.FIRM_REG_INFORMATION)\n }, [filterArr])\n\n const renderTab = (index: RightTabFirmEnum) => {\n switch (index) {\n case RightTabFirmEnum.SEC_INFO:\n return \n case RightTabFirmEnum.NON_SEC_INFO:\n return \n\n default:\n break\n }\n }\n return (\n \n {RIGHT_TAB_PANE.map((item) => {\n const showTabPane = listSearch.findIndex((i) => i.rightTab && i.rightTab === item.id)\n if (showTabPane === -1 && isFiltering) {\n return null\n }\n return (\n \n {renderTab(item.id)}\n \n )\n })}\n \n )\n}\n","import { Col, Form, Modal, notification, Row, Spin } from 'antd'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../app/rootReducer'\nimport APIService from '../../shared/api'\nimport { ExFundDetails } from '../../shared/api/models/ExFundDetails'\nimport { FormItemInput, FormItemTextArea } from '../../shared/components/FormItemComponents'\ntype Props = {\n showModal: boolean\n setShowModal: (value: boolean) => void\n selectedFund: ExFundDetails\n setSelectedFund: (value: ExFundDetails | undefined) => void\n updateListFund: () => void\n}\nexport const ModalFundActivation: React.FC = ({\n showModal,\n setShowModal,\n selectedFund,\n setSelectedFund,\n updateListFund,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [form] = Form.useForm()\n\n const handleSubmit = () => {\n form.validateFields(['contact_person', 'contact_phone', 'contact_email', 'additional_comments']).then(() => {\n setLoadingSubmit(true)\n const submitData = {\n contact_person: form.getFieldValue('contact_person'),\n contact_phone: form.getFieldValue('contact_phone'),\n contact_email: form.getFieldValue('contact_email'),\n additional_comments: form.getFieldValue('additional_comments'),\n }\n APIService.fundDetailService\n .updateFundStatusActivate(selectedFund.fund_id, submitData)\n .then(() => {\n notification.success({ message: 'Your activation request has been sent to our team!' })\n updateListFund()\n })\n .catch((err) => {\n console.error(err)\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedFund(undefined)\n })\n })\n }\n\n const { user } = useSelector((state: RootState) => state.user)\n\n React.useEffect(() => {\n if (user) {\n form.setFieldsValue({\n contact_person: user.first_name,\n contact_phone: user.business_phone,\n contact_email: user.email,\n })\n }\n }, [form, user])\n\n return (\n {\n setShowModal(false)\n setSelectedFund(undefined)\n }}\n title=\"Fund Status Change Request\"\n okText={\n loadingSubmit ? (\n <>\n \n \n ) : (\n 'OK'\n )\n }\n onOk={handleSubmit}\n >\n
\n \n
\n \n \n \n \n \n \n \n \n )\n}\n","import { ReloadOutlined, SearchOutlined } from '@ant-design/icons'\nimport { Button, DatePicker, Input, notification, Radio, Row, Select, Space, Table, Tag } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport moment from 'moment'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport { updateExSearchParams } from '../../routes/Dashboard/DashboardTab/SearchForm/redux/searchParamsSlice'\nimport { ColumnPropsExtended } from '../../routes/ExternalDashboard/ExColumnBuilder/columnSource'\nimport { ModalFundActivation } from '../../routes/ExternalDashboard/ModalFundActivation'\nimport { addTabs, FundFirmTypeEnum, PREFIX_EXTERNAL } from '../../slice/appSettingsSlice'\nimport { FundDetailDropdownContext } from '../api/context/FundDetailDropdownContext'\nimport { ExFundDetails } from '../api/models/ExFundDetails'\nimport { FundDropdownCodeType, FundDropdownType } from '../api/models/FundDetails'\nimport { Colors } from '../colors'\nimport { LeftNavExFirmEnum } from '../SearchExFirmLabel'\nimport { LeftNavExFundEnum } from '../SearchExFundLabel'\nimport { LeftNavFirmEnum } from '../SearchFirmLabel'\nimport { LeftNavFundEnum } from '../SearchFundLabel'\nimport APIService from '../api'\nimport JsFileDownload from 'js-file-download'\n\nconst Footer = styled.div`\n position: absolute;\n bottom: 0px;\n display: flex;\n height: 56px;\n justify-content: flex-end;\n align-items: center;\n`\n\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: column;\n\n .ant-table-fixed-left .ant-table-body-inner {\n overflow-x: hidden;\n }\n\n .ant-table-container {\n border-bottom: solid 1px #f0f0f0;\n }\n\n .ant-table-footer {\n padding: 16px 0 0 0;\n background: none;\n }\n`\n\nconst multiSelectField = [\n 'fund_status',\n 'regional_focus',\n 'main_strategy',\n 'sub_strategy',\n 'is_fund_esg',\n 'is_firm_esg',\n]\nconst dateField = [\n 'latest_ror_date',\n 'latest_asset_date',\n 'inception_date',\n 'latest_firm_asset_date',\n 'latest_nav_date',\n]\n\nconst numbericField = ['latest_ror', 'latest_asset', 'latest_firm_asset', 'latest_nav']\n\nconst FundFirmName = styled('span')`\n color: ${Colors.primary};\n cursor: pointer;\n`\n\nexport enum EXFUND_FIRM_TABLE {\n EXFUND,\n FIRM,\n}\n\ntype Props = {\n type: EXFUND_FIRM_TABLE\n initialColumn: ColumnPropsExtended[]\n setActiveTab?: (value: LeftNavFirmEnum) => void\n dataSource: ExFundDetails[] | undefined\n loadingTable: boolean\n reloadTable?: () => void\n initialFilter?: Record\n firmId?: string\n}\n\nconst FundOfFirmTable: React.FC = ({\n type,\n initialColumn,\n setActiveTab,\n dataSource,\n loadingTable,\n reloadTable,\n initialFilter,\n firmId,\n}) => {\n const dispatch = useDispatch()\n\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const [showModalFundStatus, setShowModalFundStatus] = React.useState(false)\n const [selectedFund, setSelectedFund] = React.useState()\n\n const [filteredInfo, setFilteredInfo] = React.useState(initialFilter || {})\n const appData = useSelector((state: RootState) => state.appData)\n\n React.useEffect(() => {\n if (type === EXFUND_FIRM_TABLE.EXFUND) {\n dispatch(updateExSearchParams(filteredInfo))\n }\n }, [dispatch, filteredInfo, type])\n\n const searchInput = React.useRef(null)\n\n const handleClearAllFilter = () => {\n setFilteredInfo({})\n }\n\n // export fund\n const [loadingExport, setLoadingExport] = React.useState(false)\n\n const exportFirmFund = async () => {\n if (!firmId) {\n return\n }\n setLoadingExport(true)\n try {\n const res = await APIService.fundService.postDownloadFile({\n file_type: 'MANAGER_LINK_FIRM_FUNDS_EXPORT',\n data: {\n peer_group_code:\n filteredInfo.peer_group_code && filteredInfo.peer_group_code.length > 0\n ? filteredInfo.peer_group_code.map((v) => +v)\n : undefined,\n columns: initialColumn.map((col) => col.key),\n firm_id: firmId,\n },\n })\n\n const resFile = await APIService.fundService.downloadFileByUrl(res.data.url)\n JsFileDownload(resFile.data, 'search-results.csv', 'application/csv')\n } catch (error) {\n console.log(error)\n notification.error({ message: 'Failed to export Funds!' })\n } finally {\n setLoadingExport(false)\n }\n }\n\n const getColumnSearchProps = (dataIndex: string): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => {\n if (dataIndex === 'fund_id' || dataIndex === 'firm_id') {\n return (\n \n \n {\n setSelectedKeys(\n e.target.value\n ? [\n selectedKeys[0]\n ? `${selectedKeys[0].toString().split('-')[0]}-${e.target.value}`\n : `-${e.target.value}`,\n ]\n : [],\n )\n }}\n />\n {\n if (selectedKeys[0]) {\n setSelectedKeys([`[Equals]-${selectedKeys[0].toString().split('-')[1]}`])\n return confirm && confirm()\n }\n return clearFilters && clearFilters()\n }}\n >\n Exact\n \n {\n if (selectedKeys[0]) {\n setSelectedKeys([`[Contains]-${selectedKeys[0].toString().split('-')[1]}`])\n return confirm && confirm()\n }\n return clearFilters && clearFilters()\n }}\n >\n Partial\n \n \n \n \n \n )\n }\n if (dateField.includes(dataIndex)) {\n return (\n
\n \n {\n if (e) {\n setSelectedKeys([`${moment(e[0]).format('YYYY-MM')}, ${moment(e[1]).format('YYYY-MM')}`])\n }\n }}\n style={{ width: 250, marginBottom: 8 }}\n />\n \n \n \n confirm && confirm()}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n \n
\n )\n }\n if (dataIndex.includes('index_family_')) {\n return (\n \n setSelectedKeys([e.target.value])}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n >\n Yes\n No\n \n \n {\n confirm && confirm()\n }}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n {\n clearFilters && clearFilters()\n }}\n size=\"small\"\n style={{ width: 90 }}\n >\n Reset\n \n \n \n )\n }\n return (\n
\n setSelectedKeys(e.target.value ? [e.target.value] : [])}\n onPressEnter={() => confirm && confirm()}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n confirm && confirm()}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n
\n )\n },\n filterIcon: (filtered) => ,\n onFilter: (value, record) => {\n if (dataIndex === 'fund_id' || dataIndex === 'firm_id') {\n const type = value.toString().split('-')[0]\n const fundValue = value.toString().split('-')[1]\n if (type === '[Equals]') {\n return record[dataIndex as keyof ExFundDetails]\n ? record[dataIndex as keyof ExFundDetails] === fundValue\n : false\n }\n return record[dataIndex as keyof ExFundDetails]\n ? record[dataIndex as keyof ExFundDetails]\n .toString()\n .toLowerCase()\n .includes(fundValue.toString().toLowerCase())\n : false\n }\n if (numbericField.includes(dataIndex)) {\n const gte = value.toString().split('-')[0]\n const lte = value.toString().split('-')[1]\n if (gte !== 'N/A') {\n return lte !== 'N/A'\n ? +record[dataIndex as keyof ExFundDetails] >= parseFloat(gte) &&\n +record[dataIndex as keyof ExFundDetails] <= parseFloat(lte)\n : +record[dataIndex as keyof ExFundDetails] >= parseFloat(gte)\n } else {\n return +record[dataIndex as keyof ExFundDetails] <= parseFloat(lte)\n }\n }\n if (dateField.includes(dataIndex)) {\n const dateRange = (value as string).split(',')\n const startDate = moment(dateRange[0])\n const endDate = moment(dateRange[1])\n return moment(record[dataIndex as keyof ExFundDetails] as string, 'YYYY-MM').isBetween(\n startDate,\n endDate,\n undefined,\n '[]',\n )\n }\n if (dataIndex === 'fund_status' || dataIndex === 'fund_esg') {\n return record[dataIndex as keyof ExFundDetails] === value // exact match\n }\n if (dataIndex.includes('index_family_')) {\n return record[dataIndex as keyof ExFundDetails] === value // boolean compare\n }\n return record[dataIndex as keyof ExFundDetails]\n ? record[dataIndex as keyof ExFundDetails].toString().toLowerCase().includes(value.toString().toLowerCase())\n : false\n },\n\n onFilterDropdownVisibleChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput && searchInput.current && searchInput.current.select())\n }\n },\n })\n\n const sortColumn = (a: string | null, b: string | null) => {\n if (a && b) {\n return a.localeCompare(b)\n } else if (a && !b) {\n return -1\n } else if (!a && b) {\n return 1\n } else {\n return 0\n }\n }\n const sortColumnNumber = (a: number | null, b: number | null) => {\n if (a && b) {\n return a - b\n } else if (a && !b) {\n return -1\n } else if (!a && b) {\n return 1\n } else {\n return 0\n }\n }\n\n return (\n \n
\n {Object.keys(filteredInfo).map((item) => {\n const value = filteredInfo[item]\n if (value !== null) {\n if (typeof value[0] === 'boolean') {\n return (\n {\n e.stopPropagation()\n setFilteredInfo({ ...filteredInfo, [item]: null })\n }}\n >\n {initialColumn.find((i) => i.key === item)?.title}: \n {value[0] === true ? 'Yes' : 'No'}\n \n )\n }\n return (\n {\n e.stopPropagation()\n setFilteredInfo({ ...filteredInfo, [item]: null })\n }}\n >\n {initialColumn.find((i) => i.key === item)?.title}: {filteredInfo[item]}\n \n )\n }\n })}\n {Object.keys(filteredInfo).some((item) => filteredInfo[item]) && (\n \n )}\n
\n {\n setFilteredInfo(filter)\n }}\n scroll={{ x: 'min-content' }}\n columns={initialColumn.map((item, columnIndex) => {\n if (type === EXFUND_FIRM_TABLE.FIRM) {\n if (item.key.includes('index_family_')) {\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key] || null,\n ...getColumnSearchProps(item.key),\n render: (value: boolean | undefined) => {\n if (value === undefined) {\n return null\n }\n return value ? 'Yes' : 'No'\n },\n }\n }\n switch (item.key) {\n case 'fund_name':\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: (a: ExFundDetails, b: ExFundDetails) => {\n return sortColumn(\n String(a[item.key as keyof ExFundDetails]),\n String(b[item.key as keyof ExFundDetails]),\n )\n },\n width: 280,\n fixed: columnIndex === 0,\n ...getColumnSearchProps(item.key),\n render: (text: string) => {text},\n onCell: (record: ExFundDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: record.fund_id,\n type: FundFirmTypeEnum.FUNDS,\n }),\n )\n },\n }),\n }\n case 'is_fund_esg':\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key] || null,\n ...getColumnSearchProps(item.key),\n render: (text: string) => {text},\n onCell: (record: ExFundDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: record.fund_id,\n type: FundFirmTypeEnum.FUNDS,\n path: LeftNavFundEnum.FUND_ESG,\n hyperlinkTable: 'fund_esg',\n }),\n )\n },\n }),\n }\n case 'is_firm_esg':\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: (a: ExFundDetails, b: ExFundDetails) => {\n return sortColumn(\n String(a[item.key as keyof ExFundDetails]),\n String(b[item.key as keyof ExFundDetails]),\n )\n },\n width: 200,\n ...getColumnSearchProps(item.key),\n render: (text: string) => {text},\n onCell: () => ({\n onClick: () => setActiveTab && setActiveTab(LeftNavFirmEnum.FIRM_ESG),\n }),\n }\n\n default:\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: (a: ExFundDetails, b: ExFundDetails) => {\n return sortColumn(\n String(a[item.key as keyof ExFundDetails]),\n String(b[item.key as keyof ExFundDetails]),\n )\n },\n width: item.key === 'fund_id' ? 120 : 200,\n ...getColumnSearchProps(item.key),\n }\n }\n } else {\n switch (item.key) {\n case 'fund_name':\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: (a: ExFundDetails, b: ExFundDetails) => {\n return sortColumn(\n String(a[item.key as keyof ExFundDetails]),\n String(b[item.key as keyof ExFundDetails]),\n )\n },\n width: 280,\n fixed: columnIndex === 0,\n ...getColumnSearchProps(item.key),\n render: (text: string) => {text},\n onCell: (record: ExFundDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: `${PREFIX_EXTERNAL}-${record.fund_id}`,\n type: FundFirmTypeEnum.FUNDS,\n }),\n )\n },\n }),\n }\n\n case 'is_fund_esg':\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: (a: ExFundDetails, b: ExFundDetails) => {\n return sortColumn(\n String(a[item.key as keyof ExFundDetails]),\n String(b[item.key as keyof ExFundDetails]),\n )\n },\n width: 200,\n ...getColumnSearchProps(item.key),\n render: (text: string) => {text},\n onCell: (record: ExFundDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: `${PREFIX_EXTERNAL}-${record.fund_id}`,\n type: FundFirmTypeEnum.FUNDS,\n activeNav: LeftNavExFundEnum.FUND_ESG_FACTORS,\n }),\n )\n },\n }),\n }\n case 'is_firm_esg':\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: (a: ExFundDetails, b: ExFundDetails) => {\n return sortColumn(\n String(a[item.key as keyof ExFundDetails]),\n String(b[item.key as keyof ExFundDetails]),\n )\n },\n width: 200,\n ...getColumnSearchProps(item.key),\n render: (text: string) => {text},\n onCell: (record: ExFundDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.firm_name,\n id: `${PREFIX_EXTERNAL}-${record.firm_id}`,\n type: FundFirmTypeEnum.FIRMS,\n activeNav: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n }),\n )\n },\n }),\n }\n case 'latest_ror':\n case 'latest_nav':\n case 'latest_asset':\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: (a: ExFundDetails, b: ExFundDetails) => {\n return sortColumnNumber(\n Number(a[item.key as keyof ExFundDetails]) || null,\n Number(b[item.key as keyof ExFundDetails]) || null,\n )\n },\n width: 200,\n ...getColumnSearchProps(item.key),\n render: (text: string) => (\n \n {item.key === 'latest_ror'\n ? text && parseFloat(text).toFixed(4)\n : text && parseFloat(text).toFixed(3)}\n \n ),\n onCell: (record: ExFundDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: `${PREFIX_EXTERNAL}-${record.fund_id}`,\n type: FundFirmTypeEnum.FUNDS,\n activeNav: LeftNavExFundEnum.FUND_PERFORMANCE,\n hyperlinkTable: item.key,\n }),\n )\n },\n }),\n }\n case 'latest_firm_asset':\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: (a: ExFundDetails, b: ExFundDetails) => {\n return sortColumnNumber(\n Number(a[item.key as keyof ExFundDetails]) || null,\n Number(b[item.key as keyof ExFundDetails]) || null,\n )\n },\n width: 200,\n ...getColumnSearchProps(item.key),\n render: (text: string) => {text && parseFloat(text).toFixed(3)},\n onCell: (record: ExFundDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.firm_name,\n id: `${PREFIX_EXTERNAL}-${record.firm_id}`,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n activeNav: LeftNavExFirmEnum.ASSETS_UNDER_MANAGEMENT,\n }),\n )\n },\n }),\n }\n case 'fund_status':\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: (a: ExFundDetails, b: ExFundDetails) => {\n return sortColumn(\n String(a[item.key as keyof ExFundDetails]),\n String(b[item.key as keyof ExFundDetails]),\n )\n },\n width: 200,\n ...getColumnSearchProps(item.key),\n render: (text: string) => {text},\n onCell: (record: ExFundDetails) => ({\n onClick: () => {\n setSelectedFund(record)\n setShowModalFundStatus(true)\n },\n }),\n }\n case 'fund_cmic':\n return {\n ...item,\n width: 140,\n render: (text) => {\n return {text}\n },\n onCell: (record: ExFundDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.fund_name,\n id: `${PREFIX_EXTERNAL}-${record.fund_id}`,\n type: FundFirmTypeEnum.FUNDS,\n activeNav: LeftNavExFundEnum.FUND_CMIC,\n }),\n )\n },\n }),\n }\n\n default:\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: (a: ExFundDetails, b: ExFundDetails) => {\n return sortColumn(\n String(a[item.key as keyof ExFundDetails]),\n String(b[item.key as keyof ExFundDetails]),\n )\n },\n width: item.key === 'fund_id' ? 120 : 200,\n ...getColumnSearchProps(item.key),\n }\n }\n }\n })}\n />\n {firmId ? (\n
\n \n
\n ) : undefined}\n {showModalFundStatus && selectedFund && reloadTable && (\n \n )}\n
\n )\n}\n\nexport default FundOfFirmTable\n","import { ColumnProps } from 'antd/lib/table'\nimport { ExFundDetails } from '../../../shared/api/models/ExFundDetails'\nimport GenUtil from '../../../shared/utils/gen-util'\n\nexport interface ColumnPropsExtended extends ColumnProps {\n key: keyof ExFundDetails\n}\n\nexport interface ColumnSource {\n groupName: string\n columns: ColumnPropsExtended[]\n}\n\nexport const defaultColumns: ColumnPropsExtended[] = [\n {\n title: 'Fund ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n sorter: true,\n },\n {\n title: 'Fund Name',\n dataIndex: 'fund_name',\n key: 'fund_name',\n sorter: true,\n fixed: 'left',\n },\n {\n title: 'Fund Status',\n dataIndex: 'fund_status',\n key: 'fund_status',\n sorter: true,\n },\n {\n title: 'Latest ROR',\n dataIndex: 'latest_ror',\n key: 'latest_ror',\n sorter: true,\n },\n {\n title: 'Latest ROR Date',\n dataIndex: 'latest_ror_date',\n key: 'latest_ror_date',\n render: (date: string | undefined) => {\n return date ? GenUtil.getFormattedYearAndMonth(date) : null\n },\n sorter: true,\n },\n {\n title: 'Latest Asset',\n dataIndex: 'latest_asset',\n key: 'latest_asset',\n sorter: true,\n },\n {\n title: 'Latest Asset Date',\n dataIndex: 'latest_asset_date',\n key: 'latest_asset_date',\n render: (date: string | undefined) => {\n return date ? GenUtil.getFormattedYearAndMonth(date) : null\n },\n sorter: true,\n },\n {\n title: 'Fund ESG',\n dataIndex: 'is_fund_esg',\n key: 'is_fund_esg',\n sorter: true,\n },\n]\n\nexport const allColumns: ColumnSource[] = [\n {\n groupName: 'General',\n columns: [\n ...defaultColumns,\n {\n title: 'Firm ID',\n dataIndex: 'firm_id',\n key: 'firm_id',\n sorter: true,\n },\n {\n title: 'Firm Name',\n dataIndex: 'firm_name',\n key: 'firm_name',\n sorter: true,\n },\n {\n title: 'Firm ESG',\n dataIndex: 'is_firm_esg',\n key: 'is_firm_esg',\n sorter: true,\n },\n {\n title: 'Inception Date',\n dataIndex: 'inception_date',\n key: 'inception_date',\n sorter: true,\n },\n {\n title: 'Latest Firm Asset',\n dataIndex: 'latest_firm_asset',\n key: 'latest_firm_asset',\n sorter: true,\n },\n {\n title: 'Latest Firm Asset Date',\n dataIndex: 'latest_firm_asset_date',\n key: 'latest_firm_asset_date',\n sorter: true,\n render: (date: string | undefined) => {\n return date ? GenUtil.getFormattedYearAndMonth(date) : null\n },\n },\n {\n title: 'Latest NAV',\n dataIndex: 'latest_nav',\n key: 'latest_nav',\n sorter: true,\n },\n {\n title: 'Latest NAV Date',\n dataIndex: 'latest_nav_date',\n key: 'latest_nav_date',\n sorter: true,\n render: (date: string | undefined) => {\n return date ? GenUtil.getFormattedYearAndMonth(date) : null\n },\n },\n {\n title: 'Regional Focus',\n dataIndex: 'regional_focus',\n key: 'regional_focus',\n sorter: true,\n },\n {\n title: 'Main Strategy',\n dataIndex: 'main_strategy',\n key: 'main_strategy',\n sorter: true,\n },\n {\n title: 'Sub Strategy',\n dataIndex: 'sub_strategy',\n key: 'sub_strategy',\n sorter: true,\n },\n {\n title: 'Fund CMIC',\n key: 'fund_cmic',\n dataIndex: 'fund_cmic',\n sorter: true,\n },\n {\n title: 'ISIN',\n key: 'isin',\n dataIndex: 'isin',\n sorter: true,\n },\n {\n title: 'Bloomberg Ticker',\n key: 'bloomberg_ticker',\n dataIndex: 'bloomberg_ticker',\n sorter: true,\n },\n ],\n },\n]\n\nexport const fundFamilyColumns: ColumnSource[] = [\n {\n groupName: 'Fund Family',\n columns: [\n {\n title: 'Fund Family Code',\n dataIndex: 'fund_family_code',\n key: 'fund_family_code',\n sorter: true,\n },\n {\n title: 'Fund Family Id',\n dataIndex: 'fund_family_id',\n key: 'fund_family_id',\n sorter: true,\n },\n ],\n },\n]\n\nexport const allExColumns: ColumnSource[] = [\n {\n groupName: 'General',\n columns: [\n ...defaultColumns,\n {\n title: 'Firm ID',\n dataIndex: 'firm_id',\n key: 'firm_id',\n sorter: true,\n },\n {\n title: 'Firm Name',\n dataIndex: 'firm_name',\n key: 'firm_name',\n sorter: true,\n },\n {\n title: 'Firm ESG',\n dataIndex: 'is_firm_esg',\n key: 'is_firm_esg',\n sorter: true,\n },\n {\n title: 'Inception Date',\n dataIndex: 'inception_date',\n key: 'inception_date',\n sorter: true,\n },\n {\n title: 'Latest Firm Asset',\n dataIndex: 'latest_firm_asset',\n key: 'latest_firm_asset',\n sorter: true,\n },\n {\n title: 'Latest Firm Asset Date',\n dataIndex: 'latest_firm_asset_date',\n key: 'latest_firm_asset_date',\n sorter: true,\n render: (date: string | undefined) => {\n return date ? GenUtil.getFormattedYearAndMonth(date) : null\n },\n },\n {\n title: 'Latest NAV',\n dataIndex: 'latest_nav',\n key: 'latest_nav',\n sorter: true,\n },\n {\n title: 'Latest NAV Date',\n dataIndex: 'latest_nav_date',\n key: 'latest_nav_date',\n sorter: true,\n render: (date: string | undefined) => {\n return date ? GenUtil.getFormattedYearAndMonth(date) : null\n },\n },\n {\n title: 'Regional Focus',\n dataIndex: 'regional_focus',\n key: 'regional_focus',\n sorter: true,\n },\n {\n title: 'Main Strategy',\n dataIndex: 'main_strategy',\n key: 'main_strategy',\n sorter: true,\n },\n {\n title: 'Sub Strategy',\n dataIndex: 'sub_strategy',\n key: 'sub_strategy',\n sorter: true,\n },\n {\n title: 'Fund CMIC',\n key: 'fund_cmic',\n dataIndex: 'fund_cmic',\n sorter: true,\n },\n ],\n },\n]\n","import { InfoCircleTwoTone } from '@ant-design/icons'\nimport { Button, Col, Collapse, Modal, notification, Row } from 'antd'\nimport React, { CSSProperties, useEffect, useMemo } from 'react'\nimport {\n DragDropContext,\n Draggable,\n DraggableLocation,\n DraggingStyle,\n Droppable,\n DropResult,\n NotDraggingStyle,\n} from 'react-beautiful-dnd'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport { ExFundDetails } from '../../../shared/api/models/ExFundDetails'\nimport { Colors } from '../../../shared/colors'\nimport { updateExFundColumns, updateFundsOfFirmColumns } from '../../../slice/appSettingsSlice'\nimport { FundSearchColumnContext } from '../../Dashboard/DashboardTab/ColumnBuilder/FundSearchColumnContext'\nimport { allColumns, fundFamilyColumns, ColumnPropsExtended, ColumnSource, defaultColumns } from './columnSource'\n\nconst InfoText = styled.span`\n margin-left: 10px;\n`\n\nconst Wrapper = styled.div`\n max-height: 90vh;\n`\n\nenum DroppableIds {\n TargetColumns = 'targetColumns',\n SourceColumns = 'sourceColumns',\n}\n\nconst { Panel } = Collapse\n\nconst grid = 8\n\nconst getListStyle = (isDraggingOver: boolean) => ({\n background: isDraggingOver ? 'lightblue' : 'lightgrey',\n borderRadius: '5px',\n padding: grid,\n minHeight: '100%',\n})\n\nconst getItemStyle = (\n isDragging: boolean,\n draggableStyle: DraggingStyle | NotDraggingStyle | undefined,\n): CSSProperties => ({\n // some basic styles to make the items look a bit nicer\n userSelect: 'none',\n padding: grid * 2,\n\n // change background colour if dragging\n background: isDragging ? Colors.primary : 'white',\n border: `1px solid ${Colors.primary}`,\n borderRadius: '5px',\n marginBottom: '3px',\n\n // styles we need to apply on draggables\n ...draggableStyle,\n})\n\nconst reorder = (list: ColumnPropsExtended[] | undefined, startIndex: number, endIndex: number) => {\n if (!list || !list.length) {\n return []\n }\n const result = Array.from(list)\n const [removed] = result.splice(startIndex, 1)\n result.splice(endIndex, 0, removed)\n\n return result\n}\n\nconst remove = (target: ColumnPropsExtended[], startIndex: number) => {\n const results = Array.from(target)\n results.splice(startIndex, 1)\n return results\n}\n\nconst move = (\n source: ColumnSource[],\n destination: unknown[],\n droppableSource: DraggableLocation,\n droppableDestination: DraggableLocation,\n) => {\n const sourceClone = source.reduce((s, i) => (i.columns ? [...s, ...i.columns] : s), [])\n\n const destClone = Array.from(destination)\n const [removed] = sourceClone.splice(droppableSource.index - 1, 1)\n destClone.splice(droppableDestination.index, 0, removed)\n\n return {\n [droppableSource.droppableId]: sourceClone,\n [droppableDestination.droppableId]: destClone,\n }\n}\n\ninterface HeaderGroupProps {\n groupName: string\n onAddAll: () => void\n}\n\nconst Flex = styled('div')`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`\n\nconst HeaderGroup: React.FC = ({ groupName, onAddAll }) => {\n return (\n \n {groupName}\n \n \n )\n}\n\ninterface Props {\n isOpen: boolean\n setOpen: (isOpen: boolean) => void\n isInternal?: boolean\n}\n\nconst ColumnBuilder: React.FC = ({ isOpen, setOpen, isInternal = false }) => {\n const [targetColumns, setTargetColumns] = React.useState(defaultColumns)\n\n const { exFundTableColumns: fundTableColumns, fundsOfFirmColumns } = useSelector(\n (state: RootState) => state.appSettings,\n )\n const dispatch = useDispatch()\n const { dataAllColumns } = React.useContext(FundSearchColumnContext)\n\n const finalAllColumns: ColumnSource[] = useMemo(() => {\n if (!isInternal) {\n return allColumns\n }\n const indexFamilyColumns: ColumnPropsExtended[] =\n dataAllColumns && Object.keys(dataAllColumns).length > 0\n ? Object.keys(dataAllColumns)\n .filter((key) => key.includes('index_family_'))\n .map((indexFamilyKey) => ({\n title: dataAllColumns[indexFamilyKey].human_readable_name,\n dataIndex: indexFamilyKey,\n key: indexFamilyKey as keyof ExFundDetails,\n sorter: true,\n }))\n : []\n\n return [\n ...allColumns,\n {\n groupName: 'HFR Index Family',\n columns: indexFamilyColumns,\n },\n ...fundFamilyColumns,\n ]\n }, [dataAllColumns, isInternal])\n\n useEffect(() => {\n const flattenAllColumns = finalAllColumns.flatMap((item) => item.columns)\n\n const storedColumns = isInternal ? fundsOfFirmColumns : fundTableColumns\n\n const fundColumns = storedColumns\n ? storedColumns.reduce((acc, currKey) => {\n const foundColumn = flattenAllColumns.find((item) => item.key === currKey)\n if (foundColumn) {\n return [...acc, foundColumn]\n }\n return acc\n }, [] as ColumnPropsExtended[])\n : defaultColumns\n if (fundColumns.length > 0) {\n setTargetColumns(fundColumns)\n }\n }, [dataAllColumns, finalAllColumns, fundTableColumns, fundsOfFirmColumns, isInternal])\n\n const sourceColumns = useMemo(() => {\n return finalAllColumns.map((i) => ({\n ...i,\n columns: i.columns.filter((c) => !targetColumns.some((t) => t.key === c.key)),\n }))\n }, [finalAllColumns, targetColumns])\n\n const onDragEnd = (result: DropResult) => {\n const { source, destination } = result\n\n if (!destination) {\n return\n }\n\n if (source.droppableId === DroppableIds.TargetColumns && destination.droppableId !== DroppableIds.TargetColumns) {\n const result = remove(targetColumns, source.index)\n\n setTargetColumns(result)\n return\n }\n\n if (source.droppableId === DroppableIds.SourceColumns && destination.droppableId === DroppableIds.TargetColumns) {\n const result = move(sourceColumns, targetColumns, source, destination)\n\n setTargetColumns(result[DroppableIds.TargetColumns] as ColumnPropsExtended[])\n return\n }\n\n if (source.droppableId === DroppableIds.TargetColumns && destination.droppableId === DroppableIds.TargetColumns) {\n const result = reorder(targetColumns, source.index, destination.index)\n\n setTargetColumns(result)\n return\n }\n }\n\n const uniqueColumns = (columns: ColumnPropsExtended[]) =>\n Array.from(new Set(columns.map((item) => item.key))).map((key) => {\n return columns.find((item) => item.key === key) as ColumnPropsExtended\n })\n\n const handleAddGroupColumns = (columns: ColumnPropsExtended[]) => {\n setTargetColumns(uniqueColumns([...targetColumns, ...columns]))\n }\n\n const handleSubmit = () => {\n isInternal\n ? dispatch(updateFundsOfFirmColumns(targetColumns.map((item) => item.key)))\n : dispatch(updateExFundColumns(targetColumns.map((item) => item.key)))\n notification.success({ message: 'Updated columns successfully!', placement: 'bottomLeft' })\n setOpen(false)\n }\n\n const handleReset = () => {\n setTargetColumns(defaultColumns)\n }\n\n const handleAddAll = () => {\n const flatenColumns = allColumns.flatMap((item) => item.columns)\n setTargetColumns(uniqueColumns(flatenColumns))\n }\n\n return (\n setOpen(false)}\n >\n \n \n \n \n \n Drag from All Columns to Displayed Columns to add.\n \n \n \n \n \n Drag from Displayed Columns to All Columns to remove.\n \n \n \n \n \n If it's no item in Displayed Columns, the default one will be used.\n \n \n \n
\n

\n Displayed Columns\n \n

\n \n {({ innerRef, placeholder }, snapshot) => {\n return (\n
\n {targetColumns &&\n targetColumns.map((targetCol, index) => (\n \n {(provided, snapshot) => (\n \n {targetCol.title}\n
\n )}\n \n ))}\n {placeholder}\n \n )\n }}\n
\n \n \n

\n All Columns\n \n

\n \n {({ innerRef, placeholder }, snapshot) => {\n let draggableIndex = 0\n return (\n
\n \n {sourceColumns.map((group, groupIndex) => {\n return (\n handleAddGroupColumns(group.columns)}\n />\n }\n key={`${groupIndex}`}\n >\n {group.columns &&\n group.columns.map((col) => {\n draggableIndex++\n return (\n \n {(provided, snapshot) => (\n \n {col.title}\n
\n )}\n \n )\n })}\n {placeholder}\n \n )\n })}\n \n \n )\n }}\n
\n \n \n \n \n \n )\n}\n\nexport default ColumnBuilder\n","import { ExclamationCircleFilled } from '@ant-design/icons'\nimport { notification, Row, Tooltip } from 'antd'\nimport moment from 'moment'\nimport React from 'react'\nimport ReactDataSheet from 'react-datasheet'\nimport styled from 'styled-components'\nimport { PerformanceUpdateType } from '../../../../shared/api/context/FundDetailDataContext'\nimport { LatestPerformanceResponse } from '../../../../shared/api/services/fund.service'\nimport { Colors } from '../../../../shared/colors'\nimport { DataSheetType, GridElement } from '../../../../shared/components/DataSheet'\nimport { LoadingDetails } from '../../../../shared/components/LoadingDetails'\nimport { getMonthRange } from '../../../../shared/utils/datetimeUtils'\nimport { isWarningAssetData } from '../../../../shared/utils/validateData'\n\nconst Wrapper = styled.div`\n input::-webkit-outer-spin-button,\n input::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n /* Firefox */\n input[type='number'] {\n -moz-appearance: textfield;\n }\n\n .data-grid-container .data-grid .cell.read-only {\n background: #f3f3f3;\n }\n\n padding: 1rem;\n`\n\nexport const DATE_FORMAT = 'YYYY-MM'\n\nconst headerRow = [\n { readOnly: true, value: 'Outstanding performance updates' },\n { readOnly: true, value: 'Returns (%)' },\n { readOnly: true, value: 'Asset (MM)' },\n { readOnly: true, value: 'NAV' },\n]\n\ntype Props = {\n dataLatestPerformance?: LatestPerformanceResponse\n currency?: string\n loading: boolean\n data?: PerformanceUpdateType\n onDataChange: (data?: PerformanceUpdateType) => void\n inceptionDate?: string\n}\n\nconst PerformanceDataSheet: React.FC = ({\n currency,\n dataLatestPerformance,\n loading,\n data,\n onDataChange,\n inceptionDate,\n}) => {\n const [grid, setGrid] = React.useState([headerRow])\n\n const parseGridData = (data: GridElement[][]): PerformanceUpdateType => {\n const arrayUpdate: PerformanceUpdateType = {}\n\n data.forEach((row, rowIndex) => {\n if (rowIndex === 0) {\n return\n }\n\n row.forEach((cell, cellIndex) => {\n if (cellIndex === 0) {\n return\n }\n\n // ROR\n if (cellIndex === 1 && row[0].value && cell.value && cell.value !== '') {\n arrayUpdate.rorChanges = [\n ...(arrayUpdate.rorChanges || []),\n {\n yyyy_mm: row[0].value,\n value: +cell.value,\n isReadOnly: cell.readOnly,\n },\n ]\n }\n if (cellIndex === 2 && row[0].value && cell.value && cell.value !== '') {\n arrayUpdate.assetChanges = [\n ...(arrayUpdate.assetChanges || []),\n {\n yyyy_mm: row[0].value,\n value: +cell.value,\n isReadOnly: cell.readOnly,\n },\n ]\n }\n if (cellIndex === 3 && row[0].value && cell.value && cell.value !== '') {\n arrayUpdate.navChanges = [\n ...(arrayUpdate.navChanges || []),\n {\n yyyy_mm: row[0].value,\n value: +cell.value,\n isReadOnly: cell.readOnly,\n },\n ]\n }\n })\n })\n\n return arrayUpdate\n }\n\n const updateGrid = React.useCallback(\n (data?: PerformanceUpdateType) => {\n if (!dataLatestPerformance) {\n return\n }\n const hasNoPerformance =\n !dataLatestPerformance.latest_asset && !dataLatestPerformance.latest_nav && !dataLatestPerformance.latest_ror\n\n const latestROR = dataLatestPerformance.latest_ror\n const latestNav = dataLatestPerformance.latest_nav\n const latestAsset = dataLatestPerformance.latest_asset\n\n // get the min date of latest data\n const startDate = moment.min([\n latestROR ? moment(latestROR, DATE_FORMAT) : moment(),\n latestNav ? moment(latestNav, DATE_FORMAT) : moment(),\n latestAsset ? moment(latestAsset, DATE_FORMAT) : moment(),\n ])\n\n // Prepare the available row as remaining months till now\n const dateList = getMonthRange(\n hasNoPerformance ? moment(inceptionDate).format(DATE_FORMAT) : startDate.format(DATE_FORMAT),\n moment().subtract(1, 'month').format(DATE_FORMAT),\n )\n\n const grid = [\n headerRow,\n ...dateList.map((dateRow) => {\n const latestRorMoment = moment(latestROR, DATE_FORMAT)\n const latestAssetMoment = moment(latestAsset, DATE_FORMAT)\n const latestNavMoment = moment(latestNav, DATE_FORMAT)\n const dateRowMoment = moment(dateRow, DATE_FORMAT)\n\n return [\n { readOnly: true, value: dateRow },\n {\n readOnly:\n !hasNoPerformance &&\n (latestRorMoment.isAfter(dateRowMoment, 'month') ||\n latestRorMoment.isSame(dateRowMoment, 'month') ||\n !latestRorMoment),\n value:\n data?.rorChanges?.find((item) => item.yyyy_mm === dateRow)?.value?.toString() ||\n (dataLatestPerformance &&\n dataLatestPerformance.latest_ror === dateRow &&\n dataLatestPerformance.latest_ror_value?.toFixed(4)) ||\n '',\n },\n {\n readOnly:\n !hasNoPerformance &&\n (latestAssetMoment.isAfter(dateRowMoment) ||\n latestAssetMoment.isSame(dateRowMoment, 'month') ||\n !latestAsset),\n value:\n data?.assetChanges?.find((item) => item.yyyy_mm === dateRow)?.value?.toString() ||\n (dataLatestPerformance &&\n dataLatestPerformance.latest_asset === dateRow &&\n dataLatestPerformance.latest_asset_value?.toFixed(3)) ||\n '',\n },\n {\n readOnly:\n !hasNoPerformance &&\n (latestNavMoment.isAfter(dateRowMoment) ||\n latestNavMoment.isSame(dateRowMoment, 'month') ||\n !latestNav),\n value:\n data?.navChanges?.find((item) => item.yyyy_mm === dateRow)?.value?.toString() ||\n (dataLatestPerformance &&\n dataLatestPerformance.latest_nav === dateRow &&\n dataLatestPerformance.latest_nav_value?.toFixed(6)) ||\n '',\n },\n ]\n }),\n ]\n setGrid(grid)\n },\n [dataLatestPerformance, inceptionDate],\n )\n\n React.useEffect(() => {\n updateGrid(data)\n }, [data, updateGrid])\n\n const compareCellValue = (prev: string | null, next: string | null, type?: DataSheetType) => {\n const prevValue = prev ? +prev : null\n const nextValue = next ? +next : null\n if (type === DataSheetType.ASSET) {\n if (!prev && next) {\n return false\n }\n return isWarningAssetData(prevValue, nextValue)\n }\n if (type === DataSheetType.NAV) {\n if (next !== null && nextValue === 0) {\n return true\n }\n }\n if (type === DataSheetType.ROR && nextValue !== null) {\n if (nextValue >= 20 || nextValue <= -20 || (next && nextValue === 0)) {\n return true\n }\n }\n\n return false\n }\n\n return (\n \n {currency && (\n \n \n Currency: {currency}\n \n \n )}\n \n data={\n grid\n ? grid.map((cols, rowIndex) => [\n // First Column\n {\n ...cols[0],\n valueViewer: (cell) => {\n return (\n \n {cell.value}\n \n )\n },\n },\n // Rest Columns\n ...cols.slice(1, cols.length).map((item, index) => {\n const isRor = index === 0\n const isAsset = index === 1\n const isNav = index === 2\n\n const type = isRor\n ? DataSheetType.ROR\n : isAsset\n ? DataSheetType.ASSET\n : isNav\n ? DataSheetType.NAV\n : undefined\n\n const prevRow = rowIndex > 1 && grid[rowIndex - 1]\n\n const prevCell = prevRow ? prevRow[index + 1].value : null\n\n const isWarning = compareCellValue(isAsset ? prevCell : item.value, item.value, type)\n\n return {\n ...item,\n className: item.value ? 'edited' : '',\n valueViewer: (props: any) => {\n // Header Row\n if (props.row === 0) {\n return (\n \n {props.value}\n \n )\n }\n return (\n \n {isWarning && (\n \n \n \n )}\n \n {props.value\n ? parseFloat(props.value) < 0\n ? `(${Math.abs(parseFloat(props.value)).toFixed(isNav ? 6 : isAsset ? 3 : 4)})`\n : (+props.value).toFixed(isNav ? 6 : isAsset ? 3 : 4)\n : null}\n \n \n )\n },\n }\n }),\n ])\n : []\n }\n valueRenderer={(cell) => cell.value}\n isCellNavigable={(cell) => !cell.readOnly}\n onCellsChanged={(changes) => {\n if (changes[0].value && isNaN(+changes[0].value)) {\n notification.warn({ message: 'Input must be Number!' })\n return\n }\n\n const tempGrid = grid.map((row) => [...row])\n\n changes.forEach(({ row, col, value }) => {\n // ROR columns\n if (col === 1) {\n if (value && parseFloat(value) < -100) {\n notification.error({ message: 'Value must be greater than or equal to -100' })\n return\n }\n tempGrid[row][col] = {\n ...tempGrid[row][col],\n value: value && !isNaN(+value) ? parseFloat(value).toFixed(4) : null,\n }\n }\n if (col === 2) {\n tempGrid[row][col] = {\n ...tempGrid[row][col],\n value: value && !isNaN(+value) && +value >= 0 ? parseFloat(value).toFixed(3) : null,\n }\n if (value && +value < 0) {\n notification.warn({ message: 'Asset/NAV values should be positive' })\n }\n }\n if (col === 3) {\n tempGrid[row][col] = {\n ...tempGrid[row][col],\n value: value && !isNaN(+value) && +value > 0 ? parseFloat(value).toFixed(6) : null,\n }\n if (value && +value < 0) {\n notification.warn({ message: 'Asset/NAV values should be positive' })\n }\n }\n })\n const parsedGrid = parseGridData(tempGrid)\n onDataChange(Object.keys(parsedGrid).length > 0 ? parsedGrid : undefined)\n }}\n />\n {loading && }\n \n )\n}\n\nexport default PerformanceDataSheet\n","import { Col, Modal, Row, Table } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\n\ntype Props = {\n onOk: () => void\n onCancel: () => void\n isOpen: boolean\n flaggedRors?: { date: string; value: number }[]\n flaggedAssets?: { date: string; value: number }[]\n}\n\nconst DataConfirmationModal: React.FC = ({ isOpen, onOk, onCancel, flaggedAssets, flaggedRors }) => {\n const rorColumns: ColumnProps<{ date: string; value: number }>[] = [\n {\n title: 'Date',\n key: 'date',\n dataIndex: 'date',\n },\n {\n title: 'Value',\n key: 'value',\n dataIndex: 'value',\n render: (value) => {\n return value.toFixed(4)\n },\n },\n ]\n const assetColumns: ColumnProps<{ date: string; value: number }>[] = [\n {\n title: 'Date',\n key: 'date',\n dataIndex: 'date',\n },\n {\n title: 'Value',\n key: 'value',\n dataIndex: 'value',\n render: (value) => {\n return value.toFixed(3)\n },\n },\n ]\n\n return (\n \n \n

Unusual data changed in Fund Return/AUM detected.

\n \n {flaggedRors && flaggedRors.length > 0 && (\n
0 ? 12 : 24}>\n ROR\n \n \n )}\n {flaggedAssets && flaggedAssets.length > 0 && (\n 0 ? 12 : 24}>\n Asset\n \n \n )}\n \n

\n If the changes are correct, click Submit to submit the update. Or click cancel to continue editing.\n

\n \n \n )\n}\n\nexport default DataConfirmationModal\n","import { notification } from 'antd'\nimport moment from 'moment'\nimport { PerformanceUpdateType } from '../../../shared/api/context/FundDetailDataContext'\nimport { LatestPerformanceResponse } from '../../../shared/api/services/fund.service'\nimport { getMonthRange } from '../../../shared/utils/datetimeUtils'\nimport { DATE_FORMAT } from '../../Dashboard/FundDetail/FundROR/PerformanceUpdate'\n\nexport const validateLatestPerformance = (\n performanceDataChange: PerformanceUpdateType | undefined,\n latestPerformance: LatestPerformanceResponse | undefined,\n) => {\n if (performanceDataChange && latestPerformance && Object.keys(performanceDataChange).length > 0) {\n // get the latest updated date (actual updated one, not the latest data from backend)\n const rorChanges = performanceDataChange.rorChanges?.filter((item) => !item.isReadOnly)\n const assetChanges = performanceDataChange.assetChanges?.filter((item) => !item.isReadOnly)\n const navChanges = performanceDataChange.navChanges?.filter((item) => !item.isReadOnly)\n\n const latestRORData =\n rorChanges && rorChanges.length > 0\n ? moment(rorChanges[rorChanges.length - 1].yyyy_mm, DATE_FORMAT)\n : moment(new Date(1971))\n const latestNAVData =\n navChanges && navChanges.length > 0\n ? moment(navChanges[navChanges.length - 1].yyyy_mm, DATE_FORMAT)\n : moment(new Date(1971))\n const latestAssetData =\n assetChanges && assetChanges.length > 0\n ? moment(assetChanges[assetChanges.length - 1].yyyy_mm, DATE_FORMAT)\n : moment(new Date(1971))\n const latestUpdatedDate = moment.max([latestRORData, latestNAVData, latestAssetData])\n let isDataValid = true\n\n latestPerformance.latest_ror &&\n getMonthRange(\n moment(latestPerformance.latest_ror, DATE_FORMAT).add(1, 'month').format(DATE_FORMAT),\n latestUpdatedDate.format(DATE_FORMAT),\n ).forEach((month) => {\n if (!performanceDataChange.rorChanges?.some((item) => item.yyyy_mm === month)) {\n isDataValid = false\n return\n }\n })\n\n latestPerformance.latest_asset &&\n getMonthRange(\n moment(latestPerformance.latest_asset, DATE_FORMAT).add(1, 'month').format(DATE_FORMAT),\n latestUpdatedDate.format(DATE_FORMAT),\n ).forEach((month) => {\n if (!performanceDataChange.assetChanges?.some((item) => item.yyyy_mm === month)) {\n isDataValid = false\n return\n }\n })\n\n latestPerformance.latest_nav &&\n getMonthRange(\n moment(latestPerformance.latest_nav, DATE_FORMAT).add(1, 'month').format(DATE_FORMAT),\n latestUpdatedDate.format(DATE_FORMAT),\n ).forEach((month) => {\n if (!performanceDataChange.navChanges?.some((item) => item.yyyy_mm === month)) {\n isDataValid = false\n return\n }\n })\n\n if (!isDataValid) {\n notification.warn({ message: 'Please fill in the missing performance data!' })\n return false\n }\n }\n return true\n}\n","import { CheckCircleTwoTone, InboxOutlined } from '@ant-design/icons'\nimport { Button, Col, notification, Row } from 'antd'\nimport moment from 'moment'\nimport React, { useEffect, useState } from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../shared/api'\nimport { PerformanceUpdateType } from '../../../shared/api/context/FundDetailDataContext'\nimport { ExFundDetails } from '../../../shared/api/models/ExFundDetails'\nimport { Colors } from '../../../shared/colors'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { getMonthRange } from '../../../shared/utils/datetimeUtils'\nimport PerformanceDataSheet, { DATE_FORMAT } from '../../Dashboard/FundDetail/FundROR/PerformanceDataSheet'\nimport DataConfirmationModal from '../DataConfirmationModal'\nimport { validateLatestPerformance } from '../utils/validateData'\nimport { Link } from 'react-router-dom'\n\nconst Wrapper = styled('div')``\n\ntype Props = {\n fund: ExFundDetails\n shouldUpdate?: boolean\n setShouldUpdate?: (value: boolean) => void\n setUpdatedFundPerformance?: (updatedFund?: string) => void\n}\n\nconst ExFundPerformanceItem: React.FC = ({ fund, shouldUpdate, setShouldUpdate, setUpdatedFundPerformance }) => {\n const [performanceDataChange, setPerformanceDataChange] = React.useState()\n const [submitting, setSubmitting] = useState(false)\n\n const [showDiscardDataSheet, setShowDiscardDataSheet] = React.useState(false)\n const [flaggedRors, setFlaggedRors] = useState<{ date: string; value: number }[]>()\n const [flaggedAssets, setFlaggedAssets] = useState<{ date: string; value: number }[]>()\n\n const handleOk = () => {\n setShowDiscardDataSheet(false)\n handleSubmitPerformance()\n }\n\n const handleCancel = () => {\n setShowDiscardDataSheet(false)\n setFlaggedAssets(undefined)\n setFlaggedRors(undefined)\n }\n\n const handleSubmitPerformance = async () => {\n if (!performanceDataChange || Object.keys(performanceDataChange).length <= 0 || !fund) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundService.updateLatestPerformance(fund.fund_id, {\n rors: performanceDataChange.rorChanges,\n navs: performanceDataChange.navChanges,\n assets: performanceDataChange.assetChanges,\n })\n notification.success({ message: 'Latest Performance Updated' })\n fetchLatestPerformance(fund.fund_id)\n setUpdatedFundPerformance && setUpdatedFundPerformance(fund.fund_id)\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n setSubmitting(false)\n }\n }\n\n const validatePerformanceData = async () => {\n if (\n !fund.fund_id ||\n fund.fund_status !== 'Active' ||\n !performanceDataChange ||\n (!performanceDataChange.assetChanges && !performanceDataChange.rorChanges && !performanceDataChange.navChanges)\n ) {\n return true\n }\n const flaggedData = await APIService.fundService.validateLatestPerformance(fund.fund_id, {\n rors:\n performanceDataChange.rorChanges && performanceDataChange.rorChanges.length > 0\n ? performanceDataChange.rorChanges.slice(1, performanceDataChange.rorChanges.length).map((item) => ({\n yyyy_mm: item.yyyy_mm,\n value: item.value,\n }))\n : undefined,\n navs:\n performanceDataChange.navChanges && performanceDataChange.navChanges.length > 0\n ? performanceDataChange.navChanges.slice(1, performanceDataChange.navChanges.length).map((item) => ({\n yyyy_mm: item.yyyy_mm,\n value: item.value,\n }))\n : undefined,\n assets:\n performanceDataChange.assetChanges && performanceDataChange.assetChanges.length > 0\n ? performanceDataChange.assetChanges.slice(1, performanceDataChange.assetChanges.length).map((item) => ({\n yyyy_mm: item.yyyy_mm,\n value: item.value,\n }))\n : undefined,\n })\n setFlaggedRors(flaggedData.data.flagged_rors.map((item) => ({ date: item[0], value: item[1] })))\n setFlaggedAssets(flaggedData.data.flagged_assets.map((item) => ({ date: item[0], value: item[1] })))\n\n return flaggedData.data.flagged_rors.length <= 0 && flaggedData.data.flagged_assets.length <= 0\n }\n\n const {\n data: latestPerformance,\n invoke: fetchLatestPerformance,\n loading: latestPerformanceLoading,\n } = useServiceState(APIService.fundService.fetchLatestPerformance)\n\n useEffect(() => {\n fund.fund_id && fetchLatestPerformance(fund.fund_id)\n }, [fetchLatestPerformance, fund.fund_id])\n\n useEffect(() => {\n if (shouldUpdate) {\n fund.fund_id && fetchLatestPerformance(fund.fund_id)\n setShouldUpdate && setShouldUpdate(false)\n }\n }, [shouldUpdate, setShouldUpdate, fund.fund_id, fetchLatestPerformance])\n\n const updateLatestPerformance = async () => {\n if (!performanceDataChange || Object.keys(performanceDataChange).length <= 0 || !fund) {\n return\n }\n // check for missing data\n if (!validateLatestPerformance(performanceDataChange, latestPerformance)) {\n return\n }\n // validating the data (ROR/AUM)\n if (!(await validatePerformanceData())) {\n setShowDiscardDataSheet(true)\n return\n }\n handleSubmitPerformance()\n }\n\n const isPerformanceUpToDate = React.useMemo(() => {\n if (!latestPerformance) {\n return false\n }\n\n const hasNoPerformance =\n !latestPerformance.latest_asset && !latestPerformance.latest_nav && !latestPerformance.latest_ror\n\n const latestROR = latestPerformance.latest_ror\n const latestNav = latestPerformance.latest_nav\n const latestAsset = latestPerformance.latest_asset\n\n // get the min date of latest data\n const startDate = moment.min([\n latestROR ? moment(latestROR, DATE_FORMAT) : moment(),\n latestNav ? moment(latestNav, DATE_FORMAT) : moment(),\n latestAsset ? moment(latestAsset, DATE_FORMAT) : moment(),\n ])\n\n // Prepare the available row as remaining months till now\n const dateList = getMonthRange(\n hasNoPerformance\n ? moment(fund.inception_date).format(DATE_FORMAT)\n : startDate.add(1, 'month').format(DATE_FORMAT),\n moment().subtract(1, 'month').format(DATE_FORMAT),\n )\n\n return dateList.length > 0 ? false : true\n }, [fund.inception_date, latestPerformance])\n\n return (\n \n \n
\n

\n {fund.fund_name} (ISIN: {fund.isin || 'N/A'}, Bloomberg: {fund.bloomberg_ticker || 'N/A'})\n {isPerformanceUpToDate && (\n \n {' '}\n - Performance is up-to-date \n \n )}\n

\n {fund && (\n \n Fund Profile |{' '}\n Peer Group Analysis \n \n )}\n \n {!isPerformanceUpToDate && (\n \n )}\n \n {!isPerformanceUpToDate && (\n \n )}\n {showDiscardDataSheet && (\n \n )}\n \n )\n}\n\nexport default ExFundPerformanceItem\n","import { Card, Divider } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { ExFundDetails } from '../../../../shared/api/models/ExFundDetails'\nimport ExFundPerformanceItem from '../../../ExternalDashboard/ExFundDetail/ExFundPerformanceItem'\n\nconst StyledCard = styled(Card)`\n display: flex;\n flex-direction: column;\n\n .ant-card-head {\n border-bottom: none;\n font-size: 1rem;\n padding: 0 1rem;\n }\n .ant-card-body {\n padding: 0;\n flex: 1;\n }\n`\n\ntype Props = {\n shouldUpdate?: boolean\n setShouldUpdate?: (value: boolean) => void\n setUpdatedFundPerformance?: (updatedFund?: string) => void\n dataFundsFirm: ExFundDetails[]\n}\n\nexport const FUND_STATUS_SHOW_PERFORMANCE = ['Active', 'Web Pending', 'Web Activation Request']\n\nconst FirmLatestPerformance: React.FC = ({\n shouldUpdate,\n dataFundsFirm,\n setShouldUpdate,\n setUpdatedFundPerformance,\n}) => {\n return (\n \n {dataFundsFirm &&\n dataFundsFirm.length > 0 &&\n dataFundsFirm.map((fund, index) => {\n if (FUND_STATUS_SHOW_PERFORMANCE.includes(fund.fund_status)) {\n return (\n
\n \n \n
\n )\n }\n return null\n })}\n
\n )\n}\n\nexport default FirmLatestPerformance\n","import { TableOutlined } from '@ant-design/icons'\nimport { Button } from 'antd'\nimport React, { useMemo } from 'react'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../../../app/rootReducer'\nimport APIService from '../../../../shared/api'\nimport { FirmDetailDataContext } from '../../../../shared/api/context/FirmDetailDataContext'\nimport { ExFundDetails } from '../../../../shared/api/models/ExFundDetails'\nimport FundOfFirmTable, { EXFUND_FIRM_TABLE } from '../../../../shared/components/FundOfFirmTable'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { LeftNavFirmEnum } from '../../../../shared/SearchFirmLabel'\nimport ColumnBuilder from '../../../ExternalDashboard/ExColumnBuilder/ColumnBuilder'\nimport {\n allColumns,\n ColumnPropsExtended,\n ColumnSource,\n defaultColumns,\n fundFamilyColumns,\n} from '../../../ExternalDashboard/ExColumnBuilder/columnSource'\nimport { FundSearchColumnContext } from '../../DashboardTab/ColumnBuilder/FundSearchColumnContext'\nimport FirmLatestPerformance from './FirmLatestPerformance'\n\ntype Props = { setActiveTab: (value: LeftNavFirmEnum) => void }\nexport const FundsOfFirm: React.FC = ({ setActiveTab }) => {\n const [showColumnBuilder, setShowColumnBuilder] = React.useState(false)\n const { fundsOfFirmColumns } = useSelector((rootState: RootState) => rootState.appSettings)\n\n const { dataAllColumns } = React.useContext(FundSearchColumnContext)\n\n const finalAllColumns: ColumnSource[] = useMemo(() => {\n const indexFamilyColumns: ColumnPropsExtended[] =\n dataAllColumns && Object.keys(dataAllColumns).length > 0\n ? Object.keys(dataAllColumns)\n .filter((key) => key.includes('index_family_'))\n .map((indexFamilyKey) => ({\n title: dataAllColumns[indexFamilyKey].human_readable_name,\n dataIndex: indexFamilyKey,\n key: indexFamilyKey as keyof ExFundDetails,\n sorter: true,\n }))\n : []\n\n return [\n ...allColumns,\n {\n groupName: 'HFR Index Family',\n columns: indexFamilyColumns,\n },\n ...fundFamilyColumns,\n ]\n }, [dataAllColumns])\n\n const flattenAllColumns = finalAllColumns.flatMap((item) => item.columns)\n\n const fofColumns =\n fundsOfFirmColumns.length > 0\n ? fundsOfFirmColumns.reduce((acc, key) => {\n const foundColumn = flattenAllColumns.find((item) => item.key === key)\n if (foundColumn) {\n return [...acc, foundColumn]\n }\n return acc\n }, [] as ColumnPropsExtended[])\n : // map((key: any) => flattenAllColumns.find((item) => item.key === key))\n defaultColumns\n\n const { dataFirmDetail } = React.useContext(FirmDetailDataContext)\n\n const { invoke: getFundOfFirm, data: dataFundsFirm, loading: loadingFirm } = useServiceState(\n APIService.firmDetailService.fetchFundsOfFirm,\n )\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFundOfFirm(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFundOfFirm])\n\n return (\n
\n
\n \n
\n {showColumnBuilder && (\n \n )}\n \n {dataFundsFirm && }\n
\n )\n}\n","import React, { useEffect } from 'react'\nimport { Table } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FormItemInput, FormItemSelect, FormItemTextArea } from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelFormFirm } from '../../../../shared/components/RenderLabelFormFirm'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { FirmDetailDataContext } from '../../../../shared/api/context/FirmDetailDataContext'\nimport moment from 'moment'\nimport { Colors } from '../../../../shared/colors'\n\nconst Wrapper = styled.div`\n padding: 1rem 3rem;\n display: flex;\n flex: 1;\n`\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nexport const FirmContactInfo: React.FC = () => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const { dataFirmDetail } = React.useContext(FirmDetailDataContext)\n const { invoke: getFirmUsers, data: firmUsers, loading: fetchingFirmUser } = useServiceState(\n APIService.firmDetailService.fetchFirmUser,\n )\n\n useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFirmUsers(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFirmUsers])\n\n const userColumns: ColumnProps[] = [\n {\n title: 'Company',\n key: 'company',\n dataIndex: 'company',\n sorter: (a, b) => (b.company > a.company ? -1 : 1),\n },\n {\n title: 'Email',\n key: 'email',\n dataIndex: 'email',\n defaultSortOrder: 'ascend',\n render: (value, record) => {\n return value ? (\n \n {value}\n \n ) : null\n },\n sorter: (a, b) => (b.email > a.email ? -1 : 1),\n },\n {\n title: 'Phone Number',\n key: 'business_phone',\n dataIndex: 'business_phone',\n sorter: (a, b) => (b.email > a.email ? -1 : 1),\n },\n {\n title: 'First Name',\n key: 'first_name',\n dataIndex: 'first_name',\n sorter: (a, b) => (b.email > a.email ? -1 : 1),\n },\n {\n title: 'Last Name',\n key: 'last_name',\n dataIndex: 'last_name',\n sorter: (a, b) => (b.email > a.email ? -1 : 1),\n },\n {\n title: 'User Status',\n key: 'active',\n dataIndex: 'active',\n render: (value) => {\n return value ? (\n Active\n ) : (\n Inactive\n )\n },\n sorter: (a, b) => (b.email > a.email ? -1 : 1),\n },\n {\n title: 'Last Activity',\n key: 'last_event_timestamp',\n dataIndex: 'last_event_timestamp',\n sorter: (a, b) => (moment(b).isAfter(moment(a)) ? 1 : -1),\n render: (value, record) => {\n return value ? (\n \n {moment(value).format('YYYY-MM-DD HH:mm')}\n \n ) : null\n },\n },\n ]\n\n return (\n \n \n }\n labelCol={6}\n wrapperCol={12}\n maxLength={60}\n />\n \n }\n labelCol={6}\n wrapperCol={12}\n maxLength={60}\n />\n \n \n }\n labelCol={12}\n wrapperCol={8}\n maxLength={30}\n />\n }\n labelCol={4}\n allowClear\n wrapperCol={8}\n options={\n fundDataDropdown?.contact_state && fundDataDropdown.contact_state.length > 0\n ? fundDataDropdown.contact_state.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n }\n labelCol={12}\n wrapperCol={8}\n maxLength={10}\n />\n }\n labelCol={4}\n wrapperCol={8}\n options={\n fundDataDropdown?.contact_country && fundDataDropdown.contact_country.length > 0\n ? fundDataDropdown.contact_country.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n }\n labelCol={12}\n wrapperCol={8}\n maxLength={30}\n />\n }\n labelCol={4}\n wrapperCol={8}\n maxLength={30}\n />\n \n }\n labelCol={6}\n wrapperCol={12}\n maxLength={60}\n />\n }\n labelCol={6}\n wrapperCol={12}\n maxLength={60}\n />\n \n }\n row={5}\n name=\"contact_description\"\n maxLength={4000}\n />\n \n 'ML Users'}\n size=\"small\"\n columns={userColumns}\n dataSource={firmUsers}\n loading={fetchingFirmUser}\n />\n \n \n )\n}\n","import React from 'react'\nimport { FormItemTextArea } from '../../../../shared/components/FormItemComponents'\n\nexport const FirmOwnershipDescription: React.FC = () => {\n return (\n
\n \n
\n )\n}\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport {\n FormItemAutoComplete,\n FormItemCheckBox,\n FormItemDatePicker,\n FormItemInput,\n FormItemSelect,\n} from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelFormFirm } from '../../../../shared/components/RenderLabelFormFirm'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 1rem 2rem;\n flex-direction: column;\n`\nconst REGISTRATION_OPTIONS = [\n {\n text: 'Investment Advisor',\n value: 'Investment Advisor',\n },\n {\n text: 'Broker-Dealer',\n value: 'Broker-Dealer',\n },\n {\n text: 'CPO/CTO',\n value: 'CPO/CTO',\n },\n]\ntype Props = {\n form: FormInstance\n}\nexport const ManagerFirmInfo: React.FC = ({ form }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const isMinorityFirm = form.getFieldValue('is_minority_firm')\n\n React.useEffect(() => {\n if (!isMinorityFirm) {\n // is_minority_firm === false -> update minority_own_type, minority_own_level to null\n // visually update on the firm\n form.setFieldsValue({ minority_own_type: undefined, minority_own_level: undefined })\n }\n }, [form, isMinorityFirm])\n\n return (\n \n \n
\n \n }\n labelCol={4}\n wrapperCol={20}\n />\n \n \n \n }\n labelCol={8}\n wrapperCol={16}\n normalize=\"number\"\n typeField=\"number\"\n />\n \n \n }\n normalize=\"number\"\n typeField=\"number\"\n />\n \n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n typeField=\"number\"\n normalize=\"float\"\n suffix=\"MM\"\n />\n \n \n \n \n \n }\n labelCol={6}\n wrapperCol={18}\n options={\n fundDataDropdown?.denomination && fundDataDropdown.denomination.length > 0\n ? fundDataDropdown.denomination.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n \n \n }\n labelCol={4}\n wrapperCol={20}\n isKeepOptions\n />\n \n \n \n \n }\n labelCol={8}\n wrapperCol={16}\n normalize=\"number\"\n typeField=\"number\"\n />\n \n \n }\n typeField=\"number\"\n normalize=\"number\"\n />\n \n \n }\n labelCol={8}\n wrapperCol={16}\n options={\n fundDataDropdown?.hfr_analyst && fundDataDropdown.hfr_analyst.length > 0\n ? fundDataDropdown.hfr_analyst.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n \n \n \n \n \n \n }\n labelCol={6}\n wrapperCol={18}\n typeField=\"number\"\n normalize=\"number\"\n />\n \n \n \n }\n labelCol={12}\n disabled\n typeField=\"number\"\n normalize=\"float\"\n suffix=\"MM\"\n rules={[\n () => ({\n validator(rule, value) {\n if ((value && value > 0) || value === null) {\n return Promise.resolve()\n }\n return Promise.reject('Value must be greater than 0!')\n },\n }),\n ]}\n />\n \n \n }\n labelCol={0}\n wrapperCol={24}\n />\n \n \n \n \n }\n labelCol={12}\n typeField=\"number\"\n normalize=\"float\"\n suffix=\"MM\"\n rules={[\n () => ({\n validator(rule, value) {\n if ((value && value > 0) || value === null) {\n return Promise.resolve()\n }\n return Promise.reject('Value must be greater than 0!')\n },\n }),\n ]}\n />\n \n \n }\n labelCol={0}\n wrapperCol={24}\n />\n \n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n typeField=\"number\"\n normalize=\"number\"\n />\n \n \n }\n labelCol={12}\n wrapperCol={12}\n normalize=\"number\"\n typeField=\"number\"\n />\n \n \n \n \n \n } />\n \n \n \n \n }\n disabled={!form.getFieldValue('is_minority_firm')}\n labelCol={12}\n wrapperCol={12}\n options={\n fundDataDropdown?.minority_own_type && fundDataDropdown.minority_own_type.length > 0\n ? fundDataDropdown.minority_own_type.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n \n \n }\n disabled={!form.getFieldValue('is_minority_firm')}\n labelCol={12}\n wrapperCol={12}\n options={\n fundDataDropdown?.minority_own_level && fundDataDropdown.minority_own_level.length > 0\n ? fundDataDropdown.minority_own_level.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n \n \n \n )\n}\n","import { Tabs } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FirmDetailLabelSearchContext } from '../../../../shared/api/context/FirmDetailLabelSearchContext'\nimport { LeftNavFirmEnum, RightTabFirmEnum } from '../../../../shared/SearchFirmLabel'\nimport { FirmContactInfo } from './FirmContactInfo'\nimport { FirmOwnershipDescription } from './FirmOwnershipDescription'\nimport { ManagerFirmInfo } from './ManagerFirmInfo'\nconst { TabPane } = Tabs\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n`\nconst RIGHT_TAB_PANE = [\n {\n id: RightTabFirmEnum.FIRM_INFO,\n },\n {\n id: RightTabFirmEnum.CONTACT_INFORMATION,\n },\n {\n id: RightTabFirmEnum.OWNERSHIP_DESCRIPTION,\n },\n]\ntype Props = {\n form: FormInstance\n}\nexport const FirmMainInformation: React.FC = ({ form }) => {\n const { isFiltering, filterArr } = React.useContext(FirmDetailLabelSearchContext)\n\n const listSearch = React.useMemo(() => {\n return filterArr.filter((item) => item.leftNav === LeftNavFirmEnum.MAIN_INFORMATION)\n }, [filterArr])\n\n const renderTab = (index: RightTabFirmEnum) => {\n switch (index) {\n case RightTabFirmEnum.FIRM_INFO:\n return \n case RightTabFirmEnum.CONTACT_INFORMATION:\n return \n case RightTabFirmEnum.OWNERSHIP_DESCRIPTION:\n return \n default:\n break\n }\n }\n return (\n \n {RIGHT_TAB_PANE.map((item) => {\n const showTabPane = listSearch.findIndex((i) => i.rightTab && i.rightTab === item.id)\n if (showTabPane === -1 && isFiltering) {\n return null\n }\n return (\n \n {renderTab(item.id)}\n \n )\n })}\n \n )\n}\n","import { Col, Radio, Row, Table, Form } from 'antd'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { ColumnsType } from 'antd/lib/table'\nimport { RadioChangeEvent } from 'antd/lib/radio'\nimport styled from 'styled-components'\nimport { FundCCMCResponse } from '../../../../shared/api/models/FundDetails'\nimport { MultiManagerPlatformType } from '../../../../shared/api/models/FirmDetails'\nimport { FormInstance } from 'antd/lib/form'\n\nconst StyledRadio = styled(Radio)`\n display: flex;\n flex-direction: row;\n`\nconst TextWrapper = styled.p`\n text-align: center;\n white-space: wrap;\n`\n\ntype Props = {\n isFirmUpdated?: boolean\n form: FormInstance\n loadingCMICData?: boolean\n loadingMultiManagerPlatform?: boolean\n firmCMICData?: {\n responses: FundCCMCResponse[]\n }\n multiManagerPlatform?: { funds: MultiManagerPlatformType[] }\n onChangeAll?: (newData: MultiManagerPlatformType[]) => void\n}\nexport const FirmMultiManagerPodPlatform: React.FC = ({\n isFirmUpdated,\n form,\n onChangeAll,\n loadingCMICData,\n loadingMultiManagerPlatform,\n firmCMICData,\n multiManagerPlatform,\n}) => {\n const [fundRowData, setFundRowData] = useState([])\n const [allOption, setAllOption] = useState<'yes' | 'no' | 'null'>('null')\n\n useEffect(() => {\n if (!firmCMICData || !multiManagerPlatform) {\n setFundRowData([])\n return\n }\n\n const newData: MultiManagerPlatformType[] = firmCMICData.responses.map((f) => {\n const foundData = multiManagerPlatform.funds.find((r) => r.fund_id === f.fund_id)\n return {\n fund_id: f.fund_id,\n fund_name: f.fund_name,\n multi_manager_platform: foundData?.multi_manager_platform || false,\n }\n })\n\n setFundRowData(newData)\n }, [multiManagerPlatform, firmCMICData])\n\n useEffect(() => {\n if (!isFirmUpdated) {\n setAllOption('null')\n }\n }, [isFirmUpdated])\n\n const columns: ColumnsType = useMemo(() => {\n const updateIsMultiManager = (id: string, newValue: boolean) => {\n setFundRowData((prev) => {\n setAllOption('null')\n const findIndex = prev.findIndex((row) => row.fund_id === id)\n const newData = [...prev]\n newData[findIndex].multi_manager_platform = newValue\n return newData\n })\n }\n return [\n { title: 'FUND', key: 'fund_name', dataIndex: 'fund_name' },\n {\n title: 'YES',\n width: '16.67%',\n align: 'center',\n key: 'yes_option',\n dataIndex: 'multi_manager_platform',\n render: (_value, record) => {\n return (\n \n {\n updateIsMultiManager(record.fund_id, e.target.value)\n }}\n >\n \n \n \n )\n },\n },\n {\n title: 'NO',\n width: '16.67%',\n align: 'center',\n key: 'no_option',\n dataIndex: 'multi_manager_platform',\n render: (_value, record) => {\n return (\n \n {\n updateIsMultiManager(record.fund_id, e.target.value)\n }}\n >\n \n \n \n )\n },\n },\n ]\n }, [])\n\n const onSelectAllOptions = (e: RadioChangeEvent) => {\n setAllOption(e.target.value)\n let newValue: boolean\n if (e.target.value === 'yes') {\n newValue = true\n } else if (e.target.value === 'no') {\n newValue = false\n } else {\n return\n }\n setFundRowData((prev) => {\n const newData = prev.map((row) => {\n return {\n ...row,\n multi_manager_platform: newValue,\n }\n })\n const newDataRecord = newData.reduce((prev, cur) => {\n return {\n ...prev,\n [cur.fund_id]: cur,\n }\n }, {} as Record)\n form.setFieldsValue({ _multiManagerPlatformChange: newDataRecord })\n onChangeAll && onChangeAll(newData)\n return newData\n })\n }\n\n return (\n
\n
{`Please identify whether the fund(s) below employ a multi-manager / multi-investment team platform approach (aka, “Pod Shop”), whereby fund capital is allocated to multiple independent investment teams, often referred to as “Pods”. The Pods are autonomous but generally operate within certain portfolio management or risk guidelines, and capital is allocated to or from these Pods in a discretionary manner under the supervision of a Chief Investment Officer.`}
\n \n \n
\n \n \n {`Select 'Yes' for all`}\n \n \n \n \n {`Select 'No' for all`}\n \n \n \n \n\n f.fund_id}\n />\n \n )\n}\n","import React from 'react'\nconst EditableContext = React.createContext({})\nexport default EditableContext\n","import React from 'react'\n\nimport EditableContext from './EditableContext'\nimport { Form } from 'antd'\ntype Props = {}\n\n/**\n * Editable Row represent a row in Editable Table, that is wrapped with React context to provide the `form` to all its cells\n * @param restProps - all other props provided by the Table's components\n */\nconst EditableFormRow: React.FC = ({ ...props }) => {\n const [form] = Form.useForm()\n return (\n
\n \n
\n \n \n )\n}\n\nexport default EditableFormRow\n","import { AutoComplete, DatePicker, Form, Input, Popover, Select, Tooltip } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport moment from 'moment'\nimport React, { PropsWithChildren } from 'react'\nimport EditableContext from './EditableContext'\nimport { InputProps } from 'antd/lib/input'\nimport { CustomNumberInput } from '../CustomNumberInput'\n\ntype Props = {\n dataIndex: keyof T\n editable: boolean\n record: T\n editingRow: T\n setEditingRow: (row: T) => void\n options: string[]\n optionSelect?: { value: string; label: string }[]\n isDirty?: boolean\n}\n\nconst EditableCell = ({\n dataIndex,\n editable,\n children,\n record,\n editingRow,\n setEditingRow,\n options,\n optionSelect,\n isDirty,\n ...restProps\n}: PropsWithChildren>) => {\n const inputRef = React.useRef(null)\n const form = React.useContext(EditableContext) as FormInstance\n const [showTooltip, setShowTooltip] = React.useState(false)\n\n React.useEffect(() => {\n if (!editingRow) {\n return\n }\n form.setFieldsValue({\n [dataIndex]: editingRow[dataIndex],\n })\n }, [dataIndex, form, editingRow])\n\n const toggleEdit = () => {\n form.setFieldsValue({\n [dataIndex]: record[dataIndex],\n })\n }\n\n const save = async () => {\n setShowTooltip(false)\n //@ts-ignore\n const formValue = form.getFieldValue(dataIndex)\n if (formValue === editingRow[dataIndex]) {\n return\n }\n try {\n const values = await form.validateFields()\n if (\n dataIndex === 'fund_family_code' &&\n values['fund_family_code']?.length !== 4 &&\n values['fund_family_code']?.length !== 0\n ) {\n form.setFieldsValue({\n fund_family_code: null,\n })\n return\n }\n toggleEdit()\n setEditingRow({ ...editingRow, ...values, key: record.key })\n } catch (err) {\n console.log('failed', err)\n }\n }\n\n let childNode = children\n\n if (editable) {\n childNode =\n editingRow && editingRow.key === record.key ? (\n <>\n {dataIndex === 'name' && optionSelect ? (\n setEditingRow({ ...editingRow, name: e, key: record.key })}\n >\n {optionSelect.map((item) => {\n return (\n \n {item.label}\n \n )\n })}\n \n ) : dataIndex === 'date' ? (\n setEditingRow({ ...record, date: date?.format('YYYY-MM-DD'), key: record.key })}\n />\n ) : dataIndex === 'resolvedQuarter' ? (\n {\n if (!date) {\n setEditingRow({\n ...record,\n date: undefined,\n key: record.key,\n resolvedQuarter: undefined,\n })\n return\n }\n const endDateOfQuarter = moment(date).quarter(date.quarter()).endOf('quarter').format('YYYY-MM-DD')\n setEditingRow({\n ...record,\n date: endDateOfQuarter,\n key: record.key,\n resolvedQuarter: endDateOfQuarter,\n })\n }}\n />\n ) : dataIndex === 'name' ? (\n setEditingRow({ ...editingRow, name: e, key: record.key })}\n filterOption={(inputValue, option) => {\n return option?.value.toString().toUpperCase().indexOf(inputValue.toString().toUpperCase()) !== -1\n }}\n >\n {options &&\n options.map((item) => (\n \n {item}\n \n ))}\n \n ) : dataIndex === 'fund_family_code' ? (\n \n \n {\n const val = e.target.value || ''\n if (val.length !== 4 && val.length !== 0) {\n setShowTooltip(true)\n } else {\n setShowTooltip(false)\n }\n }}\n precision={0}\n max={10000}\n maxLength={4}\n minLength={4}\n />\n \n \n ) : (\n \n \n \n )}\n \n ) : (\n \n {\n // @ts-ignore\n dataIndex === 'resolvedQuarter' ? `${record.year}-Q${record.quarter}` : children\n }\n \n )\n }\n\n return \n}\n\nexport default EditableCell\n","import { Button, Table } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport EditableFormRow from './EditableTable/EditableFormRow'\nimport EditableCell from './EditableTable/EditableCell'\nimport { InputProps } from 'antd/lib/input'\nimport { Link } from 'react-router-dom'\nimport APIService from '../api'\n\nconst Flex = styled.div`\n flex: 1;\n display: flex;\n`\nconst StyledHeader = styled.div`\n display: flex;\n padding: 1rem 1.5rem;\n justify-content: space-between;\n align-items: center;\n`\n\nexport type FundFamilyType = {\n firm_id: string\n firm_name: string\n fund_id: string\n fund_name: string\n fund_family_code?: string | null\n fund_family_id?: string | null\n region_inv_focus?: string | null\n region_inv_focus_country?: string | null\n strategy_code?: string | null\n sub_strategy_code?: string | null\n}\n\ntype Props = {\n variant?: 'firm' | 'fund'\n editable?: boolean\n isLoading?: boolean\n fundFamilyData: FundFamilyType[]\n onRefecth?: () => void\n}\n\nexport const FundFamilyTable: React.FC = ({\n variant = 'fund',\n editable = false,\n isLoading,\n fundFamilyData,\n onRefecth,\n}) => {\n const [isSubmitting, setIsSubmitting] = React.useState(false)\n const [isEdited, setIsEdited] = React.useState(false)\n const [editedData, setEditedData] = React.useState([])\n const [dirtyData, setDirtyData] = React.useState>({})\n // refetch data\n React.useEffect(() => {\n if (fundFamilyData) {\n setEditedData(fundFamilyData)\n setIsEdited(false)\n setDirtyData({})\n }\n }, [fundFamilyData])\n //\n const handleSubmit = async () => {\n if (!isEdited) {\n return\n }\n setIsSubmitting(true)\n const changedData = editedData.reduce((prev, cur, index) => {\n if (cur.fund_family_code === null || cur.fund_family_code === undefined) {\n return prev\n }\n if (fundFamilyData[index].fund_family_code !== cur.fund_family_code) {\n return [...prev, cur]\n }\n return prev\n }, [] as FundFamilyType[])\n\n await Promise.all(\n changedData.map((d) => {\n return APIService.fundDetailService.updateFundBasicInfo(d.fund_id, {\n fund_family_code: d.fund_family_code,\n })\n }),\n )\n setIsSubmitting(false)\n setIsEdited(false)\n setDirtyData({})\n onRefecth && onRefecth()\n }\n\n ////////////////////////////////////////\n // columns\n ////////////////////////////////////////\n const columns: ColumnProps[] = [\n {\n title: 'Fund Family ID',\n dataIndex: 'fund_family_id',\n key: 'fund_family_id',\n width: '12%',\n sorter: (a, b) => {\n return (a.fund_family_id || '').localeCompare(b.fund_family_id || '')\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Fund ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n width: '12%',\n sorter: (a, b) => {\n return (a.fund_family_id || '').localeCompare(b.fund_family_id || '')\n },\n sortDirections: ['descend', 'ascend'],\n },\n variant === 'firm'\n ? {\n title: 'Fund Name',\n dataIndex: 'fund_name',\n key: 'fund_name',\n width: '12%',\n sorter: (a, b) => {\n return (a.fund_name || '').localeCompare(b.fund_name || '')\n },\n sortDirections: ['descend', 'ascend'],\n render: (value, record) => {\n return {value}\n },\n }\n : {\n title: 'Fund Name',\n dataIndex: 'fund_name',\n key: 'fund_name',\n width: '12%',\n sorter: (a, b) => {\n return (a.fund_name || '').localeCompare(b.fund_name || '')\n },\n sortDirections: ['descend', 'ascend'],\n render: (value, record, index) => {\n if (index === 0) {\n return value\n }\n return {value}\n },\n },\n {\n title: 'Strategy',\n dataIndex: 'strategy_code',\n key: 'strategy_code',\n width: '12%',\n sorter: (a, b) => {\n return (a.strategy_code || '').localeCompare(b.strategy_code || '')\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Sub Strategy',\n dataIndex: 'sub_strategy_code',\n key: 'sub_strategy_code',\n width: '12%',\n sorter: (a, b) => {\n return (a.sub_strategy_code || '').localeCompare(b.sub_strategy_code || '')\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Regional Investment Focus',\n dataIndex: 'region_inv_focus',\n key: 'region_inv_focus',\n width: '12%',\n sorter: (a, b) => {\n return (a.region_inv_focus || '').localeCompare(b.region_inv_focus || '')\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Regional Investment Focus Sub-Region',\n dataIndex: 'region_inv_focus_country',\n key: 'region_inv_focus_country',\n width: '12%',\n sorter: (a, b) => {\n return (a.region_inv_focus_country || '').localeCompare(b.region_inv_focus_country || '')\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Fund Family Code',\n dataIndex: 'fund_family_code',\n key: 'fund_family_code',\n width: '12%',\n sorter: (a, b) => {\n return (a.fund_family_code || '').localeCompare(b.fund_family_code || '')\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n inputProps: { maxLength: 4 } as InputProps,\n record,\n editable,\n dataIndex: 'fund_family_code',\n isDirty: !!dirtyData[record.fund_id],\n editingRow: record,\n setEditingRow: (newRecord: FundFamilyType) => {\n // diff value\n setIsEdited(true)\n setDirtyData((prev) => {\n const newValue = { ...prev }\n newValue[newRecord.fund_id] = true\n return newValue\n })\n setEditedData((prev) => {\n const findIndex = prev.findIndex((d) => d.fund_id === newRecord.fund_id)\n if (findIndex < 0) {\n return prev\n }\n const newData = [...prev]\n newData[findIndex] = newRecord\n return newData\n })\n },\n }),\n },\n ]\n ////////////////////////////////////////\n\n const components = {\n body: {\n row: EditableFormRow,\n cell: EditableCell,\n },\n }\n return (\n \n \n
Fund Family
\n
\n {editable && (\n \n Update\n \n )}\n {onRefecth && (\n {\n setIsEdited(false)\n onRefecth()\n }}\n >\n Refresh\n \n )}\n
\n
\n \n 'editable-row'}\n dataSource={editedData}\n columns={columns}\n components={components}\n style={{ flex: 1 }}\n pagination={fundFamilyData && fundFamilyData.length > 10 ? undefined : false}\n loading={isLoading}\n />\n \n
\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { FundFamilyTable, FundFamilyType } from '../../../../shared/components/FundFamilyTable'\nimport { FirmDetailDataContext } from '../../../../shared/api/context/FirmDetailDataContext'\nimport { RootState } from '../../../../app/rootReducer'\nimport { useSelector } from 'react-redux'\n\nconst Flex = styled.div`\n flex: 1;\n display: flex;\n`\n\ntype Props = {}\nexport const FirmFundFamily: React.FC = () => {\n const { dataFirmDetail, fundDataDropdown } = React.useContext(FirmDetailDataContext)\n\n const { invoke: getFundOfFirm, data: dataFundsFirm, loading } = useServiceState(\n APIService.firmDetailService.fetchFundsOfFirm,\n )\n const { strategies: strategyOptions, subStrategies: subStrategyOptions } = useSelector(\n (state: RootState) => state.appData,\n )\n // map fund family data\n const fundFamilyData = React.useMemo(() => {\n if (!dataFundsFirm || !fundDataDropdown || !strategyOptions || !subStrategyOptions) {\n return []\n }\n const results = dataFundsFirm.map((d) => {\n //\n const stategy_op = d.strategy_code ? strategyOptions.find((s) => s.strategy_code === d.strategy_code) : undefined\n const stategy_code = stategy_op?.strategy_name || ''\n //\n const sub_stategy_op = d.sub_strategy_code\n ? subStrategyOptions.find((s) => s.sub_strategy_code === d.sub_strategy_code)\n : undefined\n const sub_stategy_code = sub_stategy_op?.sub_strategy_name || ''\n //\n const region_inv_focus_op = d.region_inv_focus\n ? fundDataDropdown.region_inv_focus.find((s) => s.code_code === `${d.region_inv_focus}`)\n : undefined\n const region_inv_focus = region_inv_focus_op?.code_description || ''\n //\n const region_inv_focus_country_op = d.region_inv_focus_country\n ? fundDataDropdown.region_inv_focus_country.find((s) => s.code_code === `${d.region_inv_focus_country}`)\n : undefined\n const region_inv_focus_country = region_inv_focus_country_op?.code_description || ''\n //\n return {\n fund_id: d.fund_id,\n fund_name: d.fund_name,\n firm_id: d.firm_id,\n firm_name: d.firm_name,\n fund_family_id: d.fund_family_id,\n fund_family_code: d.fund_family_code || '',\n strategy_code: stategy_code,\n sub_strategy_code: sub_stategy_code,\n region_inv_focus,\n region_inv_focus_country,\n } as FundFamilyType\n })\n return results\n }, [dataFundsFirm, strategyOptions, subStrategyOptions, fundDataDropdown])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFundOfFirm(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFundOfFirm])\n\n const handleRefetch = () => {\n dataFirmDetail?.firm_id && getFundOfFirm(dataFirmDetail?.firm_id)\n }\n\n return (\n \n \n \n )\n}\n","import { CheckCircleTwoTone, SearchOutlined } from '@ant-design/icons'\nimport { AutoComplete, Button, Card, Col, Empty, Form, Input, notification, Popconfirm, Row } from 'antd'\nimport { useForm } from 'antd/lib/form/util'\nimport Text from 'antd/lib/typography/Text'\nimport moment from 'moment'\nimport React, { SetStateAction, useCallback, useEffect, useRef } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport { FirmDetailDataContext } from '../../../shared/api/context/FirmDetailDataContext'\nimport { FirmDetailLabelSearchProvider } from '../../../shared/api/context/FirmDetailLabelSearchContext'\nimport { FirmDetails, FirmMoreField, MultiManagerPlatformType } from '../../../shared/api/models/FirmDetails'\nimport { FundCCMCResponse, FundDropdownCodeType } from '../../../shared/api/models/FundDetails'\nimport { Colors } from '../../../shared/colors'\nimport { UpdateRORType } from '../../../shared/components/DataSheet'\nimport FFPerfectScrollbar from '../../../shared/components/FFPerfectScrollbar'\nimport { FirmESGSection } from '../../../shared/components/FirmESGSection'\nimport { MODE_ESG_VIEW } from '../../../shared/components/FundESGSection'\nimport { LoadingDetails } from '../../../shared/components/LoadingDetails'\nimport { TabContentWrapper } from '../../../shared/components/TabContentWrapper'\nimport { useDraft } from '../../../shared/DraftManager'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { LeftNavFirmEnum, ListSearchFirmType, renderSearchListFirm } from '../../../shared/SearchFirmLabel'\nimport { removeTabs, updateTabTitle } from '../../../slice/appSettingsSlice'\nimport { FundSearchColumnProvider } from '../DashboardTab/ColumnBuilder/FundSearchColumnContext'\nimport { FirmCoInvestment } from './Co-Investment/FirmCoInvestment'\nimport { CodeOfConduct } from './CodeOfConduct/CodeOfConduct'\nimport { FirmDueDiligence } from './DueDiligence/FirmDueDiligence'\nimport { FirmAssets } from './FirmAssets/FirmAssets'\nimport FirmDI from './FirmDI/FirmDI'\nimport FirmExecutiveOrders from './FirmExecutiveOrders/FirmExecutiveOrders'\nimport { FirmRegMain } from './FirmReg/FirmRegMain'\nimport { FundsOfFirm } from './FundOfFirm/FundsOfFirm'\nimport { FirmMainInformation } from './MainInformation/FirmMainInformation'\nimport { FirmMultiManagerPodPlatform } from './FirmMultiManagerPodPlatform/FirmMultiManagerPodPlatform'\nimport { FirmFundFamily } from './FundFamily/FirmFundFamily'\nimport { useRouteMatch } from 'react-router-dom'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst StyledCard = styled(Card)`\n overflow: hidden;\n .ant-card-head {\n padding: 0 1rem;\n }\n .ant-card-head-title {\n padding: 0;\n }\n .ant-card-body {\n padding: 0;\n overflow: hidden;\n }\n .ant-card-head {\n border-bottom: 2px solid #f0f0f0 !important;\n }\n`\nconst StyledForm = styled(Form)`\n flex: 1;\n overflow: hidden;\n height: 100%;\n .ant-form-item {\n margin-bottom: 8px;\n }\n`\nconst TextID = styled(Text)`\n font-size: 14px;\n`\n\nconst StyledTabList = styled.div<{ active?: boolean }>`\n background: ${(props) => (props.active ? '#EDF6FF' : '#fff')};\n font-weight: ${(props) => (props.active ? 'bold' : 'none')};\n display: flex;\n flex: 1;\n align-items: center;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n border-top: none;\n padding: 1rem 0 1rem 3rem;\n :hover {\n cursor: pointer;\n }\n`\n\nconst TAB_LIST = [\n {\n id: LeftNavFirmEnum.MAIN_INFORMATION,\n },\n {\n id: LeftNavFirmEnum.FIRM_ASSETS,\n },\n {\n id: LeftNavFirmEnum.FIRM_REG_INFORMATION,\n },\n {\n id: LeftNavFirmEnum.CODE_OF_CONDUCT,\n },\n {\n id: LeftNavFirmEnum.CO_INVESTMENTS,\n },\n {\n id: LeftNavFirmEnum.FIRM_ESG,\n },\n {\n id: LeftNavFirmEnum.FIRM_DIVERSITY_INCLUSION,\n },\n {\n id: LeftNavFirmEnum.FUNDS_OF_FIRM,\n },\n {\n id: LeftNavFirmEnum.DUE_DILIGENCE,\n },\n {\n id: LeftNavFirmEnum.EXECUTIVE_ORDERS,\n },\n {\n id: LeftNavFirmEnum.FIRM_MULTI_MANAGER_POD_PLATFORM,\n },\n {\n id: LeftNavFirmEnum.FUND_FAMILY,\n },\n]\nexport const FIRM_DATE_FIELDS = ['firm_asset_date', 'firm_assets_date_hf', 'firm_assets_date_fof']\n\ntype Props = {\n initialPath?: LeftNavFirmEnum\n}\n\nexport const FirmDetailMain: React.FC = ({ initialPath }) => {\n const { dataFirmDetail, loading, refetch, dataFirmDetailSubmitRef, fundDataDropdown } = React.useContext(\n FirmDetailDataContext,\n )\n const [activeTab, setActiveTab] = React.useState(initialPath || TAB_LIST[0].id)\n const [loadingSubmitForm, setLoadingSubmitForm] = React.useState(false)\n // const [dataFirmDetailSubmit, setDataFirmDetailSubmit] = React.useState>({})\n\n const [optionFilter, setOptionFilter] = React.useState(renderSearchListFirm)\n const [textFilterSearch, settextFilterSearch] = React.useState('')\n const [snapshot, setSnapshot] = React.useState | null>(null)\n const [isFirmUpdated, setIsFirmUpdated] = React.useState(false)\n const [firmAssetsSubmitting, setFirmAssetsSubmitting] = React.useState(false)\n const [firmAssetsDataChange, setFirmAssetsDataChange] = React.useState({ values: undefined })\n const [firmAssetsHFDataChange, setFirmAssetsHFDataChange] = React.useState({ values: undefined })\n const [submittingFirmAssetHF, setSubmittingFirmAssetHF] = React.useState(false)\n const [firmCCMCDataChange, setFirmCCMCDataChange] = React.useState()\n const [firmCMICDataChange, setFirmCMICDataChange] = React.useState()\n const [multiManagerPlatformChange, setMultiManagerPlatformChange] = React.useState()\n\n const dispatch = useDispatch()\n\n const { clearSnapshot, loadSnapshot, saveSnapshot } = useDraft()\n const [form] = useForm()\n\n const { invoke: getAllMinorityTypes, data: minorityTypes } = useServiceState(\n APIService.minorityService.fetchMinorityTypes,\n )\n\n React.useEffect(() => {\n const countryCode = dataFirmDetail?.country\n if (!countryCode) {\n return\n }\n getAllMinorityTypes(countryCode)\n }, [dataFirmDetail?.country, getAllMinorityTypes])\n React.useEffect(() => {\n if (dataFirmDetail && dataFirmDetailSubmitRef?.current) {\n const draft = loadSnapshot('firmDraft', dataFirmDetail.firm_id || 'new-firm')\n if (draft) {\n setIsFirmUpdated(true)\n setSnapshot(draft)\n dataFirmDetailSubmitRef.current = draft\n setFirmAssetsDataChange(draft._firmAssetsDataChange || { values: undefined })\n setFirmAssetsHFDataChange(draft._firmAssetsHFDataChange || { values: undefined })\n setFirmCCMCDataChange(draft._firmCCMCDataChange || undefined)\n setFirmCMICDataChange(draft._firmCMICDataChange || undefined)\n setMultiManagerPlatformChange(draft._multiManagerPlatformChange || undefined)\n }\n dispatch(updateTabTitle({ tabName: dataFirmDetail.firm_name, id: dataFirmDetail.firm_id }))\n }\n }, [dataFirmDetail, dataFirmDetailSubmitRef, dispatch, loadSnapshot])\n\n React.useEffect(() => {\n if (form && snapshot) {\n const parsedCCMCData = snapshot._firmCCMCDataChange?.reduce((acc, curr) => {\n return {\n ...acc,\n [curr.fund_id]: {\n ...curr,\n },\n }\n }, {})\n form.setFieldsValue({ ...snapshot, _firmCCMCDataChange: parsedCCMCData })\n setIsFirmUpdated(true)\n } else {\n setIsFirmUpdated(false)\n }\n }, [form, snapshot, setIsFirmUpdated])\n\n const { invoke: getFirmMinority, data: dataFirmMinority } = useServiceState(\n APIService.minorityService.fetchFirmMinorityStatuses,\n )\n\n React.useEffect(() => {\n const firmMinorityStatuses = dataFirmMinority?.firm_minority_statuses\n if (firmMinorityStatuses?.length) {\n firmMinorityStatuses?.map((item) => form.setFieldsValue({ [`minority_type_${item.minority_type}`]: item.status }))\n }\n }, [dataFirmMinority, form])\n\n const initialDataForm = dataFirmDetail && {\n ...dataFirmDetail,\n firm_asset_date: dataFirmDetail.firm_asset_date ? moment(dataFirmDetail.firm_asset_date) : null,\n firm_assets_date_hf: dataFirmDetail.firm_assets_date_hf ? moment(dataFirmDetail.firm_assets_date_hf) : null,\n firm_assets_date_fof: dataFirmDetail.firm_assets_date_fof ? moment(dataFirmDetail.firm_assets_date_fof) : null,\n }\n\n // Fetch data\n const { invoke: getFirmAssets, data: dataFirmAsset, loading: dataLoadingFirmAssets } = useServiceState(\n APIService.firmDetailService.fetchFirmAssets,\n )\n\n const { invoke: getFirmAssetsHF, data: dataFirmAssetHF, loading: loadingFirmAssetHF } = useServiceState(\n APIService.firmDetailService.fetchFirmAssetsHedgeFund,\n )\n\n // Firm CCMC\n const { invoke: getFirmCCMC, data: firmCCMCData } = useServiceState(APIService.firmDetailService.fetchFirmCCMC)\n // Firm CMIC\n const { invoke: getFirmCMIC, data: firmCMICData, loading: loadingCMICData } = useServiceState(\n APIService.firmDetailService.fetchFirmCMIC,\n )\n // Multi Manager Platform\n const {\n invoke: getMultiManagerPlatform,\n data: multiManagerPlatform,\n loading: loadingMultiManagerPlatform,\n } = useServiceState(APIService.firmDetailService.fetchMultiManagerPlatform)\n //\n // set is updated\n React.useEffect(() => {\n if (firmAssetsDataChange.values) {\n setIsFirmUpdated(true)\n }\n }, [firmAssetsDataChange])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFirmMinority(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFirmMinority])\n\n React.useEffect(() => {\n if (firmAssetsHFDataChange.values) {\n setIsFirmUpdated(true)\n }\n }, [firmAssetsHFDataChange])\n\n React.useEffect(() => {\n if (firmCCMCDataChange && firmCCMCDataChange.length > 0) {\n setIsFirmUpdated(true)\n }\n }, [firmCCMCDataChange])\n\n React.useEffect(() => {\n if (firmCMICDataChange && firmCMICDataChange.length > 0) {\n setIsFirmUpdated(true)\n }\n }, [firmCMICDataChange])\n\n React.useEffect(() => {\n if (multiManagerPlatformChange && multiManagerPlatformChange.length > 0) {\n setIsFirmUpdated(true)\n }\n }, [multiManagerPlatformChange])\n\n // fetch data\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFirmAssets(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFirmAssets])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFirmAssetsHF(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFirmAssetsHF])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFirmCCMC(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFirmCCMC])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFirmCMIC(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFirmCMIC])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getMultiManagerPlatform(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getMultiManagerPlatform])\n\n // change active tab if re-route\n const route = useRouteMatch<{ fundId: string; firmId: string; activeFundNav: string; activeFirmNav: string }>()\n React.useEffect(() => {\n if (initialPath && route.params.activeFirmNav) {\n setActiveTab(initialPath)\n }\n }, [route])\n //\n React.useEffect(() => {\n if (initialPath) {\n setActiveTab(initialPath)\n }\n }, [initialPath])\n //\n\n const firmCountry = fundDataDropdown?.firm_contact_country.find(\n (item: FundDropdownCodeType) => item.code_code === dataFirmDetail?.country,\n )\n\n const debouceRef = useRef(null)\n const setDataFirmDetailSubmit = useCallback(\n (\n action: SetStateAction<\n Partial<\n FirmDetails &\n FirmMoreField & { _firmAssetsDataChange: UpdateRORType; _firmCCMCDataChange: FundCCMCResponse[] }\n >\n >,\n ) => {\n if (dataFirmDetail && dataFirmDetailSubmitRef?.current) {\n dataFirmDetailSubmitRef.current = typeof action === 'object' ? action : action(dataFirmDetailSubmitRef?.current)\n\n Object.keys(dataFirmDetailSubmitRef.current).forEach((key) => {\n if (dataFirmDetailSubmitRef.current[key as keyof Partial] === undefined) {\n delete dataFirmDetailSubmitRef.current[key as keyof Partial]\n }\n })\n\n if (debouceRef.current) {\n clearTimeout(debouceRef.current)\n }\n\n debouceRef.current = setTimeout(\n () =>\n saveSnapshot('firmDraft', {\n data:\n Object.keys(dataFirmDetailSubmitRef.current).length > 0 ? dataFirmDetailSubmitRef.current : undefined,\n name: dataFirmDetail.firm_name || 'NEW FIRM',\n id: dataFirmDetail.firm_id || 'new-firm',\n }),\n 300,\n )\n }\n },\n [dataFirmDetail, dataFirmDetailSubmitRef, saveSnapshot],\n )\n\n useEffect(() => {\n setDataFirmDetailSubmit((prevState) => ({\n ...prevState,\n _firmAssetsDataChange: firmAssetsDataChange.values ? firmAssetsDataChange : undefined,\n _firmAssetsHFDataChange: firmAssetsHFDataChange.values ? firmAssetsHFDataChange : undefined,\n _firmCCMCDataChange: firmCCMCDataChange && firmCCMCDataChange.length > 0 ? firmCCMCDataChange : undefined,\n _firmCMICDataChange: firmCMICDataChange && firmCMICDataChange.length > 0 ? firmCMICDataChange : undefined,\n _multiManagerPlatformChange:\n multiManagerPlatformChange && multiManagerPlatformChange.length > 0 ? multiManagerPlatformChange : undefined,\n }))\n }, [\n firmAssetsDataChange,\n firmAssetsHFDataChange,\n firmCCMCDataChange,\n firmCMICDataChange,\n multiManagerPlatformChange,\n setDataFirmDetailSubmit,\n ])\n\n const handleCancel = () => {\n if (dataFirmDetail) {\n refetch()\n setFirmAssetsDataChange({ values: undefined })\n setFirmAssetsHFDataChange({ values: undefined })\n setFirmCCMCDataChange(undefined)\n setFirmCMICDataChange(undefined)\n setMultiManagerPlatformChange(undefined)\n form.resetFields()\n setDataFirmDetailSubmit({})\n setIsFirmUpdated(false)\n clearSnapshot('firmDraft', dataFirmDetail.firm_id || 'new-firm')\n }\n }\n\n const handleSubmit = async () => {\n if (!dataFirmDetail) {\n return\n }\n if (firmAssetsDataChange.values) {\n try {\n setFirmAssetsSubmitting(true)\n setLoadingSubmitForm(true)\n firmAssetsDataChange &&\n (await APIService.firmDetailService.updateFirmAssets(\n dataFirmDetail.firm_id,\n JSON.parse(JSON.stringify(firmAssetsDataChange)),\n ))\n // refetch data\n notification.success({ message: 'Total Firm Assets Updated' })\n setFirmAssetsDataChange({ values: undefined })\n getFirmAssets(dataFirmDetail.firm_id)\n setIsFirmUpdated(false)\n clearSnapshot('firmDraft', dataFirmDetail.firm_id)\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n setFirmAssetsSubmitting(false)\n setLoadingSubmitForm(false)\n }\n }\n if (firmAssetsHFDataChange.values) {\n try {\n setSubmittingFirmAssetHF(true)\n await APIService.firmDetailService.updateFirmAssetsHedgeFund(\n dataFirmDetail.firm_id,\n JSON.parse(JSON.stringify(firmAssetsHFDataChange)),\n )\n notification.success({ message: 'Total Firm Assets Dedicated To Hedge Fund Updated' })\n getFirmAssetsHF(dataFirmDetail.firm_id)\n setFirmAssetsHFDataChange({ values: undefined })\n setIsFirmUpdated(false)\n clearSnapshot('firmDraft', dataFirmDetail.firm_id)\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n setSubmittingFirmAssetHF(false)\n }\n }\n if (firmCCMCDataChange && firmCCMCDataChange.length > 0) {\n try {\n await APIService.firmDetailService.updateFirmCCMC(\n dataFirmDetail.firm_id,\n firmCCMCDataChange.map((item) => ({ ...item, other_measures: item.other_measures || '' })),\n )\n notification.success({ message: 'Firm CCMC Updated' })\n getFirmCCMC(dataFirmDetail.firm_id)\n setFirmCCMCDataChange(undefined)\n setIsFirmUpdated(false)\n clearSnapshot('firmDraft', dataFirmDetail.firm_id)\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n }\n }\n if (firmCMICDataChange && firmCMICDataChange.length > 0) {\n try {\n await APIService.firmDetailService.updateFirmCMIC(\n dataFirmDetail.firm_id,\n firmCMICDataChange.map((item) => ({ ...item, other_measures: item.other_measures || '' })),\n )\n notification.success({ message: 'Firm CMIC Updated' })\n getFirmCMIC(dataFirmDetail.firm_id)\n setFirmCMICDataChange(undefined)\n setIsFirmUpdated(false)\n clearSnapshot('firmDraft', dataFirmDetail.firm_id)\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n }\n }\n if (multiManagerPlatformChange && multiManagerPlatformChange.length > 0) {\n try {\n await APIService.firmDetailService.updateMultiManagerPlatform(dataFirmDetail.firm_id, {\n updates: multiManagerPlatformChange,\n })\n notification.success({ message: 'Multi Manager Platform Updated' })\n getMultiManagerPlatform(dataFirmDetail.firm_id)\n setMultiManagerPlatformChange(undefined)\n setIsFirmUpdated(false)\n clearSnapshot('firmDraft', dataFirmDetail.firm_id)\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n }\n }\n if (initialDataForm && dataFirmDetailSubmitRef?.current) {\n const fieldChange: Partial = Object.keys(dataFirmDetailSubmitRef.current)\n\n .filter(\n (key) =>\n dataFirmDetailSubmitRef?.current[key as keyof FirmDetails] !== initialDataForm[key as keyof FirmDetails],\n )\n\n .reduce((accum, key) => {\n const value = dataFirmDetailSubmitRef?.current[key as keyof Partial]\n if (FIRM_DATE_FIELDS.includes(key) && value) {\n return { ...accum, [key]: moment(value as string).format('YYYY-MM-DD') }\n }\n // is_minority_firm === false -> update minority_own_type, minority_own_level to null\n // actually reset value to sumbit to the server\n if (key === 'is_minority_firm' && !value) {\n return {\n ...accum,\n is_minority_firm: false,\n minority_own_type: null,\n minority_own_level: null,\n }\n }\n\n return {\n ...accum,\n [key]: dataFirmDetailSubmitRef?.current[key as keyof FirmDetails],\n }\n }, {})\n\n // Update minority types\n const dataMinority = Object.entries(fieldChange).filter((item) => item[0].includes('minority_type_'))\n\n // extract minority types out of field changes\n const dataChange = Object.entries(fieldChange)\n .filter((item) => !item[0].includes('minority_type_'))\n .reduce((acc, item) => {\n return {\n ...acc,\n [item[0]]: item[1],\n }\n }, {})\n\n const minorityChange = {\n updates: dataMinority.map((item) => {\n return {\n minority_type: +item[0].replace('minority_type_', ''),\n status: item[1] as boolean,\n }\n }),\n }\n\n if (minorityChange && minorityChange.updates.length > 0 && dataFirmDetail) {\n APIService.minorityService\n .updateFirmMinorityStatuses(dataFirmDetail.firm_id, minorityChange)\n .then(() => {\n notification.success({ message: 'Diversity & Inclusion Updated!' })\n setDataFirmDetailSubmit({})\n setIsFirmUpdated(false)\n clearSnapshot('firmDraft', initialDataForm.firm_id)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n }\n\n if (initialDataForm.firm_id && Object.keys(dataChange).length > 0) {\n setLoadingSubmitForm(true)\n APIService.firmDetailService\n .updateFirmInfo(initialDataForm.firm_id, dataChange)\n .then(() => {\n notification.success({ message: 'Firm Updated!' })\n refetch()\n setDataFirmDetailSubmit({})\n setIsFirmUpdated(false)\n clearSnapshot('firmDraft', initialDataForm.firm_id)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n } else {\n setIsFirmUpdated(false)\n clearSnapshot('firmDraft', initialDataForm.firm_id)\n }\n }\n }\n\n const renderTabContent = (activeTab: LeftNavFirmEnum) => {\n switch (activeTab) {\n case LeftNavFirmEnum.FUNDS_OF_FIRM:\n return (\n \n \n \n )\n case LeftNavFirmEnum.MAIN_INFORMATION:\n return \n case LeftNavFirmEnum.FIRM_ASSETS:\n return (\n \n )\n case LeftNavFirmEnum.FIRM_REG_INFORMATION:\n return \n case LeftNavFirmEnum.CODE_OF_CONDUCT:\n return \n case LeftNavFirmEnum.CO_INVESTMENTS:\n return \n case LeftNavFirmEnum.FIRM_ESG:\n return \n case LeftNavFirmEnum.FIRM_DIVERSITY_INCLUSION:\n return (\n \n )\n case LeftNavFirmEnum.DUE_DILIGENCE:\n return \n case LeftNavFirmEnum.EXECUTIVE_ORDERS:\n return (\n \n )\n case LeftNavFirmEnum.FIRM_MULTI_MANAGER_POD_PLATFORM:\n return (\n \n )\n case LeftNavFirmEnum.FUND_FAMILY:\n return \n default:\n break\n }\n }\n\n return (\n \n {dataFirmDetail && firmCCMCData && firmCMICData && multiManagerPlatform && (\n {\n return {\n ...acc,\n [curr.fund_id]: {\n has_securities: curr.has_securities,\n manager_confirms: curr.manager_confirms,\n separate_share_classes: curr.separate_share_classes,\n pre_trade_compliance_restrictions: curr.pre_trade_compliance_restrictions,\n other_measures: curr.other_measures,\n subscription_notice: curr.subscription_notice,\n },\n }\n }, {}),\n _firmCMICDataChange: firmCMICData.responses.reduce((acc, curr) => {\n return {\n ...acc,\n [curr.fund_id]: {\n has_securities: curr.has_securities,\n manager_confirms: curr.manager_confirms,\n separate_share_classes: curr.separate_share_classes,\n pre_trade_compliance_restrictions: curr.pre_trade_compliance_restrictions,\n other_measures: curr.other_measures,\n subscription_notice: curr.subscription_notice,\n },\n }\n }, {}),\n _multiManagerPlatformChange: multiManagerPlatform.funds.reduce((prev, cur) => {\n return {\n ...prev,\n [cur.fund_id]: cur,\n }\n }, {} as Record),\n }}\n onFieldsChange={() => setIsFirmUpdated(true)}\n onValuesChange={(changedValues, allValues) => {\n if (!changedValues._firmCCMCDataChange && !changedValues._firmCMICDataChange) {\n const convertObject = Object.keys(changedValues).reduce((acc, key) => {\n //format field\n return { ...acc, [key]: changedValues[key] !== undefined ? changedValues[key] : null }\n }, {})\n setDataFirmDetailSubmit({ ...dataFirmDetailSubmitRef?.current, ...convertObject })\n }\n\n // CCMC Changes\n const ccmcChanges = allValues._firmCCMCDataChange\n // Logic to remove manager_confirms data if the corresponding has_securities is No/Does Not Apply\n changedValues._firmCCMCDataChange &&\n Object.keys(changedValues._firmCCMCDataChange).map((item) => {\n const firmCCMCDataChange = {\n ...changedValues._firmCCMCDataChange,\n [item]: {\n ...changedValues._firmCCMCDataChange[item],\n manager_confirms:\n ccmcChanges[item].has_securities !== 1 ? null : ccmcChanges[item].manager_confirms,\n separate_share_classes:\n ccmcChanges[item].has_securities === 2 ? null : ccmcChanges[item].separate_share_classes,\n pre_trade_compliance_restrictions:\n ccmcChanges[item].has_securities === 2\n ? null\n : ccmcChanges[item].pre_trade_compliance_restrictions,\n other_measures: ccmcChanges[item].has_securities === 2 ? null : ccmcChanges[item].other_measures,\n },\n }\n form.setFieldsValue({\n _firmCCMCDataChange: firmCCMCDataChange,\n })\n })\n changedValues._firmCCMCDataChange &&\n Object.keys(ccmcChanges).length > 0 &&\n setFirmCCMCDataChange(\n Object.keys(ccmcChanges).map((fundId) => {\n return {\n fund_id: fundId,\n ...ccmcChanges[fundId],\n manager_confirms: !ccmcChanges[fundId].has_securities ? null : ccmcChanges[fundId].manager_confirms,\n }\n }),\n )\n\n // CMIC Changes\n const cmicChanges = allValues._firmCMICDataChange\n // Logic to remove manager_confirms data if the corresponding has_securities is No/Does Not Apply\n changedValues._firmCMICDataChange &&\n Object.keys(changedValues._firmCMICDataChange).map((item) => {\n const firmCMICDataChange = {\n ...changedValues._firmCMICDataChange,\n [item]: {\n ...changedValues._firmCMICDataChange[item],\n manager_confirms:\n cmicChanges[item].has_securities !== 1 ? null : cmicChanges[item].manager_confirms,\n separate_share_classes:\n cmicChanges[item].has_securities === 2 ? null : cmicChanges[item].separate_share_classes,\n pre_trade_compliance_restrictions:\n cmicChanges[item].has_securities === 2\n ? null\n : cmicChanges[item].pre_trade_compliance_restrictions,\n other_measures: cmicChanges[item].has_securities === 2 ? null : cmicChanges[item].other_measures,\n },\n }\n form.setFieldsValue({\n _firmCMICDataChange: firmCMICDataChange,\n })\n })\n changedValues._firmCMICDataChange &&\n Object.keys(cmicChanges).length > 0 &&\n setFirmCMICDataChange(\n Object.keys(cmicChanges).map((fundId) => {\n return {\n fund_id: fundId,\n ...cmicChanges[fundId],\n manager_confirms: !cmicChanges[fundId].has_securities ? null : cmicChanges[fundId].manager_confirms,\n }\n }),\n )\n // Multi Manager Platform\n const MMPChange = allValues._multiManagerPlatformChange\n if (changedValues._multiManagerPlatformChange) {\n const multiManagerPlatformChangeKeys = Object.keys(MMPChange)\n setMultiManagerPlatformChange(\n multiManagerPlatformChangeKeys.map((fundId) => {\n return {\n fund_id: fundId,\n multi_manager_platform: MMPChange[fundId].multi_manager_platform,\n } as MultiManagerPlatformType\n }),\n )\n }\n }}\n >\n \n }\n size=\"default\"\n style={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column' }}\n >\n \n
\n \n {TAB_LIST.map((item) => {\n if (!dataFirmDetail.firm_id && item.id === LeftNavFirmEnum.FUNDS_OF_FIRM) {\n return null\n }\n const existTab = optionFilter.findIndex((i) => i.leftNav === item.id)\n if (existTab === -1 && textFilterSearch !== '') {\n return null\n }\n return (\n {\n setActiveTab(item.id)\n }}\n active={activeTab === item.id}\n >\n
\n \n
\n {item.id}\n \n )\n })}\n
\n \n \n \n \n {optionFilter.length === 0 ? (\n
\n \n
\n ) : (\n renderTabContent(activeTab)\n )}\n
\n
\n \n \n \n \n )}\n {loading && }\n \n )\n}\ntype PropsCardTitle = {\n id: string\n name: string\n firmName?: string\n loadingSubmitForm: boolean\n isUpdateFirm: boolean\n optionFillter: ListSearchFirmType[]\n textFilterSearch: string\n setOptionFilter: (value: ListSearchFirmType[]) => void\n settextFilterSearch: (value: string) => void\n setActiveTab: (index: LeftNavFirmEnum) => void\n activeTab: LeftNavFirmEnum\n onCancel?: () => void\n}\nconst CardTitle: React.FC = ({\n id,\n name,\n loadingSubmitForm,\n isUpdateFirm,\n setOptionFilter,\n settextFilterSearch,\n textFilterSearch,\n setActiveTab,\n activeTab,\n onCancel,\n}) => {\n const [optionShow, setOptionShow] = React.useState(renderSearchListFirm)\n const dispatch = useDispatch()\n\n const { user } = useSelector((state: RootState) => state.user)\n\n const handleSearch = (value: any) => {\n settextFilterSearch(value)\n const newOption = renderSearchListFirm.filter((item) => item.name.toUpperCase().indexOf(value.toUpperCase()) !== -1)\n setOptionFilter(newOption)\n setOptionShow(newOption)\n if (newOption.findIndex((item) => item.leftNav === activeTab) === -1 && newOption.length > 0) {\n setActiveTab(newOption[0].leftNav)\n }\n }\n\n const handleCancel = () => {\n onCancel && onCancel()\n if (!id) {\n dispatch(removeTabs('new-firm'))\n }\n }\n return (\n \n
\n Firm ID: {id}\n
\n \n \n \n {isUpdateFirm ? (Edited) : ''}\n {name}\n \n \n\n \n {\n if (options.label) {\n const text = options.label.toLocaleString()\n settextFilterSearch(text)\n const newOption = renderSearchListFirm.filter(\n (item) => item.name.toUpperCase().indexOf(text.toUpperCase()) !== -1,\n )\n setOptionShow(newOption)\n const saveOption = newOption.filter((item) => item.key === value)\n setOptionFilter(saveOption)\n if (saveOption.findIndex((item) => item.leftNav === activeTab) === -1 && newOption.length > 0) {\n setActiveTab(saveOption[0].leftNav)\n }\n }\n }}\n onSearch={handleSearch}\n options={optionShow.map((item) => ({ value: item.key, label: item.name }))}\n allowClear\n value={textFilterSearch}\n style={{ width: 200, height: 32, marginRight: 8 }}\n >\n } />\n \n\n {isUpdateFirm ? (\n \n \n \n ) : (\n \n )}\n\n \n Save\n \n \n \n
\n )\n}\n","import React from 'react'\nimport { default as Plotly, PlotData } from 'plotly.js'\nimport { DistributionRecordList } from '../../../shared/api/models/ResponsesTypes'\nimport PanelDetailGraph from '../../../routes/Analysis/PanelDetailGraph'\n\ninterface OwnProps {\n distribution: DistributionRecordList | undefined\n}\n\n/**\n * This will renders Distribution graph component based on data from profileStats api\n * @param distribution\n * @constructor\n */\nconst DistributionGraph: React.FC = ({ distribution }) => {\n const getDistributionGraphData = () => {\n const graphData: Partial[] = []\n let sortedXAxis: string[] = []\n if (distribution) {\n const x: string[] = []\n const distGroup: { b1: number[]; b2: number[]; b3: number[]; fund: number[] } = {\n b1: [],\n b2: [],\n b3: [],\n fund: [],\n }\n for (const key in distribution) {\n x.push(key)\n distGroup.b1.push(distribution[key].b1)\n distGroup.b2.push(distribution[key].b2)\n distGroup.b3.push(distribution[key].b3)\n distGroup.fund.push(distribution[key].fund)\n }\n graphData.push({\n x,\n y: distGroup.b1,\n name: 'B1',\n type: 'bar',\n })\n graphData.push({\n x,\n y: distGroup.b2,\n name: 'B2',\n type: 'bar',\n })\n graphData.push({\n x,\n y: distGroup.b3,\n name: 'B3',\n type: 'bar',\n })\n graphData.push({\n x,\n y: distGroup.fund,\n name: 'Fund',\n type: 'bar',\n })\n\n sortedXAxis = x.sort((o1: string, o2: string) => {\n const a_val = o1.split('to')[0].replace('..', '')\n const b_val = o2.split('to')[0].replace('..', '')\n if (parseInt(a_val) >= parseInt(b_val)) {\n return 1\n }\n return -1\n })\n }\n\n const graphLayout: Partial = {\n autosize: true,\n xaxis: {\n showgrid: false,\n showline: false,\n categoryorder: 'array',\n categoryarray: sortedXAxis,\n },\n yaxis: {},\n margin: {\n l: 50,\n r: 50,\n b: 100,\n t: 100,\n pad: 4,\n },\n title: 'Distribution %',\n }\n return {\n header: 'Distribution %',\n graphData: graphData,\n graphLayout: graphLayout,\n }\n }\n\n return \n}\n\nexport default React.memo(DistributionGraph)\n","import React from 'react'\nimport { default as Plotly, PlotData } from 'plotly.js'\nimport { DateValueRecord, DateValueRecordList } from '../../../shared/api/models/ResponsesTypes'\nimport PanelDetailGraph from '../../../routes/Analysis/PanelDetailGraph'\n\ninterface OwnProps {\n drawdown: DateValueRecordList | undefined\n}\n\n/**\n * This will renders DrawDown graph component based on data from profileStats api\n * @param drawdown\n * @constructor\n */\nconst DrawdownGraph: React.FC = ({ drawdown }) => {\n const getHoverText = (item: DateValueRecord) => {\n return `Value: : ${item.value}
Date: ${item.date}
`\n }\n const datesArray: string[] = []\n const getDrawdownGraphData = () => {\n const graphData: Partial[] = []\n if (drawdown) {\n for (const key in drawdown) {\n const x: string[] = []\n const y: number[] = []\n const hovertemplate: string[] = []\n drawdown[key as keyof DateValueRecordList].forEach((item: DateValueRecord) => {\n x.push(item.date)\n y.push(item.value)\n datesArray.push(item.date)\n hovertemplate.push(getHoverText(item))\n })\n graphData.push({\n x,\n y,\n hovertemplate,\n name: key[0].toUpperCase() + key.slice(1),\n })\n }\n }\n\n const graphLayout: Partial = {\n autosize: true,\n xaxis: {\n showgrid: false,\n showline: false,\n tickformat: '%Y-%m',\n categoryorder: 'array',\n categoryarray: datesArray,\n },\n yaxis: {},\n margin: {\n l: 50,\n r: 50,\n b: 100,\n t: 100,\n pad: 4,\n },\n title: 'Peak To Trough Drawdown',\n }\n return {\n header: 'Peak To Trough Drawdown',\n graphData: graphData,\n graphLayout: graphLayout,\n }\n }\n\n return \n}\n\nexport default React.memo(DrawdownGraph)\n","import { Col, Divider, Row } from 'antd'\nimport React from 'react'\nimport { FirmFundDescriptionRecord } from '../../../shared/api/models/FundDetails'\n\ninterface Props {\n description: Array\n}\n\nconst renderHeaderCell = (data: FirmFundDescriptionRecord, index: number) => {\n return data.show ? (\n \n
\n {data.key} \n \n \n \n \n \n {Array.isArray(data.value) ? (\n data.value.map((item, idx) => (\n \n {item}\n \n ))\n ) : (\n {data.value} \n )}\n \n \n ) : null\n}\n/**\n * Shows Fund or Firm description data as top columns in profile page\n * @param description\n */\n\nconst FirmFundDescription: React.FC = ({ description }) => {\n return (\n \n {description.map((col: FirmFundDescriptionRecord[], idx: number) => {\n return (\n \n {col.map((data: FirmFundDescriptionRecord, index: number) => renderHeaderCell(data, index))}\n \n )\n })}\n \n )\n}\n\nexport default FirmFundDescription\n","import React from 'react'\n\n/**\n * This component renders table cells based on its value ('-' for undefined and red for negative value)\n * @param val\n * @constructor\n */\nconst RenderTableCell = (val: number) => {\n if (val === null || val === undefined) {\n return - \n }\n return val < 0 ? (\n {val.toLocaleString(undefined, { minimumFractionDigits: 2 })}\n ) : (\n {val.toLocaleString(undefined, { minimumFractionDigits: 2 })} \n )\n}\n\nexport default RenderTableCell\n","import { ColumnProps } from 'antd/lib/table'\nimport {\n FirmDetails,\n FirmFundDescriptionRecord,\n FundDetailFirmContact,\n FundDetailsPreviewType,\n} from '../../api/models/FundDetails'\nimport { AUMRecord, KeyValueRecord, RORRecord } from '../../api/models/ResponsesTypes'\nimport GenUtil from '../../utils/gen-util'\nimport RenderTableCell from './RenderTableCell'\n\ninterface FundStatsTableData {\n key: string\n category: string\n b1: number | undefined\n b2: number | undefined\n b3: number | undefined\n fund: number | undefined\n fund_si: number | undefined\n}\n\ninterface RORAndAUMTableData {\n [key: string]: number | string | undefined\n}\n\nexport default class FundDetailsUtils {\n /**\n *\n * @param b1\n * @param b2\n * @param b3\n * @param fund\n */\n static getFundStatsTableData = (\n b1: { [key: string]: number },\n b2: { [key: string]: number },\n b3: { [key: string]: number },\n fund: { [key: string]: number },\n fund_si: { [key: string]: number },\n ): {\n header: string\n tableData: FundStatsTableData[]\n columns: ColumnProps[]\n } => {\n const fundStatsTableData: FundStatsTableData[] = []\n const fundStatsTableOrderedKeys: Array<{ key: string; value: string }> = [\n { key: 'geo_avg_mo_ror', value: 'Geo Avg Mo ROR' },\n { key: 'std_dev', value: 'Std Dev' },\n { key: 'high_mo_ror', value: 'High Mo ROR' },\n { key: 'low_mo_ror', value: 'Low Mo ROR' },\n { key: 'ann_ror', value: 'Ann ROR' },\n { key: 'ann_stdev', value: 'Ann Stdev' },\n { key: 'risk_free_rate', value: 'Risk Free Rate' },\n { key: 'sharpe_ratio', value: 'Sharpe Ratio' },\n { key: 'winning_mo', value: 'Winning Mo (%)' },\n { key: 'max_drawdown', value: 'Max Drawdown' },\n { key: '1_month_ror', value: '1 Month ROR' },\n { key: '3_month_ror', value: '3 Month ROR' },\n { key: '6_month_ror', value: '6 Month ROR' },\n { key: '1_year_ann_ror', value: '1 Year Ann ROR' },\n { key: '2_year_ann_ror', value: '2 Year Ann ROR' },\n { key: '3_year_ann_ror', value: '3 Year Ann ROR' },\n { key: '5_year_ann_ror', value: '5 Year Ann ROR' },\n { key: '7_year_ann_ror', value: '7 Year Ann ROR' },\n { key: '10_year_ann_ror', value: '10 Year Ann ROR' },\n { key: 'since_inception_ann_ror', value: 'Since Inception Ann ROR' },\n { key: 'alpha', value: 'Alpha' },\n { key: 'beta', value: 'Beta' },\n { key: 'r_square', value: 'R-Squared' },\n { key: 'correlation', value: 'Correlation' },\n { key: 'up_alpha', value: 'Up Alpha' },\n { key: 'up_beta', value: 'Up Beta' },\n { key: 'up_r_square', value: 'Up R-Squared' },\n { key: 'down_alpha', value: 'Down Alpha' },\n { key: 'down_beta', value: 'Down Beta' },\n { key: 'down_r_square', value: 'Down R-Squared' },\n ]\n if (b1 && b2 && b3 && fund) {\n fundStatsTableOrderedKeys.forEach((tableCellObj: { key: string; value: string }) => {\n const { key, value } = tableCellObj\n fundStatsTableData.push({\n key: key,\n category: value,\n b1: b1[key],\n b2: b2[key],\n b3: b3[key],\n fund: fund[key],\n fund_si: fund_si ? fund_si[key] : undefined,\n })\n })\n }\n\n const fundStatsTableColumns: ColumnProps[] = [\n { title: 'Category', dataIndex: 'category', key: 'category' },\n {\n title: 'Fund *',\n dataIndex: 'fund',\n key: 'fund',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'B1 *',\n dataIndex: 'b1',\n key: 'b1',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'B2 *',\n dataIndex: 'b2',\n key: 'b2',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'B3 *',\n dataIndex: 'b3',\n key: 'b3',\n align: 'right',\n render: RenderTableCell,\n },\n ]\n\n return {\n header: 'Fund Stats',\n tableData: fundStatsTableData,\n columns: fund_si\n ? [\n ...fundStatsTableColumns.slice(0, 1),\n {\n title: 'Fund SI **',\n dataIndex: 'fund_si',\n key: 'fund_si',\n align: 'right',\n render: RenderTableCell,\n },\n ...fundStatsTableColumns.slice(1, fundStatsTableColumns.length),\n ]\n : fundStatsTableColumns,\n }\n }\n\n // takes two argument , one for months and other(optional) for 'total' column\n static getFormattedTableDataForRORAndAUM = (\n fetchedData: AUMRecord[] | RORRecord[],\n fetchedAnnualData: KeyValueRecord = {} as KeyValueRecord,\n ): Array => {\n const tableData: { [key: string]: KeyValueRecord } = {}\n fetchedData.forEach((ele: RORRecord | AUMRecord) => {\n if (tableData[ele.year]) {\n tableData[ele.year][ele.month] = GenUtil.digitWithMaxPrecision(ele.cur_value)\n } else {\n tableData[ele.year] = { [ele.month]: GenUtil.digitWithMaxPrecision(ele.cur_value) }\n }\n })\n\n const years = Object.keys(tableData).sort()\n return years.map((year) => {\n return {\n key: year,\n year,\n total: fetchedAnnualData[year],\n ...tableData[year],\n }\n })\n }\n\n /**\n * Returns a range of YYYY-MM between fromDate and toDate\n * @param fromDate\n * @param toDate\n */\n static getDatesRangeList = (fromDate: string, toDate: string): string[] => {\n const datesRangesArr: string[] = []\n const [fy, fm] = fromDate.split('-')\n const [ty, tm] = toDate.split('-')\n const [fromMonth, fromYear, toMonth, toYear] = [Number(fm), Number(fy), Number(tm), Number(ty)]\n for (let i = fromMonth; i <= 12; i++) {\n datesRangesArr.push(`${fromYear}-${i <= 9 ? '0' + i : i}`)\n }\n for (let y = fromYear + 1; y < toYear; y++) {\n for (let m = 1; m <= 12; m++) {\n datesRangesArr.push(`${y}-${m <= 9 ? '0' + m : m}`)\n }\n }\n for (let i = 1; i <= toMonth; i++) {\n datesRangesArr.push(`${toYear}-${i <= 9 ? '0' + i : i}`)\n }\n return datesRangesArr\n }\n static fillBooleanField = (value: boolean | undefined) => {\n if (value === undefined) {\n return '-'\n } else if (value) {\n return 'Yes'\n } else {\n return 'No'\n }\n }\n /**\n * Returns the data for Header-Columns in firm-profile page\n * @param firmData\n */\n static getFirmDescription = (firmData: FirmDetails & FundDetailFirmContact): Array => {\n return [\n [\n {\n key: 'Firm ID',\n value: firmData?.firm_id || '-',\n show: true,\n },\n {\n key: 'Principals',\n value: firmData?.principals || '-',\n show: true,\n },\n {\n key: 'Firm Assets',\n value:\n firmData?.firm_assets_date && firmData?.firm_assets_currency && firmData?.firm_assets\n ? `${firmData.firm_assets_currency} ${GenUtil.getformattedNumber(\n firmData.firm_assets,\n )} M (as of ${GenUtil.getFormattedYearAndMonth(firmData.firm_assets_date)})`\n : '-',\n show: true,\n },\n {\n key: 'IARD CRD Number',\n value: firmData?.iard_crd_number || '-',\n show: true,\n },\n {\n key: 'Sec Number',\n value: firmData?.sec_number || '-',\n show: true,\n },\n {\n key: 'Sec Registered',\n value: FundDetailsUtils.fillBooleanField(firmData?.sec_registered || undefined),\n show: true,\n },\n {\n key: 'Is Diversity Firm',\n value: FundDetailsUtils.fillBooleanField(firmData?.is_diversity_firm || undefined),\n show: true,\n },\n ],\n [\n {\n key: 'Address',\n value: [\n firmData?.address || '',\n firmData?.city || '',\n firmData?.state || '' + firmData?.postal_code || '',\n firmData?.country || '',\n ],\n show: true,\n },\n {\n key: 'Contact',\n value: firmData?.first_contact || '-',\n show: (firmData?.second_contact || '').trim() === '',\n },\n {\n key: 'First Contact',\n value: firmData?.first_contact || '-',\n show: (firmData?.second_contact || '').trim() !== '',\n },\n {\n key: 'Second Contact',\n value: firmData?.second_contact || '',\n show: (firmData?.second_contact || '').trim() !== '',\n },\n {\n key: 'Phone',\n value: firmData?.phone || '-',\n show: true,\n },\n {\n key: 'Email',\n value: firmData?.email || '-',\n show: true,\n },\n // {\n // key: 'Fax',\n // value: firmData?.facsimile || '-',\n // show: true,\n // },\n ],\n ]\n }\n /**\n * Returns the data for Header-Columns in fund-profile page\n * @param fundData\n */\n static getFundDescription = (fundData: FundDetailsPreviewType): Array => {\n return [\n [\n {\n key: 'Manager',\n value: fundData?.firm.firm_name || '-',\n show: true,\n },\n {\n key: 'Strategy',\n value: fundData?.strategy.strategy_name || '-',\n show: true,\n },\n {\n key: 'Sub-Strategy',\n value: fundData?.sub_strategy.sub_strategy_name || '-',\n show: true,\n },\n {\n key: 'Regional Focus',\n value: fundData?.regional_focus || '-',\n show: true,\n },\n {\n key: 'Inception',\n value: fundData?.fund_info.inception_date\n ? GenUtil.getFormattedYearMonthAndDay(fundData.fund_info.inception_date)\n : '-',\n show: true,\n },\n {\n key: 'Mgmt Fees %',\n value: fundData?.fund_fees.mgmt_fee || '-',\n show: true,\n },\n {\n key: 'Max 12B1 Fee %',\n value: fundData?.fund_fees.max_12b1_fee || '-',\n show: fundData?.fund_info.liquid_alt_product || false,\n },\n {\n key: 'Max Front Fee %',\n value: fundData?.fund_fees.max_front_fee || '-',\n show: fundData?.fund_info.liquid_alt_product || false,\n },\n {\n key: 'Max Deferred Fee %',\n value: fundData?.fund_fees.max_deferred_fee || '-',\n show: fundData?.fund_info.liquid_alt_product || false,\n },\n {\n key: 'Incentive Fees %',\n value: fundData?.fund_fees.incentive_fee || '-',\n show: !fundData?.fund_info.liquid_alt_product || false,\n },\n {\n key: 'UCITS Compliant',\n value: FundDetailsUtils.fillBooleanField(fundData?.ucits_compliant),\n show: true,\n },\n {\n key: 'Liquid Alt Product',\n value: FundDetailsUtils.fillBooleanField(fundData?.fund_info.liquid_alt_product),\n show: true,\n },\n ],\n [\n {\n key: 'Address',\n value: [\n fundData?.firm_contact.address || '',\n fundData?.firm_contact.city || '',\n fundData?.firm_contact.state || '' + ' ' + fundData?.firm_contact.postal_code || '',\n fundData?.firm_contact.country || '',\n ],\n show: true,\n },\n {\n key: 'Contact',\n value: fundData?.firm_contact.first_contact || '-',\n show: fundData?.firm_contact.second_contact?.trim() === '',\n },\n {\n key: 'First Contact',\n value: fundData?.firm_contact.first_contact || '-',\n show: fundData?.firm_contact.second_contact?.trim() !== '',\n },\n {\n key: 'Second Contact',\n value: fundData?.firm_contact.second_contact || '',\n show: fundData?.firm_contact.second_contact?.trim() !== '',\n },\n {\n key: 'Phone',\n value: fundData?.firm_contact.phone || '-',\n show: true,\n },\n {\n key: 'Email',\n value: fundData?.firm_contact?.email || '-',\n show: true,\n },\n // {\n // key: 'Fax',\n // value: fundData?.firm_contact.facsimile || '-',\n // show: true,\n // },\n {\n key: 'High Watermark',\n value: FundDetailsUtils.fillBooleanField(fundData?.fund_fees.high_watermark),\n show: true,\n },\n {\n key: 'Hurdle Rate',\n value: fundData?.fund_fees.hurdle_rate || 'No',\n show: true,\n },\n {\n key: 'Leverage',\n value: fundData?.leverage || '-',\n show: true,\n },\n ],\n [\n {\n key: 'Product Class',\n value: fundData?.fund_info.product_class ? `Class ${fundData.fund_info.product_class}` : '-',\n show: true,\n },\n {\n key: 'Registration',\n value: fundData?.liquid_alt_region || '-',\n show: fundData?.fund_info.liquid_alt_product || false,\n },\n {\n key: 'Liquid Alt Type',\n value: fundData?.liquid_alt_type || '-',\n show: fundData?.fund_info.liquid_alt_product || false,\n },\n {\n key: 'Domicile',\n value: fundData?.domicile || '-',\n show: !fundData?.fund_info.liquid_alt_product || false,\n },\n {\n key: 'Structure',\n value: fundData?.structure || '-',\n show: !fundData?.fund_info.liquid_alt_product || false,\n },\n {\n key: 'Fund Assets',\n value:\n fundData.fund_assets_rep_date && fundData.fund_assets_currency && fundData.fund_assets\n ? `${fundData.fund_assets_currency} ${GenUtil.getformattedNumber(\n fundData.fund_assets,\n )} M (as of ${GenUtil.getFormattedYearAndMonth(fundData.fund_assets_rep_date)})`\n : '-',\n show: true,\n },\n {\n key: 'Firm Assets',\n value:\n fundData?.firm.firm_assets_date && fundData?.firm.firm_assets_currency && fundData?.firm.firm_assets\n ? `${fundData.firm.firm_assets_currency} ${GenUtil.getformattedNumber(\n fundData.firm.firm_assets,\n )} M (as of ${GenUtil.getFormattedYearAndMonth(fundData.firm.firm_assets_date)})`\n : '-',\n show: true,\n },\n {\n key: 'Min. Investment',\n value: fundData?.fund_info.minimum_investment\n ? `${fundData.min_investment_curr} ${GenUtil.getformattedNumber(fundData.fund_info.minimum_investment)}`\n : '-',\n show: true,\n },\n {\n key: 'Subscriptions',\n value: fundData?.subscriptions || '-',\n show: true,\n },\n {\n key: 'Redemptions',\n value: fundData?.redemptions || '-',\n show: true,\n },\n {\n key: 'Notice',\n value: fundData?.fund_info.advance_notice ? `${fundData.fund_info.advance_notice} Days` : '-',\n show: true,\n },\n {\n key: 'Lockup',\n value: fundData?.fund_info.lockup ? `${fundData.fund_info.lockup} Months` : 'No',\n show: true,\n },\n ],\n ]\n }\n}\n","import React from 'react'\nimport { Collapse } from 'antd'\n\nconst { Panel } = Collapse\n\nconst FundStrategyDescription = ({ fundStrategyDescription = '' }) => {\n return (\n \n \n

{fundStrategyDescription}

\n
\n
\n )\n}\n\nexport default FundStrategyDescription\n","import React from 'react'\nimport Plotly from 'react-plotly.js'\nimport styled from 'styled-components'\nimport { PeerGroupTableDataType } from './PeerGroupForm'\n\nconst LegendContainer = styled('div')`\n display: flex;\n justify-content: center;\n`\n\nconst Legend = styled('div')<{ color: string }>`\n position: relative;\n &:not(:last-child) {\n margin-right: 48px;\n }\n &:before {\n content: '';\n width: 16px;\n height: 16px;\n position: absolute;\n top: 50%;\n left: -24px;\n transform: translateY(-50%);\n background: ${(props) => props.color};\n }\n`\n\ntype Props = {\n data: PeerGroupTableDataType[]\n endDate?: string\n}\n\n/**\n * Performance vs Universe Chart in Peer Group Tab\n */\nexport const PerformanceVersusUniverseChart: React.FC = ({ data, endDate = '' }) => {\n const BAR_X = [\n endDate,\n 'Prev. Month',\n '3 Months',\n '6 Months',\n 'YTD',\n '1 Year',\n '2 Years (Ann)',\n '3 Years (Ann)',\n '5 Years (Ann)',\n ]\n\n const getScatterData = (name: string): number[] => {\n const dataByName = data.find((item) => item.name === name) as {\n [key: string]: any\n }\n const KEYS = [\n 'current',\n 'prevMonth',\n 'threeMonths',\n 'sixMonths',\n 'ytd',\n 'oneYear',\n 'twoYears',\n 'threeYears',\n 'fiveYears',\n ]\n if (!dataByName) {\n return Array(KEYS.length).fill(0)\n }\n return KEYS.map(\n (key) => (dataByName[key] && typeof dataByName[key] === 'number' && dataByName[key]) || null,\n )\n }\n\n return (\n
\n \n \n Fund Return\n Percentile 95th\n Percentile 75th\n Median Return\n Percentile 25th\n Percentile 5th\n \n
\n )\n}\n","import Icon from '@ant-design/icons'\nimport { Button, Col, Collapse, Form, Row, Select, Spin, Table } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport { AxiosPromise } from 'axios'\nimport JsFileDownload from 'js-file-download'\nimport moment from 'moment'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../api'\nimport {\n FundDetailRegionalFocus,\n FundDetailsPreviewType,\n FundDetailStrategy,\n FundDetailSubStrategy,\n} from '../../api/models/FundDetails'\nimport {\n PeerGroupFundBenchmarkResponse,\n PeerGroupUniverseStatsResponse,\n UserFundRecord,\n} from '../../api/models/ResponsesTypes'\nimport { TrackingEventSource } from '../../api/services/event.service'\nimport { FetchPeerGroupPdfParams } from '../../api/services/peer-group.service'\nimport { FetchUserFundPeerGroupPdfParams } from '../../api/services/user-fund.service'\nimport { useServiceState } from '../../hooks/useServiceState'\nimport GenUtil from '../../utils/gen-util'\nimport { PerformanceVersusUniverseChart } from './PerformanceVersusUniverseChart'\nimport { resolveFundAndBenchmarkData, resolveUniverseStatData } from './utils'\n\nconst StyledTable = styled(Table)`\n .ant-table-thead > tr > th {\n padding: 16px 0;\n }\n`\n\nexport enum UniverseSelectTypeEnum {\n HFR = 'HFR',\n LIST = 'LIST',\n PORTFOLIO = 'MODEL',\n}\n\nexport interface PeerGroupTableDataType {\n name: string\n current: number | undefined\n prevMonth: number | undefined\n threeMonths: number | undefined\n sixMonths: number | undefined\n ytd: number | undefined\n oneYear: number | undefined\n twoYears: number | undefined\n threeYears: number | undefined\n fiveYears: number | undefined\n}\n\nconst { Option } = Select\n\ntype Props = {\n source: TrackingEventSource\n fundId: string\n fundData?: FundDetailsPreviewType\n userFundData?: UserFundRecord\n endDateOptions: string[]\n fundAndBenchmarkService: ({\n fundId,\n benchmark1,\n benchmark2,\n benchmark3,\n endDate,\n }: {\n fundId: string\n benchmark1: string\n benchmark2: string\n benchmark3: string\n endDate: string | moment.Moment\n }) => AxiosPromise\n universeStatsService: ({\n fundId,\n universeListId,\n fundListId,\n portfolioModelId,\n endDate,\n staticIndexIds,\n dynamicIndexIds,\n strategy,\n subStrategy,\n regionalFocus,\n inHFRI,\n inEmergingMarkets,\n }: {\n fundId: string\n universeListId?: string[]\n fundListId?: string[]\n portfolioModelId?: string[]\n endDate: string\n staticIndexIds: string[]\n dynamicIndexIds: string[]\n strategy: string[]\n subStrategy: string[]\n regionalFocus: string[]\n inHFRI: boolean\n inEmergingMarkets: boolean\n }) => AxiosPromise\n}\n\nconst renderTable = (dataSource: PeerGroupTableDataType[], endDate?: string) => (\n \n \n \n row1.current && row2.current ? row1.current - row2.current : 0\n }\n render={(text) => (text && GenUtil.digitWithMaxPrecision(text)) || null}\n align=\"right\"\n />\n \n row1.prevMonth && row2.prevMonth ? row1.prevMonth - row2.prevMonth : 0\n }\n render={(text) => (text && GenUtil.digitWithMaxPrecision(text)) || null}\n align=\"right\"\n />\n \n row1.threeMonths && row2.threeMonths ? row1.threeMonths - row2.threeMonths : 0\n }\n render={(text) => (text && GenUtil.digitWithMaxPrecision(text)) || null}\n align=\"right\"\n />\n \n row1.sixMonths && row2.sixMonths ? row1.sixMonths - row2.sixMonths : 0\n }\n render={(text) => (text && GenUtil.digitWithMaxPrecision(text)) || null}\n align=\"right\"\n />\n \n row1.ytd && row2.ytd ? row1.ytd - row2.ytd : 0\n }\n render={(text) => (text && GenUtil.digitWithMaxPrecision(text)) || null}\n align=\"right\"\n />\n \n row1.oneYear && row2.oneYear ? row1.oneYear - row2.oneYear : 0\n }\n render={(text) => (text && GenUtil.digitWithMaxPrecision(text)) || null}\n align=\"right\"\n />\n \n row1.twoYears && row2.twoYears ? row1.twoYears - row2.twoYears : 0\n }\n render={(text) => (text && GenUtil.digitWithMaxPrecision(text)) || null}\n align=\"right\"\n />\n \n row1.threeYears && row2.threeYears ? row1.threeYears - row2.threeYears : 0\n }\n render={(text) => (text && GenUtil.digitWithMaxPrecision(text)) || null}\n align=\"right\"\n />\n \n row1.fiveYears && row2.fiveYears ? row1.fiveYears - row2.fiveYears : 0\n }\n render={(text) => (text && GenUtil.digitWithMaxPrecision(text)) || null}\n align=\"right\"\n />\n \n)\n\n/**\n * Peer Group Tab in Fund Details\n * @param {string} fundId - ID of the current fund\n * @param {BenchmarkRecord[]} benchmarksOptions - The benchmarks data for the benchmark selections\n * @param {FundListRecord[]} universeListData - Universe & user defined list data for dropdown (redux store)\n */\nconst PeerGroupForm: React.FC = ({\n source,\n fundId,\n fundData,\n userFundData,\n endDateOptions,\n fundAndBenchmarkService,\n universeStatsService,\n}) => {\n const [form] = Form.useForm()\n\n const { strategies: strategyOptions, subStrategies: subStrategyOptions, benchmarks: benchmarkOptions } = useSelector(\n (state: RootState) => state.appData,\n )\n\n const { invoke: fetchRegionalFocus, data: regionalFocusOptions } = useServiceState(\n APIService.appDataService.fetchRegionalFocus,\n )\n\n const { invoke: fetchDynamicIndexes, data: hfrDynamicIndexes } = useServiceState(\n APIService.appDataService.fetchDynamicIndexes,\n )\n\n const { invoke: fetchStaticIndexes, data: hfrStaticIndexes } = useServiceState(\n APIService.appDataService.fetchStaticIndexes,\n )\n\n const { invoke: fetchPortfolioModels, data: portfolioModels } = useServiceState(\n APIService.portfolioModelService.fetchPortfolioModels,\n )\n\n const { invoke: fetchFundList, data: fundList } = useServiceState(APIService.fundUniverseListService.fetchFundList)\n\n const { invoke: fetchUniverseList, data: universeList } = useServiceState(\n APIService.fundUniverseListService.fetchUniverseList,\n )\n\n React.useEffect(() => {\n fetchRegionalFocus()\n fetchDynamicIndexes()\n fetchStaticIndexes()\n fetchPortfolioModels()\n fetchFundList()\n fetchUniverseList()\n }, [\n fetchDynamicIndexes,\n fetchFundList,\n fetchPortfolioModels,\n fetchRegionalFocus,\n fetchStaticIndexes,\n fetchUniverseList,\n ])\n\n const universeListData = React.useMemo(() => {\n const universes = universeList && [\n ...universeList.map((universeItem) => ({\n ...universeItem,\n id: `${UniverseSelectTypeEnum.HFR}-${universeItem.id}`,\n name: `(${UniverseSelectTypeEnum.HFR}) ${universeItem.name}`,\n })),\n ]\n const funds = fundList && [\n ...fundList.map((fundItem) => ({\n ...fundItem,\n id: `${UniverseSelectTypeEnum.LIST}-${fundItem.id}`,\n name: `(${UniverseSelectTypeEnum.LIST}) ${fundItem.name}`,\n })),\n ]\n const portfolios = portfolioModels && [\n ...portfolioModels.map((portfolioItem) => ({\n ...portfolioItem,\n id: `${UniverseSelectTypeEnum.PORTFOLIO}-${portfolioItem.id}`,\n name: `(${UniverseSelectTypeEnum.PORTFOLIO}) ${portfolioItem.name}`,\n })),\n ]\n const fundAndUniverseList = [...(universes || []), ...(funds || []), ...(portfolios || [])]\n return fundAndUniverseList\n }, [fundList, portfolioModels, universeList])\n\n const hfrIndexes = React.useMemo(() => {\n const staticIndexes =\n (hfrStaticIndexes &&\n hfrStaticIndexes.map((staticItem) => ({\n ...staticItem,\n id: `static-${staticItem.id}`,\n name: String(staticItem.name),\n }))) ||\n []\n const dynamicIndexes =\n (hfrDynamicIndexes &&\n hfrDynamicIndexes.map((dynamicItem) => ({\n ...dynamicItem,\n id: `dynamic-${dynamicItem.id}`,\n name: String(dynamicItem.name),\n }))) ||\n []\n return [...staticIndexes, ...dynamicIndexes]\n }, [hfrDynamicIndexes, hfrStaticIndexes])\n\n const { user } = useSelector((state: RootState) => state.user)\n\n const [selectedEndDate, setSelectedEndDate] = React.useState()\n\n const { data: fundAndBenchmarkData, invoke: invokeFundAndBenchmark, loading: fundBenchmarkLoading } = useServiceState(\n fundAndBenchmarkService,\n )\n const { data: universeStatData, invoke: invokeUniverseStatData, loading: universeStatLoading } = useServiceState(\n universeStatsService,\n )\n\n const [selectedBenchmarks, setSelectedBenchmarks] = React.useState()\n const [filteredSubStrategy, setFilteredSubStrategy] = React.useState([])\n\n React.useEffect(() => {\n const strategyFromForm = form.getFieldValue('strategies')\n if (!subStrategyOptions) {\n return\n }\n if (strategyFromForm && strategyFromForm.length > 0) {\n setFilteredSubStrategy(\n subStrategyOptions.filter(\n (subStrategy: FundDetailSubStrategy) =>\n subStrategy.strategy_code && strategyFromForm.includes(subStrategy.strategy_code),\n ),\n )\n } else {\n setFilteredSubStrategy(subStrategyOptions)\n }\n }, [form, subStrategyOptions, setFilteredSubStrategy])\n\n const renderBenchmarkOptions = () => {\n return benchmarkOptions\n ? benchmarkOptions.map((option) => {\n return (\n \n )\n })\n : []\n }\n\n // TODO: Implement validate one of\n // const validateOneOf = (_rule: any, _value: any, callback: any) => {\n // console.log({ values: form.getFieldValue('strategies'), _value })\n // const strategyValues = form.getFieldValue('strategies')\n // const subStrategyValues = form.getFieldValue('subStrategy')\n // const regionalFocusValues = form.getFieldValue('regionalFocus')\n // const inHFRIValue = form.getFieldValue('inHFRI')\n // const inEmergingMarketValue = form.getFieldValue('inEmergingMarkets')\n\n // if (\n // (!strategyValues || strategyValues.length <= 0) &&\n // (!subStrategyValues || subStrategyValues.length <= 0) &&\n // (!regionalFocusValues || regionalFocusValues.length <= 0) &&\n // inHFRIValue === undefined &&\n // inEmergingMarketValue === undefined\n // ) {\n // callback('Requiring at least one of Strategy, Sub-Strategy, Regional Focus, In HFRI, In Emerging Market')\n // } else {\n // callback()\n // }\n // }\n\n const handleValuesChange = (changedValues: Store, _: Store) => {\n if (changedValues.strategies && subStrategyOptions) {\n setFilteredSubStrategy(\n subStrategyOptions.filter(\n (subStrategy: FundDetailSubStrategy) =>\n subStrategy.strategy_code && changedValues.strategies.includes(subStrategy.strategy_code),\n ),\n )\n }\n }\n\n const handleSubmit = (values: Store) => {\n const extractedEmptyArrayProps = Object.entries(values).reduce((result, [key, value]) => {\n if (value && Array.isArray(value) && value.length <= 0) {\n return result\n }\n return {\n ...result,\n [key]: value,\n }\n }, {} as any)\n setSelectedEndDate(extractedEmptyArrayProps.endDate)\n invokeFundAndBenchmark({\n fundId,\n benchmark1: extractedEmptyArrayProps.benchmark1,\n benchmark2: extractedEmptyArrayProps.benchmark2,\n benchmark3: extractedEmptyArrayProps.benchmark3,\n endDate: extractedEmptyArrayProps.endDate,\n })\n setSelectedBenchmarks([\n extractedEmptyArrayProps.benchmark1,\n extractedEmptyArrayProps.benchmark2,\n extractedEmptyArrayProps.benchmark3,\n ])\n\n const universeList = extractedEmptyArrayProps.universeList\n .filter((item: string) => item.includes(UniverseSelectTypeEnum.HFR))\n .map((item: string) => Number.parseInt(item.split('-')[1]))\n const fundList = extractedEmptyArrayProps.universeList\n .filter((item: string) => item.includes(UniverseSelectTypeEnum.LIST))\n .map((item: string) => Number.parseInt(item.split('-')[1]))\n const modelList = extractedEmptyArrayProps.universeList\n .filter((item: string) => item.includes(UniverseSelectTypeEnum.PORTFOLIO))\n .map((item: string) => Number.parseInt(item.split('-')[1]))\n const staticIndexIds = form.getFieldValue('hfrIndexes')\n ? form\n .getFieldValue('hfrIndexes')\n .filter((item: string) => item.includes('static'))\n .map((item: string) => Number.parseInt(item.split('-')[1]))\n : []\n const dynamicIndexIds = form.getFieldValue('hfrIndexes')\n ? form\n .getFieldValue('hfrIndexes')\n .filter((item: string) => item.includes('dynamic'))\n .map((item: string) => Number.parseInt(item.split('-')[1]))\n : []\n invokeUniverseStatData({\n fundId,\n universeListId: universeList.length > 0 ? universeList : undefined,\n fundListId: fundList.length > 0 ? fundList : undefined,\n portfolioModelId: modelList.length > 0 ? modelList : undefined,\n staticIndexIds: staticIndexIds && staticIndexIds.length > 0 ? staticIndexIds : undefined,\n dynamicIndexIds: dynamicIndexIds && dynamicIndexIds.length > 0 ? dynamicIndexIds : undefined,\n inHFRI: extractedEmptyArrayProps.inHFRI ? JSON.parse(extractedEmptyArrayProps.inHFRI) : undefined,\n inEmergingMarkets: extractedEmptyArrayProps.inEmergingMarkets\n ? JSON.parse(extractedEmptyArrayProps.inEmergingMarkets)\n : undefined,\n regionalFocus: extractedEmptyArrayProps.regionalFocus,\n strategy: extractedEmptyArrayProps.strategies,\n subStrategy: extractedEmptyArrayProps.subStrategy,\n endDate: extractedEmptyArrayProps.endDate,\n })\n\n // send event\n const jsonData = {\n fund_id: fundId,\n end_date: extractedEmptyArrayProps.endDate,\n benchmark1: extractedEmptyArrayProps.benchmark1,\n benchmark2: extractedEmptyArrayProps.benchmark2,\n benchmark3: extractedEmptyArrayProps.benchmark3,\n\n in_emerging_markets: extractedEmptyArrayProps.inEmergingMarkets\n ? JSON.parse(extractedEmptyArrayProps.inEmergingMarkets)\n : undefined,\n in_HFRI: extractedEmptyArrayProps.inHFRI ? JSON.parse(extractedEmptyArrayProps.inHFRI) : undefined,\n strategy: extractedEmptyArrayProps.strategies,\n sub_strategy: extractedEmptyArrayProps.subStrategy,\n regional_focus: extractedEmptyArrayProps.regionalFocus,\n static_index_ids: staticIndexIds && staticIndexIds.length > 0 ? staticIndexIds : undefined,\n dynamic_index_ids: dynamicIndexIds && dynamicIndexIds.length > 0 ? dynamicIndexIds : undefined,\n universe_list_id: universeList.length > 0 ? universeList : undefined,\n }\n APIService.eventService.sendViewPgaEvent(source, JSON.parse(JSON.stringify(jsonData)))\n }\n\n const generatePeerGroupPdfReport = async () => {\n if (!fundData && !userFundData) {\n return\n }\n const universeList = form\n .getFieldValue('universeList')\n .filter((item: string) => item.includes(UniverseSelectTypeEnum.HFR))\n .map((item: string) => Number.parseInt(item.split('-')[1]))\n const fundList = form\n .getFieldValue('universeList')\n .filter((item: string) => item.includes(UniverseSelectTypeEnum.LIST))\n .map((item: string) => Number.parseInt(item.split('-')[1]))\n const modelList = form\n .getFieldValue('universeList')\n .filter((item: string) => item.includes(UniverseSelectTypeEnum.PORTFOLIO))\n .map((item: string) => Number.parseInt(item.split('-')[1]))\n const staticIndexIds = form.getFieldValue('hfrIndexes')\n ? form\n .getFieldValue('hfrIndexes')\n .filter((item: string) => item.includes('static'))\n .map((item: string) => Number.parseInt(item.split('-')[1]))\n : []\n const dynamicIndexIds = form.getFieldValue('hfrIndexes')\n ? form\n .getFieldValue('hfrIndexes')\n .filter((item: string) => item.includes('dynamic'))\n .map((item: string) => Number.parseInt(item.split('-')[1]))\n : []\n const strategy = form.getFieldValue('strategies') || []\n const subStrategy = form.getFieldValue('subStrategy') || []\n const regionalFocus = form.getFieldValue('regionalFocus')\n ? form.getFieldValue('regionalFocus').map((item: string) => Number(item))\n : []\n const inHFRI = form.getFieldValue('inHFRI')\n const inEmergingMarkets = form.getFieldValue('inEmergingMarkets')\n\n if (fundData) {\n const data: FetchPeerGroupPdfParams = {\n end_date: form.getFieldValue('endDate'),\n benchmark1: form.getFieldValue('benchmark1'),\n benchmark2: form.getFieldValue('benchmark2'),\n benchmark3: form.getFieldValue('benchmark3'),\n universe_list_id: universeList.length ? universeList : undefined,\n fund_list_id: fundList.length ? fundList : undefined,\n portfolio_model_id: modelList.length ? modelList : undefined,\n static_index_ids: staticIndexIds.length ? staticIndexIds : undefined,\n dynamic_index_ids: dynamicIndexIds.length ? dynamicIndexIds : undefined,\n strategy: strategy.length ? strategy : undefined,\n sub_strategy: subStrategy.length ? subStrategy : undefined,\n regional_focus: regionalFocus.length ? regionalFocus : undefined,\n in_HFRI: inHFRI ? JSON.parse(inHFRI) : undefined,\n in_emerging_markets: inEmergingMarkets ? JSON.parse(inEmergingMarkets) : undefined,\n }\n const res = await APIService.peerGroupAnalysisService.fetchPeerGroupPdfReport(fundId, data)\n JsFileDownload(res.data, `${fundData.fund_name.replace('-', ' ').replace(',', ' ')} PGA.pdf`, 'application/pdf')\n } else if (userFundData) {\n const data: FetchUserFundPeerGroupPdfParams = {\n end_date: form.getFieldValue('endDate'),\n benchmark1: form.getFieldValue('benchmark1'),\n benchmark2: form.getFieldValue('benchmark2'),\n benchmark3: form.getFieldValue('benchmark3'),\n universe_list_ids: universeList.length ? universeList : undefined,\n fund_list_ids: fundList.length ? fundList : undefined,\n portfolio_model_ids: modelList.length ? modelList : undefined,\n static_index_ids: staticIndexIds.length ? staticIndexIds : undefined,\n dynamic_index_ids: dynamicIndexIds.length ? dynamicIndexIds : undefined,\n strategy: strategy.length ? strategy : undefined,\n sub_strategy: subStrategy.length ? subStrategy : undefined,\n regional_focus: regionalFocus.length ? regionalFocus : undefined,\n in_HFRI: inHFRI ? JSON.parse(inHFRI) : undefined,\n in_emerging_markets: inEmergingMarkets ? JSON.parse(inEmergingMarkets) : undefined,\n }\n const res = await APIService.userFundService.fetchFundPdfReport({ fundId, data })\n JsFileDownload(res.data, `${userFundData.name.replace('-', ' ').replace(',', ' ')} PGA.pdf`, 'application/pdf')\n }\n }\n\n const resolvedUniverseStatData = resolveUniverseStatData(universeStatData)\n const resolvedFundAndBenchmarkData: PeerGroupTableDataType[] = React.useMemo(() => {\n if (!benchmarkOptions || !selectedBenchmarks || !fundAndBenchmarkData) {\n return []\n }\n return resolveFundAndBenchmarkData(fundAndBenchmarkData, benchmarkOptions, selectedBenchmarks)\n }, [benchmarkOptions, fundAndBenchmarkData, selectedBenchmarks])\n\n React.useEffect(() => {\n if (universeListData && universeListData.length > 0) {\n form.setFieldsValue({ universeList: [universeListData[0].id] })\n }\n }, [form, universeListData])\n\n return (\n
\n
\n \n
\n \n \n Print\n \n \n\n \n \n \n \n \n \n \n \n \n {\n if (!option || !option.props || !option.props.children) {\n return false\n }\n return (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }}\n >\n {universeListData &&\n universeListData.map((item) => (\n \n ))}\n \n \n \n {\n if (!option || !option.props || !option.props.children) {\n return false\n }\n return (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }}\n >\n {hfrIndexes &&\n hfrIndexes.map((item) => (\n \n ))}\n \n \n \n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n >\n {renderBenchmarkOptions()}\n \n \n \n \n \n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n >\n {strategyOptions &&\n strategyOptions.map((item: FundDetailStrategy) => {\n const { strategy_code, strategy_name } = item\n return (\n \n )\n })}\n \n \n \n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n style={{ width: '100%' }}\n >\n {regionalFocusOptions &&\n regionalFocusOptions.map((item: FundDetailRegionalFocus) => {\n const { id, name } = item\n return (\n \n )\n })}\n \n \n \n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n >\n {renderBenchmarkOptions()}\n \n \n \n \n \n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n >\n {filteredSubStrategy.map((item: FundDetailSubStrategy) => {\n const { sub_strategy_code, sub_strategy_name } = item\n return (\n \n )\n })}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n >\n {renderBenchmarkOptions()}\n \n \n \n \n \n \n \n \n \n \n {renderTable(resolvedFundAndBenchmarkData, fundAndBenchmarkData?.common_end_date)}\n \n \n \n \n \n \n \n \n \n {renderTable(resolvedUniverseStatData, selectedEndDate)}\n \n \n \n \n \n \n \n \n \n fundBenchmarkData.name === 'Fund',\n ),\n ]}\n endDate={selectedEndDate}\n />\n \n \n \n \n \n \n )\n}\n\nexport default PeerGroupForm\n","import moment from 'moment'\nimport { PeerGroupTableDataType } from './PeerGroupForm'\nimport {\n PeerGroupUniverseStatsResponse,\n PeerGroupFundBenchmarkResponse,\n BenchmarkRecord,\n} from '../../api/models/ResponsesTypes'\n\n/**\n * Remap data from API response to table data structure\n * @param sourceData {PeerGroupUniverseStatsResponse} - PeerGroupUniverseStats data\n */\nexport const resolveUniverseStatData = (sourceData?: PeerGroupUniverseStatsResponse): PeerGroupTableDataType[] => {\n if (!sourceData || !Object.keys(sourceData).length) {\n return []\n }\n\n const orderedRowArray: Array<{ key: string; name: string }> = [\n { key: 'number_in_universe', name: 'Number In Universe' },\n { key: 'fund_percentile', name: 'Fund Percentile (%)' },\n { key: 'maximum_return', name: 'Maximum Return' },\n { key: '95th_percentile', name: 'Percentile 95th' },\n { key: '75th_percentile', name: 'Percentile 75th' },\n { key: 'median_return', name: 'Median Return' },\n { key: '25th_percentile', name: 'Percentile 25th' },\n { key: '5th_percentile', name: 'Percentile 5th' },\n { key: 'minimum_return', name: 'Minimum Return' },\n ]\n return orderedRowArray.map((row) => ({\n name: row.name,\n current: sourceData.first_month[row.key],\n prevMonth: sourceData.previous_month[row.key],\n threeMonths: sourceData.three_month[row.key],\n sixMonths: sourceData.six_month[row.key],\n ytd: sourceData.ytd[row.key],\n oneYear: sourceData.one_year[row.key],\n twoYears: sourceData.two_year[row.key],\n threeYears: sourceData.three_year[row.key],\n fiveYears: sourceData.five_year[row.key],\n }))\n}\n\n/**\n * Remap data from API response to table data structure\n * @param sourceData {PeerGroupFundBenchmarkResponse} - PeerGroup Funds and Benchmarks data\n * @param benchmarkObj {[key: string]: string} - The list of all available benchmarks to get the name based on selected benchmarks\n * @param selectedBenchmarks {number[]} - Selected benchmarks 1, 2, 3\n */\nexport const resolveFundAndBenchmarkData = (\n sourceData: PeerGroupFundBenchmarkResponse,\n benchmarkOptions: BenchmarkRecord[],\n selectedBenchmarks: string[],\n): PeerGroupTableDataType[] => {\n const getBenchmarkName = (selectedBenchmarkId: string) => {\n const selected = benchmarkOptions.find((item) => item.id === selectedBenchmarkId)\n return selected ? selected.name : ''\n }\n return Object.entries(sourceData).map(([key, data]) => {\n let name = ''\n if (key === 'b1') {\n name = getBenchmarkName(selectedBenchmarks[0])\n }\n if (key === 'b2') {\n name = getBenchmarkName(selectedBenchmarks[1])\n }\n if (key === 'b3') {\n name = getBenchmarkName(selectedBenchmarks[2])\n }\n if (key === 'fund') {\n name = 'Fund'\n }\n return {\n name,\n current: data.first_month,\n prevMonth: data.previous_month,\n threeMonths: data.three_month,\n sixMonths: data.six_month,\n ytd: data.ytd,\n oneYear: data.one_year,\n twoYears: data.two_year,\n threeYears: data.three_year,\n fiveYears: data.five_year,\n }\n })\n}\n\n/**\n *\n * @param range - the number of options in the select that represents the months\n * @param date - calculation to be made with respect to this date\n */\nexport const buildDateSelectOptions = (range: number, date: moment.Moment) => {\n return Array.from({ length: range }).map((_a, index) => {\n return moment(date).subtract(index, 'month').format('YYYY-MM')\n })\n}\n","import React from 'react'\nimport { DistributionRecord } from '../../../shared/api/models/ResponsesTypes'\nimport PanelDetailGraph from '../../../routes/Analysis/PanelDetailGraph'\n\ninterface OwnProps {\n up_and_down:\n | {\n ups: DistributionRecord\n downs: DistributionRecord\n }\n | undefined\n}\n\n/**\n * This renders UP and Down graph component based on profileStats api\n * @param up_and_down\n * @constructor\n */\nconst UpDownCaptureGraph: React.FC = ({ up_and_down }) => {\n const getUpDownCaptureData = () => {\n const graphData = []\n if (up_and_down) {\n const x = ['Up Average ROR', 'Down Average ROR']\n graphData.push(\n {\n x,\n y: [up_and_down.ups.b1, up_and_down.downs.b1],\n name: 'B1',\n type: 'bar',\n },\n {\n x,\n y: [up_and_down.ups.b2, up_and_down.downs.b2],\n name: 'B2',\n type: 'bar',\n },\n {\n x,\n y: [up_and_down.ups.b3, up_and_down.downs.b3],\n name: 'B3',\n type: 'bar',\n },\n {\n x,\n y: [up_and_down.ups.fund, up_and_down.downs.fund],\n name: 'Fund',\n type: 'bar',\n },\n )\n }\n const graphLayout = {\n autosize: true,\n responsive: true,\n barmode: 'group',\n xaxis: {\n showgrid: false,\n showline: false,\n },\n margin: {\n l: 50,\n r: 50,\n b: 100,\n t: 100,\n pad: 4,\n },\n title: 'Up/Down Capture Vs. HFRI Fund Weighted Comp. Index',\n }\n return {\n header: 'Up capture/Down Capture',\n graphData,\n graphLayout,\n }\n }\n\n return \n}\n\nexport default React.memo(UpDownCaptureGraph)\n","import { Collapse, Table } from 'antd'\nimport React from 'react'\nimport RenderTableCell from './RenderTableCell'\n\nconst { Panel } = Collapse\n\nconst YEARLY_MONTHLY_COLUMNS = [\n { title: 'Year', dataIndex: 'year', key: 'year' },\n {\n title: 'Jan',\n dataIndex: '01',\n key: '01',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'Feb',\n dataIndex: '02',\n key: '02',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'Mar',\n dataIndex: '03',\n key: '03',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'Apr',\n dataIndex: '04',\n key: '04',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'May',\n dataIndex: '05',\n key: '05',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'Jun',\n dataIndex: '06',\n key: '06',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'Jul',\n dataIndex: '07',\n key: '07',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'Aug',\n dataIndex: '08',\n key: '08',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'Sep',\n dataIndex: '09',\n key: '09',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'Oct',\n dataIndex: '10',\n key: '10',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'Nov',\n dataIndex: '11',\n key: '11',\n align: 'right',\n render: RenderTableCell,\n },\n {\n title: 'Dec',\n dataIndex: '12',\n key: '12',\n align: 'right',\n render: RenderTableCell,\n },\n]\n\ninterface Props {\n header: string\n tableData: any\n columns?: any\n showTotal?: boolean\n extra?: React.ReactNode\n}\n\nconst YearlyMonthlyDatatable: React.FC = ({ header, tableData, columns, showTotal = false, extra }) => {\n columns = columns || YEARLY_MONTHLY_COLUMNS\n if (showTotal) {\n columns = columns.concat({\n title: 'Total',\n dataIndex: 'total',\n key: 'total',\n align: 'right',\n render: RenderTableCell,\n })\n }\n return (\n \n \n
{childNode}
\n \n \n )\n}\n\nexport default YearlyMonthlyDatatable\n","import { DownloadOutlined } from '@ant-design/icons'\nimport { Anchor, Button, Col, notification, Row, Select, Tabs } from 'antd'\nimport JsFileDownload from 'js-file-download'\nimport moment from 'moment'\nimport React, { useEffect, useState } from 'react'\nimport PerfectScrollbar from 'react-perfect-scrollbar'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport VamiGraph from '../../../routes/Analysis/VamiGraph'\nimport APIService from '../../api'\nimport { TrackingEventSource } from '../../api/services/event.service'\nimport { FetchFundPdfParams } from '../../api/services/fund.service'\nimport { useServiceState } from '../../hooks/useServiceState'\nimport GenUtil from '../../utils/gen-util'\nimport { LoadingDetails } from '../LoadingDetails'\nimport DistributionGraph from './DistributionGraph'\nimport DrawdownGraph from './DrawdownGraph'\nimport FirmFundDescription from './FirmFundDescription'\nimport FundDetailsUtils from './fund-details-utils'\nimport FundStrategyDescription from './FundStrategyDescription'\nimport PeerGroupForm from './PeerGroupForm'\nimport UpDownCaptureGraph from './UpDownCaptureGraph'\nimport YearlyMonthlyDatatable from './YearlyMonthlyDatatable'\n\nconst { Option } = Select\nconst { Link } = Anchor\n\nconst FixedHeader = styled('div')`\n background: white;\n z-index: 99;\n display: flex;\n justify-content: flex-end;\n padding: 16px;\n\n .ant-anchor {\n display: flex;\n }\n\n .ant-anchor-ink {\n display: none;\n }\n\n .ant-anchor-link {\n padding-left: 0;\n }\n`\n\nconst Container = styled(PerfectScrollbar)`\n width: 100%;\n background: white;\n flex: 1;\n padding: 16px;\n\n h2 {\n text-align: center;\n }\n\n .ant-tabs-nav-wrap {\n display: flex;\n justify-content: center;\n }\n\n .ant-tabs-content {\n padding-top: 16px;\n border: none !important;\n margin-top: 0 !important;\n }\n`\n\nconst StyledDownloadBtn = styled(Button)`\n font-size: 13px;\n font-weight: 500;\n position: absolute;\n left: 0;\n top: 4px;\n z-index: 1;\n`\n\ninterface Props {\n source: TrackingEventSource\n fundId: string\n isShowButtonFactsheet: boolean\n previewTab?: string\n}\n\nenum ActiveTabEnum {\n Profile = 'Profile',\n PeerGroup = 'Peer Group',\n}\n\nconst FundDetailsPreview: React.FC = ({ source, fundId, isShowButtonFactsheet, previewTab }) => {\n const [activeTab, setActiveTab] = React.useState(previewTab || ActiveTabEnum.Profile)\n const { data: fundData, invoke: invokeFundDetails, loading: loadingFundDetails } = useServiceState(\n APIService.fundService.fetchFundDetails,\n )\n\n useEffect(() => {\n setActiveTab(previewTab || activeTab)\n }, [previewTab])\n const { user } = useSelector((state: RootState) => state.user)\n\n const { data: rorData, invoke: invokeRORData } = useServiceState(APIService.fundService.fetchRORDetails)\n\n const { data: aumData, invoke: invokeAUMData } = useServiceState(APIService.fundService.fetchAUMDetails)\n\n const { data: profileStatsData, invoke: invokeProfileStats } = useServiceState(\n APIService.fundService.fetchProfileStatsDetail,\n )\n\n const { benchmarks: benchmarkOptions } = useSelector((state: RootState) => state.appData)\n\n const [fromDate, setFromDate] = useState('')\n const [toDate, setToDate] = useState('')\n const [datesRangeArray, setDatesRangeArray] = useState([])\n const [benchmark1, setBenchmark1] = useState('2899')\n const [benchmark2, setBenchmark2] = useState('2898')\n const [benchmark3, setBenchmark3] = useState('52545')\n const [isDateRangeUpdated, setIsDateRangeUpdated] = useState(false)\n const [loadingDownloadFactsheet, setLoadingDownloadFactsheet] = React.useState(false)\n\n useEffect(() => {\n invokeFundDetails(fundId)\n }, [fundId, invokeFundDetails])\n\n useEffect(() => {\n invokeRORData({ fundId })\n invokeAUMData({ fundId })\n }, [fundId, invokeRORData, invokeAUMData])\n\n useEffect(() => {\n if (fundId && benchmark1 && benchmark2 && benchmark3) {\n invokeProfileStats({ fundId, benchmark1, benchmark2, benchmark3 })\n }\n }, [benchmark1, benchmark2, benchmark3, fundId, invokeProfileStats])\n\n useEffect(() => {\n if (rorData && !isDateRangeUpdated) {\n const endDate = Math.max(...rorData.rors.map((rorItem) => +rorItem.yyyymmm))\n const startDate = Math.min(...rorData.rors.map((rorItem) => +rorItem.yyyymmm))\n const datesRange = FundDetailsUtils.getDatesRangeList(\n GenUtil.getFormattedYearAndMonth(String(startDate), 'YYYY0MM'),\n GenUtil.getFormattedYearAndMonth(String(endDate), 'YYYY0MM'),\n )\n setFromDate(GenUtil.getFormattedYearAndMonth(String(startDate), 'YYYY0MM'))\n setToDate(GenUtil.getFormattedYearAndMonth(String(endDate), 'YYYY0MM'))\n setDatesRangeArray(datesRange)\n setIsDateRangeUpdated(true)\n }\n }, [rorData, isDateRangeUpdated])\n\n const generatePdfReport = async () => {\n const data: FetchFundPdfParams = {\n benchmark1,\n benchmark2,\n benchmark3,\n start_date: fromDate,\n end_date: toDate,\n }\n try {\n const res = await APIService.fundService.fetchFundPdfReport({ fundId, data })\n JsFileDownload(\n res.data,\n `${fundData?.fund_name.replace('-', ' ').replace(',', ' ')} Profile.pdf`,\n 'application/pdf',\n )\n } catch (error) {\n notification.error({ message: error.response.statusText })\n }\n }\n\n const downloadFactsheet = async () => {\n const data = {\n fund_id: fundId,\n benchmark_1: benchmark1,\n benchmark_2: benchmark2,\n benchmark_3: benchmark3,\n start_date: fromDate,\n end_date: toDate,\n }\n\n setLoadingDownloadFactsheet(true)\n try {\n const res = await APIService.fundService.postDownloadFile({\n file_type: 'INDEX_FACTSHEET',\n data,\n })\n\n window.open(`${process.env.REACT_APP_AUTH_API_URL}/manager-link/files/${res.data.url}`)\n\n // const resDownload = await axios.get(`${process.env.REACT_APP_AUTH_API_URL}/manager-link/files/${res.data.url}`)\n // JsFileDownload(resDownload.data, 'index_factsheet.pdf', 'application/pdf')\n } catch (error) {\n console.log(error.response)\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingDownloadFactsheet(false)\n }\n }\n\n const fetchRorAumProfileStats = (startDate: string, endDate: string) => {\n const fromDate = startDate\n const toDate = endDate\n invokeRORData({ fundId, fromDate, toDate })\n invokeAUMData({ fundId, fromDate, toDate })\n invokeProfileStats({\n fundId,\n benchmark1,\n benchmark2,\n benchmark3,\n startDate: fromDate,\n endDate: toDate,\n })\n }\n\n const renderBenchmarkOptions = () => {\n return benchmarkOptions\n ? benchmarkOptions.map((option) => {\n return (\n \n )\n })\n : []\n }\n\n const handleTabChange = (activeKey: ActiveTabEnum) => {\n setActiveTab(activeKey)\n }\n\n if (loadingFundDetails) {\n return \n }\n\n if (!fundData) {\n return null\n }\n\n return (\n \n \n \n {activeTab === ActiveTabEnum.Profile && (\n \n \n \n \n \n \n \n \n \n \n )}\n {activeTab === ActiveTabEnum.PeerGroup && (\n \n )}\n \n \n \n \n handleTabChange(activeKey as ActiveTabEnum)}\n >\n \n \n \n Fund PDF Report\n \n {isShowButtonFactsheet && (\n \n \n Index Factsheet PDF Report\n \n )}\n <>\n {\n setFromDate(value)\n fetchRorAumProfileStats(value, toDate)\n }}\n >\n {datesRangeArray.map((item: string) => {\n return (\n \n )\n })}\n \n {\n setToDate(value)\n fetchRorAumProfileStats(fromDate, value)\n }}\n >\n {datesRangeArray\n .slice()\n .reverse()\n .filter((d) => moment(d, 'YYYY-MM') > moment(fromDate, 'YYYY-MM'))\n .map((item: string) => {\n return (\n \n )\n })}\n \n \n \n \n \n \n \n \n \n\n {(rorData?.rors || []).length > 0 ? (\n \n \n \n \n \n ) : null}\n\n {(aumData?.items || []).length > 0 && (\n \n \n \n \n \n )}\n\n \n \n Benchmark 1\n
\n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n allowClear\n onChange={(val: string) => {\n setBenchmark1(val)\n // fetchRORAndAUMCallback();\n }}\n >\n {renderBenchmarkOptions()}\n \n \n \n Benchmark 2\n
\n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n onChange={(val: string) => {\n setBenchmark2(val)\n // fetchRORAndAUMCallback();\n }}\n >\n {renderBenchmarkOptions()}\n \n \n \n Benchmark 3\n
\n \n option.props &&\n option.props.children &&\n (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }\n onChange={(val: string) => {\n setBenchmark3(val)\n // fetchRORAndAUMCallback();\n }}\n >\n {renderBenchmarkOptions()}\n \n \n \n\n {profileStatsData && (\n \n \n \n \n \n )}\n \n \n {profileStatsData && (\n \n {profileStatsData && profileStatsData.fund_si && (\n \n **Date: {GenUtil.getFormattedYearAndMonth(profileStatsData.fund_si_start_date, 'YYYY0MM')}\n {' - '}\n {GenUtil.getFormattedYearAndMonth(profileStatsData.fund_si_end_date, 'YYYY0MM')}\n \n )}\n *Date: {profileStatsData?.start_date || ''} - {profileStatsData?.end_date || ''}\n \n }\n {...FundDetailsUtils.getFundStatsTableData(\n profileStatsData.b1,\n profileStatsData.b2,\n profileStatsData.b3,\n profileStatsData.fund,\n profileStatsData.fund_si,\n )}\n />\n )}\n \n \n \n \n {profileStatsData ? : null}\n \n \n {profileStatsData ? : null}\n \n \n \n {profileStatsData ? : null}\n \n \n \n \n \n \n \n \n )\n}\n\nexport default FundDetailsPreview\n","import { Col, Row, Table } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport { ColumnProps } from 'antd/lib/table'\nimport React, { useEffect } from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport { FundCCMCResponse } from '../../../../shared/api/models/FundDetails'\nimport {\n FormItemCheckBox,\n FormItemRadio,\n FormItemSelect,\n FormItemTextArea,\n} from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelFormFirm } from '../../../../shared/components/RenderLabelFormFirm'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 1rem;\n\n th.ant-table-cell {\n vertical-align: top;\n }\n td.ant-table-cell {\n vertical-align: top;\n }\n .ant-form-item {\n margin-bottom: 0 !important;\n }\n .ant-radio-wrapper {\n white-space: normal;\n }\n`\n\ntype Props = {\n data?: FundCCMCResponse[]\n form: FormInstance\n}\n\nconst CMIC: React.FC = ({ data, form }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const hasSecurities = form.getFieldValue('has_securities_14032')\n\n useEffect(() => {\n if (hasSecurities === 2) {\n form.setFieldsValue({\n separate_share_classes_14032: undefined,\n pre_trade_compliance_restrictions_14032: undefined,\n other_measures_14032: undefined,\n })\n }\n if (hasSecurities !== 1) {\n form.setFieldsValue({ manager_confirms_14032: undefined })\n }\n }, [form, hasSecurities])\n\n const columns: ColumnProps[] = [\n {\n title: (\n
\n 1(a). Does the fund currently hold any investments whether directly or indirectly (e.g.,{' '}\n publicly traded stocks, bonds, derivatives, warrants, ADRs, GDRs, ETFs, index funds and mutual funds)\n related to the securities identified in{' '}\n E.O. 14032?\n
\n ),\n key: 'has_securities_14032',\n render: () => {\n return (\n \n )\n },\n width: '30%',\n },\n {\n title: (\n
\n 1(b). If Yes to 1(a), confirm your plan to\n divest of these assets by the U.S. deadline of{' '}\n June 23, 2022, and that you will not add\n to such positions in the meantime.\n
\n ),\n key: 'manager_confirms_14032',\n render: () => {\n return (\n \n )\n },\n width: '20%',\n },\n {\n title: (\n <>\n

\n 2. Identify or describe any measures you have or will be implementing to prevent the intentional or\n inadvertent purchase of investments related to the prohibited securities on an ongoing basis.\n

\n \n Below is a link to the complete list of prohibited securities available on the U.S. Department of Treasury\n website:\n \n

\n PDF: \n \n https://www.treasury.gov/ofac/downloads/ccmc/nscmiclist.pdf\n \n

\n

\n TXT: \n \n https://www.treasury.gov/ofac/downloads/ccmc/nscmiclist.txt\n \n

\n \n ),\n render: () => {\n return (\n <>\n \n
\n }\n />\n }\n />\n \n \n \n \n )\n },\n },\n {\n title: '3. Subscription Advanced Notice (# days)',\n render: () => {\n return (\n 0\n ? fundDataDropdown?.subscription_advance_notice.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n )\n },\n },\n ]\n\n return (\n \n 0\n ? data\n : [\n {\n fund_id: '',\n fund_name: '',\n has_securities_14032: null,\n manager_confirms_14032: null,\n separate_share_classes_14032: null,\n pre_trade_compliance_restrictions_14032: null,\n other_measures_14032: null,\n subscription_notice: '',\n },\n ]\n }\n pagination={{ hideOnSinglePage: true }}\n />\n \n )\n}\n\nexport default CMIC\n","import { ContainerOutlined, InboxOutlined, SearchOutlined } from '@ant-design/icons'\nimport { AutoComplete, Button, Input, Popconfirm, Select } from 'antd'\nimport Text from 'antd/lib/typography/Text'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport { ViewModeType } from '../../shared/DraftManager'\nimport { LeftNavExFirmEnum } from '../../shared/SearchExFirmLabel'\nimport { LeftNavExFundEnum, ListSearchExFundType, SEARCH_FIELD_INDEX } from '../../shared/SearchExFundLabel'\nimport { addTabs, FundFirmTypeEnum, PREFIX_EXTERNAL } from '../../slice/appSettingsSlice'\nimport { Link } from 'react-router-dom'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst TextID = styled(Text)`\n font-size: 14px;\n`\n\ntype PropsCardTitle = {\n id?: string | undefined\n name?: string | undefined\n firmName?: string | undefined\n firmId?: string | undefined\n optionFilter: ListSearchExFundType[]\n textFilterSearch: string\n setOptionFilter: (value: ListSearchExFundType[]) => void\n setTextFilterSearch: (value: string) => void\n loadingSubmitForm: boolean\n isUpdateFund: boolean\n selectedTab: LeftNavExFirmEnum | LeftNavExFundEnum\n onCancel?: () => void\n setViewMode?: (value: ViewModeType) => void\n setActiveTab: (value: LeftNavExFundEnum | LeftNavExFirmEnum) => void\n onPreview: () => void\n isPreviewing: boolean\n}\nexport const ExFundCardTitle: React.FC = ({\n id,\n name,\n firmName,\n firmId,\n setOptionFilter,\n setTextFilterSearch,\n textFilterSearch,\n loadingSubmitForm,\n isUpdateFund,\n selectedTab,\n onCancel,\n setViewMode,\n setActiveTab,\n onPreview,\n isPreviewing,\n}) => {\n const [optionShow, setOptionShow] = React.useState(SEARCH_FIELD_INDEX)\n const dispatch = useDispatch()\n\n const handleSearch = (value: any) => {\n setTextFilterSearch(value)\n const newOption = SEARCH_FIELD_INDEX.filter((item) => item.name.toUpperCase().indexOf(value.toUpperCase()) !== -1)\n setOptionFilter(newOption)\n setOptionShow(newOption)\n if (newOption.findIndex((item) => item.leftNav === selectedTab) === -1 && newOption.length > 0) {\n setActiveTab(newOption[0].leftNav)\n }\n }\n\n const handleCancel = () => {\n if (onCancel) {\n onCancel()\n }\n }\n\n const appSetting = useSelector((state: RootState) => state.appSettings)\n\n const isEdited = appSetting.fundDraft.some((item) => item.id === id)\n\n return (\n \n
\n
\n \n Fund ID: {id}\n \n Firm ID: {firmId}\n \n {firmName && }\n {firmId && firmName && (\n \n {\n dispatch(\n addTabs(\n setViewMode\n ? { name: firmName, id: firmId, type: FundFirmTypeEnum.FIRMS_IN_FUNDS }\n : {\n name: firmName,\n id: `${PREFIX_EXTERNAL}-${firmId}`,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n },\n ),\n )\n }}\n >\n {firmName}\n \n \n )}\n \n \n \n\n \n
\n \n {isUpdateFund ? (Edited) : ''}\n {name}\n {/* MontLake Q Brands Premiere Palm-Tree Alpha Equity */}\n \n
\n
\n Fund Profile |{' '}\n Peer Group Analysis \n
\n
\n
\n
\n\n \n {!isPreviewing && (\n <>\n {\n if (options.label) {\n const text = options.label.toLocaleString()\n setTextFilterSearch(text)\n const newOption = SEARCH_FIELD_INDEX.filter(\n (item) => item.name.toUpperCase().indexOf(text.toUpperCase()) !== -1,\n )\n setOptionShow(newOption)\n const saveOption = newOption.filter((item) => item.key === value)\n setOptionFilter(saveOption)\n if (saveOption.findIndex((item) => item.leftNav === selectedTab) === -1 && newOption.length > 0) {\n setActiveTab(saveOption[0].leftNav)\n }\n }\n }}\n onSearch={handleSearch}\n options={optionShow.map((item) => ({ value: item.key, label: item.name }))}\n allowClear\n value={textFilterSearch}\n style={{ width: 200, height: 32, marginRight: 8 }}\n >\n } />\n \n {isUpdateFund ? (\n \n \n \n ) : (\n \n )}\n\n \n Save\n \n\n {setViewMode && (\n {\n setViewMode && setViewMode(e as ViewModeType)\n id &&\n name &&\n dispatch(addTabs({ id: id, name: name, viewMode: 'internal', type: FundFirmTypeEnum.FUNDS }))\n }}\n >\n Internal View\n \n External View\n \n \n )}\n \n )}\n \n \n
\n )\n}\n","import { FormInstance } from 'antd/lib/form'\nimport * as React from 'react'\nimport { LeftNavExFundEnum } from '../SearchExFundLabel'\n\nexport const useFieldValidate = (\n arrayFieldValidate: string[],\n isDirty: boolean,\n form: FormInstance,\n onUpdateTabDirty: (params: LeftNavExFundEnum, isDirty: boolean) => void,\n param: LeftNavExFundEnum,\n) => {\n // mark tab dirty\n React.useEffect(() => {\n return () => {\n if (!isDirty) {\n onUpdateTabDirty(param, true)\n }\n }\n }, [isDirty, onUpdateTabDirty, param])\n\n // re-validate the corresponding required fields when visit a dirty tab\n React.useEffect(() => {\n if (isDirty) {\n form.validateFields(arrayFieldValidate)\n }\n }, [arrayFieldValidate, form, isDirty])\n}\n","import { FormInstance } from 'antd/lib/form'\nimport { LeftNavExFundEnum } from '../../shared/SearchExFundLabel'\n\nexport type RequiredFieldType = Record\n\ntype UpdateFieldsType = Partial<\n {\n [key in LeftNavExFundEnum]: string[]\n }\n>\n\nexport class RequiredDataHelper {\n private static instance: RequiredDataHelper\n\n public requiredFields: Partial = {}\n\n public registerRequirement(key: LeftNavExFundEnum, fieldNames: string[]) {\n this.requiredFields = { ...this.requiredFields, [key]: fieldNames }\n }\n public addRequiredFields(fields: UpdateFieldsType) {\n Object.keys(fields).map((key) => {\n const leftNavKey = key as LeftNavExFundEnum\n const listField = this.requiredFields[leftNavKey]\n this.requiredFields[leftNavKey] = [\n ...(this.requiredFields[leftNavKey] || []),\n ...(fields[leftNavKey]?.filter((item) => listField && !listField.includes(item)) || []),\n ]\n })\n }\n\n public removeRequiredFields(fields: UpdateFieldsType) {\n Object.keys(fields).map((key) => {\n const leftNavKey = key as LeftNavExFundEnum\n const listFieldInLeftNav = fields[leftNavKey]\n this.requiredFields[leftNavKey] = [\n ...(this.requiredFields[leftNavKey]?.filter(\n (item) => listFieldInLeftNav && !listFieldInLeftNav.includes(item),\n ) || []),\n ]\n })\n }\n\n public isValidateField(key: LeftNavExFundEnum, fieldNames: string) {\n return this.requiredFields[key]?.includes(fieldNames)\n }\n\n public checkFormData(form: FormInstance) {\n return Object.keys(this.requiredFields).reduce>((s, key) => {\n const ckey = key as keyof RequiredFieldType\n const formData = form.getFieldsValue(this.requiredFields[ckey])\n const errorData = Object.keys(formData).filter(\n (fieldName) => formData[fieldName] === null || formData[fieldName] === undefined,\n )\n s[ckey] = errorData\n return s\n }, {})\n }\n\n static default() {\n if (!this.instance) {\n this.instance = new RequiredDataHelper()\n }\n return this.instance\n }\n}\n","import { Col, Row } from 'antd'\nimport { FormInstance, Rule } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FundDetails } from '../../../shared/api/models/FundDetails'\nimport { FormItemInput, FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFund } from '../../../shared/components/RenderLabelExFund'\nimport { useFieldValidate } from '../../../shared/hooks/useEffectFieldValidate'\nimport { LeftNavExFundEnum } from '../../../shared/SearchExFundLabel'\nimport { FormFieldType } from '../ExFundDetailMain'\nimport { RequiredDataHelper } from '../RequiredDataHelper'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n padding: 0 2rem;\n flex-direction: column;\n`\n\ntype FundContactFieldsType = Pick<\n FormFieldType,\n | 'contact_name'\n | 'contact_company'\n | 'contact_country'\n | 'contact_address1'\n | 'contact_address2'\n | 'contact_city'\n | 'contact_state'\n | 'contact_postal_code'\n | 'contact_phone'\n | 'contact_fax'\n | 'contact_email'\n | 'contact_web'\n>\n\nconst FIELDS: FundContactFieldsType = {\n contact_name: {\n key: 'contact_name',\n name: 'Name',\n isRequired: true,\n },\n contact_company: {\n key: 'contact_company',\n name: 'Company',\n isRequired: true,\n },\n contact_country: {\n key: 'contact_country',\n name: 'Country',\n isRequired: true,\n },\n contact_address1: {\n key: 'contact_address1',\n name: 'Address 1',\n isRequired: true,\n },\n contact_address2: {\n key: 'contact_address2',\n name: 'Addres 2',\n },\n contact_city: {\n key: 'contact_city',\n name: 'City',\n isRequired: true,\n },\n contact_state: {\n key: 'contact_state',\n name: 'State',\n },\n contact_postal_code: {\n key: 'contact_postal_code',\n name: 'Postal Code',\n isRequired: true,\n },\n contact_phone: {\n key: 'contact_phone',\n name: 'Phone',\n isRequired: true,\n },\n contact_fax: {\n key: 'contact_fax',\n name: 'Fax',\n },\n contact_email: {\n key: 'contact_email',\n name: 'Email',\n isRequired: true,\n },\n contact_web: {\n key: 'contact_web',\n name: 'Website',\n },\n}\n\ntype Props = {\n isDirty: boolean\n form: FormInstance\n onUpdateTabDirty: (id: LeftNavExFundEnum, isDirty: boolean) => void\n}\n\nexport const ExFundContact: React.FC = ({ isDirty, form, onUpdateTabDirty }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n useFieldValidate(\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundContactFieldsType].isRequired),\n isDirty,\n form,\n onUpdateTabDirty,\n LeftNavExFundEnum.FUND_CONTACT,\n )\n\n const contactCountry = form.getFieldValue('contact_country')\n\n const LIST_FORM: { name: keyof FundDetails; label: string; maxLength?: number; options?: any[]; rules?: Rule[] }[] = [\n {\n name: FIELDS['contact_name'].key,\n label: FIELDS['contact_name'].name,\n maxLength: 60,\n rules: FIELDS['contact_name']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['contact_company'].key,\n label: FIELDS['contact_company'].name,\n maxLength: 60,\n rules: FIELDS['contact_company']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['contact_country'].key,\n label: FIELDS['contact_country'].name,\n options:\n fundDataDropdown?.contact_country && fundDataDropdown?.contact_country.length > 0\n ? fundDataDropdown.contact_country.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: FIELDS['contact_country']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['contact_address1'].key,\n label: FIELDS['contact_address1'].name,\n maxLength: 60,\n rules: FIELDS['contact_address1']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['contact_address2'].key,\n label: FIELDS['contact_address2'].name,\n maxLength: 60,\n },\n {\n name: FIELDS['contact_city'].key,\n label: FIELDS['contact_city'].name,\n maxLength: 30,\n rules: FIELDS['contact_city']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['contact_state'].key,\n label: FIELDS['contact_state'].name,\n options:\n fundDataDropdown?.contact_state && fundDataDropdown?.contact_state.length > 0\n ? fundDataDropdown.contact_state.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: FIELDS['contact_state']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['contact_postal_code'].key,\n label: FIELDS['contact_postal_code'].name,\n maxLength: 10,\n rules: FIELDS['contact_postal_code']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['contact_phone'].key,\n label: FIELDS['contact_phone'].name,\n maxLength: 30,\n rules: FIELDS['contact_phone']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['contact_fax'].key,\n label: FIELDS['contact_fax'].name,\n maxLength: 30,\n rules: FIELDS['contact_fax']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['contact_email'].key,\n label: FIELDS['contact_email'].name,\n maxLength: 255,\n rules: FIELDS['contact_email']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['contact_web'].key,\n label: FIELDS['contact_web'].name,\n maxLength: 60,\n rules: FIELDS['contact_web']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n ]\n return (\n \n \n {LIST_FORM.map((item) => {\n return (\n
\n {item.options ? (\n }\n options={item.options}\n wrapperCol={16}\n rules={item.rules}\n disabled={item.name === 'contact_state' && contactCountry !== '205'}\n />\n ) : (\n }\n placeholder={item.label}\n wrapperCol={16}\n maxLength={item.maxLength}\n rules={item.rules}\n />\n )}\n \n )\n })}\n \n \n )\n}\n\nRequiredDataHelper.default().registerRequirement(\n LeftNavExFundEnum.FUND_CONTACT,\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundContactFieldsType].isRequired),\n)\n","import { AutoComplete, Col, Form, Radio, Row } from 'antd'\nimport { FormInstance, Rule } from 'antd/lib/form'\nimport React from 'react'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport {\n FormItemAutoComplete,\n FormItemCheckBox,\n FormItemDatePicker,\n FormItemSelect,\n} from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFund } from '../../../shared/components/RenderLabelExFund'\nimport { useFieldValidate } from '../../../shared/hooks/useEffectFieldValidate'\nimport { LeftNavExFundEnum } from '../../../shared/SearchExFundLabel'\nimport { FormFieldType } from '../ExFundDetailMain'\nimport { RequiredDataHelper } from '../RequiredDataHelper'\n\ntype Props = {\n isDirty: boolean\n form: FormInstance\n onUpdateTabDirty: (id: LeftNavExFundEnum, isDirty: boolean) => void\n}\n\n// const ARRAY_FIELD_VALIDATE = ['firm_assets_aud', 'minimum_investment_reason']\n\ntype FundDetailFieldsType = Pick<\n FormFieldType,\n | 'liquid_alt_type'\n | 'liquid_alt_region'\n | 'product_class'\n | 'ucitsiii'\n | 'fund_assets'\n | 'firm_assets'\n | 'fund_assets_date'\n | 'firm_assets_date'\n | 'inception_date'\n | 'accepts_new_investment'\n | 'min_invest'\n | 'add_invest'\n | 'min_invest_indv'\n | 'accepts_mgd_accts'\n | 'multi_manager_platform'\n | 'run_sep_mgd_accts'\n>\n\nconst FIELDS: FundDetailFieldsType = {\n liquid_alt_type: {\n key: 'liquid_alt_type',\n name: 'Liquid Alternative Product Type',\n isRequired: true,\n },\n liquid_alt_region: {\n key: 'liquid_alt_region',\n name: 'Country of Registration',\n isRequired: true,\n },\n product_class: {\n key: 'product_class',\n name: 'Fund Share Class',\n },\n ucitsiii: {\n key: 'ucitsiii',\n name: 'UCITS Compliant?',\n isRequired: true,\n },\n fund_assets: {\n key: 'fund_assets',\n name: 'Fund Assets',\n },\n firm_assets: {\n key: 'firm_assets',\n name: 'Firm Assets AUD (MM)',\n },\n fund_assets_date: {\n key: 'fund_assets_date',\n name: 'Fund Assets Date',\n },\n firm_assets_date: {\n key: 'firm_assets_date',\n name: 'Firm Assets Date',\n },\n inception_date: {\n key: 'inception_date',\n name: 'Inception Date',\n isRequired: true,\n },\n accepts_new_investment: {\n key: 'accepts_new_investment',\n name: 'Open to New Investment?',\n isRequired: true,\n },\n min_invest: {\n key: 'min_invest',\n name: 'Minimum Investment',\n isRequired: true,\n },\n add_invest: {\n key: 'add_invest',\n name: 'Additional Investments',\n isRequired: true,\n },\n min_invest_indv: {\n key: 'min_invest_indv',\n name: 'Managed Account Minimum Asset Size',\n isRequired: true,\n },\n accepts_mgd_accts: {\n key: 'accepts_mgd_accts',\n name: 'Is manager open to running a separately managed account pari-passu to this fund?',\n isRequired: true,\n },\n multi_manager_platform: {\n key: 'multi_manager_platform',\n name: 'Does fund utilize an internal Multi-Manager Platform (aka, \"Pods\")?',\n isRequired: true,\n },\n run_sep_mgd_accts: {\n key: 'run_sep_mgd_accts',\n name: 'Currently Running a Separately Managed Account?',\n isRequired: true,\n },\n}\n\nexport const ExFundDetail: React.FC = ({ isDirty, form, onUpdateTabDirty }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const fundStatusField = form.getFieldValue('fund_status_code')\n\n const acceptMgdAcct = form.getFieldValue('accepts_mgd_accts')\n\n React.useEffect(() => {\n if (acceptMgdAcct === '2') {\n RequiredDataHelper.default().removeRequiredFields({\n 'Fund Detail': ['min_invest_indv', 'run_sep_mgd_accts'],\n })\n } else {\n RequiredDataHelper.default().addRequiredFields({\n 'Fund Detail': ['min_invest_indv', 'run_sep_mgd_accts'],\n })\n }\n }, [acceptMgdAcct])\n\n const liquidAltProduct = form.getFieldValue('liquid_alt_product')\n const isHurdleRate = form.getFieldValue('is_hurdle_rate')\n\n React.useEffect(() => {\n if (liquidAltProduct) {\n RequiredDataHelper.default().addRequiredFields({\n 'Fund Detail': ['liquid_alt_type', 'liquid_alt_region'],\n 'Fee Schedule': ['max_12b1_fee', 'max_front_fee', 'max_deferred_fee'],\n })\n RequiredDataHelper.default().removeRequiredFields({\n 'Fund Structure': ['domicile', 'structure', 'registration_code'],\n 'Fee Schedule': ['incentive_fee', 'is_high_watermark', 'hurdle_rate'],\n })\n } else {\n RequiredDataHelper.default().removeRequiredFields({\n 'Fund Detail': ['liquid_alt_type', 'liquid_alt_region'],\n 'Fee Schedule': ['max_12b1_fee', 'max_front_fee', 'max_deferred_fee'],\n })\n\n RequiredDataHelper.default().addRequiredFields({\n 'Fund Structure': ['domicile', 'structure', 'registration_code'],\n 'Fee Schedule': isHurdleRate\n ? ['incentive_fee', 'is_high_watermark', 'hurdle_rate']\n : ['incentive_fee', 'is_high_watermark'],\n })\n }\n }, [isHurdleRate, liquidAltProduct])\n\n const LIST_SELECT_FORM: {\n name: keyof typeof FIELDS\n label: string\n options: any[]\n rules?: Rule[]\n }[] = [\n {\n name: 'liquid_alt_type',\n label: FIELDS['liquid_alt_type']?.name || '',\n options:\n fundDataDropdown?.liquid_alt_type && fundDataDropdown.liquid_alt_type.length > 0\n ? fundDataDropdown.liquid_alt_type.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n rules: RequiredDataHelper.default().isValidateField(LeftNavExFundEnum.FUND_DETAIL, FIELDS['liquid_alt_type']?.key)\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: 'liquid_alt_region',\n label: FIELDS['liquid_alt_region']?.name || '',\n options:\n fundDataDropdown?.liquid_alt_region && fundDataDropdown.liquid_alt_region.length > 0\n ? fundDataDropdown.liquid_alt_region.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n rules: RequiredDataHelper.default().isValidateField(\n LeftNavExFundEnum.FUND_DETAIL,\n FIELDS['liquid_alt_region'].key,\n )\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: 'product_class',\n label: FIELDS['product_class']?.name || '',\n options:\n fundDataDropdown?.product_class && fundDataDropdown.product_class.length > 0\n ? fundDataDropdown.product_class.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n rules: RequiredDataHelper.default().isValidateField(LeftNavExFundEnum.FUND_DETAIL, FIELDS['product_class'].key)\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n ]\n\n const optionsMinInvest =\n fundDataDropdown?.min_invest && fundDataDropdown.min_invest.length > 0\n ? fundDataDropdown.min_invest.map((item) => ({ value: item, text: item }))\n : []\n const optionsAddInvest =\n fundDataDropdown?.add_invest && fundDataDropdown.add_invest.length > 0\n ? fundDataDropdown.add_invest.map((item) => ({ value: item, text: item }))\n : []\n\n const optionsAssetSize =\n fundDataDropdown?.min_invest_indv && fundDataDropdown.min_invest_indv.length > 0\n ? fundDataDropdown.min_invest_indv.map((item) => ({ value: item, text: item }))\n : []\n\n useFieldValidate(\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundDetailFieldsType].isRequired),\n isDirty,\n form,\n onUpdateTabDirty,\n LeftNavExFundEnum.FUND_DETAIL,\n )\n\n return (\n
\n \n
\n }\n />\n \n \n \n {LIST_SELECT_FORM.map((item) => {\n if (\n !form.getFieldValue('liquid_alt_product') &&\n (item.name === 'liquid_alt_type' || item.name === 'liquid_alt_region')\n ) {\n return null\n }\n if (form.getFieldValue('liquid_alt_product') && item.name === 'liquid_alt_region') {\n form.setFieldsValue({ liquid_alt_region: '1' })\n return (\n \n }\n options={item.options}\n wrapperCol={16}\n rules={item.rules}\n />\n \n )\n }\n return (\n \n }\n options={item.options}\n wrapperCol={16}\n rules={item.rules}\n />\n \n )\n })}\n \n }\n wrapperCol={16}\n options={[\n { value: 'Yes', text: 'Yes' },\n { value: 'No', text: 'No' },\n ]}\n rules={\n RequiredDataHelper.default().isValidateField(LeftNavExFundEnum.FUND_DETAIL, FIELDS['ucitsiii'].key)\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n />\n \n \n \n \n }\n wrapperCol={16}\n rules={\n RequiredDataHelper.default().isValidateField(LeftNavExFundEnum.FUND_DETAIL, FIELDS['inception_date'].key)\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n disabled={fundStatusField === '2'}\n />\n \n \n }\n {...{ wrapperCol: { span: 16 } }}\n rules={\n RequiredDataHelper.default().isValidateField(\n LeftNavExFundEnum.FUND_DETAIL,\n FIELDS['accepts_new_investment'].key,\n )\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n >\n \n Yes\n No\n \n \n \n \n\n \n \n }\n wrapperCol={16}\n options={optionsMinInvest.map((item) => {\n return {\n value: item.value,\n text: item.text,\n }\n })}\n rules={\n RequiredDataHelper.default().isValidateField(LeftNavExFundEnum.FUND_DETAIL, FIELDS['min_invest'].key)\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n />\n \n \n }\n wrapperCol={16}\n options={optionsAddInvest.map((item) => ({\n value: item.value,\n text: item.text,\n }))}\n rules={\n RequiredDataHelper.default().isValidateField(LeftNavExFundEnum.FUND_DETAIL, FIELDS['add_invest'].key)\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n />\n \n \n \n \n }\n {...{ wrapperCol: { span: 16 } }}\n rules={\n RequiredDataHelper.default().isValidateField(\n LeftNavExFundEnum.FUND_DETAIL,\n FIELDS['accepts_mgd_accts'].key,\n )\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n >\n \n Yes\n No\n \n \n \n \n }\n wrapperCol={16}\n options={\n fundDataDropdown?.gate_fund && fundDataDropdown.gate_fund.length > 0\n ? fundDataDropdown.gate_fund\n .filter((i) => i.code_code !== '0')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n rules={\n RequiredDataHelper.default().isValidateField(\n LeftNavExFundEnum.FUND_DETAIL,\n FIELDS['multi_manager_platform'].key,\n )\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n />\n \n \n {form.getFieldValue('accepts_mgd_accts') === '1' && (\n <>\n \n \n \n prevValues.accepts_mgd_accts !== currentValues.accepts_mgd_accts\n }\n >\n {({ getFieldValue, setFieldsValue }) => {\n if (getFieldValue('accepts_mgd_accts') === '2') {\n setFieldsValue({ min_invest_indv: null })\n }\n return (\n }\n {...{ wrapperCol: { span: 16 } }}\n rules={\n RequiredDataHelper.default().isValidateField(\n LeftNavExFundEnum.FUND_DETAIL,\n FIELDS['min_invest_indv'].key,\n )\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n >\n ({ value: item.value, label: item.text }))}\n allowClear\n filterOption={(inputValue, option) => {\n return (\n option?.value.toString().toUpperCase().indexOf(inputValue.toString().toUpperCase()) !== -1\n )\n }}\n />\n \n )\n }}\n \n \n \n \n \n \n prevValues.accepts_mgd_accts !== currentValues.accepts_mgd_accts\n }\n >\n {({ getFieldValue, setFieldsValue }) => {\n if (getFieldValue('accepts_mgd_accts') === '2') {\n setFieldsValue({ run_sep_mgd_accts: null })\n }\n return (\n }\n {...{ wrapperCol: { span: 16 } }}\n rules={\n RequiredDataHelper.default().isValidateField(\n LeftNavExFundEnum.FUND_DETAIL,\n FIELDS['run_sep_mgd_accts'].key,\n )\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n >\n \n Yes\n No\n \n \n )\n }}\n \n \n \n \n )}\n \n )\n}\n\nRequiredDataHelper.default().registerRequirement(\n LeftNavExFundEnum.FUND_DETAIL,\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundDetailFieldsType].isRequired),\n)\n","import { Space, Row, Col } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDropdownCodeType } from '../../../shared/api/models/FundDetails'\nimport { MinorityType } from '../../../shared/api/services/minority.service'\nimport { FormItemCheckBox, FormItemRadio } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../shared/components/RenderLabelForm'\n\ntype Props = {\n minorityTypes?: MinorityType[]\n form: FormInstance\n initialDataForm: any\n setDataFundDetailChange: any\n firmCountry: FundDropdownCodeType | undefined\n}\n\nconst Wrapper = styled.div`\n padding: 1rem;\n`\n\nconst WrapperMinority = styled.div`\n padding: 1rem;\n`\n\nconst ExFundDI: React.FC = ({ minorityTypes, form, initialDataForm, setDataFundDetailChange, firmCountry }) => {\n const isMinorityManagedFund = form.getFieldValue('is_minority_or_woman_managed_fund')\n const isFieldTouched = form.isFieldTouched('is_minority_or_woman_managed_fund')\n\n React.useEffect(() => {\n if (!minorityTypes || !minorityTypes.length || isMinorityManagedFund || !isFieldTouched) {\n return\n }\n minorityTypes?.map((item) => {\n if (initialDataForm[`minority_type_${item.id}`] === false) {\n return\n }\n setDataFundDetailChange((prevState: any) => ({\n ...prevState,\n [`minority_type_${item.id}`]: false,\n }))\n form.setFieldsValue({ [`minority_type_${item.id}`]: false })\n })\n }, [form, isMinorityManagedFund, isMinorityManagedFund, minorityTypes])\n\n return (\n \n \n \n \n

Minority- or Woman-Managed Fund/Product

\n \n \n \n \n \n Applicable only to the management firm that is physically headquartered in{' '}\n {firmCountry === undefined ? '[Firm_Country]' : firmCountry.code_description}\n \n \n \n \n \n \n Minority- or Woman-Managed: A hedge fund/alternative investment product for which the majority of\n investment decisions and/or risk-taking responsibilities are made by one or more minorities or women.\n \n \n \n \n \n }\n options={[\n {\n value: true,\n title: 'Yes',\n },\n {\n value: false,\n title: 'No',\n },\n ]}\n />\n \n \n \n {isMinorityManagedFund ? (\n \n \n If ‘Yes’, please check all that apply:\n \n \n ) : null}\n \n {isMinorityManagedFund ? (\n \n \n \n Type\n \n \n Description\n \n \n {minorityTypes?.map((item, index) => {\n return (\n \n \n \n \n {item.minority_description}\n \n )\n })}\n \n ) : null}\n \n \n )\n}\n\nexport default ExFundDI\n","import { Col, Radio, Row } from 'antd'\nimport Form, { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FormItemAutoComplete, FormItemCheckBox, FormItemInput } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFund } from '../../../shared/components/RenderLabelExFund'\nimport { useFieldValidate } from '../../../shared/hooks/useEffectFieldValidate'\nimport { LeftNavExFundEnum } from '../../../shared/SearchExFundLabel'\nimport { FormFieldType } from '../ExFundDetailMain'\nimport { RequiredDataHelper } from '../RequiredDataHelper'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n margin-top: 1rem;\n padding: 0 2rem;\n`\n\nconst OPTION_INCENTIVE_FEE = [\n {\n text: '10',\n value: '10',\n },\n {\n text: '15',\n value: '15',\n },\n {\n text: '20',\n value: '20',\n },\n]\n\ntype FundFeeStrategyFieldsType = Pick<\n FormFieldType,\n | 'mgmt_fee'\n | 'redemption_fee'\n | 'administrative_fee'\n | 'redemption_fee_months'\n | 'incentive_fee'\n | 'sales_fee'\n | 'max_12b1_fee'\n | 'max_front_fee'\n | 'max_deferred_fee'\n | 'is_high_watermark'\n | 'hurdle_rate'\n>\n\nconst FIELDS: FundFeeStrategyFieldsType = {\n mgmt_fee: {\n key: 'mgmt_fee',\n name: 'Management Fee %',\n isRequired: true,\n maxLength: 30,\n },\n redemption_fee: {\n key: 'redemption_fee',\n name: 'Redemption Fee %',\n },\n administrative_fee: {\n key: 'administrative_fee',\n name: 'Administrative Fee %',\n isRequired: true,\n },\n redemption_fee_months: {\n key: 'redemption_fee_months',\n name: 'If less than (number of months)',\n },\n incentive_fee: {\n key: 'incentive_fee',\n name: 'Incentive Fee %',\n isRequired: true,\n },\n sales_fee: {\n key: 'sales_fee',\n name: 'Sales Fee %',\n },\n max_12b1_fee: {\n key: 'max_12b1_fee',\n name: 'Maximum 12B-1 Fee %',\n isRequired: true,\n },\n max_front_fee: {\n key: 'max_front_fee',\n name: 'Maximum Front-End Sales Load Fee %',\n isRequired: true,\n },\n max_deferred_fee: {\n key: 'max_deferred_fee',\n name: 'Maximum Deferred Sales Load Fee %',\n isRequired: true,\n },\n is_high_watermark: {\n key: 'is_high_watermark',\n name: 'High Watermark',\n isRequired: true,\n },\n hurdle_rate: {\n key: 'hurdle_rate',\n name: 'Hurdle Rate',\n maxLength: 30,\n },\n}\n\ntype Props = {\n isDirty: boolean\n form: FormInstance\n onUpdateTabDirty: (id: LeftNavExFundEnum, isDirty: boolean) => void\n}\n\nexport const ExFundFeeSchedule: React.FC = ({ isDirty, form, onUpdateTabDirty }) => {\n useFieldValidate(\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundFeeStrategyFieldsType].isRequired),\n isDirty,\n form,\n onUpdateTabDirty,\n LeftNavExFundEnum.FEE_SCHEDULE,\n )\n const isLiquidCheck = form.getFieldValue('liquid_alt_product') as boolean\n\n const checkHurdleRate = form.getFieldValue('is_hurdle_rate')\n\n React.useEffect(() => {\n if (checkHurdleRate) {\n RequiredDataHelper.default().addRequiredFields({\n 'Fee Schedule': ['hurdle_rate'],\n })\n } else {\n RequiredDataHelper.default().removeRequiredFields({\n 'Fee Schedule': ['hurdle_rate'],\n })\n }\n }, [checkHurdleRate])\n\n return (\n \n \n \n }\n wrapperCol={16}\n rules={[\n { required: true, message: 'This field is required!' },\n {\n max: FIELDS['mgmt_fee'].maxLength,\n message: `Value should be less than ${FIELDS['mgmt_fee'].maxLength} characters`,\n },\n ]}\n />\n \n \n \n \n }\n wrapperCol={24}\n typeField=\"number\"\n rules={\n FIELDS['redemption_fee'].isRequired ? [{ required: true, message: 'This field is required!' }] : []\n }\n />\n \n \n }\n wrapperCol={24}\n normalize=\"number\"\n typeField=\"number\"\n rules={\n FIELDS['redemption_fee_months'].isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n />\n \n \n \n \n }\n wrapperCol={16}\n maxLength={30}\n rules={\n FIELDS['administrative_fee'].isRequired ? [{ required: true, message: 'This field is required!' }] : []\n }\n />\n \n \n\n {!isLiquidCheck && (\n \n \n }\n wrapperCol={16}\n isKeepOptions\n maxLength={30}\n options={OPTION_INCENTIVE_FEE}\n rules={FIELDS['incentive_fee'].isRequired ? [{ required: true, message: 'This field is required!' }] : []}\n />\n \n\n \n }\n wrapperCol={16}\n maxLength={30}\n rules={FIELDS['sales_fee'].isRequired ? [{ required: true, message: 'This field is required!' }] : []}\n />\n \n \n )}\n {!isLiquidCheck && (\n \n \n }\n rules={[{ required: true, message: 'High Watermark is required' }]}\n {...{ wrapperCol: { span: 16 } }}\n >\n \n Yes\n No\n \n \n \n \n {checkHurdleRate ? (\n \n
\n \n
\n \n \n }\n />\n ) : (\n } />\n )}\n \n \n )}\n {isLiquidCheck && (\n \n
\n Note: Fees below applicable only to Liquid Alternative Products\n
\n
\n )}\n {isLiquidCheck && (\n \n
\n }\n wrapperCol={16}\n maxLength={30}\n rules={FIELDS['max_12b1_fee'].isRequired ? [{ required: true, message: 'This field is required!' }] : []}\n />\n \n \n }\n wrapperCol={16}\n maxLength={30}\n rules={FIELDS['max_front_fee'].isRequired ? [{ required: true, message: 'This field is required!' }] : []}\n />\n \n \n }\n wrapperCol={16}\n maxLength={30}\n rules={\n FIELDS['max_deferred_fee'].isRequired ? [{ required: true, message: 'This field is required!' }] : []\n }\n />\n \n \n )}\n \n )\n}\n\nRequiredDataHelper.default().registerRequirement(\n LeftNavExFundEnum.FEE_SCHEDULE,\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundFeeStrategyFieldsType].isRequired),\n)\n","import { CheckOutlined, CloseOutlined, DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { AutoComplete, Button, Col, Form, Modal, notification, Popconfirm, Row, Spin, Table, Tooltip } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport { ColumnProps } from 'antd/lib/table'\nimport moment from 'moment'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../api'\nimport { FundDetailDataContext } from '../api/context/FundDetailDataContext'\nimport { InstrumentResponseType } from '../api/models/FundDetails'\nimport { Colors } from '../colors'\nimport { useServiceState } from '../hooks/useServiceState'\nimport EditableCell from './EditableTable/EditableCell'\nimport EditableFormRow from './EditableTable/EditableFormRow'\nimport { FormItemInput, FormItemDatePicker } from './FormItemComponents'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin: 0 2rem;\n margin-top: 1rem;\n .ant-table-cell {\n padding: 0px 8px;\n }\n flex-direction: column;\n .editable-cell {\n position: relative;\n }\n\n .editable-cell-value-wrap {\n padding: 0 12px;\n }\n`\ntype Props = { isOverview?: boolean; dataDropdown?: string[] }\nexport const IndustryTable: React.FC = ({ isOverview, dataDropdown }) => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { invoke: getIndustry, data: industryData, loading: dataLoading } = useServiceState(\n APIService.fundDetailService.fetchFundIndustryGroups,\n )\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getIndustry(dataFundDetail.fund_id)\n }, [getIndustry, dataFundDetail])\n\n const [localData, setLocalData] = React.useState<(InstrumentResponseType & { key: string })[]>()\n const [editingRow, setEditingRow] = React.useState()\n const [submitting, setSubmitting] = React.useState(false)\n\n const [showAddNew, setShowAddNew] = React.useState(false)\n\n React.useEffect(() => {\n if (!industryData) {\n return\n }\n setLocalData(industryData.map((item) => ({ ...item, key: `${item.date}_${item.name}` })))\n }, [industryData])\n\n const handleAddRow = async (value: Store) => {\n if (!value || !dataFundDetail) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.createFundIndustry(dataFundDetail.fund_id, {\n work_date: moment(value.date).format('YYYY-MM-DD'),\n name: value.name,\n long_value: value.long_value ? parseFloat(value.long_value.toString()) : undefined,\n short: value.short ? parseFloat(value.short.toString()) : undefined,\n net: value.net ? parseFloat(value.net.toString()) : undefined,\n })\n form.resetFields()\n getIndustry(dataFundDetail.fund_id)\n notification.success({ message: 'Row created successfully!' })\n setShowAddNew(false)\n } catch (error) {\n console.log(error.response.data.message)\n notification.error({ message: `Fail to create new row! ${error.response.data.message || ''}` })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleAddNewRow = () => {\n if (!showAddNew) {\n setShowAddNew(true)\n }\n }\n\n const handleUpdateRow = async () => {\n if (!editingRow || !dataFundDetail) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.updateFundIndustry(dataFundDetail.fund_id, {\n work_date: editingRow.key.split('_')[0],\n name: editingRow.key.split('_')[1],\n updates: {\n work_date: editingRow.date,\n name: editingRow.name,\n long_value: editingRow.long_value ? parseFloat(editingRow.long_value.toString()) : undefined,\n short: editingRow.short ? parseFloat(editingRow.short.toString()) : undefined,\n net: editingRow.net ? parseFloat(editingRow.net.toString()) : undefined,\n },\n })\n getIndustry(dataFundDetail.fund_id)\n notification.success({ message: 'Row updated successfully!' })\n } catch (err) {\n console.log(err)\n notification.error({ message: 'Failed to update row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleDeleteRow = async (date: string, name: string) => {\n if (!dataFundDetail) {\n return\n }\n if (date === '') {\n // newly added row\n setLocalData((prev) => prev?.filter((item) => item.date !== ''))\n setEditingRow(undefined)\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.deleteFundIndustry(dataFundDetail.fund_id, date, name)\n getIndustry(dataFundDetail.fund_id)\n notification.success({ message: 'Row deleted successfully!' })\n } catch (error) {\n console.log(error)\n notification.error({ message: 'Fail to delete row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Date',\n dataIndex: 'date',\n key: 'date',\n sorter: (a, b) => {\n return a.date.localeCompare(b.date)\n },\n defaultSortOrder: 'descend',\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'date',\n editingRow,\n setEditingRow,\n }),\n width: '20%',\n },\n {\n title: 'Industry',\n dataIndex: 'name',\n key: 'name',\n sorter: (a, b) => {\n return a.name.localeCompare(b.name)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'name',\n editingRow,\n setEditingRow,\n options: dataDropdown ? dataDropdown : [],\n }),\n width: '20%',\n },\n {\n title: 'Long (%)',\n dataIndex: 'long_value',\n key: 'long',\n sorter: (a, b) => {\n return (a.long_value || 0) - (b.long_value || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'long_value',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n {\n title: 'Short (%)',\n dataIndex: 'short',\n key: 'short',\n sorter: (a, b) => {\n return (a.short || 0) - (b.short || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'short',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n {\n title: 'Net (%)',\n dataIndex: 'net',\n key: 'net',\n sorter: (a, b) => {\n return (a.net || 0) - (b.net || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'net',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n ...(!isOverview\n ? [\n {\n title: 'Action',\n dataIndex: 'action',\n width: '10%',\n render: (_: any, record: any) => (\n <>\n {!submitting && !editingRow && (\n setEditingRow({ ...record, key: record.key })}\n >\n \n \n \n \n )}\n {editingRow && editingRow.key === record.key && !submitting && (\n <>\n \n {\n setEditingRow(undefined)\n localData && setLocalData(localData?.filter((item) => item.key !== 'new-row'))\n }}\n >\n \n \n \n \n \n )}\n {editingRow && editingRow.key === record.key && submitting && }\n {!(editingRow && editingRow.key === record.key) && (\n {\n handleDeleteRow(record.date, record.name)\n }}\n >\n \n \n )}\n \n ),\n },\n ]\n : []),\n ]\n\n const components = {\n body: {\n row: EditableFormRow,\n cell: EditableCell,\n },\n }\n return (\n
\n \n {!isOverview && (\n
\n \n
\n )}\n 'editable-row'}\n components={components}\n loading={dataLoading}\n dataSource={localData}\n columns={columns}\n scroll={{ y: 'calc(100vh - 478px)' }}\n pagination={{\n hideOnSinglePage: true,\n showSizeChanger: false,\n defaultPageSize: 50,\n showTotal: (total, range) => `${range[0]}-${range[1]} of ${total} items`,\n }}\n style={{ flex: 1 }}\n bordered\n />\n {\n setShowAddNew(false)\n form.resetFields()\n }}\n onOk={form.submit}\n >\n
\n \n \n ({ text: item, value: item })) || []}\n allowClear\n filterOption={(inputValue, option) => {\n return option?.value.toString().toUpperCase().indexOf(inputValue.toString().toUpperCase()) !== -1\n }}\n />\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { IndustryTable } from '../../../shared/components/IndustryTable'\ntype Props = { data: string[] }\nexport const ExFundIndustry: React.FC = ({ data }) => {\n return \n}\n","import { CheckOutlined, CloseOutlined, DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { AutoComplete, Button, Col, Form, Modal, notification, Popconfirm, Row, Spin, Table, Tooltip } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport { ColumnProps } from 'antd/lib/table'\nimport moment from 'moment'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../api'\nimport { FundDetailDataContext } from '../api/context/FundDetailDataContext'\nimport { InstrumentResponseType } from '../api/models/FundDetails'\nimport { Colors } from '../colors'\nimport { useServiceState } from '../hooks/useServiceState'\nimport EditableCell from './EditableTable/EditableCell'\nimport EditableFormRow from './EditableTable/EditableFormRow'\nimport { FormItemDatePicker, FormItemInput } from './FormItemComponents'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin: 0 2rem;\n margin-top: 1rem;\n flex-direction: column;\n .ant-table-cell {\n padding: 0px 8px;\n }\n .editable-cell {\n position: relative;\n }\n\n .editable-cell-value-wrap {\n padding: 0 12px;\n }\n`\ntype Props = {\n isOverview?: boolean\n dataDropdown?: string[]\n}\nexport const InstrumentsTable: React.FC = ({ isOverview, dataDropdown }) => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { invoke: getInstruments, data: instrumentData, loading: dataLoading } = useServiceState(\n APIService.fundDetailService.fetchFundInstruments,\n )\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getInstruments(dataFundDetail.fund_id)\n }, [getInstruments, dataFundDetail])\n\n const [localInstrument, setLocalInstrument] = React.useState<(InstrumentResponseType & { key: string })[]>()\n const [editingRow, setEditingRow] = React.useState()\n const [submitting, setSubmitting] = React.useState(false)\n const [showAddNew, setShowAddNew] = React.useState(false)\n\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (!instrumentData) {\n return\n }\n setLocalInstrument(instrumentData.map((item) => ({ ...item, key: `${item.date}_${item.name}` })))\n }, [instrumentData])\n\n const handleAddRow = async (value: Store) => {\n if (!value || !dataFundDetail) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.createFundInstrument(dataFundDetail.fund_id, {\n work_date: moment(value.date).format('YYYY-MM-DD'),\n name: value.name,\n long_value: value.long_value ? parseFloat(value.long_value.toString()) : undefined,\n short: value.short ? parseFloat(value.short.toString()) : undefined,\n net: value.net ? parseFloat(value.net.toString()) : undefined,\n })\n form.resetFields()\n getInstruments(dataFundDetail.fund_id)\n notification.success({ message: 'Row created successfully!' })\n setShowAddNew(false)\n } catch (error) {\n console.log(error)\n notification.error({ message: `Fail to create new row! ${error.response.data.message || ''}` })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleAddNewRow = () => {\n if (!showAddNew) {\n setShowAddNew(true)\n }\n }\n\n const handleUpdateRow = async () => {\n if (!editingRow || !dataFundDetail) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.updateFundInstrument(dataFundDetail.fund_id, {\n work_date: editingRow.key.split('_')[0],\n name: editingRow.key.split('_')[1],\n updates: {\n work_date: editingRow.date,\n name: editingRow.name,\n long_value: editingRow.long_value ? parseFloat(editingRow.long_value.toString()) : undefined,\n short: editingRow.short ? parseFloat(editingRow.short.toString()) : undefined,\n net: editingRow.net ? parseFloat(editingRow.net.toString()) : undefined,\n },\n })\n getInstruments(dataFundDetail.fund_id)\n notification.success({ message: 'Row updated successfully!' })\n } catch (err) {\n console.log(err)\n notification.error({ message: 'Failed to update row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleDeleteRow = async (date: string, name: string) => {\n if (!dataFundDetail) {\n return\n }\n if (date === '') {\n // newly added row\n setLocalInstrument((prev) => prev?.filter((item) => item.date !== ''))\n setEditingRow(undefined)\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.deleteFundInstrument(dataFundDetail.fund_id, date, name)\n getInstruments(dataFundDetail.fund_id)\n notification.success({ message: 'Row deleted successfully!' })\n } catch (error) {\n console.log(error)\n notification.error({ message: 'Fail to delete row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Date',\n dataIndex: 'date',\n key: 'date',\n sorter: (a, b) => {\n return a.date.localeCompare(b.date)\n },\n sortDirections: ['descend', 'ascend'],\n defaultSortOrder: 'descend',\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'date',\n editingRow,\n setEditingRow,\n }),\n width: '20%',\n },\n {\n title: 'Instrument',\n dataIndex: 'name',\n key: 'name',\n sorter: (a, b) => {\n return a.name.localeCompare(b.name)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'name',\n editingRow,\n setEditingRow,\n options: dataDropdown ? dataDropdown : [],\n }),\n width: '20%',\n },\n {\n title: 'Long (%)',\n dataIndex: 'long_value',\n key: 'long',\n sorter: (a, b) => {\n return (a.long_value || 0) - (b.long_value || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'long_value',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n {\n title: 'Short (%)',\n dataIndex: 'short',\n key: 'short',\n sorter: (a, b) => {\n return (a.short || 0) - (b.short || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'short',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n {\n title: 'Net (%)',\n dataIndex: 'net',\n key: 'net',\n sorter: (a, b) => {\n return (a.net || 0) - (b.net || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'net',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n ...(!isOverview\n ? [\n {\n title: 'Action',\n dataIndex: 'action',\n width: '10%',\n render: (_: any, record: any) => (\n <>\n {!submitting && !editingRow && (\n setEditingRow({ ...record, key: record.key })}\n >\n \n \n \n \n )}\n {editingRow && editingRow.key === record.key && !submitting && (\n <>\n \n {\n setEditingRow(undefined)\n localInstrument && setLocalInstrument(localInstrument?.filter((item) => item.key !== 'new-row'))\n }}\n >\n \n \n \n \n \n )}\n {editingRow && editingRow.key === record.key && submitting && }\n {!(editingRow && editingRow.key === record.key) && (\n {\n handleDeleteRow(record.date, record.name)\n }}\n >\n \n \n )}\n \n ),\n },\n ]\n : []),\n ]\n\n const components = {\n body: {\n row: EditableFormRow,\n cell: EditableCell,\n },\n }\n return (\n
\n \n {!isOverview && (\n
\n \n
\n )}\n 'editable-row'}\n components={components}\n loading={dataLoading}\n dataSource={localInstrument}\n columns={columns}\n scroll={{ y: 'calc(100vh - 478px)' }}\n pagination={{\n hideOnSinglePage: true,\n showSizeChanger: false,\n defaultPageSize: 50,\n showTotal: (total, range) => `${range[0]}-${range[1]} of ${total} items`,\n }}\n style={{ flex: 1 }}\n bordered\n />\n {\n setShowAddNew(false)\n form.resetFields()\n }}\n onOk={form.submit}\n >\n
\n \n \n ({ text: item, value: item })) || []}\n allowClear\n filterOption={(inputValue, option) => {\n return option?.value.toString().toUpperCase().indexOf(inputValue.toString().toUpperCase()) !== -1\n }}\n />\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { InstrumentsTable } from '../../../shared/components/InstrumentsTable'\ntype Props = {\n data: string[]\n}\nexport const ExFundInstruments: React.FC = ({ data }) => {\n return \n}\n","import { CheckOutlined, CloseOutlined, DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { AutoComplete, Button, Col, Form, Modal, notification, Popconfirm, Row, Spin, Table, Tooltip } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport { ColumnProps } from 'antd/lib/table'\nimport moment from 'moment'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../api'\nimport { FundDetailDataContext } from '../api/context/FundDetailDataContext'\nimport { InstrumentResponseType } from '../api/models/FundDetails'\nimport { Colors } from '../colors'\nimport { useServiceState } from '../hooks/useServiceState'\nimport EditableCell from './EditableTable/EditableCell'\nimport EditableFormRow from './EditableTable/EditableFormRow'\nimport { FormItemDatePicker, FormItemInput } from './FormItemComponents'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin: 0 2rem;\n margin-top: 1rem;\n flex-direction: column;\n .ant-table-cell {\n padding: 0px 8px;\n }\n .editable-cell {\n position: relative;\n }\n\n .editable-cell-value-wrap {\n padding: 0 12px;\n }\n`\ntype Props = {\n isOverview?: boolean\n dataDropdown?: string[]\n}\nexport const RegionsTable: React.FC = ({ isOverview, dataDropdown }) => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { invoke: getRegionWeights, data: regionWeightData, loading: dataLoading } = useServiceState(\n APIService.fundDetailService.fetchFundRegionWeights,\n )\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getRegionWeights(dataFundDetail.fund_id)\n }, [getRegionWeights, dataFundDetail])\n\n const [localData, setLocalData] = React.useState<(InstrumentResponseType & { key: string })[]>()\n const [editingRow, setEditingRow] = React.useState()\n const [submitting, setSubmitting] = React.useState(false)\n const [showAddNew, setShowAddNew] = React.useState(false)\n\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (!regionWeightData) {\n return\n }\n setLocalData(regionWeightData.map((item) => ({ ...item, key: `${item.date}_${item.name}` })))\n }, [regionWeightData])\n\n const handleAddRow = async (value: Store) => {\n if (!value || !dataFundDetail) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.createFundRegionWeight(dataFundDetail.fund_id, {\n work_date: moment(value.date).format('YYYY-MM-DD'),\n name: value.name,\n long_value: value.long_value ? parseFloat(value.long_value.toString()) : undefined,\n short: value.short ? parseFloat(value.short.toString()) : undefined,\n net: value.net ? parseFloat(value.net.toString()) : undefined,\n })\n form.resetFields()\n setShowAddNew(false)\n getRegionWeights(dataFundDetail.fund_id)\n notification.success({ message: 'Row created successfully!' })\n } catch (error) {\n console.log(error)\n notification.error({ message: `Fail to create new row! ${error.response.data.message || ''}` })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleAddNewRow = () => {\n if (!showAddNew) {\n setShowAddNew(true)\n }\n }\n\n const handleUpdateRow = async () => {\n if (!editingRow || !dataFundDetail) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.updateFundRegionWeight(dataFundDetail.fund_id, {\n work_date: editingRow.key.split('_')[0],\n name: editingRow.key.split('_')[1],\n updates: {\n work_date: editingRow.date,\n name: editingRow.name,\n long_value: editingRow.long_value ? parseFloat(editingRow.long_value.toString()) : undefined,\n short: editingRow.short ? parseFloat(editingRow.short.toString()) : undefined,\n net: editingRow.net ? parseFloat(editingRow.net.toString()) : undefined,\n },\n })\n getRegionWeights(dataFundDetail.fund_id)\n notification.success({ message: 'Row updated successfully!' })\n } catch (err) {\n console.log(err)\n notification.error({ message: 'Failed to update row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleDeleteRow = async (date: string, name: string) => {\n if (!dataFundDetail) {\n return\n }\n if (date === '') {\n // newly added row\n setLocalData((prev) => prev?.filter((item) => item.date !== ''))\n setEditingRow(undefined)\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.deleteFundRegionWeight(dataFundDetail.fund_id, date, name)\n getRegionWeights(dataFundDetail.fund_id)\n notification.success({ message: 'Row deleted successfully!' })\n } catch (error) {\n console.log(error)\n notification.error({ message: 'Fail to delete row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Date',\n dataIndex: 'date',\n key: 'date',\n sorter: (a, b) => {\n return a.date.localeCompare(b.date)\n },\n sortDirections: ['descend', 'ascend'],\n defaultSortOrder: 'descend',\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'date',\n editingRow,\n setEditingRow,\n }),\n width: '20%',\n },\n {\n title: 'Region',\n dataIndex: 'name',\n key: 'name',\n sorter: (a, b) => {\n return a.name.localeCompare(b.name)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'name',\n editingRow,\n setEditingRow,\n options: dataDropdown ? dataDropdown : [],\n }),\n width: '20%',\n },\n {\n title: 'Long (%)',\n dataIndex: 'long_value',\n key: 'long',\n sorter: (a, b) => {\n return (a.long_value || 0) - (b.long_value || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'long_value',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n {\n title: 'Short (%)',\n dataIndex: 'short',\n key: 'short',\n sorter: (a, b) => {\n return (a.short || 0) - (b.short || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'short',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n {\n title: 'Net (%)',\n dataIndex: 'net',\n key: 'net',\n sorter: (a, b) => {\n return (a.net || 0) - (b.net || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'net',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n ...(!isOverview\n ? [\n {\n title: 'Action',\n dataIndex: 'action',\n width: '10%',\n render: (_: any, record: any) => (\n <>\n {!submitting && !editingRow && (\n setEditingRow({ ...record, key: record.key })}\n >\n \n \n \n \n )}\n {editingRow && editingRow.key === record.key && !submitting && (\n <>\n \n {\n setEditingRow(undefined)\n localData && setLocalData(localData?.filter((item) => item.key !== 'new-row'))\n }}\n >\n \n \n \n \n \n )}\n {editingRow && editingRow.key === record.key && submitting && }\n {!(editingRow && editingRow.key === record.key) && (\n {\n handleDeleteRow(record.date, record.name)\n }}\n >\n \n \n )}\n \n ),\n },\n ]\n : []),\n ]\n\n const components = {\n body: {\n row: EditableFormRow,\n cell: EditableCell,\n },\n }\n return (\n \n
\n {!isOverview && (\n \n )}\n 'editable-row'}\n components={components}\n loading={dataLoading}\n dataSource={localData}\n columns={columns}\n scroll={{ y: 'calc(100vh - 560px)' }}\n pagination={{\n hideOnSinglePage: true,\n showSizeChanger: false,\n defaultPageSize: 50,\n showTotal: (total, range) => `${range[0]}-${range[1]} of ${total} items`,\n }}\n style={{ flex: 1 }}\n bordered\n />\n {\n setShowAddNew(false)\n form.resetFields()\n }}\n onOk={form.submit}\n >\n
\n \n \n ({ text: item, value: item })) || []}\n allowClear\n filterOption={(inputValue, option) => {\n return option?.value.toString().toUpperCase().indexOf(inputValue.toString().toUpperCase()) !== -1\n }}\n />\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownContext } from '../../../../../shared/api/context/FundDetailDropdownContext'\nimport { DividerForm } from '../../../../../shared/components/DividerForm'\nimport { FormItemCheckBox, FormItemSelect } from '../../../../../shared/components/FormItemComponents'\nimport { RegionsTable } from '../../../../../shared/components/RegionsTable'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\nconst Wrapper = styled.div`\n display: 'flex';\n flex: 1;\n`\n\nexport const EMERGING_MARKET_SET = ['10', '3', '7', '13', '5', '15']\ntype Props = { data: string[]; form: FormInstance }\nexport const FundInfoRegion: React.FC = ({ data, form }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const { setDataFundDetailChange, dataFundDetailChange } = React.useContext(FundDetailDataContext)\n const selectedRegion = form.getFieldValue('region_inv_focus')\n const regionCountryOptions = React.useMemo(() => {\n if (!fundDataDropdown?.region_inv_focus_country || fundDataDropdown?.region_inv_focus_country.length === 0) {\n return []\n }\n\n const options = selectedRegion\n ? fundDataDropdown.region_inv_focus_country.filter(\n (item) => item.code_code.slice(0, selectedRegion.length) === selectedRegion,\n )\n : fundDataDropdown.region_inv_focus_country\n return options.map((item) => ({ value: item.code_code, text: item.code_description }))\n }, [fundDataDropdown?.region_inv_focus_country, selectedRegion])\n\n React.useEffect(() => {\n if (dataFundDetailChange?.current && Object.keys(dataFundDetailChange?.current).includes('region_inv_focus')) {\n if (\n (selectedRegion &&\n form.getFieldValue('region_inv_focus_country') &&\n regionCountryOptions.length > 0 &&\n regionCountryOptions.findIndex((item) => item.value === form.getFieldValue('region_inv_focus_country')) ===\n -1) ||\n (!selectedRegion && form.getFieldValue('region_inv_focus_country'))\n ) {\n form.setFieldsValue({ region_inv_focus_country: null })\n setDataFundDetailChange((prev) => ({ ...prev, region_inv_focus_country: null }))\n }\n }\n }, [dataFundDetailChange, form, regionCountryOptions, selectedRegion, setDataFundDetailChange])\n\n const LIST_FIELD = [\n {\n name: 'region_inv_focus',\n label: 'Regional Investment Focus',\n options:\n fundDataDropdown?.region_inv_focus && fundDataDropdown?.region_inv_focus.length > 0\n ? fundDataDropdown.region_inv_focus.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'region_inv_focus_country',\n label: 'Sub-Region',\n options: regionCountryOptions,\n disable: !selectedRegion,\n },\n {\n name: 'is_emerging_markets_fund',\n label: 'Is Emerging Markets',\n isCheckBox: true,\n },\n ]\n\n const regionValue = form.getFieldValue('region_inv_focus')\n\n React.useEffect(() => {\n if (dataFundDetailChange?.current && Object.keys(dataFundDetailChange?.current).includes('region_inv_focus')) {\n if (EMERGING_MARKET_SET.includes(regionValue)) {\n form.setFieldsValue({ is_emerging_markets_fund: true })\n setDataFundDetailChange((prev) => ({ ...prev, is_emerging_markets_fund: true }))\n } else {\n setDataFundDetailChange((prev) => ({ ...prev, is_emerging_markets_fund: false }))\n form.setFieldsValue({ is_emerging_markets_fund: false })\n }\n }\n }, [dataFundDetailChange, form, regionValue, setDataFundDetailChange])\n\n return (\n \n \n {LIST_FIELD.map((item) => {\n return item.isCheckBox ? (\n \n \n \n } disable />\n \n \n \n ) : (\n \n }\n options={item.options || []}\n labelCol={12}\n wrapperCol={12}\n disabled={item.disable}\n />\n \n )\n })}\n \n \n\n \n \n )\n}\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport { FundDetailDataContext } from '../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemSelect, FormItemTextArea } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFund } from '../../../shared/components/RenderLabelExFund'\nimport { useFieldValidate } from '../../../shared/hooks/useEffectFieldValidate'\nimport { LeftNavExFundEnum } from '../../../shared/SearchExFundLabel'\nimport { EMERGING_MARKET_SET } from '../../Dashboard/FundDetail/FundInformation/Region/FundInfoRegion'\nimport { FormFieldType } from '../ExFundDetailMain'\nimport { RequiredDataHelper } from '../RequiredDataHelper'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n margin-top: 1rem;\n padding: 0 2rem;\n`\n\ntype Props = {\n isDirty: boolean\n form: FormInstance\n onUpdateTabDirty: (id: LeftNavExFundEnum, isDirty: boolean) => void\n}\n\ntype InvestmentStrategyFieldsType = Pick<\n FormFieldType,\n | 'strategy_code_new'\n | 'sub_strategy_code_new'\n | 'region_inv_focus'\n | 'strategy_description'\n | 'region_inv_focus_country'\n>\n\nconst FIELDS: InvestmentStrategyFieldsType = {\n strategy_code_new: {\n key: 'strategy_code_new',\n name: 'Main Strategy Classification',\n isRequired: true,\n },\n sub_strategy_code_new: {\n key: 'sub_strategy_code_new',\n name: 'Sub-Strategy Classification',\n isRequired: true,\n },\n region_inv_focus: {\n key: 'region_inv_focus',\n name: 'Regional Investment Focus',\n isRequired: true,\n },\n strategy_description: {\n key: 'strategy_description',\n name: 'Strategy Description',\n isRequired: true,\n },\n region_inv_focus_country: {\n key: 'region_inv_focus_country',\n name: 'Sub-Region Focus',\n isRequired: true,\n },\n}\n\nexport const ExFundInvestmentStrategy: React.FC = ({ isDirty, form, onUpdateTabDirty }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const { setDataFundDetailChange, dataFundDetailChange } = React.useContext(FundDetailDataContext)\n const GlobaldataDropdown = useSelector((state: RootState) => state.appData)\n\n useFieldValidate(\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof InvestmentStrategyFieldsType].isRequired),\n isDirty,\n form,\n onUpdateTabDirty,\n LeftNavExFundEnum.INVESTMENT_STRATEGY,\n )\n\n const selectedStrategy = form.getFieldValue('strategy_code_new')\n\n const optionSubstrategy = React.useMemo(() => {\n const newSubStrategyOptions = selectedStrategy\n ? GlobaldataDropdown && GlobaldataDropdown.subStrategies && GlobaldataDropdown.subStrategies.length > 0\n ? GlobaldataDropdown.subStrategies\n .filter((i) => i.strategy_code === form.getFieldValue('strategy_code_new'))\n .map((item) => ({\n value: item.sub_strategy_code,\n text: item.sub_strategy_name,\n }))\n : []\n : []\n\n return newSubStrategyOptions\n }, [GlobaldataDropdown, form, selectedStrategy])\n\n React.useEffect(() => {\n if (dataFundDetailChange?.current && Object.keys(dataFundDetailChange?.current).includes('strategy_code_new')) {\n if (\n (selectedStrategy &&\n optionSubstrategy.length > 0 &&\n optionSubstrategy.findIndex((item) => item.value === form.getFieldValue('sub_strategy_code_new')) === -1) ||\n (!selectedStrategy && form.getFieldValue('sub_strategy_code_new'))\n ) {\n form.setFieldsValue({ sub_strategy_code_new: null })\n setDataFundDetailChange((prev) => ({ ...prev, sub_strategy_code_new: null }))\n }\n }\n }, [dataFundDetailChange, form, optionSubstrategy, selectedStrategy, setDataFundDetailChange])\n\n // useFieldValidate(\n // ARRAY_FIELD_VALIDATE,\n // isDirty,\n // form,\n // onUpdateTabList,\n // onUpdateTabDirty,\n // LeftNavExFundEnum.INVESTMENT_STRATEGY,\n // )\n\n const selectedRegion = form.getFieldValue('region_inv_focus')\n const isFundActive = form.getFieldValue('fund_status_code') === '2'\n const regionCountryOptions = React.useMemo(() => {\n if (!fundDataDropdown) {\n return []\n }\n if (!fundDataDropdown.region_inv_focus_country || fundDataDropdown.region_inv_focus_country.length === 0) {\n return []\n }\n\n const options = selectedRegion\n ? fundDataDropdown.region_inv_focus_country.filter(\n (item) => item.code_code.slice(0, selectedRegion.length) === selectedRegion,\n )\n : fundDataDropdown.region_inv_focus_country\n return options.map((item) => ({ value: item.code_code, text: item.code_description }))\n }, [fundDataDropdown, selectedRegion])\n\n const regionValue = form.getFieldValue('region_inv_focus')\n\n React.useEffect(() => {\n if (dataFundDetailChange?.current && Object.keys(dataFundDetailChange?.current).includes('region_inv_focus')) {\n if (EMERGING_MARKET_SET.includes(regionValue)) {\n form.setFieldsValue({ is_emerging_markets_fund: true })\n setDataFundDetailChange((prev) => ({ ...prev, is_emerging_markets_fund: true }))\n } else {\n setDataFundDetailChange((prev) => ({ ...prev, is_emerging_markets_fund: false }))\n form.setFieldsValue({ is_emerging_markets_fund: false })\n }\n if (\n (selectedRegion &&\n form.getFieldValue('region_inv_focus_country') &&\n regionCountryOptions.length > 0 &&\n regionCountryOptions.findIndex((item) => item.value === form.getFieldValue('region_inv_focus_country')) ===\n -1) ||\n (!selectedRegion && form.getFieldValue('region_inv_focus_country'))\n ) {\n form.setFieldsValue({ region_inv_focus_country: null })\n setDataFundDetailChange((prev) => ({ ...prev, region_inv_focus_country: null }))\n }\n }\n }, [dataFundDetailChange, form, regionCountryOptions, regionValue, selectedRegion, setDataFundDetailChange])\n\n return (\n \n \n \n }\n labelCol={12}\n wrapperCol={18}\n disabled={isFundActive}\n options={\n GlobaldataDropdown?.strategies && GlobaldataDropdown?.strategies.length > 0\n ? GlobaldataDropdown.strategies.map((item) => ({\n value: item.strategy_code,\n text: item.strategy_name,\n }))\n : []\n }\n rules={\n FIELDS['strategy_code_new'].isRequired ? [{ required: true, message: 'This field is required!' }] : []\n }\n />\n \n \n }\n labelCol={12}\n wrapperCol={18}\n disabled={!selectedStrategy || isFundActive}\n options={optionSubstrategy}\n rules={\n FIELDS['sub_strategy_code_new'].isRequired ? [{ required: true, message: 'This field is required!' }] : []\n }\n />\n \n \n }\n labelCol={12}\n wrapperCol={18}\n disabled={isFundActive}\n options={\n fundDataDropdown?.region_inv_focus && fundDataDropdown?.region_inv_focus.length > 0\n ? fundDataDropdown.region_inv_focus.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n rules={\n FIELDS['region_inv_focus'].isRequired ? [{ required: true, message: 'This field is required!' }] : []\n }\n />\n \n \n }\n labelCol={12}\n wrapperCol={18}\n options={regionCountryOptions}\n disabled={!selectedRegion || isFundActive}\n rules={\n FIELDS['region_inv_focus_country'].isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n />\n \n \n \n \n }\n row={15}\n wrapperCol={24}\n rules={\n FIELDS['strategy_description'].isRequired ? [{ required: true, message: 'This field is required!' }] : []\n }\n />\n \n \n {!isFundActive && (\n \n
\n Note: Contact HFR at db-support@hfr.com for questions\n regarding the strategy or regional focus classifications\n
\n
\n )}\n \n )\n}\nRequiredDataHelper.default().registerRequirement(\n LeftNavExFundEnum.INVESTMENT_STRATEGY,\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof InvestmentStrategyFieldsType].isRequired),\n)\n","import { CheckOutlined, CloseOutlined, DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, Col, Form, Modal, notification, Popconfirm, Row, Select, Spin, Table, Tooltip } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport { ColumnProps } from 'antd/lib/table'\nimport moment from 'moment'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../api'\nimport { FundDetailDataContext } from '../api/context/FundDetailDataContext'\nimport { InvestorType } from '../api/models/FundDetails'\nimport { Colors } from '../colors'\nimport { useServiceState } from '../hooks/useServiceState'\nimport EditableCell from './EditableTable/EditableCell'\nimport EditableFormRow from './EditableTable/EditableFormRow'\nimport { FormItemDatePicker, FormItemInput } from './FormItemComponents'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin: 0 2rem;\n margin-top: 1rem;\n flex-direction: column;\n .ant-table-cell {\n padding: 0px 8px;\n }\n .editable-cell {\n position: relative;\n }\n\n .editable-cell-value-wrap {\n padding: 0 12px;\n }\n`\ntype Props = { isOverview?: boolean; dataDropdown?: { [key: number]: string }[] }\nexport const InvestorTypeTable: React.FC = ({ isOverview, dataDropdown }) => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { invoke: getInvestorType, data: investorTypeData, loading: dataLoading } = useServiceState(\n APIService.fundDetailService.fetchFundInvestorTypes,\n )\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getInvestorType(dataFundDetail.fund_id)\n }, [getInvestorType, dataFundDetail])\n\n const selectOptions = dataDropdown\n ? dataDropdown.map((item) => {\n const key = Object.keys(item)[0]\n //@ts-ignore\n const value = item[key]\n return { label: value, value: key }\n })\n : undefined\n\n const [localData, setLocalData] = React.useState<(InvestorType & { key: string })[]>()\n const [editingRow, setEditingRow] = React.useState()\n const [submitting, setSubmitting] = React.useState(false)\n const [showAddNew, setShowAddNew] = React.useState(false)\n\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (!investorTypeData) {\n return\n }\n setLocalData(\n investorTypeData.map((item) => ({\n ...item,\n resolvedQuarter: item.date,\n key: `${item.date}_${item.name}`,\n })),\n )\n }, [investorTypeData])\n\n const handleAddRow = async (value: Store) => {\n if (!value || !dataFundDetail || !selectOptions) {\n return\n }\n const selectedInvestor = selectOptions?.find((item) => item.label === value.name)\n if (!selectedInvestor) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.createFundInvestorType(dataFundDetail.fund_id, {\n work_date: moment(value.date).format('YYYY-MM-DD'),\n name: selectedInvestor?.value,\n assets: value.assets ? parseFloat(value.assets.toString()) : undefined,\n number: value.number ? parseFloat(value.number.toString()) : undefined,\n })\n form.resetFields()\n getInvestorType(dataFundDetail.fund_id)\n notification.success({ message: 'Row created successfully!' })\n setShowAddNew(false)\n } catch (error) {\n console.log(error)\n notification.error({ message: 'Fail to create new row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleAddNewRow = () => {\n if (!showAddNew) {\n setShowAddNew(true)\n }\n }\n\n const handleUpdateRow = async () => {\n if (!editingRow || !dataFundDetail) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.updateFundInvestorType(dataFundDetail.fund_id, {\n work_date: editingRow.key.split('_')[0],\n name: editingRow.key.split('_')[1],\n updates: {\n work_date: editingRow.date,\n name: editingRow.name,\n assets: editingRow.assets ? parseFloat(editingRow.assets.toString()) : undefined,\n number: editingRow.number ? parseFloat(editingRow.number.toString()) : undefined,\n },\n })\n getInvestorType(dataFundDetail.fund_id)\n notification.success({ message: 'Row updated successfully!' })\n } catch (err) {\n console.log(err)\n notification.error({ message: 'Failed to update row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleDeleteRow = async (date: string, name: string) => {\n if (!dataFundDetail) {\n return\n }\n if (date === '') {\n // newly added row\n setLocalData((prev) => prev?.filter((item) => item.date !== ''))\n setEditingRow(undefined)\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.deleteFundInvestorType(dataFundDetail.fund_id, date, name)\n getInvestorType(dataFundDetail.fund_id)\n notification.success({ message: 'Row deleted successfully!' })\n } catch (error) {\n console.log(error)\n notification.error({ message: 'Fail to delete row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Date',\n key: 'quarter',\n dataIndex: 'resolvedQuarter',\n sorter: (a, b) => {\n return a.date.localeCompare(b.date)\n },\n sortDirections: ['descend', 'ascend'],\n defaultSortOrder: 'descend',\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'resolvedQuarter',\n editingRow,\n setEditingRow,\n }),\n width: '20%',\n },\n {\n title: 'Investor Type',\n dataIndex: 'name',\n key: 'name',\n render: (_, record) => {selectOptions?.find((item) => item.value === record.name)?.label || ''},\n sorter: (a, b) => {\n return a.name.localeCompare(b.name)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'name',\n editingRow,\n setEditingRow,\n optionSelect: selectOptions,\n }),\n width: '20%',\n },\n {\n title: '% of Total Assets',\n dataIndex: 'assets',\n key: 'assets',\n sorter: (a, b) => {\n return (a.assets || 0) - (b.assets || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'assets',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n {\n title: '% of All Investors',\n dataIndex: 'number',\n key: 'number',\n sorter: (a, b) => {\n return (a.number || 0) - (b.number || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'number',\n editingRow,\n setEditingRow,\n }),\n width: '15%',\n },\n ...(!isOverview\n ? [\n {\n title: 'Action',\n dataIndex: 'action',\n width: '10%',\n render: (_: any, record: any) => (\n <>\n {!submitting && !editingRow && (\n setEditingRow({ ...record, key: record.key })}\n >\n \n \n \n \n )}\n {editingRow && editingRow.key === record.key && !submitting && (\n <>\n \n {\n setEditingRow(undefined)\n localData && setLocalData(localData?.filter((item) => item.key !== 'new-row'))\n }}\n >\n \n \n \n \n \n )}\n {editingRow && editingRow.key === record.key && submitting && }\n {!(editingRow && editingRow.key === record.key) && (\n {\n handleDeleteRow(record.date, record.name)\n }}\n >\n \n \n )}\n \n ),\n },\n ]\n : []),\n ]\n\n const components = {\n body: {\n row: EditableFormRow,\n cell: EditableCell,\n },\n }\n return (\n
\n \n {!isOverview && (\n
\n \n
\n )}\n 'editable-row'}\n components={components}\n loading={dataLoading}\n dataSource={localData}\n columns={columns}\n scroll={{ y: 'calc(100vh - 478px)' }}\n pagination={{\n hideOnSinglePage: true,\n showSizeChanger: false,\n defaultPageSize: 50,\n showTotal: (total, range) => `${range[0]}-${range[1]} of ${total} items`,\n }}\n style={{ flex: 1 }}\n bordered\n />\n {\n setShowAddNew(false)\n form.resetFields()\n }}\n onOk={form.submit}\n >\n
\n \n \n {\n const key = Object.keys(item)[0]\n // @ts-ignore\n const value = item[key]\n return { text: value, value: value }\n })}\n showSearch\n allowClear\n filterOption={(inputValue, option) => {\n return option?.value.toString().toUpperCase().indexOf(inputValue.toString().toUpperCase()) !== -1\n }}\n />\n \n \n
\n \n \n \n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { InvestorTypeTable } from '../../../shared/components/InvestorTypeTable'\ntype Props = { data: { [key: number]: string }[] }\nexport const ExFundInvestorType: React.FC = ({ data }) => {\n return \n}\n","import { Button, Col, Collapse, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport moment from 'moment'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport { FundDetailDataContext, PERFORMANCE_REQUEST_ENUM } from '../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { Colors } from '../../../shared/colors'\nimport DataSheet, { DataSheetType } from '../../../shared/components/DataSheet'\nimport { DividerForm } from '../../../shared/components/DividerForm'\nimport { IndustryTable } from '../../../shared/components/IndustryTable'\nimport { InstrumentsTable } from '../../../shared/components/InstrumentsTable'\nimport { InvestorTypeTable } from '../../../shared/components/InvestorTypeTable'\nimport { RegionsTable } from '../../../shared/components/RegionsTable'\nimport { LeftNavExFirmEnum } from '../../../shared/SearchExFirmLabel'\nimport { LeftNavExFundEnum } from '../../../shared/SearchExFundLabel'\nimport { addTabs, FundFirmTypeEnum, PREFIX_EXTERNAL, updateSelectedNav } from '../../../slice/appSettingsSlice'\nimport { DATE_FORMAT } from '../../Dashboard/FundDetail/FundROR/PerformanceUpdate'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin-top: 0.5rem;\n flex-direction: column;\n padding: 0 2rem;\n`\ntype ListOverViewType = {\n indexTab: LeftNavExFundEnum\n listField: {\n value: string\n label: string\n isDescription?: boolean\n }[]\n}\n\ntype Props = { form: FormInstance; fundId: string }\n\nexport const ExFundOverview: React.FC = ({ form, fundId }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const {\n dataNAV,\n dataNAVLoading,\n setNAVDataChange,\n getPerformanceRequest,\n dataROR,\n dataRORLoading,\n setAssetDataChange,\n dataAssetLoading,\n dataAsset,\n } = React.useContext(FundDetailDataContext)\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const appData = useSelector((state: RootState) => state.appData)\n\n const dispatch = useDispatch()\n\n const TextFieldYesNo = (value: string | undefined) => {\n if (value) {\n return value === '1' ? 'Yes' : 'No'\n }\n return 'N/A'\n }\n\n const LIST_OVER_VIEW: ListOverViewType[] = [\n {\n indexTab: LeftNavExFundEnum.FUND_DETAIL,\n listField: [\n // {\n // value: form.getFieldValue('inception_date') || 'N/A',\n // label: 'Fund Inception Date',\n // },\n // {\n // value: form.getFieldValue('fund_assets') || 'N/A',\n // label: 'Fund Assets',\n // },\n {\n value: form.getFieldValue('liquid_alt_type')\n ? fundDataDropdown?.liquid_alt_type.find((item) => item.code_code === form.getFieldValue('liquid_alt_type'))\n ?.code_description\n : 'N/A',\n label: 'Liquid Alternative Type',\n },\n {\n value: form.getFieldValue('liquid_alt_region')\n ? fundDataDropdown?.liquid_alt_region.find(\n (item) => item.code_code === form.getFieldValue('liquid_alt_region'),\n )?.code_description\n : 'N/A',\n label: 'Country Of Registration',\n },\n {\n value: form.getFieldValue('fund_assets') || 'N/A',\n label: 'Fund Assets',\n },\n {\n value: form.getFieldValue('fund_assets_date')\n ? moment(form.getFieldValue('fund_assets_date')).format('YYYY-MM')\n : 'N/A',\n label: 'Fund Asset As Of',\n },\n {\n value: form.getFieldValue('firm_assets') || 'N/A',\n label: 'Firm Assets',\n },\n {\n value: form.getFieldValue('firm_assets_date')\n ? moment(form.getFieldValue('firm_assets_date')).format('YYYY-MM')\n : 'N/A',\n label: 'Firm Asset As Of',\n },\n {\n value: form.getFieldValue('inception_date')\n ? moment(form.getFieldValue('inception_date')).format('YYYY-MM-DD')\n : 'N/A',\n label: 'Inception Date',\n },\n {\n value: form.getFieldValue('min_invest')\n ? form.getFieldValue('min_invest') === 'Other'\n ? form.getFieldValue('min_invest_input')\n : form.getFieldValue('min_invest')\n : 'N/A',\n label: 'Minimum Investment',\n },\n {\n value: form.getFieldValue('product_class')\n ? fundDataDropdown?.product_class.find((item) => item.code_code === form.getFieldValue('product_class'))\n ?.code_description\n : 'N/A',\n label: 'Fund Share Class',\n },\n {\n value: form.getFieldValue('add_invest')\n ? form.getFieldValue('add_invest') === 'Other'\n ? form.getFieldValue('add_invest_input')\n : form.getFieldValue('add_invest')\n : 'N/A',\n label: 'Additional Investments',\n },\n {\n value: form.getFieldValue('ucitsiii') || 'N/A',\n label: 'UCITS Complaint',\n },\n {\n value: form.getFieldValue('accepts_mgd_accts')\n ? form.getFieldValue('accepts_mgd_accts') === '1'\n ? 'Yes'\n : 'No'\n : 'N/A',\n label: 'Accepts Managed Accounts?',\n },\n {\n value:\n form.getFieldValue('accepts_new_investment') === true\n ? 'Yes'\n : form.getFieldValue('accepts_new_investment') === false\n ? 'No'\n : 'N/A',\n label: 'Open To New Investments?',\n },\n {\n value: form.getFieldValue('min_invest_indv')\n ? form.getFieldValue('min_invest_indv') === 'Other'\n ? form.getFieldValue('min_invest_indv_input')\n : form.getFieldValue('min_invest_indv')\n : 'N/A',\n label: 'Managed Account Minimum',\n },\n ],\n },\n {\n indexTab: LeftNavExFundEnum.INVESTMENT_STRATEGY,\n listField: [\n {\n value: form.getFieldValue('strategy_code_new')\n ? appData?.strategies?.find((item) => item.strategy_code === form.getFieldValue('strategy_code_new'))\n ?.strategy_name || 'N/A'\n : 'N/A',\n label: 'Investment Strategy',\n },\n {\n value: form.getFieldValue('sub_strategy_code_new')\n ? appData?.subStrategies?.find(\n (item) => item.sub_strategy_code === form.getFieldValue('sub_strategy_code_new'),\n )?.sub_strategy_name || 'N/A'\n : 'N/A',\n label: 'Sub-Strategy',\n },\n {\n value: form.getFieldValue('region_inv_focus')\n ? fundDataDropdown?.region_inv_focus.find(\n (item) => item.code_code === form.getFieldValue('region_inv_focus'),\n )?.code_description || 'N/A'\n : 'N/A',\n label: 'Regional Investment Focus',\n },\n {\n value: form.getFieldValue('region_inv_focus_country')\n ? fundDataDropdown?.region_inv_focus_country.find(\n (item) => item.code_code === form.getFieldValue('region_inv_focus_country'),\n )?.code_description || 'N/A'\n : 'N/A',\n label: 'Sub-Region Focus',\n },\n {\n value: form.getFieldValue('strategy_description')\n ? `${(form.getFieldValue('strategy_description') as string).slice(0, 200)}...`\n : 'N/A',\n label: 'Strategy Description',\n isDescription: true,\n },\n ],\n },\n {\n indexTab: LeftNavExFundEnum.FEE_SCHEDULE,\n listField: [\n {\n value: form.getFieldValue('mgmt_fee') || 'N/A',\n label: 'Management Fee %',\n },\n {\n value: form.getFieldValue('max_12b1_fee') || 'N/A',\n label: 'Maximum 12B1 Fee %',\n },\n {\n value: form.getFieldValue('redemption_fee') || 'N/A',\n label: 'Redemption Fee %',\n },\n {\n value: form.getFieldValue('max_front_fee') || 'N/A',\n label: 'Max Front Fee %',\n },\n {\n value: form.getFieldValue('redemption_fee_months') || 'N/A',\n label: 'If Less Than (Number Of Months)',\n },\n {\n value: form.getFieldValue('max_deferred_fee') || 'N/A',\n label: 'Maximum Deferred Fee %',\n },\n {\n value: form.getFieldValue('administrative_fee') || 'N/A',\n label: 'Administrative Fee %',\n },\n {\n value:\n form.getFieldValue('is_high_watermark') === true\n ? 'Yes'\n : form.getFieldValue('is_high_watermark') === false\n ? 'No'\n : 'N/A',\n label: 'High Watermark',\n },\n {\n value: form.getFieldValue('sales_fee') || 'N/A',\n label: 'Sales Fee %',\n },\n {\n value: form.getFieldValue('hurdle_rate') || 'N/A',\n label: 'Hurdle Rate',\n },\n {\n value: form.getFieldValue('incentive_fee') || 'N/A',\n label: 'Incentive Fee %',\n },\n ],\n },\n {\n indexTab: LeftNavExFundEnum.SERVICE_PROVIDERS,\n listField: [\n {\n value:\n form.getFieldValue('is_annual_performance_audit') === true\n ? 'Yes'\n : form.getFieldValue('is_annual_performance_audit') === false\n ? 'No'\n : 'N/A',\n label: 'Annual Performance Audit?',\n },\n {\n value: form.getFieldValue('prime_broker')\n ? form.getFieldValue('prime_broker') === 'Other'\n ? form.getFieldValue('prime_broker_input')\n : form.getFieldValue('prime_broker')\n : 'N/A',\n label: 'Prime Broker',\n },\n {\n value: form.getFieldValue('last_audit_date')\n ? moment(form.getFieldValue('last_audit_date')).format('YYYY-MM-DD')\n : 'N/A',\n label: 'Last Audit Date',\n },\n {\n value: form.getFieldValue('administrator')\n ? form.getFieldValue('administrator') === 'Other'\n ? form.getFieldValue('administrator_input')\n : form.getFieldValue('administrator')\n : 'N/A',\n label: 'Administrator',\n },\n {\n value: form.getFieldValue('auditor_name')\n ? form.getFieldValue('auditor_name') === 'Other'\n ? form.getFieldValue('auditor_name_input')\n : form.getFieldValue('auditor_name')\n : 'N/A',\n label: 'Auditor',\n },\n {\n value: form.getFieldValue('banking_agent') || 'N/A',\n label: 'Banking Agent',\n },\n {\n value: form.getFieldValue('legal_adviser')\n ? form.getFieldValue('legal_adviser') === 'Other'\n ? form.getFieldValue('legal_adviser_input')\n : form.getFieldValue('legal_adviser')\n : 'N/A',\n label: 'Legal Adviser',\n },\n {\n value: form.getFieldValue('custodian') || 'N/A',\n label: 'Custodian',\n },\n {\n value: form.getFieldValue('placement_agent') || 'N/A',\n label: 'Placement Agent',\n },\n {\n value: form.getFieldValue('consultant') || 'N/A',\n label: 'Consultant',\n },\n ],\n },\n {\n indexTab: LeftNavExFundEnum.FUND_STRUCTURE,\n listField: [\n {\n value:\n form.getFieldValue('is_offshore') === true\n ? 'Yes'\n : form.getFieldValue('is_offshore') === false\n ? 'No'\n : 'N/A',\n label: 'Is Offshore',\n },\n {\n value: form.getFieldValue('domicile') || 'N/A',\n label: 'Domicile',\n },\n {\n value: form.getFieldValue('structure') || 'N/A',\n label: 'Structure',\n },\n {\n value: form.getFieldValue('registration_code') || 'N/A',\n label: 'Fund Registration',\n },\n {\n value:\n (form.getFieldValue('multi_manager_platform') &&\n fundDataDropdown?.gate_fund &&\n fundDataDropdown.gate_fund.length > 0 &&\n fundDataDropdown.gate_fund.find((item) => item.code_code === form.getFieldValue('multi_manager_platform'))\n ?.code_description) ||\n 'N/A', //form.getFieldValue('registration_code'),\n label: 'Multi-Manager Platform',\n },\n {\n value: form.getFieldValue('equity_subscription')\n ? fundDataDropdown?.equity_subscription.find(\n (item) => item.code_code === form.getFieldValue('equity_subscription'),\n )?.code_description\n : 'N/A',\n label: 'Subscription Frequency',\n },\n {\n value: form.getFieldValue('equity_redemption')\n ? fundDataDropdown?.equity_redemption.find(\n (item) => item.code_code === form.getFieldValue('equity_redemption'),\n )?.code_description\n : 'N/A',\n label: 'Redemption Frequency',\n },\n {\n value: form.getFieldValue('subscription_advance_notice')\n ? fundDataDropdown?.subscription_advance_notice.find(\n (item) => item.code_code === form.getFieldValue('subscription_advance_notice'),\n )?.code_description\n : 'N/A',\n label: 'Subscription Advanced Notice (Days)',\n },\n {\n value: form.getFieldValue('redemption_advance_notice') || 'N/A',\n label: 'Redemption Advanced Notice (Days)',\n },\n {\n value: form.getFieldValue('subscription_cutoff_time')\n ? fundDataDropdown?.subscription_cutoff_time.find(\n (item) => item.code_code === form.getFieldValue('subscription_cutoff_time'),\n )?.code_description\n : 'N/A',\n label: 'Subscription Cutoff By (Time)',\n },\n {\n value: form.getFieldValue('redemption_return_percent') || 'N/A',\n label: 'Initial % Of Redemption Returned',\n },\n {\n value: form.getFieldValue('subscription_cutoff_timezone')\n ? fundDataDropdown?.subscription_cutoff_timezone.find(\n (item) => item.code_code === form.getFieldValue('subscription_cutoff_timezone'),\n )?.code_description\n : 'N/A',\n label: 'Subscription Cut Off By (Time Zone)',\n },\n {\n value: form.getFieldValue('redemption_return_days') || 'N/A',\n label: 'Initial Redemption Returned Within (Days)',\n },\n {\n value: form.getFieldValue('subscription_settlement_days')\n ? fundDataDropdown?.subscription_settlement_days.find(\n (item) => item.code_code === form.getFieldValue('subscription_settlement_days'),\n )?.code_description\n : 'N/A',\n label: 'Subscription Settlement (Days)',\n },\n {\n value: form.getFieldValue('balance_redemption_return_days') || 'N/A',\n label: 'Redemption Balance Returned Within (Days)',\n },\n {\n value: form.getFieldValue('is_lockup')\n ? fundDataDropdown?.is_lockup.find((item) => item.code_code === form.getFieldValue('is_lockup'))\n ?.code_description\n : 'N/A',\n label: 'Lockup',\n },\n {\n value: form.getFieldValue('investor_type') || 'N/A',\n label: 'Open To Investor Type',\n },\n {\n value: form.getFieldValue('lockup_type')\n ? fundDataDropdown?.lockup_type.find((item) => item.code_code === form.getFieldValue('lockup_type'))\n ?.code_description\n : 'N/A',\n label: 'Lockup Type',\n },\n {\n value: form.getFieldValue('use_of_leverage_type')\n ? fundDataDropdown?.use_of_leverage_type.find(\n (item) => item.code_code === form.getFieldValue('use_of_leverage_type'),\n )?.code_description\n : 'N/A',\n label: 'Leverage Type',\n },\n {\n value: form.getFieldValue('lockup_period')\n ? fundDataDropdown?.lockup_period.find((item) => item.code_code === form.getFieldValue('lockup_period'))\n ?.code_description\n : 'N/A',\n label: 'Lockup Period',\n },\n {\n value: form.getFieldValue('performance_reporting') || 'N/A',\n label: 'Performance Reporting Interval',\n },\n {\n value: form.getFieldValue('gate_fund')\n ? fundDataDropdown?.gate_fund.find((item) => item.code_code === form.getFieldValue('gate_fund'))\n ?.code_description\n : 'N/A',\n label: 'Gate:Fund Level',\n },\n { value: form.getFieldValue('bloomberg_ticker') || 'N/A', label: 'Ticker' },\n {\n value: form.getFieldValue('gate_investor')\n ? fundDataDropdown?.gate_investor.find((item) => item.code_code === form.getFieldValue('gate_investor'))\n ?.code_description\n : 'N/A',\n label: 'Investor Level',\n },\n { value: form.getFieldValue('isin') || 'N/A', label: 'ISIN' },\n ],\n },\n {\n indexTab: LeftNavExFundEnum.FUND_ESG_FACTORS,\n listField: [\n {\n value: TextFieldYesNo(form.getFieldValue('is_fund_esg')),\n label: 'Does Fund Consider ESG Factors?',\n },\n {\n value: form.getFieldValue('esg_strategy')\n ? appData?.esgStrategies?.find((item) => item.code === form.getFieldValue('esg_strategy'))?.name || 'N/A'\n : 'N/A',\n label: 'ESG Strategy',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('app_positivescreen')),\n label: 'Positive/best-in-class Screening',\n },\n {\n value: form.getFieldValue('esg_sub_strategy')\n ? appData?.esgSubStrategies?.find((item) => item.code === form.getFieldValue('esg_sub_strategy'))?.name ||\n 'N/A'\n : 'N/A',\n label: 'ESG Sub-Strategy',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('app_negativescreen')),\n label: 'Negative/Exclusionary Screening',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('app_esgintegration')),\n label: 'ESG Integration',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('app_impactinvest')),\n label: 'Impact Investing',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('app_sustaininvest')),\n label: 'Sustainability-themed Investing',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('env_greenbuilding')),\n label: 'Green Building/ Smart Growth',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('env_climatechange')),\n label: 'Climate Change/ Carbon',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('env_cleantech')),\n label: 'Clean Technology',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('env_pollutiontaxes')),\n label: 'Pollution / Toxics',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('env_sustainable')),\n label: 'Sustainable Natural Resources / Agriculture',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('env_waterconservation')),\n label: 'Water Use & Conservation',\n },\n {\n value: form.getFieldValue('env_description'),\n label: 'Additional Description Of How ENVIRONMENTAL Is Considered When Investing',\n isDescription: true,\n },\n {\n value: TextFieldYesNo(form.getFieldValue('soc_workplacesafety')),\n\n label: 'Workplace Safety',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('soc_laborrelations')),\n label: 'Labor Relations',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('soc_workplacebenefits')),\n label: 'Workplace Benefits',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('soc_diversityantibias')),\n label: 'Diversity & Anti-Bias Issues',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('soc_communitydev')),\n label: 'Community Development',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('soc_avoidtobacco')),\n label: 'Avoidance Of Tobacco Or Other Harmful Products',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('soc_humanrights')),\n label: 'Human Rights',\n },\n {\n value: form.getFieldValue('soc_description') || 'N/A',\n label: 'Additional Description Of How SOCIAL Is Considered When Investing',\n isDescription: true,\n },\n {\n value: TextFieldYesNo(form.getFieldValue('gov_corppolcontrib')),\n label: 'Corporate Political Contributions',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('gov_executivecomp')),\n label: 'Executive Compensation',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('gov_boarddiversity')),\n label: 'Board Diversity',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('gov_anticorruption')),\n label: 'Anti-Corruption Pilicies',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('gov_boardindependence')),\n label: 'Board Independence',\n },\n {\n value: form.getFieldValue('gov_description') || 'N/A',\n label: 'Additional Description Of How GOVERNANCE Is Considered When Investing',\n isDescription: true,\n },\n {\n value: TextFieldYesNo('team_engagepcm') || 'N/A',\n label:\n \"Does This Fund's Investment Team Engage With The Management Teams Of Companies In This Fund's Underlying Poritfolio, Re:ESG Or Diversity Issues?\",\n isDescription: true,\n },\n {\n value: TextFieldYesNo(form.getFieldValue('data_msci')),\n label: 'MSCI',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('data_sustainalytics')),\n label: 'Sustainalytics',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('data_bloomberg')),\n label: 'Bloomberg',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('data_factset')),\n label: 'FactSet',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('data_internal')),\n label: 'Proprietary Or Internally Developed Metrics',\n },\n {\n value: form.getFieldValue('data_other') || 'N/A',\n label: 'Other',\n isDescription: true,\n },\n {\n value:\n form.getFieldValue('firmwideESG') === true\n ? 'Yes'\n : form.getFieldValue('firmwideESG') === false\n ? 'No'\n : 'N/A',\n\n label: 'Does Your Firm Have A Formal Firmwide ESG Policy?',\n isDescription: true,\n },\n {\n value: TextFieldYesNo(form.getFieldValue('applied_firmculture')),\n label: 'Firm Culture',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('applied_investmentprocess')),\n label: 'Investment Process',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('applied_portfolioconstruction')),\n label: 'Portfolio Construction',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('applied_esgproducts')),\n label: 'ESG Products',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('applied_esgintegration')),\n label: 'ESG Integration',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('applied_esgactivist')),\n label: 'Activist / Engaged Ownership',\n },\n {\n value: TextFieldYesNo(form.getFieldValue('applied_diversityinclusion')),\n label: 'Diversity And Inclusion',\n },\n {\n value: form.getFieldValue('identify') || 'N/A',\n label: 'Identify The Third-Party Company',\n },\n {\n value:\n form.getFieldValue('incorporate') === true\n ? 'Yes'\n : form.getFieldValue('incorporate') === false\n ? 'No'\n : 'N/A',\n label: 'Do You Have Plans To Incorporate ESG In The Future?',\n },\n ],\n },\n {\n indexTab: LeftNavExFundEnum.FUND_CONTACT,\n listField: [\n {\n value: form.getFieldValue('contact_name') || 'N/A',\n label: 'Name',\n },\n {\n value: form.getFieldValue('contact_company') || 'N/A',\n label: 'Company',\n },\n {\n value: form.getFieldValue('contact_country')\n ? fundDataDropdown?.contact_country.find((item) => item.code_code === form.getFieldValue('contact_country'))\n ?.code_description\n : 'N/A',\n label: 'Country',\n },\n {\n value: form.getFieldValue('contact_address1') || 'N/A',\n label: 'Address 1',\n },\n { value: form.getFieldValue('contact_address2') || 'N/A', label: 'Address 2' },\n { value: form.getFieldValue('contact_city') || 'N/A', label: 'City' },\n {\n value: form.getFieldValue('contact_state')\n ? fundDataDropdown?.contact_state.find((item) => item.code_code === form.getFieldValue('contact_state'))\n ?.code_description\n : 'N/A',\n label: 'State',\n },\n { value: form.getFieldValue('contact_postal_code') || 'N/A', label: 'Postal Code' },\n { value: form.getFieldValue('contact_phone') || 'N/A', label: 'Phone' },\n { value: form.getFieldValue('contact_fax') || 'N/A', label: 'Fax' },\n { value: form.getFieldValue('contact_email') || 'N/A', label: 'Email' },\n { value: form.getFieldValue('contact_web') || 'N/A', label: 'Website' },\n ],\n },\n ]\n\n React.useEffect(() => {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.NAV)\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ASSET)\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ROR)\n }, [getPerformanceRequest])\n\n return (\n \n \n Open Firm Co-Investment:\n \n dataFundDetail &&\n dispatch(\n addTabs({\n name: dataFundDetail?.firm_name,\n id: `${PREFIX_EXTERNAL}-${dataFundDetail?.firm_id}`,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n activeNav: LeftNavExFirmEnum.CO_INVESTMENT,\n }),\n )\n }\n style={{ cursor: 'pointer', color: Colors.primary, marginLeft: 5 }}\n >\n {dataFundDetail?.firm_name}\n \n \n {LIST_OVER_VIEW.map((item) => {\n return (\n
\n
\n

{item.indexTab}

\n \n dispatch(updateSelectedNav({ id: `${PREFIX_EXTERNAL}-${fundId}`, activeNav: item.indexTab }))\n }\n >\n Update/Edit\n \n
\n \n {item.listField.map((field, index) => {\n return (\n
\n {field.isDescription ? (\n
\n
{field.label}
\n
{field.value || 'N/A'}
\n
\n ) : (\n <>\n
{field.label}
\n
{field.value || 'N/A'}
\n \n )}\n \n )\n })}\n \n \n \n )\n })}\n \n \n \n
\n
\n \n Reporting Style: \n {dataFundDetail?.reporting_style}\n \n \n Denom: \n {dataFundDetail?.denomination}\n \n
\n\n \n dispatch(\n updateSelectedNav({\n id: `${PREFIX_EXTERNAL}-${fundId}`,\n activeNav: LeftNavExFundEnum.FUND_PERFORMANCE,\n }),\n )\n }\n >\n Update/Edit\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n \n dispatch(\n updateSelectedNav({\n id: `${PREFIX_EXTERNAL}-${fundId}`,\n activeNav: LeftNavExFundEnum.FUND_PERFORMANCE,\n }),\n )\n }\n >\n Update/Edit\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n \n dispatch(\n updateSelectedNav({\n id: `${PREFIX_EXTERNAL}-${fundId}`,\n activeNav: LeftNavExFundEnum.FUND_PERFORMANCE,\n }),\n )\n }\n >\n Update/Edit\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n \n dispatch(\n updateSelectedNav({ id: `${PREFIX_EXTERNAL}-${fundId}`, activeNav: LeftNavExFundEnum.INSTRUMENTS }),\n )\n }\n >\n Update/Edit\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n \n dispatch(\n updateSelectedNav({ id: `${PREFIX_EXTERNAL}-${fundId}`, activeNav: LeftNavExFundEnum.REGIONS }),\n )\n }\n >\n Update/Edit\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n \n dispatch(\n updateSelectedNav({ id: `${PREFIX_EXTERNAL}-${fundId}`, activeNav: LeftNavExFundEnum.INDUSTRY }),\n )\n }\n >\n Update/Edit\n \n
\n
\n \n
\n
\n
\n
\n \n \n \n
\n \n dispatch(\n updateSelectedNav({\n id: `${PREFIX_EXTERNAL}-${fundId}`,\n activeNav: LeftNavExFundEnum.INVESTOR_TYPE,\n }),\n )\n }\n >\n Update/Edit\n \n
\n
\n \n
\n
\n
\n
\n \n )\n}\n","import { Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { FundDetailDataContext, PERFORMANCE_REQUEST_ENUM } from '../../../../shared/api/context/FundDetailDataContext'\nimport DataSheet, { DataSheetType } from '../../../../shared/components/DataSheet'\ntype Props = {\n form: FormInstance\n}\n\nexport const ExPerformanceAssetsBTC: React.FC = ({ form }) => {\n const {\n setAssetDataChange,\n dataAssetLoading,\n dataAsset,\n getPerformanceRequest,\n assetDataChange,\n dataFundDetail,\n } = React.useContext(FundDetailDataContext)\n\n React.useEffect(() => {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ASSET)\n }, [getPerformanceRequest])\n const isFundActive = form.getFieldValue('fund_status_code') === '2'\n\n return (\n
\n \n {isFundActive && (\n \n
\n Note: Contact HFR at performance@hfr.com if any questions.\n
\n
\n )}\n
\n )\n}\n","import { Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport moment from 'moment'\nimport React from 'react'\nimport { FundDetailDataContext, PERFORMANCE_REQUEST_ENUM } from '../../../../shared/api/context/FundDetailDataContext'\nimport DataSheet, { DataSheetType } from '../../../../shared/components/DataSheet'\nimport { DATE_FORMAT } from '../../../Dashboard/FundDetail/FundROR/PerformanceUpdate'\n\ntype Props = {\n form: FormInstance\n}\nexport const ExPerformanceNAV: React.FC = ({ form }) => {\n const {\n dataNAV,\n dataNAVLoading,\n setNAVDataChange,\n getPerformanceRequest,\n navDataChange,\n dataFundDetail,\n } = React.useContext(FundDetailDataContext)\n\n React.useEffect(() => {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.NAV)\n }, [getPerformanceRequest])\n\n const isFundActive = form.getFieldValue('fund_status_code') === '2'\n\n return (\n
\n \n {isFundActive && (\n \n
\n Note: Contact HFR at performance@hfr.com if any questions.\n
\n
\n )}\n
\n )\n}\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDataContext, PERFORMANCE_REQUEST_ENUM } from '../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport DataSheet, { DataSheetType } from '../../../../shared/components/DataSheet'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FormItemSelect } from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelExFund } from '../../../../shared/components/RenderLabelExFund'\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n`\ntype Props = {\n form: FormInstance\n}\nexport const ExPerformanceRateOfReturn: React.FC = ({ form }) => {\n const {\n dataROR,\n dataRORLoading,\n setRORDataChange,\n getPerformanceRequest,\n rorDataChange,\n dataFundDetail,\n } = React.useContext(FundDetailDataContext)\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n React.useEffect(() => {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ROR)\n }, [getPerformanceRequest])\n\n const isFundActive = form.getFieldValue('fund_status_code') === '2'\n\n return (\n \n \n
\n }\n name=\"reporting_style\"\n labelCol={8}\n wrapperCol={16}\n disabled={isFundActive}\n options={\n fundDataDropdown?.reporting_style && fundDataDropdown.reporting_style.length > 0\n ? fundDataDropdown.reporting_style.map((item) => ({\n value: item,\n text: item,\n }))\n : []\n }\n rules={[{ required: true, message: 'This field is required!' }]}\n />\n \n \n }\n name=\"denomination\"\n labelCol={8}\n wrapperCol={16}\n disabled={isFundActive}\n options={\n fundDataDropdown?.denomination && fundDataDropdown.denomination.length > 0\n ? fundDataDropdown.denomination.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n rules={[{ required: true, message: 'This field is required!' }]}\n />\n \n \n \n\n \n {isFundActive && (\n \n
\n Note: Contact HFR at performance@hfr.com if any questions.\n
\n
\n )}\n \n )\n}\n","import { Modal, notification, Tabs } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport { FundDetailDataContext, PERFORMANCE_REQUEST_ENUM } from '../../../shared/api/context/FundDetailDataContext'\nimport { useDraft } from '../../../shared/DraftManager'\nimport { useFieldValidate } from '../../../shared/hooks/useEffectFieldValidate'\nimport { LeftNavExFundEnum } from '../../../shared/SearchExFundLabel'\nimport { RightTabFundEnum } from '../../../shared/SearchFundLabel'\nimport PerformanceDataSheet from '../../Dashboard/FundDetail/FundROR/PerformanceDataSheet'\nimport { FormFieldType } from '../ExFundDetailMain'\nimport { RequiredDataHelper } from '../RequiredDataHelper'\nimport { ExPerformanceAssetsBTC } from './ExFundPerformance/ExPerformanceAssetsBTC'\nimport { ExPerformanceNAV } from './ExFundPerformance/ExPerformanceNAV'\nimport { ExPerformanceRateOfReturn } from './ExFundPerformance/ExPerformanceRateOfReturn'\n\nconst { TabPane } = Tabs\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n`\nconst StyledTabPane = styled(TabPane)`\n padding: 16px;\n`\n\ntype Props = {\n setIsUpdateFund: (isUpdate: boolean) => void\n isDirty: boolean\n form: FormInstance\n onUpdateTabDirty: (id: LeftNavExFundEnum, isDirty: boolean) => void\n}\ntype FundPerformanceFieldType = Pick\nconst FIELDS: FundPerformanceFieldType = {\n reporting_style: {\n key: 'reporting_style',\n name: 'Reporting Style',\n isRequired: true,\n },\n denomination: {\n key: 'denomination',\n name: 'Denom',\n isRequired: true,\n },\n}\n\nexport const ExFundPerformance: React.FC = ({ setIsUpdateFund, isDirty, form, onUpdateTabDirty }) => {\n const {\n dataFundDetail,\n dataLatestPerformance,\n performanceDataChange,\n setPerformanceDataChange,\n rorDataChange,\n setRORDataChange,\n navDataChange,\n setNAVDataChange,\n assetDataChange,\n setAssetDataChange,\n clearSnapshot,\n loading,\n getPerformanceRequest,\n dataFundDetailChange,\n } = React.useContext(FundDetailDataContext)\n\n const dataChangeRef = dataFundDetailChange?.current\n\n const appSetting = useSelector((state: RootState) => state.appSettings)\n const [showConfirm, setShowConfirm] = React.useState(false)\n const [targetKey, setTargetKey] = React.useState()\n const [activeKey, setActiveKey] = React.useState(RightTabFundEnum.PERFORMANCE_UPDATE)\n\n const { loadSnapshot } = useDraft()\n\n const hyperlink = React.useMemo(() => {\n if (!dataFundDetail) {\n return\n }\n const fundId = dataFundDetail.fund_id\n const draft = loadSnapshot('exFundDraft', dataFundDetail.fund_id)\n const hyperlinked = appSetting.exTabs.tabList.find((item) => item.id.split('-')[1] === fundId)?.hyperlinkTable\n\n if (hyperlinked) {\n if (draft && draft._latestPerformanceDataChange) {\n setActiveKey(RightTabFundEnum.PERFORMANCE_UPDATE)\n notification.warn({\n message: 'There are unsaved changes in Performance Update. Please save or discard the changes to continue.',\n })\n return\n }\n return hyperlinked\n }\n\n if (draft && draft._RORDataChange) {\n return 'latest_ror'\n }\n if (draft && draft._navDataChange) {\n return 'latest_nav'\n }\n if (draft && draft._assetDataChange) {\n return 'latest_asset'\n }\n }, [appSetting.exTabs.tabList, dataFundDetail, loadSnapshot])\n\n const handleTabChange = (key: string) => {\n // Case that update Latest Performance and switch to one of ROR/Asset/Nav tab\n if (\n performanceDataChange &&\n activeKey === RightTabFundEnum.PERFORMANCE_UPDATE &&\n Object.keys(performanceDataChange).length > 0 &&\n (key === RightTabFundEnum.ROR || key === RightTabFundEnum.ASSET || key === RightTabFundEnum.NAV)\n ) {\n setShowConfirm(true)\n setTargetKey(key)\n return\n }\n // Reversed case\n if (\n key === RightTabFundEnum.PERFORMANCE_UPDATE &&\n (rorDataChange.values || navDataChange.values || assetDataChange.values)\n ) {\n setShowConfirm(true)\n setTargetKey(key)\n return\n }\n setActiveKey(key as RightTabFundEnum)\n }\n\n useFieldValidate(\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundPerformanceFieldType].isRequired),\n isDirty,\n form,\n onUpdateTabDirty,\n LeftNavExFundEnum.FUND_PERFORMANCE,\n )\n\n React.useEffect(() => {\n if (hyperlink) {\n if (hyperlink === 'latest_asset') {\n setActiveKey(RightTabFundEnum.ASSET)\n }\n if (hyperlink === 'latest_nav') {\n setActiveKey(RightTabFundEnum.NAV)\n }\n if (hyperlink === 'latest_ror') {\n setActiveKey(RightTabFundEnum.ROR)\n }\n }\n }, [hyperlink])\n\n const handleOk = () => {\n // discard changes\n if (\n targetKey === RightTabFundEnum.ROR ||\n targetKey === RightTabFundEnum.NAV ||\n targetKey === RightTabFundEnum.ASSET\n ) {\n if (\n dataChangeRef &&\n Object.keys(dataChangeRef).filter((item) => item !== '_latestPerformanceDataChange').length === 0\n ) {\n setIsUpdateFund(false)\n }\n setPerformanceDataChange(undefined)\n // TODO: quick fix for now. Need to clear the specific key instead of the whole snapshot\n clearSnapshot()\n notification.success({ message: `Discard changes in ${activeKey}` })\n setShowConfirm(false)\n setActiveKey(targetKey)\n return\n }\n if (targetKey === RightTabFundEnum.PERFORMANCE_UPDATE) {\n if (\n dataChangeRef &&\n Object.keys(dataChangeRef).filter(\n (item) => item !== '_RORDataChange' && item !== '_assetDataChange' && item !== '_navDataChange',\n ).length === 0\n ) {\n setIsUpdateFund(false)\n }\n notification.success({ message: `Discard changes in ROR/Asset/Nav` })\n setRORDataChange({ values: undefined })\n setNAVDataChange({ values: undefined })\n setAssetDataChange({ values: undefined })\n clearSnapshot()\n setShowConfirm(false)\n setActiveKey(targetKey)\n }\n }\n\n const handleCancel = () => {\n setShowConfirm(false)\n }\n\n React.useEffect(() => {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n }, [getPerformanceRequest])\n\n return (\n <>\n \n \n {/* */}\n {dataLatestPerformance && dataFundDetail && (\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n

You have unsaved changes.

\n

\n Because of the conflict in data between the tables, the changes here should be saved or discarded before\n continue.\n

\n Select OK to discard the changes or Cancel to continue.\n
\n
\n \n )\n}\nRequiredDataHelper.default().registerRequirement(\n LeftNavExFundEnum.FUND_PERFORMANCE,\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundPerformanceFieldType].isRequired),\n)\n","import { Col, Form, notification, Row, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport APIService from '../../../../../shared/api'\nimport {\n PrincipalCreateParams,\n PrincipalsResponse,\n PrincipalsUpdateParams,\n} from '../../../../../shared/api/models/FundDetails'\nimport { DividerForm } from '../../../../../shared/components/DividerForm'\nimport { FormItemInput } from '../../../../../shared/components/FormItemComponents'\n\ntype Props = {\n selectedPrincipals: PrincipalsResponse | undefined\n showModal: boolean\n setShowModal: (value: boolean) => void\n setSelectedPrincipals: (value: PrincipalsResponse | undefined) => void\n updatePrincipals: () => void\n fundId: string\n}\nexport const ModalEditPrincipals: React.FC = ({\n selectedPrincipals,\n showModal,\n setShowModal,\n setSelectedPrincipals,\n updatePrincipals,\n fundId,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (selectedPrincipals) {\n form.setFieldsValue(selectedPrincipals)\n } else {\n form.resetFields()\n }\n }, [form, selectedPrincipals])\n\n const handleUpdateRow = () => {\n form.validateFields(['rank', 'name', 'title']).then(() => {\n if (selectedPrincipals) {\n const submitUpdate: Partial = {\n identifier: [fundId, selectedPrincipals.rank, selectedPrincipals.name],\n rank: form.getFieldValue('rank'),\n name: form.getFieldValue('name'),\n title: form.getFieldValue('title'),\n }\n setLoadingSubmit(true)\n APIService.fundDetailService\n .updateFundPrincipals(fundId, submitUpdate)\n .then(() => {\n notification.success({ message: 'Pricipal Updated!' })\n updatePrincipals()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Pricipal Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedPrincipals(undefined)\n form.resetFields()\n })\n } else {\n setLoadingSubmit(true)\n const submitData: PrincipalCreateParams = {\n fund_id: fundId,\n rank: form.getFieldValue('rank'),\n name: form.getFieldValue('name'),\n title: form.getFieldValue('title'),\n }\n APIService.fundDetailService\n .createFundPrincipals(fundId, submitData)\n .then(() => {\n notification.success({ message: 'Principal Created!' })\n updatePrincipals()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Principal Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedPrincipals(undefined)\n form.resetFields()\n })\n }\n })\n }\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={() => handleUpdateRow()}\n onCancel={() => {\n setSelectedPrincipals(undefined)\n setShowModal(false)\n }}\n >\n
\n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Table, Tooltip } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { PrincipalsResponse } from '../../../../../shared/api/models/FundDetails'\nimport { Colors } from '../../../../../shared/colors'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\nimport { ModalEditPrincipals } from './ModalEditPrincipals'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n`\n\nconst Principals: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const [selectedPrincipals, setSelectedPrincipals] = React.useState()\n const [showModal, setShowModal] = React.useState(false)\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n\n const { invoke: getPrincipals, data: dataPrincipals, loading } = useServiceState(\n APIService.fundDetailService.fetchFundPrincipals,\n )\n\n React.useEffect(() => {\n dataFundDetail?.fund_id && getPrincipals(dataFundDetail.fund_id)\n }, [dataFundDetail, getPrincipals])\n\n const updatePrincipals = () => {\n getPrincipals(dataFundDetail?.fund_id)\n }\n\n const deletePrincipals = (itemPrincipals: PrincipalsResponse) => {\n if (dataFundDetail?.fund_id) {\n const paramsSubmit = {\n identifier: [dataFundDetail.fund_id, itemPrincipals.rank, itemPrincipals.name],\n }\n setLoadingDelete(true)\n APIService.fundDetailService\n .deleteFundPrincipals(dataFundDetail?.fund_id, paramsSubmit)\n .then(() => {\n notification.success({ message: 'Principals Delete!' })\n updatePrincipals()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Principals Delete Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Rank',\n dataIndex: 'rank',\n key: 'rank',\n sorter: (a, b) => {\n return a.rank - b.rank\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Name',\n dataIndex: 'name',\n key: 'name',\n sorter: (a, b) => {\n return a.name.localeCompare(b.name)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Title',\n dataIndex: 'title',\n key: 'title',\n sorter: (a, b) => {\n return a.title.localeCompare(b.title)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Action',\n key: 'action',\n fixed: 'right',\n width: 150,\n render: (_, record) => (\n <>\n {\n setShowModal(true)\n setSelectedPrincipals(record)\n }}\n >\n \n \n \n \n\n deletePrincipals(record)}>\n \n \n \n ),\n },\n ]\n return (\n \n
\n \n
\n 10 ? undefined : false}\n />\n {dataFundDetail?.fund_id && (\n \n )}\n
\n )\n}\nexport default Principals\n","import React from 'react'\nimport styled from 'styled-components'\nimport Principals from '../../Dashboard/FundDetail/FundInformation/FundInfo/Principals'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n margin-top: 0.5rem;\n padding: 0 2rem;\n flex-direction: column;\n`\nexport const ExFundPrincipals: React.FC = () => {\n return (\n \n \n \n )\n}\n","import React from 'react'\nimport { RegionsTable } from '../../../shared/components/RegionsTable'\ntype Props = { data: string[] }\nexport const ExFundRegions: React.FC = ({ data }) => {\n return \n}\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport {\n FormItemDatePicker,\n FormItemInput,\n FormItemRadio,\n FormItemSelect,\n} from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFund } from '../../../shared/components/RenderLabelExFund'\nimport { useFieldValidate } from '../../../shared/hooks/useEffectFieldValidate'\nimport { LeftNavExFundEnum } from '../../../shared/SearchExFundLabel'\nimport { FormFieldType } from '../ExFundDetailMain'\nimport { RequiredDataHelper } from '../RequiredDataHelper'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n flex-direction: column;\n padding: 0 2rem;\n`\n\ntype FundServiceProviderFieldsType = Pick<\n FormFieldType,\n | 'is_annual_performance_audit'\n | 'last_audit_date'\n | 'auditor_name'\n | 'legal_adviser'\n | 'prime_broker'\n | 'administrator'\n | 'placement_agent'\n | 'banking_agent'\n | 'custodian'\n | 'consultant'\n>\n\nconst FIELDS: FundServiceProviderFieldsType = {\n is_annual_performance_audit: {\n key: 'is_annual_performance_audit',\n name: 'Annual Performance Audit',\n isRequired: true,\n },\n last_audit_date: {\n key: 'last_audit_date',\n name: 'Last Audit Date',\n },\n auditor_name: {\n key: 'auditor_name',\n name: 'Auditor Name',\n isRequired: true,\n },\n legal_adviser: {\n key: 'legal_adviser',\n name: 'Legal Adviser',\n isRequired: true,\n },\n prime_broker: {\n key: 'prime_broker',\n name: 'Prime Broker',\n isRequired: true,\n },\n administrator: {\n key: 'administrator',\n name: 'Administrator',\n isRequired: true,\n },\n placement_agent: {\n key: 'placement_agent',\n name: 'Placement Agent (Enter None, If Not Applicable)',\n isRequired: true,\n },\n banking_agent: {\n key: 'banking_agent',\n name: 'Banking Agent (Enter None, If Not Applicable)',\n isRequired: true,\n },\n custodian: {\n key: 'custodian',\n name: 'Custodian (Enter None, If Not Applicable)',\n isRequired: true,\n },\n consultant: {\n key: 'consultant',\n name: 'Consultant (Enter None, If Not Applicable)',\n isRequired: true,\n },\n}\n\ntype Props = {\n isDirty: boolean\n form: FormInstance\n onUpdateTabDirty: (id: LeftNavExFundEnum, isDirty: boolean) => void\n}\n\nexport const ExFundServiceProviders: React.FC = ({ isDirty, form, onUpdateTabDirty }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const [isSpecifiedAuditorName, setIsSpecifiedAuditorName] = React.useState(true)\n const [isSpecifiedLegalAdviser, setIsSpecifiedLegalAdviser] = React.useState(true)\n const [isSpecifiedPrimeBroker, setIsSpecifiedPrimeBroker] = React.useState(true)\n const [isSpecifiedAdministrator, setIsSpecifiedAdministrator] = React.useState(true)\n const optionsAuditorName =\n fundDataDropdown?.auditor_name && fundDataDropdown.auditor_name.length > 0\n ? fundDataDropdown.auditor_name.map((item) => ({ value: item, text: item }))\n : []\n const optionsLegalAdviser =\n fundDataDropdown?.legal_adviser && fundDataDropdown.legal_adviser.length > 0\n ? fundDataDropdown.legal_adviser.map((item) => ({ value: item, text: item }))\n : []\n\n const optionsPrimeBroker =\n fundDataDropdown?.prime_broker && fundDataDropdown.prime_broker.length > 0\n ? fundDataDropdown.prime_broker.map((item) => ({ value: item, text: item }))\n : []\n\n const optionsAdministrator =\n fundDataDropdown?.administrator && fundDataDropdown.administrator.length > 0\n ? fundDataDropdown.administrator.map((item) => ({ value: item, text: item }))\n : []\n\n useFieldValidate(\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundServiceProviderFieldsType].isRequired),\n isDirty,\n form,\n onUpdateTabDirty,\n LeftNavExFundEnum.SERVICE_PROVIDERS,\n )\n\n return (\n \n \n
\n }\n rules={\n FIELDS['is_annual_performance_audit']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : []\n }\n options={[\n {\n title: 'Yes',\n value: true,\n },\n {\n title: 'No',\n value: false,\n },\n ]}\n />\n \n \n }\n wrapperCol={16}\n rules={\n FIELDS['last_audit_date']?.isRequired ? [{ required: true, message: 'This field is required!' }] : []\n }\n />\n \n \n\n \n \n }\n options={optionsAuditorName}\n wrapperCol={16}\n selectProps={{ showSearch: true, optionFilterProp: 'children', allowClear: true }}\n rules={\n FIELDS['auditor_name']?.isRequired\n ? [\n { required: true, message: 'This field is required!' },\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedAuditorName(!(getFieldValue('auditor_name') === 'Other'))\n return Promise.resolve()\n },\n }),\n ]\n : [\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedAuditorName(!(getFieldValue('auditor_name') === 'Other'))\n return Promise.resolve()\n },\n }),\n ]\n }\n />\n \n \n }\n wrapperCol={16}\n disabled={isSpecifiedAuditorName}\n placeholder=\"Auditor Name\"\n maxLength={60}\n rules={\n !isSpecifiedAuditorName\n ? [\n {\n required: true,\n message: 'Auditor Name is required!',\n },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ]\n : undefined\n }\n />\n \n \n\n \n \n }\n wrapperCol={16}\n rules={\n FIELDS['legal_adviser']?.isRequired\n ? [\n { required: true, message: 'This field is required!' },\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedLegalAdviser(!(getFieldValue('legal_adviser') === 'Other'))\n return Promise.resolve()\n },\n }),\n ]\n : [\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedLegalAdviser(!(getFieldValue('legal_adviser') === 'Other'))\n return Promise.resolve()\n },\n }),\n ]\n }\n selectProps={{ showSearch: true, optionFilterProp: 'children', allowClear: true }}\n options={optionsLegalAdviser}\n />\n \n \n }\n wrapperCol={16}\n disabled={isSpecifiedLegalAdviser}\n placeholder=\"Legal Adviser\"\n maxLength={60}\n rules={\n !isSpecifiedLegalAdviser\n ? [\n {\n required: true,\n message: 'Legal Adviser is required!',\n },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ]\n : undefined\n }\n />\n \n \n\n \n \n }\n wrapperCol={16}\n selectProps={{ showSearch: true, optionFilterProp: 'children', allowClear: true }}\n rules={\n FIELDS['prime_broker']?.isRequired\n ? [\n { required: true, message: 'This field is required!' },\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedPrimeBroker(!(getFieldValue('prime_broker') === 'Other'))\n return Promise.resolve()\n },\n }),\n ]\n : [\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedPrimeBroker(!(getFieldValue('prime_broker') === 'Other'))\n return Promise.resolve()\n },\n }),\n ]\n }\n options={optionsPrimeBroker}\n />\n \n \n }\n wrapperCol={16}\n disabled={isSpecifiedPrimeBroker}\n placeholder=\"Prime Broker\"\n maxLength={60}\n rules={\n !isSpecifiedPrimeBroker\n ? [\n {\n required: true,\n message: 'Prime Broker is required!',\n },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ]\n : undefined\n }\n />\n \n \n\n \n \n }\n wrapperCol={16}\n rules={\n FIELDS['administrator']?.isRequired\n ? [\n { required: true, message: 'This field is required!' },\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedAdministrator(!(getFieldValue('administrator') === 'Other'))\n return Promise.resolve()\n },\n }),\n ]\n : [\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedAdministrator(!(getFieldValue('administrator') === 'Other'))\n return Promise.resolve()\n },\n }),\n ]\n }\n selectProps={{ showSearch: true, optionFilterProp: 'children', allowClear: true }}\n options={optionsAdministrator}\n />\n \n \n }\n wrapperCol={16}\n disabled={isSpecifiedAdministrator}\n placeholder=\"Administrator\"\n maxLength={60}\n rules={\n !isSpecifiedAdministrator\n ? [\n {\n required: true,\n message: 'Administrator is required!',\n },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ]\n : undefined\n }\n />\n \n \n \n \n }\n placeholder={FIELDS['placement_agent'].name}\n wrapperCol={16}\n maxLength={60}\n rules={[\n // {\n // pattern: /(None)|(^\\d+$)/,\n // message: `Value should be Number or 'None'`,\n // },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ...(FIELDS['placement_agent']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : []),\n ]}\n />\n \n \n }\n placeholder={FIELDS['banking_agent'].name}\n wrapperCol={16}\n maxLength={60}\n rules={[\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ...(FIELDS['banking_agent']?.isRequired ? [{ required: true, message: 'This field is required!' }] : []),\n ]}\n />\n \n \n }\n placeholder={FIELDS['custodian'].name}\n wrapperCol={16}\n maxLength={60}\n rules={[\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ...(FIELDS['custodian']?.isRequired ? [{ required: true, message: 'This field is required!' }] : []),\n ]}\n />\n \n \n }\n placeholder={FIELDS['consultant'].name}\n wrapperCol={16}\n maxLength={60}\n rules={[\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ...(FIELDS['consultant']?.isRequired ? [{ required: true, message: 'This field is required!' }] : []),\n ]}\n />\n \n \n \n )\n}\n\nRequiredDataHelper.default().registerRequirement(\n LeftNavExFundEnum.SERVICE_PROVIDERS,\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundServiceProviderFieldsType].isRequired),\n)\n","import { Col, Radio, Row } from 'antd'\nimport Form, { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemInput, FormItemRadio, FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFund } from '../../../shared/components/RenderLabelExFund'\nimport { useFieldValidate } from '../../../shared/hooks/useEffectFieldValidate'\nimport { LeftNavExFundEnum } from '../../../shared/SearchExFundLabel'\nimport { FormFieldType } from '../ExFundDetailMain'\nimport { RequiredDataHelper } from '../RequiredDataHelper'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n flex-direction: column;\n padding: 0 2rem;\n`\n\ntype FundStructureFieldsType = Pick<\n FormFieldType,\n | 'investor_type'\n | 'equity_subscription'\n | 'subscription_advance_notice'\n | 'subscription_cutoff_time'\n | 'subscription_cutoff_timezone'\n | 'subscription_settlement_days'\n | 'equity_redemption'\n | 'redemption_advance_notice'\n | 'is_lockup'\n | 'lockup_type'\n | 'lockup_period'\n | 'redemption_return_percent'\n | 'redemption_return_days'\n | 'balance_redemption_return_days'\n | 'gate_fund'\n | 'gate_investor'\n | 'performance_reporting'\n | 'use_of_leverage_type'\n | 'bloomberg_ticker'\n | 'isin'\n | 'is_offshore'\n | 'domicile'\n | 'structure'\n | 'registration_code'\n>\n\nconst FIELDS: FundStructureFieldsType = {\n is_offshore: {\n key: 'is_offshore',\n name: 'Please Choose One',\n },\n domicile: {\n key: 'domicile',\n name: 'Domicile Of The Fund',\n isRequired: true,\n },\n structure: {\n key: 'structure',\n name: 'Structure',\n isRequired: true,\n },\n registration_code: {\n key: 'registration_code',\n name: 'Fund Registration',\n isRequired: true,\n },\n investor_type: {\n key: 'investor_type',\n name: 'Open To Investor Type',\n isRequired: true,\n },\n equity_subscription: {\n key: 'equity_subscription',\n name: 'Subscription Frequency',\n isRequired: true,\n },\n subscription_advance_notice: {\n key: 'subscription_advance_notice',\n name: 'Subscription Advanced Notice (Days)',\n isRequired: true,\n },\n subscription_cutoff_time: {\n key: 'subscription_cutoff_time',\n name: 'Subscription Cut Off By (Time)',\n isRequired: true,\n },\n subscription_cutoff_timezone: {\n key: 'subscription_cutoff_timezone',\n name: 'Subscription Cut Off By (Time Zone)',\n isRequired: true,\n },\n subscription_settlement_days: {\n key: 'subscription_settlement_days',\n name: 'Subscription Settlement (Days)',\n isRequired: true,\n },\n equity_redemption: {\n key: 'equity_redemption',\n name: 'Redemption Frequency',\n isRequired: true,\n },\n redemption_advance_notice: {\n key: 'redemption_advance_notice',\n name: 'Redemption Advanced Notice (Days)',\n isRequired: true,\n },\n is_lockup: {\n key: 'is_lockup',\n name: 'Lockup',\n isRequired: true,\n },\n lockup_type: {\n key: 'lockup_type',\n name: 'Lockup Type',\n isRequired: true,\n },\n lockup_period: {\n key: 'lockup_period',\n name: 'Lockup Period',\n isRequired: true,\n },\n redemption_return_percent: {\n key: 'redemption_return_percent',\n name: 'Initial % Of Redemption Returned',\n isRequired: true,\n },\n redemption_return_days: {\n key: 'redemption_return_days',\n name: 'Initial Redemption Returned Within (Days)',\n isRequired: true,\n },\n balance_redemption_return_days: {\n key: 'balance_redemption_return_days',\n name: 'Redemption Balance Returned Within (Days)',\n isRequired: true,\n },\n gate_fund: {\n key: 'gate_fund',\n name: 'Gate: Fund-Level',\n isRequired: true,\n },\n gate_investor: {\n key: 'gate_investor',\n name: 'Gate: Investor-Level',\n isRequired: true,\n },\n performance_reporting: {\n key: 'performance_reporting',\n name: 'Performance Reporting Interval',\n },\n use_of_leverage_type: {\n key: 'use_of_leverage_type',\n name: 'Leverage Type',\n isRequired: true,\n },\n bloomberg_ticker: {\n key: 'bloomberg_ticker',\n name: 'Ticker',\n },\n isin: {\n key: 'isin',\n name: 'ISIN',\n },\n}\n\ntype Props = {\n isDirty: boolean\n form: FormInstance\n onUpdateTabDirty: (id: LeftNavExFundEnum, isDirty: boolean) => void\n}\n\nexport const ExFundStructure: React.FC = ({ isDirty, form, onUpdateTabDirty }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const fundStatusField = form.getFieldValue('fund_status_code')\n\n useFieldValidate(\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundStructureFieldsType].isRequired),\n isDirty,\n form,\n onUpdateTabDirty,\n LeftNavExFundEnum.FUND_STRUCTURE,\n )\n\n const LIST_FORM = [\n {\n name: FIELDS['investor_type'].key,\n label: FIELDS['investor_type'].name,\n options:\n fundDataDropdown?.investor_type && fundDataDropdown.investor_type.length > 0\n ? fundDataDropdown.investor_type.map((item) => ({ value: item, text: item }))\n : [],\n rules: FIELDS['investor_type']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['equity_subscription'].key,\n label: FIELDS['equity_subscription'].name,\n options:\n fundDataDropdown?.equity_subscription && fundDataDropdown.equity_subscription.length > 0\n ? fundDataDropdown.equity_subscription.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n rules: FIELDS['equity_subscription']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['subscription_advance_notice'].key,\n label: FIELDS['subscription_advance_notice'].name,\n options:\n fundDataDropdown?.subscription_advance_notice && fundDataDropdown.subscription_advance_notice.length > 0\n ? fundDataDropdown.subscription_advance_notice.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: FIELDS['subscription_advance_notice']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['subscription_cutoff_time'].key,\n label: FIELDS['subscription_cutoff_time'].name,\n options:\n fundDataDropdown?.subscription_cutoff_time && fundDataDropdown.subscription_cutoff_time.length > 0\n ? fundDataDropdown.subscription_cutoff_time.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: FIELDS['subscription_cutoff_time']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['subscription_cutoff_timezone'].key,\n label: FIELDS['subscription_cutoff_timezone'].name,\n options:\n fundDataDropdown?.subscription_cutoff_timezone && fundDataDropdown.subscription_cutoff_timezone.length > 0\n ? fundDataDropdown.subscription_cutoff_timezone.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: FIELDS['subscription_cutoff_timezone']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['subscription_settlement_days'].key,\n label: FIELDS['subscription_settlement_days'].name,\n options:\n fundDataDropdown?.subscription_settlement_days && fundDataDropdown.subscription_settlement_days.length > 0\n ? fundDataDropdown.subscription_settlement_days.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: FIELDS['subscription_settlement_days']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['equity_redemption'].key,\n label: FIELDS['equity_redemption'].name,\n options:\n fundDataDropdown?.equity_redemption && fundDataDropdown.equity_redemption.length > 0\n ? fundDataDropdown.equity_redemption.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: FIELDS['equity_redemption']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['redemption_advance_notice'].key,\n label: FIELDS['redemption_advance_notice'].name,\n typeField: 'number',\n normalize: 'number',\n rules: FIELDS['redemption_advance_notice']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['is_lockup'].key,\n label: FIELDS['is_lockup'].name,\n isRadio: true,\n rules: FIELDS['is_lockup']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['lockup_type'].key,\n label: FIELDS['lockup_type'].name,\n options:\n fundDataDropdown?.lockup_type && fundDataDropdown.lockup_type.length > 0\n ? fundDataDropdown.lockup_type\n .filter((i) => i.code_code !== '0')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: RequiredDataHelper.default().isValidateField(LeftNavExFundEnum.FUND_STRUCTURE, FIELDS['lockup_type']?.key)\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['lockup_period'].key,\n label: FIELDS['lockup_period'].name,\n options:\n fundDataDropdown?.lockup_period && fundDataDropdown.lockup_period.length > 0\n ? fundDataDropdown.lockup_period.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: RequiredDataHelper.default().isValidateField(\n LeftNavExFundEnum.FUND_STRUCTURE,\n FIELDS['lockup_period']?.key,\n )\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['redemption_return_percent'].key,\n label: FIELDS['redemption_return_percent'].name,\n typeField: 'number',\n normalize: 'number',\n rules: FIELDS['redemption_return_percent']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['redemption_return_days'].key,\n label: FIELDS['redemption_return_days'].name,\n typeField: 'number',\n normalize: 'number',\n rules: FIELDS['redemption_return_days']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['balance_redemption_return_days'].key,\n label: FIELDS['balance_redemption_return_days'].name,\n typeField: 'number',\n normalize: 'number',\n rules: FIELDS['balance_redemption_return_days']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['gate_fund'].key,\n label: FIELDS['gate_fund'].name,\n options:\n fundDataDropdown?.gate_fund && fundDataDropdown.gate_fund.length > 0\n ? fundDataDropdown.gate_fund\n .filter((i) => i.code_code !== '0')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: FIELDS['gate_fund']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['gate_investor'].key,\n label: FIELDS['gate_investor'].name,\n options:\n fundDataDropdown?.gate_investor && fundDataDropdown.gate_investor.length > 0\n ? fundDataDropdown.gate_investor\n .filter((i) => i.code_code !== '0')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: FIELDS['gate_investor']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['performance_reporting'].key,\n label: FIELDS['performance_reporting'].name,\n options:\n fundDataDropdown?.performance_reporting && fundDataDropdown.performance_reporting.length > 0\n ? fundDataDropdown.performance_reporting.map((item) => ({\n value: item,\n text: item,\n }))\n : [],\n rules: FIELDS['performance_reporting']?.isRequired\n ? [{ required: true, message: 'This field is required!' }]\n : [],\n },\n {\n name: FIELDS['use_of_leverage_type'].key,\n label: FIELDS['use_of_leverage_type'].name,\n options:\n fundDataDropdown?.use_of_leverage_type && fundDataDropdown.use_of_leverage_type.length > 0\n ? fundDataDropdown.use_of_leverage_type.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n disabled: item.code_code === '5',\n }))\n : [],\n rules: FIELDS['use_of_leverage_type']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['bloomberg_ticker'].key,\n label: FIELDS['bloomberg_ticker'].name,\n maxLength: 20,\n rules: FIELDS['bloomberg_ticker']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n {\n name: FIELDS['isin'].key,\n label: FIELDS['isin'].name,\n maxLength: 20,\n rules: FIELDS['isin']?.isRequired ? [{ required: true, message: 'This field is required!' }] : [],\n },\n ]\n const lockupField = form.getFieldValue('is_lockup') === '1'\n const isLiquidCheck = form.getFieldValue('liquid_alt_product') as boolean\n\n React.useEffect(() => {\n if (lockupField) {\n RequiredDataHelper.default().addRequiredFields({\n 'Fund Structure': ['lockup_type', 'lockup_period'],\n })\n } else {\n RequiredDataHelper.default().removeRequiredFields({\n 'Fund Structure': ['lockup_type', 'lockup_period'],\n })\n }\n }, [lockupField])\n\n return (\n \n {!isLiquidCheck && (\n \n \n }\n {...{ wrapperCol: { span: 16 } }}\n >\n \n U.S.\n Offshore\n \n \n \n \n }\n wrapperCol={16}\n options={\n fundDataDropdown?.domicile && fundDataDropdown.domicile.length > 0\n ? fundDataDropdown.domicile.map((item) => ({ value: item, text: item }))\n : []\n }\n />\n \n \n }\n wrapperCol={16}\n options={\n fundDataDropdown?.structure && fundDataDropdown.structure.length > 0\n ? fundDataDropdown.structure.map((item) => ({ value: item, text: item }))\n : []\n }\n />\n \n \n }\n wrapperCol={16}\n options={\n fundDataDropdown?.registration_code && fundDataDropdown.registration_code.length > 0\n ? fundDataDropdown.registration_code.map((item) => ({ value: item, text: item }))\n : []\n }\n />\n \n \n )}\n \n {LIST_FORM.map((item) => {\n if (item.name === 'redemption_return_percent' || item.name === 'redemption_return_days') {\n return (\n \n }\n wrapperCol={16}\n maxLength={item.maxLength ? item.maxLength : undefined}\n normalize={item.normalize}\n typeField={item.typeField}\n rules={[\n ...item.rules,\n item.name === 'redemption_return_percent'\n ? () => ({\n validator(rule, value) {\n if ((value >= 0 && value <= 100) || value === null) {\n return Promise.resolve()\n }\n return Promise.reject('Value must be between 0 and 100!')\n },\n })\n : () => ({\n validator(rule, value) {\n if (value >= 0 || value === null) {\n return Promise.resolve()\n }\n return Promise.reject('Value must be greater than or equal to 0!')\n },\n }),\n ]}\n />\n \n )\n }\n if ((item.name === 'lockup_period' || item.name === 'lockup_type') && !lockupField) {\n return null\n }\n\n return (\n \n {item.isRadio ? (\n }\n rules={item.rules}\n options={\n fundDataDropdown?.is_lockup && fundDataDropdown.is_lockup.length > 0\n ? fundDataDropdown.is_lockup\n .filter((i) => i.code_code !== '0')\n .map((item) => ({ value: item.code_code, title: item.code_description }))\n : []\n }\n />\n ) : item.options ? (\n }\n wrapperCol={16}\n options={item.options}\n rules={item.rules}\n selectProps={{ listHeight: item.name === 'use_of_leverage_type' ? 150 : undefined }}\n />\n ) : (\n }\n wrapperCol={16}\n maxLength={item.maxLength ? item.maxLength : undefined}\n normalize={item.normalize}\n typeField={item.typeField}\n rules={item.rules}\n />\n )}\n \n )\n })}\n \n \n )\n}\n\nRequiredDataHelper.default().registerRequirement(\n LeftNavExFundEnum.FUND_STRUCTURE,\n Object.keys(FIELDS).filter((item) => FIELDS[item as keyof FundStructureFieldsType].isRequired),\n)\n","import React, { useEffect } from 'react'\nimport styled from 'styled-components'\nimport { FundFamilyTable, FundFamilyType } from '../../../shared/components/FundFamilyTable'\nimport { FundDetailDataContext } from '../../../shared/api/context/FundDetailDataContext'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../../app/rootReducer'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport APIService from '../../../shared/api'\n\nconst Flex = styled.div`\n flex: 1;\n display: flex;\n`\n\ntype Props = {}\nexport const ExFundFamily: React.FC = () => {\n const { dataFundDetail, fundDataDropdown, loading } = React.useContext(FundDetailDataContext)\n\n const { strategies: strategyOptions, subStrategies: subStrategyOptions } = useSelector(\n (state: RootState) => state.appData,\n )\n const { invoke: getFundOfFirm, data: dataFundsFirm, loading: loadingFundOfFirms } = useServiceState(\n APIService.firmDetailService.fetchFundsOfFirm,\n )\n //\n useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getFundOfFirm(dataFundDetail.firm_id)\n }, [dataFundDetail])\n ///////////////////////\n // map fund family data\n ///////////////////////\n const fundFamilyData = React.useMemo(() => {\n if (!dataFundDetail || !dataFundsFirm || !fundDataDropdown || !strategyOptions || !subStrategyOptions) {\n return []\n }\n // get fund with the same fund family id\n const sameFamilyFunds = dataFundsFirm.filter((f) => {\n if (!dataFundDetail.fund_family_id) {\n return false\n }\n return (\n `${f.fund_id}` !== `${dataFundDetail.fund_id}` && `${f.fund_family_id}` === `${dataFundDetail.fund_family_id}`\n )\n })\n //\n const results = sameFamilyFunds.map((d) => {\n //\n const stategy_op = d.strategy_code ? strategyOptions.find((s) => s.strategy_code === d.strategy_code) : undefined\n const stategy_code = stategy_op?.strategy_name || ''\n //\n const sub_stategy_op = d.sub_strategy_code\n ? subStrategyOptions.find((s) => s.sub_strategy_code === d.sub_strategy_code)\n : undefined\n const sub_stategy_code = sub_stategy_op?.sub_strategy_name || ''\n //\n const region_inv_focus_op = d.region_inv_focus\n ? fundDataDropdown.region_inv_focus.find((s) => s.code_code === `${d.region_inv_focus}`)\n : undefined\n const region_inv_focus = region_inv_focus_op?.code_description || ''\n //\n const region_inv_focus_country_op = d.region_inv_focus_country\n ? fundDataDropdown.region_inv_focus_country.find((s) => s.code_code === `${d.region_inv_focus_country}`)\n : undefined\n const region_inv_focus_country = region_inv_focus_country_op?.code_description || ''\n //\n return {\n fund_id: d.fund_id,\n fund_name: d.fund_name,\n firm_id: d.firm_id,\n firm_name: d.firm_name,\n fund_family_id: d.fund_family_id,\n fund_family_code: d.fund_family_code || '',\n strategy_code: stategy_code,\n sub_strategy_code: sub_stategy_code,\n region_inv_focus,\n region_inv_focus_country,\n } as FundFamilyType\n })\n // get data from data fund detail\n const stategy_op = dataFundDetail.strategy_code_new\n ? strategyOptions.find((s) => s.strategy_code === dataFundDetail.strategy_code_new)\n : null\n const stategy_code = stategy_op?.strategy_name\n //\n const sub_stategy_op = dataFundDetail.sub_strategy_code_new\n ? subStrategyOptions.find((s) => s.sub_strategy_code === dataFundDetail.sub_strategy_code_new)\n : null\n const sub_stategy_code = sub_stategy_op?.sub_strategy_name\n //\n const region_inv_focus_op = dataFundDetail.region_inv_focus\n ? fundDataDropdown.region_inv_focus.find((s) => s.code_code === dataFundDetail.region_inv_focus)\n : null\n const region_inv_focus = region_inv_focus_op?.code_description\n //\n const region_inv_focus_country_op = dataFundDetail.region_inv_focus_country\n ? fundDataDropdown.region_inv_focus_country.find((s) => s.code_code === dataFundDetail.region_inv_focus_country)\n : null\n const region_inv_focus_country = region_inv_focus_country_op?.code_description\n //\n return [\n {\n fund_id: dataFundDetail.fund_id,\n fund_name: dataFundDetail.fund_name,\n firm_id: dataFundDetail.firm_id,\n firm_name: dataFundDetail.firm_name,\n fund_family_id: dataFundDetail.fund_family_id,\n fund_family_code: dataFundDetail.fund_family_code,\n strategy_code: stategy_code,\n sub_strategy_code: sub_stategy_code,\n region_inv_focus,\n region_inv_focus_country,\n } as FundFamilyType,\n ...results,\n ]\n }, [dataFundDetail, dataFundsFirm, strategyOptions, subStrategyOptions, fundDataDropdown])\n\n return (\n \n \n \n )\n}\n","import { CheckCircleTwoTone, EditOutlined, EditTwoTone, WarningTwoTone } from '@ant-design/icons'\nimport { Card, Col, Empty, Form, notification, Row, Tooltip } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport { useForm } from 'antd/lib/form/util'\nimport moment from 'moment'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { ExFundDetailLabelSearchProvider } from '../../shared/api/context/ExFundDetailLabelSearchContext'\nimport { FundDetailDataContext, PERFORMANCE_REQUEST_ENUM } from '../../shared/api/context/FundDetailDataContext'\nimport { ExFundFieldChange, FundDetails } from '../../shared/api/models/FundDetails'\nimport { TrackingEventSource } from '../../shared/api/services/event.service'\nimport { Colors } from '../../shared/colors'\nimport FFPerfectScrollbar from '../../shared/components/FFPerfectScrollbar'\nimport FundDetailsPreview from '../../shared/components/FundDetailPreview/FundDetailPreview'\nimport { FundESGSection, MODE_ESG_VIEW } from '../../shared/components/FundESGSection'\nimport { LoadingDetails } from '../../shared/components/LoadingDetails'\nimport { TabContentWrapper } from '../../shared/components/TabContentWrapper'\nimport { ViewModeType } from '../../shared/DraftManager'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { LeftNavExFirmEnum } from '../../shared/SearchExFirmLabel'\nimport { LeftNavExFundEnum, SEARCH_FIELD_INDEX } from '../../shared/SearchExFundLabel'\nimport { PREFIX_EXTERNAL, updateSelectedNav, updateTabTitle } from '../../slice/appSettingsSlice'\nimport CCMC from '../Dashboard/FundDetail/CCMC/CCMC'\nimport CMIC from '../Dashboard/FundDetail/CMIC/CMIC'\nimport DataConfirmationModal from './DataConfirmationModal'\nimport { ExFundCardTitle } from './ExFundCardTitle'\nimport { ExFundContact } from './ExFundDetail/ExFundContact'\nimport { ExFundDetail } from './ExFundDetail/ExFundDetail'\nimport ExFundDI from './ExFundDetail/ExFundDI'\nimport { ExFundFeeSchedule } from './ExFundDetail/ExFundFeeSchedule'\nimport { ExFundIndustry } from './ExFundDetail/ExFundIndustry'\nimport { ExFundInstruments } from './ExFundDetail/ExFundInstruments'\nimport { ExFundInvestmentStrategy } from './ExFundDetail/ExFundInvestmentStrategy'\nimport { ExFundInvestorType } from './ExFundDetail/ExFundInvestorType'\nimport { ExFundOverview } from './ExFundDetail/ExFundOverview'\nimport { ExFundPerformance } from './ExFundDetail/ExFundPerformance'\nimport { ExFundPrincipals } from './ExFundDetail/ExFundPrincipals'\nimport { ExFundRegions } from './ExFundDetail/ExFundRegions'\nimport { ExFundServiceProviders } from './ExFundDetail/ExFundServiceProviders'\nimport { ExFundStructure } from './ExFundDetail/ExFundStructure'\nimport { RequiredDataHelper, RequiredFieldType } from './RequiredDataHelper'\nimport { validateLatestPerformance } from './utils/validateData'\nimport { ExFundFamily } from './ExFundDetail/ExFundFamily'\n\nconst StyledCard = styled(Card)`\n overflow: hidden;\n\n .ant-card-head {\n padding: 0 1rem;\n }\n\n .ant-card-head-title {\n padding: 0;\n }\n\n .ant-card-body {\n padding: 0;\n overflow: hidden;\n }\n\n .ant-card-head {\n border-bottom: 2px solid #f0f0f0 !important;\n }\n`\nconst StyledForm = styled(Form)`\n flex: 1;\n overflow: hidden;\n height: 100%;\n\n .ant-form-item {\n margin-bottom: 8px;\n }\n`\n\nconst StyledTabList = styled.div<{ active?: boolean }>`\n background: ${(props) => (props.active ? '#EDF6FF' : '#fff')};\n font-weight: ${(props) => (props.active ? 'bold' : 'none')};\n display: flex;\n flex: 1;\n align-items: center;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n border-top: none;\n padding: 1rem 1rem 1rem 3rem;\n\n :hover {\n cursor: pointer;\n }\n`\n\nexport enum TAB_STATUS_ENUM {\n WARNING,\n SUCCESS,\n DEFAULT,\n EDIT,\n}\n\nconst TAB_LIST = [\n {\n id: LeftNavExFundEnum.FUND_OVERVIEW,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n extra: '',\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.FUND_PERFORMANCE,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.FUND_DETAIL,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.INVESTMENT_STRATEGY,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.FEE_SCHEDULE,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.SERVICE_PROVIDERS,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.FUND_STRUCTURE,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.FUND_ESG_FACTORS,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.FUND_DIVERITY_INCLUSION,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.FUND_PRINCIPALS,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.FUND_CONTACT,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.INSTRUMENTS,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.REGIONS,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.INDUSTRY,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.INVESTOR_TYPE,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.FUND_CMIC,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n {\n id: LeftNavExFundEnum.FUND_FAMILY,\n status: TAB_STATUS_ENUM.DEFAULT,\n isDirty: false,\n tooltipText: '',\n isEdited: false,\n },\n]\n\nexport type FormFieldType = {\n [key in keyof FundDetails]: {\n key: keyof FundDetails\n name: string\n isRequired?: boolean\n maxLength?: number\n disabled?: boolean\n }\n}\nconst numberDateField = ['min_invest', 'add_invest', 'min_invest_indv']\n\nexport const EXFUND_DATE_FIELDS = ['last_audit_date', 'firm_assets_date', 'inception_date']\n\ntype Props = {\n setShouldUpdate?: (value: boolean) => void\n selectedTab: LeftNavExFundEnum | LeftNavExFirmEnum\n setViewMode?: (value: ViewModeType) => void\n disableSnapshot?: boolean\n isPreview?: boolean\n previewTab?: string\n}\n\nexport const ExFundDetailMain: React.FC = ({\n setShouldUpdate,\n selectedTab,\n setViewMode,\n disableSnapshot,\n isPreview,\n previewTab,\n}) => {\n const [showPreview, setShowPreview] = React.useState(!!isPreview)\n\n useEffect(() => {\n setShowPreview(!!isPreview)\n }, [isPreview])\n\n const {\n dataFundDetail,\n loading,\n refetch,\n dataLatestPerformance,\n performanceDataChange,\n setPerformanceDataChange,\n rorDataChange,\n setRORDataChange,\n navDataChange,\n setNAVDataChange,\n getPerformanceRequest,\n setAssetDataChange,\n assetDataChange,\n dataFundDetailChange,\n setDataFundDetailChange,\n snapshot,\n clearSnapshot,\n dataChanged,\n setDataChanged,\n fundDataDropdown,\n } = React.useContext(FundDetailDataContext)\n\n const [optionFilter, setOptionFilter] = React.useState(SEARCH_FIELD_INDEX)\n const [textFilterSearch, setTextFilterSearch] = React.useState('')\n const [loadingSubmitForm, setLoadingSubmitForm] = React.useState(false)\n const [isUpdateFund, setIsUpdateFund] = React.useState(false)\n const [activeTab, setActiveTab] = React.useState(selectedTab)\n\n const [tabList, setTabList] = React.useState(TAB_LIST)\n\n const [form] = useForm()\n\n const { invoke: getFundTableDropdown, data: dataTableDropdown } = useServiceState(\n APIService.fundDetailService.fetchFundTableDropdown,\n )\n const { invoke: getPrincipals, data: principalData } = useServiceState(\n APIService.fundDetailService.fetchFundPrincipals,\n )\n const { invoke: getInstruments, data: instrumentData } = useServiceState(\n APIService.fundDetailService.fetchFundInstruments,\n )\n\n const { invoke: getRegionWeights, data: regionWeightData } = useServiceState(\n APIService.fundDetailService.fetchFundRegionWeights,\n )\n const { invoke: getIndustry, data: industryData } = useServiceState(\n APIService.fundDetailService.fetchFundIndustryGroups,\n )\n const { invoke: getInvestorType, data: investorTypeData } = useServiceState(\n APIService.fundDetailService.fetchFundInvestorTypes,\n )\n\n const [flaggedRors, setFlaggedRors] = useState<{ date: string; value: number }[]>()\n const [flaggedAssets, setFlaggedAssets] = useState<{ date: string; value: number }[]>()\n\n const { invoke: getAllMinorityTypes, data: minorityTypes } = useServiceState(\n APIService.minorityService.fetchMinorityTypes,\n )\n\n const firmCountry = fundDataDropdown?.firm_contact_country.find(\n (item) => item.code_code === dataFundDetail?.firm_contact_country,\n )\n\n React.useEffect(() => {\n const contryCode = dataFundDetail?.firm_contact_country\n if (!contryCode) {\n return\n }\n getAllMinorityTypes(contryCode)\n }, [dataFundDetail?.firm_contact_country, getAllMinorityTypes])\n\n const { invoke: getFundMinority, data: dataFundMinority } = useServiceState(\n APIService.minorityService.fetchFundMinorityStatuses,\n )\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getFundMinority(dataFundDetail.fund_id)\n }, [dataFundDetail, getFundMinority])\n\n React.useEffect(() => {\n const fundMinorityStatuses = dataFundMinority?.fund_minority_statuses\n if (fundMinorityStatuses?.length) {\n fundMinorityStatuses?.map((item) => form.setFieldsValue({ [`minority_type_${item.minority_type}`]: item.status }))\n }\n }, [dataFundMinority, form])\n\n React.useEffect(() => {\n dataFundDetail?.fund_id && getPrincipals(dataFundDetail.fund_id)\n }, [dataFundDetail, getPrincipals])\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getInstruments(dataFundDetail.fund_id)\n }, [getInstruments, dataFundDetail])\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getRegionWeights(dataFundDetail.fund_id)\n }, [getRegionWeights, dataFundDetail])\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getIndustry(dataFundDetail.fund_id)\n }, [getIndustry, dataFundDetail])\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getInvestorType(dataFundDetail.fund_id)\n }, [getInvestorType, dataFundDetail])\n\n React.useEffect(() => {\n getFundTableDropdown()\n }, [getFundTableDropdown])\n\n const numberWithCommas = (x: string) => {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n }\n\n const handleUpdateDirty = React.useCallback((id: LeftNavExFundEnum, isDirty: boolean) => {\n setTabList((prev) => {\n const selectedIndex = prev.findIndex((item) => item.id === id)\n if (selectedIndex === -1) {\n return prev\n }\n return [\n ...prev.slice(0, selectedIndex),\n { ...prev[selectedIndex], isDirty },\n ...prev.slice(selectedIndex + 1, prev.length),\n ]\n })\n }, [])\n\n //Start set required field\n const lockupField = form.getFieldValue('is_lockup') === '1'\n\n React.useEffect(() => {\n if (lockupField) {\n RequiredDataHelper.default().addRequiredFields({\n 'Fund Structure': ['lockup_type', 'lockup_period'],\n })\n } else {\n RequiredDataHelper.default().removeRequiredFields({\n 'Fund Structure': ['lockup_type', 'lockup_period'],\n })\n }\n }, [lockupField])\n\n const checkHurdleRate = form.getFieldValue('is_hurdle_rate')\n\n React.useEffect(() => {\n if (checkHurdleRate) {\n RequiredDataHelper.default().addRequiredFields({\n 'Fee Schedule': ['hurdle_rate'],\n })\n } else {\n RequiredDataHelper.default().removeRequiredFields({\n 'Fee Schedule': ['hurdle_rate'],\n })\n }\n }, [checkHurdleRate])\n\n const acceptMgdAcct = form.getFieldValue('accepts_mgd_accts')\n\n React.useEffect(() => {\n if (acceptMgdAcct === '2') {\n RequiredDataHelper.default().removeRequiredFields({\n 'Fund Detail': ['min_invest_indv'],\n })\n } else {\n RequiredDataHelper.default().addRequiredFields({\n 'Fund Detail': ['min_invest_indv'],\n })\n }\n }, [acceptMgdAcct])\n\n const liquidAltProduct = form.getFieldValue('liquid_alt_product')\n\n React.useEffect(() => {\n if (liquidAltProduct) {\n RequiredDataHelper.default().addRequiredFields({\n 'Fund Detail': ['liquid_alt_type', 'liquid_alt_region'],\n 'Fee Schedule': ['max_12b1_fee', 'max_front_fee', 'max_deferred_fee'],\n })\n RequiredDataHelper.default().removeRequiredFields({\n 'Fund Structure': ['domicile', 'structure', 'registration_code'],\n 'Fee Schedule': ['incentive_fee', 'is_high_watermark', 'hurdle_rate'],\n })\n } else {\n RequiredDataHelper.default().removeRequiredFields({\n 'Fund Detail': ['liquid_alt_type', 'liquid_alt_region'],\n 'Fee Schedule': ['max_12b1_fee', 'max_front_fee', 'max_deferred_fee'],\n })\n\n RequiredDataHelper.default().addRequiredFields({\n 'Fund Structure': ['domicile', 'structure', 'registration_code'],\n 'Fee Schedule': ['incentive_fee', 'is_high_watermark'],\n })\n }\n }, [liquidAltProduct])\n\n //End set required field\n\n React.useEffect(() => {\n setActiveTab(selectedTab)\n }, [selectedTab])\n\n React.useEffect(() => {\n if (form && snapshot && !disableSnapshot) {\n form.setFieldsValue(snapshot)\n\n // @ts-ignore\n form.draft = snapshot\n\n setIsUpdateFund(true)\n }\n }, [form, snapshot, setIsUpdateFund, disableSnapshot])\n\n const dataChangeRef = dataFundDetailChange?.current\n\n React.useEffect(() => {\n if (dataChangeRef) {\n Object.keys(dataChangeRef).map((item) => {\n const leftNav = SEARCH_FIELD_INDEX.find((i) => i.key === item)?.leftNav\n const index = leftNav ? TAB_LIST.findIndex((tab) => tab.id === leftNav) : -1\n if (index > -1) {\n setTabList((prev) => {\n return [...prev.slice(0, index), { ...prev[index], isEdited: true }, ...prev.slice(index + 1, prev.length)]\n })\n }\n })\n }\n }, [dataChangeRef])\n\n const dispatch = useDispatch()\n\n React.useEffect(() => {\n if (\n (performanceDataChange && Object.keys(performanceDataChange).length > 0) ||\n rorDataChange.values ||\n navDataChange.values ||\n assetDataChange.values\n ) {\n setIsUpdateFund(true)\n }\n }, [navDataChange, rorDataChange, assetDataChange, performanceDataChange])\n\n React.useEffect(() => {\n if (dataFundDetail) {\n dispatch(\n updateTabTitle({ tabName: dataFundDetail.fund_name, id: `${PREFIX_EXTERNAL}-${dataFundDetail.fund_id}` }),\n )\n }\n }, [dataFundDetail, dispatch])\n\n const initialDataForm = React.useMemo(() => {\n return (\n dataFundDetail && {\n ...dataFundDetail,\n fund_assets_date: dataFundDetail.fund_assets_date ? moment(dataFundDetail.fund_assets_date) : null,\n last_audit_date: dataFundDetail.last_audit_date ? moment(dataFundDetail.last_audit_date) : null,\n firm_assets_date: dataFundDetail.firm_assets_date ? moment(dataFundDetail.firm_assets_date) : null,\n inception_date: dataFundDetail.inception_date ? moment(dataFundDetail.inception_date) : null,\n min_invest: dataFundDetail.min_invest ? numberWithCommas(dataFundDetail.min_invest) : null,\n add_invest: dataFundDetail.add_invest ? numberWithCommas(dataFundDetail.add_invest) : null,\n min_invest_indv: dataFundDetail.min_invest_indv ? numberWithCommas(dataFundDetail.min_invest_indv) : null,\n ...dataFundMinority?.fund_minority_statuses.reduce((acc, item) => {\n return {\n ...acc,\n [`minority_type_${item.minority_type}`]: item.status,\n }\n }, {}),\n }\n )\n }, [dataFundDetail])\n\n const checkFields = useCallback(() => {\n if (initialDataForm && dataChanged) {\n const errorFields = RequiredDataHelper.default().checkFormData(form)\n const requiredFields = RequiredDataHelper.default().requiredFields\n\n const allErrorFieldsNumber = Object.keys(errorFields).reduce((acc, curr) => {\n const currentTabFields = errorFields[curr as keyof RequiredFieldType]\n if (!curr || !currentTabFields) {\n return acc\n }\n return acc + currentTabFields.length\n }, 0)\n const allRequiredFieldsNumber = Object.keys(requiredFields).reduce((acc, curr) => {\n const currentTabFields = requiredFields[curr as keyof RequiredFieldType]\n if (!curr || !currentTabFields) {\n return acc\n }\n return acc + currentTabFields.length\n }, 0)\n\n setTabList((prev) => {\n return prev.map((tabItem) => {\n switch (tabItem.id) {\n case LeftNavExFundEnum.FUND_OVERVIEW:\n return {\n id: LeftNavExFundEnum.FUND_OVERVIEW,\n isDirty: true,\n isEdited: tabItem.isEdited,\n status: allErrorFieldsNumber === 0 ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n tooltipText: `${\n allRequiredFieldsNumber - allErrorFieldsNumber\n } of ${allRequiredFieldsNumber} Fields Completed`,\n extra: `${Math.round(\n ((allRequiredFieldsNumber - allErrorFieldsNumber) / allRequiredFieldsNumber) * 100,\n )}% Completed`,\n }\n case LeftNavExFundEnum.FUND_ESG_FACTORS:\n return {\n ...tabItem,\n status: form.getFieldValue('is_fund_esg') != null ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFundEnum.FUND_DIVERITY_INCLUSION:\n const isMinorityManagedFund = form.getFieldValue('is_minority_or_woman_managed_fund')\n return {\n ...tabItem,\n status: isMinorityManagedFund !== null ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFundEnum.FUND_PRINCIPALS:\n return {\n ...tabItem,\n status: principalData && principalData?.length > 0 ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFundEnum.INSTRUMENTS:\n return {\n ...tabItem,\n status:\n instrumentData && instrumentData?.length > 0 ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFundEnum.REGIONS:\n return {\n ...tabItem,\n status:\n regionWeightData && regionWeightData?.length > 0 ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFundEnum.INDUSTRY:\n return {\n ...tabItem,\n status: industryData && industryData?.length > 0 ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFundEnum.INVESTOR_TYPE:\n return {\n ...tabItem,\n status:\n investorTypeData && investorTypeData?.length > 0 ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFundEnum.FUND_CMIC:\n return {\n ...tabItem,\n status:\n form.getFieldValue('has_securities') != null ||\n form.getFieldValue('manager_confirms') != null ||\n form.getFieldValue('separate_share_classes') != null ||\n form.getFieldValue('pre_trade_compliance_restrictions') != null ||\n form.getFieldValue('other_measures') != null\n ? TAB_STATUS_ENUM.SUCCESS\n : TAB_STATUS_ENUM.DEFAULT,\n }\n default:\n const tabRequiredFieldsNumber = requiredFields[tabItem.id]?.length || 0\n const tabErrorFieldsNumber = errorFields[tabItem.id]?.length || 0\n return {\n ...tabItem,\n tooltipText:\n tabRequiredFieldsNumber > 0\n ? `${tabRequiredFieldsNumber - tabErrorFieldsNumber} of ${tabRequiredFieldsNumber} Fields Completed`\n : '',\n status:\n tabItem.status === TAB_STATUS_ENUM.EDIT\n ? TAB_STATUS_ENUM.EDIT\n : !errorFields[tabItem.id]\n ? TAB_STATUS_ENUM.DEFAULT\n : errorFields[tabItem.id]?.length === 0\n ? TAB_STATUS_ENUM.SUCCESS\n : TAB_STATUS_ENUM.WARNING,\n }\n }\n })\n })\n }\n }, [\n initialDataForm,\n dataChanged,\n form,\n principalData,\n instrumentData,\n regionWeightData,\n industryData,\n investorTypeData,\n ])\n\n useEffect(() => {\n checkFields()\n }, [checkFields])\n\n React.useEffect(() => {\n if (!setViewMode) {\n setActiveTab(selectedTab)\n }\n }, [selectedTab, setViewMode])\n\n React.useEffect(() => {\n if (setViewMode || !dataFundDetail) {\n return\n }\n dispatch(\n updateSelectedNav({\n id: `${PREFIX_EXTERNAL}-${dataFundDetail.fund_id}`,\n activeNav: activeTab,\n }),\n )\n }, [activeTab, dataFundDetail, dispatch, setViewMode])\n\n const [showDiscardDataSheet, setShowDiscardDataSheet] = React.useState(false)\n\n const handleOk = () => {\n setShowDiscardDataSheet(false)\n handleSubmitForm()\n }\n\n const handleCancel = () => {\n setShowDiscardDataSheet(false)\n setFlaggedAssets(undefined)\n setFlaggedRors(undefined)\n }\n\n const handleSubmit = async () => {\n if (!validateLatestPerformance(performanceDataChange, dataLatestPerformance)) {\n return\n }\n if (!(await validateRORAUMData()) || !(await validatePerformanceData())) {\n setShowDiscardDataSheet(true)\n return\n }\n handleSubmitForm()\n }\n\n const updateLatestPerformance = async () => {\n if (\n performanceDataChange &&\n dataLatestPerformance &&\n Object.keys(performanceDataChange).length > 0 &&\n dataFundDetail\n ) {\n try {\n setLoadingSubmitForm(true)\n await APIService.fundService.updateLatestPerformance(dataFundDetail.fund_id, {\n rors: performanceDataChange.rorChanges,\n navs: performanceDataChange.navChanges,\n assets: performanceDataChange.assetChanges,\n })\n setIsUpdateFund(false)\n notification.success({ message: 'Quick Performance Updated' })\n setPerformanceDataChange(undefined)\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n setShouldUpdate && setShouldUpdate(true)\n if (performanceDataChange.rorChanges) {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ROR)\n }\n if (performanceDataChange.navChanges) {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.NAV)\n }\n if (performanceDataChange.assetChanges) {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ASSET)\n }\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n return true\n }\n }\n }\n\n const validatePerformanceData = async () => {\n if (\n !dataFundDetail ||\n dataFundDetail.fund_status_code !== '2' ||\n !performanceDataChange ||\n (!performanceDataChange.assetChanges && !performanceDataChange.rorChanges && !performanceDataChange.navChanges)\n ) {\n return true\n }\n const flaggedData = await APIService.fundService.validateLatestPerformance(dataFundDetail.fund_id, {\n rors:\n performanceDataChange.rorChanges && performanceDataChange.rorChanges.length > 0\n ? performanceDataChange.rorChanges.slice(1, performanceDataChange.rorChanges.length).map((item) => ({\n yyyy_mm: item.yyyy_mm,\n value: item.value,\n }))\n : undefined,\n navs:\n performanceDataChange.navChanges && performanceDataChange.navChanges.length > 0\n ? performanceDataChange.navChanges.slice(1, performanceDataChange.navChanges.length).map((item) => ({\n yyyy_mm: item.yyyy_mm,\n value: item.value,\n }))\n : undefined,\n assets:\n performanceDataChange.assetChanges && performanceDataChange.assetChanges.length > 0\n ? performanceDataChange.assetChanges.slice(1, performanceDataChange.assetChanges.length).map((item) => ({\n yyyy_mm: item.yyyy_mm,\n value: item.value,\n }))\n : undefined,\n })\n setFlaggedRors(flaggedData.data.flagged_rors.map((item) => ({ date: item[0], value: item[1] })))\n setFlaggedAssets(flaggedData.data.flagged_assets.map((item) => ({ date: item[0], value: item[1] })))\n\n return flaggedData.data.flagged_rors.length <= 0 && flaggedData.data.flagged_assets.length <= 0\n }\n\n const validateRORAUMData = async () => {\n if (\n !dataFundDetail ||\n dataFundDetail.fund_status_code !== '2' ||\n (!rorDataChange.values && !assetDataChange.values)\n ) {\n return true\n }\n const [isValidRor, isValidAsset] = await Promise.all([\n rorDataChange.values && rorDataChange.values?.length > 0\n ? APIService.fundDetailService\n .validateFundROR({\n fundId: dataFundDetail.fund_id,\n data: rorDataChange,\n })\n .then((res) => {\n setFlaggedRors(res.data.flagged_rors.map((item) => ({ date: item[0], value: item[1] })))\n return !(res.data.flagged_rors.length > 0)\n })\n : true,\n assetDataChange.values && assetDataChange.values?.length > 0\n ? APIService.fundDetailService\n .validateFundAsset({\n fundId: dataFundDetail.fund_id,\n data: assetDataChange,\n })\n .then((res) => {\n setFlaggedAssets(res.data.flagged_assets.map((item) => ({ date: item[0], value: item[1] })))\n return !(res.data.flagged_assets.length > 0)\n })\n : true,\n ])\n return isValidRor && isValidAsset\n }\n\n // const validateAssetData = async () => {\n // const dataChanges = assetDataChange.values\n // return !dataChanges.some((item) => {\n // if (item.isEdited) {\n // const prevMonthAsDate = moment(item.yyyy_mm, DATE_FORMAT).subtract(1, 'month').format(DATE_FORMAT)\n // const prevMonthValue = dataChanges.find((item) => item.yyyy_mm === prevMonthAsDate)?.value\n\n // const isWarning = isWarningAssetData(prevMonthValue, item.value)\n // return isWarning\n // }\n // return false\n // })\n // }\n\n const handleSubmitFailed = () => {\n handleSubmitForm(true)\n }\n\n const handleSubmitForm = async (isSubmittingFailed?: boolean) => {\n if (!dataFundDetail) {\n throw new Error('Fund Detail is not found')\n }\n const fundData = await APIService.fundDetailService.fetchFundBasicInfo(dataFundDetail.fund_id)\n\n if (isSubmittingFailed && fundData.data.fund_status_code === '2') {\n notification.warn({ message: 'Fund is active. Please fill in all required fields in this form!' })\n return\n }\n\n await updateLatestPerformance()\n\n if (rorDataChange.values && dataFundDetail) {\n try {\n setLoadingSubmitForm(true)\n rorDataChange &&\n (await APIService.fundDetailService.updateFundROR(\n dataFundDetail.fund_id,\n JSON.parse(JSON.stringify(rorDataChange)),\n ))\n // refetch data\n notification.success({ message: 'ROR Updated' })\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ROR)\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n setShouldUpdate && setShouldUpdate(true)\n setRORDataChange({ values: undefined })\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n\n if (navDataChange.values && dataFundDetail) {\n try {\n setLoadingSubmitForm(true)\n navDataChange &&\n (await APIService.fundDetailService.updateNAVROR(\n dataFundDetail.fund_id,\n JSON.parse(JSON.stringify(navDataChange)),\n ))\n // refetch data\n notification.success({ message: 'NAV Updated' })\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.NAV)\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n setShouldUpdate && setShouldUpdate(true)\n setNAVDataChange({ values: undefined })\n } catch (error) {\n console.error(error.response)\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n\n if (assetDataChange.values && dataFundDetail) {\n try {\n setLoadingSubmitForm(true)\n assetDataChange &&\n (await APIService.fundDetailService.updateAssetROR(\n dataFundDetail.fund_id,\n JSON.parse(JSON.stringify(assetDataChange)),\n ))\n // refetch data\n notification.success({ message: 'Assets Updated' })\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ASSET)\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n setShouldUpdate && setShouldUpdate(true)\n setAssetDataChange({ values: undefined })\n } catch (error) {\n console.error(error.response)\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n\n const dataFundDetailChangeObj = dataFundDetailChange?.current || {}\n\n const fieldChange: Partial = Object.keys(dataFundDetailChangeObj)\n .filter((key) => dataFundDetailChangeObj[key as keyof FundDetails] !== dataFundDetail[key as keyof FundDetails])\n .reduce((accum, key) => {\n switch (key) {\n case 'auditor_name_input':\n return { ...accum, auditor_name: dataFundDetailChangeObj.auditor_name_input }\n case 'legal_adviser_input':\n return { ...accum, legal_adviser: dataFundDetailChangeObj.legal_adviser_input }\n case 'prime_broker_input':\n return { ...accum, prime_broker: dataFundDetailChangeObj.prime_broker_input }\n case 'administrator_input':\n return { ...accum, administrator: dataFundDetailChangeObj.administrator_input }\n default:\n break\n }\n return {\n ...accum,\n [key]: dataFundDetailChangeObj[key as keyof FundDetails],\n }\n }, {})\n\n // Update minority types\n const dataMinority = Object.entries(fieldChange).filter((item) => item[0].includes('minority_type_'))\n\n // extract minority types out of field changes\n\n const dataChange: Partial = Object.entries(fieldChange)\n .filter((item) => !item[0].includes('minority_type_'))\n .reduce((acc, item) => {\n return {\n ...acc,\n [item[0]]: item[1],\n }\n }, {})\n\n const minorityChange = {\n updates: dataMinority.map((item) => {\n return {\n minority_type: +item[0].replace('minority_type_', ''),\n status: item[1] as boolean,\n }\n }),\n }\n if (minorityChange && minorityChange.updates.length > 0 && dataFundDetail) {\n APIService.minorityService\n .updateFundMinorityStatuses(dataFundDetail.fund_id, minorityChange)\n .then(() => {\n notification.success({ message: 'Diversity & Inclusion Updated!' })\n getFundMinority(dataFundDetail.fund_id)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n }\n\n const dataFinalUpload: Partial = Object.keys(dataChange).reduce((acc, key) => {\n if (key === 'strategy_code_new' && !fieldChange['strategy_code_new']) {\n return { ...acc, [key]: null, sub_strategy_code_new: null }\n }\n\n const value = dataChange[key as keyof Partial]\n if (EXFUND_DATE_FIELDS.includes(key) && value) {\n return { ...acc, [key]: moment(value as string).format('YYYY-MM-DD') }\n }\n\n return { ...acc, [key]: dataChange[key as keyof FundDetails] }\n }, {})\n\n // if fund active, do NOT update the following fields: inception date, strategy, substrategy, regional investment focus, sub-region focus\n // Ref: https://hfrsvc.atlassian.net/browse/HFRDB-2179\n if (fundData.data.fund_status_code === '2') {\n delete dataFinalUpload.inception_date\n delete dataFinalUpload.strategy_code_new\n delete dataFinalUpload.sub_strategy_code_new\n delete dataFinalUpload.region_inv_focus\n delete dataFinalUpload.region_inv_focus_country\n delete dataFinalUpload.is_emerging_markets_fund\n }\n\n if (dataFundDetail.fund_id && Object.keys(dataChange).length > 0) {\n setLoadingSubmitForm(true)\n APIService.fundDetailService\n .updateFundBasicInfo(dataFundDetail.fund_id, dataFinalUpload)\n .then(() => {\n notification.success({ message: 'Fund Updated!' })\n refetch()\n clearSnapshot()\n setShouldUpdate && setShouldUpdate(true)\n setIsUpdateFund(false)\n setDataFundDetailChange({})\n\n setTabList(\n tabList.map((item) => {\n return { ...item, isEdited: false }\n }),\n )\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n return\n } else {\n clearSnapshot()\n setIsUpdateFund(false)\n }\n }\n\n const resetRelativeFields = (changedValues: Store): Store => {\n let updatedValues = {}\n // TODO: Provide missing relative fields, eg: liquid alt products\n if (changedValues['accepts_mgd_accts'] === '2') {\n updatedValues = {\n min_invest_indv: null,\n run_sep_mgd_accts: null,\n }\n }\n return {\n ...updatedValues,\n ...changedValues,\n }\n }\n\n const renderTabContent = (activeTabId: LeftNavExFundEnum | LeftNavExFirmEnum) => {\n const activeTab = tabList.find((item) => item.id === activeTabId)\n if (!activeTab) {\n return\n }\n switch (activeTabId) {\n case LeftNavExFundEnum.FUND_DETAIL:\n return \n case LeftNavExFundEnum.INVESTMENT_STRATEGY:\n return \n case LeftNavExFundEnum.FEE_SCHEDULE:\n return \n case LeftNavExFundEnum.SERVICE_PROVIDERS:\n return \n case LeftNavExFundEnum.FUND_STRUCTURE:\n return \n case LeftNavExFundEnum.FUND_ESG_FACTORS:\n return \n case LeftNavExFundEnum.FUND_PRINCIPALS:\n return \n case LeftNavExFundEnum.FUND_DIVERITY_INCLUSION:\n return (\n \n )\n case LeftNavExFundEnum.FUND_CONTACT:\n return \n case LeftNavExFundEnum.FUND_PERFORMANCE:\n return (\n \n )\n case LeftNavExFundEnum.INSTRUMENTS:\n return dataTableDropdown && \n case LeftNavExFundEnum.REGIONS:\n return dataTableDropdown && \n case LeftNavExFundEnum.INDUSTRY:\n return dataTableDropdown && \n case LeftNavExFundEnum.INVESTOR_TYPE:\n return dataTableDropdown && \n case LeftNavExFundEnum.FUND_OVERVIEW:\n return dataFundDetail && \n case LeftNavExFundEnum.FUND_CMIC:\n return (\n dataFundDetail && (\n \n )\n )\n case LeftNavExFundEnum.FUND_FAMILY:\n return \n default:\n break\n }\n }\n\n return (\n \n {dataFundDetail && (\n {\n if (changedFields.find((item) => item.touched)) {\n setIsUpdateFund(true)\n }\n }}\n onValuesChange={(changedValues) => {\n const updatedValues = resetRelativeFields(changedValues)\n const convertObject = Object.keys(updatedValues).reduce((acc, key) => {\n if (numberDateField.includes(key)) {\n return {\n ...acc,\n [key]: changedValues[key] ? parseInt(changedValues[key].replace(/,0/g, '0')) : null,\n }\n }\n return { ...acc, [key]: changedValues[key] !== undefined ? changedValues[key] : null }\n }, {})\n setDataFundDetailChange(\n { ...(dataFundDetailChange?.current || {}), ...convertObject },\n Object.keys(changedValues)[0],\n )\n }}\n >\n {\n setIsUpdateFund(false)\n clearSnapshot()\n refetch()\n form.resetFields()\n setDataChanged(1)\n setTabList(\n tabList.map((item) => {\n return { ...item, isEdited: false }\n }),\n )\n setDataFundDetailChange({})\n }}\n isPreviewing={showPreview}\n onPreview={() => setShowPreview((prev) => !prev)}\n />\n }\n size=\"default\"\n style={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column' }}\n >\n \n {showPreview ? (\n \n ) : (\n <>\n \n \n {tabList.map((item) => {\n const existTab = optionFilter.findIndex((i) => i.leftNav === item.id)\n if (existTab === -1 && textFilterSearch !== '') {\n return null\n }\n return (\n {\n setActiveTab(item.id)\n }}\n active={activeTab === item.id}\n >\n \n
\n {item.status === TAB_STATUS_ENUM.EDIT && }\n {item.status === TAB_STATUS_ENUM.SUCCESS && (\n \n )}\n {item.status === TAB_STATUS_ENUM.WARNING && }\n
\n
\n
\n {item.id} {item.isEdited && }\n
\n
{item.extra}
\n \n )\n })}\n
\n \n \n \n \n {optionFilter.length === 0 ? (\n
\n \n
\n ) : (\n renderTabContent(activeTab)\n )}\n
\n
\n \n \n )}\n \n {showDiscardDataSheet && (\n \n )}\n \n \n )}\n {loading && }\n \n )\n}\n","import { Col, Row, Spin } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../../app/rootReducer'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport { ExFirmDetails } from '../../../../shared/api/models/FirmDetails'\nimport { IndexManagerType } from '../../../../shared/api/models/IndexManager'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport {\n FormItemCheckBox,\n FormItemDatePicker,\n FormItemInput,\n FormItemSelect,\n FormItemTextArea,\n} from '../../../../shared/components/FormItemComponents'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\nimport { RenderLabelForm } from '../../../../shared/components/RenderLabelForm'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 1rem 50px;\n flex-direction: column;\n`\n\ntype Props = {\n form: FormInstance\n dataListIndices: IndexManagerType[] | undefined\n}\nexport const FundBasicInformation: React.FC = ({ form, dataListIndices }) => {\n const { fundDataDropdown, dataFirms } = React.useContext(FundDetailDropdownContext)\n\n const GlobaldataDropdown = useSelector((state: RootState) => state.appData)\n const { dataFundDetail, setDataFundDetailChange, dataFundDetailChange } = React.useContext(FundDetailDataContext)\n const [optionFirm, setOptionFirm] = React.useState<{ firm_id: string; firm_name: string }[] | undefined>()\n\n const selectedStrategy = form.getFieldValue('strategy_code_new')\n\n const compareFirm = (a: ExFirmDetails, b: ExFirmDetails) => {\n return a.firm_name && b.firm_name ? a.firm_name.localeCompare(b.firm_name) : 0\n }\n\n const compareIndices = (a: IndexManagerType, b: IndexManagerType) => {\n return a.name && b.name ? a.name.localeCompare(b.name) : 0\n }\n\n const sortedFirms = dataFirms ? dataFirms.sort(compareFirm) : undefined\n const sortedListIndices = dataListIndices ? dataListIndices.sort(compareIndices) : undefined\n\n const filterOptions = React.useCallback(\n (val: string) => {\n if (!sortedFirms || !dataFundDetail) {\n return\n }\n\n if (!val) {\n const firmId = form.getFieldValue('firm_id')\n const firmName = sortedFirms?.find((item) => item.firm_id === firmId)?.firm_name || ''\n const slicedFirms = sortedFirms\n .slice(0, 20)\n .map((item) => ({ firm_id: item.firm_id, firm_name: item.firm_name }))\n\n return slicedFirms.some((item) => item.firm_id === firmId)\n ? slicedFirms\n : [...slicedFirms, { firm_id: firmId, firm_name: firmName }]\n }\n return sortedFirms\n .filter(\n (item) =>\n (item.firm_name && item.firm_name.toLowerCase().includes(val.toLowerCase())) ||\n item.firm_id.toLowerCase().includes(val.toLowerCase()),\n )\n .slice(0, 20)\n .map((item) => ({ firm_id: item.firm_id, firm_name: item.firm_name }))\n },\n [dataFundDetail, form, sortedFirms],\n )\n\n React.useEffect(() => {\n setOptionFirm(filterOptions(''))\n }, [filterOptions])\n\n function onSearch(val: string) {\n setOptionFirm(filterOptions(val))\n }\n\n const FORMITEM_GROUP_MIDDLE = [\n {\n name: 'denomination',\n label: 'Denom.',\n options:\n fundDataDropdown?.denomination && fundDataDropdown.denomination.length > 0\n ? fundDataDropdown.denomination.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n allowClear: true,\n },\n\n {\n name: 'product_class',\n label: 'Product Class',\n options:\n fundDataDropdown?.product_class && fundDataDropdown?.product_class.length > 0\n ? fundDataDropdown.product_class.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n allowClear: true,\n },\n {\n name: 'bloomberg_ticker',\n label: 'Bloomberg Ticker',\n maxLength: 20,\n },\n {\n name: 'isin',\n label: 'ISIN',\n maxLength: 20,\n },\n {\n name: 'sec_pfid_number',\n label: 'SEC-PFID',\n maxLength: 15,\n },\n ]\n const THIRD_GROUP_FORM = [\n {\n name: 'fund_status_code',\n label: 'Fund Status',\n options:\n fundDataDropdown?.fund_status_code && fundDataDropdown?.fund_status_code.length > 0\n ? fundDataDropdown.fund_status_code.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'liquidated_at',\n label: 'Liquidated at',\n isDatePicker: true,\n options: [],\n allowClear: true,\n },\n {\n name: 'added_to_db',\n label: 'Added To DB',\n isDatePicker: true,\n options: [],\n allowClear: true,\n },\n {\n name: 'data_source',\n label: 'Data Source',\n disable: true,\n options:\n fundDataDropdown?.data_source && fundDataDropdown?.data_source.length > 0\n ? fundDataDropdown.data_source.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'hfr_analyst',\n label: 'HFR Analyst',\n options:\n fundDataDropdown?.hfr_analyst && fundDataDropdown?.hfr_analyst.length > 0\n ? fundDataDropdown.hfr_analyst.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n ]\n\n const optionSubstrategy = React.useMemo(() => {\n const newSubStrategyOptions = selectedStrategy\n ? GlobaldataDropdown && GlobaldataDropdown.subStrategies && GlobaldataDropdown.subStrategies.length > 0\n ? GlobaldataDropdown.subStrategies\n .filter((i) => i.strategy_code === selectedStrategy)\n .map((item) => ({\n value: item.sub_strategy_code,\n text: item.sub_strategy_name,\n }))\n : []\n : []\n\n return newSubStrategyOptions\n }, [GlobaldataDropdown, selectedStrategy])\n\n React.useEffect(() => {\n if (dataFundDetailChange?.current && Object.keys(dataFundDetailChange?.current).includes('strategy_code_new')) {\n if (\n (selectedStrategy &&\n form.getFieldValue('sub_strategy_code_new') &&\n optionSubstrategy.length > 0 &&\n optionSubstrategy.findIndex((item) => item.value === form.getFieldValue('sub_strategy_code_new')) === -1) ||\n (!selectedStrategy && form.getFieldValue('sub_strategy_code_new'))\n ) {\n form.setFieldsValue({ sub_strategy_code_new: null })\n setDataFundDetailChange((prev) => ({ ...prev, sub_strategy_code_new: null }))\n }\n }\n }, [form, selectedStrategy, optionSubstrategy, setDataFundDetailChange, dataFundDetailChange])\n\n return (\n \n \n \n }\n labelCol={8}\n wrapperCol={16}\n rules={[{ required: true, message: 'Please input your Fund Name!' }]}\n maxLength={100}\n />\n\n ({\n value: item.firm_id,\n text: `(${item.firm_id}) - ${item.firm_name}`,\n }))) ||\n []\n }\n labelCol={8}\n wrapperCol={16}\n rules={[{ required: true, message: 'Please input your Firm!' }]}\n label={}\n selectProps={{\n onSearch,\n }}\n />\n\n }\n labelCol={8}\n wrapperCol={16}\n options={\n GlobaldataDropdown?.strategies && GlobaldataDropdown?.strategies.length > 0\n ? GlobaldataDropdown.strategies.map((item) => ({\n value: item.strategy_code,\n text: item.strategy_name,\n }))\n : []\n }\n />\n\n }\n labelCol={8}\n wrapperCol={16}\n disabled={!selectedStrategy}\n options={optionSubstrategy}\n />\n }\n name=\"allocation\"\n labelCol={8}\n wrapperCol={16}\n options={\n fundDataDropdown?.allocation && fundDataDropdown.allocation.length > 0\n ? fundDataDropdown.allocation.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n allowClear\n />\n }\n labelCol={8}\n wrapperCol={16}\n options={\n fundDataDropdown?.style && fundDataDropdown.style.length > 0\n ? fundDataDropdown.style.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n allowClear\n />\n \n \n {FORMITEM_GROUP_MIDDLE.map((item) => {\n return item.options ? (\n }\n name={item.name}\n labelCol={8}\n wrapperCol={16}\n options={item.options}\n allowClear={item.allowClear}\n />\n ) : (\n }\n maxLength={item.maxLength}\n labelCol={8}\n wrapperCol={16}\n allowClear={item.allowClear}\n />\n )\n })}\n \n \n \n {THIRD_GROUP_FORM.map((item) => {\n if (item.name === 'liquidated_at') {\n return (\n \n \n
\n \n
\n \n \n }\n labelCol={8}\n wrapperCol={16}\n allowClear={item.allowClear}\n />\n \n )\n }\n return item.isDatePicker ? (\n
\n }\n labelCol={8}\n wrapperCol={16}\n allowClear={item.allowClear}\n />\n \n ) : (\n \n }\n name={item.name}\n labelCol={8}\n wrapperCol={16}\n options={item.options}\n disabled={item.disable}\n allowClear={item.allowClear}\n />\n \n )\n })}\n \n \n \n \n \n {sortedListIndices ? (\n sortedListIndices.map((item) => {\n return (\n \n } />\n \n )\n })\n ) : (\n \n )}\n \n \n \n \n }\n row={15}\n />\n \n \n \n \n )\n}\n","import { Col, Form, Input, notification, Row, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport APIService from '../../../../shared/api'\nimport { FirmDueDiligenceActivities } from '../../../../shared/api/models/FirmDetails'\n\ntype Props = {\n isShowModal: boolean\n setIsShowModal: (value: boolean) => void\n selectedActivity: FirmDueDiligenceActivities | undefined\n setSelectedActivity: (value: FirmDueDiligenceActivities | undefined) => void\n updateDueDiligence: () => void\n firmId: string\n}\nexport const ModalFundDueDiligence: React.FC = ({\n isShowModal,\n setIsShowModal,\n selectedActivity,\n setSelectedActivity,\n updateDueDiligence,\n firmId,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n\n const [form] = Form.useForm()\n React.useEffect(() => {\n if (selectedActivity) {\n form.setFieldsValue(selectedActivity)\n } else {\n form.resetFields()\n }\n }, [form, selectedActivity])\n\n const submitChangeDueDiligence = () => {\n const match = selectedActivity?.date_time.match('(\\\\d{4}-\\\\d{2}-\\\\d{2})T(\\\\d{2}:\\\\d{2}:\\\\d{2})')\n const dateTimeUpdate = match ? `${match[1]} ${match[2]}` : ''\n const submitData = selectedActivity\n ? {\n date_time: dateTimeUpdate,\n username: selectedActivity.oper_id,\n comment: form.getFieldValue('comment'),\n }\n : {\n comment: form.getFieldValue('comment'),\n }\n\n setLoadingSubmit(true)\n selectedActivity\n ? APIService.firmDetailService\n .updateDueDiligenceAct(firmId, submitData)\n .then(() => {\n notification.success({ message: 'Activity Updated!' })\n updateDueDiligence()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setIsShowModal(false)\n setSelectedActivity(undefined)\n })\n : APIService.firmDetailService\n .createDueDiligenceAct(firmId, submitData)\n .then(() => {\n notification.success({ message: 'Activity Created!' })\n updateDueDiligence()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setIsShowModal(false)\n setSelectedActivity(undefined)\n })\n }\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onCancel={() => {\n setIsShowModal(false)\n setSelectedActivity(undefined)\n }}\n onOk={submitChangeDueDiligence}\n >\n
\n
\n \n
\n \n \n \n \n \n \n \n \n )\n}\n","import { DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, Popconfirm, Tooltip } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { FirmDueDiligenceActivities } from '../../../../shared/api/models/FirmDetails'\nimport { Colors } from '../../../../shared/colors'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { ModalFundDueDiligence } from './ModalFundDueDiligence'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 1rem 0;\n flex-direction: column;\n`\n\nexport const Activities: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const [isShowModal, setIsShowModal] = React.useState(false)\n const [selectedActivity, setSelectedActivity] = React.useState()\n\n const [selectedComment, setSelectedComment] = React.useState('')\n const [showComment, setShowComment] = React.useState(false)\n\n const { invoke: getListDueDiligenceAct, data: dataListDueDiligenceAct, loading: dataLoading } = useServiceState(\n APIService.firmDetailService.getListDueDiligenceAct,\n )\n\n React.useEffect(() => {\n if (dataFundDetail) {\n getListDueDiligenceAct(dataFundDetail.firm_id)\n }\n }, [dataFundDetail, getListDueDiligenceAct])\n\n const updateDueDiligence = () => {\n getListDueDiligenceAct(dataFundDetail?.firm_id)\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Operator ID',\n dataIndex: 'oper_id',\n key: 'oper_id',\n },\n {\n title: 'Date & Time',\n dataIndex: 'date_time',\n key: 'date_time',\n },\n {\n title: 'Comment',\n dataIndex: 'comment',\n key: 'comment',\n render: (_, record) => (\n <>\n {\n setShowComment(true)\n setSelectedComment(record.comment)\n }}\n >\n See Comment\n \n \n ),\n },\n {\n title: 'Action',\n dataIndex: 'action',\n fixed: 'right',\n width: 100,\n render: (_, record) => (\n <>\n {\n setSelectedActivity(record)\n setIsShowModal(true)\n }}\n >\n \n \n \n \n\n console.log('delete:', record.oper_id)}>\n \n \n \n ),\n },\n ]\n\n return (\n \n
\n \n
\n \n\n {dataFundDetail?.firm_id && (\n \n )}\n setShowComment(false)}\n footer={[\n ,\n ]}\n >\n
\n
{selectedComment}
\n
\n \n
\n )\n}\n","import { CheckOutlined, EditOutlined } from '@ant-design/icons'\nimport { Button, Checkbox, Input, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport {\n DUE_DILIGENCE_REQUEST_ENUM,\n FundDetailDataContext,\n} from '../../../../../shared/api/context/FundDetailDataContext'\nimport { ChecklistMainType, ChecklistMainUpdate } from '../../../../../shared/api/models/FirmDetails'\n\ntype Props = {}\nexport const ChecklistMain: React.FC = () => {\n const {\n getDueDiligenceRequest,\n setDataChangeChecklistMain,\n dataChecklistMain,\n loadingChecklistMain,\n } = React.useContext(FundDetailDataContext)\n\n const [editedDataChecklist, setEditedDataChecklist] = React.useState(dataChecklistMain)\n const [indexRowEdit, setIndexRowEdit] = React.useState(-1)\n const [textEditRow, setTextEditRow] = React.useState('')\n React.useEffect(() => {\n if (dataChecklistMain) {\n setEditedDataChecklist(dataChecklistMain)\n }\n }, [dataChecklistMain])\n\n React.useEffect(() => {\n getDueDiligenceRequest(DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_MAIN)\n }, [getDueDiligenceRequest])\n\n React.useEffect(() => {\n const dataChange: ChecklistMainUpdate[] | undefined = []\n if (dataChecklistMain && editedDataChecklist) {\n editedDataChecklist.map((item, index) => {\n if (item.status !== dataChecklistMain[index].status || item.source !== dataChecklistMain[index].source) {\n dataChange.push({ identifier: item.identifier, status: item.status, source: item.source })\n }\n })\n setDataChangeChecklistMain(dataChange.length > 0 ? dataChange : undefined)\n }\n }, [dataChecklistMain, editedDataChecklist, setDataChangeChecklistMain])\n\n const columns: ColumnProps>[] = [\n {\n title: 'Status',\n dataIndex: 'status',\n key: 'status',\n render: (_, record, index) => (\n \n editedDataChecklist &&\n setEditedDataChecklist([\n ...editedDataChecklist?.slice(0, index),\n { ...editedDataChecklist[index], status: e.target.checked },\n ...editedDataChecklist?.slice(index + 1, editedDataChecklist.length),\n ])\n }\n >\n ),\n },\n {\n title: 'Description',\n dataIndex: 'description',\n key: 'description',\n },\n {\n title: 'Operator ID',\n dataIndex: 'oper_id',\n key: 'oper_id',\n },\n {\n title: 'Record Date',\n dataIndex: 'rec_date',\n key: 'rec_date',\n },\n {\n title: 'Source',\n dataIndex: 'source',\n key: 'source',\n render: (_, record, index) =>\n indexRowEdit === index ? (\n
\n setTextEditRow(e.target.value)} />\n {\n editedDataChecklist &&\n setEditedDataChecklist([\n ...editedDataChecklist?.slice(0, index),\n { ...editedDataChecklist[index], source: textEditRow },\n ...editedDataChecklist?.slice(index + 1, editedDataChecklist.length),\n ])\n setIndexRowEdit(-1)\n setTextEditRow('')\n }}\n >\n \n \n \n \n
\n ) : (\n
\n
{record.source}
\n
\n setIndexRowEdit(index)}\n disabled={editedDataChecklist && editedDataChecklist[index].readonly}\n >\n \n \n \n \n
\n
\n ),\n },\n ]\n return (\n
\n
\n {\n setEditedDataChecklist(dataChecklistMain)\n setIndexRowEdit(-1)\n setTextEditRow('')\n }}\n >\n Revert Changes\n \n
\n 10 ? undefined : false}\n bordered\n />\n
\n )\n}\n","import { Button, Checkbox } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport {\n DUE_DILIGENCE_REQUEST_ENUM,\n FundDetailDataContext,\n} from '../../../../../shared/api/context/FundDetailDataContext'\nimport { ChecklistLegalDoc, LegalChecklistUpdate } from '../../../../../shared/api/models/FirmDetails'\n\ntype Props = {}\nexport const LegalDocuments: React.FC = () => {\n const {\n dataLegalChecklist,\n loadingLegalChecklist,\n getDueDiligenceRequest,\n setDataChangeLegalChecklist,\n } = React.useContext(FundDetailDataContext)\n\n const [editedDataChecklist, setEditedDataChecklist] = React.useState(dataLegalChecklist)\n\n React.useEffect(() => {\n if (dataLegalChecklist) {\n setEditedDataChecklist(dataLegalChecklist)\n }\n }, [dataLegalChecklist])\n\n React.useEffect(() => {\n getDueDiligenceRequest(DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_LEGAL_CHECKLIST)\n }, [getDueDiligenceRequest])\n\n React.useEffect(() => {\n const dataChange: LegalChecklistUpdate[] | undefined = []\n if (dataLegalChecklist && editedDataChecklist) {\n editedDataChecklist.map((item, index) => {\n if (item.status !== dataLegalChecklist[index].status) {\n dataChange.push({ identifier: item.identifier, status: item.status })\n }\n })\n setDataChangeLegalChecklist(dataChange.length > 0 ? dataChange : undefined)\n }\n }, [dataLegalChecklist, editedDataChecklist, setDataChangeLegalChecklist])\n\n const columns: ColumnProps>[] = [\n {\n title: 'Status',\n dataIndex: 'status',\n key: 'status',\n render: (_, record, index) => (\n \n editedDataChecklist &&\n setEditedDataChecklist([\n ...editedDataChecklist?.slice(0, index),\n { ...editedDataChecklist[index], status: e.target.checked },\n ...editedDataChecklist?.slice(index + 1, editedDataChecklist.length),\n ])\n }\n >\n ),\n },\n {\n title: 'Description',\n dataIndex: 'description',\n key: 'description',\n },\n {\n title: 'Operator ID',\n dataIndex: 'oper_id',\n key: 'oper_id',\n },\n {\n title: 'Record Date',\n dataIndex: 'rec_date',\n key: 'rec_date',\n },\n ]\n return (\n
\n
\n {\n setEditedDataChecklist(dataLegalChecklist)\n }}\n >\n Revert Changes\n \n
\n 10 ? undefined : false}\n bordered\n />\n
\n )\n}\n","import { Button, Checkbox } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport {\n DUE_DILIGENCE_REQUEST_ENUM,\n FundDetailDataContext,\n} from '../../../../../shared/api/context/FundDetailDataContext'\nimport { ChecklistLegalDoc, LegalChecklistUpdate } from '../../../../../shared/api/models/FirmDetails'\n\nexport const OldBackgroundChecks: React.FC = () => {\n const { getDueDiligenceRequest, dataOldChecklist, loadingOldChecklist, setDataChangeOldChecklist } = React.useContext(\n FundDetailDataContext,\n )\n const [editedDataChecklist, setEditedDataChecklist] = React.useState(dataOldChecklist)\n\n React.useEffect(() => {\n if (dataOldChecklist) {\n setEditedDataChecklist(dataOldChecklist)\n }\n }, [dataOldChecklist])\n\n React.useEffect(() => {\n getDueDiligenceRequest(DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_OLD_CHECKLIST)\n }, [getDueDiligenceRequest])\n\n React.useEffect(() => {\n const dataChange: LegalChecklistUpdate[] | undefined = []\n if (dataOldChecklist && editedDataChecklist) {\n editedDataChecklist.map((item, index) => {\n if (item.status !== dataOldChecklist[index].status) {\n dataChange.push({ identifier: item.identifier, status: item.status })\n }\n })\n setDataChangeOldChecklist(dataChange.length > 0 ? dataChange : undefined)\n }\n }, [dataOldChecklist, editedDataChecklist, setDataChangeOldChecklist])\n\n const columns: ColumnProps>[] = [\n {\n title: 'Status',\n dataIndex: 'status',\n key: 'status',\n render: (_, record, index) => (\n \n editedDataChecklist &&\n setEditedDataChecklist([\n ...editedDataChecklist?.slice(0, index),\n { ...editedDataChecklist[index], status: e.target.checked },\n ...editedDataChecklist?.slice(index + 1, editedDataChecklist.length),\n ])\n }\n >\n ),\n },\n {\n title: 'Description',\n dataIndex: 'description',\n key: 'description',\n },\n {\n title: 'Operator ID',\n dataIndex: 'oper_id',\n key: 'oper_id',\n },\n {\n title: 'Record Date',\n dataIndex: 'rec_date',\n key: 'rec_date',\n },\n ]\n return (\n
\n
\n {\n setEditedDataChecklist(dataOldChecklist)\n }}\n >\n Revert Changes\n \n
\n 10 ? undefined : false}\n bordered\n />\n
\n )\n}\n","import { Collapse } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { NextBackButton } from '../../../../../shared/components/NextBackButton'\nimport { ChecklistMain } from './ChecklistMain'\nimport { LegalDocuments } from './LegalDocuments'\nimport { OldBackgroundChecks } from './OldBackgroundChecks'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst { Panel } = Collapse\nconst StyledCollapse = styled(Collapse)`\n margin: 1rem;\n .ant-collapse-content-box {\n padding: 0;\n }\n`\ntype Props = {}\nexport const Checklist: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import {\n ChromeOutlined,\n ContainerOutlined,\n FileTextOutlined,\n FileZipOutlined,\n HomeOutlined,\n MailOutlined,\n PhoneOutlined,\n UserOutlined,\n} from '@ant-design/icons'\nimport { Col, Form, Modal, notification, Row, Spin } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../../shared/api'\nimport { FundDetailDropdownContext } from '../../../../../shared/api/context/FundDetailDropdownContext'\nimport { DueDiligenceContact } from '../../../../../shared/api/models/FundDetails'\nimport { FormItemInput, FormItemSelect } from '../../../../../shared/components/FormItemComponents'\n\nconst StyledModal = styled(Modal)`\n .ant-modal-body {\n padding: 0 1.5rem;\n overflow: auto;\n }\n`\ntype Props = {\n selectedContact: DueDiligenceContact | undefined\n showModal: boolean\n setShowModal: (value: boolean) => void\n setSelectedContact: (value: DueDiligenceContact | undefined) => void\n updateContact: () => void\n firmId: string\n}\nexport const ModalEditTableContact: React.FC = ({\n selectedContact,\n showModal,\n setShowModal,\n setSelectedContact,\n updateContact,\n firmId,\n}) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [isEditedContactName, setIsEditedContactName] = React.useState(false)\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (selectedContact) {\n form.setFieldsValue(selectedContact)\n } else {\n form.resetFields()\n }\n }, [form, selectedContact])\n\n const handleUpdateRow = () => {\n const fieldSubmit = {\n old_contact_name: form.getFieldValue('contact_name'),\n first_name: form.getFieldValue('first_name'),\n last_name: form.getFieldValue('last_name'),\n email: form.getFieldValue('email'),\n title: form.getFieldValue('title'),\n department: form.getFieldValue('department'),\n phone: form.getFieldValue('phone'),\n fax: form.getFieldValue('fax'),\n web: form.getFieldValue('web'),\n city: form.getFieldValue('city'),\n state_code: form.getFieldValue('state_code'),\n zip: form.getFieldValue('zip'),\n country: form.getFieldValue('country'),\n address1: form.getFieldValue('address1'),\n address2: form.getFieldValue('address2'),\n address3: form.getFieldValue('address3'),\n description: form.getFieldValue('description'),\n }\n const submitData: Partial =\n selectedContact && isEditedContactName\n ? {\n ...fieldSubmit,\n new_contact_name: form.getFieldValue('contact_name'),\n old_contact_name: selectedContact.contact_name,\n }\n : fieldSubmit\n\n form.validateFields(['contact_name']).then(() => {\n setLoadingSubmit(true)\n selectedContact\n ? APIService.firmDetailService\n .updateDueDiligenceContact(firmId, submitData)\n .then(() => {\n notification.success({ message: 'Contact Updated!' })\n updateContact()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Contact Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedContact(undefined)\n form.resetFields()\n setIsEditedContactName(false)\n })\n : APIService.firmDetailService\n .createDueDiligenceContact(firmId, submitData)\n .then(() => {\n notification.success({ message: 'Contact Created!' })\n updateContact()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Contact Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedContact(undefined)\n form.resetFields()\n setIsEditedContactName(false)\n })\n })\n }\n\n const LIST_FIELD = [\n {\n name: 'address1',\n label: 'Address 1',\n placeHolder: 'Address 1',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'first_name',\n label: 'First Name',\n placeHolder: 'First Name',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'address2',\n label: 'Address 2',\n placeHolder: 'Address 2',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'last_name',\n label: 'Last Name',\n placeHolder: 'Last Name',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'address3',\n label: 'Address 3',\n placeHolder: 'Address 3',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'title',\n label: 'Title',\n placeHolder: 'Title',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'city',\n label: 'City',\n placeHolder: 'City',\n prefix: ,\n maxLength: 30,\n },\n {\n name: 'state_code',\n label: 'State',\n placeHolder: 'State',\n options:\n fundDataDropdown?.contact_state && fundDataDropdown.contact_state.length > 0\n ? fundDataDropdown.contact_state.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'country',\n label: 'Country',\n placeHolder: 'Country',\n options:\n fundDataDropdown?.contact_country && fundDataDropdown.contact_country.length > 0\n ? fundDataDropdown.contact_country.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'department',\n label: 'Department',\n placeHolder: 'Department',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'zip',\n label: 'Zip',\n placeHolder: 'Zip',\n prefix: ,\n maxLength: 10,\n },\n {\n name: 'phone',\n label: 'Phone',\n placeHolder: 'Phone',\n prefix: ,\n maxLength: 30,\n },\n {\n name: 'email',\n label: 'E-mail',\n placeHolder: 'E-mail',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'fax',\n label: 'Fax',\n placeHolder: 'Fax',\n prefix: ,\n maxLength: 60,\n },\n {\n name: 'web',\n label: 'Web',\n placeHolder: 'Web',\n prefix: ,\n maxLength: 60,\n },\n ]\n\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={() => handleUpdateRow()}\n onCancel={() => {\n setSelectedContact(undefined)\n setShowModal(false)\n }}\n >\n
\n
\n \n
\n ({\n validator(rule, value) {\n if (!value || getFieldValue('old_contact_name') !== selectedContact?.contact_name) {\n setIsEditedContactName(true)\n }\n return Promise.resolve()\n },\n }),\n ]}\n prefix={}\n maxLength={60}\n />\n \n {LIST_FIELD.map((item) => {\n return item.options ? (\n \n \n \n ) : (\n \n \n \n )\n })}\n \n\n \n \n }\n maxLength={60}\n labelCol={4}\n wrapperCol={20}\n />\n \n \n \n \n \n )\n}\n","import { DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { DueDiligenceContact } from '../../../../../shared/api/models/FundDetails'\nimport { Colors } from '../../../../../shared/colors'\nimport { NextBackButton } from '../../../../../shared/components/NextBackButton'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\nimport { ModalEditTableContact } from './ModalEditTableContact'\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow-x: auto;\n`\ntype Props = {}\nexport const DueDiligenceContacts: React.FC = () => {\n const [showModal, setShowModal] = React.useState(false)\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const [selectedContact, setSelectedContact] = React.useState()\n const { invoke: getDataContact, data: dataContact, loading } = useServiceState(\n APIService.firmDetailService.fetchDueDiligenceContact,\n )\n\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n\n React.useEffect(() => {\n dataFundDetail?.firm_id && getDataContact(dataFundDetail.firm_id)\n }, [dataFundDetail, getDataContact])\n\n const updateContact = () => {\n getDataContact(dataFundDetail?.firm_id)\n }\n\n const deleteContact = (contactName: string) => {\n if (dataFundDetail?.firm_id) {\n setLoadingDelete(true)\n APIService.firmDetailService\n .deleteDueDiligenceContact(dataFundDetail?.firm_id, contactName)\n .then(() => {\n notification.success({ message: 'Contact Delete!' })\n updateContact()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Contact Delete Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Contact Name',\n dataIndex: 'contact_name',\n key: 'contact_name',\n fixed: 'left',\n width: 150,\n },\n {\n title: 'First Name',\n dataIndex: 'first_name',\n key: 'first_name',\n width: 150,\n },\n {\n title: 'Last Name',\n dataIndex: 'last_name',\n key: 'last_name',\n width: 150,\n },\n {\n title: 'Title',\n dataIndex: 'title',\n key: 'title',\n width: 150,\n },\n {\n title: 'Department',\n dataIndex: 'department',\n key: 'department',\n width: 150,\n },\n {\n title: 'Address 1',\n dataIndex: 'address1',\n key: 'address1',\n width: 150,\n },\n {\n title: 'Address2',\n dataIndex: 'address2',\n key: 'address2',\n width: 150,\n },\n {\n title: 'Address3',\n dataIndex: 'address3',\n key: 'address3',\n width: 150,\n },\n {\n title: 'City',\n dataIndex: 'city',\n key: 'city',\n width: 150,\n },\n {\n title: 'State Code',\n dataIndex: 'state_code',\n key: 'state_code',\n width: 150,\n },\n {\n title: 'Zip',\n dataIndex: 'zip',\n key: 'zip',\n width: 150,\n },\n {\n title: 'Country',\n dataIndex: 'country',\n key: 'country',\n width: 150,\n },\n {\n title: 'Phone',\n dataIndex: 'phone',\n key: 'phone',\n width: 150,\n sorter: (a, b) => {\n return a.phone.localeCompare(b.phone)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Fax',\n dataIndex: 'fax',\n key: 'fax',\n width: 150,\n sorter: (a, b) => {\n return a.fax.localeCompare(b.fax)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'E-mail',\n dataIndex: 'email',\n key: 'email',\n width: 150,\n sorter: (a, b) => {\n return a.email.localeCompare(b.email)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Web',\n dataIndex: 'web',\n key: 'web',\n width: 150,\n sorter: (a, b) => {\n return a.web.localeCompare(b.web)\n },\n sortDirections: ['descend', 'ascend'],\n },\n\n {\n title: 'Description',\n dataIndex: 'description',\n key: 'description',\n width: 150,\n sorter: (a, b) => {\n return a.description.localeCompare(b.description)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Action',\n key: 'action',\n fixed: 'right',\n width: 150,\n render: (_, record) => (\n <>\n {\n setShowModal(true)\n setSelectedContact(record)\n }}\n >\n \n \n \n \n\n deleteContact(record.contact_name)}>\n \n \n \n ),\n },\n ]\n return (\n \n
\n \n
\n 10 ? undefined : false}\n columns={columns}\n bordered\n loading={loading}\n scroll={{ x: 'min-content' }}\n />\n\n {dataFundDetail?.firm_id && (\n \n )}\n\n \n
\n )\n}\n","import { List } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { LoadingDetails } from '../../../../shared/components/LoadingDetails'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 1rem;\n`\nexport const DueDiligenceDocuments: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { invoke: getDataDocs, data: dataDocs, loading } = useServiceState(\n APIService.fundDetailService.fetchDueDiligenceDocuments,\n )\n\n React.useEffect(() => {\n dataFundDetail?.firm_id && getDataDocs(dataFundDetail.firm_id)\n }, [dataFundDetail, getDataDocs])\n\n const dataSource = React.useMemo(() => {\n if (!dataDocs) {\n return []\n }\n return [\n { label: 'Open Firm in Sharepoint', url: dataDocs.firm_url },\n { label: 'Search Firm ID in Sharepoint', url: dataDocs.search_url },\n ]\n }, [dataDocs])\n return (\n \n {dataDocs && (\n (\n \n \n {item.label}\n \n \n )}\n />\n )}\n {loading && }\n \n )\n}\n","import { Col, Form, Row, Spin } from 'antd'\nimport moment from 'moment'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { DUE_DILIGENCE_REQUEST_ENUM, FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FormItemDatePicker, FormItemInput, FormItemTextArea } from '../../../../shared/components/FormItemComponents'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\nimport { RenderLabelForm } from '../../../../shared/components/RenderLabelForm'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n padding-left: 5rem;\n padding-right: 3rem;\n flex: 1;\n margin-top: 1rem;\n`\nconst LIST_FORM_TEXTAREA = [\n {\n text: 'Investment Rationale',\n name: 'rationale',\n },\n {\n text: 'Firm',\n name: 'firm',\n },\n {\n text: 'Strategy',\n name: 'strategy',\n },\n]\ntype Props = {}\nexport const InvestOpinion: React.FC = () => {\n const [form] = Form.useForm()\n const {\n getDueDiligenceRequest,\n dataInvestorOpinion,\n loadingInvestorOpinion,\n setDataChangeInvestor,\n } = React.useContext(FundDetailDataContext)\n\n React.useEffect(() => {\n getDueDiligenceRequest(DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_INVESTOR)\n }, [getDueDiligenceRequest])\n\n React.useEffect(() => {\n if (dataInvestorOpinion) {\n const initialValue = dataInvestorOpinion && {\n ...dataInvestorOpinion,\n date_time: dataInvestorOpinion.date_time ? moment(dataInvestorOpinion.date_time) : null,\n }\n form.setFieldsValue(initialValue)\n } else {\n form.resetFields()\n }\n }, [dataInvestorOpinion, form])\n\n return (\n \n {loadingInvestorOpinion ? (\n \n ) : (\n {\n setDataChangeInvestor((prev: any) => ({ ...prev, ...data }))\n }}\n >\n \n
\n }\n labelCol={12}\n wrapperCol={12}\n disabled\n />\n \n \n }\n labelCol={12}\n wrapperCol={12}\n disabled\n />\n \n \n {LIST_FORM_TEXTAREA.map((item) => {\n return (\n
\n } />\n \n
\n )\n })}\n \n \n )}\n \n )\n}\n","import { Col, Form, notification, Row, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport moment from 'moment'\nimport React from 'react'\nimport APIService from '../../../../shared/api'\nimport {\n DueDiligenceMeetingCreate,\n DueDiligenceMeetingResponse,\n DueDiligenceMeetingUpdate,\n} from '../../../../shared/api/models/FirmDetails'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport {\n FormItemDatePicker,\n FormItemInput,\n FormItemSelect,\n FormItemTextArea,\n} from '../../../../shared/components/FormItemComponents'\n\ntype Props = {\n selectedMeeting: DueDiligenceMeetingResponse | undefined\n showModal: boolean\n setShowModal: (value: boolean) => void\n setSelectedMeeting: (value: DueDiligenceMeetingResponse | undefined) => void\n updateMeeting: () => void\n firmId: string\n}\nexport const MEETING_OPTIONS_TYPE = [\n {\n text: 'Site Review',\n value: '1',\n },\n {\n text: 'At HFR',\n value: '2',\n },\n {\n text: 'Other',\n value: '3',\n },\n]\nexport const ModalEditTableMeeting: React.FC = ({\n selectedMeeting,\n showModal,\n setShowModal,\n setSelectedMeeting,\n updateMeeting,\n firmId,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (selectedMeeting) {\n const initialValue = {\n ...selectedMeeting,\n meeting_date: selectedMeeting.meeting_date ? moment(selectedMeeting.meeting_date) : null,\n }\n form.setFieldsValue(initialValue)\n } else {\n form.resetFields()\n }\n }, [form, selectedMeeting])\n\n const handleUpdateRow = () => {\n if (selectedMeeting) {\n const submitUpdate: Partial = {\n meeting_type: form.getFieldValue('meeting_type'),\n meeting_date: form.getFieldValue('meeting_date')\n ? moment(form.getFieldValue('meeting_date')).format('YYYY-MM-DD')\n : undefined,\n attendee: form.getFieldValue('attendee'),\n comments: form.getFieldValue('comments'),\n identifier: [firmId, selectedMeeting.meeting_type, moment(selectedMeeting.meeting_date).format('YYYY-MM-DD')],\n }\n setLoadingSubmit(true)\n APIService.firmDetailService\n .updateDueDiligenceMeeting(firmId, submitUpdate)\n .then(() => {\n notification.success({ message: 'Meeting Updated!' })\n updateMeeting()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Meeting Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedMeeting(undefined)\n form.resetFields()\n })\n } else {\n setLoadingSubmit(true)\n const submitData: Partial = {\n meeting_type: form.getFieldValue('meeting_type'),\n meeting_date: form.getFieldValue('meeting_date')\n ? moment(form.getFieldValue('meeting_date')).format('YYYY-MM-DD')\n : undefined,\n attendee: form.getFieldValue('attendee'),\n comments: form.getFieldValue('comments'),\n }\n APIService.firmDetailService\n .createDueDiligenceMeeting(firmId, submitData)\n .then(() => {\n notification.success({ message: 'Meeting Created!' })\n updateMeeting()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Meeting Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedMeeting(undefined)\n form.resetFields()\n })\n }\n }\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={() => handleUpdateRow()}\n onCancel={() => {\n setSelectedMeeting(undefined)\n setShowModal(false)\n }}\n >\n
\n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport moment from 'moment'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { DueDiligenceMeetingResponse } from '../../../../shared/api/models/FirmDetails'\nimport { Colors } from '../../../../shared/colors'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { MEETING_OPTIONS_TYPE, ModalEditTableMeeting } from './ModalEditTableMeeting'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\ntype Props = {}\nexport const Meetings: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const [selectedMeeting, setSelectedMeeting] = React.useState()\n const [showModal, setShowModal] = React.useState(false)\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n\n const { invoke: getDataMeeting, data: dataMeeting, loading } = useServiceState(\n APIService.firmDetailService.fetchDueDiligenceMeeting,\n )\n\n React.useEffect(() => {\n dataFundDetail?.firm_id && getDataMeeting(dataFundDetail.firm_id)\n }, [dataFundDetail, getDataMeeting])\n\n const updateMeeting = () => {\n getDataMeeting(dataFundDetail?.firm_id)\n }\n\n const deleteMeeting = (deleteMeeting: DueDiligenceMeetingResponse) => {\n if (dataFundDetail?.firm_id) {\n const paramsSubmit = {\n identifier: [\n dataFundDetail.firm_id,\n deleteMeeting.meeting_type,\n moment(deleteMeeting.meeting_date).format('YYYY-MM-DD'),\n ],\n }\n setLoadingDelete(true)\n APIService.firmDetailService\n .deleteDueDiligenceMeeting(dataFundDetail?.firm_id, paramsSubmit)\n .then(() => {\n notification.success({ message: 'Meeting Delete!' })\n updateMeeting()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Meeting Delete Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Meeting Type Description',\n dataIndex: 'meeting_type',\n key: 'meeting_type',\n render: (_, record) =>
{MEETING_OPTIONS_TYPE.find((item) => item.value === record.meeting_type)?.text}
,\n },\n {\n title: 'Date',\n dataIndex: 'meeting_date',\n key: 'meeting_date',\n },\n {\n title: 'Operator ID',\n dataIndex: 'oper_id',\n key: 'oper_id',\n },\n {\n title: 'Attendee',\n dataIndex: 'attendee',\n key: 'attendee',\n },\n {\n title: 'Comments',\n dataIndex: 'comments',\n key: 'comments',\n },\n {\n title: 'Action',\n key: 'action',\n fixed: 'right',\n width: 150,\n render: (_, record) => (\n <>\n {\n setShowModal(true)\n setSelectedMeeting(record)\n }}\n >\n \n \n \n \n\n deleteMeeting(record)}>\n \n \n \n ),\n },\n ]\n return (\n \n
\n \n
\n 10 ? undefined : false}\n bordered\n />\n {dataFundDetail?.firm_id && (\n \n )}\n \n
\n )\n}\n","import { Col, DatePicker, Form, notification, Row, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport moment from 'moment'\nimport React from 'react'\nimport APIService from '../../../../shared/api'\nimport { DueDiligenceMonthly, DueDiligenceMonthlyUpdate } from '../../../../shared/api/models/FundDetails'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FormItemInput, FormItemTextArea } from '../../../../shared/components/FormItemComponents'\n\ntype Props = {\n selectedMonthly: DueDiligenceMonthly | undefined\n showModal: boolean\n setShowModal: (value: boolean) => void\n setSelectedMonthly: (value: DueDiligenceMonthly | undefined) => void\n updateMonthly: () => void\n fundId: string\n}\n\nexport const ModalEditTableMonthly: React.FC = ({\n selectedMonthly,\n showModal,\n setShowModal,\n setSelectedMonthly,\n updateMonthly,\n fundId,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (selectedMonthly) {\n const initialValue = {\n ...selectedMonthly,\n username: selectedMonthly.oper_id,\n date: selectedMonthly.date ? moment(selectedMonthly.date) : null,\n }\n form.setFieldsValue(initialValue)\n } else {\n form.resetFields()\n }\n }, [form, selectedMonthly])\n\n const handleUpdateRow = () => {\n form.validateFields(['date', 'username']).then(() => {\n setLoadingSubmit(true)\n const submitData: Partial = {\n username: form.getFieldValue('username'),\n date: form.getFieldValue('date') ? moment(form.getFieldValue('date')).format('YYYY-MM') : undefined,\n monthly: form.getFieldValue('monthly'),\n slippage: form.getFieldValue('slippage'),\n internal: form.getFieldValue('internal'),\n }\n selectedMonthly\n ? APIService.fundDetailService\n .updateDueDiligenceMonthly(fundId, submitData)\n .then(() => {\n notification.success({ message: 'Monthly Updated!' })\n updateMonthly()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Monthly Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedMonthly(undefined)\n form.resetFields()\n })\n : APIService.fundDetailService\n .createDueDiligenceMonthly(fundId, submitData)\n .then(() => {\n notification.success({ message: 'Monthly Created!' })\n updateMonthly()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Monthly Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedMonthly(undefined)\n form.resetFields()\n })\n })\n }\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={() => handleUpdateRow()}\n onCancel={() => {\n setSelectedMonthly(undefined)\n setShowModal(false)\n }}\n >\n
\n \n
\n \n
\n \n \n \n \n {!selectedMonthly && (\n \n \n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { DueDiligenceMonthly } from '../../../../shared/api/models/FundDetails'\nimport { Colors } from '../../../../shared/colors'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { ModalEditTableMonthly } from './ModalEditTableMonthly'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\n\nexport const Monthly: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const [selectedMonthly, setSelectedMonthly] = React.useState()\n const [showModal, setShowModal] = React.useState(false)\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n\n const { invoke: getDataMonthly, data: dataMonthly, loading } = useServiceState(\n APIService.fundDetailService.fetchDueDiligenceMonthly,\n )\n\n React.useEffect(() => {\n dataFundDetail?.fund_id && getDataMonthly(dataFundDetail.fund_id)\n }, [dataFundDetail, getDataMonthly])\n\n const updateMonthly = () => {\n getDataMonthly(dataFundDetail?.fund_id)\n }\n\n const deleteMonthly = (date: string) => {\n if (dataFundDetail?.fund_id) {\n const paramsSubmit = {\n date: date,\n }\n setLoadingDelete(true)\n APIService.fundDetailService\n .deleteDueDiligenceMonthly(dataFundDetail?.fund_id, paramsSubmit)\n .then(() => {\n notification.success({ message: 'Monthly Delete!' })\n updateMonthly()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Monthly Delete Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Date',\n dataIndex: 'date',\n key: 'date',\n width: '10%',\n },\n {\n title: 'Operator ID',\n dataIndex: 'oper_id',\n key: 'oper_id',\n width: '20%',\n },\n {\n title: 'Monthly',\n dataIndex: 'monthly',\n key: 'monthly',\n width: '20%',\n ellipsis: true,\n },\n {\n title: 'Slippage',\n dataIndex: 'slippage',\n key: 'slippage',\n width: '20%',\n ellipsis: true,\n },\n {\n title: 'Internal',\n dataIndex: 'internal',\n key: 'internal',\n width: '20%',\n ellipsis: true,\n },\n {\n title: 'Action',\n key: 'action',\n fixed: 'right',\n width: '10%',\n render: (_, record) => (\n <>\n {\n setShowModal(true)\n setSelectedMonthly(record)\n }}\n >\n \n \n \n \n\n deleteMonthly(record.date)}>\n \n \n \n ),\n },\n ]\n return (\n \n
\n \n
\n 10 ? undefined : false}\n bordered\n />\n {dataFundDetail?.fund_id && (\n \n )}\n\n \n
\n )\n}\n","import { Col, Form, Modal, notification, Row, Spin } from 'antd'\nimport React from 'react'\nimport APIService from '../../../../shared/api'\nimport { DueDiligenceScoreCard, DueDiligenceScoreCardUpdate } from '../../../../shared/api/models/FundDetails'\nimport { FormItemInput, FormItemTextArea } from '../../../../shared/components/FormItemComponents'\n\ntype Props = {\n selectedScorecard: DueDiligenceScoreCard\n showModal: boolean\n setShowModal: (value: boolean) => void\n setSelectedScorecard: (value: DueDiligenceScoreCard | undefined) => void\n updateScorecard: () => void\n fundId: string\n}\nexport const ScorecardModal: React.FC = ({\n selectedScorecard,\n showModal,\n setShowModal,\n setSelectedScorecard,\n updateScorecard,\n fundId,\n}) => {\n const [form] = Form.useForm()\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n\n React.useEffect(() => {\n if (selectedScorecard) {\n form.setFieldsValue(selectedScorecard)\n } else {\n form.resetFields()\n }\n }, [form, selectedScorecard])\n\n const handleSubmit = () => {\n form.validateFields(['weight', 'score', 'comment']).then(() => {\n setLoadingSubmit(true)\n const submitData: DueDiligenceScoreCardUpdate[] = [\n {\n identifier: [fundId, selectedScorecard.category],\n weight: form.getFieldValue('weight'),\n score: form.getFieldValue('score'),\n comment: form.getFieldValue('comment'),\n },\n ]\n APIService.fundDetailService\n .updateDueDiligenceScoreCard(fundId, { updates: submitData })\n .then(() => {\n notification.success({ message: 'Score Card Updated!' })\n updateScorecard()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Score Card Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowModal(false)\n setSelectedScorecard(undefined)\n form.resetFields()\n })\n })\n }\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={() => handleSubmit()}\n onCancel={() => {\n setShowModal(false)\n setSelectedScorecard(undefined)\n }}\n >\n
\n
\n \n
\n \n \n \n ({\n validator(rule, value) {\n if (value > 10 || value < 0) {\n return Promise.reject('Score Max is 10 and Min is 0!')\n }\n return Promise.resolve()\n },\n }),\n ]}\n />\n \n \n \n \n \n \n \n \n )\n}\n","import { EditOutlined } from '@ant-design/icons'\nimport { Button, Col, Form, notification, Popconfirm, Row, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport moment from 'moment'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { DueDiligenceScoreCard } from '../../../../shared/api/models/FundDetails'\nimport { FormItemDatePicker, FormItemInput } from '../../../../shared/components/FormItemComponents'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { ScorecardModal } from './ScorecardModal'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\ntype Props = {}\nexport const ScoreCard: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n\n const [form] = Form.useForm()\n\n const { invoke: getDataScorecard, data: dataScorecard, loading } = useServiceState(\n APIService.fundDetailService.fetchDueDiligenceScoreCard,\n )\n\n const [showModal, setShowModal] = React.useState(false)\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n const [selectedScorecard, setSelectedScorecard] = React.useState(undefined)\n\n React.useEffect(() => {\n dataFundDetail?.fund_id && getDataScorecard(dataFundDetail.fund_id)\n }, [dataFundDetail, getDataScorecard])\n\n React.useEffect(() => {\n if (dataScorecard) {\n const initialValue = {\n ...dataScorecard,\n last_update: dataScorecard.last_update ? moment(dataScorecard.last_update) : null,\n }\n form.setFieldsValue(initialValue)\n } else {\n form.resetFields()\n }\n }, [dataScorecard, form])\n\n const resetScoreCard = () => {\n if (dataFundDetail?.fund_id) {\n setLoadingDelete(true)\n APIService.fundDetailService\n .resetDueDiligenceScoreCard(dataFundDetail.fund_id)\n .then(() => {\n notification.success({ message: 'Reset Score Card!' })\n getDataScorecard(dataFundDetail?.fund_id)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Reset Score Card Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n }\n\n const updateScorecard = () => {\n getDataScorecard(dataFundDetail?.fund_id)\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Category',\n dataIndex: 'category',\n key: 'category',\n },\n {\n title: 'Operator ID',\n dataIndex: 'oper_id',\n key: 'oper_id',\n },\n {\n title: 'Date & Time',\n dataIndex: 'date_time',\n key: 'date_time',\n },\n {\n title: 'Weight',\n dataIndex: 'weight',\n key: 'weight',\n },\n {\n title: 'Score',\n dataIndex: 'score',\n key: 'score',\n },\n {\n title: 'Comment',\n dataIndex: 'comment',\n key: 'comment',\n },\n {\n title: 'Action',\n key: 'action',\n fixed: 'right',\n width: 150,\n render: (_, record) => (\n <>\n {\n setShowModal(true)\n setSelectedScorecard(record)\n }}\n >\n \n \n \n \n \n ),\n },\n ]\n return (\n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n 10 ? undefined : false}\n />\n {selectedScorecard && dataFundDetail?.fund_id && (\n \n )}\n \n \n \n )\n}\n","import { Col, Form, notification, Row, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport APIService from '../../../../../shared/api'\nimport {\n DueDiligenceReceiveSepAct,\n DueDiligenceReceiveSepActUpdate,\n} from '../../../../../shared/api/models/FirmDetails'\nimport { FormItemInput, FormItemSelect, FormItemTextArea } from '../../../../../shared/components/FormItemComponents'\n\ntype Props = {\n isShowModal: boolean\n setIsShowModal: (value: boolean) => void\n selectedReceiveMesseage: DueDiligenceReceiveSepAct | undefined\n setSelectedReceiveMesseage: (value: DueDiligenceReceiveSepAct | undefined) => void\n updateReceiveSepAct: () => void\n firmId: string\n fundId: string\n}\nexport const RECORD_TYPE_OPTIONS = [\n {\n text: 'Letter of Intent',\n value: 'LOI',\n },\n {\n text: 'Signed TMA',\n value: 'TMA',\n },\n {\n text: 'Funded Account',\n value: 'FA',\n },\n]\nconst LIST_FORM = [\n {\n name: 'prime_broker',\n label: 'Prime Broker',\n maxLength: 60,\n },\n {\n name: 'minimum',\n label: 'Minimum',\n typeField: 'number',\n normalize: 'float',\n },\n {\n name: 'target',\n label: 'Target',\n typeField: 'number',\n normalize: 'float',\n },\n {\n name: 'maximum',\n label: 'Maximum',\n typeField: 'number',\n normalize: 'float',\n },\n {\n name: 'reserved_capacity',\n label: 'Reserved Capacity',\n typeField: 'number',\n normalize: 'float',\n },\n {\n name: 'mgmt_fee',\n label: 'Management Fee',\n typeField: 'number',\n normalize: 'float',\n },\n {\n name: 'incentive',\n label: 'Incentive',\n typeField: 'number',\n normalize: 'float',\n },\n {\n name: 'hurdle_rate',\n label: 'Hurdle Rate',\n maxLength: 30,\n },\n {\n name: 'liquidity',\n label: 'Liquidity',\n typeField: 'number',\n normalize: 'number',\n },\n]\nexport const ReceiveSepActModal: React.FC = ({\n isShowModal,\n setIsShowModal,\n updateReceiveSepAct,\n firmId,\n setSelectedReceiveMesseage,\n selectedReceiveMesseage,\n fundId,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n\n const [form] = Form.useForm()\n React.useEffect(() => {\n if (selectedReceiveMesseage) {\n const initialForm = {\n ...selectedReceiveMesseage,\n record_type: selectedReceiveMesseage.rec_type,\n }\n form.setFieldsValue(initialForm)\n } else {\n form.resetFields()\n }\n }, [form, selectedReceiveMesseage])\n\n const submitCreateSentMess = () => {\n const submitData: Partial = selectedReceiveMesseage\n ? {\n fund_id: fundId,\n record_type: form.getFieldValue('record_type'),\n prime_broker: form.getFieldValue('prime_broker'),\n minimum: form.getFieldValue('minimum'),\n target: form.getFieldValue('target'),\n maximum: form.getFieldValue('maximum'),\n reserved_capacity: form.getFieldValue('reserved_capacity'),\n mgmt_fee: form.getFieldValue('mgmt_fee'),\n incentive: form.getFieldValue('incentive'),\n hurdle_rate: form.getFieldValue('hurdle_rate'),\n liquidity: form.getFieldValue('liquidity'),\n comment: form.getFieldValue('comment'),\n }\n : {\n fund_id: fundId,\n record_type: form.getFieldValue('record_type'),\n }\n\n form.validateFields(['record_type']).then(() => {\n setLoadingSubmit(true)\n selectedReceiveMesseage\n ? APIService.firmDetailService\n .updateDueDiligenceReceiveMess(firmId, submitData)\n .then(() => {\n notification.success({ message: 'Receive Message Updated!' })\n updateReceiveSepAct()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Receive Message Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setIsShowModal(false)\n setSelectedReceiveMesseage(undefined)\n form.resetFields()\n })\n : APIService.firmDetailService\n .createDueDiligenceReceiveMess(firmId, submitData)\n .then(() => {\n notification.success({ message: 'Receive Message Created!' })\n updateReceiveSepAct()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Receive Message Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setIsShowModal(false)\n setSelectedReceiveMesseage(undefined)\n form.resetFields()\n })\n })\n }\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onCancel={() => {\n setIsShowModal(false)\n setSelectedReceiveMesseage(undefined)\n }}\n onOk={submitCreateSentMess}\n >\n
\n
\n \n
\n \n \n {selectedReceiveMesseage &&\n LIST_FORM.map((item) => {\n return (\n \n \n \n )\n })}\n \n {selectedReceiveMesseage && }\n \n \n \n \n \n )\n}\n","import { DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { DueDiligenceReceiveSepAct } from '../../../../../shared/api/models/FirmDetails'\nimport { Colors } from '../../../../../shared/colors'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\nimport { ReceiveSepActModal, RECORD_TYPE_OPTIONS } from './ReceiveSepActModal'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 1rem;\n flex-direction: column;\n position: relative;\n width: 100%;\n overflow-x: auto;\n`\n\nexport const ReceivedSepAcct: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const [isShowModal, setIsShowModal] = React.useState(false)\n const [selectedReceiveMesseage, setSelectedReceiveMesseage] = React.useState()\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n const { invoke: getListMessage, data: listMesseage, loading: dataLoading } = useServiceState(\n APIService.firmDetailService.getDueDiligenceReceiveMess,\n )\n\n React.useEffect(() => {\n dataFundDetail?.firm_id && getListMessage(dataFundDetail.firm_id)\n }, [dataFundDetail, getListMessage])\n\n const updateReceiveSepAct = () => {\n getListMessage(dataFundDetail?.firm_id)\n }\n\n const deleteMessage = (record: DueDiligenceReceiveSepAct) => {\n setLoadingDelete(true)\n dataFundDetail?.firm_id &&\n APIService.firmDetailService\n .deleteDueDiligenceReceiveMess(dataFundDetail?.firm_id, {\n fund_id: record.fund_id,\n record_type: record.rec_type,\n })\n .then(() => {\n notification.success({ message: 'Receive Message Created!' })\n updateReceiveSepAct()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Receive Message Create Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Record Type',\n dataIndex: 'rec_type',\n key: 'rec_type',\n fixed: 'left',\n width: 150,\n render: (_, record) =>
{RECORD_TYPE_OPTIONS.find((item) => item.value === record.rec_type)?.text}
,\n sorter: (a, b) => {\n return a.rec_type.localeCompare(b.rec_type)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Operator ID',\n dataIndex: 'oper_id',\n key: 'oper_id',\n width: 150,\n sorter: (a, b) => {\n return a.oper_id.localeCompare(b.oper_id)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Firm ID',\n dataIndex: 'firm_id',\n key: 'firm_id',\n width: 150,\n },\n {\n title: 'Fund ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n width: 150,\n sorter: (a, b) => {\n return a.fund_id.localeCompare(b.fund_id)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Received Date',\n dataIndex: 'received_date',\n key: 'received_date',\n width: 300,\n },\n {\n title: 'Prime Broker',\n dataIndex: 'prime_broker',\n key: 'prime_broker',\n width: 150,\n },\n {\n title: 'Minimum',\n dataIndex: 'minimum',\n key: 'minimum',\n width: 150,\n },\n {\n title: 'Target',\n dataIndex: 'target',\n key: 'target',\n width: 150,\n },\n {\n title: 'Maximum',\n dataIndex: 'maximum',\n key: 'maximum',\n width: 150,\n },\n {\n title: 'Reserved Capacity',\n dataIndex: 'reserved_capacity',\n key: 'reserved_capacity',\n width: 150,\n },\n {\n title: 'Management Fee',\n dataIndex: 'mgmt_fee',\n key: 'mgmt_fee',\n width: 150,\n },\n {\n title: 'Incentive',\n dataIndex: 'incentive',\n key: 'incentive',\n width: 150,\n },\n {\n title: 'Hurdle Rate',\n dataIndex: 'hurdle_rate',\n key: 'hurdle_rate',\n width: 150,\n },\n {\n title: 'Liquidity',\n dataIndex: 'liquidity',\n key: 'liquidity',\n width: 150,\n },\n {\n title: 'Comment',\n dataIndex: 'comment',\n key: 'comment',\n width: 150,\n },\n {\n title: 'Action',\n key: 'action',\n width: 150,\n fixed: 'right',\n render: (_, record) => (\n <>\n {\n setSelectedReceiveMesseage(record)\n setIsShowModal(true)\n }}\n >\n \n \n \n \n\n deleteMessage(record)}>\n \n \n \n ),\n },\n ]\n return (\n \n
\n setIsShowModal(true)}\n disabled={listMesseage?.length === 3}\n >\n Create New Message\n \n
\n 10 ? undefined : false}\n bordered\n loading={dataLoading}\n scroll={{ x: 'min-content' }}\n />\n {dataFundDetail?.firm_id && (\n \n )}\n
\n )\n}\n","import { Col, Form, Input, notification, Row, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport APIService from '../../../../../shared/api'\nimport { DueDiligenceSentSepActCreate } from '../../../../../shared/api/models/FirmDetails'\n\ntype Props = {\n isShowModal: boolean\n setIsShowModal: (value: boolean) => void\n updateSentSepAct: () => void\n firmId: string\n fundId: string\n}\nexport const SentSepActModal: React.FC = ({ isShowModal, setIsShowModal, updateSentSepAct, firmId, fundId }) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n\n const [form] = Form.useForm()\n React.useEffect(() => {\n form.resetFields()\n }, [form])\n\n const submitCreateSentMess = () => {\n const submitData: DueDiligenceSentSepActCreate = {\n fund_id: fundId,\n sent_to: form.getFieldValue('sent_to'),\n }\n\n form.validateFields(['sent_to']).then(() => {\n setLoadingSubmit(true)\n APIService.firmDetailService\n .createDueDiligenceSentMess(firmId, submitData)\n .then(() => {\n notification.success({ message: 'Send Message Created!' })\n updateSentSepAct()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Send Message Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setIsShowModal(false)\n form.resetFields()\n })\n })\n }\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onCancel={() => {\n setIsShowModal(false)\n }}\n onOk={submitCreateSentMess}\n >\n
\n
\n \n
\n \n \n \n \n \n \n \n \n )\n}\n","import { DeleteTwoTone } from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Table, Tooltip } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { DueDiligenceSentSepAct } from '../../../../../shared/api/models/FirmDetails'\nimport { Colors } from '../../../../../shared/colors'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\nimport { SentSepActModal } from './SentSepActModal'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 1rem;\n flex-direction: column;\n`\nexport const SentSepAcct: React.FC = () => {\n const [isShowModal, setIsShowModal] = React.useState(false)\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n\n const { invoke: getListMessage, data: listMesseage, loading: dataLoading } = useServiceState(\n APIService.firmDetailService.getDueDiligenceSentMess,\n )\n\n React.useEffect(() => {\n dataFundDetail?.firm_id && getListMessage(dataFundDetail.firm_id)\n }, [dataFundDetail, getListMessage])\n\n const updateSentSepAct = () => {\n getListMessage(dataFundDetail?.firm_id)\n }\n\n const deleteMessage = (fundId: string) => {\n setLoadingDelete(true)\n dataFundDetail?.firm_id &&\n APIService.firmDetailService\n .deleteDueDiligenceSentMess(dataFundDetail?.firm_id, { fund_id: fundId })\n .then(() => {\n notification.success({ message: 'Send Message Created!' })\n updateSentSepAct()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Send Message Create Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Firm ID',\n dataIndex: 'firm_id',\n key: 'firm_id',\n sorter: (a, b) => {\n return a.firm_id.localeCompare(b.firm_id)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Fund ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n sorter: (a, b) => {\n return a.fund_id.localeCompare(b.fund_id)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Operator ID',\n dataIndex: 'oper_id',\n key: 'oper_id',\n sorter: (a, b) => {\n return a.oper_id.localeCompare(b.oper_id)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Send To',\n dataIndex: 'sent_to',\n key: 'sent_to',\n sorter: (a, b) => {\n return a.sent_to.localeCompare(b.sent_to)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Sent Date',\n dataIndex: 'sent_date',\n key: 'sent_date',\n sorter: (a, b) => {\n return a.sent_date.localeCompare(b.sent_date)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Action',\n dataIndex: 'action',\n render: (_, record) => (\n <>\n deleteMessage(record.fund_id)}>\n \n \n \n ),\n },\n ]\n return (\n \n
\n setIsShowModal(true)}\n disabled={listMesseage && listMesseage.length > 0}\n >\n Create New Message\n \n
\n 10 ? undefined : false}\n bordered\n style={{ flex: 1 }}\n loading={dataLoading}\n />\n {dataFundDetail?.firm_id && (\n \n )}\n
\n )\n}\n","import { Collapse } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { NextBackButton } from '../../../../../shared/components/NextBackButton'\nimport { ReceivedSepAcct } from './ReceivedSepAcct'\nimport { SentSepAcct } from './SentSepAcct'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n overflow: auto;\n`\nconst { Panel } = Collapse\nconst StyledCollapse = styled(Collapse)`\n margin: 1rem;\n .ant-collapse-content-box {\n padding: 0;\n flex: 1;\n display: flex;\n overflow: hidden;\n }\n`\ntype Props = {}\nexport const SepAcct: React.FC = () => {\n return (\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { Tabs } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailLabelSearchContext } from '../../../../shared/api/context/FundDetailLabelSearchContext'\nimport { LeftNavFundEnum, RightTabFundEnum } from '../../../../shared/SearchFundLabel'\nimport { Activities } from './Activities'\nimport { Checklist } from './Checklist/Checklist'\nimport { DueDiligenceContacts } from './Contact/DueDiligenceContacts'\nimport { DueDiligenceDocuments } from './DueDiligenceDocuments'\nimport { InvestOpinion } from './InvestOpinion'\nimport { Meetings } from './Meetings'\nimport { Monthly } from './Monthly'\nimport { ScoreCard } from './ScoreCard'\nimport { SepAcct } from './SepAcct/SepAcct'\nconst { TabPane } = Tabs\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n`\n\nconst LIST_TAB_PANE = [\n {\n id: RightTabFundEnum.DOCUMENTS,\n },\n {\n id: RightTabFundEnum.ACTIVITIES,\n },\n {\n id: RightTabFundEnum.SEP_ACCT,\n },\n {\n id: RightTabFundEnum.CHECKLIST,\n },\n {\n id: RightTabFundEnum.INVEST_OPINIONS,\n },\n {\n id: RightTabFundEnum.SCORE_CARD,\n },\n {\n id: RightTabFundEnum.CONTACTS,\n },\n {\n id: RightTabFundEnum.MEETINGS,\n },\n {\n id: RightTabFundEnum.MONTHLY,\n },\n]\ntype Props = {}\nexport const DueDiligenceMain: React.FC = () => {\n const { isFiltering, filterArr } = React.useContext(FundDetailLabelSearchContext)\n\n const listSearch = React.useMemo(() => {\n return filterArr.filter((item) => item.leftNav === LeftNavFundEnum.DUE_DILIGENCE)\n }, [filterArr])\n\n const renderTab = (id: RightTabFundEnum) => {\n switch (id) {\n case RightTabFundEnum.DOCUMENTS:\n return \n case RightTabFundEnum.ACTIVITIES:\n return \n case RightTabFundEnum.SEP_ACCT:\n return \n case RightTabFundEnum.CHECKLIST:\n return \n case RightTabFundEnum.INVEST_OPINIONS:\n return \n case RightTabFundEnum.SCORE_CARD:\n return \n case RightTabFundEnum.CONTACTS:\n return \n case RightTabFundEnum.MEETINGS:\n return \n case RightTabFundEnum.MONTHLY:\n return \n default:\n break\n }\n }\n return (\n \n {LIST_TAB_PANE.map((item) => {\n const showTabPane = listSearch.findIndex((i) => i.rightTab && i.rightTab === item.id)\n if (showTabPane === -1 && isFiltering) {\n return null\n }\n return (\n \n {renderTab(item.id)}\n \n )\n })}\n \n )\n}\n","import { Col, Row, Table } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport { ColumnProps } from 'antd/lib/table'\nimport React, { useEffect } from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport { FundCCMCResponse } from '../../../../shared/api/models/FundDetails'\nimport {\n FormItemCheckBox,\n FormItemRadio,\n FormItemSelect,\n FormItemTextArea,\n} from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelFormFirm } from '../../../../shared/components/RenderLabelFormFirm'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 1rem;\n\n th.ant-table-cell {\n vertical-align: top;\n }\n td.ant-table-cell {\n vertical-align: top;\n }\n .ant-form-item {\n margin-bottom: 0 !important;\n }\n .ant-radio-wrapper {\n white-space: normal;\n }\n`\n\ntype Props = {\n data?: FundCCMCResponse[]\n form: FormInstance\n}\n\nconst CCMC: React.FC = ({ data, form }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const hasSecurities = form.getFieldValue('has_securities')\n\n useEffect(() => {\n if (hasSecurities === 2) {\n form.setFieldsValue({\n separate_share_classes: undefined,\n pre_trade_compliance_restrictions: undefined,\n other_measures: undefined,\n })\n }\n if (hasSecurities !== 1) {\n form.setFieldsValue({ manager_confirms: undefined })\n }\n }, [form, hasSecurities])\n\n const columns: ColumnProps[] = [\n {\n title: (\n
\n 1(a). Does the fund currently hold any investments whether directly or indirectly (e.g.,{' '}\n publicly traded stocks, bonds, derivatives, warrants, ADRs, GDRs, ETFs, index funds and mutual funds)\n related to the securities identified in{' '}\n E.O. 13959?\n
\n ),\n key: 'has_securities',\n render: () => {\n return (\n \n )\n },\n width: '30%',\n },\n {\n title: (\n
\n 1(b). If “Yes” to 1(a), confirm your plan\n to divest of these assets by the{' '}\n November 11, 2021 U.S. deadline, and\n that you will not add to such positions in the meantime.\n
\n ),\n key: 'manager_confirms',\n render: () => {\n return (\n \n )\n },\n width: '20%',\n },\n {\n title: (\n <>\n

\n 2. Identify or describe any measures you have or will be implementing to prevent the international or\n inadvertent purchase of investments related to the prohibited securities on an ongoing basis.\n

\n

\n \n Below is a link to the complete list of prohibited securities available on the U.S. Department of Treasury\n website:\n \n

\n \n https://www.treasury.gov/ofac/downloads/ccmc/nsccmclist.pdf\n \n \n ),\n render: () => {\n return (\n <>\n \n
\n }\n />\n }\n />\n \n \n \n \n )\n },\n },\n {\n title: '3. Subscription Advanced Notice (# days)',\n render: () => {\n return (\n 0\n ? fundDataDropdown?.subscription_advance_notice.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n )\n },\n },\n ]\n\n return (\n \n 0\n ? data\n : [\n {\n fund_id: '',\n fund_name: '',\n has_securities: null,\n manager_confirms: null,\n separate_share_classes: null,\n pre_trade_compliance_restrictions: null,\n other_measures: null,\n subscription_notice: '',\n },\n ]\n }\n pagination={{ hideOnSinglePage: true }}\n />\n \n )\n}\n\nexport default CCMC\n","import { Tabs } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundCCMCResponse } from '../../../../shared/api/models/FundDetails'\nimport CCMC from '../CCMC/CCMC'\nimport CMIC from '../CMIC/CMIC'\n\nconst { TabPane } = Tabs\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n padding: 05;\n`\n\ntype Props = {\n data?: FundCCMCResponse[]\n form: FormInstance\n}\n\nconst ExecutiveOrders: React.FC = ({ data, form }) => {\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default ExecutiveOrders\n","import { Col, Row } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FormItemCheckBox, FormItemTextArea } from '../../../../shared/components/FormItemComponents'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\nimport { RenderLabelForm } from '../../../../shared/components/RenderLabelForm'\nconst Flex = styled.div`\n display: flex;\n`\nconst FORM_CHECKBOX_LIST = [\n {\n name: 'hfr_database',\n label: 'HFR Database',\n },\n {\n name: 'dead_fund',\n label: 'HFR Dead Funds Database',\n },\n {\n name: 'hfr_risk_premia',\n label: 'HFR Risk Premia AM Database',\n },\n {\n name: 'idb_hfri_fof_synthetic',\n label: 'Index DB: HFRI FOF Synthetic',\n },\n]\nconst ExportSetup: React.FC = () => {\n return (\n \n \n \n {FORM_CHECKBOX_LIST.map((item) => {\n return (\n \n } />\n \n )\n })}\n \n \n \n \n )\n}\nexport default ExportSetup\n","import { ContainerOutlined, InboxOutlined, SearchOutlined } from '@ant-design/icons'\nimport { AutoComplete, Button, Input, notification, Popconfirm, Select } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport Text from 'antd/lib/typography/Text'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport { ViewModeType } from '../../../shared/DraftManager'\nimport { LeftNavFundEnum, ListSearchFundType, renderSearchListFund } from '../../../shared/SearchFundLabel'\nimport { addTabs, FundFirmTypeEnum, PREFIX_EXTERNAL } from '../../../slice/appSettingsSlice'\nimport { Link } from 'react-router-dom'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst TextID = styled(Text)`\n font-size: 14px;\n`\n\ntype PropsCardTitle = {\n id: string\n name: string\n firmName: string\n firmId: string\n optionFilter: ListSearchFundType[]\n textFilterSearch: string\n setOptionFilter: (value: ListSearchFundType[]) => void\n setTextFilterSearch: (value: string) => void\n setActiveTab: (index: LeftNavFundEnum) => void\n activeTab: LeftNavFundEnum\n loadingSubmitForm: boolean\n onPreview: () => void\n isPreviewing: boolean\n isUpdateFund: boolean\n onCancel?: () => void\n setViewMode?: (value: ViewModeType) => void\n}\nexport const CardTitle: React.FC = ({\n id,\n name,\n firmName,\n firmId,\n setOptionFilter,\n setTextFilterSearch,\n textFilterSearch,\n setActiveTab,\n activeTab,\n loadingSubmitForm,\n onPreview,\n isPreviewing,\n isUpdateFund,\n onCancel,\n setViewMode,\n}) => {\n const [optionShow, setOptionShow] = React.useState(renderSearchListFund)\n const dispatch = useDispatch()\n\n const [showCloneModal, setShowCloneModal] = React.useState(false)\n const [clonedFundName, setClonedFundName] = React.useState()\n const [isCloning, setIsCloning] = React.useState(false)\n\n const handleSearch = (value: string) => {\n setTextFilterSearch(value)\n const newOption = renderSearchListFund.filter((item) => item.name.toUpperCase().indexOf(value.toUpperCase()) !== -1)\n setOptionFilter(newOption)\n setOptionShow(newOption)\n if (newOption.findIndex((item) => item.leftNav === activeTab) === -1 && newOption.length > 0) {\n setActiveTab(newOption[0].leftNav)\n }\n }\n\n const handleClone = async (fundName?: string) => {\n if (!fundName) {\n notification.warn({ message: 'Fund Name is required!' })\n return\n }\n try {\n setIsCloning(true)\n const data = await APIService.fundDetailService.cloneFund(id, fundName)\n dispatch(addTabs({ id: data.data.fund_id, type: FundFirmTypeEnum.FUNDS }))\n notification.success({ message: 'Fund cloned successfully!' })\n setShowCloneModal(false)\n setClonedFundName(undefined)\n } catch (error) {\n notification.error({ message: 'Failed to clone fund!' })\n } finally {\n setIsCloning(false)\n }\n }\n\n const handleCancel = () => {\n if (onCancel) {\n onCancel()\n }\n\n // if (!id) {\n // dispatch(removeTabs('new-fund'))\n // } else {\n // dispatch(removeTabs(id))\n // }\n }\n\n const appSetting = useSelector((state: RootState) => state.appSettings)\n\n const { user } = useSelector((state: RootState) => state.user)\n\n const isEdited = appSetting.fundDraft.some((item) => item.id === id)\n\n return (\n \n
\n \n Fund ID: {id}\n \n Firm ID: {firmId}\n \n {firmName && }\n {firmId && firmName && (\n \n {\n dispatch(\n addTabs(\n setViewMode\n ? { name: firmName, id: firmId, type: FundFirmTypeEnum.FIRMS_IN_FUNDS }\n : {\n name: firmName,\n id: `${PREFIX_EXTERNAL}-${firmId}`,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n },\n ),\n )\n }}\n >\n {firmName}\n \n \n )}\n \n \n \n\n \n
\n \n {isUpdateFund ? (Edited) : ''}\n {name}\n {/* MontLake Q Brands Premiere Palm-Tree Alpha Equity */}\n \n
\n
\n Fund Profile |{' '}\n Peer Group Analysis \n
\n
\n
\n \n {!isPreviewing && (\n <>\n {\n if (options.label) {\n const text = options.label.toLocaleString()\n setTextFilterSearch(text)\n const newOption = renderSearchListFund.filter(\n (item) => item.name.toUpperCase().indexOf(text.toUpperCase()) !== -1,\n )\n setOptionShow(newOption)\n const saveOption = newOption.filter((item) => item.key === value)\n setOptionFilter(saveOption)\n if (saveOption.findIndex((item) => item.leftNav === activeTab) === -1 && newOption.length > 0) {\n setActiveTab(saveOption[0].leftNav)\n }\n }\n }}\n onSearch={handleSearch}\n options={optionShow.map((item) => ({ value: item.key, label: item.name }))}\n allowClear\n value={textFilterSearch}\n style={{ width: 300, height: 32, marginRight: 8 }}\n >\n } />\n \n {isUpdateFund ? (\n \n \n \n ) : (\n \n )}\n \n Save\n \n \n setShowCloneModal(false)}\n confirmLoading={isCloning}\n onOk={() => {\n handleClone(clonedFundName)\n }}\n >\n \n setClonedFundName(e.target.value)}\n />\n \n {setViewMode && (\n {\n setViewMode && setViewMode(e as ViewModeType)\n dispatch(addTabs({ id: id, name: name, viewMode: 'external', type: FundFirmTypeEnum.FUNDS }))\n }}\n >\n \n Internal View\n \n External View\n \n )}\n \n )}\n \n \n
\n )\n}\n","import { Button, Col, Collapse, notification, Row, Select } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { NextBackButton } from '../../../../../shared/components/NextBackButton'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin: 1rem;\n flex-direction: column;\n`\n\ntype Props = {\n dataDropdown: string[]\n}\n\nexport const FundInfoElectronicTrading: React.FC = ({ dataDropdown }) => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n\n const [isChangePlatform, setIsChangePlatform] = React.useState(false)\n\n const { invoke: fetchListPlatform, data: dataListPlatform, loading } = useServiceState(\n APIService.fundDetailService.fetchListPlatform,\n )\n\n const [listPlatform, setListPlatform] = React.useState([])\n const [updateLoading, setUpdateLoading] = React.useState(false)\n\n React.useEffect(() => {\n if (!dataListPlatform) {\n return\n }\n dataListPlatform.platforms && setListPlatform(dataListPlatform.platforms)\n }, [dataListPlatform])\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n dataFundDetail.fund_id && fetchListPlatform(dataFundDetail.fund_id)\n }, [dataFundDetail, fetchListPlatform])\n\n const handleUpdatePlatform = () => {\n if (dataFundDetail?.fund_id) {\n setUpdateLoading(true)\n APIService.fundDetailService\n .updateListPlatform(dataFundDetail?.fund_id, listPlatform)\n .then(() => {\n notification.success({ message: 'List Platform Updated!' })\n setIsChangePlatform(false)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Fail!' })\n })\n .finally(() => {\n setUpdateLoading(false)\n })\n }\n }\n\n const handleReset = () => {\n if (dataListPlatform?.platforms) {\n setListPlatform(dataListPlatform.platforms)\n setIsChangePlatform(false)\n }\n }\n\n return (\n \n \n \n \n
\n
\n
Electronic Trading Platform :
\n
\n \n Update\n \n\n \n
\n
\n\n {\n setListPlatform(e)\n setIsChangePlatform(true)\n }}\n >\n {dataDropdown.map((item) => {\n return (\n \n {item}\n \n )\n })}\n \n \n \n \n \n \n \n )\n}\n","import React from 'react'\nimport { FundDetailDropdownContext } from '../../../../../shared/api/context/FundDetailDropdownContext'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\nimport APIService from '../../../../../shared/api'\nimport { useDebounce } from 'use-debounce'\nimport { ExFirmDetails, FirmDetails } from '../../../../../shared/api/models/FirmDetails'\nimport styled from 'styled-components'\nimport Text from 'antd/lib/typography/Text'\nimport { Col, Form, Modal, Row, Select, Spin } from 'antd'\nimport { ModalProps } from 'antd/lib/modal'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\n\nconst Flex = styled.div`\n display: flex;\n`\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n overflow: auto;\n border: 1px #d9d9d9 solid;\n border-radius: 4px;\n padding: 8px;\n height: 400px;\n margin-top: 8px;\n`\n\ntype FirmSelectModalProps = Omit & {\n onOk?: (contactInfo: FirmDetails) => void\n}\nexport const FirmSelectModal = ({ onOk, onCancel, ...props }: FirmSelectModalProps) => {\n const { dataFirms, fundDataDropdown, loading } = React.useContext(FundDetailDropdownContext)\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n\n const { invoke: getFirmDetail, data: dataFirmDetail, loading: loadingFirmDetail } = useServiceState(\n APIService.firmDetailService.fetchFirmInfo,\n )\n\n const [searchText, setSearchText] = React.useState('')\n const [optionFirm, setOptionFirm] = React.useState<{ value: string; label: string }[] | undefined>()\n const [selectedFirmId, setSelectedFirmId] = React.useState(dataFundDetail?.firm_id)\n\n const [debouncedText] = useDebounce(searchText, 500)\n\n const compareFirm = (a: ExFirmDetails, b: ExFirmDetails) => {\n return a.firm_name && b.firm_name ? a.firm_name.localeCompare(b.firm_name) : 0\n }\n const sortedFirms = React.useMemo(() => {\n return dataFirms ? dataFirms.sort(compareFirm) : undefined\n }, [dataFirms])\n\n const filterOptions = React.useCallback(\n (searchInput: string) => {\n if (!sortedFirms) {\n return []\n }\n\n if (!searchInput) {\n const slicedFirms = sortedFirms.slice(0, 20).map((item) => ({ value: item.firm_id, label: item.firm_name }))\n return slicedFirms\n }\n const lowercaseSearch = searchInput.toLowerCase()\n const result = sortedFirms\n .filter((item) => {\n return (\n (item.firm_name && item.firm_name.toLowerCase().includes(lowercaseSearch)) ||\n item.firm_id.toLowerCase().includes(lowercaseSearch)\n )\n })\n .slice(0, 20)\n .map((item) => ({ value: item.firm_id, label: item.firm_name }))\n\n return result\n },\n [sortedFirms],\n )\n\n React.useEffect(() => {\n const newOptions = filterOptions(debouncedText || '')\n setOptionFirm(newOptions)\n }, [filterOptions, debouncedText])\n\n React.useEffect(() => {\n if (!selectedFirmId) {\n return\n }\n\n getFirmDetail(selectedFirmId)\n }, [selectedFirmId])\n\n const { stateLabel, countryLabel } = React.useMemo(() => {\n if (!selectedFirmId || !dataFirmDetail || !fundDataDropdown) {\n return {\n stateLabel: '',\n countryLabel: '',\n }\n }\n let state = dataFirmDetail?.contact_state\n if (state && fundDataDropdown.contact_state && fundDataDropdown.contact_state.length) {\n const foundState = fundDataDropdown.contact_state.find((op) => op.code_code === state)\n if (foundState) {\n state = foundState.code_description\n }\n }\n //\n let country = dataFirmDetail?.country\n if (country && fundDataDropdown.contact_country && fundDataDropdown.contact_country.length) {\n const foundCountry = fundDataDropdown.contact_country.find((op) => op.code_code === country)\n if (foundCountry) {\n country = foundCountry.code_description\n }\n }\n //\n return {\n stateLabel: state || '',\n countryLabel: country || '',\n }\n }, [fundDataDropdown, selectedFirmId, dataFirmDetail])\n\n const handleOk = () => {\n if (!dataFirmDetail || !onOk) {\n return\n }\n onOk(dataFirmDetail)\n setSelectedFirmId(dataFundDetail?.firm_id)\n }\n\n const handleCancel = (e: React.MouseEvent) => {\n setSelectedFirmId(dataFundDetail?.firm_id)\n onCancel && onCancel(e)\n }\n return (\n \n \n Select Firm\n {\n setSelectedFirmId(val)\n }}\n >\n {(optionFirm || []).map((op) => {\n return (\n \n {op.label}\n \n )\n })}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nconst TextWrapper = styled.div`\n width: 100%;\n padding: 4px 11px 4px 11px;\n border: 1px solid #d9d9d9;\n overflow: auto;\n`\n\ntype ItemProps = {\n label: string\n value?: string\n labelCol?: number\n wrapperCol?: number\n left?: boolean\n area?: boolean\n hideValue?: boolean\n}\nconst Item = ({ label, value, labelCol = 6, wrapperCol = 12, left, area, hideValue = true }: ItemProps) => {\n const hasNoValue = hideValue || !value\n return (\n }\n labelCol={{ span: labelCol }}\n wrapperCol={{ span: wrapperCol }}\n >\n \n {hasNoValue ? '' : value}\n \n \n )\n}\n","import { Button, Table } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport moment from 'moment'\nimport React, { useEffect } from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownContext } from '../../../../../shared/api/context/FundDetailDropdownContext'\nimport { Colors } from '../../../../../shared/colors'\nimport { DividerForm } from '../../../../../shared/components/DividerForm'\nimport { FormItemInput, FormItemSelect, FormItemTextArea } from '../../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\n\nimport { FirmDetails } from '../../../../../shared/api/models/FirmDetails'\nimport { FirmSelectModal } from './FirmSelectModal'\nimport { FormInstance } from 'antd/lib/form'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n`\nconst Flex = styled.div`\n display: flex;\n`\ntype Props = { form: FormInstance; setIsUpdateFund: (isUpdate: boolean) => void }\nexport const FundContact: React.FC = ({ form, setIsUpdateFund }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const { dataFundDetail, dataFundDetailChange, setDataFundDetailChange } = React.useContext(FundDetailDataContext)\n const { invoke: getFirmUsers, data: firmUsers, loading: fetchingFirmUser } = useServiceState(\n APIService.firmDetailService.fetchFirmUser,\n )\n\n const [isModalOpen, setIsModalOpen] = React.useState(false)\n\n const showModal = () => {\n setIsModalOpen(true)\n }\n\n const handleOk = (contactInfo: FirmDetails) => {\n const result: Record = {\n contact_name: contactInfo?.contact_name1,\n contact_address1: contactInfo?.contact_address1,\n contact_address2: contactInfo?.contact_address2,\n contact_city: contactInfo?.contact_city,\n contact_state: contactInfo?.contact_state,\n contact_postal_code: contactInfo?.contact_postal_code,\n contact_country: contactInfo?.country,\n contact_phone: contactInfo?.contact_phone,\n contact_fax: contactInfo?.contact_fax,\n contact_email: contactInfo?.contact_email,\n contact_web: contactInfo?.contact_web,\n }\n const keys = Object.keys(result)\n // // remove blank values\n // keys.forEach((key: string) => {\n // if (!result[key]) {\n // delete result[key]\n // }\n // })\n // keys = Object.keys(result)\n\n form.setFieldsValue(result)\n // set changed + form status\n setDataFundDetailChange(\n {\n ...(dataFundDetailChange?.current || {}),\n ...result,\n },\n keys[keys.length - 1],\n )\n setIsUpdateFund(true)\n // close\n setIsModalOpen(false)\n }\n\n const handleCancel = () => {\n setIsModalOpen(false)\n }\n\n useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getFirmUsers(dataFundDetail.firm_id)\n }, [dataFundDetail, getFirmUsers])\n\n const userColumns: ColumnProps[] = [\n {\n title: 'Company',\n key: 'company',\n dataIndex: 'company',\n sorter: (a, b) => (b.company > a.company ? -1 : 1),\n },\n {\n title: 'Email',\n key: 'email',\n dataIndex: 'email',\n defaultSortOrder: 'ascend',\n render: (value, record) => {\n return value ? (\n \n {value}\n \n ) : null\n },\n sorter: (a, b) => (b.email > a.email ? -1 : 1),\n },\n {\n title: 'Phone Number',\n key: 'business_phone',\n dataIndex: 'business_phone',\n sorter: (a, b) => (b.email > a.email ? -1 : 1),\n },\n {\n title: 'First Name',\n key: 'first_name',\n dataIndex: 'first_name',\n sorter: (a, b) => (b.email > a.email ? -1 : 1),\n },\n {\n title: 'Last Name',\n key: 'last_name',\n dataIndex: 'last_name',\n sorter: (a, b) => (b.email > a.email ? -1 : 1),\n },\n {\n title: 'User Status',\n key: 'active',\n dataIndex: 'active',\n render: (value) => {\n return value ? (\n Active\n ) : (\n Inactive\n )\n },\n sorter: (a, b) => (b.email > a.email ? -1 : 1),\n },\n {\n title: 'Last Activity',\n key: 'last_event_timestamp',\n dataIndex: 'last_event_timestamp',\n sorter: (a, b) => (moment(b).isAfter(moment(a)) ? 1 : -1),\n render: (value, record) => {\n return value ? (\n \n {moment(value).format('YYYY-MM-DD HH:mm')}\n \n ) : null\n },\n },\n ]\n\n return (\n \n \n \n \n \n }\n labelCol={6}\n wrapperCol={12}\n maxLength={60}\n />\n }\n labelCol={6}\n wrapperCol={12}\n maxLength={60}\n />\n }\n labelCol={6}\n wrapperCol={12}\n maxLength={60}\n />\n }\n labelCol={6}\n wrapperCol={12}\n maxLength={60}\n />\n \n }\n labelCol={12}\n wrapperCol={8}\n maxLength={30}\n />\n }\n labelCol={4}\n wrapperCol={8}\n allowClear={true}\n options={\n fundDataDropdown?.contact_state && fundDataDropdown?.contact_state.length > 0\n ? fundDataDropdown.contact_state.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n }\n labelCol={12}\n wrapperCol={8}\n maxLength={10}\n />\n }\n labelCol={4}\n wrapperCol={8}\n options={\n fundDataDropdown?.contact_country && fundDataDropdown?.contact_country.length > 0\n ? fundDataDropdown.contact_country.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n }\n labelCol={12}\n wrapperCol={8}\n maxLength={30}\n />\n }\n labelCol={4}\n wrapperCol={8}\n maxLength={30}\n />\n \n }\n labelCol={6}\n wrapperCol={12}\n maxLength={255}\n />\n }\n labelCol={6}\n wrapperCol={12}\n maxLength={60}\n />\n \n \n \n 'ML Users'}\n size=\"small\"\n columns={userColumns}\n dataSource={firmUsers}\n loading={fetchingFirmUser}\n />\n \n \n \n \n )\n}\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { DividerForm } from '../../../../../shared/components/DividerForm'\nimport {\n FormItemAutoComplete,\n FormItemCheckBox,\n FormItemInput,\n} from '../../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst OPTION_MGMT = [\n {\n text: '1',\n value: '1',\n },\n {\n text: '1.5',\n value: '1.5',\n },\n {\n text: '2',\n value: '2',\n },\n]\nconst OPTION_INCENTIVE_FEE = [\n {\n text: '10',\n value: '10',\n },\n {\n text: '15',\n value: '15',\n },\n {\n text: '20',\n value: '20',\n },\n]\nconst FORM_INPUT_GROUP_FOOTER = [\n {\n name: 'max_12b1_fee',\n text: 'Max 12B-1 Fee %',\n\n maxLength: 30,\n },\n {\n name: 'max_front_fee',\n text: 'Max Front-End Load Fee %',\n\n maxLength: 30,\n },\n {\n name: 'max_deferred_fee',\n text: 'Max Deferred Sale Load Fee %',\n\n maxLength: 30,\n },\n]\nconst FORM_LEFT_GROUP = [\n { name: 'mgmt_fee', text: 'Mgmt. Fee %', options: OPTION_MGMT, maxLength: 30 },\n {\n name: 'administrative_fee',\n text: 'Admin. Fee %',\n maxLength: 30,\n },\n {\n name: 'redemption_fee',\n text: 'Rdm. Fee %',\n maxLength: 30,\n },\n {\n name: 'other_fees',\n text: 'Other Fee %',\n maxLength: 30,\n },\n]\nconst FORM_MIDDLE_GROUP = [\n { name: 'incentive_fee', text: 'Incentive Fee %', options: OPTION_INCENTIVE_FEE, maxLength: 30 },\n {\n name: 'sales_fee',\n text: 'Sales Fee %',\n maxLength: 30,\n },\n { name: 'redemption_fee_months', text: 'If Less Than', normalize: 'number', suffix: 'months' },\n]\n\nconst LIST_FIELD_EDITED_LIQUID_CHECK = ['administrative_fee', 'incentive_fee', 'sales_fee']\ntype Props = {\n form: FormInstance\n}\n\nconst Fees: React.FC = ({ form }) => {\n const [isCheckHurdleRate, setIsCheckHurdleRate] = React.useState(\n form.getFieldValue('is_hurdle_rate') || false,\n )\n\n const isLiquidCheck = form.getFieldValue('liquid_alt_product') as boolean\n\n return (\n \n \n \n {FORM_LEFT_GROUP.map((item) => {\n return item.options ? (\n }\n name={item.name}\n labelCol={10}\n wrapperCol={12}\n options={item.options}\n disable={LIST_FIELD_EDITED_LIQUID_CHECK.includes(item.name) && isLiquidCheck}\n rules={\n item.maxLength\n ? [\n {\n max: item.maxLength,\n message: `Value should be less than ${item.maxLength} characters`,\n },\n ]\n : undefined\n }\n />\n ) : (\n }\n name={item.name}\n labelCol={10}\n wrapperCol={12}\n maxLength={item.maxLength ? item.maxLength : undefined}\n disabled={LIST_FIELD_EDITED_LIQUID_CHECK.includes(item.name) && isLiquidCheck}\n />\n )\n })}\n \n \n {FORM_MIDDLE_GROUP.map((item) => {\n return item.options ? (\n }\n name={item.name}\n labelCol={10}\n wrapperCol={12}\n maxLength={item.maxLength}\n options={item.options}\n disable={LIST_FIELD_EDITED_LIQUID_CHECK.includes(item.name) && isLiquidCheck}\n />\n ) : (\n }\n name={item.name}\n labelCol={10}\n wrapperCol={12}\n normalize={item.normalize}\n maxLength={item.maxLength ? item.maxLength : undefined}\n suffix={item.suffix}\n disabled={LIST_FIELD_EDITED_LIQUID_CHECK.includes(item.name) && isLiquidCheck}\n />\n )\n })}\n \n \n }\n disable={isLiquidCheck}\n />\n \n
\n ({\n validator() {\n setIsCheckHurdleRate(getFieldValue('is_hurdle_rate'))\n return Promise.resolve()\n },\n }),\n ]}\n />\n
\n \n \n }\n />\n \n \n \n \n {FORM_INPUT_GROUP_FOOTER.map((item) => {\n return (\n
\n }\n labelCol={10}\n wrapperCol={12}\n maxLength={item.maxLength ? item.maxLength : undefined}\n disabled={!isLiquidCheck}\n />\n \n )\n })}\n \n \n )\n}\nexport default Fees\n","import { Col, Row } from 'antd'\nimport React, { useContext } from 'react'\nimport { useDispatch } from 'react-redux'\nimport styled from 'styled-components'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownContext } from '../../../../../shared/api/context/FundDetailDropdownContext'\nimport { Colors } from '../../../../../shared/colors'\nimport { DividerForm } from '../../../../../shared/components/DividerForm'\nimport {\n FormItemCheckBox,\n FormItemDatePicker,\n FormItemInput,\n FormItemSelect,\n} from '../../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\nimport { LeftNavFirmEnum } from '../../../../../shared/SearchFirmLabel'\nimport { LeftNavFundEnum } from '../../../../../shared/SearchFundLabel'\nimport { addTabs, FundFirmTypeEnum } from '../../../../../slice/appSettingsSlice'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\n\nconst CHECK_BOX_GROUP = [\n {\n name: 'is_offshore',\n text: 'Is Offshore ?',\n },\n {\n name: 'is_feeder_fund',\n text: 'Feeder Fund ?',\n },\n {\n name: 'is_hfr_funded',\n text: 'Is HFR Fund ?',\n },\n {\n name: 'is_minority_fund',\n text: 'Is Minority Managed?',\n },\n]\ntype Props = {}\nconst Information: React.FC = () => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const dispatch = useDispatch()\n const { dataFundDetail } = useContext(FundDetailDataContext)\n const handleFundAssetClick = () => {\n if (dataFundDetail) {\n dispatch(\n addTabs({\n name: dataFundDetail.fund_name,\n id: dataFundDetail.fund_id,\n type: FundFirmTypeEnum.FUNDS,\n path: LeftNavFundEnum.PERFORMANCE,\n }),\n )\n }\n }\n\n const handleFirmAssetClick = () => {\n if (dataFundDetail) {\n dispatch(\n addTabs({\n name: dataFundDetail.firm_name,\n id: dataFundDetail.firm_id,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n path: LeftNavFirmEnum.FIRM_ASSETS,\n }),\n )\n }\n }\n\n return (\n \n \n \n \n }\n prefix={dataFundDetail?.denomination}\n suffix=\"MM\"\n labelCol={12}\n wrapperCol={12}\n disabled\n />\n \n \n }\n labelCol={12}\n wrapperCol={12}\n disabled\n />\n \n \n }\n labelCol={12}\n wrapperCol={12}\n allowClear\n />\n \n \n \n }\n prefix={dataFundDetail?.firm_denomination}\n suffix=\"MM\"\n labelCol={12}\n wrapperCol={12}\n disabled\n />\n \n \n }\n labelCol={12}\n wrapperCol={12}\n disabled\n />\n \n \n }\n labelCol={12}\n wrapperCol={12}\n allowClear\n />\n \n \n \n \n \n {CHECK_BOX_GROUP.map((item) => {\n return (\n \n } />\n \n )\n })}\n \n\n \n \n }\n labelCol={12}\n wrapperCol={12}\n options={\n fundDataDropdown?.contact_status && fundDataDropdown.contact_status.length > 0\n ? fundDataDropdown.contact_status.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n allowClear\n />\n \n \n }\n labelCol={12}\n wrapperCol={12}\n options={\n fundDataDropdown?.minority_manage_type && fundDataDropdown.minority_manage_type.length > 0\n ? fundDataDropdown.minority_manage_type.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n allowClear\n />\n \n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n options={\n fundDataDropdown?.liquidity && fundDataDropdown.liquidity.length > 0\n ? fundDataDropdown.liquidity.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n allowClear\n />\n \n \n }\n labelCol={12}\n wrapperCol={12}\n options={\n fundDataDropdown?.minority_manage_level && fundDataDropdown.minority_manage_level.length > 0\n ? fundDataDropdown.minority_manage_level.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n allowClear\n />\n \n \n \n \n )\n}\nexport default Information\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { FundDetailDropdownContext } from '../../../../../shared/api/context/FundDetailDropdownContext'\nimport {\n FormItemAutoComplete,\n FormItemCheckBox,\n FormItemDatePicker,\n FormItemSelect,\n} from '../../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\n\ntype Props = {\n form: FormInstance\n}\n\nconst OPTION_USE_OF_LEVERAGE = [\n {\n value: 'Yes',\n text: 'Yes',\n },\n {\n value: 'No',\n text: 'No',\n },\n]\nconst Structure: React.FC = ({ form }) => {\n const { userOptions } = React.useContext(FundDetailDataContext)\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const liquidAltProduct = form.getFieldValue('liquid_alt_product')\n const SELECT_GROUP = React.useMemo(() => {\n return [\n {\n name: 'domicile',\n label: 'Domicile',\n isAutoComplete: true,\n options:\n fundDataDropdown && fundDataDropdown.domicile && fundDataDropdown.domicile.length > 0\n ? fundDataDropdown.domicile.map((item) => ({ value: item, text: item }))\n : [],\n },\n {\n name: 'min_invest',\n label: 'Min. Investment',\n options:\n fundDataDropdown && fundDataDropdown.min_invest && fundDataDropdown.min_invest.length > 0\n ? fundDataDropdown.min_invest.map((item) => ({ value: item, text: item }))\n : [],\n isAutoComplete: true,\n // normalize: 'float',\n },\n {\n name: 'min_invest_indv',\n label: 'Ind. Account Min.',\n options:\n fundDataDropdown && fundDataDropdown.min_invest_indv && fundDataDropdown.min_invest_indv.length > 0\n ? fundDataDropdown.min_invest_indv.map((item) => ({ value: item, text: item }))\n : [],\n isAutoComplete: true,\n // normalize: 'float',\n },\n {\n name: 'structure',\n label: 'Structure',\n options:\n fundDataDropdown && fundDataDropdown.structure && fundDataDropdown.structure.length > 0\n ? fundDataDropdown.structure.map((item) => ({ value: item, text: item }))\n : [],\n maxLength: 30,\n isAutoComplete: true,\n isKeepOptions: true,\n },\n {\n name: 'add_invest',\n label: 'Add Investment',\n options:\n fundDataDropdown && fundDataDropdown.add_invest && fundDataDropdown.add_invest.length > 0\n ? fundDataDropdown.add_invest.map((item) => ({ value: item, text: item }))\n : [],\n isAutoComplete: true,\n // normalize: 'float',\n },\n {\n name: 'accepts_mgd_accts',\n label: 'Accepts Mng. Accts?',\n options:\n fundDataDropdown && fundDataDropdown.accepts_mgd_accts && fundDataDropdown.accepts_mgd_accts.length > 0\n ? fundDataDropdown.accepts_mgd_accts.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n allowClear: true,\n },\n {\n name: 'registration_code',\n label: 'Registration',\n options:\n fundDataDropdown && fundDataDropdown.registration_code && fundDataDropdown.registration_code.length > 0\n ? fundDataDropdown.registration_code.map((item) => ({ value: item, text: item }))\n : [],\n allowClear: true,\n },\n {\n name: 'woman_managed',\n label: 'Woman Managed',\n options:\n fundDataDropdown && fundDataDropdown.woman_managed && fundDataDropdown.woman_managed.length > 0\n ? fundDataDropdown.woman_managed.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n allowClear: true,\n },\n {\n name: 'run_sep_mgd_accts',\n label: 'Run Sep Mng Accts?',\n options:\n fundDataDropdown && fundDataDropdown.run_sep_mgd_accts && fundDataDropdown.run_sep_mgd_accts.length > 0\n ? fundDataDropdown.run_sep_mgd_accts.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n allowClear: true,\n },\n {\n name: 'ucitsiii',\n label: 'UCITSIII',\n options:\n fundDataDropdown && fundDataDropdown.ucitsiii && fundDataDropdown.ucitsiii.length > 0\n ? fundDataDropdown.ucitsiii.map((item) => ({ value: item, text: item }))\n : [],\n allowClear: true,\n },\n {\n name: 'use_of_leverage',\n label: 'Use of Leverage',\n maxLength: 30,\n options: OPTION_USE_OF_LEVERAGE,\n isAutoComplete: true,\n },\n {\n name: 'use_of_leverage_type',\n label: 'Use of Leverage Type',\n options:\n fundDataDropdown && fundDataDropdown.use_of_leverage_type && fundDataDropdown.use_of_leverage_type.length > 0\n ? fundDataDropdown.use_of_leverage_type.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n allowClear: true,\n },\n {\n name: 'liquid_alt_product',\n label: 'Liquid Alt Product',\n isCheckbox: true,\n },\n {\n name: 'liquid_alt_type',\n label: 'Liquid Alt Type',\n disabled: !liquidAltProduct,\n allowClear: true,\n options:\n fundDataDropdown && fundDataDropdown.liquid_alt_type && fundDataDropdown.liquid_alt_type.length > 0\n ? fundDataDropdown.liquid_alt_type.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n },\n {\n name: 'liquid_alt_region',\n label: 'Liquid Alt Regions',\n disabled: !liquidAltProduct,\n allowClear: true,\n options:\n fundDataDropdown && fundDataDropdown.liquid_alt_region && fundDataDropdown.liquid_alt_region.length > 0\n ? fundDataDropdown.liquid_alt_region.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n },\n {\n label: 'Long Only Product',\n name: 'long_only_product',\n isCheckbox: true,\n },\n\n {\n name: 'aifmd_compliant',\n label: 'AIFMD',\n options:\n fundDataDropdown && fundDataDropdown.aifmd_compliant && fundDataDropdown.aifmd_compliant.length > 0\n ? fundDataDropdown.aifmd_compliant.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n allowClear: true,\n },\n {\n name: 'multi_manager_platform',\n label: 'Multi-Manager Platform',\n options:\n fundDataDropdown &&\n fundDataDropdown.sma_weeklyliquid_10mm &&\n fundDataDropdown.sma_weeklyliquid_10mm.length > 0\n ? fundDataDropdown.sma_weeklyliquid_10mm.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n allowClear: true,\n },\n {\n name: 'sma_weeklyliquid_10mm',\n label: 'SMA Weekly $10MM',\n options:\n fundDataDropdown &&\n fundDataDropdown.sma_weeklyliquid_10mm &&\n fundDataDropdown.sma_weeklyliquid_10mm.length > 0\n ? fundDataDropdown.sma_weeklyliquid_10mm.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n allowClear: true,\n },\n {\n name: 'sma_monthlyliquid_20mm',\n label: 'SMA Monthly $20MM',\n options:\n fundDataDropdown &&\n fundDataDropdown.sma_monthlyliquid_20mm &&\n fundDataDropdown.sma_monthlyliquid_20mm.length > 0\n ? fundDataDropdown.sma_monthlyliquid_20mm.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n allowClear: true,\n },\n {\n name: 'multi_manager_platform_reviewed_date',\n label: 'MM Platform Reviewed Date',\n isDate: true,\n allowClear: true,\n },\n {\n name: 'blank',\n label: 'black',\n isEmpty: true,\n },\n {\n name: 'sma_monthlyliquid_50mm',\n label: 'SMA Monthly $50MM',\n options:\n fundDataDropdown &&\n fundDataDropdown.sma_monthlyliquid_50mm &&\n fundDataDropdown.sma_monthlyliquid_50mm.length > 0\n ? fundDataDropdown.sma_monthlyliquid_50mm.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n allowClear: true,\n },\n {\n name: 'multi_manager_platform_reviewed_by',\n label: 'MM Platform Reviewed By',\n options: userOptions || [],\n },\n ]\n }, [fundDataDropdown, liquidAltProduct, userOptions])\n return (\n \n {SELECT_GROUP.map((item) => {\n if (item.name === 'blank_cell') {\n return \n }\n return (\n \n {item.isEmpty ? (\n \n ) : item.isCheckbox ? (\n \n \n } />\n \n \n ) : item.isAutoComplete ? (\n }\n labelCol={10}\n wrapperCol={14}\n isKeepOptions={item.isKeepOptions}\n />\n ) : item.isDate ? (\n }\n labelCol={10}\n wrapperCol={14}\n allowClear={item.allowClear}\n />\n ) : (\n }\n allowClear={item.allowClear}\n labelCol={10}\n wrapperCol={14}\n options={item.options ? item.options : []}\n disabled={item.disabled}\n />\n )}\n \n )\n })}\n \n )\n}\nexport default Structure\n","import { Collapse } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../../../app/rootReducer'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailLabelSearchContext } from '../../../../../shared/api/context/FundDetailLabelSearchContext'\nimport { NextBackButton } from '../../../../../shared/components/NextBackButton'\nimport {\n CollapseFundEnum,\n LeftNavFundEnum,\n renderSearchListFund,\n RightTabFundEnum,\n} from '../../../../../shared/SearchFundLabel'\nimport Fees from './Fees'\nimport Information from './Information'\nimport Principals from './Principals'\nimport Structure from './Structure'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\n\nconst { Panel } = Collapse\n\nconst COLLAPSE_LIST = [\n {\n id: CollapseFundEnum.INFORMATION,\n },\n {\n id: CollapseFundEnum.STRUCTURE,\n },\n {\n id: CollapseFundEnum.FEES,\n },\n {\n id: CollapseFundEnum.PRINCIPALS,\n },\n]\ntype Props = { form: FormInstance }\nexport const FundInfoMain: React.FC = ({ form }) => {\n const { isFiltering, filterArr } = React.useContext(FundDetailLabelSearchContext)\n\n const arrCollapse = React.useMemo(() => {\n return isFiltering\n ? COLLAPSE_LIST.filter(\n (item) =>\n filterArr\n .filter(\n (item) => item.leftNav === LeftNavFundEnum.INFORMATION && item.rightTab === RightTabFundEnum.FUND_INFO,\n )\n .findIndex((i) => i.collapse && i.collapse === item.id) > -1,\n )\n : COLLAPSE_LIST\n }, [filterArr, isFiltering])\n\n const [activeCollapse, setActiveCollapse] = React.useState(CollapseFundEnum.INFORMATION)\n\n React.useEffect(() => {\n if (isFiltering) {\n setActiveCollapse(\n arrCollapse.map((item) => {\n return item.id\n }),\n )\n }\n }, [arrCollapse, isFiltering])\n\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n\n const appSetting = useSelector((state: RootState) => state.appSettings)\n const lastKey = appSetting.fundDraft.find((item) => item.id === dataFundDetail?.fund_id)?.lastFieldChange\n\n React.useEffect(() => {\n if (lastKey) {\n const activeCollapse = renderSearchListFund.find((item) => item.key === lastKey)?.collapse\n activeCollapse &&\n COLLAPSE_LIST.findIndex((item) => item.id === activeCollapse) > -1 &&\n setActiveCollapse((prev) => {\n if (prev.includes(activeCollapse)) {\n return prev\n }\n return activeCollapse\n })\n }\n }, [lastKey])\n\n const renderCollapse = (id: CollapseFundEnum) => {\n switch (id) {\n case CollapseFundEnum.INFORMATION:\n return \n case CollapseFundEnum.STRUCTURE:\n return \n case CollapseFundEnum.FEES:\n return \n case CollapseFundEnum.PRINCIPALS:\n return \n default:\n break\n }\n }\n\n return (\n \n (key ? setActiveCollapse(key) : setActiveCollapse([]))}\n >\n {arrCollapse.map((item) => {\n return (\n \n {renderCollapse(item.id)}\n \n )\n })}\n \n \n \n )\n}\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../../../shared/api/context/FundDetailDropdownContext'\nimport { DividerForm } from '../../../../../shared/components/DividerForm'\nimport {\n FormItemAutoComplete,\n FormItemCheckBox,\n FormItemDatePicker,\n FormItemInput,\n FormItemSelect,\n} from '../../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n`\n\ntype Props = { form: FormInstance }\nexport const InvestmentInfo: React.FC = ({ form }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const isLockup = form.getFieldValue('is_lockup') === '1' || form.getFieldValue('is_lockup') === true\n\n const RIGHT_TOP_GROUP_FORMITEM = [\n {\n name: 'accepts_new_investment',\n text: 'Accepting New Investment',\n isCheckBox: true,\n },\n {\n name: 'investor_type',\n text: 'Accred. Investor Type',\n options:\n fundDataDropdown?.investor_type && fundDataDropdown?.investor_type.length > 0\n ? fundDataDropdown?.investor_type.map((item) => ({ value: item, text: item }))\n : [],\n },\n {\n name: 'performance_reporting',\n text: 'Perf. Rept. to Investors',\n options:\n fundDataDropdown?.performance_reporting && fundDataDropdown?.performance_reporting.length > 0\n ? fundDataDropdown?.performance_reporting.map((item) => ({ value: item, text: item }))\n : [],\n },\n {\n name: 'prime_broker',\n text: 'Prime Broker',\n maxLength: 60,\n options:\n fundDataDropdown?.prime_broker && fundDataDropdown?.prime_broker.length > 0\n ? fundDataDropdown?.prime_broker.map((item) => ({ value: item, text: item }))\n : [],\n isAutoComplete: true,\n },\n {\n name: 'administrator',\n text: 'Administrator',\n options:\n fundDataDropdown?.administrator && fundDataDropdown?.administrator.length > 0\n ? fundDataDropdown?.administrator.map((item) => ({ value: item, text: item }))\n : [],\n isAutoComplete: true,\n },\n\n {\n name: 'legal_adviser',\n text: 'Legal Adviser',\n options:\n fundDataDropdown?.legal_adviser && fundDataDropdown?.legal_adviser.length > 0\n ? fundDataDropdown?.legal_adviser.map((item) => ({ value: item, text: item }))\n : [],\n isAutoComplete: true,\n },\n {\n name: 'auditor_name',\n text: 'Auditor',\n options:\n fundDataDropdown?.auditor_name && fundDataDropdown?.auditor_name.length > 0\n ? fundDataDropdown?.auditor_name.map((item) => ({ value: item, text: item }))\n : [],\n isAutoComplete: true,\n },\n ]\n const LEFT_BOT_GROUP_FORMITEM = [\n {\n name: 'placement_agent',\n text: 'Placement Agent',\n },\n {\n name: 'banking_agent',\n text: 'Banking Agent',\n },\n {\n name: 'consultant',\n text: 'Consultant',\n },\n {\n name: 'custodian',\n text: 'Custodian',\n maxLength: 60,\n },\n {\n name: 'constituent_count',\n text: '# of Constituents',\n type: 'number',\n },\n {\n name: 'sub_strategy_desc',\n text: 'Sub-Strategy Desc',\n maxLength: 60,\n },\n ]\n const RIGHT_BOT_GROUP_FORMITEM = React.useMemo(() => {\n return [\n {\n name: 'is_lockup',\n text: 'Is Lockup',\n isCheckBox: true,\n },\n {\n name: 'lockup_period',\n text: 'Lockup Period',\n disabled: !isLockup,\n allowClear: true,\n options:\n fundDataDropdown && fundDataDropdown.lockup_period && fundDataDropdown.lockup_period.length > 0\n ? fundDataDropdown.lockup_period.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n },\n {\n name: 'lockup_type',\n text: 'Lockup Type',\n allowClear: true,\n options:\n fundDataDropdown && fundDataDropdown.lockup_type && fundDataDropdown.lockup_type.length > 0\n ? fundDataDropdown.lockup_type.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n disabled: !isLockup,\n },\n {\n name: 'gate_fund',\n text: 'Gate: Fund-Level',\n options:\n fundDataDropdown && fundDataDropdown.gate_fund && fundDataDropdown.gate_fund.length > 0\n ? fundDataDropdown.gate_fund.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n },\n {\n name: 'gate_investor',\n text: 'Gate: Investor-Level',\n options:\n fundDataDropdown && fundDataDropdown.gate_investor && fundDataDropdown.gate_investor.length > 0\n ? fundDataDropdown.gate_investor.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n },\n ]\n }, [fundDataDropdown, isLockup])\n return (\n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n options={\n fundDataDropdown?.equity_subscription && fundDataDropdown?.equity_subscription.length > 0\n ? fundDataDropdown?.equity_subscription.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={12}\n wrapperCol={12}\n allowClear\n options={\n fundDataDropdown?.subscription_advance_notice && fundDataDropdown?.subscription_advance_notice.length > 0\n ? fundDataDropdown?.subscription_advance_notice.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n
\n
\n }\n labelCol={16}\n wrapperCol={8}\n allowClear\n options={\n fundDataDropdown?.subscription_cutoff_time && fundDataDropdown?.subscription_cutoff_time.length > 0\n ? fundDataDropdown?.subscription_cutoff_time.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n
\n
\n 0\n ? fundDataDropdown?.subscription_cutoff_timezone.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n
\n
\n }\n labelCol={12}\n wrapperCol={12}\n allowClear\n options={\n fundDataDropdown?.subscription_settlement_days &&\n fundDataDropdown?.subscription_settlement_days.length > 0\n ? fundDataDropdown?.subscription_settlement_days.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={12}\n wrapperCol={12}\n options={\n fundDataDropdown?.equity_redemption && fundDataDropdown?.equity_redemption.length > 0\n ? fundDataDropdown?.equity_redemption.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n }\n labelCol={12}\n wrapperCol={12}\n normalize=\"number\"\n typeField=\"number\"\n />\n \n
\n \n \n \n
\n \n
\n
\n \n
\n \n \n\n }\n labelCol={12}\n wrapperCol={12}\n normalize=\"number\"\n typeField=\"number\"\n />\n \n \n {RIGHT_TOP_GROUP_FORMITEM.map((item) => {\n return item.isAutoComplete ? (\n }\n labelCol={12}\n wrapperCol={12}\n options={item.options}\n rules={\n item.maxLength && item.name === 'prime_broker'\n ? [\n {\n max: 60,\n message: 'Value should be less than 60 characters',\n },\n ]\n : undefined\n }\n />\n ) : item.isCheckBox ? (\n \n \n } />\n \n \n ) : item.options ? (\n }\n labelCol={12}\n wrapperCol={12}\n options={item.options}\n />\n ) : (\n }\n maxLength={60}\n placeholder=\"Banking Agent...\"\n labelCol={12}\n wrapperCol={12}\n />\n )\n })}\n\n \n
\n \n
\n \n \n }\n name=\"last_audit_date\"\n wrapperCol={12}\n labelCol={12}\n allowClear\n />\n \n \n \n\n \n
\n {LEFT_BOT_GROUP_FORMITEM.map((item) => {\n return (\n }\n labelCol={12}\n wrapperCol={12}\n normalize={item.type}\n typeField={item.type}\n maxLength={item.maxLength}\n />\n )\n })}\n \n \n {RIGHT_BOT_GROUP_FORMITEM.map((item) => {\n return item.isCheckBox ? (\n \n \n } />\n \n \n ) : (\n }\n allowClear={item.allowClear}\n labelCol={12}\n wrapperCol={12}\n options={item.options || []}\n />\n )\n })}\n \n \n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { FormItemTextArea } from '../../../../../shared/components/FormItemComponents'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 0 1rem;\n`\ntype Props = {}\nexport const StrategyDescription: React.FC = () => {\n return (\n \n \n \n )\n}\n","import { Collapse } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../../../app/rootReducer'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailLabelSearchContext } from '../../../../../shared/api/context/FundDetailLabelSearchContext'\nimport { NextBackButton } from '../../../../../shared/components/NextBackButton'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\nimport {\n CollapseFundEnum,\n LeftNavFundEnum,\n renderSearchListFund,\n RightTabFundEnum,\n} from '../../../../../shared/SearchFundLabel'\nimport { InvestmentInfo } from './InvestmentInfo'\nimport { StrategyDescription } from './StrategyDescription'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst { Panel } = Collapse\n\nconst COLLAPSE_LIST = [\n {\n id: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n id: CollapseFundEnum.STRATEGY_DESCRIPTION,\n },\n]\ntype Props = { form: FormInstance }\nexport const FundInvestmentInfoMain: React.FC = ({ form }) => {\n const { isFiltering, filterArr } = React.useContext(FundDetailLabelSearchContext)\n\n const arrCollapse = React.useMemo(() => {\n return isFiltering\n ? COLLAPSE_LIST.filter(\n (item) =>\n filterArr\n .filter(\n (item) =>\n item.leftNav === LeftNavFundEnum.INFORMATION &&\n item.rightTab === RightTabFundEnum.FUND_INVESTMENT_INFO,\n )\n .findIndex((i) => i.collapse && i.collapse === item.id) > -1,\n )\n : COLLAPSE_LIST\n }, [filterArr, isFiltering])\n\n const [activeCollapse, setActiveCollapse] = React.useState(CollapseFundEnum.INVESTMENT_INFO)\n\n React.useEffect(() => {\n if (isFiltering) {\n setActiveCollapse(\n arrCollapse.map((item) => {\n return item.id\n }),\n )\n }\n }, [arrCollapse, isFiltering])\n\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n\n const appSetting = useSelector((state: RootState) => state.appSettings)\n const lastKey = appSetting.fundDraft.find((item) => item.id === dataFundDetail?.fund_id)?.lastFieldChange\n\n React.useEffect(() => {\n if (lastKey) {\n const activeCollapse = renderSearchListFund.find((item) => item.key === lastKey)?.collapse\n activeCollapse &&\n COLLAPSE_LIST.findIndex((item) => item.id === activeCollapse) > -1 &&\n setActiveCollapse((prev) => {\n if (prev.includes(activeCollapse)) {\n return prev\n }\n return activeCollapse\n })\n }\n }, [lastKey])\n\n const renderCollapse = (id: CollapseFundEnum) => {\n switch (id) {\n case CollapseFundEnum.INVESTMENT_INFO:\n return \n case CollapseFundEnum.STRATEGY_DESCRIPTION:\n return \n default:\n break\n }\n }\n return (\n \n (key ? setActiveCollapse(key) : setActiveCollapse([]))}\n >\n {arrCollapse.map((item) => {\n return (\n } key={item.id}>\n {renderCollapse(item.id)}\n \n )\n })}\n \n \n \n )\n}\n","import React from 'react'\nimport { IndustryTable } from '../../../../../shared/components/IndustryTable'\n\ntype Props = { data: string[] }\nexport const FundInfoIndustry: React.FC = ({ data }) => {\n return \n}\n","import React from 'react'\nimport { InstrumentsTable } from '../../../../../shared/components/InstrumentsTable'\n\ntype Props = {\n data: string[]\n}\nexport const FundInfoInstrument: React.FC = ({ data }) => {\n return \n}\n","import React from 'react'\nimport { InvestorTypeTable } from '../../../../../shared/components/InvestorTypeTable'\n\ntype Props = { data: { [key: number]: string }[] }\nexport const FundInfoInvestorType: React.FC = ({ data }) => {\n return \n}\n","import { CheckOutlined, CloseOutlined, DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, Col, Form, Modal, notification, Popconfirm, Row, Spin, Table, Tooltip } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport { ColumnProps } from 'antd/lib/table'\nimport moment from 'moment'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { LeverageResponseType } from '../../../../../shared/api/models/FundDetails'\nimport { Colors } from '../../../../../shared/colors'\nimport EditableCell from '../../../../../shared/components/EditableTable/EditableCell'\nimport EditableFormRow from '../../../../../shared/components/EditableTable/EditableFormRow'\nimport { FormItemDatePicker, FormItemInput } from '../../../../../shared/components/FormItemComponents'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin: 0 2rem;\n margin-top: 1rem;\n margin-bottom: 1rem;\n flex-direction: column;\n .ant-table-cell {\n padding: 0px 8px;\n }\n .editable-cell {\n position: relative;\n }\n .editable-cell-value-wrap {\n padding: 0 12px;\n }\n`\n\ntype Props = {}\nexport const FundInfoLeverage: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { invoke: getLeverage, data: leverageData, loading: dataLoading } = useServiceState(\n APIService.fundDetailService.fetchFundLeverages,\n )\n const [localLeverage, setLocalLeverage] = React.useState<(LeverageResponseType & { key: string })[]>()\n const [editingRow, setEditingRow] = React.useState()\n const [submitting, setSubmitting] = React.useState(false)\n const [showAddNew, setShowAddNew] = React.useState(false)\n\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getLeverage(dataFundDetail.fund_id)\n }, [getLeverage, dataFundDetail])\n\n React.useEffect(() => {\n if (!leverageData) {\n return\n }\n setLocalLeverage(leverageData.map((item) => ({ ...item, key: item.date })))\n }, [leverageData])\n\n const handleUpdateRow = async () => {\n if (!editingRow || !dataFundDetail) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.updateFundLeverage(dataFundDetail.fund_id, {\n work_date: editingRow.key,\n updates: {\n minimum: editingRow.minimum ? parseFloat(editingRow.minimum.toString()) : undefined,\n maximum: editingRow.maximum ? parseFloat(editingRow.maximum.toString()) : undefined,\n average: editingRow.average ? parseFloat(editingRow.average.toString()) : undefined,\n work_date: editingRow.date,\n },\n })\n getLeverage(dataFundDetail.fund_id)\n notification.success({ message: 'Row updated successfully!' })\n } catch (err) {\n console.log(err)\n notification.error({ message: 'Failed to update row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleDeleteRow = async (date: string) => {\n if (!dataFundDetail) {\n return\n }\n if (date === '') {\n // newly added row\n setLocalLeverage((prev) => prev?.filter((item) => item.date !== ''))\n setEditingRow(undefined)\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.deleteFundLeverage(dataFundDetail.fund_id, date)\n getLeverage(dataFundDetail.fund_id)\n notification.success({ message: 'Row deleted successfully!' })\n } catch (error) {\n console.log(error)\n notification.error({ message: 'Fail to delete row!' })\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleAddRow = async (value: Store) => {\n if (!value || !dataFundDetail) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.fundDetailService.createFundLeverage(dataFundDetail.fund_id, {\n work_date: moment(value.date).format('YYYY-MM-DD'),\n minimum: value.minimum ? parseFloat(value.minimum.toString()) : undefined,\n maximum: value.maximum ? parseFloat(value.maximum.toString()) : undefined,\n average: value.average ? parseFloat(value.average.toString()) : undefined,\n })\n form.resetFields()\n getLeverage(dataFundDetail.fund_id)\n notification.success({ message: 'Row created successfully!' })\n setShowAddNew(false)\n } catch (error) {\n console.log(error)\n notification.error({ message: `Fail to create new row! ${error.response.data.message || ''}` })\n localLeverage && setLocalLeverage(localLeverage?.filter((item) => item.key !== 'new-row'))\n } finally {\n setSubmitting(false)\n setEditingRow(undefined)\n }\n }\n\n const handleAddNewRow = () => {\n if (!showAddNew) {\n setShowAddNew(true)\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Date',\n dataIndex: 'date',\n key: 'date',\n sorter: (a, b) => {\n return a.date.localeCompare(b.date)\n },\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'date',\n editingRow,\n setEditingRow,\n }),\n width: '22.5%',\n defaultSortOrder: 'descend',\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Min (%)',\n dataIndex: 'minimum',\n key: 'min',\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'minimum',\n editingRow,\n setEditingRow,\n }),\n width: '22.5%',\n sorter: (a, b) => {\n return (a.minimum || 0) - (b.minimum || 0)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Max (%)',\n dataIndex: 'maximum',\n key: 'maximum',\n sorter: (a, b) => {\n return (a.maximum || 0) - (b.maximum || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'maximum',\n editingRow,\n setEditingRow,\n }),\n width: '22.5%',\n },\n {\n title: 'Average (%)',\n dataIndex: 'average',\n key: 'average',\n sorter: (a, b) => {\n return (a.average || 0) - (b.minimum || 0)\n },\n sortDirections: ['descend', 'ascend'],\n // @ts-ignore\n onCell: (record) => ({\n record,\n editable: true,\n dataIndex: 'average',\n editingRow,\n setEditingRow,\n }),\n width: '22.5%',\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: '10%',\n render: (_, record) => (\n <>\n {!submitting && !editingRow && (\n setEditingRow({ ...record, key: record.key })}\n >\n \n \n \n \n )}\n {editingRow && editingRow.key === record.key && !submitting && (\n <>\n \n {\n setEditingRow(undefined)\n localLeverage && setLocalLeverage(localLeverage?.filter((item) => item.key !== 'new-row'))\n }}\n >\n \n \n \n \n \n )}\n {editingRow && editingRow.key === record.key && submitting && }\n {!(editingRow && editingRow.key === record.key) && (\n {\n handleDeleteRow(record.date)\n }}\n >\n \n \n )}\n \n ),\n },\n ]\n\n const components = {\n body: {\n row: EditableFormRow,\n cell: EditableCell,\n },\n }\n return (\n \n
\n \n
\n 'editable-row'}\n components={components}\n loading={dataLoading}\n dataSource={localLeverage}\n columns={columns}\n scroll={{ y: 'calc(100vh - 478px)' }}\n pagination={{\n hideOnSinglePage: true,\n showSizeChanger: false,\n showTotal: (total, range) => `${range[0]}-${range[1]} of ${total} items`,\n }}\n style={{ flex: 1 }}\n bordered\n />\n setShowAddNew(false)} onOk={form.submit}>\n
\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n","import { Col, Collapse, Form, Row, Select, Spin } from 'antd'\nimport React, { useContext } from 'react'\nimport styled from 'styled-components'\nimport { useDebounce } from 'use-debounce/lib'\nimport APIService from '../../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../../shared/api/context/FundDetailDataContext'\nimport { NextBackButton } from '../../../../../shared/components/NextBackButton'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\n\nconst { Panel } = Collapse\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\ntype Props = {}\nexport const OffshoreFundInfo: React.FC = () => {\n const [searchText, setSearchText] = React.useState('')\n\n const [debouncedText] = useDebounce(searchText, 500)\n const { data: funds, invoke: invokeSearch, loading } = useServiceState(APIService.fundService.fetchFundName)\n const { data: offshoreFund, invoke: fetchFundDetail } = useServiceState(\n APIService.fundDetailService.fetchFundBasicInfo,\n )\n const { dataFundDetail } = useContext(FundDetailDataContext)\n\n React.useEffect(() => {\n if (!dataFundDetail || !dataFundDetail.offshore_id) {\n return\n }\n fetchFundDetail(dataFundDetail.offshore_id)\n }, [dataFundDetail, fetchFundDetail])\n\n React.useEffect(() => {\n invokeSearch({ text: debouncedText })\n }, [debouncedText, invokeSearch])\n\n return (\n \n \n \n \n \n }>\n : null}\n placeholder=\"Type Fund Name To Search\"\n filterOption={false}\n onSearch={(e) => {\n setSearchText(e)\n }}\n >\n {funds?.map((item) => {\n return (\n \n Fund #{item.fund_id} - {item.fund_name}\n \n )\n })}\n {!funds?.some((i) => i.fund_id === offshoreFund?.fund_id) && offshoreFund && (\n \n Fund #{offshoreFund.fund_id} - {offshoreFund.fund_name}\n \n )}\n \n \n \n \n \n \n \n \n )\n}\n","import { Tabs } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../../app/rootReducer'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailLabelSearchContext } from '../../../../shared/api/context/FundDetailLabelSearchContext'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { LeftNavFundEnum, renderSearchListFund, RightTabFundEnum } from '../../../../shared/SearchFundLabel'\nimport { FundInfoElectronicTrading } from './ElectronicTrading/FundInfoElectronicTrading'\nimport { FundContact } from './FundContact/FundContact'\nimport { FundInfoMain } from './FundInfo/FundInfoMain'\nimport { FundInvestmentInfoMain } from './FundInvestmentInfo/FundInvestmentInfoMain'\nimport { FundInfoIndustry } from './Industry/FundInfoIndustry'\nimport { FundInfoInstrument } from './Instrument/FundInfoInstrument'\nimport { FundInfoInvestorType } from './InvestorType/FundInfoInvestorType'\nimport { FundInfoLeverage } from './Leverage/FundInfoLeverage'\nimport { OffshoreFundInfo } from './OffshoreFundInfo/OffshoreFundInfo'\nimport { FundInfoRegion } from './Region/FundInfoRegion'\nconst { TabPane } = Tabs\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n`\n\nconst RIGHT_TAB_PANE = [\n {\n id: RightTabFundEnum.FUND_INFO,\n },\n {\n id: RightTabFundEnum.FUND_INVESTMENT_INFO,\n },\n {\n id: RightTabFundEnum.OFFSHORE_FUND_INFO,\n },\n {\n id: RightTabFundEnum.FUND_CONTACT,\n },\n {\n id: RightTabFundEnum.LEVERAGE,\n },\n {\n id: RightTabFundEnum.INSTRUMENT,\n },\n {\n id: RightTabFundEnum.INDUSTRY,\n },\n {\n id: RightTabFundEnum.INVESTOR_TYPE,\n },\n {\n id: RightTabFundEnum.REGION,\n },\n {\n id: RightTabFundEnum.ELECTRONIC_TRADING_PLATFORM,\n },\n]\n\ntype Props = { form: FormInstance; setIsUpdateFund: (isUpdate: boolean) => void }\n\nexport const FundInformationMain: React.FC = ({ form, setIsUpdateFund }) => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { isFiltering, filterArr } = React.useContext(FundDetailLabelSearchContext)\n\n const listSearch = React.useMemo(() => {\n return filterArr.filter((item) => item.leftNav === LeftNavFundEnum.INFORMATION)\n }, [filterArr])\n\n const { invoke: getFundTableDropdown, data: dataTableDropdown } = useServiceState(\n APIService.fundDetailService.fetchFundTableDropdown,\n )\n\n const [activeTab, setActiveTab] = React.useState(RightTabFundEnum.FUND_INFO)\n\n React.useEffect(() => {\n if (isFiltering && listSearch[0].rightTab) {\n setActiveTab(listSearch[0].rightTab)\n }\n }, [isFiltering, listSearch])\n\n const appSetting = useSelector((state: RootState) => state.appSettings)\n const lastKey = appSetting.fundDraft.find((item) => item.id === dataFundDetail?.fund_id)?.lastFieldChange\n\n React.useEffect(() => {\n if (lastKey) {\n const activeTab = renderSearchListFund.find((item) => item.key === lastKey)?.rightTab\n activeTab && RIGHT_TAB_PANE.findIndex((item) => item.id === activeTab) > -1 && setActiveTab(activeTab)\n }\n }, [lastKey])\n\n React.useEffect(() => {\n getFundTableDropdown()\n }, [getFundTableDropdown])\n\n const renderTab = (index: RightTabFundEnum) => {\n switch (index) {\n case RightTabFundEnum.FUND_INFO:\n return \n case RightTabFundEnum.FUND_INVESTMENT_INFO:\n return \n case RightTabFundEnum.OFFSHORE_FUND_INFO:\n return \n case RightTabFundEnum.FUND_CONTACT:\n return \n case RightTabFundEnum.LEVERAGE:\n return \n case RightTabFundEnum.INSTRUMENT:\n return dataTableDropdown && \n case RightTabFundEnum.INDUSTRY:\n return dataTableDropdown && \n case RightTabFundEnum.INVESTOR_TYPE:\n return dataTableDropdown && \n case RightTabFundEnum.REGION:\n return dataTableDropdown && \n case RightTabFundEnum.ELECTRONIC_TRADING_PLATFORM:\n return (\n dataTableDropdown && (\n \n )\n )\n default:\n break\n }\n }\n return (\n setActiveTab(e as RightTabFundEnum)}\n >\n {RIGHT_TAB_PANE.map((item) => {\n const showTabPane = listSearch.findIndex((i) => i.rightTab && i.rightTab === item.id)\n if (showTabPane === -1 && isFiltering) {\n return null\n }\n return (\n \n {renderTab(item.id)}\n \n )\n })}\n \n )\n}\n","import { Col, Form, Modal, notification, Row, Spin } from 'antd'\nimport React from 'react'\nimport APIService from '../../../../shared/api'\nimport { PropertiesInfo } from '../../../../shared/api/models/FundDetails'\nimport { FormItemInput, FormItemSelect } from '../../../../shared/components/FormItemComponents'\n\ntype Props = {\n isOpen: boolean\n setIsOpen: (value: boolean) => void\n selectedProperties: PropertiesInfo | undefined\n setSelectedProperties: (value: PropertiesInfo | undefined) => void\n updateProperties: () => void\n fundId: string\n listProperties: { prop_id: number; prop_name: string }[]\n}\nexport const ModalEditTableFundProperties: React.FC = ({\n isOpen,\n setIsOpen,\n selectedProperties,\n setSelectedProperties,\n fundId,\n updateProperties,\n listProperties,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [form] = Form.useForm()\n React.useEffect(() => {\n if (selectedProperties) {\n form.setFieldsValue(selectedProperties)\n } else {\n form.resetFields()\n }\n }, [form, selectedProperties])\n\n const handleUpdateRow = () => {\n const fieldSubmit = {\n prop_id: form.getFieldValue('prop_id'),\n prop_value: form.getFieldValue('prop_value'),\n }\n form.validateFields(['prop_name', 'prop_value']).then(() => {\n setLoadingSubmit(true)\n selectedProperties\n ? APIService.fundDetailService\n .updateFundProperties(fundId, fieldSubmit)\n .then(() => {\n notification.success({ message: 'Fund Property Updated!' })\n updateProperties()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Fund Property Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setIsOpen(false)\n setSelectedProperties(undefined)\n form.resetFields()\n })\n : APIService.fundDetailService\n .createFundProperties(fundId, fieldSubmit)\n .then(() => {\n notification.success({ message: 'Fund Property Created!' })\n updateProperties()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Fund Property Create Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setIsOpen(false)\n setSelectedProperties(undefined)\n form.resetFields()\n })\n })\n }\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={() => handleUpdateRow()}\n onCancel={() => {\n setSelectedProperties(undefined)\n setIsOpen(false)\n }}\n >\n
\n
\n \n
\n ({ text: item.prop_name, value: item.prop_id }))}\n />\n \n \n \n \n \n \n \n \n )\n}\n","import { DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Spin, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { PropertiesInfo } from '../../../../shared/api/models/FundDetails'\nimport { Colors } from '../../../../shared/colors'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { ModalEditTableFundProperties } from './ModalEditTableFundProperties'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin: 1rem;\n flex-direction: column;\n`\nexport const FundProperties: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { invoke: getFundProperties, data: dataFundProperties, loading } = useServiceState(\n APIService.fundDetailService.fetchFundProperties,\n )\n\n React.useEffect(() => {\n dataFundDetail && getFundProperties(dataFundDetail.fund_id)\n }, [dataFundDetail, getFundProperties])\n\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n const [idDelete, setIdDelete] = React.useState()\n const [showModal, setShowModal] = React.useState(false)\n const [selectedProperties, setSelectedProperties] = React.useState()\n\n const updateProperties = () => {\n dataFundDetail && getFundProperties(dataFundDetail.fund_id)\n }\n\n const deleteFundProperties = (prodId: number) => {\n if (dataFundDetail?.fund_id) {\n setLoadingDelete(true)\n APIService.fundDetailService\n .deleteFundProperties(dataFundDetail?.fund_id, prodId)\n .then(() => {\n notification.success({ message: 'Fund Property Delete!' })\n updateProperties()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Fund Property Delete Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'ID',\n dataIndex: 'prop_id',\n key: 'prop_id',\n sorter: (a, b) => {\n return a.prop_id - b.prop_id\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Properties Value',\n dataIndex: 'prop_value',\n key: 'prop_value',\n\n sorter: (a, b) => {\n return a.prop_value.localeCompare(b.prop_value)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Properties Name',\n dataIndex: 'prop_name',\n key: 'prop_name',\n\n sorter: (a, b) => {\n return a.prop_name.localeCompare(b.prop_name)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Action',\n key: 'action',\n render: (_, record) => (\n <>\n {loadingDelete && record.prop_id === idDelete ? (\n \n ) : (\n <>\n {\n setShowModal(true)\n setSelectedProperties(record)\n }}\n >\n \n \n \n \n\n {\n deleteFundProperties(record.prop_id)\n setIdDelete(record.prop_id)\n }}\n >\n \n \n \n )}\n \n ),\n },\n ]\n return (\n \n
\n setShowModal(true)}\n disabled={loadingDelete}\n >\n Create New Fund Properties\n \n
\n 10 ? undefined : false\n }\n bordered\n />\n {showModal && dataFundDetail?.fund_id && (\n \n )}\n \n
\n )\n}\n","import Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n padding: 0.5rem 1rem;\n .ant-table-cell {\n padding: 0px 8px;\n }\n`\ntype TableType = {\n year: number\n jan?: string\n feb?: string\n mar?: string\n apr?: string\n may?: string\n jun?: string\n jul?: string\n aug?: string\n sep?: string\n oct?: string\n nov?: string\n dec?: string\n ytd?: string\n}\nconst MonthList = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec']\n\ntype Props = {}\nexport const APGL: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { invoke: getAPGL, data: dataAPGL, loading: dataLoading } = useServiceState(\n APIService.fundDetailService.fetchFundAPGL,\n )\n\n const dataSource =\n dataAPGL &&\n dataAPGL.monthly_data.reduce((acc, current) => {\n const currentYear = current.year\n const monthCurrent = current.month\n const index = acc.findIndex((item) => item.year === currentYear)\n if (index > -1) {\n return [\n ...acc.slice(0, index),\n { ...acc[index], [MonthList[monthCurrent - 1]]: current.value },\n ...acc.slice(index + 1, acc.length),\n ]\n }\n const currentytd = dataAPGL.ytd_data[currentYear] || undefined\n return currentytd\n ? [...acc, { year: currentYear, ytd: currentytd, [MonthList[monthCurrent - 1]]: current.value }]\n : [...acc, { year: currentYear }]\n }, [] as TableType[])\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getAPGL(dataFundDetail.fund_id)\n }, [dataFundDetail, getAPGL])\n const columns: ColumnProps[] = [\n {\n title: 'Year',\n dataIndex: 'year',\n key: 'year',\n },\n {\n title: 'Jan',\n dataIndex: 'jan',\n key: 'jan',\n },\n {\n title: 'Feb',\n dataIndex: 'feb',\n key: 'feb',\n },\n {\n title: 'Mar',\n dataIndex: 'mar',\n key: 'mar',\n },\n {\n title: 'Apr',\n dataIndex: 'apr',\n key: 'apr',\n },\n {\n title: 'May',\n dataIndex: 'may',\n key: 'may',\n },\n {\n title: 'Jun',\n dataIndex: 'jun',\n key: 'jun',\n },\n {\n title: 'Jul',\n dataIndex: 'jul',\n key: 'jul',\n },\n {\n title: 'Aug',\n dataIndex: 'aug',\n key: 'aug',\n },\n {\n title: 'Sep',\n dataIndex: 'sep',\n key: 'sep',\n },\n {\n title: 'Oct',\n dataIndex: 'oct',\n key: 'oct',\n },\n {\n title: 'Nov',\n dataIndex: 'nov',\n key: 'nov',\n },\n {\n title: 'Dec',\n dataIndex: 'dec',\n key: 'dec',\n },\n {\n title: 'Annual',\n dataIndex: 'ytd',\n key: 'ytd',\n },\n ]\n\n return (\n \n
\n \n
\n \n
\n )\n}\n","import { Row } from 'antd'\nimport React from 'react'\nimport { FundDetailDataContext, PERFORMANCE_REQUEST_ENUM } from '../../../../shared/api/context/FundDetailDataContext'\nimport DataSheet, { DataSheetType } from '../../../../shared/components/DataSheet'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\n\ntype Props = {}\nexport const Distributions: React.FC = () => {\n const {\n distributionDataChange,\n dataDistribution,\n dataDistributionLoading,\n setDistributionDataChange,\n getPerformanceRequest,\n dataFundDetail,\n } = React.useContext(FundDetailDataContext)\n\n React.useEffect(() => {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.DISTRIBUTION)\n }, [getPerformanceRequest])\n\n return (\n \n \n\n \n \n )\n}\n","import { Button, DatePicker, Pagination, Row, Table } from 'antd'\nimport { SorterResult } from 'antd/lib/table/interface'\nimport JsFileDownload from 'js-file-download'\nimport moment from 'moment'\nimport Papa from 'papaparse'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport { PERFORMANCE_REQUEST_ENUM } from '../../../shared/api/context/FundDetailDataContext'\nimport { DividerForm } from '../../../shared/components/DividerForm'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { resetAsset, resetNav, resetROR } from '../../../slice/appEventSlice'\n\nconst Wrapper = styled('div')``\n\nconst Footer = styled.div`\n display: flex;\n justify-content: space-between;\n`\n\ntype HistoricalDataTableType = {\n yyyymm?: string\n old: number | null\n new: number | null\n author: string\n date: string\n}\n\ntype Props = {\n selectedDate?: string\n setSelectedDate?: (selectedDate: string | undefined) => void\n type: PERFORMANCE_REQUEST_ENUM\n fundId: string\n}\n\nconst HistoricalData: React.FC = ({ selectedDate, setSelectedDate, type, fundId }) => {\n const { fundAssetUpdated, fundRorUpdated, fundNavUpdated } = useSelector((state: RootState) => state.appEvent)\n const dispatch = useDispatch()\n\n const { invoke: getAllLogEvent, data: dataAllEvent, loading: loadingAllEvent } = useServiceState(\n APIService.activityLogService.fetchDataEvent,\n )\n const { invoke: getLogEvent, data: dataLogEvent, loading } = useServiceState(\n APIService.activityLogService.fetchDataEvent,\n )\n\n const [showAll, setShowAll] = React.useState(false)\n\n const [page, setPage] = React.useState(1)\n const [pageSize, setPageSize] = React.useState(10)\n const [sortBy, setSortBy] = React.useState()\n const [orderBy, setOrderBy] = React.useState()\n\n const resolvedType = React.useMemo(() => {\n switch (type) {\n case PERFORMANCE_REQUEST_ENUM.ROR:\n return 'UPDATE_FUND_RORS'\n case PERFORMANCE_REQUEST_ENUM.NAV:\n return 'UPDATE_FUND_NAVS'\n case PERFORMANCE_REQUEST_ENUM.ASSET:\n return 'UPDATE_FUND_ASSETS'\n default:\n return undefined\n }\n }, [type])\n\n // refetch events when flag `fundRorUpdated` is true, triggered by successfully update Fund ROR or Latest Performance\n React.useEffect(() => {\n if (fundRorUpdated) {\n getLogEvent({\n where: {\n code: 'UPDATE_FUND_RORS',\n fund_id: { equals: fundId },\n },\n limit: 100,\n page: 1,\n order_by: 'DESC',\n sort_by: 'created_date',\n show_json_data: true,\n })\n\n getAllLogEvent({\n where: {\n code: resolvedType,\n fund_id: { equals: fundId },\n },\n limit: pageSize,\n page,\n order_by: orderBy || 'DESC',\n sort_by: sortBy || 'created_date',\n show_json_data: true,\n })\n dispatch(resetROR())\n }\n }, [dispatch, fundId, fundRorUpdated, getAllLogEvent, getLogEvent, orderBy, page, pageSize, resolvedType, sortBy])\n\n React.useEffect(() => {\n if (fundNavUpdated) {\n getLogEvent({\n where: {\n code: 'UPDATE_FUND_NAVS',\n fund_id: { equals: fundId },\n },\n limit: 100,\n page: 1,\n order_by: 'DESC',\n sort_by: 'created_date',\n show_json_data: true,\n })\n\n getAllLogEvent({\n where: {\n code: resolvedType,\n fund_id: { equals: fundId },\n },\n limit: pageSize,\n page,\n order_by: orderBy || 'DESC',\n sort_by: sortBy || 'created_date',\n show_json_data: true,\n })\n dispatch(resetNav())\n }\n }, [dispatch, fundId, fundNavUpdated, getAllLogEvent, getLogEvent, orderBy, page, pageSize, resolvedType, sortBy])\n\n React.useEffect(() => {\n if (fundAssetUpdated) {\n getLogEvent({\n where: {\n code: 'UPDATE_FUND_ASSETS',\n fund_id: { equals: fundId },\n },\n limit: 100,\n page: 1,\n order_by: 'DESC',\n sort_by: 'created_date',\n show_json_data: true,\n })\n\n getAllLogEvent({\n where: {\n code: resolvedType,\n fund_id: { equals: fundId },\n },\n limit: pageSize,\n page,\n order_by: orderBy || 'DESC',\n sort_by: sortBy || 'created_date',\n show_json_data: true,\n })\n dispatch(resetAsset())\n }\n }, [dispatch, fundId, fundAssetUpdated, getAllLogEvent, getLogEvent, orderBy, page, pageSize, resolvedType, sortBy])\n\n React.useEffect(() => {\n getAllLogEvent({\n where: {\n code: resolvedType,\n fund_id: { equals: fundId },\n },\n limit: pageSize,\n page,\n order_by: orderBy || 'DESC',\n sort_by: sortBy || 'created_date',\n show_json_data: true,\n })\n }, [getAllLogEvent, fundId, orderBy, page, pageSize, resolvedType, sortBy])\n\n React.useEffect(() => {\n getLogEvent({\n where: {\n code: resolvedType,\n fund_id: { equals: fundId },\n },\n limit: 100,\n page: 1,\n order_by: 'DESC',\n sort_by: 'created_date',\n show_json_data: true,\n })\n }, [fundId, getLogEvent, resolvedType])\n\n React.useEffect(() => {\n setSelectedDate && setSelectedDate(selectedDate)\n }, [selectedDate, setSelectedDate])\n\n React.useEffect(() => {\n if (selectedDate) {\n setShowAll(false)\n }\n }, [selectedDate])\n\n const handlePageSizeChange = (current: number, size: number) => {\n setPageSize(size)\n if (current !== 1) {\n setPage(1)\n }\n }\n\n const handleTableChange = (sorter: SorterResult) => {\n setSortBy(sorter.order ? sorter.columnKey?.toString() : undefined)\n setOrderBy(sorter.order ? (sorter.order === 'ascend' ? 'ASC' : 'DESC') : undefined)\n }\n\n const allHistoricalData = React.useMemo(() => {\n if (!dataAllEvent) {\n return []\n }\n const dataSource: HistoricalDataTableType[] = []\n dataAllEvent.events.map((event) => {\n const changedDate = event.change_data\n changedDate &&\n Object.keys(changedDate).length > 0 &&\n Object.keys(changedDate).map((dateAsKey) => {\n dataSource.push({\n yyyymm: dateAsKey,\n date: event.created_date,\n old: changedDate[dateAsKey].old,\n new: changedDate[dateAsKey].new,\n author: event.user__username,\n })\n })\n })\n return dataSource\n }, [dataAllEvent])\n\n const historicalDataSource = React.useMemo(() => {\n if (!dataLogEvent || !selectedDate) {\n return []\n }\n const dataSource: HistoricalDataTableType[] = []\n dataLogEvent.events.map((event) => {\n const selectedDateAsKey = selectedDate.replace('-', '0')\n event.change_data &&\n selectedDateAsKey in event.change_data &&\n dataSource.push({\n date: event.created_date,\n old: event.change_data[selectedDateAsKey].old,\n new: event.change_data[selectedDateAsKey].new,\n author: event.user__username,\n })\n })\n return dataSource\n }, [dataLogEvent, selectedDate])\n\n const handleExportHistorical = (data: HistoricalDataTableType[]) => {\n JsFileDownload(Papa.unparse(data), `historical-data.csv`, 'application/csv')\n }\n\n return (\n \n \n \n {\n setSelectedDate && setSelectedDate(e ? moment(e).format('YYYY-MM') : undefined)\n }}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n {\n setShowAll(true)\n setSelectedDate && setSelectedDate(undefined)\n }}\n >\n Show All Events\n \n \n {selectedDate &&

Top 100 Events For {selectedDate}

}\n {showAll &&

All Events

}\n {showAll ? (\n {\n handleTableChange(sorter)\n }}\n footer={(record) =>\n record.length > 0 ? (\n
\n handleExportHistorical(allHistoricalData)}\n disabled={allHistoricalData.length === 0}\n >\n Export\n \n\n `${range[0]}-${range[1]} of ${total} items`}\n onChange={(currentPage) => setPage(currentPage)}\n total={dataLogEvent ? dataLogEvent.total : 0}\n current={page}\n pageSize={pageSize}\n pageSizeOptions={['10', '25', '50', '100']}\n onShowSizeChange={handlePageSizeChange}\n />\n
\n ) : null\n }\n />\n ) : (\n <>\n \n handleExportHistorical(historicalDataSource)}\n disabled={historicalDataSource.length === 0}\n >\n Export\n \n \n )}\n
\n )\n}\n\nexport default HistoricalData\n","import { Button, Col, Row, Select } from 'antd'\nimport React from 'react'\nimport { useSelector, useDispatch } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../../../app/rootReducer'\nimport APIService from '../../../../../shared/api'\nimport {\n FundDetailDataContext,\n PERFORMANCE_REQUEST_ENUM,\n} from '../../../../../shared/api/context/FundDetailDataContext'\nimport DataSheet, { DataSheetType } from '../../../../../shared/components/DataSheet'\nimport { DividerForm } from '../../../../../shared/components/DividerForm'\nimport { FormItemCheckBox } from '../../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\nimport { resetAsset } from '../../../../../slice/appEventSlice'\nimport HistoricalData from '../../HistoricalData'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n padding: 0.5rem 1rem;\n`\n\ntype Props = {}\nexport const MilionsManaged: React.FC = () => {\n const {\n setAssetDataChange,\n assetDataChange,\n dataAssetLoading,\n dataAsset,\n getPerformanceRequest,\n dataFundDetail,\n } = React.useContext(FundDetailDataContext)\n\n const { fundAssetUpdated } = useSelector((state: RootState) => state.appEvent)\n const dispatch = useDispatch()\n\n const [selectedHistorical, setSelectedHistorical] = React.useState()\n const [selectedDate, setSelectedDate] = React.useState()\n\n const { invoke: getLogEvent, data: dataLogEvent } = useServiceState(APIService.activityLogService.fetchDataEvent)\n\n // refetch events when flag `fundAssetUpdated` is true, triggered by successfully update Fund Assets or Latest Performance\n React.useEffect(() => {\n if (!dataFundDetail?.fund_id) {\n return\n }\n if (fundAssetUpdated) {\n getLogEvent({\n where: {\n code: 'UPDATE_FUND_ASSETS',\n fund_id: { equals: dataFundDetail.fund_id },\n },\n limit: 100,\n page: 1,\n order_by: 'DESC',\n sort_by: 'created_date',\n show_json_data: true,\n })\n dispatch(resetAsset())\n }\n }, [dataFundDetail?.fund_id, dispatch, fundAssetUpdated, getLogEvent])\n\n React.useEffect(() => {\n if (!dataFundDetail?.fund_id) {\n return\n }\n getLogEvent({\n where: {\n code: 'UPDATE_FUND_ASSETS',\n fund_id: { equals: dataFundDetail.fund_id },\n },\n limit: 100,\n page: 1,\n order_by: 'DESC',\n sort_by: 'created_date',\n show_json_data: true,\n })\n }, [dataFundDetail?.fund_id, getLogEvent])\n\n React.useEffect(() => {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ASSET)\n }, [getPerformanceRequest])\n\n return (\n \n \n
\n } />\n \n \n \n \n \n \n \n {\n setSelectedHistorical(data ? +data : undefined)\n }}\n allowClear\n >\n {dataLogEvent?.events.map((event) => (\n \n {event.user__username} - Updated at {event.created_date}\n \n ))}\n \n \n \n {selectedHistorical && (\n \n )}\n \n \n {selectedHistorical ? (\n item.id === selectedHistorical)?.json_data.values}\n />\n ) : (\n \n )}\n {dataFundDetail?.fund_id && (\n \n \n \n \n \n )}\n \n )\n}\n","import { Button, Modal, notification, Popconfirm } from 'antd'\nimport React from 'react'\nimport APIService from '../../../../../shared/api'\nimport {\n FundDetailDataContext,\n PERFORMANCE_REQUEST_ENUM,\n} from '../../../../../shared/api/context/FundDetailDataContext'\nimport DataSheet, { DataSheetType, RORResponseCalculate } from '../../../../../shared/components/DataSheet'\nimport { DividerForm } from '../../../../../shared/components/DividerForm'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n fromDate: string\n toDate: string\n setIsUpdateFund: (value: boolean) => void\n}\nexport const ModalCalculateNAV: React.FC = ({ isOpen, onRequestClose, fromDate, toDate, setIsUpdateFund }) => {\n const {\n dataROR,\n dataFundDetail,\n dataFundDetailChange,\n getPerformanceRequest,\n setRORDataChange,\n clearSnapshot,\n } = React.useContext(FundDetailDataContext)\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n\n const { invoke: getCalculate, data: dataCalculate, loading } = useServiceState(\n APIService.fundDetailService.fetchCalculateNAV,\n )\n\n const dataChangeRef = dataFundDetailChange?.current\n\n const dataSheet = React.useMemo(() => {\n return dataCalculate ? dataCalculate.map((item) => ({ value: item.value, yyyy_mm: item.date })) : []\n }, [dataCalculate])\n\n React.useEffect(() => {\n const fundId = dataFundDetail?.fund_id\n fundId && getCalculate({ fundId, fromDate, toDate })\n }, [dataFundDetail, fromDate, getCalculate, toDate])\n\n React.useEffect(() => {\n if (!dataROR) {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ROR)\n }\n }, [dataROR, getPerformanceRequest])\n\n const submitUpdate = () => {\n if (!dataFundDetail || !dataFundDetail.fund_id) {\n return\n }\n setLoadingSubmit(true)\n APIService.fundDetailService\n .fetchCalculateNAV({ fundId: dataFundDetail.fund_id, fromDate, toDate, saveToDb: true })\n .then(() => {\n notification.success({ message: 'ROR Updated' })\n clearSnapshot()\n\n setRORDataChange({ values: undefined })\n\n // change save button when user Only edit ROR table\n if (dataChangeRef && Object.keys(dataChangeRef).filter((item) => item !== '_RORDataChange').length === 0) {\n setIsUpdateFund(false)\n }\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ROR)\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'ROR Update Failed' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n onRequestClose()\n })\n }\n\n //const draft = dataROR\n\n const draft =\n dataSheet.length > 0 && dataROR\n ? dataROR.map((item) => {\n const index = dataSheet.findIndex((i) => i.yyyy_mm === item.yyyy_mm)\n if (index > -1) {\n return { value: dataSheet[index].value, yyyy_mm: item.yyyy_mm }\n }\n return { value: item.value, yyyy_mm: item.yyyy_mm }\n })\n : undefined\n\n return (\n \n Cancel\n \n }\n >\n \n ROR values will be updated/replaced with the data shown. Please confirm to proceed!}\n onConfirm={submitUpdate}\n >\n \n \n \n {dataROR && dataCalculate && (\n \n )}\n \n )\n}\n","import { Button, Col, DatePicker, Row, Select, Space } from 'antd'\nimport moment from 'moment'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../../../app/rootReducer'\nimport APIService from '../../../../../shared/api'\nimport {\n FundDetailDataContext,\n PERFORMANCE_REQUEST_ENUM,\n} from '../../../../../shared/api/context/FundDetailDataContext'\nimport DataSheet, { DataSheetType } from '../../../../../shared/components/DataSheet'\nimport { DividerForm } from '../../../../../shared/components/DividerForm'\nimport { FormItemCheckBox } from '../../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../../shared/components/RenderLabelForm'\nimport { useServiceState } from '../../../../../shared/hooks/useServiceState'\nimport { resetNav } from '../../../../../slice/appEventSlice'\nimport { updateNavDate } from '../../../../../slice/appSettingsSlice'\nimport { DATE_FORMAT } from '../../FundROR/PerformanceUpdate'\nimport HistoricalData from '../../HistoricalData'\nimport { ModalCalculateNAV } from './ModalCalculateNAV'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n padding: 0 1rem;\n`\n\ntype Props = {\n setIsUpdateFund: (isUpdate: boolean) => void\n}\nexport const NAVPerUnit: React.FC = ({ setIsUpdateFund }) => {\n const {\n dataNAV,\n dataNAVLoading,\n setNAVDataChange,\n navDataChange,\n getPerformanceRequest,\n dataFundDetail,\n } = React.useContext(FundDetailDataContext)\n\n const { fundNavUpdated } = useSelector((state: RootState) => state.appEvent)\n const dispatch = useDispatch()\n\n const [selectedHistorical, setSelectedHistorical] = React.useState()\n const [selectedDate, setSelectedDate] = React.useState()\n\n const { invoke: getLogEvent, data: dataLogEvent } = useServiceState(APIService.activityLogService.fetchDataEvent)\n\n React.useEffect(() => {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.NAV)\n }, [getPerformanceRequest])\n\n // refetch events when flag `fundNavUpdated` is true, triggered by successfully update Fund ROR or Latest Performance\n React.useEffect(() => {\n if (!dataFundDetail?.fund_id) {\n return\n }\n if (fundNavUpdated) {\n getLogEvent({\n where: {\n code: 'UPDATE_FUND_NAVS',\n fund_id: { equals: dataFundDetail.fund_id },\n },\n limit: 100,\n page: 1,\n order_by: 'DESC',\n sort_by: 'created_date',\n show_json_data: true,\n })\n dispatch(resetNav())\n }\n }, [dataFundDetail?.fund_id, dispatch, fundNavUpdated, getLogEvent])\n\n React.useEffect(() => {\n if (!dataFundDetail?.fund_id) {\n return\n }\n getLogEvent({\n where: {\n code: 'UPDATE_FUND_NAVS',\n fund_id: { equals: dataFundDetail.fund_id },\n },\n limit: 100,\n page: 1,\n order_by: 'DESC',\n sort_by: 'created_date',\n show_json_data: true,\n })\n }, [dataFundDetail?.fund_id, getLogEvent])\n\n const { performanceNavDate } = useSelector((state: RootState) => state.appSettings)\n\n const [fromDate, setFromDate] = React.useState(performanceNavDate?.navStartDate)\n const [toDate, setToDate] = React.useState(performanceNavDate?.navToDate)\n const [isShowModal, setIsShowModal] = React.useState(false)\n\n React.useEffect(() => {\n if (performanceNavDate) {\n setFromDate(performanceNavDate.navStartDate)\n setToDate(performanceNavDate.navToDate)\n }\n }, [performanceNavDate])\n\n return (\n \n \n \n } />\n \n \n \n \n From:{' '}\n {\n if (e) {\n setFromDate(moment(e).format('YYYY-MM'))\n } else {\n setFromDate(undefined)\n }\n }}\n />\n \n \n To:{' '}\n {\n if (e) {\n setToDate(moment(e).format('YYYY-MM'))\n } else {\n setToDate(undefined)\n }\n }}\n />\n \n {\n fromDate && toDate && dispatch(updateNavDate({ fromDate: fromDate, toDate: toDate }))\n setIsShowModal(true)\n }}\n disabled={!fromDate || !toDate}\n >\n Calculate\n \n \n \n {fromDate && toDate && isShowModal && (\n setIsShowModal(false)}\n fromDate={fromDate}\n toDate={toDate}\n setIsUpdateFund={setIsUpdateFund}\n />\n )}\n \n \n \n \n \n \n {\n setSelectedHistorical(data ? +data : undefined)\n }}\n allowClear\n >\n {dataLogEvent?.events.map((event) => (\n \n {event.user__username} - Updated at {event.created_date}\n \n ))}\n \n \n \n {selectedHistorical && (\n \n )}\n \n \n {selectedHistorical ? (\n item.id === selectedHistorical)?.json_data.values}\n />\n ) : (\n \n )}\n {dataFundDetail?.fund_id && (\n \n \n \n \n \n )}\n \n )\n}\n","import { Button, Col, Row, Select } from 'antd'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../../app/rootReducer'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext, PERFORMANCE_REQUEST_ENUM } from '../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport DataSheet, { DataSheetType } from '../../../../shared/components/DataSheet'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FormItemSelect } from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../shared/components/RenderLabelForm'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { resetROR } from '../../../../slice/appEventSlice'\nimport HistoricalData from '../HistoricalData'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 1rem;\n flex-direction: column;\n`\n\nexport interface UpdateRORObjectType {\n [key: string]: {\n value: string\n orginalValue: string\n }\n}\n\ntype Props = {}\n\nexport const FundROR: React.FC = () => {\n const { fundDataDropdown, dataBenchmark } = React.useContext(FundDetailDropdownContext)\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { dataROR, rorDataChange, dataRORLoading, setRORDataChange, getPerformanceRequest } = React.useContext(\n FundDetailDataContext,\n )\n const [selectedHistorical, setSelectedHistorical] = React.useState()\n const [selectedDate, setSelectedDate] = React.useState()\n\n const { invoke: getLogEvent, data: dataLogEvent } = useServiceState(APIService.activityLogService.fetchDataEvent)\n\n const { fundRorUpdated } = useSelector((state: RootState) => state.appEvent)\n const dispatch = useDispatch()\n\n React.useEffect(() => {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ROR)\n }, [getPerformanceRequest])\n\n // refetch events when flag `fundRorUpdated` is true, triggered by successfully update Fund ROR or Latest Performance\n React.useEffect(() => {\n if (!dataFundDetail || !dataFundDetail.fund_id) {\n return\n }\n if (fundRorUpdated) {\n getLogEvent({\n where: {\n code: 'UPDATE_FUND_RORS',\n fund_id: { equals: dataFundDetail.fund_id },\n },\n limit: 100,\n page: 1,\n order_by: 'DESC',\n sort_by: 'created_date',\n show_json_data: true,\n })\n dispatch(resetROR())\n }\n }, [dataFundDetail, dispatch, fundRorUpdated, getLogEvent])\n\n React.useEffect(() => {\n if (!dataFundDetail?.fund_id) {\n return\n }\n getLogEvent({\n where: {\n code: 'UPDATE_FUND_RORS',\n fund_id: { equals: dataFundDetail.fund_id },\n },\n limit: 100,\n page: 1,\n order_by: 'DESC',\n sort_by: 'created_date',\n show_json_data: true,\n })\n }, [dataFundDetail?.fund_id, getLogEvent])\n\n return (\n \n \n \n \n \n 0\n ? dataBenchmark.map((item) => ({ value: item.fund_id, text: item.fund_name }))\n : []\n }\n />\n \n \n 0\n ? dataBenchmark.map((item) => ({ value: item.fund_id, text: item.fund_name }))\n : []\n }\n />\n \n \n 0\n ? dataBenchmark.map((item) => ({ value: item.fund_id, text: item.fund_name }))\n : []\n }\n />\n \n \n\n \n\n \n \n }\n name=\"reporting_style\"\n labelCol={8}\n wrapperCol={16}\n options={\n fundDataDropdown?.reporting_style && fundDataDropdown.reporting_style.length > 0\n ? fundDataDropdown.reporting_style.map((item) => ({\n value: item,\n text: item,\n }))\n : []\n }\n />\n \n \n }\n labelCol={8}\n wrapperCol={16}\n options={\n fundDataDropdown?.reporting_frequency && fundDataDropdown.reporting_frequency.length > 0\n ? fundDataDropdown.reporting_frequency.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n\n \n \n \n\n \n \n {\n setSelectedHistorical(data ? +data : undefined)\n }}\n allowClear\n >\n {dataLogEvent?.events.map((event) => (\n \n {event.user__username} - Updated at {event.created_date}\n \n ))}\n \n \n \n {selectedHistorical && (\n \n )}\n \n \n\n \n {selectedHistorical ? (\n item.id === selectedHistorical)?.json_data.values}\n />\n ) : (\n \n )}\n \n {dataFundDetail?.fund_id && (\n \n \n \n \n \n )}\n \n \n )\n}\n","import { Modal, notification, Tabs } from 'antd'\nimport React, { useState } from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailLabelSearchContext } from '../../../../shared/api/context/FundDetailLabelSearchContext'\nimport { useDraft } from '../../../../shared/DraftManager'\nimport { LeftNavFundEnum, RightTabFundEnum } from '../../../../shared/SearchFundLabel'\nimport { APGL } from '../NAVMMMain/APGL'\nimport { Distributions } from '../NAVMMMain/Distributions'\nimport { MilionsManaged } from '../NAVMMMain/NAVMM/MilionsManaged'\nimport { NAVPerUnit } from '../NAVMMMain/NAVMM/NAVPerUnit'\nimport { FundROR } from './FundROR'\nimport { PerformanceUpdate } from './PerformanceUpdate'\n\nconst { TabPane } = Tabs\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n`\n\nconst LIST_TABPANE = [\n {\n id: RightTabFundEnum.PERFORMANCE_UPDATE,\n },\n {\n id: RightTabFundEnum.ROR,\n },\n {\n id: RightTabFundEnum.ASSET,\n },\n {\n id: RightTabFundEnum.NAV,\n },\n {\n id: RightTabFundEnum.DISTRIBUTIONS,\n },\n {\n id: RightTabFundEnum.APGL,\n },\n]\ntype Props = {\n setIsUpdateFund: (isUpdate: boolean) => void\n hyperlinkTable?: string\n}\nexport const FundPerformance: React.FC = ({ setIsUpdateFund, hyperlinkTable }) => {\n const { isFiltering, filterArr } = React.useContext(FundDetailLabelSearchContext)\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n\n const listSearch = React.useMemo(() => {\n return filterArr.filter((item) => item.leftNav === LeftNavFundEnum.PERFORMANCE)\n }, [filterArr])\n\n const [activeKey, setActiveKey] = React.useState(RightTabFundEnum.PERFORMANCE_UPDATE)\n\n React.useEffect(() => {\n if (isFiltering) {\n listSearch.length > 0 && listSearch[0].rightTab && setActiveKey(listSearch[0].rightTab)\n }\n }, [isFiltering, listSearch])\n\n const { loadSnapshot } = useDraft()\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n const draft = loadSnapshot('fundDraft', dataFundDetail.fund_id)\n if (hyperlinkTable) {\n if (draft && draft._latestPerformanceDataChange) {\n setActiveKey(RightTabFundEnum.PERFORMANCE_UPDATE)\n notification.warn({\n message: 'There are unsaved changes in Performance Update. Please save or discard the changes to continue.',\n })\n return\n }\n switch (hyperlinkTable) {\n case 'fund_assets':\n case 'fund_assets_date':\n setActiveKey(RightTabFundEnum.ASSET)\n break\n case 'latest_ror':\n case 'latest_ror_date':\n setActiveKey(RightTabFundEnum.ROR)\n break\n default:\n setActiveKey(RightTabFundEnum.PERFORMANCE_UPDATE)\n }\n return\n }\n if (draft && draft._RORDataChange) {\n setActiveKey(RightTabFundEnum.ROR)\n return\n }\n if (draft && draft._navDataChange) {\n setActiveKey(RightTabFundEnum.NAV)\n return\n }\n if (draft && draft._assetDataChange) {\n setActiveKey(RightTabFundEnum.ASSET)\n return\n }\n }, [dataFundDetail, hyperlinkTable, loadSnapshot])\n\n const renderTab = (index: RightTabFundEnum) => {\n switch (index) {\n case RightTabFundEnum.PERFORMANCE_UPDATE:\n return (\n \n )\n case RightTabFundEnum.ROR:\n return \n case RightTabFundEnum.ASSET:\n return \n case RightTabFundEnum.NAV:\n return \n case RightTabFundEnum.DISTRIBUTIONS:\n return \n case RightTabFundEnum.APGL:\n return \n default:\n break\n }\n }\n\n const {\n performanceDataChange,\n setPerformanceDataChange,\n rorDataChange,\n setRORDataChange,\n navDataChange,\n setNAVDataChange,\n assetDataChange,\n setAssetDataChange,\n clearSnapshot,\n dataFundDetailChange,\n } = React.useContext(FundDetailDataContext)\n\n const dataChangeRef = dataFundDetailChange?.current\n\n const handleTabChange = (key: string) => {\n // Case that update Latest Performance and switch to one of ROR/Asset/Nav tab\n if (\n performanceDataChange &&\n activeKey === RightTabFundEnum.PERFORMANCE_UPDATE &&\n Object.keys(performanceDataChange).length > 0 &&\n (key === RightTabFundEnum.ROR || key === RightTabFundEnum.ASSET || key === RightTabFundEnum.NAV)\n ) {\n setShowConfirm(true)\n setTargetKey(key)\n return\n }\n // Reversed case\n if (\n key === RightTabFundEnum.PERFORMANCE_UPDATE &&\n (rorDataChange.values || navDataChange.values || assetDataChange.values)\n ) {\n setShowConfirm(true)\n setTargetKey(key)\n return\n }\n setActiveKey(key as RightTabFundEnum)\n }\n\n const [showConfirm, setShowConfirm] = useState(false)\n const [targetKey, setTargetKey] = useState()\n\n const handleOk = () => {\n // discard changes\n if (\n targetKey === RightTabFundEnum.ROR ||\n targetKey === RightTabFundEnum.NAV ||\n targetKey === RightTabFundEnum.ASSET\n ) {\n if (\n dataChangeRef &&\n Object.keys(dataChangeRef).filter((item) => item !== '_latestPerformanceDataChange').length === 0\n ) {\n setIsUpdateFund(false)\n }\n setPerformanceDataChange(undefined)\n // TODO: quick fix for now. Need to clear the specific key instead of the whole snapshot\n clearSnapshot()\n notification.success({ message: `Discard changes in ${activeKey}` })\n setShowConfirm(false)\n setActiveKey(targetKey)\n return\n }\n if (targetKey === RightTabFundEnum.PERFORMANCE_UPDATE) {\n if (\n dataChangeRef &&\n Object.keys(dataChangeRef).filter(\n (item) => item !== '_RORDataChange' && item !== '_assetDataChange' && item !== '_navDataChange',\n ).length === 0\n ) {\n setIsUpdateFund(false)\n }\n notification.success({ message: `Discard changes in ROR/Asset/Nav` })\n setRORDataChange({ values: undefined })\n setNAVDataChange({ values: undefined })\n setAssetDataChange({ values: undefined })\n clearSnapshot()\n setShowConfirm(false)\n setActiveKey(targetKey)\n }\n }\n\n const handleCancel = () => {\n setShowConfirm(false)\n }\n\n return (\n <>\n \n {LIST_TABPANE.map((item) => {\n const showTabPane = listSearch.findIndex((i) => i.rightTab && i.rightTab === item.id)\n if (showTabPane === -1 && isFiltering) {\n return null\n }\n return (\n \n {renderTab(item.id)}\n \n )\n })}\n \n \n \n

You have unsaved changes.

\n

\n Because of the conflict in data between the tables, the changes here should be saved or discarded before\n continue.\n

\n Select OK to discard the changes or Cancel to continue.\n
\n
\n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { FormItemTextArea } from '../../../../shared/components/FormItemComponents'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin: 1rem 3rem;\n`\n\nexport const HFRArchiveNotes: React.FC = () => {\n return (\n \n \n \n )\n}\n","import { Button, Col, Row } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FormItemDatePicker, FormItemInput, FormItemSelect } from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../shared/components/RenderLabelForm'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 1rem;\n flex-direction: column;\n`\n\nconst OPTION_DAYS_TYPE = [\n {\n value: 0,\n text: ' ',\n },\n { value: 1, text: 'Business' },\n { value: 2, text: 'Calendar' },\n]\nconst OPTION_DAYS: any = []\nlet i: number\nfor (i = 1; i <= 365; i++) {\n OPTION_DAYS.push({ value: i, text: i.toString() })\n}\n\nconst FORM_INPUT_HEADER = [\n {\n label: 'Capacity',\n name: 'capacity',\n type: 'float',\n },\n {\n label: 'Remaining Capacity',\n name: 'remaining_capacity',\n type: 'float',\n },\n {\n label: 'Remaining HFRX Capacity',\n name: 'remaining_hfrx_capacity',\n type: 'float',\n },\n]\nconst GROUP_FORM_CENTER = [\n {\n label: 'Weekly Redemption',\n name_left: 'weekly_redemption_percent',\n options: OPTION_DAYS_TYPE,\n name_input: 'weekly_redemption_days',\n name_right: 'weekly_redemption_day_type',\n },\n {\n label: 'Weekly HFRX Redemption',\n name_left: 'weekly_hfrx_redemption_percent',\n options: OPTION_DAYS_TYPE,\n name_input: 'weekly_hfrx_redemption_days',\n name_right: 'weekly_hfrx_redemption_day_type',\n },\n {\n label: 'Monthly Redemption',\n name_left: 'monthly_redemption_percent',\n options: OPTION_DAYS_TYPE,\n name_input: 'monthly_redemption_days',\n name_right: 'monthly_redemption_day_type',\n },\n]\nconst FORM_INPUT_FOOTER = [\n {\n label: 'Management Fee',\n name: 'pof_info_management_fee',\n suffix: '%',\n normalize: 'float',\n },\n {\n label: 'Index Pricing',\n name: 'index_pricing',\n },\n {\n label: 'ISIN',\n name: 'isin',\n notConnected: true,\n },\n {\n label: 'Liquidity',\n name: 'hfr_am_info_liquidity',\n },\n]\nexport const HFRInvestmentInfo: React.FC = () => {\n return (\n \n \n {FORM_INPUT_HEADER.map((item) => (\n
\n }\n labelCol={12}\n wrapperCol={12}\n typeField={item.type === 'float' || 'number' ? 'number' : undefined}\n normalize={item.type}\n prefix=\"$\"\n suffix=\"(mil)\"\n />\n \n ))}\n \n \n \n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n typeField=\"number\"\n normalize=\"float\"\n prefix=\"$\"\n suffix=\"(mil)\"\n />\n \n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n normalize=\"float\"\n suffix=\"%\"\n />\n \n \n\n \n \n }\n labelCol={12}\n wrapperCol={12}\n suffix=\"%\"\n />\n \n \n\n {GROUP_FORM_CENTER.map((item) => {\n return (\n \n \n }\n labelCol={12}\n wrapperCol={12}\n typeField=\"number\"\n normalize=\"float\"\n suffix=\"%\"\n />\n \n \n \n
\n \n
\n \n days\n
\n \n \n )\n })}\n\n \n \n }\n typeField=\"number\"\n normalize=\"float\"\n labelCol={12}\n wrapperCol={12}\n />\n \n \n \n \n days\n \n \n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n />\n \n \n \n \n {FORM_INPUT_FOOTER.map((item) => {\n return (\n \n
\n }\n labelCol={12}\n wrapperCol={12}\n normalize={item.normalize}\n suffix={item.suffix}\n />\n
\n \n )\n })}\n \n \n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport { FormItemTextArea } from '../../../../shared/components/FormItemComponents'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin: 1rem 3rem;\n`\nexport const HFRNotes: React.FC = () => {\n return (\n \n \n \n )\n}\n","import { Collapse } from 'antd'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../../app/rootReducer'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailLabelSearchContext } from '../../../../shared/api/context/FundDetailLabelSearchContext'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\nimport { RenderLabelForm } from '../../../../shared/components/RenderLabelForm'\nimport { CollapseFundEnum, LeftNavFundEnum, renderSearchListFund } from '../../../../shared/SearchFundLabel'\nimport { HFRArchiveNotes } from './HFRArchiveNotes'\nimport { HFRInvestmentInfo } from './HFRInvestmentInfo'\nimport { HFRNotes } from './HFRNotes'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n`\nconst { Panel } = Collapse\nconst StyledCollapse = styled(Collapse)`\n .ant-collapse-content-box {\n padding: 0;\n }\n`\n\nconst LIST_COLLAPSE = [\n {\n id: CollapseFundEnum.INVESTMENT_INFO,\n },\n {\n id: CollapseFundEnum.HFR_AM_INFO_NOTE,\n },\n {\n id: CollapseFundEnum.HFR_AM_INFO_ARCHIVE_NOTES,\n },\n]\nexport const HFRAMInfoMain: React.FC = () => {\n const { isFiltering, filterArr } = React.useContext(FundDetailLabelSearchContext)\n\n const arrCollapse = React.useMemo(() => {\n return isFiltering\n ? LIST_COLLAPSE.filter(\n (item) =>\n filterArr\n .filter((item) => item.leftNav === LeftNavFundEnum.HFR_AM_INFO)\n .findIndex((i) => i.collapse && i.collapse === item.id) > -1,\n )\n : LIST_COLLAPSE\n }, [filterArr, isFiltering])\n\n const [activeCollapse, setActiveCollapse] = React.useState(CollapseFundEnum.INVESTMENT_INFO)\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n\n const appSetting = useSelector((state: RootState) => state.appSettings)\n const lastKey = appSetting.fundDraft.find((item) => item.id === dataFundDetail?.fund_id)?.lastFieldChange\n\n React.useEffect(() => {\n if (lastKey) {\n const activeCollapse = renderSearchListFund.find((item) => item.key === lastKey)?.collapse\n activeCollapse &&\n LIST_COLLAPSE.findIndex((item) => item.id === activeCollapse) > -1 &&\n setActiveCollapse((prev) => {\n if (prev.includes(activeCollapse)) {\n return prev\n }\n return activeCollapse\n })\n }\n }, [lastKey])\n\n React.useEffect(() => {\n if (isFiltering) {\n setActiveCollapse(\n arrCollapse.map((item) => {\n return item.id\n }),\n )\n }\n }, [arrCollapse, isFiltering])\n\n const renderCollapse = (id: CollapseFundEnum) => {\n switch (id) {\n case CollapseFundEnum.INVESTMENT_INFO:\n return \n case CollapseFundEnum.HFR_AM_INFO_NOTE:\n return \n case CollapseFundEnum.HFR_AM_INFO_ARCHIVE_NOTES:\n return \n default:\n break\n }\n }\n return (\n \n (key ? setActiveCollapse(key) : setActiveCollapse([]))}\n >\n {arrCollapse.map((item) => {\n return (\n } key={item.id}>\n {renderCollapse(item.id)}\n \n )\n })}\n \n \n \n )\n}\n","export type FundDetails = {\n accepts_mgd_accts: string | null\n accepts_new_investment: boolean | null\n add_invest: string | null\n added_to_db: string | null\n administrative_fee: string | null\n administrator: string | null\n aifmd_compliant: string | null\n allocation: string | null\n app_esgintegration: boolean | null\n app_impactinvest: boolean | null\n app_negativescreen: boolean | null\n app_positivescreen: boolean | null\n app_sustaininvest: boolean | null\n auditor_name: string | null\n balance_redemption_return_days: number | null\n banking_agent: string | null\n benchmark1: string | null\n benchmark2: string | null\n benchmark3: string | null\n bloomberg_ticker: string | null\n capacity: string | null\n constituent_count: number | null\n consultant: string | null\n contact_status: string | null\n custodian: string | null\n data_bloomberg: string | null\n data_factset: string | null\n data_internal: string | null\n data_msci: string | null\n data_other: string | null\n data_source: string | null\n data_sustainalytics: string | null\n dead_fund: boolean | null\n denomination: string | null\n domicile: string | null\n env_cleantech: boolean | null\n env_climatechange: boolean | null\n env_description: boolean | null\n env_greenbuilding: boolean | null\n env_pollutiontaxes: boolean | null\n env_sustainable: boolean | null\n env_waterconservation: boolean | null\n equity_redemption: string | null\n equity_subscription: string | null\n firm_assets: string | null\n firm_assets_currency: string | null\n firm_assets_date: string | null\n firm_id: string\n firm_name: string\n fund_assets: number | null\n fund_assets_date: string | null\n firm_denomination: string | null\n fund_contact: FundContact\n fund_id: string\n fund_name: string\n fund_status_code: string | null\n firm_contact_country: string | null\n gate_fund: string | null\n gate_investor: string | null\n gov_anticorruption: boolean | null\n gov_boarddiversity: boolean | null\n gov_boardindependence: boolean | null\n gov_corppolcontrib: boolean | null\n gov_description: boolean | null\n gov_executivecomp: boolean | null\n has_index_factsheet: boolean\n hfr_am_info_liquidity: string | null\n hfr_am_info_notes: string | null\n hfr_analyst: string | null\n hfr_database: boolean | null\n hfr_indices: FundIndexManagerType[]\n hfr_la_fund: boolean | null\n hfr_risk_premia: boolean | null\n hfrb_fund: boolean | null\n hfri500_eligibility: string | null\n hfri500_exclusion_reason: string | null\n hfri500_reviewed: string | null\n hfri_500_fund: boolean | null\n hfri_fund: boolean | null\n hfri_i_fund: boolean | null\n hfri_institutional_fund: boolean | null\n hfri_pending_fund: boolean | null\n hfri_pending_removal: boolean | null\n hfri_woman_access_fund: boolean | null\n hfrrparity_fund: boolean | null\n hfrrparity_i_fund: boolean | null\n hfru_fund: boolean | null\n hfrx_fund: boolean | null\n hurdle_rate: string | null\n incentive_fee: string | null\n inception_date: string | null\n index_pricing: string | null\n investor_type: string | null\n is_annual_performance_audit: boolean | null\n is_aum_distributed: boolean | null\n is_nav_distributed: boolean | null\n is_emerging_markets_fund: boolean | null\n is_feeder_fund: boolean | null\n is_fund_esg: string | null\n is_hfr_funded: boolean | null\n is_high_watermark: boolean | null\n is_hurdle_rate: boolean | null\n is_liquidated: boolean | null\n is_lockup: string | null\n is_minority_fund: boolean | null\n is_offshore: boolean | null\n isin: string | null\n last_audit_date: string | null\n legal_adviser: string | null\n liquid_alt_product: boolean | null\n liquid_alt_region: string | null\n liquid_alt_type: string | null\n liquidated_at: string | null\n liquidity: string | null\n lockup_period: string | null\n lockup_type: string | null\n max_12b1_fee: string | null\n max_deferred_fee: string | null\n max_front_fee: string | null\n mgmt_fee: string | null\n min_invest: string | null\n min_invest_indv: string | null\n minority_manage_level: string | null\n minority_manage_type: string | null\n monthly_redemption_day_type: number | null\n monthly_redemption_days: number | null\n monthly_redemption_percent: string | null\n most_recent_review: string | null\n multi_manager_platform: string | null\n need_to_fund: string | null\n notes: string | null\n om_date: string | null\n other_fees: string | null\n performance_reporting: string | null // not use\n placement_agent: string | null\n prime_broker: string | null\n principals: Principal[]\n product_class: string | null\n redemption_advance_notice: number | null\n redemption_fee: string | null\n redemption_fee_months: string | null\n redemption_return_days: number | null\n redemption_return_percent: number | null\n region_inv_focus: string | null\n region_inv_focus_country: string | null\n registration_code: string | null\n remaining_capacity: string | null\n remaining_hfrx_capacity: string | null\n reporting_frequency: string | null\n reporting_style: string | null\n run_sep_mgd_accts: string | null\n sales_fee: string | null\n sec_pfid_number: string | null\n sma_monthlyliquid_20mm: string | null\n sma_monthlyliquid_50mm: string | null\n sma_weeklyliquid_10mm: string | null\n multi_manager_platform_reviewed_date: string | null\n multi_manager_platform_reviewed_by: string | null\n soc_avoidtobacco: boolean | null\n soc_communitydev: boolean | null\n soc_description: boolean | null\n soc_diversityantibias: boolean | null\n soc_humanrights: boolean | null\n soc_laborrelations: boolean | null\n soc_workplacebenefits: boolean | null\n soc_workplacesafety: boolean | null\n strategy_code: number | null\n strategy_code_new: number | null\n strategy_description: string | null\n structure: string | null\n style: string | null\n sub_strategy_code: string | null\n sub_strategy_code_new: number | null\n sub_strategy_desc: string | null\n subscription_cutoff_time: string | null\n subscription_cutoff_timezone: string | null\n subscription_day_type: number | null\n subscription_days: number | null\n subscription_settlement_days: string | null\n subscription_notice: number | null\n subscription_settlement: number | null\n team_engagepcm: string | null\n ucitsiii: string | null\n use_of_leverage: string | null\n use_of_leverage_type: string | null\n weekly_hfrx_redemption_day_type: number | null\n weekly_hfrx_redemption_days: number | null\n weekly_hfrx_redemption_percent: string | null\n weekly_redemption_days: number | null\n weekly_redemption_percent: string | null\n weekly_redemption_day_type: number | null\n\n woman_managed: string | null\n added_to_hfri: string | null // YYYY-MM\n removed_from_hfri: string | null // YYYY-MM\n\n subscription_advance_notice: string | null\n contact_name: string | null\n contact_company: string | null\n contact_country: string | null\n contact_address1: string | null\n contact_address2: string | null\n contact_city: string | null\n contact_state: string | null\n contact_postal_code: string | null\n contact_phone: string | null\n contact_fax: string | null\n contact_email: string | null\n contact_web: string | null\n\n offshore_id: string | null\n //\n fund_family_code: string | null\n fund_family_id: string | null\n} & FundCCMCResponse\n\nexport interface ExFundFieldChange {\n min_invest_input: number\n add_invest_input: number\n min_invest_indv_input: number\n auditor_name_input: string\n legal_adviser_input: string\n prime_broker_input: string\n administrator_input: string\n domicile_input: string\n}\n\nexport interface FundDetailsPreviewType {\n added_to_db: string\n benchmarks: FundDetailBenchmark\n domicile: string\n firm: FundDetailFirm\n firm_contact: FundDetailFirmContact\n firm_sec: FundDetailFirmSec\n fund_assets_currency: string\n fund_assets: string | number\n fund_assets_rep_date: string\n fund_fees: FundDetailFirmFee\n fund_id: string\n fund_info: FundDetailFundInfo\n fund_name: string\n is_emrgngmrkts_fund: boolean\n is_hfrx_fund: boolean\n is_hfru_fund: boolean\n is_hfr_risk_parity_fund: boolean\n is_hfr_blockchain_fund: boolean\n is_index_fund: boolean\n leverage: string\n liquid_alt_region: string\n liquid_alt_type: string\n regional_focus: string\n strategy: FundDetailStrategy\n structure: string\n sub_strategy: FundDetailSubStrategy\n redemptions: string\n subscriptions: string\n ucits_compliant?: boolean\n min_investment_curr: string\n reporting_style: string\n returns_currency: string\n\n // Additional data loaded separately in fund details\n // ror?: any;\n // aum?: any;\n // benchmarkRor?: any;\n}\n\nexport interface FundIndexManagerType {\n description: string\n id: number\n name: string\n value: boolean\n}\n\nexport interface FundContact {\n address1: string\n address2: string\n city: string\n company: string\n country: string\n description: string\n email: string\n fax: string\n name: string\n phone: string\n postal_code: string\n state_code: string\n web: string\n}\n\nexport interface Principal {\n rank: number\n name: string\n title: string\n}\n\nexport interface FundAllInfo {\n added_to_db: string\n domicile: string\n firm: FundDetailFirm\n firm_contact: FundDetailFirmContact\n firm_sec: FundDetailFirmSec\n fund_assets: string | number\n fund_assets_currency: string\n fund_assets_rep_date: string\n fund_export: Record\n fund_fees: FundDetailFirmFee\n fund_id: string\n fund_info: FundDetailFundInfo\n fund_name: string\n is_emrgngmrkts_fund: boolean\n is_hfrx_fund: boolean\n is_hfru_fund: boolean\n is_hfr_risk_parity_fund: boolean\n is_hfr_blockchain_fund: boolean\n is_index_fund: boolean\n leverage: string\n liquid_alt_region: string\n liquid_alt_type: string\n regional_focus: string\n statistics: FundAllInfoStatistic\n strategy: FundDetailStrategy\n structure: string\n sub_strategy: FundDetailSubStrategy\n redemptions: string\n subscriptions: string\n ucits_compliant?: boolean\n min_investment_curr: string\n reporting_style: string\n returns_currency: string\n valuation: {\n firm_usd_value: string\n fund_usd_value: string\n }\n}\n\nexport interface FundAllInfoStatistic {\n alpha: number\n ann_ror: number\n ann_stdev: number\n beta: number\n correlation: number\n down_alpha: number\n down_beta: number\n down_r_square?: number | string\n end_date: string\n five_year_ann_ror: number\n five_year_ann_sharpe_ratio: number\n five_year_ann_stdev: number\n geo_avg_month_ror: number\n high_month_ror: number\n low_month_ror: number\n one_month_ror: number\n one_year_ann_ror: number\n one_year_ann_sharpe_ratio: number\n one_year_ann_stdev: number\n r_square: number\n seven_year_ann_ror: number | string\n seven_year_ann_sharpe_ratio: number | string\n seven_year_ann_stdev: number | string\n sharpe_ratio: number\n six_month_ror: number\n start_date: string\n stdev: number\n ten_year_ann_ror: number | string\n ten_year_ann_sharpe_ratio: number | string\n ten_year_ann_stdev: number | string\n three_month_ror: number\n three_year_ann_ror: number\n three_year_ann_sharpe_ratio: number\n three_year_ann_stdev: number\n track_record: number\n two_year_ann_ror: number\n two_year_ann_sharpe_ratio: number\n two_year_ann_stdev: number\n up_alpha: number\n up_beta: number\n up_r_square: number | string\n winning_month_percentage: number\n}\nexport interface FirmFundDetail {\n fund_id: string\n fund_name: string\n fund_assets: string\n strategy_name: string\n sub_strategy_name: string\n inception_date: string\n fund_assets_rep_date: string\n fund_assets_currency: string\n has_permission: boolean\n}\n\nexport interface FirmDetails extends FundDetailFirm {\n iard_crd_number: string\n sec_number: string\n sec_registered: boolean\n principals: string\n}\n\nexport interface FirmDetailResponse {\n firm: FirmDetails\n firm_contact: FundDetailFirmContact\n firm_funds: FirmFundDetail[]\n}\n\nexport interface FundDetailBenchmark {\n benchmark_1: string\n benchmark_2: string\n benchmark_3: string\n}\nexport interface FundDetailFirm {\n firm_assets_currency: string\n firm_assets: string | number\n firm_assets_date: string\n firm_id: string\n firm_name: string\n is_diversity_firm: boolean\n email: string\n}\nexport interface FundDetailFirmContact {\n address?: string\n city?: string\n country?: string\n facsimile?: string\n first_contact?: string\n pdf_address?: string\n phone?: string\n postal_code?: string\n principals?: string\n second_contact?: string\n state?: string\n email?: string\n}\n\nexport interface FundDetailFirmSec {\n iard_crd_number?: string\n sec_number?: string\n sec_registered: boolean\n}\n\nexport interface FundDetailFirmFee {\n hurdle_rate?: string\n high_watermark?: boolean\n incentive_fee: string\n max_12b1_fee?: string\n max_deferred_fee?: string\n max_front_fee?: string\n mgmt_fee?: string\n other_fees?: string\n sales_fee?: string\n}\n\nexport interface FundDetailFundInfo {\n additional_investment: string\n advance_notice: number | string\n administrator: string\n annual_perform_audit: string\n audit_date: string\n auditor: string\n banking_agent_onshore: string\n custodian: string\n fund_registration_code: string\n inception_date: string\n individual_account_min: string\n is_offshore: boolean\n legal_adviser_onshore: string\n liquid_alt_product?: boolean\n lockup?: string\n minimum_investment: string\n open_for_investment: string\n open_to_investor_type: string\n prime_broker: string\n product_class?: string\n region_inv_focus: number\n region_inv_focus_country?: string\n region_inv_focus_desc?: string\n reporting: string\n strategy_description?: string\n}\n\nexport interface FundDetailRegionalFocus {\n id: string\n name: string\n}\n\nexport interface StrategyResponse {\n strategies: FundDetailStrategy[]\n sub_strategies: FundDetailSubStrategy[]\n}\n\nexport interface FundDetailStrategy {\n benchmark: string\n strategy_code: number\n strategy_name: string\n}\n\nexport interface FundDetailSubStrategy {\n benchmark: string\n strategy_code: number\n sub_strategy_code: number\n sub_strategy_name: string\n}\n\nexport interface FirmFundDescriptionRecord {\n key: string\n value: string | string[]\n show: boolean\n}\n\nexport interface FundDropdownType {\n accepts_mgd_accts: FundDropdownCodeType[]\n add_invest: string[]\n administrator: string[]\n aifmd_compliant: FundDropdownCodeType[]\n allocation: FundDropdownCodeType[]\n app_esgintegration: FundDropdownCodeType[]\n app_impactinvest: FundDropdownCodeType[]\n app_negativescreen: FundDropdownCodeType[]\n app_positivescreen: FundDropdownCodeType[]\n app_sustaininvest: FundDropdownCodeType[]\n applied_diversityinclusion: FundDropdownCodeType[]\n applied_esgactivist: FundDropdownCodeType[]\n applied_esgintegration: FundDropdownCodeType[]\n applied_esgproducts: FundDropdownCodeType[]\n applied_firmculture: FundDropdownCodeType[]\n applied_investmentprocess: FundDropdownCodeType[]\n applied_portfolioconstruction: FundDropdownCodeType[]\n auditor_name: string[]\n coinvestment_number: FundDropdownCodeType[]\n contact_country: FundDropdownCodeType[]\n contact_state: FundDropdownCodeType[]\n country: FundDropdownCodeType[]\n contact_status: FundDropdownCodeType[]\n data_bloomberg: FundDropdownCodeType[]\n data_factset: FundDropdownCodeType[]\n data_internal: FundDropdownCodeType[]\n data_msci: FundDropdownCodeType[]\n data_source: FundDropdownCodeType[]\n data_sustainalytics: FundDropdownCodeType[]\n denomination: FundDropdownCodeType[]\n domicile: string[]\n env_cleantech: FundDropdownCodeType[]\n env_climatechange: FundDropdownCodeType[]\n env_description: FundDropdownCodeType[]\n env_greenbuilding: FundDropdownCodeType[]\n env_pollutiontaxes: FundDropdownCodeType[]\n env_sustainable: FundDropdownCodeType[]\n env_waterconservation: FundDropdownCodeType[]\n equity_redemption: FundDropdownCodeType[]\n equity_subscription: FundDropdownCodeType[]\n fund_status_code: FundDropdownCodeType[]\n future: FundDropdownCodeType[]\n gate_fund: FundDropdownCodeType[]\n gate_investor: FundDropdownCodeType[]\n gov_anticorruption: FundDropdownCodeType[]\n gov_boarddiversity: FundDropdownCodeType[]\n gov_boardindependence: FundDropdownCodeType[]\n gov_corppolcontrib: FundDropdownCodeType[]\n gov_executivecomp: FundDropdownCodeType[]\n hfr_analyst: FundDropdownCodeType[]\n hfri500_eligibility: FundDropdownCodeType[]\n hfri500_exclusion_reason: FundDropdownCodeType[]\n investor_type: string[]\n is_firm_esg: FundDropdownCodeType[]\n is_fund_esg: FundDropdownCodeType[]\n is_lockup: FundDropdownCodeType[]\n legal_adviser: string[]\n liquid_alt_region: FundDropdownCodeType[]\n liquid_alt_type: FundDropdownCodeType[]\n liquidity: FundDropdownCodeType[]\n lockup_period: FundDropdownCodeType[]\n lockup_type: FundDropdownCodeType[]\n min_invest: string[]\n min_invest_indv: string[]\n minority_manage_level: FundDropdownCodeType[]\n minority_manage_type: FundDropdownCodeType[]\n minority_own_level: FundDropdownCodeType[]\n minority_own_type: FundDropdownCodeType[]\n non_sec_country: FundDropdownCodeType[]\n non_sec_reg_auth: FundDropdownCodeType[]\n organization_type: FundDropdownCodeType[]\n other_instrument: FundDropdownCodeType[]\n other_vehicle: FundDropdownCodeType[]\n performance_reporting: string[]\n prime_broker: string[]\n private_debt: FundDropdownCodeType[]\n private_equity: FundDropdownCodeType[]\n product_class: FundDropdownCodeType[]\n public_debt: FundDropdownCodeType[]\n public_equity: FundDropdownCodeType[]\n receive_guidance: FundDropdownCodeType[]\n region_inv_focus: FundDropdownCodeType[]\n region_inv_focus_country: FundDropdownCodeType[]\n registration_code: string[]\n reporting_frequency: FundDropdownCodeType[]\n reporting_style: string[]\n run_sep_mgd_accts: FundDropdownCodeType[]\n sec_country: FundDropdownCodeType[]\n sec_exemption_reason_type: FundDropdownCodeType[]\n sec_state: FundDropdownCodeType[]\n sma_monthlyliquid_20mm: FundDropdownCodeType[]\n sma_monthlyliquid_50mm: FundDropdownCodeType[]\n sma_weeklyliquid_10mm: FundDropdownCodeType[]\n soc_avoidtobacco: FundDropdownCodeType[]\n soc_communitydev: FundDropdownCodeType[]\n soc_diversityantibias: FundDropdownCodeType[]\n soc_humanrights: FundDropdownCodeType[]\n soc_laborrelations: FundDropdownCodeType[]\n soc_workplacebenefits: FundDropdownCodeType[]\n soc_workplacesafety: FundDropdownCodeType[]\n structure: string[]\n style: FundDropdownCodeType[]\n subscription_advance_notice: FundDropdownCodeType[]\n subscription_cutoff_time: FundDropdownCodeType[]\n subscription_cutoff_timezone: FundDropdownCodeType[]\n subscription_settlement_days: FundDropdownCodeType[]\n team_engagepcm: FundDropdownCodeType[]\n thirdparty_guidance: FundDropdownCodeType[]\n typical_liquidity: FundDropdownCodeType[]\n typical_size: FundDropdownCodeType[]\n ucitsiii: string[]\n use_of_leverage_type: FundDropdownCodeType[]\n vehicle_commingled_fund: FundDropdownCodeType[]\n vehicle_fund_of_one: FundDropdownCodeType[]\n vehicle_managed_account: FundDropdownCodeType[]\n firm_contact_country: FundDropdownCodeType[]\n woman_managed: FundDropdownCodeType[]\n multi_manager_platform_reviewed_by: FundDropdownCodeType[]\n idx__9__accepting_new_investments_confirmed_by: FundDropdownCodeType[]\n}\n\nexport interface FundDropdownCodeType {\n code_code: string\n code_description: string\n}\n\nexport interface BasicInfoFirm {\n firm_id: string\n firm_name: string\n}\n\nexport interface FundBenchmark {\n fund_id: string\n fund_name: string\n}\nexport interface LeverageResponseType {\n minimum?: number\n maximum?: number\n average?: number\n date: string\n}\n\nexport interface InstrumentResponseType {\n name: string\n long_value?: number\n short?: number\n net?: number\n date: string\n}\n\nexport interface IndustryGroupsType {\n name: string\n long_value?: number\n short?: number\n net?: number\n date: string\n}\n\nexport interface InvestorType {\n name: string\n date: string\n assets?: number\n number?: number\n quarter?: number\n year?: number\n}\n\nexport interface RegionWeightType {\n name: string\n long_value?: number\n short?: number\n net?: number\n date: string\n}\n\nexport interface LeverageUpdateRequestType {\n work_date: string // YYYY-MM-DD\n updates: {\n minimum?: number\n maximum?: number\n average?: number\n work_date?: string\n }\n}\n\nexport interface LeverageCreateRequestType {\n work_date: string // YYYY-MM-DD\n minimum?: number\n maximum?: number\n average?: number\n}\n\nexport interface InstrumentUpdateRequestType {\n work_date: string\n name: string\n updates: {\n long_value?: number\n short?: number\n net?: number\n name?: string\n work_date?: string\n }\n}\n\nexport interface InstrumentCreateRequestType {\n work_date: string // YYYY-MM-DD\n name: string\n long_value?: number\n short?: number\n net?: number\n}\n\nexport interface InvestorCreateRequestType {\n work_date: string\n name: string\n assets?: number\n number?: number\n}\n\nexport interface InvestorUpdateRequestType {\n work_date: string\n name: string\n updates: {\n assets?: number\n number?: number\n name?: string\n work_date?: string\n }\n}\nexport interface FundDetailsUniverses {\n is_active_in_universe: boolean\n is_in_universe: boolean\n status_in_universe: string\n universe_description: string\n universe_id: number\n universe_name: string\n}\nexport interface UniversesUpdate {\n updates: { [key: string]: string | boolean | number }[]\n}\nexport interface FundIndicesUpdate {\n updates: { index_id: number; value: boolean }[]\n}\nexport interface DueDiligenceInvestorUpdate {\n rationale: string\n firm: string\n strategy: string\n}\n\nexport interface LegacyStrategyResponse {\n legacy_strategies: FundDetailStrategy[]\n sub_strategies: FundDetailSubStrategy[]\n}\n\nexport interface AsiStrategyResponse {\n asi_strategies: { id: number; name: string }[]\n asi_sub_strategies: { id: number; name: string; asi_strategy_id: number }[]\n}\n\nexport interface FundTableDropDown {\n electronic_trading_platforms: string[]\n industries: string[]\n instruments: string[]\n investor_types: { [key: number]: string }[]\n region_weights: string[]\n}\nexport interface FundActivationParams {\n contact_person: string\n contact_phone: string\n contact_email: string\n additional_comments: string\n}\n\nexport interface DueDiligenceInvestor {\n firm: string\n rationale: string\n strategy: string\n oper_id: string\n date_time: string\n}\n\nexport interface DueDiligenceContact {\n contact_name: string\n first_name: string\n last_name: string\n title: string\n department: string\n address1: string\n address2: string\n address3: string\n city: string\n state_code: string\n zip: string\n country: string\n phone: string\n fax: string\n email: string\n web: string\n description: string\n}\n\nexport interface DueDiligenceScoreCardResponse {\n last_oper_id: string\n last_update: string\n scorecards: DueDiligenceScoreCard[]\n}\nexport interface DueDiligenceScoreCard {\n category: string\n comment: string\n date_time: string\n oper_id: string\n score: number\n weight: number\n}\n\nexport interface DueDiligenceScoreCardUpdate {\n identifier: string[]\n weight: number\n score: number\n comment: string\n}\n\nexport interface DueDiligenceMonthly {\n date: string\n internal: string\n monthly: string\n oper_id: string\n slippage: string\n}\n\nexport interface DueDiligenceMonthlyUpdate {\n date: string\n monthly: string\n slippage: string\n internal: string\n username: string\n}\nexport interface DueDiligenceDocumentsResponse {\n firm_url: string\n search_url: string\n}\n\nexport interface PrincipalsResponse {\n fund_id: string\n rank: number\n name: string\n title: string\n}\nexport interface PrincipalsUpdateParams {\n identifier: (string | number)[]\n rank: number\n name: string\n title: string\n}\n\nexport interface PrincipalCreateParams {\n fund_id: string\n rank: number\n name: string\n title: string\n}\n\nexport interface APGLResponse {\n monthly_data: MonthlyAPGL[]\n ytd_data: { [key: number]: string }\n}\nexport interface MonthlyAPGL {\n year: number\n month: number\n value: string\n}\n\nexport interface FundPropertiesParams {\n prop_id: number\n prop_value: string\n}\nexport interface FundPropertiesResponse {\n codes: { prop_id: number; prop_name: string }[]\n fund_properties: PropertiesInfo[]\n}\nexport interface PropertiesInfo {\n prop_id: number\n prop_name: string\n prop_value: string\n}\n\nexport interface FundSearchParams {\n where: FundSearchWhereParams\n peer_group_code?: number[]\n page: number\n limit: number\n order_by: string\n sort_by: string\n columns: string[]\n firm_id?: string\n}\n\nexport interface FundSearchWhereParams {\n fund_diversity_and_inclusion_types?: string[]\n firm_diversity_and_inclusion_types?: string[]\n fund_id?: string\n fund_name?: string\n fund_curr_code?: string[]\n fund_status_code?: string[]\n hfr_analyst?: string[]\n bloomberg_ticker?: string\n liquidate_date?: { gte?: string; lte?: string }\n isin?: string\n sec_pfid_number?: string\n reporting_style?: string[]\n reporting_frequency?: string[]\n is_aum_distributed?: boolean\n is_nav_distributed?: boolean\n is_feeder_fund?: boolean\n minority_manage_type?: string[]\n minority_manage_level?: string[]\n structure?: string\n woman_managed?: string[]\n domicile?: string[]\n is_liquidated?: boolean\n ucitsiii?: string[]\n accepts_mgd_accts?: string[]\n strategy_new?: string[]\n sub_strategy_new?: string[]\n strategy?: string[]\n sub_strategy?: string[]\n aifmd_compliant?: string[]\n run_sep_mgd_accts?: string[]\n hfri_pending_removal?: boolean\n hfri500_eligibility?: string[]\n hfri500_excl_reason?: string[]\n hfri500_reviewed?: { gte?: string; lte?: string }\n added_to_hfri?: string\n removed_from_hfri?: string\n firm_id?: string\n firm_name?: string\n data_source_code?: string[]\n firm_assets?: { gte?: number; lte?: number }\n firm_assets_date?: { gte?: string; lte?: string }\n product_class?: string[]\n inception_date?: { gte?: string; lte?: string }\n is_offshore?: boolean\n is_minority_fund?: boolean\n contact_status?: string[]\n liquidity?: { gte?: number; lte?: number }\n registration_code?: string[]\n liquid_alt_type?: string[]\n liquid_alt_region?: string[]\n auditor_name?: string[]\n prime_broker?: string[]\n banking_agent?: string\n legal_adviser?: string[]\n placement_agent?: string\n consultant?: string\n custodian?: string\n administrator?: string[]\n redemption_return_days?: { gte?: number; lte?: number }\n redemption_return_percent?: { gte?: number; lte?: number }\n balance_redemption_return_days?: { gte?: number; lte?: number }\n equity_subsc_code?: string[]\n om_date?: { gte?: string; lte?: string }\n is_hfr_funded?: boolean\n perf_reporting?: string[]\n constituent_count?: { gte?: number; lte?: number }\n does_accept_new_invest?: boolean\n lockup_type?: string[]\n lockup_period?: string[]\n gate_fund?: string[]\n gate_investor?: string[]\n is_lockup?: string[]\n subscription_notice?: string[]\n sub_cutoff_time?: string[]\n sub_cutoff_zone?: string[]\n adv_notice_days?: { gte?: number; lte?: number }\n is_annual_perf_audit?: boolean\n min_invest?: { gte?: number; lte?: number }\n add_invest?: { gte?: number; lte?: number }\n region_inv_focus?: string[]\n min_invest_indv?: string[]\n last_audit_date?: { gte?: string; lte?: string }\n investor_type?: string[]\n subscription_settlement?: string[]\n equity_redem_code?: string[]\n sma_weeklyliquid_10mm?: string[]\n sma_monthlyliquid_20mm?: string[]\n sma_monthlyliquid_50mm?: string[]\n use_leverage?: string\n leverage_type?: string[]\n liquid_alt_product?: boolean\n offshore_id?: string\n}\n\nexport interface ListFundIdResponse {\n fund_ids: string[]\n total: number\n}\n\nexport interface FundSearchResponse {\n total: number\n funds: FundSearchColumnResponse[]\n}\n\nexport interface FundSearchColumnResponse {\n accepts_mgd_accts: string\n add_invest: string\n added_to_hfri: string\n administrator: string\n adv_notice_days: number\n aifmd_compliant: string\n auditor_name: string\n balance_redemption_return_days: number\n banking_agent: string\n bloomberg_ticker: string\n constituent_count: number\n consultant: string\n contact_status: string\n custodian: string\n data_source_code: string\n denomination: string\n does_accept_new_invest: number\n domicile: string\n equity_redem_code: string\n equity_subsc_code: string\n firm_assets: string\n firm_assets_date: string\n firm_assets_currency: string\n firm_id: string\n firm_name: string\n full_count: number\n fund_curr_code: string\n fund_id: string\n fund_name: string\n fund_status_code: string\n gate_fund: string\n gate_investor: string\n hfr_analyst: string\n hfri500_eligibility: string\n hfri500_excl_reason: string\n hfri500_reviewed: string\n hfri_pending_removal: boolean\n inception_date: string\n investor_type: string\n is_annual_perf_audit: boolean\n is_aum_distributed: boolean\n is_nav_distributed: boolean\n is_feeder_fund: boolean\n is_hfr_funded: boolean\n is_liquidated: boolean\n is_lockup: string\n is_minority_fund: boolean\n is_offshore: boolean\n isin: string\n last_audit_date: string\n legal_adviser: string\n leverage_type: string\n liquid_alt_product: boolean\n liquid_alt_region: string\n liquid_alt_type: string\n liquidate_date: string\n liquidity: number\n lockup_period: string\n lockup_type: string\n min_invest: string\n min_invest_indv: string\n minority_manage_level: string\n minority_manage_type: string\n offshore_id: string\n om_date: string\n perf_reporting: string\n placement_agent: string\n prime_broker: string\n product_class: string\n redemption_return_days: number\n redemption_return_percent: number\n region_inv_focus: string\n registration_code: string\n removed_from_hfri: string\n reporting_frequency: string\n reporting_style: string\n run_sep_mgd_accts: string\n sec_pfid_number: string\n sma_monthlyliquid_20mm: string\n sma_monthlyliquid_50mm: string\n sma_weeklyliquid_10mm: string\n strategy_code_new: number\n structure: string\n sub_cutoff_time: string\n sub_cutoff_zone: string\n sub_strategy_code_new: number\n subscription_notice: string\n subscription_settlement: string\n ucitsiii: string\n use_leverage: string\n woman_managed: string\n firm_denomination: string\n}\n\nexport interface FilterInfoColumn {\n fund_id?: string[] | null\n fund_name?: string[] | null\n fund_curr_code?: string[] | null\n fund_status_code?: string[] | null\n hfr_analyst?: string[] | null\n bloomberg_ticker?: string[] | null\n liquidate_date?: string[] | null\n isin?: string[] | null\n sec_pfid_number?: string[] | null\n reporting_style?: string[] | null\n reporting_frequency?: string[] | null\n is_aum_distributed?: string[] | null\n is_nav_distributed?: string[] | null\n is_feeder_fund?: string[] | null\n minority_manage_type?: string[] | null\n minority_manage_level?: string[] | null\n structure?: string[] | null\n woman_managed?: string[] | null\n domicile?: string[] | null\n is_liquidated?: string[] | null\n ucitsiii?: string[] | null\n accepts_mgd_accts?: string[] | null\n strategy_new?: string[] | null\n sub_strategy_new?: string[] | null\n strategy?: string[] | null\n sub_strategy?: string[] | null\n aifmd_compliant?: string[] | null\n run_sep_mgd_accts?: string[] | null\n hfri_pending_removal?: string[] | null\n hfri500_eligibility?: string[] | null\n hfri500_excl_reason?: string[] | null\n hfri500_reviewed?: string[] | null\n added_to_hfri?: string[] | null\n removed_from_hfri?: string[] | null\n firm_id?: string[] | null\n firm_name?: string[] | null\n data_source_code?: string[] | null\n firm_assets?: string[] | null\n firm_assets_date?: string[] | null\n product_class?: string[] | null\n inception_date?: string[] | null\n is_offshore?: string[] | null\n is_minority_fund?: string[] | null\n contact_status?: string[] | null\n liquidity?: string[] | null\n registration_code?: string[] | null\n liquid_alt_type?: string[] | null\n liquid_alt_region?: string[] | null\n auditor_name?: string[] | null\n prime_broker?: string[] | null\n banking_agent?: string[] | null\n legal_adviser?: string[] | null\n placement_agent?: string[] | null\n consultant?: string[] | null\n custodian?: string[] | null\n administrator?: string[] | null\n redemption_return_days?: string[] | null\n redemption_return_percent?: string[] | null\n balance_redemption_return_days?: string[] | null\n equity_subsc_code?: string[] | null\n om_date?: string[] | null\n is_hfr_funded?: string[] | null\n perf_reporting?: string[] | null\n constituent_count?: string[] | null\n does_accept_new_invest?: string[] | null\n lockup_type?: string[] | null\n lockup_period?: string[] | null\n gate_fund?: string[] | null\n gate_investor?: string[] | null\n is_lockup?: string[] | null\n subscription_notice?: string[] | null\n sub_cutoff_time?: string[] | null\n sub_cutoff_zone?: string[] | null\n adv_notice_days?: string[] | null\n is_annual_perf_audit?: string[] | null\n min_invest?: string[] | null\n add_invest?: string[] | null\n region_inv_focus?: string[] | null\n min_invest_indv?: string[] | null\n last_audit_date?: string[] | null\n investor_type?: string[] | null\n subscription_settlement?: string[] | null\n equity_redem_code?: string[] | null\n sma_weeklyliquid_10mm?: string[] | null\n sma_monthlyliquid_20mm?: string[] | null\n sma_monthlyliquid_50mm?: string[] | null\n use_leverage?: string[] | null\n leverage_type?: string[] | null\n liquid_alt_product?: string[] | null\n offshore_id?: string[] | null\n peer_group_code?: number[] | null\n}\n\nexport interface ListPlatformResponse {\n platforms: string[]\n}\n\nexport type FundCCMCResponse = {\n fund_id: string\n fund_name: string\n has_securities: boolean\n manager_confirms: boolean\n separate_share_classes: boolean\n pre_trade_compliance_restrictions: boolean\n other_measures: string | null\n subscription_notice: string\n}\n\nexport type FundESGStrategies = {\n esg_strategies: {\n code: number\n name: string\n }[]\n esg_sub_strategies: {\n esg_strategy: number\n code: number\n name: string\n }[]\n esg_sub_strategy_dropdown: {\n [key: number]: number[]\n }\n}\n\nexport enum INDEX_ELIGIBILITY_ENUM {\n ELIGIBLE = 'Eligible',\n NOT_ELIGIBLE = 'Not eligible',\n UNDER_REVIEW = 'Under review',\n}\nexport enum WAIVE_ENUM {\n WILLING_TO_WAIVE = 'Willing to waive',\n NOT_WILLING_TO_WAIVE = 'Not willing to waive',\n NOT_RESPONDED = 'Not responded',\n}\n\nexport type FundIndexEligibilityDetails = {\n fund_id?: string\n index_family_id?: number\n performance_added_to_family_as_of?: string | null\n removed_from_family_after?: string | null\n family_pending_removal?: boolean | null\n //\n accepting_new_investments?: boolean | null\n accepting_new_investments_index_eligibility?: INDEX_ELIGIBILITY_ENUM | null\n accepting_new_investments_last_confirmed_date?: string | null\n accepting_new_investments_confirmed_by?: string | null\n //\n subscriptions_monthly?: 'Daily' | 'Weekly' | 'Semi-Monthly' | 'Monthly' | null\n subscriptions_monthly_index_eligibility?: INDEX_ELIGIBILITY_ENUM | null\n subscriptions_monthly_last_confirmed_date?: string | null\n subscriptions_monthly_confirmed_by?: string | null\n //\n subscriptions_advanced?: number | null\n subscriptions_advanced_index_eligibility?: INDEX_ELIGIBILITY_ENUM | null\n subscriptions_advanced_last_confirmed_date?: string | null\n subscriptions_advanced_confirmed_by?: string | null\n //\n redemptions_quarterly?: 'Daily' | 'Weekly' | 'Semi-Monthly' | 'Monthly' | 'Bi-Monthly' | 'Quarterly' | null\n redemptions_quarterly_index_eligibility?: INDEX_ELIGIBILITY_ENUM | null\n redemptions_quarterly_last_confirmed_date?: string | null\n redemptions_quarterly_confirmed_by?: string | null\n //\n redemptions_advanced?: number | null\n redemptions_advanced_index_eligibility?: INDEX_ELIGIBILITY_ENUM | null\n redemptions_advanced_last_confirmed_date?: string | null\n redemptions_advanced_confirmed_by?: string | null\n //\n lockup?: WAIVE_ENUM | null\n lockup_index_eligibility?: INDEX_ELIGIBILITY_ENUM | null\n lockup_last_confirmed_date?: string | null\n lockup_confirmed_by?: string | null\n //\n gate_investor?: WAIVE_ENUM | null\n gate_investor_index_eligibility?: INDEX_ELIGIBILITY_ENUM | null\n gate_investor_last_confirmed_date?: string | null\n gate_investor_confirmed_by?: string | null\n //\n gate_fund?: WAIVE_ENUM | null\n gate_fund_index_eligibility?: INDEX_ELIGIBILITY_ENUM | null\n gate_fund_last_confirmed_date?: string | null\n gate_fund_confirmed_by?: string | null\n //\n eligibility_status?: INDEX_ELIGIBILITY_ENUM | null\n eligibility_status_reviewed_date?: string | null\n eligibility_status_reviewed_by?: string | null\n //\n exclusion_reason?: 'Due Diligence' | 'Firm concentration limit' | 'Redundant fund' | 'Other' | null\n exclusion_reason_reviewed_date?: string | null\n exclusion_reason_reviewed_by?: string | null\n}\n\nexport type FundIndexEligibilityDetailsResponse = FundIndexEligibilityDetails & {\n id: string\n created_date: string\n updated_date: string\n}\n\nexport const FundIndexEligibilityDetailsKeys: (keyof FundIndexEligibilityDetails)[] = [\n 'performance_added_to_family_as_of',\n 'removed_from_family_after',\n 'family_pending_removal',\n 'accepting_new_investments',\n 'accepting_new_investments_index_eligibility',\n 'accepting_new_investments_last_confirmed_date',\n 'accepting_new_investments_confirmed_by',\n 'subscriptions_monthly',\n 'subscriptions_monthly_index_eligibility',\n 'subscriptions_monthly_last_confirmed_date',\n 'subscriptions_monthly_confirmed_by',\n 'subscriptions_advanced',\n 'subscriptions_advanced_index_eligibility',\n 'subscriptions_advanced_last_confirmed_date',\n 'subscriptions_advanced_confirmed_by',\n 'redemptions_quarterly',\n 'redemptions_quarterly_index_eligibility',\n 'redemptions_quarterly_last_confirmed_date',\n 'redemptions_quarterly_confirmed_by',\n 'redemptions_advanced',\n 'redemptions_advanced_index_eligibility',\n 'redemptions_advanced_last_confirmed_date',\n 'redemptions_advanced_confirmed_by',\n 'lockup',\n 'lockup_index_eligibility',\n 'lockup_last_confirmed_date',\n 'lockup_confirmed_by',\n 'gate_investor',\n 'gate_investor_index_eligibility',\n 'gate_investor_last_confirmed_date',\n 'gate_investor_confirmed_by',\n 'gate_fund',\n 'gate_fund_index_eligibility',\n 'gate_fund_last_confirmed_date',\n 'gate_fund_confirmed_by',\n 'eligibility_status',\n 'eligibility_status_reviewed_date',\n 'eligibility_status_reviewed_by',\n 'exclusion_reason',\n 'exclusion_reason_reviewed_date',\n 'exclusion_reason_reviewed_by',\n]\n","import { Col, Row } from 'antd'\nimport React from 'react'\nimport { FormItemDatePicker, FormItemSelect } from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../shared/components/RenderLabelForm'\nimport {\n FundIndexEligibilityDetails,\n FundIndexEligibilityDetailsKeys,\n FundIndexEligibilityDetailsResponse,\n INDEX_ELIGIBILITY_ENUM,\n WAIVE_ENUM,\n} from '../../../../shared/api/models/FundDetails'\nimport moment from 'moment'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\n\ntype CommonProps = {\n prefixName?: string\n name?: string\n label?: string\n children?: React.ReactNode\n}\n\nexport const IndexEligibilitySelect: React.FC = ({ prefixName, name, label = 'Index Eligibility' }) => {\n return (\n \n }\n labelAlign=\"left\"\n labelCol={23}\n wrapperCol={23}\n options={IndexEligibilityOptions}\n allowClear\n />\n \n )\n}\n\nexport const ConfirmedInfo: React.FC = ({ prefixName, name, children }) => {\n const { userOptions } = React.useContext(FundDetailDataContext)\n\n return (\n \n {children}\n \n \n }\n labelAlign=\"left\"\n name={name || `${prefixName}_last_confirmed_date`}\n labelCol={23}\n wrapperCol={23}\n picker=\"date\"\n allowClear\n />\n \n \n }\n labelAlign=\"left\"\n labelCol={23}\n wrapperCol={23}\n options={userOptions}\n allowClear\n />\n \n \n )\n}\n\nexport const FUND_INFO_NO_DATA_LABEL = '(Fund Info: No Data)'\ntype WaiveCriteriaFormProps = {\n name: string\n label: string\n fundInfo?: string\n}\nexport const WaiveCriteriaForm: React.FC = ({ name, label, fundInfo }) => {\n return (\n <>\n \n \n \n \n \n \n \n )\n}\n\nexport const ReviewerInfo: React.FC = ({ name, prefixName, children }) => {\n const { userOptions } = React.useContext(FundDetailDataContext)\n\n return (\n \n {children}\n \n }\n name={name || `${prefixName}_reviewed_date`}\n labelCol={10}\n wrapperCol={13}\n picker=\"date\"\n allowClear\n />\n \n \n }\n labelCol={10}\n wrapperCol={13}\n options={userOptions}\n allowClear\n />\n \n \n )\n}\n\nconst optionsToDic = (\n options: {\n value: string | number\n text: string\n disabled?: boolean | undefined\n }[],\n) => {\n return options.reduce((prev, cur) => {\n return {\n ...prev,\n [cur.value]: cur.text,\n }\n }, {} as Record)\n}\n\nexport const IndexEligibilityOptions = [\n {\n value: INDEX_ELIGIBILITY_ENUM.ELIGIBLE,\n text: 'Eligible',\n },\n {\n value: INDEX_ELIGIBILITY_ENUM.NOT_ELIGIBLE,\n text: 'Not Eligible',\n },\n {\n value: INDEX_ELIGIBILITY_ENUM.UNDER_REVIEW,\n text: 'Under Review',\n },\n]\nexport const IndexEligibilityOptionsDic = optionsToDic(IndexEligibilityOptions)\n\nexport const MonthlyOptions = [\n {\n value: 'Daily',\n text: 'Daily',\n },\n {\n value: 'Weekly',\n text: 'Weekly',\n },\n {\n value: 'Semi-Monthly',\n text: 'Semi-Monthly',\n },\n {\n value: 'Monthly',\n text: 'Monthly',\n },\n]\nexport const MonthlyOptionsDic = optionsToDic(MonthlyOptions)\n\nexport const QuarterlyOptions = [\n ...MonthlyOptions,\n {\n value: 'Bi-Monthly',\n text: 'Bi-Monthly',\n },\n {\n value: 'Quarterly',\n text: 'Quarterly',\n },\n]\nexport const QuarterlyOptionsDic = optionsToDic(QuarterlyOptions)\n\nexport const WaiveOptions = [\n {\n value: WAIVE_ENUM.WILLING_TO_WAIVE,\n text: 'Willing to Waive',\n },\n {\n value: WAIVE_ENUM.NOT_WILLING_TO_WAIVE,\n text: 'Not Willing to Waive',\n },\n {\n value: WAIVE_ENUM.NOT_RESPONDED,\n text: 'Not Responded',\n },\n]\nexport const WaiveOptionsDic = optionsToDic(WaiveOptions)\n\nexport const ExclusionReasonOptions = [\n {\n value: 'Due Diligence',\n text: 'Due Diligence',\n },\n {\n value: 'Firm concentration limit',\n text: 'Firm concentration limit',\n },\n {\n value: 'Redundant fund',\n text: 'Redundant fund',\n },\n {\n value: 'Other',\n text: 'Other',\n },\n]\nexport const ExclusionReasonOptionsDic = optionsToDic(ExclusionReasonOptions)\n\nexport const SubscriptionDayTypeDic: Record = {\n '0': '',\n '1': 'Business',\n '2': 'Calendar',\n}\n\nexport const transformFundIndexEligibilityDetailDataToSubmit = (input: any) => {\n const output = {\n fund_id: input.fund_id,\n index_family_id: input.index_family_id,\n } as FundIndexEligibilityDetails\n // fill undefined with null\n FundIndexEligibilityDetailsKeys.map((key) => {\n if (typeof input[key] === 'undefined') {\n // @ts-ignore\n output[key] = undefined\n return\n }\n if (input[key] === null || input[key] === '') {\n // @ts-ignore\n output[key] = null\n return\n }\n let value = input[key]\n if (key === 'accepting_new_investments') {\n value = value === 'yes' ? true : false\n } else if (key === 'performance_added_to_family_as_of' || key === 'removed_from_family_after') {\n value = moment(value as string).format('YYYY-MM')\n } else if (key.includes('_last_confirmed_date') || key.includes('_reviewed_date')) {\n value = moment(value as string).format('YYYY-MM-DD')\n } else if (key === 'subscriptions_advanced' || key === 'redemptions_advanced') {\n value = Number(value)\n }\n // @ts-ignore\n output[key] = value\n })\n\n return output\n}\n\nexport const transformResponseToDataForm = (input: FundIndexEligibilityDetailsResponse) => {\n const output: Record = {\n fund_id: input.fund_id,\n index_family_id: input.index_family_id,\n }\n // skip\n FundIndexEligibilityDetailsKeys.map((key) => {\n if (input[key] === null || typeof input[key] === 'undefined') {\n // @ts-ignore\n output[key] = undefined\n return\n }\n let value: any = input[key]\n if (key === 'accepting_new_investments') {\n value = value === true ? 'yes' : 'no'\n } else if (key === 'performance_added_to_family_as_of' || key === 'removed_from_family_after') {\n value = moment(parsedDateFormat(value as string), 'YYYY-MM')\n } else if (key.includes('_last_confirmed_date') || key.includes('_reviewed_date')) {\n value = moment(value as string)\n }\n // @ts-ignore\n output[key] = value\n })\n return output\n}\n\nexport const parsedDateFormat = (dateString: string) => {\n if (dateString.length === 7 && dateString[4] === '0') {\n return `${dateString.slice(0, 4)}-${dateString.slice(5, 7)}`\n }\n return dateString\n}\n\nexport const displayFundIndexEligibilitySelectedOption = (key: string, value?: string | number | boolean | null) => {\n if (key === 'accepting_new_investments') {\n return value === true ? 'Yes' : 'No'\n }\n if (key === 'subscriptions_monthly' && typeof value === 'string') {\n return MonthlyOptionsDic[value]\n }\n if (key === 'redemptions_quarterly' && typeof value === 'string') {\n return QuarterlyOptionsDic[value]\n }\n if ((key === 'lockup' || key === 'gate_investor' || key === 'gate_fund') && typeof value === 'string') {\n return WaiveOptionsDic[value]\n }\n if ((key === 'eligibility_status' || key.includes('_index_eligibility')) && typeof value === 'string') {\n return IndexEligibilityOptionsDic[value]\n }\n if (key === 'exclusion_reason' && typeof value === 'string') {\n return ExclusionReasonOptionsDic[value]\n }\n return value\n}\n","import { Col, Modal, Row, Spin, Tabs } from 'antd'\nimport Form from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport {\n FormItemCheckBox,\n FormItemDatePicker,\n FormItemInputNumber,\n FormItemSelect,\n} from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../shared/components/RenderLabelForm'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { IndexManagerType } from '../../../../shared/api/models/IndexManager'\nimport { useForm } from 'antd/lib/form/util'\n\nimport {\n ConfirmedInfo,\n ExclusionReasonOptions,\n FUND_INFO_NO_DATA_LABEL,\n IndexEligibilityOptions,\n MonthlyOptions,\n QuarterlyOptions,\n ReviewerInfo,\n SubscriptionDayTypeDic,\n WaiveCriteriaForm,\n transformResponseToDataForm,\n} from './utils'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport { FundIndexEligibilityDetailsResponse } from '../../../../shared/api/models/FundDetails'\nimport { CloseCircleFilled } from '@ant-design/icons'\n\ntype Props = {\n indexElgibleManager: IndexManagerType[]\n}\nexport const FundIndexEligibilityDetailsForm: React.FC = ({ indexElgibleManager }) => {\n const [showConfirm, setShowConfirm] = React.useState(false)\n const [activeKey, setActiveKey] = React.useState()\n const [tempKey, setTempKey] = React.useState()\n\n const { fundIndexEligibilityDetailChange, setFundIndexEligibilityDetailChange } = React.useContext(\n FundDetailDataContext,\n )\n\n React.useEffect(() => {\n if (!indexElgibleManager.length) {\n return\n }\n setActiveKey(`${indexElgibleManager[0].id}`)\n }, [indexElgibleManager])\n\n const handleTabChange = (key: string) => {\n if (!fundIndexEligibilityDetailChange) {\n setActiveKey(key)\n setTempKey(key)\n return\n }\n setTempKey(key)\n setShowConfirm(true)\n }\n\n const handleOk = () => {\n setFundIndexEligibilityDetailChange(undefined)\n setActiveKey(tempKey)\n setShowConfirm(false)\n }\n\n const handleCancel = () => {\n setShowConfirm(false)\n }\n\n return (\n <>\n \n {indexElgibleManager.map((tabData) => {\n return (\n \n \n \n )\n })}\n \n \n \n

You have unsaved changes.

\n

The changes here should be saved or discarded before continue.

\n Select OK to discard the changes or Cancel to continue.\n
\n
\n \n )\n}\n\nconst TabWrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding-top: 1rem;\n padding-bottom: 1rem;\n`\n\ntype TabContentProps = {\n data: IndexManagerType\n isActive?: boolean\n}\nconst TabContent: React.FC = ({ data, isActive }) => {\n const [form] = useForm()\n\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const {\n dataFundDetail,\n setOriginalFundIndexEligibilityDetail,\n fundIndexEligibilityDetailChange,\n setFundIndexEligibilityDetailChange,\n } = React.useContext(FundDetailDataContext)\n\n const { invoke: getDetails, data: details, loading: loadingGetDetails } = useServiceState(\n APIService.fundDetailService.fetchFundIndexEligibilityDetails,\n )\n\n // set origin data\n React.useEffect(() => {\n if (!isActive) {\n return\n }\n const fundId: string | undefined = dataFundDetail?.fund_id\n if (!fundId) {\n setOriginalFundIndexEligibilityDetail(undefined)\n return\n }\n if (!details) {\n setOriginalFundIndexEligibilityDetail({\n fund_id: fundId,\n index_family_id: data.id,\n })\n return\n }\n const currentBody: Partial = transformResponseToDataForm({\n fund_id: fundId,\n index_family_id: data.id,\n ...details,\n })\n setOriginalFundIndexEligibilityDetail(currentBody)\n }, [details, isActive])\n // refetch form data if changed data reset\n React.useEffect(() => {\n const fundId: string | undefined = dataFundDetail?.fund_id\n if (!fundId || !data.id || fundIndexEligibilityDetailChange) {\n return\n }\n getDetails({\n fundId,\n indexFamilyId: data.id,\n })\n }, [fundIndexEligibilityDetailChange])\n // set form data after fetch\n React.useEffect(() => {\n if (loadingGetDetails) {\n return\n }\n if (!details) {\n form.resetFields()\n return\n }\n form.setFieldsValue(transformResponseToDataForm(details))\n }, [loadingGetDetails])\n\n /////////////////////////////////////////\n const subscriptionInfo = React.useMemo(() => {\n if (!dataFundDetail) {\n return FUND_INFO_NO_DATA_LABEL\n }\n\n const dayType = SubscriptionDayTypeDic[`${dataFundDetail.subscription_day_type}`]\n\n if (!dayType || !dataFundDetail.subscription_days) {\n return FUND_INFO_NO_DATA_LABEL\n }\n\n return `(Fund Info: ${dataFundDetail.subscription_days} ${dayType} days)`\n }, [dataFundDetail])\n //\n const equityRedemptionInfo = React.useMemo(() => {\n if (!dataFundDetail || !fundDataDropdown?.equity_redemption || !dataFundDetail.equity_redemption) {\n return FUND_INFO_NO_DATA_LABEL\n }\n\n const codeDescription = fundDataDropdown.equity_redemption.find(\n (op) => op.code_code === dataFundDetail.equity_redemption,\n )?.code_description\n\n return codeDescription ? `(Fund Info: ${codeDescription})` : FUND_INFO_NO_DATA_LABEL\n }, [dataFundDetail, fundDataDropdown?.equity_redemption])\n //\n const fundGateInfo = React.useMemo(() => {\n if (!dataFundDetail || !dataFundDetail.gate_fund || !fundDataDropdown) {\n return\n }\n\n return fundDataDropdown.gate_fund.find((op) => op.code_code === dataFundDetail.gate_fund)?.code_description\n }, [dataFundDetail, fundDataDropdown])\n //\n const fundInvestorInfo = React.useMemo(() => {\n if (!dataFundDetail || !dataFundDetail.gate_investor || !fundDataDropdown) {\n return\n }\n return fundDataDropdown.gate_investor.find((op) => op.code_code === dataFundDetail.gate_investor)?.code_description\n }, [dataFundDetail, fundDataDropdown])\n /////////////////////////////////////////\n return (\n \n {\n const convertObject = Object.keys(changedValues).reduce((acc, key) => {\n const curValue = changedValues[key]\n // check if it is a valid moment object\n if (curValue && typeof curValue === 'object' && curValue?._isAMomentObject && !curValue?._isValid) {\n return { ...acc, [key]: null }\n }\n return { ...acc, [key]: curValue !== undefined ? curValue : null }\n }, {})\n setFundIndexEligibilityDetailChange({\n ...fundIndexEligibilityDetailChange,\n ...convertObject,\n })\n }}\n >\n \n \n
\n }\n name={`performance_added_to_family_as_of`}\n labelCol={15}\n wrapperCol={8}\n picker=\"month\"\n allowClear\n />\n \n \n }\n name={`removed_from_family_after`}\n labelCol={15}\n wrapperCol={8}\n picker=\"month\"\n allowClear\n />\n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n }\n labelAlign=\"left\"\n labelCol={23}\n wrapperCol={23}\n placeholder=\"30 days or less\"\n min={0}\n max={30}\n allowClear\n />\n \n \n\n \n \n \n \n \n \n\n \n \n \n }\n labelAlign=\"left\"\n labelCol={23}\n wrapperCol={23}\n placeholder=\"90 days or less\"\n min={0}\n max={90}\n allowClear\n />\n \n \n\n \n \n \n\n \n \n \n }\n labelCol={10}\n wrapperCol={13}\n options={IndexEligibilityOptions}\n allowClear\n />\n \n \n\n \n \n \n \n \n \n \n \n \n )\n}\n","import { Col, Row, Spin } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownContext } from '../../../../shared/api/context/FundDetailDropdownContext'\nimport { DividerForm } from '../../../../shared/components/DividerForm'\nimport { FormItemInput, FormItemSelect } from '../../../../shared/components/FormItemComponents'\nimport { NextBackButton } from '../../../../shared/components/NextBackButton'\nimport { RenderLabelForm } from '../../../../shared/components/RenderLabelForm'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nimport { IndexManagerType } from '../../../../shared/api/models/IndexManager'\nimport { FundIndexEligibilityDetailsForm } from './FundIndexEligibilityDetailsForm'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n flex: 1;\n padding: 1rem;\n`\n\ntype Props = { form: FormInstance; dataListIndices?: IndexManagerType[]; loadingListIndices?: boolean }\nexport const Indices: React.FC = ({ form, dataListIndices, loadingListIndices }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const { setDataFundDetailChange, dataFundDetailChange } = React.useContext(FundDetailDataContext)\n\n const selectedStrategy = form.getFieldValue('strategy_code')\n const selectedAsiStrategy = form.getFieldValue('asi_strategy')\n\n const { invoke: getLegacyStrategy, data: dataLegacy } = useServiceState(\n APIService.fundDetailService.fetchLegacyStrategy,\n )\n\n const { invoke: getAsiStrategy, data: dataAsi } = useServiceState(APIService.fundDetailService.fetchAsiStrategy)\n\n React.useEffect(() => {\n getLegacyStrategy()\n getAsiStrategy()\n }, [getAsiStrategy, getLegacyStrategy])\n\n const optionSubstrategy = React.useMemo(() => {\n return selectedStrategy\n ? dataLegacy && dataLegacy.sub_strategies && dataLegacy.sub_strategies.length > 0\n ? dataLegacy.sub_strategies\n .filter((i) => i.strategy_code === form.getFieldValue('strategy_code'))\n .map((item) => ({\n value: item.sub_strategy_code,\n text: item.sub_strategy_name,\n }))\n : []\n : []\n }, [dataLegacy, form, selectedStrategy])\n\n const optionAsiSubstrategy = React.useMemo(() => {\n console.log({ selectedAsiStrategy, a: dataAsi && dataAsi.asi_sub_strategies })\n return selectedAsiStrategy\n ? dataAsi && dataAsi.asi_sub_strategies && dataAsi.asi_sub_strategies.length > 0\n ? dataAsi.asi_sub_strategies\n .filter((i) => i.asi_strategy_id === selectedAsiStrategy)\n .map((item) => ({\n value: item.id,\n text: item.name,\n }))\n : []\n : []\n }, [dataAsi, selectedAsiStrategy])\n\n const indexElgibleManager = React.useMemo(() => {\n if (!dataListIndices || !dataListIndices.length) {\n return []\n }\n\n return dataListIndices.filter((manager) => {\n return !!manager.index_eligibility\n })\n }, [dataListIndices])\n\n // effect to check legacy subStrategy based on current strategy\n React.useEffect(() => {\n if (dataFundDetailChange?.current && Object.keys(dataFundDetailChange?.current).includes('strategy_code')) {\n if (\n (selectedStrategy &&\n form.getFieldValue('sub_strategy_code') &&\n optionSubstrategy.length > 0 &&\n optionSubstrategy.findIndex((item) => item.value === form.getFieldValue('sub_strategy_code')) === -1) ||\n (!selectedStrategy && form.getFieldValue('sub_strategy_code'))\n ) {\n form.setFieldsValue({ sub_strategy_code: null })\n setDataFundDetailChange((prev) => ({ ...prev, sub_strategy_code: null }))\n }\n }\n }, [dataFundDetailChange, form, optionSubstrategy, selectedStrategy, setDataFundDetailChange])\n\n // effect to check asi legacy subStrategy based on current asi strategy\n React.useEffect(() => {\n if (dataFundDetailChange?.current && Object.keys(dataFundDetailChange?.current).includes('asi_strategy')) {\n if (\n (selectedAsiStrategy &&\n form.getFieldValue('asi_sub_strategy') &&\n optionAsiSubstrategy.length > 0 &&\n optionAsiSubstrategy.findIndex((item) => item.value === form.getFieldValue('asi_sub_strategy')) === -1) ||\n (!selectedAsiStrategy && form.getFieldValue('asi_sub_strategy'))\n ) {\n form.setFieldsValue({ asi_sub_strategy: null })\n setDataFundDetailChange((prev) => ({ ...prev, sub_strategy_code: null }))\n }\n }\n }, [dataFundDetailChange, form, optionAsiSubstrategy, selectedAsiStrategy, setDataFundDetailChange])\n\n return (\n \n \n \n \n }\n labelCol={8}\n wrapperCol={12}\n options={\n dataAsi?.asi_strategies && dataAsi.asi_strategies.length > 0\n ? dataAsi.asi_strategies.map((item) => ({\n value: item.id,\n text: item.name,\n }))\n : []\n }\n />\n \n \n }\n labelCol={8}\n wrapperCol={12}\n options={optionAsiSubstrategy}\n />\n \n \n \n \n }\n labelCol={8}\n wrapperCol={12}\n options={\n fundDataDropdown?.region_inv_focus && fundDataDropdown?.region_inv_focus.length > 0\n ? fundDataDropdown.region_inv_focus.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n disabled\n notConnected\n />\n \n \n }\n labelCol={8}\n wrapperCol={12}\n notConnected={true}\n disabled\n />\n \n \n \n \n }\n labelCol={8}\n wrapperCol={12}\n options={\n dataLegacy?.legacy_strategies && dataLegacy.legacy_strategies.length > 0\n ? dataLegacy.legacy_strategies.map((item) => ({\n value: item.strategy_code,\n text: item.strategy_name,\n }))\n : []\n }\n />\n \n\n \n }\n labelCol={8}\n wrapperCol={12}\n options={optionSubstrategy}\n />\n \n \n \n {loadingListIndices && }\n \n \n \n )\n}\n","import { Button, Checkbox, notification, Table } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../../shared/api'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailsUniverses } from '../../../../shared/api/models/FundDetails'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\nconst Flex = styled.div`\n flex: 1;\n display: flex;\n`\nconst StyledHeader = styled.div`\n display: flex;\n padding: 1rem 1.5rem;\n justify-content: space-between;\n align-items: center;\n`\ntype UniverseSelect = {\n universe_id: number\n is_in_universe: boolean\n is_active_in_universe: boolean\n}\ntype Props = {}\nexport const Universes: React.FC = () => {\n const { dataFundDetail } = React.useContext(FundDetailDataContext)\n const { invoke: getUniverses, data: dataUniverses, loading } = useServiceState(\n APIService.fundDetailService.fetchFundUniverses,\n )\n\n const [isEdited, setIsEdited] = React.useState(false)\n const [listUniverseSelected, setListUniverseSelected] = React.useState([])\n const [editedData, setEditedData] = React.useState([])\n const [loadingAssign, setLoadingAssign] = React.useState(false)\n\n React.useEffect(() => {\n dataFundDetail?.fund_id && getUniverses(dataFundDetail.fund_id)\n }, [getUniverses, dataFundDetail])\n\n const refetchUniverses = () => {\n dataFundDetail?.fund_id && getUniverses(dataFundDetail.fund_id)\n setListUniverseSelected([])\n }\n React.useEffect(() => {\n if (dataUniverses) {\n setEditedData(dataUniverses)\n }\n }, [dataUniverses])\n\n const getIsActive = (item: string) => {\n const selectedRow = editedData.find((i) => i.universe_id === parseInt(item))\n return selectedRow ? selectedRow.is_active_in_universe : false\n }\n const getIsInUniverse = (item: string) => {\n const selectedRow = editedData.find((i) => i.universe_id === parseInt(item))\n return selectedRow ? selectedRow.is_in_universe : false\n }\n\n const onSelectChange = (selectedRowKeys: string[]) => {\n setListUniverseSelected(\n selectedRowKeys.map((item) => ({\n universe_id: parseInt(item),\n is_active_in_universe: getIsActive(item),\n is_in_universe: getIsInUniverse(item),\n })),\n )\n setIsEdited(selectedRowKeys.length > 0)\n }\n\n const handleSubmit = () => {\n const universeSubmit = listUniverseSelected.map((item) => ({\n universe_id: item.universe_id,\n is_active_in_universe: getIsActive(item.universe_id.toString()),\n is_in_universe: getIsInUniverse(item.universe_id.toString()),\n }))\n setLoadingAssign(true)\n if (dataFundDetail?.fund_id) {\n APIService.fundDetailService\n .updateFundUniverses(dataFundDetail?.fund_id, { updates: universeSubmit })\n .then(() => {\n notification.success({\n message: `Updated successfully!`,\n })\n refetchUniverses()\n })\n .catch((err) => {\n notification.error({ message: `Failed to Update!` })\n })\n .finally(() => setLoadingAssign(false))\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Universe ID',\n dataIndex: 'universe_id',\n key: 'universe_id',\n sorter: (a, b) => {\n if (a.universe_id && b.universe_id) {\n return a.universe_id - b.universe_id\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Name',\n dataIndex: 'universe_name',\n key: 'universe_name',\n sorter: (a, b) => {\n if (a.universe_name && b.universe_name) {\n return a.universe_name.localeCompare(b.universe_name)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Description',\n dataIndex: 'universe_description',\n key: 'universe_description',\n sorter: (a, b) => {\n if (a.universe_description && b.universe_description) {\n return a.universe_description.localeCompare(b.universe_description)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Status',\n dataIndex: 'status_in_universe',\n key: 'status_in_universe',\n },\n {\n title: 'Is in Universe',\n dataIndex: 'is_in_universe',\n key: 'is_in_universe',\n render: (_, record) => (\n {\n const index = editedData.findIndex((item) => item.universe_id === record.universe_id)\n setEditedData([\n ...editedData.slice(0, index),\n { ...editedData[index], is_in_universe: e.target.checked },\n ...editedData.slice(index + 1, editedData.length),\n ])\n }}\n />\n ),\n },\n {\n title: 'Is Active',\n dataIndex: 'is_active_in_universe',\n key: 'is_active_in_universe',\n render: (_, record) => (\n {\n const index = editedData.findIndex((item) => item.universe_id === record.universe_id)\n setEditedData([\n ...editedData.slice(0, index),\n { ...editedData[index], is_active_in_universe: e.target.checked },\n ...editedData.slice(index + 1, editedData.length),\n ])\n }}\n />\n ),\n },\n ]\n\n return (\n \n \n
Fund in Universes
\n
\n \n Update\n \n \n
\n
\n \n {\n // return record.universe_id === 1 ? 'checked'\n // },\n onChange: (selectedRowKeys) => {\n onSelectChange(selectedRowKeys as string[])\n },\n }}\n dataSource={editedData}\n columns={columns}\n style={{ flex: 1 }}\n pagination={dataUniverses && dataUniverses.length > 10 ? undefined : false}\n loading={loading}\n />\n \n
\n )\n}\n","import { Space, Row, Col } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDropdownCodeType } from '../../../../shared/api/models/FundDetails'\nimport { MinorityType } from '../../../../shared/api/services/minority.service'\nimport { FormItemCheckBox, FormItemRadio } from '../../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../../shared/components/RenderLabelForm'\nimport { useWhyDidYouUpdate } from '../../../../hooks/useWhyDidYouUpdate'\n\ntype Props = {\n minorityTypes?: MinorityType[]\n form: FormInstance\n initialDataForm: any\n setDataFundDetailChange: any\n firmCountry: FundDropdownCodeType | undefined\n}\n\nconst Wrapper = styled.div`\n padding: 1rem;\n`\n\nconst WrapperMinority = styled.div`\n padding: 1rem;\n`\n\nconst FundDI: React.FC = ({ minorityTypes, form, initialDataForm, setDataFundDetailChange, firmCountry }) => {\n const isMinorityManagedFund = form.getFieldValue('is_minority_or_woman_managed_fund')\n const isFieldTouched = form.isFieldTouched('is_minority_or_woman_managed_fund')\n\n // effect to set all minority types when is_minority_or_woman_managed_fund is false\n React.useEffect(() => {\n if (!minorityTypes || !minorityTypes.length || isMinorityManagedFund || !isFieldTouched) {\n return\n }\n minorityTypes?.map((item) => {\n if (initialDataForm[`minority_type_${item.id}`] === false) {\n return\n }\n setDataFundDetailChange((prevState: any) => ({\n ...prevState,\n [`minority_type_${item.id}`]: false,\n }))\n form.setFieldsValue({ [`minority_type_${item.id}`]: false })\n })\n }, [form, isFieldTouched, isMinorityManagedFund, minorityTypes])\n\n return (\n \n \n \n
\n

Minority- or Woman-Managed Fund/Product

\n \n \n \n \n \n Applicable only to the management firm that is physically headquartered in{' '}\n {firmCountry === undefined ? '[Firm_country]' : firmCountry.code_description}\n \n \n \n \n \n \n Minority- or Woman-Managed: A hedge fund/alternative investment product for which the majority of\n investment decisions and/or risk-taking responsibilities are made by one or more minorities or women.\n \n \n \n \n \n }\n options={[\n {\n value: true,\n title: 'Yes',\n },\n {\n value: false,\n title: 'No',\n },\n ]}\n />\n \n \n \n {isMinorityManagedFund ? (\n \n \n If ‘Yes’, please check all that apply:\n \n \n ) : null}\n \n {isMinorityManagedFund ? (\n \n \n \n Type\n \n \n Description\n \n \n {minorityTypes?.map((item, index) => {\n return (\n \n \n \n \n {item.minority_description}\n \n )\n })}\n \n ) : null}\n \n \n )\n}\n\nexport default FundDI\n","import React, { useEffect } from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDataContext } from '../../../../shared/api/context/FundDetailDataContext'\nimport { FundFamilyTable, FundFamilyType } from '../../../../shared/components/FundFamilyTable'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../../../app/rootReducer'\nimport APIService from '../../../../shared/api'\nimport { useServiceState } from '../../../../shared/hooks/useServiceState'\n\nconst Flex = styled.div`\n flex: 1;\n display: flex;\n`\n\ntype Props = {}\nexport const FundFamily: React.FC = () => {\n const { dataFundDetail, loading, getFundDetail, fundDataDropdown } = React.useContext(FundDetailDataContext)\n\n const { strategies: strategyOptions, subStrategies: subStrategyOptions } = useSelector(\n (state: RootState) => state.appData,\n )\n const { invoke: getFundOfFirm, data: dataFundsFirm, loading: loadingFundOfFirms } = useServiceState(\n APIService.firmDetailService.fetchFundsOfFirm,\n )\n //\n useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getFundOfFirm(dataFundDetail.firm_id)\n }, [dataFundDetail])\n ///////////////////////\n // map fund family data\n ///////////////////////\n const fundFamilyData = React.useMemo(() => {\n if (!dataFundDetail || !dataFundsFirm || !fundDataDropdown || !strategyOptions || !subStrategyOptions) {\n return []\n }\n // get fund with the same fund family id\n const sameFamilyFunds = dataFundsFirm.filter((f) => {\n if (!dataFundDetail.fund_family_id) {\n return false\n }\n return (\n `${f.fund_id}` !== `${dataFundDetail.fund_id}` && `${f.fund_family_id}` === `${dataFundDetail.fund_family_id}`\n )\n })\n //\n const results = sameFamilyFunds.map((d) => {\n //\n const stategy_op = d.strategy_code ? strategyOptions.find((s) => s.strategy_code === d.strategy_code) : undefined\n const stategy_code = stategy_op?.strategy_name || ''\n //\n const sub_stategy_op = d.sub_strategy_code\n ? subStrategyOptions.find((s) => s.sub_strategy_code === d.sub_strategy_code)\n : undefined\n const sub_stategy_code = sub_stategy_op?.sub_strategy_name || ''\n //\n const region_inv_focus_op = d.region_inv_focus\n ? fundDataDropdown.region_inv_focus.find((s) => s.code_code === `${d.region_inv_focus}`)\n : undefined\n const region_inv_focus = region_inv_focus_op?.code_description || ''\n //\n const region_inv_focus_country_op = d.region_inv_focus_country\n ? fundDataDropdown.region_inv_focus_country.find((s) => s.code_code === `${d.region_inv_focus_country}`)\n : undefined\n const region_inv_focus_country = region_inv_focus_country_op?.code_description || ''\n //\n return {\n fund_id: d.fund_id,\n fund_name: d.fund_name,\n firm_id: d.firm_id,\n firm_name: d.firm_name,\n fund_family_id: d.fund_family_id,\n fund_family_code: d.fund_family_code || '',\n strategy_code: stategy_code,\n sub_strategy_code: sub_stategy_code,\n region_inv_focus,\n region_inv_focus_country,\n } as FundFamilyType\n })\n // get data from data fund detail\n const stategy_op = dataFundDetail.strategy_code_new\n ? strategyOptions.find((s) => s.strategy_code === dataFundDetail.strategy_code_new)\n : null\n const stategy_code = stategy_op?.strategy_name\n //\n const sub_stategy_op = dataFundDetail.sub_strategy_code_new\n ? subStrategyOptions.find((s) => s.sub_strategy_code === dataFundDetail.sub_strategy_code_new)\n : null\n const sub_stategy_code = sub_stategy_op?.sub_strategy_name\n //\n const region_inv_focus_op = dataFundDetail.region_inv_focus\n ? fundDataDropdown.region_inv_focus.find((s) => s.code_code === dataFundDetail.region_inv_focus)\n : null\n const region_inv_focus = region_inv_focus_op?.code_description\n //\n const region_inv_focus_country_op = dataFundDetail.region_inv_focus_country\n ? fundDataDropdown.region_inv_focus_country.find((s) => s.code_code === dataFundDetail.region_inv_focus_country)\n : null\n const region_inv_focus_country = region_inv_focus_country_op?.code_description\n //\n return [\n {\n fund_id: dataFundDetail.fund_id,\n fund_name: dataFundDetail.fund_name,\n firm_id: dataFundDetail.firm_id,\n firm_name: dataFundDetail.firm_name,\n fund_family_id: dataFundDetail.fund_family_id,\n fund_family_code: dataFundDetail.fund_family_code,\n strategy_code: stategy_code,\n sub_strategy_code: sub_stategy_code,\n region_inv_focus,\n region_inv_focus_country,\n } as FundFamilyType,\n ...results,\n ]\n }, [dataFundDetail, dataFundsFirm, strategyOptions, subStrategyOptions, fundDataDropdown])\n ///////////////////\n\n const handleRefetch = () => {\n getFundDetail()\n }\n\n return (\n \n \n \n )\n}\n","import { CheckCircleTwoTone, EditTwoTone } from '@ant-design/icons'\nimport { Card, Col, Empty, Form, notification, Row } from 'antd'\nimport { useForm } from 'antd/lib/form/util'\nimport moment from 'moment'\nimport React, { useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport {\n DUE_DILIGENCE_REQUEST_ENUM,\n FundDetailDataContext,\n PERFORMANCE_REQUEST_ENUM,\n} from '../../../shared/api/context/FundDetailDataContext'\nimport { FundDetailLabelSearchProvider } from '../../../shared/api/context/FundDetailLabelSearchContext'\nimport { FundDetails } from '../../../shared/api/models/FundDetails'\nimport { TrackingEventSource } from '../../../shared/api/services/event.service'\nimport { Colors } from '../../../shared/colors'\nimport FFPerfectScrollbar from '../../../shared/components/FFPerfectScrollbar'\nimport FundDetailsPreview from '../../../shared/components/FundDetailPreview/FundDetailPreview'\nimport { FundESGSection, MODE_ESG_VIEW } from '../../../shared/components/FundESGSection'\nimport { LoadingDetails } from '../../../shared/components/LoadingDetails'\nimport { TabContentWrapper } from '../../../shared/components/TabContentWrapper'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { LeftNavExFundEnum, SEARCH_FIELD_INDEX } from '../../../shared/SearchExFundLabel'\nimport { LeftNavFundEnum, renderSearchListFund } from '../../../shared/SearchFundLabel'\nimport { getMonthRange } from '../../../shared/utils/datetimeUtils'\nimport { fundAssetUpdated, fundNavUpdated, fundRORUpdated } from '../../../slice/appEventSlice'\nimport { updateTabTitle } from '../../../slice/appSettingsSlice'\nimport { ExFundDetailMain } from '../../ExternalDashboard/ExFundDetailMain'\nimport { FundBasicInformation } from './BasicInformation/FundBasicInformation'\nimport { DueDiligenceMain } from './DueDiligence/DueDiligenceMain'\nimport ExecutiveOrders from './ExecutiveOrders/ExecutiveOrders'\nimport ExportSetup from './ExportSetup/ExportSetup'\nimport { CardTitle } from './FundCardTitle'\nimport { FundInformationMain } from './FundInformation/FundInformationMain'\nimport { FundProperties } from './FundProperties/FundProperties'\nimport { FundPerformance } from './FundROR/FundPerformance'\nimport { DATE_FORMAT } from './FundROR/PerformanceUpdate'\nimport { HFRAMInfoMain } from './HFRAMInfo/HFRAMInfoMain'\nimport { Indices } from './Indices/Indices'\nimport { Universes } from './Universes/Universes'\nimport FundDI from './FundDI/FundDI'\nimport { transformFundIndexEligibilityDetailDataToSubmit } from './Indices/utils'\nimport { FundFamily } from './FundFamily/FundFamily'\nimport { useRouteMatch } from 'react-router-dom'\n\nconst StyledCard = styled(Card)`\n overflow: hidden;\n\n .ant-card-head {\n padding: 0 1rem;\n }\n\n .ant-card-head-title {\n padding: 0;\n }\n\n .ant-card-body {\n padding: 0;\n overflow: hidden;\n flex: 1;\n }\n\n .ant-card-head {\n border-bottom: 2px solid #f0f0f0 !important;\n }\n`\n\nconst StyledForm = styled(Form)`\n flex: 1;\n overflow: hidden;\n height: 100%;\n\n .ant-form-item {\n margin-bottom: 8px;\n }\n`\n\nconst StyledTabList = styled.div<{ active?: boolean }>`\n background: ${(props) => (props.active ? '#EDF6FF' : '#fff')};\n font-weight: ${(props) => (props.active ? 'bold' : 'none')};\n display: flex;\n flex: 1;\n align-items: center;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n border-top: none;\n padding: 1rem 0 1rem 3rem;\n\n :hover {\n cursor: pointer;\n }\n`\n\nconst TAB_LIST = [\n {\n id: LeftNavFundEnum.BASIC_INFO,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.PERFORMANCE,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.INFORMATION,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.EXPORT_SETUP,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.DUE_DILIGENCE,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.UNIVERSES,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.HFR_AM_INFO,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.FUND_ESG,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.FUND_DIVERSITY_INCLUSION,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.FUND_PROPERTIES,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.INDICES,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.EXECUTIVE_ORDERS,\n isEdited: false,\n },\n {\n id: LeftNavFundEnum.FUND_FAMILY,\n isEdited: false,\n },\n]\nexport const FUND_DATE_FIELDS = [\n 'inception_date',\n 'om_date',\n 'multi_manager_platform_reviewed_date',\n 'liquidated_at',\n 'last_audit_date',\n 'most_recent_review',\n 'hfri500_reviewed',\n 'added_to_db',\n]\nconst numberDateField = ['min_invest', 'add_invest', 'min_invest_indv']\nconst monthFormattedFields = ['added_to', 'removed_from', 'fund_assets_date', 'firm_assets_date']\n\ntype Props = {\n initialPath?: LeftNavFundEnum\n hyperlinkTable?: string\n isPreview?: boolean\n previewTab?: string\n}\n\nexport const FundDetailMain: React.FC = ({ initialPath, hyperlinkTable, isPreview, previewTab }) => {\n const [showPreview, setShowPreview] = React.useState(!!isPreview)\n useEffect(() => {\n setShowPreview(!!isPreview)\n }, [isPreview])\n\n const {\n dataFundDetail,\n refetch,\n loading,\n dataChangeChecklistMain,\n getDueDiligenceRequest,\n dataChangeLegalChecklist,\n dataChangeOldChecklist,\n dataChangeInvestor,\n dataLatestPerformance,\n performanceDataChange,\n setPerformanceDataChange,\n rorDataChange: RORDataChange,\n setRORDataChange,\n navDataChange: NAVDataChange,\n setNAVDataChange,\n getPerformanceRequest,\n setAssetDataChange,\n assetDataChange,\n dataFundDetailChange,\n setDataFundDetailChange,\n snapshot,\n clearSnapshot,\n distributionDataChange,\n setDistributionDataChange,\n viewMode,\n setViewMode,\n fundDataDropdown,\n originalFundIndexEligibilityDetail,\n fundIndexEligibilityDetailChange,\n setFundIndexEligibilityDetailChange,\n } = React.useContext(FundDetailDataContext)\n\n const [activeTab, setActiveTab] = React.useState(initialPath || LeftNavFundEnum.BASIC_INFO)\n const [activeExTab, setActiveExTab] = React.useState(LeftNavExFundEnum.FUND_OVERVIEW)\n const [optionFilter, setOptionFilter] = React.useState(renderSearchListFund)\n const [textFilterSearch, setTextFilterSearch] = React.useState('')\n const [loadingSubmitForm, setLoadingSubmitForm] = React.useState(false)\n\n const [isUpdateFund, setIsUpdateFund] = React.useState(false)\n\n const [listTab, setListTab] = React.useState(TAB_LIST)\n\n const dispatch = useDispatch()\n\n const [form] = useForm()\n\n const numberWithCommas = (x: string) => {\n return x.toString().replace(/\\B(?=(\\d{3})+(?!\\d))/g, ',')\n }\n\n const { invoke: getAllMinorityTypes, data: minorityTypes } = useServiceState(\n APIService.minorityService.fetchMinorityTypes,\n )\n\n const firmCountry = fundDataDropdown?.firm_contact_country.find(\n (item) => item.code_code === dataFundDetail?.firm_contact_country,\n )\n\n React.useEffect(() => {\n const contryCode = dataFundDetail?.firm_contact_country\n if (!contryCode) {\n return\n }\n getAllMinorityTypes(contryCode)\n }, [dataFundDetail?.firm_contact_country, getAllMinorityTypes])\n\n const { invoke: getFundMinority, data: dataFundMinority } = useServiceState(\n APIService.minorityService.fetchFundMinorityStatuses,\n )\n\n React.useEffect(() => {\n if (!dataFundDetail) {\n return\n }\n getFundMinority(dataFundDetail.fund_id)\n }, [dataFundDetail, getFundMinority])\n\n React.useEffect(() => {\n const fundMinorityStatuses = dataFundMinority?.fund_minority_statuses\n if (fundMinorityStatuses?.length) {\n fundMinorityStatuses?.map((item) => form.setFieldsValue({ [`minority_type_${item.minority_type}`]: item.status }))\n }\n }, [dataFundMinority, form])\n\n // change active tab if re-route\n const route = useRouteMatch<{ fundId: string; firmId: string; activeFundNav: string; activeFirmNav: string }>()\n React.useEffect(() => {\n if (initialPath && route.params.activeFundNav) {\n setActiveTab(initialPath)\n }\n }, [route])\n //\n React.useEffect(() => {\n if (initialPath) {\n setActiveTab(initialPath)\n }\n }, [initialPath])\n\n React.useEffect(() => {\n if (form && snapshot) {\n // @ts-ignore\n form.draft = snapshot\n form.setFieldsValue(snapshot)\n setIsUpdateFund(true)\n }\n }, [form, snapshot, setIsUpdateFund])\n\n const dataChangeRef = dataFundDetailChange?.current\n\n React.useEffect(() => {\n if (dataChangeRef) {\n Object.keys(dataChangeRef).map((item) => {\n const leftNav = renderSearchListFund.find((i) => i.key === item)?.leftNav\n const index = leftNav ? TAB_LIST.findIndex((tab) => tab.id === leftNav) : -1\n if (index > -1) {\n setListTab((prev) => {\n return [...prev.slice(0, index), { ...prev[index], isEdited: true }, ...prev.slice(index + 1, prev.length)]\n })\n }\n })\n }\n }, [dataChangeRef])\n\n const appSetting = useSelector((state: RootState) => state.appSettings)\n const fundDraft = appSetting.fundDraft.find((item) => item.id === dataFundDetail?.fund_id)\n const lastKey = fundDraft?._lastFieldChanged\n\n React.useEffect(() => {\n if (lastKey) {\n if (viewMode === 'external') {\n const activeNav = SEARCH_FIELD_INDEX.find((item) => item.key === lastKey)?.leftNav\n activeNav && setActiveExTab(activeNav)\n return\n }\n const activeNav = renderSearchListFund.find((item) => item.key === lastKey)?.leftNav\n activeNav && setActiveTab(activeNav)\n }\n }, [lastKey, viewMode])\n // Extra data updated\n React.useEffect(() => {\n if (\n (performanceDataChange && Object.keys(performanceDataChange).length > 0) ||\n RORDataChange.values ||\n distributionDataChange.values ||\n NAVDataChange.values ||\n assetDataChange.values ||\n fundIndexEligibilityDetailChange ||\n // dataFundDetailChange is a ref so value change will not trigger this effect\n Object.keys(dataFundDetailChange?.current || {}).length\n ) {\n setIsUpdateFund(true)\n } else if (dataChangeChecklistMain || dataChangeLegalChecklist || dataChangeOldChecklist || dataChangeInvestor) {\n setDataFundDetailChange((prevState) => ({\n ...prevState,\n }))\n setIsUpdateFund(true)\n } else {\n setIsUpdateFund(false)\n }\n }, [\n NAVDataChange.values,\n RORDataChange.values,\n assetDataChange.values,\n distributionDataChange.values,\n performanceDataChange,\n fundIndexEligibilityDetailChange,\n dataChangeChecklistMain,\n dataChangeInvestor,\n dataChangeLegalChecklist,\n dataChangeOldChecklist,\n dataFundDetailChange,\n setDataFundDetailChange,\n ])\n\n React.useEffect(() => {\n if (dataFundDetail) {\n dispatch(updateTabTitle({ tabName: dataFundDetail.fund_name || '', id: dataFundDetail.fund_id }))\n }\n }, [dataFundDetail, dispatch])\n\n const { invoke: getAllIndex, data: dataListIndices, loading: loadingListIndices } = useServiceState(\n APIService.indexManagerService.getAllIndexManager,\n )\n\n React.useEffect(() => {\n getAllIndex()\n }, [getAllIndex])\n\n // support fund index eligibility\n const findInitialValue = (id: number) => {\n if (!dataFundDetail?.hfr_indices) return undefined\n const foundIndex = dataFundDetail?.hfr_indices.find((item) => +item.id === +id)\n return foundIndex?.value\n }\n\n /////////////////////////////////\n const parsedDateFormat = (dateString: string) => {\n if (dateString.length === 7 && dateString[4] === '0') {\n return `${dateString.slice(0, 4)}-${dateString.slice(5, 7)}`\n }\n return dateString\n }\n\n const initialDataForm = React.useMemo(() => {\n if (!dataFundDetail) {\n return undefined\n }\n\n return {\n ...dataFundDetail,\n firm_assets_date: dataFundDetail.firm_assets_date\n ? moment(parsedDateFormat(dataFundDetail.firm_assets_date))\n : null,\n fund_assets_date: dataFundDetail.fund_assets_date\n ? moment(parsedDateFormat(dataFundDetail.fund_assets_date))\n : null,\n inception_date: dataFundDetail.inception_date ? moment(dataFundDetail.inception_date) : null,\n om_date: dataFundDetail.om_date ? moment(dataFundDetail.om_date) : null,\n multi_manager_platform_reviewed_date: dataFundDetail.multi_manager_platform_reviewed_date\n ? moment(dataFundDetail.multi_manager_platform_reviewed_date)\n : null,\n liquidated_at: dataFundDetail.liquidated_at ? moment(dataFundDetail.liquidated_at) : null,\n last_audit_date: dataFundDetail.last_audit_date ? moment(dataFundDetail.last_audit_date) : null,\n most_recent_review: dataFundDetail.most_recent_review ? moment(dataFundDetail.most_recent_review) : null,\n hfri500_reviewed: dataFundDetail.hfri500_reviewed ? moment(dataFundDetail.hfri500_reviewed) : null,\n added_to_hfri: dataFundDetail.added_to_hfri\n ? moment(parsedDateFormat(dataFundDetail.added_to_hfri), 'YYYY-MM')\n : null,\n removed_from_hfri: dataFundDetail.removed_from_hfri\n ? moment(parsedDateFormat(dataFundDetail.removed_from_hfri), 'YYYY-MM')\n : null,\n added_to_db: dataFundDetail.added_to_db ? moment(dataFundDetail.added_to_db) : null,\n min_invest: dataFundDetail.min_invest ? numberWithCommas(dataFundDetail.min_invest) : null,\n add_invest: dataFundDetail.add_invest ? numberWithCommas(dataFundDetail.add_invest) : null,\n min_invest_indv: dataFundDetail.min_invest_indv ? numberWithCommas(dataFundDetail.min_invest_indv) : null,\n is_lockup: dataFundDetail.is_lockup === '1' ? true : false,\n // not sure what is this? probably old attemd at implementing Index Eligibility\n ...dataListIndices\n ?.map((item) => {\n return item.id\n })\n .reduce((acc, key) => {\n return { ...acc, [key]: findInitialValue(key) }\n }, {}),\n ///////////////////////////////////////////////////////////////////////////////\n ...dataFundMinority?.fund_minority_statuses.reduce((acc, item) => {\n return {\n ...acc,\n [`minority_type_${item.minority_type}`]: item.status,\n }\n }, {}),\n }\n }, [dataFundDetail, dataListIndices, dataFundMinority])\n\n const validateLatestPerformance = () => {\n if (performanceDataChange && dataLatestPerformance && Object.keys(performanceDataChange).length > 0) {\n // get the latest updated date\n const latestRORData = performanceDataChange.rorChanges\n ? moment(performanceDataChange.rorChanges[performanceDataChange.rorChanges?.length - 1].yyyy_mm, DATE_FORMAT)\n : moment(new Date(1971))\n const latestNAVData = performanceDataChange.navChanges\n ? moment(performanceDataChange.navChanges[performanceDataChange.navChanges?.length - 1].yyyy_mm, DATE_FORMAT)\n : moment(new Date(1971))\n const latestAssetData = performanceDataChange.assetChanges\n ? moment(\n performanceDataChange.assetChanges[performanceDataChange.assetChanges?.length - 1].yyyy_mm,\n DATE_FORMAT,\n )\n : moment(new Date(1971))\n const latestUpdatedDate = moment.max([latestRORData, latestNAVData, latestAssetData])\n let isDataValid = true\n\n dataLatestPerformance.latest_ror &&\n getMonthRange(\n moment(dataLatestPerformance.latest_ror, DATE_FORMAT).add(1, 'month').format(DATE_FORMAT),\n latestUpdatedDate.format(DATE_FORMAT),\n ).forEach((rorMonth) => {\n if (!performanceDataChange.rorChanges?.some((item) => item.yyyy_mm === rorMonth)) {\n isDataValid = false\n return\n }\n })\n\n dataLatestPerformance.latest_asset &&\n getMonthRange(\n moment(dataLatestPerformance.latest_asset, DATE_FORMAT).add(1, 'month').format(DATE_FORMAT),\n latestUpdatedDate.format(DATE_FORMAT),\n ).forEach((rorMonth) => {\n if (!performanceDataChange.assetChanges?.some((item) => item.yyyy_mm === rorMonth)) {\n isDataValid = false\n return\n }\n })\n\n dataLatestPerformance.latest_nav &&\n getMonthRange(\n moment(dataLatestPerformance.latest_nav, DATE_FORMAT).add(1, 'month').format(DATE_FORMAT),\n latestUpdatedDate.format(DATE_FORMAT),\n ).forEach((rorMonth) => {\n if (!performanceDataChange.navChanges?.some((item) => item.yyyy_mm === rorMonth)) {\n isDataValid = false\n return\n }\n })\n\n if (!isDataValid) {\n notification.warn({ message: 'Please fill in the missing performance data!' })\n return false\n }\n }\n return true\n }\n\n const updateLatestPerformance = async () => {\n if (\n performanceDataChange &&\n dataLatestPerformance &&\n Object.keys(performanceDataChange).length > 0 &&\n dataFundDetail\n ) {\n try {\n setLoadingSubmitForm(true)\n await APIService.fundService.updateLatestPerformance(dataFundDetail.fund_id, {\n rors: performanceDataChange.rorChanges,\n navs: performanceDataChange.navChanges,\n assets: performanceDataChange.assetChanges,\n })\n setIsUpdateFund(false)\n notification.success({ message: 'Quick Performance Updated' })\n setPerformanceDataChange(undefined)\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n if (performanceDataChange.rorChanges) {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ROR)\n dispatch(fundRORUpdated())\n }\n if (performanceDataChange.navChanges) {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.NAV)\n dispatch(fundNavUpdated())\n }\n if (performanceDataChange.assetChanges) {\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ASSET)\n dispatch(fundAssetUpdated())\n }\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n return true\n }\n }\n }\n\n const handleSubmit = async () => {\n if (!validateLatestPerformance()) {\n return\n }\n await updateLatestPerformance()\n\n if (dataChangeChecklistMain && dataFundDetail?.firm_id) {\n setLoadingSubmitForm(true)\n APIService.firmDetailService\n .updateChecklistMain(dataFundDetail.firm_id, { updates: dataChangeChecklistMain })\n .then(() => {\n notification.success({ message: 'Check List Main Updated!' })\n getDueDiligenceRequest(DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_MAIN)\n setIsUpdateFund(false)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Check List Main Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n }\n\n if (dataChangeLegalChecklist && dataFundDetail?.firm_id) {\n setLoadingSubmitForm(true)\n APIService.firmDetailService\n .updateLegalChecklist(dataFundDetail.firm_id, { updates: dataChangeLegalChecklist })\n .then(() => {\n notification.success({ message: 'Legal Documents Updated!' })\n getDueDiligenceRequest(DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_LEGAL_CHECKLIST)\n setIsUpdateFund(false)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Legal Documents Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n }\n\n if (dataChangeOldChecklist && dataFundDetail?.firm_id) {\n setLoadingSubmitForm(true)\n APIService.firmDetailService\n .updateOldChecklist(dataFundDetail.firm_id, { updates: dataChangeOldChecklist })\n .then(() => {\n notification.success({ message: 'Old Background Checks Updated!' })\n getDueDiligenceRequest(DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_OLD_CHECKLIST)\n setIsUpdateFund(false)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Old Background Checks Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n }\n if (dataChangeInvestor && dataFundDetail?.fund_id) {\n setLoadingSubmitForm(true)\n APIService.fundDetailService\n .updateDueDiligenceInvestor(dataFundDetail.fund_id, dataChangeInvestor)\n .then(() => {\n getDueDiligenceRequest(DUE_DILIGENCE_REQUEST_ENUM.DUE_DILIGENCE_INVESTOR)\n setIsUpdateFund(false)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Investor Opinion Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n }\n if (distributionDataChange.values && dataFundDetail) {\n try {\n setLoadingSubmitForm(true)\n distributionDataChange &&\n (await APIService.fundDetailService.updateFundDistributions(\n dataFundDetail.fund_id,\n JSON.parse(JSON.stringify(distributionDataChange)),\n ))\n // refetch data\n notification.success({ message: 'Distribution Updated' })\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.DISTRIBUTION)\n setDistributionDataChange({ values: undefined })\n setIsUpdateFund(false)\n } catch (error) {\n console.log(error.response)\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n\n if (RORDataChange.values && dataFundDetail) {\n try {\n setLoadingSubmitForm(true)\n RORDataChange &&\n (await APIService.fundDetailService.updateFundROR(\n dataFundDetail.fund_id,\n JSON.parse(JSON.stringify(RORDataChange)),\n ))\n // refetch data\n\n notification.success({ message: 'ROR Updated' })\n setRORDataChange({ values: undefined })\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ROR)\n dispatch(fundRORUpdated())\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n setIsUpdateFund(false)\n } catch (error) {\n console.log(error.response)\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n\n if (NAVDataChange.values && dataFundDetail) {\n try {\n setLoadingSubmitForm(true)\n NAVDataChange &&\n (await APIService.fundDetailService.updateNAVROR(\n dataFundDetail.fund_id,\n JSON.parse(JSON.stringify(NAVDataChange)),\n ))\n // refetch data\n notification.success({ message: 'NAV Updated' })\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.NAV)\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n setNAVDataChange({ values: undefined })\n dispatch(fundNavUpdated())\n setIsUpdateFund(false)\n } catch (error) {\n console.log(error.response)\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n\n if (assetDataChange.values && dataFundDetail) {\n try {\n setLoadingSubmitForm(true)\n assetDataChange &&\n (await APIService.fundDetailService.updateAssetROR(\n dataFundDetail.fund_id,\n JSON.parse(JSON.stringify(assetDataChange)),\n ))\n // refetch data\n notification.success({ message: 'Assets Updated' })\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.ASSET)\n getPerformanceRequest(PERFORMANCE_REQUEST_ENUM.LATEST_PERFORMANCE)\n setAssetDataChange({ values: undefined })\n dispatch(fundAssetUpdated())\n setIsUpdateFund(false)\n } catch (error) {\n console.log(error.response)\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n\n if (fundIndexEligibilityDetailChange && dataFundDetail) {\n try {\n setLoadingSubmitForm(true)\n if (!originalFundIndexEligibilityDetail) {\n throw new Error('Missing Fund Index Detail data')\n }\n const { fund_id, index_family_id } = originalFundIndexEligibilityDetail\n const { ...body } = transformFundIndexEligibilityDetailDataToSubmit({\n // ...originalFundIndexEligibilityDetail,\n ...fundIndexEligibilityDetailChange,\n })\n if (!fund_id || !index_family_id) {\n throw new Error('Missing Fund Index Detail Id')\n }\n await APIService.fundDetailService.updateFundIndexEligibilityDetails({\n fundId: fund_id,\n indexFamilyId: index_family_id,\n body,\n })\n // refetch data\n notification.success({ message: 'Fund Index Eligibility Detail Updated' })\n setFundIndexEligibilityDetailChange(undefined)\n setIsUpdateFund(false)\n } catch (error) {\n console.log(error)\n notification.error({ message: error?.response?.statusText || error?.message || 'Error' })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n\n if (initialDataForm && dataFundDetailChange) {\n const fieldChange = Object.keys(dataFundDetailChange.current)\n .filter(\n (key) => dataFundDetailChange.current[key as keyof FundDetails] !== initialDataForm[key as keyof FundDetails],\n )\n .reduce(\n (accum, key) => ({\n ...accum,\n [key]: dataFundDetailChange.current[key as keyof FundDetails],\n }),\n {},\n )\n\n // Update minority types\n const dataMinority = Object.entries(fieldChange).filter((item) => item[0].includes('minority_type_'))\n\n // extract minority types out of field changes\n const dataChange = Object.entries(fieldChange)\n .filter((item) => !item[0].includes('minority_type_'))\n .reduce((acc, item) => {\n return {\n ...acc,\n [item[0]]: item[1],\n }\n }, {})\n\n const minorityChange = {\n updates: dataMinority.map((item) => {\n return {\n minority_type: +item[0].replace('minority_type_', ''),\n status: item[1] as boolean,\n }\n }),\n }\n if (minorityChange && minorityChange.updates.length > 0 && dataFundDetail) {\n APIService.minorityService\n .updateFundMinorityStatuses(dataFundDetail.fund_id, minorityChange)\n .then(() => {\n notification.success({ message: 'Diversity & Inclusion Updated!' })\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n }\n\n // update indices\n const indicesChange =\n dataListIndices &&\n Object.keys(dataFundDetailChange.current)\n .filter((key) => dataListIndices.findIndex((item) => item.id.toString() === key) > -1)\n .reduce((acc, key) => {\n return [\n ...acc,\n {\n index_id: parseInt(key),\n value: !!dataFundDetailChange.current[key as keyof FundDetails],\n },\n ]\n }, [] as { index_id: number; value: boolean }[])\n //\n if (indicesChange && indicesChange.length > 0) {\n setLoadingSubmitForm(true)\n APIService.fundDetailService\n .updateFundIndices(initialDataForm.fund_id, { updates: indicesChange })\n .then(() => {\n notification.success({ message: 'Indices Updated!' })\n setIsUpdateFund(false)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Indices Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n }\n //\n const dataUpload: Partial = form.getFieldValue('is_liquidated')\n ? Object.keys(dataChange)\n .filter((key) => dataListIndices?.findIndex((item) => item.id.toString() === key) === -1)\n .reduce(\n (accum, key) => ({\n ...accum,\n [key]: dataFundDetailChange.current[key as keyof FundDetails],\n }),\n {},\n )\n : Object.keys(dataChange)\n .filter(\n (key) =>\n key !== 'liquidated_at' && dataListIndices?.findIndex((item) => item.id.toString() === key) === -1,\n )\n .reduce(\n (accum, key) => ({\n ...accum,\n\n [key]: dataFundDetailChange.current[key as keyof FundDetails],\n }),\n {},\n )\n //\n const dataFinalUpload: Partial = Object.keys(dataUpload).reduce((acc, key) => {\n const value = dataUpload[key as keyof Partial]\n if (key === 'is_lockup') {\n return value ? { ...acc, [key]: '1' } : { ...acc, [key]: '2' }\n }\n if (FUND_DATE_FIELDS.includes(key) && value) {\n return { ...acc, [key]: moment(value as string).format('YYYY-MM-DD') }\n }\n\n if (containsStr(key, monthFormattedFields) && value) {\n return { ...acc, [key]: moment(value as string).format('YYYY-MM') }\n }\n return { ...acc, [key]: dataUpload[key as keyof FundDetails] }\n }, {})\n //\n if (initialDataForm.fund_id && Object.keys(dataFinalUpload).length > 0) {\n setLoadingSubmitForm(true)\n APIService.fundDetailService\n .updateFundBasicInfo(initialDataForm.fund_id, dataFinalUpload)\n .then(() => {\n notification.success({ message: 'Fund Updated!' })\n refetch()\n setDataFundDetailChange({})\n clearSnapshot()\n setIsUpdateFund(false)\n setListTab(TAB_LIST)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n } else {\n setDataFundDetailChange({})\n refetch()\n clearSnapshot()\n setIsUpdateFund(false)\n }\n }\n }\n\n const hyperlink = React.useMemo(() => {\n if (hyperlinkTable) {\n return hyperlinkTable\n }\n if (!dataFundDetail) {\n return\n }\n const fundId = dataFundDetail.fund_id\n return appSetting.fundFirmTabs.tabList.find((item) => item.id === fundId)?.hyperlinkTable\n }, [appSetting.fundFirmTabs.tabList, dataFundDetail, hyperlinkTable])\n\n const renderTabContent = (activeTab: LeftNavFundEnum) => {\n if (!dataFundDetail) {\n return null\n }\n switch (activeTab) {\n case LeftNavFundEnum.BASIC_INFO:\n return \n case LeftNavFundEnum.PERFORMANCE:\n return \n case LeftNavFundEnum.INFORMATION:\n return \n case LeftNavFundEnum.EXPORT_SETUP:\n return \n case LeftNavFundEnum.DUE_DILIGENCE:\n return \n case LeftNavFundEnum.UNIVERSES:\n return \n case LeftNavFundEnum.FUND_DIVERSITY_INCLUSION:\n return (\n \n )\n case LeftNavFundEnum.FUND_ESG:\n return \n case LeftNavFundEnum.FUND_PROPERTIES:\n return \n case LeftNavFundEnum.HFR_AM_INFO:\n return \n case LeftNavFundEnum.INDICES:\n return \n case LeftNavFundEnum.EXECUTIVE_ORDERS:\n return (\n \n )\n case LeftNavFundEnum.FUND_FAMILY:\n return \n default:\n break\n }\n }\n\n return (\n <>\n {viewMode === 'external' ? (\n \n ) : (\n \n {dataFundDetail && (\n {\n // update is udpate status for dataFundDetailChange\n setIsUpdateFund(true)\n }}\n onValuesChange={(changedValues) => {\n const convertObject = Object.keys(changedValues).reduce((acc, key) => {\n if (numberDateField.includes(key)) {\n return {\n ...acc,\n [key]: changedValues[key] ? parseInt(changedValues[key].replace(/,0/g, '0')) : null,\n }\n }\n return { ...acc, [key]: changedValues[key] !== undefined ? changedValues[key] : null }\n }, {})\n setDataFundDetailChange(\n { ...(dataFundDetailChange?.current || {}), ...convertObject },\n Object.keys(changedValues)[0],\n )\n }}\n >\n {\n setIsUpdateFund(false)\n clearSnapshot()\n refetch()\n form.resetFields()\n setListTab(TAB_LIST)\n setDataFundDetailChange({})\n }}\n setTextFilterSearch={setTextFilterSearch}\n setActiveTab={setActiveTab}\n activeTab={activeTab}\n loadingSubmitForm={loadingSubmitForm}\n isPreviewing={showPreview}\n setViewMode={setViewMode}\n onPreview={() => setShowPreview((prev) => !prev)}\n isUpdateFund={isUpdateFund}\n />\n }\n size=\"default\"\n style={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column' }}\n >\n \n {showPreview ? (\n \n ) : (\n <>\n \n \n {listTab.map((item) => {\n const existTab = optionFilter.findIndex((i) => i.leftNav === item.id)\n if (existTab === -1 && textFilterSearch !== '') {\n return null\n }\n return (\n {\n setActiveTab(item.id)\n }}\n active={activeTab === item.id}\n >\n
\n \n
\n {item.id} {item.isEdited && }\n \n )\n })}\n
\n \n \n \n \n {optionFilter.length === 0 ? (\n \n \n \n ) : (\n renderTabContent(activeTab)\n )}\n \n \n \n \n )}\n \n \n \n )}\n {loading && }\n \n )}\n \n )\n}\n\nfunction containsStr(inputString: string, stringArray: string[]) {\n for (let i = 0; i < stringArray.length; i++) {\n if (inputString.includes(stringArray[i])) {\n return true\n }\n }\n return false\n}\n","import React, { Dispatch, SetStateAction } from 'react'\nimport APIService from '..'\nimport { UpdateRORType } from '../../components/DataSheet'\nimport { useServiceState } from '../../hooks/useServiceState'\nimport { FundDropdownType } from '../models/FundDetails'\nexport enum DUE_DILIGENCE_REQUEST_ENUM {\n DUE_DILIGENCE_MAIN,\n DUE_DILIGENCE_LEGAL_CHECKLIST,\n DUE_DILIGENCE_OLD_CHECKLIST,\n DUE_DILIGENCE_INVESTOR,\n}\n\nexport enum PERFORMANCE_REQUEST_ENUM {\n ROR,\n ASSET,\n NAV,\n}\n\nexport type ExNewFundContextType = {\n //ROR\n setRORDataChange: Dispatch>\n rorDataChange: UpdateRORType\n //Asset\n setAssetDataChange: Dispatch>\n assetDataChange: UpdateRORType\n //Nav\n setNAVDataChange: Dispatch>\n navDataChange: UpdateRORType\n fundDataDropdown?: FundDropdownType\n}\n\nconst defaultValue: ExNewFundContextType = {\n //ROR\n setRORDataChange: () => undefined,\n rorDataChange: { values: undefined },\n //Asset\n setAssetDataChange: () => undefined,\n assetDataChange: { values: undefined },\n //NAV\n setNAVDataChange: () => undefined,\n navDataChange: { values: undefined },\n fundDataDropdown: undefined,\n}\n\nexport const ExNewFundContext = React.createContext(defaultValue)\nexport const ExNewFundProvider: React.FC = ({ children }) => {\n const [rorDataChange, setRORDataChange] = React.useState({ values: undefined })\n const [assetDataChange, setAssetDataChange] = React.useState({ values: undefined })\n const [navDataChange, setNAVDataChange] = React.useState({ values: undefined })\n\n const { invoke: getDataDropdown, data: fundDataDropdown } = useServiceState(\n APIService.fundDetailService.fetchDataDropdown,\n )\n\n React.useEffect(() => {\n getDataDropdown()\n }, [getDataDropdown])\n\n const value = {\n //ROR\n\n rorDataChange,\n setRORDataChange,\n //Asset\n setAssetDataChange,\n assetDataChange,\n\n //Nav\n setNAVDataChange,\n navDataChange,\n fundDataDropdown,\n }\n return {children}\n}\n","import { Spin, Tabs, Tooltip } from 'antd'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RouteComponentProps, useLocation } from 'react-router-dom'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport { FirmDetailDataProvider } from '../../shared/api/context/FirmDetailDataContext'\nimport { FundDetailDataProvider } from '../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownProvider } from '../../shared/api/context/FundDetailDropdownContext'\nimport { Colors } from '../../shared/colors'\nimport MainLayout from '../../shared/components/MainLayout'\nimport { DraftManagerProvider } from '../../shared/DraftManager'\nimport { history } from '../../shared/history'\nimport { LeftNavFirmEnum } from '../../shared/SearchFirmLabel'\nimport { LeftNavFundEnum } from '../../shared/SearchFundLabel'\nimport { addTabs, DASHBOARD_KEY, FundFirmTypeEnum, removeTabs, updateActiveTabs } from '../../slice/appSettingsSlice'\nimport DashboardTab from './DashboardTab/DashboardTab'\nimport { FIRM_DATE_FIELDS, FirmDetailMain } from './FirmDetail/FirmDetailMain'\nimport { FUND_DATE_FIELDS, FundDetailMain } from './FundDetail/FundDetailMain'\nimport { LeftNavExFundEnum } from '../../shared/SearchExFundLabel'\nimport { LeftNavExFirmEnum } from '../../shared/SearchExFirmLabel'\n\nconst { TabPane } = Tabs\n\nconst SymbolTab = styled.div`\n background: #1890ff;\n color: #fff;\n padding: 0 4px;\n margin-right: 2px;\n border-radius: 3px;\n font-size: 12px;\n align-self: center;\n`\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n overflow: hidden;\n\n .ant-tabs-nav {\n margin-bottom: 0%;\n }\n\n .ant-tabs-content-holder {\n overflow: hidden;\n height: 100%;\n }\n\n .ant-tabs-content {\n flex-grow: 1;\n background: white;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n height: 100%;\n\n .ant-tabs-tabpane-active {\n height: 100%;\n display: flex;\n }\n\n .ant-card-head {\n min-height: auto;\n }\n }\n`\n\nconst Dashboard: React.FC> = ({ match }) => {\n const { params, path } = match\n const { search } = useLocation()\n\n const { fundFirmTabs } = useSelector((state: RootState) => state.appSettings)\n\n const dispatch = useDispatch()\n\n React.useEffect(() => {\n // effect to resolve tabs from url\n const fundIdFromUrl = params.fundId\n const firmIdFromUrl = params.firmId\n const activeFundNav = params.activeFundNav\n const activeFirmNav = params.activeFirmNav\n const query = new URLSearchParams(search)\n const isPreview = query.get('preview') === '1'\n const previewTab = query.get('preview_tab') || undefined\n\n const selectActiveNav = (value: string | undefined, type: FundFirmTypeEnum) => {\n if (type === FundFirmTypeEnum.FUNDS) {\n if (value === 'fund-family') {\n return LeftNavExFundEnum.FUND_FAMILY\n }\n return undefined\n }\n\n if (type === FundFirmTypeEnum.FIRMS_IN_FUNDS) {\n if (value === 'fund-family') {\n return LeftNavExFirmEnum.FUND_FAMILY\n }\n return undefined\n }\n }\n\n if (fundIdFromUrl) {\n dispatch(\n addTabs({\n id: fundIdFromUrl,\n type: FundFirmTypeEnum.FUNDS,\n isPreview,\n previewTab,\n activeNav: activeFundNav ? selectActiveNav(activeFundNav, FundFirmTypeEnum.FUNDS) : undefined,\n }),\n )\n history.push('/')\n }\n if (firmIdFromUrl) {\n dispatch(\n addTabs({\n id: firmIdFromUrl,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n activeNav: activeFirmNav ? selectActiveNav(activeFirmNav, FundFirmTypeEnum.FIRMS_IN_FUNDS) : undefined,\n }),\n )\n history.push('/')\n }\n }, [dispatch, fundFirmTabs.activeTab, fundFirmTabs.tabList, params.firmId, params.fundId, path])\n\n return (\n \n \n \n {\n if (key === DASHBOARD_KEY) {\n dispatch(updateActiveTabs(DASHBOARD_KEY))\n }\n // history.push(key === DASHBOARD_KEY ? '/' : `/funds/${key}`)\n dispatch(updateActiveTabs(key))\n }}\n activeKey={fundFirmTabs.activeTab}\n onEdit={(targetKey, action) => {\n if (action === 'remove') {\n dispatch(removeTabs(targetKey.toString()))\n }\n }}\n >\n \n \n \n {fundFirmTabs &&\n fundFirmTabs.tabList.map((item) => {\n return (\n } key={item.id} closable={true}>\n {item.type === FundFirmTypeEnum.FUNDS ? (\n \n \n \n ) : (\n \n \n \n )}\n \n )\n })}\n \n \n \n \n )\n}\n\nexport default Dashboard\ntype TitleProps = {\n name: string | undefined\n type: FundFirmTypeEnum\n}\nexport const RenderTitleTabPane: React.FC = ({ name, type }) => {\n if (!name) {\n return \n }\n return (\n
\n {type === FundFirmTypeEnum.FIRMS_IN_FUNDS && M}\n {name.length > 50 ? (\n \n
{name.slice(0, 50)}...
\n
\n ) : (\n name\n )}\n
\n )\n}\n","import { Card, Divider } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { ExFundDetails } from '../../shared/api/models/ExFundDetails'\nimport { FUND_STATUS_SHOW_PERFORMANCE } from '../Dashboard/FirmDetail/FundOfFirm/FirmLatestPerformance'\nimport ExFundPerformanceItem from './ExFundDetail/ExFundPerformanceItem'\n\nconst StyledCard = styled(Card)`\n display: flex;\n flex-direction: column;\n z-index: 1;\n margin-bottom: 8px;\n .ant-card-head {\n border-bottom: none;\n font-size: 1rem;\n padding: 0 1rem;\n }\n .ant-card-body {\n padding: 0;\n flex: 1;\n }\n`\n\ntype Props = {\n shouldUpdate: boolean\n setShouldUpdate: (value: boolean) => void\n setUpdatedFundPerformance: (updatedFund?: string) => void\n dataExFunds: ExFundDetails[]\n}\n\nconst ExDashboardPerformance: React.FC = ({\n shouldUpdate,\n dataExFunds,\n setShouldUpdate,\n setUpdatedFundPerformance,\n}) => {\n return (\n \n {dataExFunds &&\n dataExFunds.length > 0 &&\n dataExFunds.map((fund) => {\n if (FUND_STATUS_SHOW_PERFORMANCE.includes(fund.fund_status)) {\n return (\n
\n \n \n
\n )\n }\n return null\n })}\n
\n )\n}\n\nexport default ExDashboardPerformance\n","import { List } from 'antd'\nimport Text from 'antd/lib/typography/Text'\nimport React, { FC } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport { addTabs, FundFirmTypeEnum, PREFIX_EXTERNAL } from '../../slice/appSettingsSlice'\n\nconst Wrapper = styled.div`\n width: 100%;\n flex: 1;\n max-height: 500px;\n overflow: auto;\n`\nconst TextID = styled(Text)`\n color: rgba(0, 0, 0, 1);\n font-size: 14px;\n`\nconst StyledList = styled(List)`\n flex: 1;\n padding: 8px;\n overflow-y: auto;\n overflow-x: hidden;\n .ant-list-item {\n padding: 4px;\n }\n`\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\n\nexport const ExDraftTab: FC = () => {\n const { exFundDraft, exFirmDraft } = useSelector((state: RootState) => state.appSettings)\n const { user } = useSelector((state: RootState) => state.user)\n const myDrafts = [\n ...exFundDraft.filter((value) => value.userId === user?.email),\n ...exFirmDraft.filter((value) => value.userId === user?.email),\n ]\n const dispatch = useDispatch()\n return (\n \n (\n \n
\n \n {item.type === 'fundDraft' ? 'Fund' : 'Firm'} #{item.id}\n \n \n
\n \n dispatch(\n addTabs({\n name: item.name,\n id: `${PREFIX_EXTERNAL}-${item.id}`,\n type: item.type === 'exFundDraft' ? FundFirmTypeEnum.FUNDS : FundFirmTypeEnum.FIRMS_IN_FUNDS,\n }),\n )\n }\n >\n {item.name}\n \n
\n
\n
\n
\n )}\n />\n
\n )\n}\n","import { LeftOutlined, RightOutlined, TableOutlined } from '@ant-design/icons'\nimport { Button, Col, Row } from 'antd'\nimport React from 'react'\nimport { useDispatch } from 'react-redux'\nimport styled from 'styled-components'\nimport { addTabs, FundFirmTypeEnum, PREFIX_EXTERNAL } from '../../slice/appSettingsSlice'\nimport ColumnBuilder from './ExColumnBuilder/ColumnBuilder'\n\nconst RightTitle = styled.div`\n margin-left: 8px;\n`\n\ntype TableHeaderProps = {\n onShowSideBar: () => void\n showSidebar: boolean\n}\n\nconst ExFundTableHeader: React.FC = ({ onShowSideBar, showSidebar }) => {\n const dispatch = useDispatch()\n\n const handleMenuClick = () => {\n dispatch(addTabs({ id: `${PREFIX_EXTERNAL}-new-fund`, name: 'Add New Fund', type: FundFirmTypeEnum.FUNDS }))\n }\n\n const [showColumnBuilder, setShowColumnBuilder] = React.useState(false)\n\n return (\n \n
\n \n All Funds\n \n \n \n \n \n \n \n {showColumnBuilder && }\n \n )\n}\n\nexport default ExFundTableHeader\n","import { Button, Col, notification, Radio, Row } from 'antd'\nimport React, { Dispatch, SetStateAction } from 'react'\nimport APIService from '../../shared/api'\nimport { ExFirmDetails } from '../../shared/api/models/FirmDetails'\nimport { Colors } from '../../shared/colors'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\n\ntype Props = {\n record: ExFirmDetails\n refreshUser: () => void\n setShowModel: Dispatch>\n setSelectedFirm: Dispatch>\n}\n\nconst ExpandedRowRender: React.FC = ({ record, refreshUser, setShowModel, setSelectedFirm }) => {\n const [signCheck, setSignCheck] = React.useState()\n const [loading, setLoading] = React.useState(false)\n\n const handleUpdateCOC = () => {\n if (!dataCodeOfConduct?.version) {\n return\n }\n setLoading(true)\n APIService.codeOfConductService\n .updateCodeOfConduct(record.firm_id, dataCodeOfConduct.version, signCheck)\n .then(() => {\n notification.success({ message: 'Code of Conduct Updated! ' })\n refreshUser()\n setLoading(false)\n setShowModel(false)\n })\n .catch(() => {\n notification.error({ message: 'Failed to sign Code of Conduct!' })\n setLoading(false)\n setShowModel(false)\n })\n }\n\n const { invoke: getCodeOfConduct, data: dataCodeOfConduct } = useServiceState(\n APIService.codeOfConductService.getCodeOfConduct,\n )\n\n React.useEffect(() => {\n getCodeOfConduct()\n }, [getCodeOfConduct])\n\n const handleClick = () => {\n setSelectedFirm(record)\n setShowModel(true)\n }\n\n return (\n
\n
\n

\n \n HFR Submitter Code of Conduct:\n \n Annual Opt-In Required by June 30, 2025\n

\n
\n \n
\n
\n Important: Firms that do not agree to the SCOC by June 30, 2025, will not be eligible for HFR\n Index inclusion.\n
\n {\n setSignCheck(e.target.value)\n }}\n >\n I Agree\n I Do Not Agree\n \n \n \n \n \n \n \n )\n}\n\nexport default ExpandedRowRender\n","import { List } from 'antd'\nimport Text from 'antd/lib/typography/Text'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport APIService from '../../shared/api'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { addTabs, EX_OVERVIEW_KEY, FundFirmTypeEnum, PREFIX_EXTERNAL } from '../../slice/appSettingsSlice'\n\nconst TextID = styled(Text)`\n color: rgba(0, 0, 0, 1);\n font-size: 14px;\n`\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst StyledList = styled(List)`\n flex: 1;\n padding: 8px;\n overflow-y: auto;\n overflow-x: hidden;\n .ant-list-item {\n padding: 4px;\n }\n`\nconst Wrapper = styled.div`\n position: relative;\n width: 100%;\n display: flex;\n flex-direction: column;\n`\nexport const ExRecentlyEditedTab: React.FC = () => {\n const { invoke: getRecentlyEdited, data: dataEdited, loading } = useServiceState(\n APIService.fundService.fetchRecentlyEdited,\n )\n const { exTabs } = useSelector((state: RootState) => state.appSettings)\n const dispatch = useDispatch()\n\n React.useEffect(() => {\n if (exTabs.activeTab === EX_OVERVIEW_KEY) {\n getRecentlyEdited()\n }\n }, [getRecentlyEdited, exTabs.activeTab])\n\n return (\n \n {dataEdited && (\n (\n \n
\n Fund #{item.fund_id}\n \n \n
\n \n dispatch(\n addTabs({\n name: item.fund_name,\n id: `${PREFIX_EXTERNAL}-${item.fund_id}`,\n type: FundFirmTypeEnum.FUNDS,\n }),\n )\n }\n >\n {item.fund_name}\n \n
\n
\n
\n
\n
\n )}\n />\n )}\n
\n )\n}\n","import { Modal, notification, Radio, Spin } from 'antd'\nimport React from 'react'\nimport ReactHtmlParser from 'react-html-parser'\nimport APIService from '../../shared/api'\nimport { Colors } from '../../shared/colors'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\ntype Props = {\n showModal: boolean\n setShowModal: (value: boolean) => void\n refreshUser: () => void\n firmId: string\n firmName: string\n onCancel: () => void\n}\nexport const ModalCodeOfConduct: React.FC = ({\n showModal,\n setShowModal,\n refreshUser,\n firmId,\n firmName,\n onCancel,\n}) => {\n const [signCheck, setSignCheck] = React.useState()\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const { invoke: getCodeOfConduct, data: dataCodeOfConduct } = useServiceState(\n APIService.codeOfConductService.getCodeOfConduct,\n )\n\n React.useEffect(() => {\n getCodeOfConduct()\n }, [getCodeOfConduct])\n\n const handleSubmit = () => {\n if (!dataCodeOfConduct?.version) {\n setShowModal(false)\n return\n }\n\n setLoadingSubmit(true)\n APIService.codeOfConductService\n .updateCodeOfConduct(firmId, dataCodeOfConduct.version, signCheck)\n .then(() => {\n notification.success({ message: 'Code of Conduct Updated!' })\n refreshUser()\n setLoadingSubmit(false)\n onCancel()\n })\n .catch(() => {\n notification.error({ message: 'Failed to sign Code of Conduct!' })\n setLoadingSubmit(false)\n onCancel()\n })\n }\n return (\n : 'Submit'}\n onOk={handleSubmit}\n onCancel={onCancel}\n width=\"80vw\"\n >\n
\n {dataCodeOfConduct ? (\n
\n
{ReactHtmlParser(dataCodeOfConduct.text)}
\n
Version: {dataCodeOfConduct.version}
\n
\n ) : (\n \n )}\n
\n
\n If you do not agree, your products not be eligible for future HFR Index inclusion.\n
\n setSignCheck(e.target.value)} value={signCheck}>\n I Agree\n I Do Not Agree\n \n
\n
\n \n )\n}\n","import { Form, Modal, notification, Spin } from 'antd'\nimport React from 'react'\nimport APIService from '../../shared/api'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { FirmMultiManagerPodPlatform } from '../Dashboard/FirmDetail/FirmMultiManagerPodPlatform/FirmMultiManagerPodPlatform'\nimport { MultiManagerPlatformType } from '../../shared/api/models/FirmDetails'\nimport { useForm } from 'antd/lib/form/util'\nimport { LoadingDetails } from '../../shared/components/LoadingDetails'\nimport axios from 'axios'\ntype Props = {\n showModal: boolean\n firmId: string\n firmName: string\n onCancel: () => void\n}\nexport const ModalMultiManagerPlatform: React.FC = ({ showModal, firmId, firmName, onCancel }) => {\n const [form] = useForm()\n\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [multiManagerPlatformChange, setMultiManagerPlatformChange] = React.useState()\n\n const { invoke: getFirmCMIC, data: firmCMICData, loading: loadingCMICData } = useServiceState(\n APIService.firmDetailService.fetchFirmCMIC,\n )\n\n const {\n invoke: getMultiManagerPlatform,\n data: multiManagerPlatform,\n loading: loadingMultiManagerPlatform,\n } = useServiceState(APIService.firmDetailService.fetchMultiManagerPlatform)\n\n React.useEffect(() => {\n getFirmCMIC(firmId)\n getMultiManagerPlatform(firmId)\n }, [firmId])\n\n const handleSubmit = async () => {\n if (!multiManagerPlatform) {\n return\n }\n\n setLoadingSubmit(true)\n if (multiManagerPlatformChange && multiManagerPlatformChange.length > 0) {\n try {\n await APIService.firmDetailService.updateMultiManagerPlatform(firmId, {\n updates: multiManagerPlatformChange,\n })\n notification.success({ message: 'Multi Manager Platform Updated' })\n getMultiManagerPlatform(firmId)\n setMultiManagerPlatformChange(undefined)\n onCancel()\n } catch (err) {\n notification.error({\n message: `Update Failed! ${axios.isAxiosError(err) ? err.response && err.response.statusText : err}`,\n })\n } finally {\n }\n }\n }\n return (\n : 'Submit'}\n onOk={handleSubmit}\n okButtonProps={{\n disabled: !multiManagerPlatformChange || multiManagerPlatformChange.length <= 0,\n }}\n onCancel={onCancel}\n width=\"80vw\"\n >\n {firmCMICData && multiManagerPlatform && (\n {\n return {\n ...prev,\n [cur.fund_id]: cur,\n }\n }, {} as Record),\n }}\n onValuesChange={(changedValues, allValues) => {\n // Multi Manager Platform\n const MMPChange = allValues._multiManagerPlatformChange\n if (changedValues._multiManagerPlatformChange) {\n const multiManagerPlatformChangeKeys = Object.keys(MMPChange)\n setMultiManagerPlatformChange(\n multiManagerPlatformChangeKeys.map((fundId) => {\n return {\n fund_id: fundId,\n multi_manager_platform: MMPChange[fundId].multi_manager_platform,\n } as MultiManagerPlatformType\n }),\n )\n }\n }}\n >\n \n \n )}\n {(loadingCMICData || loadingMultiManagerPlatform) && }\n \n )\n}\n","import { Col, Form, Modal, notification, Row, Space, Spin } from 'antd'\nimport React from 'react'\nimport APIService from '../../shared/api'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport styled from 'styled-components'\nimport { FormItemCheckBox, FormItemRadio } from '../../shared/components/FormItemComponents'\nimport { RenderLabelExFirm } from '../../shared/components/RenderLabelExFirm'\nimport { FundDropdownType } from '../../shared/api/models/FundDetails'\nimport { ExFirmDetails } from '../../shared/api/models/FirmDetails'\nimport { useForm } from 'antd/lib/form/util'\nimport axios from 'axios'\n\nconst WrapperMinority = styled.div`\n padding: 1rem;\n`\n\ntype Props = {\n showModal: boolean\n onCancel: () => void\n fundDataDropdown?: FundDropdownType\n selectedFirm: ExFirmDetails\n}\nexport const ModalDiversityInclusion: React.FC = ({ showModal, onCancel, fundDataDropdown, selectedFirm }) => {\n const [form] = useForm()\n\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [isMinorityOwnedFirm, setIsMinorityOwnedFirm] = React.useState()\n // Minority Types\n const { invoke: getAllMinorityTypes, data: minorityTypes, loading: loadingMinorityTypes } = useServiceState(\n APIService.minorityService.fetchMinorityTypes,\n )\n\n React.useEffect(() => {\n const countryCode = selectedFirm.country\n if (!countryCode) {\n return\n }\n getAllMinorityTypes(countryCode)\n }, [selectedFirm.country, getAllMinorityTypes])\n\n // Update all minority_type_ when isMinorityOwnedFirm changed\n React.useEffect(() => {\n if (!minorityTypes || !minorityTypes.length) {\n return\n }\n if (isMinorityOwnedFirm === false) {\n minorityTypes?.map((item) => {\n form.setFieldsValue({ [`minority_type_${item.id}`]: false })\n })\n }\n }, [form, isMinorityOwnedFirm, minorityTypes])\n\n const { firm_name: firmName } = selectedFirm\n\n const firmCountry = fundDataDropdown?.firm_contact_country.find(\n (item) => item.code_code === `${selectedFirm.country}`,\n )\n\n const handleSubmit = () => {\n if (!minorityTypes) {\n return\n }\n const formData = form.getFieldsValue()\n //\n const { is_minority_or_woman_owned_firm, ...dataMinority } = formData\n const minorityChange = {\n updates: minorityTypes.map((item) => {\n return {\n minority_type: +item.id,\n status: !!dataMinority[`minority_type_${item.id}`],\n }\n }),\n }\n const { firm_id } = selectedFirm\n //\n setLoadingSubmit(true)\n Promise.all([\n APIService.firmDetailService.updateFirmInfo(firm_id, {\n is_minority_or_woman_owned_firm,\n }),\n APIService.minorityService.updateFirmMinorityStatuses(firm_id, minorityChange),\n ])\n .then(() => {\n notification.success({ message: 'Diversity & Inclusion Updated!' })\n onCancel()\n })\n .catch((err) => {\n notification.error({\n message: `Update Failed! ${axios.isAxiosError(err) ? err.response && err.response.statusText : err}`,\n })\n })\n .finally(() => {\n setLoadingSubmit(false)\n })\n }\n\n const isLoading = loadingMinorityTypes || !fundDataDropdown\n return (\n
\n : 'Submit'}\n okButtonProps={{\n disabled: !form.isFieldsTouched(),\n }}\n onOk={handleSubmit}\n onCancel={onCancel}\n width=\"80vw\"\n >\n \n
\n \n \n
\n

Minority- or Woman-Owned Management Company

\n \n \n \n \n \n Applicable only to the management firm that is physically headquartered in{' '}\n {firmCountry === undefined ? '[Firm_Country]' : firmCountry.code_description}\n \n \n \n \n \n \n Minority- or Woman-Owned: A hedge fund management company is deemed to be a minority- or woman-owned\n business if: Greater than 50% of the management company is owned by one or more minorities or women,\n or in the case of a publicly owned business, greater than 50% of all issued stock is owned by one or\n more minorities or women; and whose management and daily business operations are controlled by one\n or more such individuals.\n \n \n \n \n \n \n }\n options={[\n {\n value: true,\n title: 'Yes',\n },\n {\n value: false,\n title: 'No',\n },\n ]}\n getValueFromEvent={(val) => {\n const newVal = val.target.value\n setIsMinorityOwnedFirm(newVal)\n return newVal\n }}\n />\n \n \n \n {isMinorityOwnedFirm ? (\n \n \n If ‘Yes’, please check all that apply:\n \n \n ) : null}\n \n {isMinorityOwnedFirm ? (\n \n \n \n Type\n \n \n Description\n \n \n {minorityTypes?.map((item, index) => {\n return (\n \n \n \n \n {item.minority_description}\n \n )\n })}\n \n ) : null}\n \n \n \n \n \n )\n}\n","import { Button, Card, Col, notification, Radio, Row, Tabs } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport PerfectScrollbar from 'react-perfect-scrollbar'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport APIService from '../../shared/api'\nimport { FundDetailDropdownContext, MMPFirmType } from '../../shared/api/context/FundDetailDropdownContext'\nimport { ExFirmDetails, MultiManagerPlatformType } from '../../shared/api/models/FirmDetails'\nimport { Colors } from '../../shared/colors'\nimport FundOfFirmTable, { EXFUND_FIRM_TABLE } from '../../shared/components/FundOfFirmTable'\nimport { TabContentWrapper } from '../../shared/components/TabContentWrapper'\nimport { history } from '../../shared/history'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { LeftNavExFirmEnum } from '../../shared/SearchExFirmLabel'\nimport { addTabs, FundFirmTypeEnum, PREFIX_EXTERNAL } from '../../slice/appSettingsSlice'\nimport { fetchUser } from '../../slice/userSlice'\nimport { allExColumns, ColumnPropsExtended, defaultColumns } from './ExColumnBuilder/columnSource'\nimport ExDashboardPerformance from './ExDashboardPerformance'\nimport { ExDraftTab } from './ExDraftTab'\nimport ExFundTableHeader from './ExFundTableHeader'\nimport ExpandedRowRender from './ExpandedRowRender'\nimport { ExRecentlyEditedTab } from './ExRecentlyEditedTab'\nimport { ModalCodeOfConduct } from './ModalCodeOfConduct'\nimport { ModalMultiManagerPlatform } from './ModalMultiManagerPlatform'\nimport { ModalDiversityInclusion } from './ModalDiversityInclusion'\n\nconst StyledCard = styled(Card)`\n display: flex;\n flex-direction: column;\n .ant-card-head-title {\n white-space: normal;\n }\n\n .ant-card-head {\n border-bottom: none;\n font-size: 1rem;\n padding: 0 1rem;\n }\n .ant-card-body {\n padding: 0 1rem 1rem 1rem;\n flex: 1;\n }\n`\nconst StyledMyFundTab = styled(Tabs)`\n display: flex;\n flex-direction: column;\n .ant-card-body {\n flex: 1;\n }\n`\n\nconst FundFirmName = styled('span')`\n color: ${Colors.primary};\n cursor: pointer;\n`\n\nconst ScrollBar = styled(PerfectScrollbar)`\n .ps__rail-x {\n z-index: 2;\n }\n`\n\nconst StopCOCDate = new Date('07/01/2024')\n\ntype Props = {\n setShouldUpdate: (value: boolean) => void\n shouldUpdate: boolean\n setUpdatedFundPerformance: (updatedFund?: string) => void\n}\n\nconst StyledButton = styled(Button)`\n display: flex;\n height: 22px;\n align-items: center;\n`\n\nconst ExDashboardTab: React.FC = ({ setShouldUpdate, shouldUpdate, setUpdatedFundPerformance }) => {\n const { dataFirms, refetchFirm, fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const [showSidebar, setShowSidebar] = React.useState(true)\n const [activeTab, setActiveTab] = React.useState('Recently Edited')\n\n // get all multiManagerPlatformRes\n const [multiManagerPlatformResponses, setMultiManagerPlatformResponses] = React.useState([])\n\n const [selectedFirm, setSelectedFirm] = React.useState()\n const [selectedMMPFirm, setSelectedMMPFirm] = React.useState()\n\n // code of conduct\n const [showCOCModal, setShowCOCModal] = React.useState(false)\n // diversity and inclusion\n const [showDAIModal, setShowDAIModal] = React.useState(false)\n // multi manager platform\n const [showMMPModal, setShowMMPModal] = React.useState(false)\n\n const [notResponsedCOCFirms, setNotResponsedCOCFirms] = React.useState()\n const [notSetDAIFirms, setNotSetDAIFirms] = React.useState()\n const [notCompletedMMPFirms, setNotCompletedMMPFirms] = React.useState()\n\n const { data: dataExFunds, invoke: getExFund, loading } = useServiceState(APIService.fundService.fetchExFunds)\n\n async function fetchMultiManagerPlatform(firm: ExFirmDetails) {\n try {\n const response = await APIService.firmDetailService.fetchMultiManagerPlatform(firm.firm_id)\n return {\n id: firm.firm_id,\n name: firm.firm_name,\n funds: response.data.funds,\n }\n } catch (error) {\n throw error\n }\n }\n\n React.useEffect(() => {\n getExFund()\n }, [getExFund])\n\n React.useEffect(() => {\n if (shouldUpdate) {\n getExFund()\n setShouldUpdate && setShouldUpdate(false)\n }\n }, [getExFund, setShouldUpdate, shouldUpdate])\n\n React.useEffect(() => {\n if (!dataFirms) {\n return\n }\n //\n // stop COC after 30/06/2024\n if (new Date() < StopCOCDate) {\n setNotResponsedCOCFirms(dataFirms?.filter((firm) => firm.agreed_to_code_of_conduct === null))\n } else {\n setNotResponsedCOCFirms([])\n }\n setNotSetDAIFirms(dataFirms?.filter((firm) => typeof firm.is_minority_or_woman_owned_firm !== 'boolean'))\n // get all multiManagerPlatformRes\n setMultiManagerPlatformResponses([])\n Promise.all(dataFirms.map((firm) => fetchMultiManagerPlatform(firm)))\n .then((responses) => {\n setMultiManagerPlatformResponses(responses)\n })\n .catch((error) => {\n notification.error({ message: error?.message || error })\n })\n }, [dataFirms])\n\n // show coc modal when there are still notResponsedCOCFirms, when coc modal close, it will filter out the one in the modal\n React.useEffect(() => {\n if (!notResponsedCOCFirms || notResponsedCOCFirms.length === 0 || showCOCModal) {\n return\n }\n if (notResponsedCOCFirms?.length > 0) {\n setSelectedFirm(notResponsedCOCFirms[0])\n setShowCOCModal(true)\n }\n }, [notResponsedCOCFirms, showCOCModal])\n // show mmp modal when there are still notCompletedMMPFirms, when mmp modal close, it will filter out the one in the modal\n React.useEffect(() => {\n // there are still COC Firms\n if (showCOCModal || (notResponsedCOCFirms && notResponsedCOCFirms.length > 0)) {\n return\n }\n if (!notSetDAIFirms || notSetDAIFirms.length === 0 || showDAIModal) {\n return\n }\n if (notSetDAIFirms?.length > 0) {\n setSelectedFirm(notSetDAIFirms[0])\n setShowDAIModal(true)\n }\n }, [notResponsedCOCFirms, showCOCModal, notSetDAIFirms, showDAIModal])\n // show mmp modal when there are still notCompletedMMPFirms, when mmp modal close, it will filter out the one in the modal\n React.useEffect(() => {\n // there are still COC Firms\n if (showCOCModal || (notResponsedCOCFirms && notResponsedCOCFirms.length > 0)) {\n return\n }\n // there is still DAI Modal\n if (showDAIModal || (notSetDAIFirms && notSetDAIFirms.length > 0)) {\n return\n }\n if (!notCompletedMMPFirms || notCompletedMMPFirms.length === 0 || showMMPModal) {\n return\n }\n if (notCompletedMMPFirms?.length > 0) {\n setSelectedMMPFirm(notCompletedMMPFirms[0])\n setShowMMPModal(true)\n }\n }, [notResponsedCOCFirms, showCOCModal, notSetDAIFirms, showDAIModal, notCompletedMMPFirms, showMMPModal])\n // find firm with incomplete mmp\n React.useEffect(() => {\n if (!multiManagerPlatformResponses || !multiManagerPlatformResponses.length) {\n return\n }\n\n const results = multiManagerPlatformResponses.reduce((prev, cur) => {\n const hasNull = cur.funds.some((fund) => fund.multi_manager_platform === null)\n if (hasNull) {\n return [...prev, cur]\n }\n return prev\n // return [...prev, cur]\n }, [] as { name: string; id: string; funds: MultiManagerPlatformType[] }[])\n setNotCompletedMMPFirms(results)\n }, [multiManagerPlatformResponses])\n //\n const handleCancelCOC = () => {\n if (!selectedFirm) {\n return\n }\n // remove cancelled Firm from notResponsedCOCFirms list then trigger check open next modal\n setNotResponsedCOCFirms(notResponsedCOCFirms?.filter((item) => item.firm_id !== selectedFirm.firm_id))\n setShowCOCModal(false)\n }\n\n const handleCancelDAI = () => {\n if (!selectedFirm) {\n return\n }\n // remove cancelled Firm from notResponsedCOCFirms list then trigger check open next modal\n setNotSetDAIFirms(notSetDAIFirms?.filter((item) => item.firm_id !== selectedFirm.firm_id))\n setShowDAIModal(false)\n }\n\n const handleCancelMMP = () => {\n if (!selectedMMPFirm) {\n return\n }\n //\n setNotCompletedMMPFirms((prev) => prev?.filter((item) => item.id !== selectedMMPFirm.id))\n setShowMMPModal(false)\n }\n\n const dispatch = useDispatch()\n\n const { exFundTableColumns } = useSelector((state: RootState) => state.appSettings)\n const { exFundSearchParams } = useSelector((state: RootState) => state.searchParams)\n\n const flattenAllColumns = allExColumns.flatMap((item) => item.columns)\n\n const exFundColumns =\n exFundTableColumns.length > 0\n ? exFundTableColumns.reduce((acc, key) => {\n const foundColumn = flattenAllColumns.find((item) => item.key === key)\n if (foundColumn) {\n return [...acc, foundColumn]\n }\n return acc\n }, [] as ColumnPropsExtended[])\n : // map((key: any) => flattenAllColumns.find((item) => item.key === key))\n defaultColumns\n\n const columns: ColumnProps[] = [\n {\n title: 'ID',\n dataIndex: 'firm_id',\n key: 'firm_id',\n width: 120,\n sorter: (a, b) => {\n return a.firm_id.localeCompare(b.firm_id)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Name',\n dataIndex: 'firm_name',\n key: 'firm_name',\n width: 300,\n sorter: (a, b) => {\n return a.firm_name.localeCompare(b.firm_name)\n },\n sortDirections: ['descend', 'ascend'],\n render: (text: string) => {text},\n onCell: (record: ExFirmDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n id: `${PREFIX_EXTERNAL}-${record.firm_id}`,\n name: record.firm_name,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n }),\n )\n },\n }),\n },\n {\n title: 'Latest Firm Asset',\n dataIndex: 'latest_firm_asset',\n key: 'latest_firm_asset',\n width: 200,\n render: (_, record) => (\n <>\n {\n dispatch(\n addTabs({\n id: `${PREFIX_EXTERNAL}-${record.firm_id}`,\n name: record.firm_name,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n activeNav: LeftNavExFirmEnum.ASSETS_UNDER_MANAGEMENT,\n }),\n )\n }}\n >\n {record.latest_firm_asset?.toFixed(3)}\n \n \n ),\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Latest Firm Asset Date',\n dataIndex: 'latest_firm_asset_date',\n key: 'latest_firm_asset_date',\n width: 200,\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Latest Firm Hedge Fund Asset',\n dataIndex: 'latest_firm_asset_hedge_fund',\n key: 'latest_firm_asset_hedge_fund',\n width: 200,\n sortDirections: ['descend', 'ascend'],\n render: (_, record) => (\n <>\n {\n dispatch(\n addTabs({\n id: `${PREFIX_EXTERNAL}-${record.firm_id}`,\n name: record.firm_name,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n activeNav: LeftNavExFirmEnum.ASSETS_UNDER_MANAGEMENT,\n }),\n )\n }}\n >\n {record.latest_firm_asset_hedge_fund?.toFixed(3)}\n \n \n ),\n },\n {\n title: 'Latest Firm Hedge Fund Asset Date',\n dataIndex: 'latest_firm_asset_hedge_fund_date',\n key: 'latest_firm_asset_hedge_fund_date',\n width: 200,\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'HFR Submitter Code Of Conduct',\n dataIndex: 'agreed_to_code_of_conduct',\n key: 'agreed_to_code_of_conduct',\n width: 200,\n render: (_, record) => (\n \n \n {record.agreed_to_code_of_conduct === true\n ? 'AGREED'\n : record.agreed_to_code_of_conduct === null\n ? 'NOT RESPONSED'\n : 'NOT AGREED'}\n \n {!record.agreed_to_code_of_conduct && (\n {\n setSelectedFirm(record)\n setShowCOCModal(true)\n }}\n >\n Change Status\n \n )}\n \n ),\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Firm Contact Info',\n key: 'action',\n render: (_, record) => (\n <>\n {\n dispatch(\n addTabs({\n id: `${PREFIX_EXTERNAL}-${record.firm_id}`,\n name: record.firm_name,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n activeNav: LeftNavExFirmEnum.CONTACT_INFORMATION,\n }),\n )\n }}\n >\n Update\n \n \n ),\n },\n ]\n\n const refreshUser = () => {\n dispatch(fetchUser())\n refetchFirm()\n }\n\n return (\n \n \n {showSidebar && (\n \n \n \n {`Multi-Manager \"Pod\" Platform `}\n (Please complete if you have not)\n \n }\n style={{ marginTop: 8, borderColor: Colors.primary }}\n >\n {dataFirms &&\n dataFirms.map((item) => {\n return (\n history.push(`/firms/${item.firm_id}/firm-multi-manager`)}\n >\n {item.firm_name}\n \n )\n })}\n \n \n \n window.open(\n 'https://go.hfr.com/l/1020832/2024-01-02/74j5g?source=ManagerLink&relatedsalesperson=indexdata@hfr.com',\n )\n }\n >\n Special HFR Index Licensing Rates for Managers - Click for a Quote\n \n \n \n NEW\n {`: Broadcast to HFR Clients`}\n \n }\n style={{ marginTop: 8, borderColor: Colors.primary }}\n >\n window.open('https://www.hfr.com/hfr-media-mgr-form/')}\n >\n Catalyze your fund’s growth with HFR Media\n \n \n {\n setActiveTab(key)\n }}\n activeKey={activeTab}\n >\n \n \n \n \n \n \n \n \n \n )}\n \n \n \n (\n \n ),\n expandIcon: () => {\n return null\n },\n expandedRowKeys: dataFirms\n ?.filter((firm) => firm.agreed_to_code_of_conduct === null)\n .map((firm) => firm.firm_id),\n }}\n defaultExpandAllRows={true}\n columns={columns}\n pagination={dataFirms && dataFirms.length > 10 ? undefined : false}\n />\n {selectedFirm && showCOCModal && (\n \n )}\n {selectedFirm && showDAIModal && (\n \n )}\n {selectedMMPFirm && showMMPModal && (\n \n )}\n \n {\n setShowSidebar(!showSidebar)\n }}\n showSidebar={showSidebar}\n />\n }\n >\n {\n getExFund()\n }}\n initialColumn={exFundColumns}\n initialFilter={exFundSearchParams}\n />\n \n {dataExFunds && (\n \n )}\n \n \n \n \n )\n}\n\nexport default ExDashboardTab\n","export enum LeftNavExNewFundEnum {\n INSTRUCTION = 'Instruction',\n CREATE_FUND_PROFILE = 'Step 1 - Create Fund Profile',\n INVESTMENT_STRATEGY = 'Step 2 - Investment Strategy',\n INVESTMENT_REQUIREMENTS = 'Step 3 - Investment Requirements',\n CONTACT_INFORMATION = 'Step 4 - Contact Information',\n STRUCTURE = 'Step 5 - Structure',\n FEE_SCHEDULE = 'Step 6 - Fee Schedule',\n SERVICE_PROVIDERS = 'Step 7 - Service Providers',\n FUND_ESG_FACTORS = 'Step 8 - Fund ESG Factors',\n FUND_DIVERSITY_INCLUSION = 'Step 9 - Fund Diversity & Inclustion',\n FUND_PERFORMANCE = 'Step 10 - Fund Performance',\n FUND_CMIC = 'Step 11 - CMIC',\n COMPLETE = 'Step 12 - Complete',\n}\nexport interface ListSearchExNewFundType {\n key: string\n name: string\n leftNav: LeftNavExNewFundEnum\n}\nexport const renderSearchListExNewFund: ListSearchExNewFundType[] = [\n {\n key: 'enter_fund_name',\n name: 'Enter Fund Name',\n leftNav: LeftNavExNewFundEnum.CREATE_FUND_PROFILE,\n },\n]\n","import React from 'react'\nimport { ListSearchExNewFundType } from '../../SearchExNewFundLabel'\n\nconst defaultValue = {\n boldText: '',\n filterArr: [] as ListSearchExNewFundType[],\n isFiltering: false,\n}\ntype Props = {\n text: string\n filterArr: ListSearchExNewFundType[]\n}\nexport const ExNewFundLabelSearchContext = React.createContext(defaultValue)\nexport const ExNewFundLabelSearchProvider: React.FC = ({ children, text, filterArr }) => {\n const isFiltering = text === '' ? false : true\n const value = {\n boldText: text,\n filterArr,\n isFiltering,\n }\n return {children}\n}\n","import React from 'react'\nimport { ExNewFundLabelSearchContext } from '../api/context/ExNewFundLabelSearchContext'\nimport { Colors } from '../colors'\ntype Props = {\n value: string\n boldText?: string\n}\nexport const RenderLabelExNewFund: React.FC = ({ value }) => {\n const { boldText } = React.useContext(ExNewFundLabelSearchContext)\n const index = value.toUpperCase().indexOf(boldText.toUpperCase())\n return (\n \n {boldText === '' || index === -1 ? (\n {value}\n ) : (\n \n {value.slice(0, index)}\n \n {value.slice(index, index + boldText.length)}\n \n {value.slice(index + boldText.length, value.length)}\n \n )}\n \n )\n}\n","import { Button, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { TAB_LIST_CREATE_NEW_FUND } from './ExNewFundMain'\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n ArrayValidateField: string[]\n form: FormInstance\n}\nexport const NextBackNewFundTab: React.FC = ({\n setActiveTab,\n setStepTab,\n activeTab,\n stepTab,\n ArrayValidateField,\n form,\n}) => {\n const indexActive = TAB_LIST_CREATE_NEW_FUND.findIndex((i) => i.id === activeTab)\n\n const handleNext = () => {\n form\n .validateFields(ArrayValidateField)\n .then(() => {\n if (activeTab === stepTab) {\n setStepTab(TAB_LIST_CREATE_NEW_FUND[indexActive + 1].id)\n }\n setActiveTab(TAB_LIST_CREATE_NEW_FUND[indexActive + 1].id)\n })\n .catch(() => console.log('error '))\n }\n\n const handleBack = () => {\n form.validateFields(ArrayValidateField).then(() => {\n setActiveTab(TAB_LIST_CREATE_NEW_FUND[indexActive - 1].id)\n })\n }\n return (\n \n {indexActive > 0 && (\n \n )}\n\n {indexActive + 1 !== TAB_LIST_CREATE_NEW_FUND.length && (\n \n )}\n \n )\n}\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { ExFundFieldChange, FundDetails } from '../../../shared/api/models/FundDetails'\nimport { FormItemInput, FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExNewFund } from '../../../shared/components/RenderLabelExNewFund'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n padding: 0 2rem;\n flex-direction: column;\n`\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n form: FormInstance\n setDataFundDetailChange: (action: React.SetStateAction>) => void\n}\nconst ARRAY_FIELD_VALIDATE: string[] = [\n 'contact_name',\n 'contact_company',\n 'contact_country',\n 'contact_address1',\n 'contact_city',\n 'contact_postal_code',\n 'contact_phone',\n 'contact_email',\n]\nexport const ExNewFundContact: React.FC = ({\n form,\n setStepTab,\n setDataFundDetailChange,\n setActiveTab,\n stepTab,\n activeTab,\n}) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const LIST_FORM = [\n {\n name: 'contact_name',\n label: 'Name',\n maxlength: 60,\n rules: [{ required: true, message: 'Name is required!' }],\n },\n {\n name: 'contact_company',\n label: 'Company',\n maxlength: 60,\n rules: [{ required: true, message: 'Company Name is required!' }],\n },\n {\n name: 'contact_country',\n label: 'Country',\n options:\n fundDataDropdown?.contact_country && fundDataDropdown?.contact_country.length > 0\n ? fundDataDropdown.contact_country.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Country Name is required!' }],\n },\n {\n name: 'contact_address1',\n label: 'Address',\n maxlength: 60,\n rules: [{ required: true, message: 'Address is required!' }],\n },\n {\n name: 'contact_address2',\n label: 'Address 2',\n maxlength: 60,\n },\n\n {\n name: 'contact_city',\n label: 'City',\n maxlength: 30,\n rules: [{ required: true, message: 'City Name is required!' }],\n },\n {\n name: 'contact_state',\n label: 'State',\n options:\n fundDataDropdown?.contact_state && fundDataDropdown?.contact_state.length > 0\n ? fundDataDropdown.contact_state.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'contact_postal_code',\n label: 'Postal Code',\n maxlength: 10,\n rules: [{ required: true, message: 'Postal Code is required!' }],\n },\n {\n name: 'contact_phone',\n label: 'Phone',\n maxlength: 30,\n rules: [{ required: true, message: 'Phone is required!' }],\n },\n {\n name: 'contact_fax',\n label: 'Fax',\n maxlength: 30,\n },\n {\n name: 'contact_email',\n label: 'Email',\n maxlength: 255,\n rules: [{ required: true, message: 'Email is required!' }],\n },\n {\n name: 'contact_web',\n label: 'Website',\n maxlength: 60,\n },\n ]\n\n const contactCountry = form.getFieldValue('contact_country')\n\n React.useEffect(() => {\n if ((!contactCountry || contactCountry !== '205') && form.getFieldValue('contact_state')) {\n form.setFieldsValue({ contact_state: null })\n setDataFundDetailChange((prev) => {\n const { contact_state, ...rest } = prev\n return contact_state ? rest : prev\n })\n }\n }, [contactCountry, form, setDataFundDetailChange])\n\n return (\n \n \n {LIST_FORM.map((item) => {\n return (\n \n {item.options ? (\n }\n options={item.options}\n wrapperCol={16}\n rules={item.rules}\n disabled={item.name === 'contact_state' && contactCountry !== '205'}\n />\n ) : (\n }\n placeholder={item.label}\n wrapperCol={16}\n maxLength={item.maxlength ? item.maxlength : undefined}\n rules={item.rules}\n />\n )}\n \n )\n })}\n \n \n \n )\n}\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { ExFundFieldChange, FundDetails } from '../../../shared/api/models/FundDetails'\nimport { DividerForm } from '../../../shared/components/DividerForm'\nimport {\n FormItemCheckBox,\n FormItemDatePicker,\n FormItemInput,\n FormItemSelect,\n} from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExNewFund } from '../../../shared/components/RenderLabelExNewFund'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n margin-top: 1rem;\n padding: 0 2rem;\n`\nconst ARRAY_FIELD_VALIDATE: string[] = ['fund_name', 'firm_id', 'inception_date', 'denomination', 'reporting_style']\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n form: FormInstance\n setDataFundDetailChange: (action: React.SetStateAction>) => void\n}\n\nexport const ExNewFundCreateFundProfile: React.FC = ({\n setStepTab,\n setActiveTab,\n setDataFundDetailChange,\n activeTab,\n stepTab,\n form,\n}) => {\n const { fundDataDropdown, dataFirms, setFirmIdChoose } = React.useContext(FundDetailDropdownContext)\n\n const liquidAltTypeValue = form.getFieldValue('liquid_alt_type')\n const liquidAltProduct = form.getFieldValue('liquid_alt_product')\n const firmId = form.getFieldValue('firm_id')\n React.useEffect(() => {\n setFirmIdChoose(firmId)\n }, [firmId, setFirmIdChoose])\n\n const arrayValidate = React.useMemo(() => {\n return liquidAltProduct ? [...ARRAY_FIELD_VALIDATE, 'liquid_alt_type', 'liquid_alt_region'] : ARRAY_FIELD_VALIDATE\n }, [liquidAltProduct])\n\n const LIST_FORM = [\n {\n name: 'fund_name',\n label: 'Enter Fund Name',\n rules: [{ required: true, message: 'Fund Name is required' }],\n },\n {\n name: 'firm_id',\n label: 'Firm',\n rules: [{ required: true, message: 'Please input your Firm!' }],\n options:\n dataFirms && dataFirms.length > 0\n ? dataFirms.map((item) => ({\n value: item.firm_id,\n text: item.firm_name,\n }))\n : [],\n },\n {\n name: 'product_class',\n label: 'Product/Share Class (if applicable)',\n options:\n fundDataDropdown?.product_class && fundDataDropdown?.product_class.length > 0\n ? fundDataDropdown.product_class.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'inception_date',\n label: 'Fund Inception Date: (MM/DD/YYYY)',\n isDatePicker: true,\n rules: [{ required: true, message: 'Fund Inception Date is required' }],\n },\n {\n name: 'denomination',\n label: 'Denomination',\n options:\n fundDataDropdown?.denomination && fundDataDropdown.denomination.length > 0\n ? fundDataDropdown.denomination.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Denomination is required' }],\n },\n {\n name: 'reporting_style',\n label: 'Performance Reporting Style',\n options:\n fundDataDropdown?.reporting_style && fundDataDropdown.reporting_style.length > 0\n ? fundDataDropdown.reporting_style.map((item) => ({\n value: item,\n text: item,\n }))\n : [],\n rules: [{ required: true, message: 'Performance Reporting Style is required' }],\n },\n ]\n const LIST_FORM_FOOTER = React.useMemo(() => {\n return [\n {\n name: 'liquid_alt_type',\n label: 'Type',\n options:\n fundDataDropdown && fundDataDropdown.liquid_alt_type && fundDataDropdown.liquid_alt_type.length > 0\n ? fundDataDropdown.liquid_alt_type.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n rules: liquidAltProduct ? [{ required: true, message: 'Type is required' }] : [],\n },\n {\n name: 'liquid_alt_region',\n label: 'Country Of Registration',\n disable: true,\n options:\n fundDataDropdown && fundDataDropdown.liquid_alt_region && fundDataDropdown.liquid_alt_region.length > 0\n ? fundDataDropdown.liquid_alt_region.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: liquidAltProduct ? [{ required: true, message: 'Country Of Registration is required' }] : [],\n },\n ]\n }, [fundDataDropdown, liquidAltProduct])\n\n React.useEffect(() => {\n if (!form.getFieldValue('reporting_style')) {\n setDataFundDetailChange((prev) => ({ ...prev, reporting_style: 'Net of All Fees' }))\n form.setFieldsValue({ reporting_style: 'Net of All Fees' })\n }\n }, [form, setDataFundDetailChange])\n\n React.useEffect(() => {\n if (liquidAltTypeValue) {\n form.setFieldsValue({ liquid_alt_region: '1' })\n setDataFundDetailChange((prev) => ({ ...prev, liquid_alt_region: '1' }))\n } else {\n form.setFieldsValue({ liquid_alt_region: null })\n setDataFundDetailChange((prev) => {\n const { liquid_alt_region, ...rest } = prev\n return liquid_alt_region ? rest : prev\n })\n }\n }, [form, liquidAltTypeValue, setDataFundDetailChange])\n\n return (\n \n \n {LIST_FORM.map((item) => {\n return (\n \n {item.isDatePicker ? (\n }\n wrapperCol={16}\n rules={item.rules}\n />\n ) : item.options ? (\n }\n options={item.options}\n wrapperCol={16}\n rules={item.rules}\n />\n ) : (\n }\n wrapperCol={16}\n rules={item.rules}\n />\n )}\n \n )\n })}\n {/* \n \n */}\n \n \n \n
\n If investment vehicle is a Liquid Alternative Product (i.e., Open-End Mutual Fund), please select the\n Type and Country of Registration below:\n
\n
\n \n
\n } />\n \n \n {liquidAltProduct && (\n \n {LIST_FORM_FOOTER.map((item) => {\n return (\n \n }\n options={item.options}\n wrapperCol={16}\n disabled={item.disable}\n rules={item.rules}\n />\n \n )\n })}\n \n )}\n\n \n \n )\n}\n","import { Space, Row, Col } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDropdownCodeType } from '../../../shared/api/models/FundDetails'\nimport { MinorityType } from '../../../shared/api/services/minority.service'\nimport { FormItemCheckBox, FormItemRadio } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelForm } from '../../../shared/components/RenderLabelForm'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\n\ntype Props = {\n form: FormInstance\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n firmCountry: FundDropdownCodeType | undefined\n minorityTypes?: MinorityType[]\n setDataFundDetailChange: any\n}\n\nconst Wrapper = styled.div`\n padding: 1rem;\n`\n\nconst WrapperMinority = styled.div`\n padding: 1rem;\n`\nconst ARRAY_FIELD_VALIDATE: string[] = []\n\nconst ExNewFundDI: React.FC = ({\n form,\n setActiveTab,\n setStepTab,\n activeTab,\n stepTab,\n firmCountry,\n minorityTypes,\n setDataFundDetailChange,\n}) => {\n const isMinorityManagedFund = form.getFieldValue('is_minority_or_woman_managed_fund')\n\n React.useEffect(() => {\n if (!minorityTypes || !minorityTypes.length) {\n return\n }\n if (isMinorityManagedFund === false) {\n minorityTypes?.map((item) => {\n setDataFundDetailChange((prevState: any) => ({\n ...prevState,\n [`minority_type_${item.id}`]: false,\n }))\n form.setFieldsValue({ [`minority_type_${item.id}`]: false })\n })\n }\n }, [form, isMinorityManagedFund, minorityTypes, setDataFundDetailChange])\n\n return (\n \n \n \n \n

Minority-Owned Management Company

\n \n \n \n \n \n Applicable only to the management firm that is physically headquartered in{' '}\n {firmCountry === undefined ? '[Firm_Country]' : firmCountry.code_description}\n \n \n \n \n \n \n Minority-Owned: A hedge fund management company is deemed to be a minority-owned business if: Greater than\n 50% of the management company is owned by one or more minorities, or in the case of a publicly owned\n business, greater than 50% of all issued stock is owned by one or more minorities; and whose management\n and daily business operations are controlled by one or more such individuals\n \n \n \n \n \n }\n options={[\n {\n value: true,\n title: 'Yes',\n },\n {\n value: false,\n title: 'No',\n },\n ]}\n />\n \n \n \n {isMinorityManagedFund ? (\n \n \n If ‘Yes’, please check all that apply:\n \n \n ) : null}\n \n {isMinorityManagedFund ? (\n \n \n \n Type\n \n \n Description\n \n \n {minorityTypes?.map((item, index) => {\n return (\n \n \n \n \n {item.minority_description}\n \n )\n })}\n \n ) : null}\n \n \n \n )\n}\n\nexport default ExNewFundDI\n","import { Col, Form, List, Radio, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemRadio, FormItemSelect, FormItemTextArea } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFund } from '../../../shared/components/RenderLabelExFund'\nimport { RenderLabelExNewFund } from '../../../shared/components/RenderLabelExNewFund'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\nimport { updateFieldValue } from '../../../shared/utils/formUtils'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n flex-direction: column;\n padding: 0 2rem;\n`\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n form: FormInstance\n}\nconst ARRAY_FIELD_VALIDATE: string[] = []\n\nconst ListItem = styled(List.Item)`\n padding: 0 24px;\n`\n\nexport const ExNewFundESGFactor: React.FC = ({ setStepTab, setActiveTab, stepTab, activeTab, form }) => {\n const isFundESG = form.getFieldValue('is_fund_esg')\n const isConsiderESG = isFundESG === '1'\n\n const selectedSubStrategyCodeNew = form.getFieldValue('sub_strategy_code_new')\n\n const esgStrategyCode = form.getFieldValue('esg_strategy')\n const esgSubStrategyCode = form.getFieldValue('esg_sub_strategy')\n\n const { esgStrategies, esgSubStrategies, esgSubStrategyDropdown } = useSelector((state: RootState) => state.appData)\n\n // Reset Esg value in is_fund_esg change to No\n React.useEffect(() => {\n if (isFundESG === '2') {\n const currentEsgStrategyCode = form.getFieldValue('esg_strategy')\n !!currentEsgStrategyCode && updateFieldValue(form, 'esg_strategy', null)\n const currentEsgSubStrategyCode = form.getFieldValue('esg_sub_strategy')\n !!currentEsgSubStrategyCode && updateFieldValue(form, 'esg_sub_strategy', null)\n const currentTeamEngagepcm = form.getFieldValue('team_engagepcm')\n currentTeamEngagepcm !== '2' && updateFieldValue(form, 'team_engagepcm', '2')\n //\n const allFields = [\n ...DESCRIBE_BEST_DESCRIBE,\n ...DESCRIBE_ESG_CRITERIA,\n ...DESCRIBE_ESG_SOCIAL,\n ...DESCRIBE_GOVERNANCE,\n ...ESG_DATA_SOURCES,\n ]\n allFields.map((f) => {\n const currentValue = form.getFieldValue(f.name)\n if (f.isInput) {\n !!currentValue && updateFieldValue(form, f.name, null)\n } else {\n currentValue !== '2' && updateFieldValue(form, f.name, '2')\n }\n return null\n })\n }\n }, [form, isFundESG])\n // Reset esg sub-strategy whenever esg changed\n React.useEffect(() => {\n const currentESGSubStrategy = esgSubStrategies?.find((item) => item.code === esgSubStrategyCode)\n if (esgStrategyCode !== currentESGSubStrategy?.esg_strategy) {\n const currentEsgSubStrategyCode = form.getFieldValue('esg_sub_strategy')\n !!currentEsgSubStrategyCode && updateFieldValue(form, 'esg_sub_strategy', null)\n }\n }, [form, esgStrategyCode, esgSubStrategyCode, esgSubStrategies])\n //\n const { selectableESGStrategies, selectableESGSubStrategies } = React.useMemo(() => {\n if (!selectedSubStrategyCodeNew || !esgSubStrategyDropdown) {\n return { selectableESGStrategies: undefined, selectableESGSubStrategies: undefined }\n }\n const availableESGSubStrategyCodes = esgSubStrategyDropdown[selectedSubStrategyCodeNew]\n // set selectable options to undefined if sub_strategy_code_new is not match any Sub Strategy Dropdown\n if (!availableESGSubStrategyCodes) {\n return { selectableESGStrategies: undefined, selectableESGSubStrategies: undefined }\n }\n //\n const availableESGSubStrategies = esgSubStrategies\n ? esgSubStrategies.filter((item) => availableESGSubStrategyCodes.includes(item.code))\n : undefined\n\n return {\n selectableESGStrategies: esgStrategies\n ? esgStrategies.filter((item) => availableESGSubStrategies?.some((i) => i.esg_strategy === item.code))\n : undefined,\n selectableESGSubStrategies: availableESGSubStrategies,\n }\n }, [selectedSubStrategyCodeNew, esgStrategies, esgSubStrategies, esgSubStrategyDropdown])\n\n // Reset esg strategy whenever sub_strategy_code_new changed\n React.useEffect(() => {\n if (!selectableESGStrategies?.some((item) => item.code === esgStrategyCode)) {\n form.setFieldsValue({ esg_strategy: undefined })\n }\n if (!selectableESGSubStrategies?.some((item) => item.code === esgSubStrategyCode)) {\n form.setFieldsValue({ esg_sub_strategy: undefined })\n }\n form.setFieldsValue({ esg_stategy: undefined })\n }, [\n esgStrategyCode,\n esgSubStrategyCode,\n form,\n selectableESGStrategies,\n selectableESGSubStrategies,\n selectedSubStrategyCodeNew,\n ])\n\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const LabelComponent = () => (\n \n \n   Note: ESG Strategy/Sub-Strategy options dependent on Main Strategy / Sub-strategy classifications in HFR\n Database (‘Investment Strategy’ module)\n \n \n )\n\n const optionEsg = React.useMemo(() => {\n return fundDataDropdown?.is_fund_esg && fundDataDropdown.is_fund_esg.length > 0\n ? fundDataDropdown.is_fund_esg\n .map((item) => ({\n value: item.code_code,\n title: item.code_description,\n }))\n .filter((item) => item.value !== '0')\n : []\n }, [fundDataDropdown?.is_fund_esg])\n\n return (\n \n \n \n }\n options={optionEsg}\n />\n \n \n \n
If Yes, please answer questions:
\n \n
\n }\n wrapperCol={10}\n labelCol={24}\n disabled={!isConsiderESG}\n allowClear\n options={\n selectableESGStrategies && selectableESGStrategies.length > 0\n ? selectableESGStrategies.map((item) => ({ value: item.code, text: item.name }))\n : []\n }\n />\n \n ESG Strategy Definitions available here:  \n \n HFR ESG Definitions PDF\n \n \n \n \n \n \n }\n wrapperCol={16}\n labelCol={5}\n allowClear\n disabled={!isConsiderESG || !form.getFieldValue('esg_strategy')}\n options={\n selectableESGSubStrategies && selectableESGSubStrategies.length > 0\n ? selectableESGSubStrategies\n .filter((item) => item.esg_strategy === form.getFieldValue('esg_strategy'))\n .map((item) => ({ value: item.code, text: item.name }))\n : []\n }\n />\n \n \n
\n DESCRIBE WHICH BEST DESCRIBES THE FUND"S APPLICATION OF ESG\n
\n
Select "Yes" or "No" foreach:
\n (\n \n
\n }\n // rules={[{ required: true, message: 'This Field is required!' }]}\n {...{ labelCol: { span: 18 }, wrapperCol: { span: 6 } }}\n style={{ flexDirection: 'row', alignItems: 'baseline', marginBottom: '0' }}\n >\n \n \n Yes\n \n No\n \n \n
\n
\n )}\n />\n \n \n
Select "Yes" or "No" foreach:
\n ENVIRONMENTAL}\n bordered\n dataSource={DESCRIBE_ESG_CRITERIA}\n style={{ width: '100%' }}\n renderItem={(item) => (\n \n
\n {item.isInput ? (\n }\n row={3}\n disable={!isConsiderESG}\n />\n ) : (\n }\n // rules={[{ required: true, message: 'This Field is required!' }]}\n {...{ labelCol: { span: 18 }, wrapperCol: { span: 6 } }}\n style={{ flexDirection: 'row', alignItems: 'baseline', marginBottom: '0' }}\n >\n \n Yes\n No\n \n \n )}\n
\n
\n )}\n />\n
\n \n
DESCRIBE ESG CRITERIA
\n
Select "Yes" or "No" foreach:
\n SOCIAL}\n bordered\n dataSource={DESCRIBE_ESG_SOCIAL}\n style={{ width: '100%' }}\n renderItem={(item) => (\n \n
\n {item.isInput ? (\n }\n row={3}\n disable={!isConsiderESG}\n />\n ) : (\n }\n // rules={[{ required: true, message: 'This Field is required!' }]}\n {...{ labelCol: { span: 18 }, wrapperCol: { span: 6 } }}\n style={{ flexDirection: 'row', alignItems: 'baseline', marginBottom: '0' }}\n >\n \n Yes\n No\n \n \n )}\n
\n
\n )}\n />\n
\n\n \n
Select "Yes" or "No" foreach:
\n GOVERNANCE}\n bordered\n dataSource={DESCRIBE_GOVERNANCE}\n style={{ width: '100%' }}\n renderItem={(item) => (\n \n
\n {item.isInput ? (\n }\n row={3}\n disable={!isConsiderESG}\n />\n ) : (\n }\n // rules={[{ required: true, message: 'This Field is required!' }]}\n {...{ labelCol: { span: 18 }, wrapperCol: { span: 6 } }}\n style={{ flexDirection: 'row', alignItems: 'baseline', marginBottom: '0' }}\n >\n \n Yes\n No\n \n \n )}\n
\n
\n )}\n />\n
\n \n
\n \n }\n // rules={[{ required: true, message: 'This Field is required!' }]}\n >\n \n Yes\n No\n \n \n \n \n \n
WHAT ESG DATA SOURCES ARE USED IN YOUR PROCESS
\n
Select "Yes" or "No" foreach:
\n (\n \n
\n {item.isInput ? (\n }\n row={3}\n disable={!isConsiderESG}\n />\n ) : (\n }\n // rules={[{ required: true, message: 'This Field is required!' }]}\n {...{ labelCol: { span: 18 }, wrapperCol: { span: 6 } }}\n style={{ flexDirection: 'row', alignItems: 'baseline', marginBottom: '0' }}\n >\n \n Yes\n No\n \n \n )}\n
\n
\n )}\n />\n
\n \n \n )\n}\n//\ntype FieldType = {\n name: string\n label: string\n isInput?: boolean\n}\nconst DESCRIBE_BEST_DESCRIBE: FieldType[] = [\n {\n name: 'app_positivescreen',\n label: 'Positive/best-in-class Screening',\n },\n {\n name: 'app_negativescreen',\n label: 'Negative/Exclusionary Screening',\n },\n {\n name: 'app_esgintegration',\n label: 'ESG Integration',\n },\n {\n name: 'app_impactinvest',\n label: 'Impact Investing',\n },\n {\n name: 'app_sustaininvest',\n label: 'Sustainability-themed Investing',\n },\n]\nconst DESCRIBE_ESG_CRITERIA: FieldType[] = [\n {\n name: 'env_greenbuilding',\n label: 'Green Building/ Smart Growth',\n },\n {\n name: 'env_climatechange',\n label: 'Climate Change/ Carbon',\n },\n {\n name: 'env_cleantech',\n label: 'Clean Technology',\n },\n {\n name: 'env_pollutiontaxes',\n label: 'Pollution / Toxics',\n },\n {\n name: 'env_sustainable',\n label: 'Sustainable Natural Resources / Agriculture',\n },\n {\n name: 'env_waterconservation',\n label: 'Water Use & Conservation',\n },\n {\n name: 'env_description',\n label: 'Additional Description Of How ENVIRONMENTAL Is Considered When Investing',\n isInput: true,\n },\n]\nconst DESCRIBE_ESG_SOCIAL: FieldType[] = [\n {\n name: 'soc_workplacesafety',\n label: 'Workplace Safety',\n },\n {\n name: 'soc_laborrelations',\n label: 'Labor Relations',\n },\n {\n name: 'soc_workplacebenefits',\n label: 'Workplace Benefits',\n },\n {\n name: 'soc_diversityantibias',\n label: 'Diversity & Anti-Bias Issues',\n },\n {\n name: 'soc_communitydev',\n label: 'Community Development',\n },\n {\n name: 'soc_avoidtobacco',\n label: 'Avoidance Of Tobacco Or Other Harmful Products',\n },\n {\n name: 'soc_humanrights',\n label: 'Human Rights',\n },\n {\n name: 'soc_description',\n label: 'Additional Description Of How SOCIAL Is Considered When Investing',\n isInput: true,\n },\n]\nconst DESCRIBE_GOVERNANCE: FieldType[] = [\n {\n name: 'gov_corppolcontrib',\n label: 'Corporate Political Contributions',\n },\n {\n name: 'gov_executivecomp',\n label: 'Executive Compensation',\n },\n {\n name: 'gov_boarddiversity',\n label: 'Board Diversity',\n },\n {\n name: 'gov_anticorruption',\n label: 'Anti-Corruption Pilicies',\n },\n {\n name: 'gov_boardindependence',\n label: 'Board Independence',\n },\n {\n name: 'gov_description',\n label: 'Additional Description Of How GOVERNANCE Is Considered When Investing',\n isInput: true,\n },\n]\nconst ESG_DATA_SOURCES: FieldType[] = [\n {\n name: 'data_msci',\n label: 'MSCI',\n },\n {\n name: 'data_sustainalytics',\n label: 'Sustainalytics',\n },\n {\n name: 'data_bloomberg',\n label: 'Bloomberg',\n },\n {\n name: 'data_factset',\n label: 'FactSet',\n },\n {\n name: 'data_internal',\n label: 'Proprietary Or Internally Developed Metrics',\n },\n {\n name: 'data_other',\n label: 'Other',\n isInput: true,\n },\n]\n","import { Col, Radio, Row } from 'antd'\nimport Form, { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FormItemCheckBox, FormItemInput } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExNewFund } from '../../../shared/components/RenderLabelExNewFund'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n margin-top: 1rem;\n padding: 0 2rem;\n`\n\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n form: FormInstance\n}\nconst ARRAY_FIELD_VALIDATE: string[] = ['mgmt_fee']\nexport const ExNewFundFeeSchedule: React.FC = ({ form, setActiveTab, setStepTab, activeTab, stepTab }) => {\n const isLiquidCheck = form.getFieldValue('liquid_alt_product') as boolean\n\n const arrayValidate = React.useMemo(() => {\n return isLiquidCheck\n ? [...ARRAY_FIELD_VALIDATE, 'max_12b1_fee', 'max_front_fee', 'max_deferred_fee']\n : [...ARRAY_FIELD_VALIDATE, 'incentive_fee', 'administrative_fee', 'hurdle_rate', 'is_high_watermark']\n }, [isLiquidCheck])\n\n const checkHurdleRate = form.getFieldValue('is_hurdle_rate')\n\n const LIST_FORM_INPUT = React.useMemo(() => {\n return [\n {\n name: 'incentive_fee',\n label: 'Incentive Fee %',\n maxLength: 30,\n hide: isLiquidCheck,\n rules: !isLiquidCheck ? [{ required: true, message: 'This Field is required!' }] : undefined,\n },\n {\n name: 'other_fees',\n label: 'Other Fees (Explain)',\n maxLength: 30,\n },\n {\n name: 'administrative_fee',\n label: 'Administrative Fee %',\n maxLength: 30,\n rules: [{ required: true, message: 'This Field is required!' }],\n },\n ]\n }, [isLiquidCheck])\n\n const LIST_FORM_FOOTER = React.useMemo(() => {\n return [\n {\n name: 'max_12b1_fee',\n label: 'Maximum 12B-1 Fee %',\n rules: isLiquidCheck ? [{ required: true, message: 'Maximum 12B-1 Fee % is required!' }] : undefined,\n maxLength: 30,\n hide: !isLiquidCheck,\n },\n {\n name: 'max_front_fee',\n label: 'Maximum Front-End Sales Load Fee %',\n maxLength: 30,\n rules: isLiquidCheck\n ? [{ required: true, message: 'Maximum Front-End Sales Load Fee % is required!' }]\n : undefined,\n hide: !isLiquidCheck,\n },\n {\n name: 'max_deferred_fee',\n label: 'Maximum Deferred Sales Load Fee %',\n maxLength: 30,\n rules: isLiquidCheck\n ? [{ required: true, message: 'Maximum Deferred Sales Load Fee % is required!' }]\n : undefined,\n hide: !isLiquidCheck,\n },\n ]\n }, [isLiquidCheck])\n\n return (\n \n \n
\n }\n wrapperCol={16}\n maxLength={30}\n rules={[{ required: true, message: 'Management Fee is required!' }]}\n />\n \n \n \n \n }\n wrapperCol={24}\n typeField=\"number\"\n // rules={[{ required: true, message: 'This Field is required!' }]}\n />\n \n \n }\n wrapperCol={24}\n normalize=\"number\"\n typeField=\"number\"\n />\n \n \n \n \n \n {LIST_FORM_INPUT.map((item) => {\n if (item.hide) {\n return null\n }\n return (\n \n }\n wrapperCol={16}\n maxLength={item.maxLength ? item.maxLength : undefined}\n rules={item.rules}\n />\n \n )\n })}\n \n {!isLiquidCheck && (\n \n \n }\n rules={[{ required: true, message: 'High Watermark is required' }]}\n {...{ wrapperCol: { span: 16 } }}\n >\n \n Yes\n No\n \n \n \n \n \n
\n \n
\n \n \n }\n />\n \n \n )}\n {isLiquidCheck && (\n \n
\n Note: Fees below applicable only to Liquid Alternative Products\n
\n
\n )}\n \n {LIST_FORM_FOOTER.map((item) => {\n if (item.hide) {\n return null\n }\n return (\n
\n }\n wrapperCol={16}\n maxLength={item.maxLength ? item.maxLength : undefined}\n rules={item.rules}\n />\n \n )\n })}\n \n\n \n \n )\n}\n","import { Button } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n flex-direction: column;\n padding: 0 2rem;\n`\ntype Props = { setActiveTab: (value: LeftNavExNewFundEnum) => void; loadingSubmit: boolean }\nexport const ExNewFundFinalStep: React.FC = ({ setActiveTab, loadingSubmit }) => {\n return (\n \n

\n You've completed all the steps - please click Create to create your fund!\n

\n\n
\n \n \n
\n
\n )\n}\n","import { Button, Col, Collapse, Divider, List, Row } from 'antd'\nimport React, { ReactFragment } from 'react'\nimport styled from 'styled-components'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { TAB_LIST_CREATE_NEW_FUND } from './ExNewFundMain'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n flex-direction: column;\n padding: 0 2rem;\n`\nconst { Panel } = Collapse\nconst LIST_NOTE: ReactFragment[] = [\n
\n 1. All funds must report performance on a monthly basis in order to use ManagerLink.\n
\n Please contact HFR at (312) 658-0955 or via email{' '}\n performance@hfr.com if your new fund does not report monthly performance.\n
,\n
\n 2. The process of adding a new fund requires that you enter your new fund information in sequence.\n
\n However, after you have completed the full 12-step process, you may add/edit your Fund Profile in any manner you\n wish.\n
,\n
\n 3. Creating a new fund via ManagerLink DOES NOT immediately add the fund to the HFR Database.\n
\n ALL new funds must be reviewed and approved by HFR before being activated.\n
\n When you are ready to add your fund to HFR Database please click the gold "activate fund" link located on\n the left side of the screen.\n
,\n]\nconst LIST_FIELD = [\n {\n title: 'Contact Information',\n field: [\n 'Performance Contact',\n 'Address Info',\n 'City',\n 'State',\n 'Country',\n 'Postal Code',\n 'Phone',\n 'Fax',\n 'Email',\n 'Website',\n ],\n },\n {\n title: 'Fund Principals',\n field: ['Name', 'Title'],\n },\n {\n title: 'General Information',\n field: [\n 'Investment Strategy',\n 'Investment Sub-Strategy',\n 'Regional Investment Focus',\n 'Minimum Investment',\n 'Additional Investment',\n 'Individual Account Minimum Investment',\n 'Open To New Investors',\n 'Domicile',\n 'Structure',\n 'Fund Registration',\n 'Open To Investor Type',\n 'Subscriptions',\n 'Redemptions',\n 'Advanced Notice Period',\n 'Lockup Period',\n 'Performance Reported To Investors Interval',\n 'Leverage Type',\n 'ISIN',\n 'UCITSIII compliance',\n 'Ticker',\n ],\n },\n {\n title: 'Fee Schedule',\n field: [\n 'Management Fee',\n 'Incentive Fee',\n 'High Watermark',\n 'Hurdle Rate',\n 'Redemption Fee',\n 'Administrative Fee',\n 'Sales Fee',\n 'Other Fee',\n ],\n },\n {\n title: 'Fund Administration',\n field: [\n 'Last Audit Date',\n 'Auditor Name',\n 'Prime Broker',\n 'Banking Agent',\n 'Administrator',\n 'Legal Adviser',\n 'Custodian',\n 'Consultant',\n ],\n },\n {\n title: 'Fund Investment Style',\n field: [\n 'Describe Your Investment Process',\n 'Hedging Techniques Used',\n 'Has Your Strategy Or Investment Process Change Over time?',\n 'What Are The Risks Inherent To Your Approach/methodology?',\n 'What Principles Are Used To Control Risk?',\n 'Do You Invest In Hot Issues?',\n 'Is This Fund Intended To Be Tax Efficient?(Domestic Funds Only)',\n 'Asset Level Where New Investment Will Not Be Accepted',\n 'What Factors Do You Consider When Determining The Maximum Capacity Of The Strategy?',\n 'Which Managers Do You Consider To Be Similar In Style To Your Approach?',\n ],\n },\n {\n title: 'Instruments',\n field: ['Date', 'Instrument', 'Long %', 'Short %', 'Net %'],\n },\n {\n title: 'Industry Group',\n field: ['Date', 'Industry Group', 'Long %', 'Short %', 'Net %'],\n },\n {\n title: 'Region Weight',\n field: ['Date', 'Region', 'Long %', 'Short %', 'Net %'],\n },\n {\n title: 'Leverage',\n field: ['Date', 'Minimum %', 'Maximum %', 'Average %'],\n },\n {\n title: 'Investor Type',\n field: ['Date', 'Investor Type', '% of Total Assets', '% of All Investors'],\n },\n]\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n}\nexport const ExNewFundInstruction: React.FC = ({ setStepTab, setActiveTab }) => {\n const handleNext = () => {\n setStepTab(TAB_LIST_CREATE_NEW_FUND[1].id)\n\n setActiveTab(TAB_LIST_CREATE_NEW_FUND[1].id)\n }\n\n return (\n \n \n \n \n (\n \n
\n {item.title}\n \n {item.field.map((field) => {\n return (\n
\n {field}\n \n )\n })}\n \n \n \n )}\n style={{ flex: 1 }}\n />\n \n \n \n \n Please Note}\n bordered\n dataSource={LIST_NOTE}\n renderItem={(item) => {item}}\n style={{ flex: 1 }}\n />\n \n \n \n \n \n )\n}\n","import { Col, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { ExFundFieldChange, FundDetails } from '../../../shared/api/models/FundDetails'\nimport { FormItemSelect, FormItemTextArea } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExNewFund } from '../../../shared/components/RenderLabelExNewFund'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { EMERGING_MARKET_SET } from '../../Dashboard/FundDetail/FundInformation/Region/FundInfoRegion'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n margin-top: 1rem;\n padding: 0 2rem;\n`\n\nconst ARRAY_FIELD_VALIDATE: string[] = [\n 'strategy_code_new',\n 'sub_strategy_code_new',\n 'region_inv_focus',\n 'strategy_description',\n 'region_inv_focus_country',\n]\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n form: FormInstance\n setDataFundDetailChange: (action: React.SetStateAction>) => void\n dataFundDetailChangeRef: React.MutableRefObject>\n}\nexport const ExNewFundInvestStrategy: React.FC = ({\n form,\n setStepTab,\n setActiveTab,\n setDataFundDetailChange,\n activeTab,\n stepTab,\n dataFundDetailChangeRef,\n}) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const GlobaldataDropdown = useSelector((state: RootState) => state.appData)\n const selectedStrategy = form.getFieldValue('strategy_code_new')\n\n const optionSubstrategy = React.useMemo(() => {\n const newSubStrategyOptions = selectedStrategy\n ? GlobaldataDropdown && GlobaldataDropdown.subStrategies && GlobaldataDropdown.subStrategies.length > 0\n ? GlobaldataDropdown.subStrategies\n .filter((i) => i.strategy_code === selectedStrategy)\n .map((item) => ({\n value: item.sub_strategy_code,\n text: item.sub_strategy_name,\n }))\n : []\n : []\n\n return newSubStrategyOptions\n }, [GlobaldataDropdown, selectedStrategy])\n\n React.useEffect(() => {\n if (\n dataFundDetailChangeRef?.current &&\n Object.keys(dataFundDetailChangeRef?.current).includes('strategy_code_new')\n ) {\n if (\n (selectedStrategy &&\n form.getFieldValue('sub_strategy_code_new') &&\n optionSubstrategy.length > 0 &&\n optionSubstrategy.findIndex((item) => item.value === form.getFieldValue('sub_strategy_code_new')) === -1) ||\n (!selectedStrategy && form.getFieldValue('sub_strategy_code_new'))\n ) {\n form.setFieldsValue({ sub_strategy_code_new: null })\n }\n }\n }, [form, selectedStrategy, optionSubstrategy, dataFundDetailChangeRef])\n\n const selectedRegion = form.getFieldValue('region_inv_focus')\n\n const regionCountryOptions = React.useMemo(() => {\n if (!fundDataDropdown) {\n return []\n }\n if (!fundDataDropdown.region_inv_focus_country || fundDataDropdown.region_inv_focus_country.length === 0) {\n return []\n }\n\n const options = selectedRegion\n ? fundDataDropdown.region_inv_focus_country.filter(\n (item) => item.code_code.slice(0, selectedRegion.length) === selectedRegion,\n )\n : fundDataDropdown.region_inv_focus_country\n return options.map((item) => ({ value: item.code_code, text: item.code_description }))\n }, [fundDataDropdown, selectedRegion])\n\n React.useEffect(() => {\n if (\n (selectedRegion &&\n form.getFieldValue('region_inv_focus_country') &&\n regionCountryOptions.length > 0 &&\n regionCountryOptions.findIndex((item) => item.value === form.getFieldValue('region_inv_focus_country')) ===\n -1) ||\n (!selectedRegion && form.getFieldValue('region_inv_focus_country'))\n ) {\n form.setFieldsValue({ region_inv_focus_country: null })\n setDataFundDetailChange((prev) => ({ ...prev, region_inv_focus_country: null }))\n }\n }, [form, regionCountryOptions, selectedRegion, setDataFundDetailChange])\n\n React.useEffect(() => {\n if (selectedRegion) {\n if (EMERGING_MARKET_SET.includes(selectedRegion)) {\n form.setFieldsValue({ is_emerging_markets_fund: true })\n setDataFundDetailChange((prev) => ({ ...prev, is_emerging_markets_fund: true }))\n } else {\n setDataFundDetailChange((prev) => ({ ...prev, is_emerging_markets_fund: false }))\n form.setFieldsValue({ is_emerging_markets_fund: false })\n }\n }\n }, [form, selectedRegion, setDataFundDetailChange])\n\n return (\n \n \n \n }\n labelCol={12}\n wrapperCol={18}\n rules={[{ required: true, message: 'Main Strategy Classification is required' }]}\n options={\n GlobaldataDropdown?.strategies && GlobaldataDropdown?.strategies.length > 0\n ? GlobaldataDropdown.strategies.map((item) => ({\n value: item.strategy_code,\n text: item.strategy_name,\n }))\n : []\n }\n />\n \n \n }\n labelCol={12}\n wrapperCol={18}\n disabled={!selectedStrategy}\n options={optionSubstrategy}\n rules={[{ required: true, message: 'Sub-Strategy Classification is required' }]}\n />\n \n \n }\n labelCol={12}\n wrapperCol={18}\n rules={[{ required: true, message: 'Regional Investment Focus is required' }]}\n options={\n fundDataDropdown?.region_inv_focus && fundDataDropdown?.region_inv_focus.length > 0\n ? fundDataDropdown.region_inv_focus\n .filter((i) => i.code_code !== '1')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n }\n labelCol={12}\n wrapperCol={18}\n options={regionCountryOptions}\n disabled={!selectedRegion}\n rules={[{ required: true, message: 'Sub-Region is required' }]}\n />\n \n \n \n }\n row={15}\n rules={[{ required: true, message: 'Strategy Description is required' }]}\n />\n \n \n \n )\n}\n","import { Collapse, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport moment from 'moment'\nimport React, { useMemo } from 'react'\nimport styled from 'styled-components'\nimport { ExNewFundContext } from '../../../shared/api/context/ExNewFundContext'\nimport DataSheet, { DataSheetType } from '../../../shared/components/DataSheet'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { DATE_FORMAT } from '../../Dashboard/FundDetail/FundROR/PerformanceUpdate'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n flex-direction: column;\n padding: 0 2rem;\n`\nconst { Panel } = Collapse\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n form: FormInstance\n}\nconst ARRAY_FIELD_VALIDATE: string[] = []\nexport const ExNewFundPerformance: React.FC = ({ form, setStepTab, setActiveTab, activeTab, stepTab }) => {\n const {\n setAssetDataChange,\n setNAVDataChange,\n setRORDataChange,\n rorDataChange,\n assetDataChange,\n navDataChange,\n } = React.useContext(ExNewFundContext)\n\n // eslint-disable-next-line\n const rorData = useMemo(() => rorDataChange.values, [])\n // eslint-disable-next-line\n const assetData = useMemo(() => assetDataChange.values, [])\n // eslint-disable-next-line\n const navData = useMemo(() => navDataChange.values, [])\n\n const currencyValue = form.getFieldValue('denomination')\n const reportingStyle = form.getFieldValue('reporting_style')\n const inceptionDate = moment(form.getFieldValue('inception_date')).format('YYYY-MM-DD')\n return (\n \n \n
\n Fund Inception Date: {inceptionDate}\n
\n
\n \n \n <>\n \n
\n Reporting Style: {reportingStyle}\n
\n
\n \n \n
\n\n \n \n \n \n \n \n
\n \n
\n )\n}\n","import { Col, Form, Radio, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemAutoComplete } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExNewFund } from '../../../shared/components/RenderLabelExNewFund'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n flex-direction: column;\n margin-top: 1rem;\n padding: 0 2rem;\n`\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n form: FormInstance\n}\nconst ARRAY_FIELD_VALIDATE: string[] = ['accepts_new_investment', 'min_invest', 'add_invest', 'accepts_mgd_accts']\nexport const ExNewFundRequirement: React.FC = ({ setStepTab, setActiveTab, activeTab, form, stepTab }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const [isManager, setIsManager] = React.useState(form.getFieldValue('accepts_mgd_accts') === '1')\n\n const optionsMinInvest =\n fundDataDropdown?.min_invest && fundDataDropdown.min_invest.length > 0\n ? fundDataDropdown.min_invest.map((item) => ({ value: item, text: item }))\n : []\n const optionsAdditional =\n fundDataDropdown?.add_invest && fundDataDropdown.add_invest.length > 0\n ? fundDataDropdown.add_invest.map((item) => ({ value: item, text: item }))\n : []\n const optionsAssetSize =\n fundDataDropdown?.min_invest_indv && fundDataDropdown.min_invest_indv.length > 0\n ? fundDataDropdown.min_invest_indv.map((item) => ({ value: item, text: item }))\n : []\n\n const arrayValidate = React.useMemo(() => {\n return isManager ? [...ARRAY_FIELD_VALIDATE, 'min_invest_indv', 'run_sep_mgd_accts'] : ARRAY_FIELD_VALIDATE\n }, [isManager])\n\n return (\n \n \n
\n }\n rules={[{ required: true, message: 'Product Open To New Investment is required' }]}\n {...{ wrapperCol: { span: 16 } }}\n >\n \n Yes\n No\n \n \n \n \n \n \n }\n labelCol={16}\n wrapperCol={16}\n options={optionsMinInvest}\n rules={[{ required: true, message: 'Minimum Investment is required' }]}\n />\n \n \n \n \n }\n labelCol={16}\n wrapperCol={16}\n options={optionsAdditional}\n rules={[{ required: true, message: 'Additional Investment is required' }]}\n />\n \n \n \n \n \n }\n {...{ wrapperCol: { span: 16 } }}\n rules={[\n {\n required: true,\n message: 'This Field is required!',\n },\n ({ getFieldValue, setFieldsValue }) => ({\n validator() {\n setIsManager(getFieldValue('accepts_mgd_accts') === '1')\n getFieldValue('accepts_mgd_accts') === '2' &&\n setFieldsValue({ min_invest_indv: null, run_sep_mgd_accts: null })\n\n return Promise.resolve()\n },\n }),\n ]}\n >\n \n Yes\n No\n \n \n \n \n {isManager && (\n <>\n \n \n }\n labelCol={16}\n wrapperCol={16}\n rules={\n isManager\n ? [\n {\n required: true,\n message: 'This Field is required!',\n },\n ]\n : []\n }\n options={optionsAssetSize}\n />\n \n \n \n \n }\n {...{ wrapperCol: { span: 16 } }}\n rules={\n isManager\n ? [\n {\n required: true,\n message: 'This Field is required!',\n },\n ]\n : []\n }\n >\n \n Yes\n No\n \n \n \n \n \n )}\n \n \n )\n}\n","import { Col, Form, Radio, Row, Select } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemDatePicker, FormItemInput } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExNewFund } from '../../../shared/components/RenderLabelExNewFund'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n flex-direction: column;\n padding: 0 2rem;\n`\nconst LIST_FORM_INPUT_BOTTOM = [\n {\n name: 'placement_agent',\n label: 'Placement Agent (Enter None, If Not Applicable)',\n maxLength: 60,\n rules: [\n { required: true, message: 'Placement Agent is required!' },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ],\n },\n {\n label: 'Banking Agent (Enter None, If Not Applicable)',\n name: 'banking_agent',\n maxLength: 60,\n rules: [\n { required: true, message: 'Banking Agent is required!' },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ],\n },\n {\n label: 'Custodian (Enter None, If Not Applicable)',\n name: 'custodian',\n maxLength: 60,\n rules: [\n { required: true, message: 'Custodian is required!' },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ],\n },\n {\n label: 'Consultant (Enter None, If Not Applicable)',\n name: 'consultant',\n maxLength: 60,\n rules: [\n { required: true, message: 'Consultant is required!' },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ],\n },\n]\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n form: FormInstance\n}\n\nexport const ExNewFundServiceProviders: React.FC = ({ form, setStepTab, setActiveTab, activeTab, stepTab }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const [isSpecifiedAuditorName, setIsSpecifiedAuditorName] = React.useState(\n form.getFieldValue('auditor_name') === 'Other',\n )\n const [isSpecifiedLegalAdviser, setIsSpecifiedLegalAdviser] = React.useState(\n form.getFieldValue('legal_adviser') === 'Other',\n )\n const [isSpecifiedPrimeBroker, setIsSpecifiedPrimeBroker] = React.useState(\n form.getFieldValue('prime_broker') === 'Other',\n )\n const [isSpecifiedAdministrator, setIsSpecifiedAdministrator] = React.useState(\n form.getFieldValue('administrator') === 'Other',\n )\n\n const ARRAY_FIELD_VALIDATE: string[] = React.useMemo(() => {\n const array = [\n 'is_annual_performance_audit',\n 'auditor_name',\n 'legal_adviser',\n 'administrator',\n 'placement_agent',\n 'banking_agent',\n 'custodian',\n 'consultant',\n 'prime_broker',\n ]\n if (isSpecifiedAuditorName) {\n array.push('auditor_name_input')\n }\n if (isSpecifiedLegalAdviser) {\n array.push('legal_adviser_input')\n }\n if (isSpecifiedPrimeBroker) {\n array.push('prime_broker_input')\n }\n if (isSpecifiedAdministrator) {\n array.push('administrator_input')\n }\n return array\n }, [isSpecifiedAdministrator, isSpecifiedAuditorName, isSpecifiedLegalAdviser, isSpecifiedPrimeBroker])\n\n const optionsAuditorName =\n fundDataDropdown?.auditor_name && fundDataDropdown?.auditor_name.length > 0\n ? fundDataDropdown?.auditor_name.map((item) => ({ value: item, text: item }))\n : []\n\n const optionsLegalAdviser =\n fundDataDropdown?.legal_adviser && fundDataDropdown?.legal_adviser.length > 0\n ? fundDataDropdown?.legal_adviser.map((item) => ({ value: item, text: item }))\n : []\n const optionsPrimeBroker =\n fundDataDropdown?.prime_broker && fundDataDropdown?.prime_broker.length > 0\n ? fundDataDropdown?.prime_broker.map((item) => ({ value: item, text: item }))\n : []\n const optionsAdministrator =\n fundDataDropdown?.administrator && fundDataDropdown?.administrator.length > 0\n ? fundDataDropdown?.administrator.map((item) => ({ value: item, text: item }))\n : []\n\n React.useEffect(() => {\n if (!isSpecifiedAuditorName) {\n form.setFieldsValue({ auditor_name_input: null })\n }\n if (!isSpecifiedLegalAdviser) {\n form.setFieldsValue({ legal_adviser_input: null })\n }\n if (!isSpecifiedPrimeBroker) {\n form.setFieldsValue({ prime_broker_input: null })\n }\n if (!isSpecifiedAdministrator) {\n form.setFieldsValue({ administrator_input: null })\n }\n }, [form, isSpecifiedAdministrator, isSpecifiedAuditorName, isSpecifiedLegalAdviser, isSpecifiedPrimeBroker])\n\n return (\n \n \n \n }\n rules={[{ required: true, message: 'Annual Performance Audit is required!' }]}\n >\n \n Yes\n No\n \n \n \n \n }\n wrapperCol={16}\n />\n \n \n\n \n \n }\n {...{ wrapperCol: { span: 16 } }}\n style={{ display: 'flex', flex: 1 }}\n rules={[\n {\n required: true,\n message: 'Auditor Name is required!',\n },\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedAuditorName(getFieldValue('auditor_name') === 'Other')\n return Promise.resolve()\n },\n }),\n ]}\n >\n \n \n \n \n }\n wrapperCol={16}\n maxLength={60}\n rules={\n isSpecifiedAuditorName\n ? [\n {\n required: true,\n message: 'Auditor Name is required!',\n },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ]\n : undefined\n }\n disabled={!isSpecifiedAuditorName}\n placeholder=\"Auditor Name\"\n />\n \n \n\n \n \n }\n {...{ wrapperCol: { span: 16 } }}\n style={{ display: 'flex', flex: 1 }}\n rules={[\n {\n required: true,\n message: 'Legal Adviser is required!',\n },\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedLegalAdviser(getFieldValue('legal_adviser') === 'Other')\n return Promise.resolve()\n },\n }),\n ]}\n >\n \n \n \n \n }\n wrapperCol={16}\n disabled={!isSpecifiedLegalAdviser}\n placeholder=\"Legal Adviser\"\n maxLength={60}\n rules={\n isSpecifiedLegalAdviser\n ? [\n {\n required: true,\n message: 'Legal Adviser is required!',\n },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ]\n : undefined\n }\n />\n \n \n\n \n \n }\n {...{ wrapperCol: { span: 16 } }}\n style={{ display: 'flex', flex: 1 }}\n rules={[\n { required: true, message: 'Prime Broker is required!' },\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedPrimeBroker(getFieldValue('prime_broker') === 'Other')\n return Promise.resolve()\n },\n }),\n ]}\n >\n \n \n \n \n }\n wrapperCol={16}\n disabled={!isSpecifiedPrimeBroker}\n placeholder=\"Prime Broker\"\n maxLength={60}\n rules={\n isSpecifiedPrimeBroker\n ? [\n {\n required: true,\n message: 'Prime Broker is required!',\n },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ]\n : undefined\n }\n />\n \n \n\n \n \n }\n {...{ wrapperCol: { span: 16 } }}\n style={{ display: 'flex', flex: 1 }}\n rules={[\n { required: true, message: 'Administrator is required!' },\n ({ getFieldValue }) => ({\n validator() {\n setIsSpecifiedAdministrator(getFieldValue('administrator') === 'Other')\n return Promise.resolve()\n },\n }),\n ]}\n >\n \n \n \n \n }\n wrapperCol={16}\n disabled={!isSpecifiedAdministrator}\n placeholder=\"Administrator\"\n maxLength={60}\n rules={\n isSpecifiedAdministrator\n ? [\n {\n required: true,\n message: 'Administrator is required!',\n },\n {\n pattern: /^.{0,60}$/,\n message: 'Value should be less than 60 character',\n },\n ]\n : undefined\n }\n />\n \n \n \n {LIST_FORM_INPUT_BOTTOM.map((item) => {\n return (\n \n }\n placeholder={item.label}\n rules={item.rules}\n maxLength={item.maxLength}\n />\n \n )\n })}\n \n \n \n )\n}\n","import { Col, Form, Radio, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemInput, FormItemRadio, FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExNewFund } from '../../../shared/components/RenderLabelExNewFund'\nimport { LeftNavExNewFundEnum } from '../../../shared/SearchExNewFundLabel'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n margin-top: 1rem;\n flex-direction: column;\n padding: 0 2rem;\n`\ntype Props = {\n setStepTab: (value: LeftNavExNewFundEnum) => void\n setActiveTab: (value: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n stepTab: LeftNavExNewFundEnum\n form: FormInstance\n}\nconst ARRAY_FIELD_VALIDATE: string[] = [\n 'investor_type',\n 'equity_subscription',\n 'subscription_advance_notice',\n 'subscription_cutoff_time',\n 'subscription_cutoff_timezone',\n 'subscription_settlement_days',\n 'equity_redemption',\n 'redemption_return_percent',\n 'redemption_return_days',\n 'gate_fund',\n 'gate_investor',\n 'use_of_leverage_type',\n 'is_lockup',\n 'ucitsiii',\n 'redemption_advance_notice',\n 'balance_redemption_return_days',\n]\n\nexport const ExNewFundStructure: React.FC = ({ form, setStepTab, setActiveTab, stepTab, activeTab }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n\n const lockupField = form.getFieldValue('is_lockup') === '1'\n const isLiquidCheck = form.getFieldValue('liquid_alt_product') as boolean\n const domicileField = form.getFieldValue('domicile')\n\n React.useEffect(() => {\n if (domicileField !== 'Other') {\n form.setFieldsValue({ domicile_input: null })\n }\n }, [domicileField, form])\n\n const ArrayValidate = React.useMemo(() => {\n const array = domicileField === 'Other' ? [...ARRAY_FIELD_VALIDATE, 'domicile_input'] : ARRAY_FIELD_VALIDATE\n if (isLiquidCheck) {\n return lockupField ? [...array, 'lockup_type', 'lockup_period'] : array\n } else {\n const arrayField = [...array, 'domicile', 'structure', 'registration_code']\n return lockupField ? [...arrayField, 'lockup_type', 'lockup_period'] : arrayField\n }\n }, [domicileField, isLiquidCheck, lockupField])\n\n const LIST_FORM = [\n {\n name: 'investor_type',\n label: 'Open To Investor Type',\n options:\n fundDataDropdown?.investor_type && fundDataDropdown.investor_type.length > 0\n ? fundDataDropdown.investor_type.map((item) => ({ value: item, text: item }))\n : [],\n rules: [{ required: true, message: 'Open To Investor Type is required!' }],\n },\n {\n name: 'equity_subscription',\n label: 'Subscription Frequency',\n options:\n fundDataDropdown?.equity_subscription && fundDataDropdown.equity_subscription.length > 0\n ? fundDataDropdown.equity_subscription.map((item) => ({ value: item.code_code, text: item.code_description }))\n : [],\n rules: [{ required: true, message: 'Subscription Frequency is required!' }],\n },\n {\n name: 'subscription_advance_notice',\n label: 'Subscription Advanced Notice (Days)',\n options:\n fundDataDropdown?.subscription_advance_notice && fundDataDropdown.subscription_advance_notice.length > 0\n ? fundDataDropdown.subscription_advance_notice.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Subscription Advanced Notice (Days) is required!' }],\n },\n {\n name: 'subscription_cutoff_time',\n label: 'Subscription Cut Off By (Time)',\n options:\n fundDataDropdown?.subscription_cutoff_time && fundDataDropdown.subscription_cutoff_time.length > 0\n ? fundDataDropdown.subscription_cutoff_time.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Subscription Cut Off By (Time) is required!' }],\n },\n {\n name: 'subscription_cutoff_timezone',\n label: 'Subscription Cut Off By (Time Zone)',\n options:\n fundDataDropdown?.subscription_cutoff_timezone && fundDataDropdown.subscription_cutoff_timezone.length > 0\n ? fundDataDropdown.subscription_cutoff_timezone.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Subscription Cut Off By (Time Zone) is required!' }],\n },\n {\n name: 'subscription_settlement_days',\n label: 'Subscription Settlement (Days)',\n options:\n fundDataDropdown?.subscription_settlement_days && fundDataDropdown.subscription_settlement_days.length > 0\n ? fundDataDropdown.subscription_settlement_days.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Subscription Settlement (Days) is required!' }],\n },\n {\n name: 'equity_redemption',\n label: 'Redemption Frequency',\n options:\n fundDataDropdown?.equity_redemption && fundDataDropdown.equity_redemption.length > 0\n ? fundDataDropdown.equity_redemption.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Redemption Frequency is required!' }],\n },\n {\n name: 'redemption_advance_notice',\n label: 'Redemption Advanced Notice (Days)',\n typeField: 'number',\n normalize: 'number',\n rules: [{ required: true, message: 'Redemption Advanced Notice (Days) is required!' }],\n },\n {\n name: 'redemption_return_percent',\n label: 'Initial % Of Redemption Returned',\n rules: [{ required: true, message: 'Initial % Of Redemption Returned is required!' }],\n typeField: 'number',\n normalize: 'number',\n },\n {\n name: 'redemption_return_days',\n label: 'Initial Redemption Returned Within (Days)',\n rules: [{ required: true, message: 'Initial Redemption Returned Within (Days) is required!' }],\n typeField: 'number',\n normalize: 'number',\n },\n {\n name: 'balance_redemption_return_days',\n label: 'Redemption Balance Returned Within (Days)',\n typeField: 'number',\n normalize: 'number',\n rules: [{ required: true, message: 'Redemption Balance Returned Within (Days) is required!' }],\n },\n {\n name: 'is_lockup',\n label: 'Lockup',\n isRadio: true,\n options:\n fundDataDropdown?.is_lockup && fundDataDropdown.is_lockup.length > 0\n ? fundDataDropdown.is_lockup\n .filter((i) => i.code_code !== '0')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Lockup is required!' }],\n },\n ]\n const LIST_FORM_LOCKUP = [\n {\n name: 'lockup_type',\n label: 'Lockup Type',\n disabled: !lockupField,\n options:\n fundDataDropdown?.lockup_type && fundDataDropdown.lockup_type.length > 0\n ? fundDataDropdown.lockup_type\n .filter((i) => i.code_code !== '0')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Lockup Type is required!' }],\n },\n {\n name: 'lockup_period',\n label: 'Lockup Period',\n disabled: !lockupField,\n options:\n fundDataDropdown?.lockup_period && fundDataDropdown.lockup_period.length > 0\n ? fundDataDropdown.lockup_period.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Lockup Period is required!' }],\n },\n ]\n const LIST_FORM_GATE = [\n {\n name: 'gate_fund',\n label: 'Gate: Fund-Level',\n options:\n fundDataDropdown?.gate_fund && fundDataDropdown.gate_fund.length > 0\n ? fundDataDropdown.gate_fund\n .filter((i) => i.code_code !== '0')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Gate:Fund Level is required!' }],\n },\n {\n name: 'gate_investor',\n label: 'Gate: Investor-Level',\n options:\n fundDataDropdown?.gate_investor && fundDataDropdown.gate_investor.length > 0\n ? fundDataDropdown.gate_investor\n .filter((i) => i.code_code !== '0')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Gate:Investor Level is required!' }],\n },\n {\n name: 'performance_reporting',\n label: 'Performance Reporting Interval to Investors',\n options:\n fundDataDropdown?.performance_reporting && fundDataDropdown.performance_reporting.length > 0\n ? fundDataDropdown.performance_reporting.map((item) => ({\n value: item,\n text: item,\n }))\n : [],\n },\n {\n name: 'use_of_leverage_type',\n label: 'Leverage Type',\n options:\n fundDataDropdown?.use_of_leverage_type && fundDataDropdown.use_of_leverage_type.length > 0\n ? fundDataDropdown.use_of_leverage_type\n .filter((i) => i.code_code !== '5')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n rules: [{ required: true, message: 'Leverage Type is required!' }],\n },\n ]\n const LIST_FORM_FOOTER = [\n {\n name: 'isin',\n label: 'ISIN',\n maxLength: 20,\n },\n {\n name: 'bloomberg_ticker',\n label: 'Ticker',\n maxLength: 20,\n },\n ]\n\n return (\n \n {!isLiquidCheck && (\n \n \n }\n {...{ wrapperCol: { span: 16 } }}\n >\n \n U.S.\n Offshore\n \n \n \n \n }\n wrapperCol={16}\n options={\n fundDataDropdown?.registration_code && fundDataDropdown.registration_code.length > 0\n ? fundDataDropdown.registration_code.map((item) => ({ value: item, text: item }))\n : []\n }\n />\n \n \n }\n wrapperCol={16}\n options={\n fundDataDropdown?.domicile && fundDataDropdown.domicile.length > 0\n ? fundDataDropdown.domicile.map((item) => ({ value: item, text: item }))\n : []\n }\n />\n \n \n }\n wrapperCol={16}\n maxLength={30}\n rules={\n domicileField === 'Other'\n ? [\n {\n required: true,\n message: 'Domicile is required!',\n },\n ]\n : undefined\n }\n disabled={domicileField !== 'Other'}\n />\n \n \n }\n wrapperCol={16}\n options={\n fundDataDropdown?.structure && fundDataDropdown.structure.length > 0\n ? fundDataDropdown.structure.map((item) => ({ value: item, text: item }))\n : []\n }\n />\n \n \n \n }\n wrapperCol={16}\n options={\n fundDataDropdown?.gate_fund && fundDataDropdown.gate_fund.length > 0\n ? fundDataDropdown.gate_fund\n .filter((i) => i.code_code !== '0')\n .map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n )}\n \n {LIST_FORM.map((item) => {\n if (item.name === 'redemption_return_percent' || item.name === 'redemption_return_days') {\n return (\n \n }\n wrapperCol={16}\n normalize={item.normalize}\n typeField={item.typeField}\n rules={[\n ...item.rules,\n item.name === 'redemption_return_percent'\n ? () => ({\n validator(rule, value) {\n if ((value >= 0 && value <= 100) || value === null) {\n return Promise.resolve()\n }\n return Promise.reject('Value must be between 0 and 100!')\n },\n })\n : () => ({\n validator(rule, value) {\n if (value >= 0 || value === null) {\n return Promise.resolve()\n }\n return Promise.reject('Value must be greater than or equal to 0!')\n },\n }),\n ]}\n />\n \n )\n }\n return (\n \n {item.isRadio ? (\n }\n rules={item.rules}\n options={item.options.map((item) => ({ value: item.value, title: item.text }))}\n />\n ) : item.options ? (\n }\n wrapperCol={16}\n options={item.options}\n rules={item.rules}\n />\n ) : (\n }\n wrapperCol={16}\n rules={item.rules}\n typeField={item.typeField}\n normalize={item.normalize}\n min={0}\n />\n )}\n \n )\n })}\n \n {lockupField && (\n \n {LIST_FORM_LOCKUP.map((item) => {\n return (\n \n }\n wrapperCol={16}\n options={item.options}\n rules={item.rules}\n disabled={item.disabled}\n />\n \n )\n })}\n \n )}\n \n {LIST_FORM_GATE.map((item) => {\n return (\n \n }\n wrapperCol={16}\n options={item.options}\n rules={item.rules}\n />\n \n )\n })}\n \n \n \n \n }\n rules={[{ required: true, message: 'This Field is required!' }]}\n {...{ wrapperCol: { span: 16 } }}\n options={\n fundDataDropdown?.ucitsiii && fundDataDropdown.ucitsiii.length > 0\n ? fundDataDropdown.ucitsiii\n .filter((i) => i !== 'Not Responded')\n .map((item) => ({ value: item, title: item }))\n : []\n }\n />\n \n \n \n {LIST_FORM_FOOTER.map((item) => {\n return (\n \n }\n wrapperCol={16}\n maxLength={item.maxLength}\n />\n \n )\n })}\n \n \n \n )\n}\n","import { SearchOutlined } from '@ant-design/icons'\nimport { AutoComplete, Button, Input, Popconfirm } from 'antd'\nimport Text from 'antd/lib/typography/Text'\nimport React from 'react'\nimport styled from 'styled-components'\nimport {\n LeftNavExNewFundEnum,\n ListSearchExNewFundType,\n renderSearchListExNewFund,\n} from '../../../shared/SearchExNewFundLabel'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\n\ntype PropsTitle = {\n optionFillter: ListSearchExNewFundType[]\n textFilterSearch: string\n setOptionFilter: (value: ListSearchExNewFundType[]) => void\n settextFilterSearch: (value: string) => void\n setActiveTab: (index: LeftNavExNewFundEnum) => void\n activeTab: LeftNavExNewFundEnum\n isUpdateFund?: boolean\n onCancel?: () => void\n}\nexport const ExNewFundTitle: React.FC = ({\n setOptionFilter,\n settextFilterSearch,\n textFilterSearch,\n setActiveTab,\n onCancel,\n isUpdateFund,\n activeTab,\n}) => {\n const [optionShow, setOptionShow] = React.useState(renderSearchListExNewFund)\n\n const handleSearch = (value: any) => {\n settextFilterSearch(value)\n const newOption = renderSearchListExNewFund.filter(\n (item) => item.name.toUpperCase().indexOf(value.toUpperCase()) !== -1,\n )\n setOptionFilter(newOption)\n setOptionShow(newOption)\n if (newOption.findIndex((item) => item.leftNav === activeTab) === -1 && newOption.length > 0) {\n setActiveTab(newOption[0].leftNav)\n }\n }\n\n return (\n \n \n
\n Create New Fund\n
\n \n {\n if (options.label) {\n const text = options.label.toLocaleString()\n settextFilterSearch(text)\n const newOption = renderSearchListExNewFund.filter(\n (item) => item.name.toUpperCase().indexOf(text.toUpperCase()) !== -1,\n )\n setOptionShow(newOption)\n const saveOption = newOption.filter((item) => item.key === value)\n setOptionFilter(saveOption)\n if (saveOption.findIndex((item) => item.leftNav === activeTab) === -1 && newOption.length > 0) {\n setActiveTab(saveOption[0].leftNav)\n }\n }\n }}\n onSearch={handleSearch}\n options={optionShow.map((item) => ({ value: item.key, label: item.name }))}\n allowClear\n value={textFilterSearch}\n style={{ width: 200, height: 32, marginRight: 8 }}\n >\n } />\n \n {isUpdateFund ? (\n \n \n \n ) : (\n \n )}\n \n
\n
\n )\n}\n","import { Card, Col, Empty, Form, notification, Row } from 'antd'\nimport { useForm } from 'antd/lib/form/util'\nimport moment from 'moment'\nimport React, { SetStateAction, useCallback, useRef } from 'react'\nimport PerfectScrollbar from 'react-perfect-scrollbar'\nimport { useDispatch } from 'react-redux'\nimport styled from 'styled-components'\nimport { isNull } from 'util'\nimport APIService from '../../../shared/api'\nimport { ExNewFundContext } from '../../../shared/api/context/ExNewFundContext'\nimport { ExNewFundLabelSearchProvider } from '../../../shared/api/context/ExNewFundLabelSearchContext'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { ExFundFieldChange, FundDetails } from '../../../shared/api/models/FundDetails'\nimport { MinorityType } from '../../../shared/api/services/minority.service'\nimport { Colors } from '../../../shared/colors'\nimport { TabContentWrapper } from '../../../shared/components/TabContentWrapper'\nimport { useDraft } from '../../../shared/DraftManager'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { LeftNavExNewFundEnum, renderSearchListExNewFund } from '../../../shared/SearchExNewFundLabel'\nimport { addTabs, FundFirmTypeEnum, PREFIX_EXTERNAL, removeTabs } from '../../../slice/appSettingsSlice'\nimport CMIC from '../../Dashboard/FundDetail/CMIC/CMIC'\nimport { ExNewFundContact } from './ExNewFundContact'\nimport { ExNewFundCreateFundProfile } from './ExNewFundCreateFundProfile'\nimport ExNewFundDI from './ExNewFundDI'\nimport { ExNewFundESGFactor } from './ExNewFundESGFactor'\nimport { ExNewFundFeeSchedule } from './ExNewFundFeeSchedule'\nimport { ExNewFundFinalStep } from './ExNewFundFinalStep'\nimport { ExNewFundInstruction } from './ExNewFundInstruction'\nimport { ExNewFundInvestStrategy } from './ExNewFundInvestStrategy'\nimport { ExNewFundPerformance } from './ExNewFundPerformance'\nimport { ExNewFundRequirement } from './ExNewFundRequirement'\nimport { ExNewFundServiceProviders } from './ExNewFundServiceProvider'\nimport { ExNewFundStructure } from './ExNewFundStructure'\nimport { ExNewFundTitle } from './ExNewFundTitle'\nimport { NextBackNewFundTab } from './NextBackExNewFundTab'\n\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\nconst StyledCard = styled(Card)`\n overflow: hidden;\n .ant-card-head {\n padding: 0 1rem;\n }\n .ant-card-head-title {\n padding: 0;\n }\n .ant-card-body {\n padding: 0;\n overflow: hidden;\n }\n .ant-card-head {\n border-bottom: 2px solid #f0f0f0 !important;\n }\n`\nconst StyledForm = styled(Form)`\n flex: 1;\n overflow: hidden;\n height: 100%;\n .ant-form-item {\n margin-bottom: 8px;\n }\n`\n\nconst StyledTabList = styled.div<{ active?: boolean; isCanSelect?: boolean }>`\n background: ${(props) => (props.active ? '#EDF6FF' : '#fff')};\n font-weight: ${(props) => (props.active ? 'bold' : 'none')};\n color: ${(props) => (props.isCanSelect ? Colors.black : Colors.gray)};\n display: flex;\n flex: 1;\n align-items: center;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n border-top: none;\n padding: 1rem 0 1rem 3rem;\n :hover {\n cursor: pointer;\n }\n`\n\nexport const TAB_LIST_CREATE_NEW_FUND = [\n {\n id: LeftNavExNewFundEnum.INSTRUCTION,\n },\n {\n id: LeftNavExNewFundEnum.CREATE_FUND_PROFILE,\n },\n {\n id: LeftNavExNewFundEnum.INVESTMENT_STRATEGY,\n },\n {\n id: LeftNavExNewFundEnum.INVESTMENT_REQUIREMENTS,\n },\n {\n id: LeftNavExNewFundEnum.CONTACT_INFORMATION,\n },\n {\n id: LeftNavExNewFundEnum.STRUCTURE,\n },\n {\n id: LeftNavExNewFundEnum.FEE_SCHEDULE,\n },\n {\n id: LeftNavExNewFundEnum.SERVICE_PROVIDERS,\n },\n {\n id: LeftNavExNewFundEnum.FUND_ESG_FACTORS,\n },\n {\n id: LeftNavExNewFundEnum.FUND_DIVERSITY_INCLUSION,\n },\n {\n id: LeftNavExNewFundEnum.FUND_PERFORMANCE,\n },\n {\n id: LeftNavExNewFundEnum.FUND_CMIC,\n },\n {\n id: LeftNavExNewFundEnum.COMPLETE,\n },\n]\nconst dateFormattedFields = [\n 'firm_assets_date',\n 'fund_assets_date',\n 'inception_date',\n 'om_date',\n 'multi_manager_platform_reviewed_date',\n 'liquidated_at',\n 'last_audit_date',\n 'most_recent_review',\n 'hfri500_reviewed',\n]\n\nconst fieldFormatNumber = ['min_invest', 'add_invest']\nconst fieldFormatInput = ['auditor_name', 'legal_adviser', 'prime_broker', 'administrator', 'domicile']\nconst fieldInputNotAdd = [\n 'auditor_name_input',\n 'legal_adviser_input',\n 'prime_broker_input',\n 'administrator_input',\n 'domicile_input',\n '_rorDataChange',\n '_assetDataChange',\n '_navDataChange',\n]\n\ntype Props = { setShouldUpdate: (value: boolean) => void }\n\nexport const ExNewFundMain: React.FC = () => {\n const {\n rorDataChange,\n assetDataChange,\n navDataChange,\n setRORDataChange,\n setAssetDataChange,\n setNAVDataChange,\n fundDataDropdown,\n } = React.useContext(ExNewFundContext)\n const [activeTab, setActiveTab] = React.useState(LeftNavExNewFundEnum.INSTRUCTION)\n const [optionFilter, setOptionFilter] = React.useState(renderSearchListExNewFund)\n const [textFilterSearch, settextFilterSearch] = React.useState('')\n const [loadingSubmitForm, setLoadingSubmitForm] = React.useState(false)\n // const [tabList, setTabList] = React.useState(TAB_LIST_CREATE_NEW_FUND)\n const [stepTab, setStepTab] = React.useState(LeftNavExNewFundEnum.INSTRUCTION)\n const [isUpdated, setIsUpdated] = React.useState(false)\n const { dataFirms, firmIdChoose } = React.useContext(FundDetailDropdownContext)\n const { clearSnapshot, loadSnapshot, saveSnapshot } = useDraft()\n const dataFundDetailChangeRef = useRef>({})\n // const [dataFundDetailChange, setDataFundDetailChange] = React.useState>({})\n\n const [form] = useForm()\n const dispatch = useDispatch()\n\n const { invoke: getFirmDetail, data: dataFirmDetail, loading } = useServiceState(\n APIService.firmDetailService.fetchFirmInfo,\n )\n\n React.useEffect(() => {\n if (firmIdChoose) {\n getFirmDetail(firmIdChoose)\n }\n }, [firmIdChoose, getFirmDetail])\n\n const { invoke: getAllMinorityTypes, data: minorityTypes } = useServiceState(\n APIService.minorityService.fetchMinorityTypes,\n )\n\n React.useEffect(() => {\n const countryCode = dataFirmDetail?.country\n if (!countryCode) {\n return\n }\n getAllMinorityTypes(countryCode)\n }, [dataFirmDetail?.country, getAllMinorityTypes])\n\n const firmCountry = fundDataDropdown?.firm_contact_country.find((item) => item.code_code === dataFirmDetail?.country)\n\n React.useEffect(() => {\n const draft = loadSnapshot('exFundDraft', 'new-fund')\n if (draft) {\n dataFundDetailChangeRef.current = draft\n setIsUpdated(true)\n setRORDataChange(draft._rorDataChange || { values: undefined })\n setAssetDataChange(draft._assetDataChange || { values: undefined })\n setNAVDataChange(draft._navDataChange || { values: undefined })\n form.setFieldsValue(dataFundDetailChangeRef.current)\n\n // @ts-ignore\n form.draft = draft\n }\n }, [form, loadSnapshot, setAssetDataChange, setNAVDataChange, setRORDataChange])\n\n const debouceRef = useRef(null)\n const setDataFundDetailChange = useCallback(\n (action: SetStateAction>) => {\n setIsUpdated(true)\n dataFundDetailChangeRef.current = typeof action === 'object' ? action : action(dataFundDetailChangeRef.current)\n if (debouceRef.current) {\n clearTimeout(debouceRef.current)\n }\n\n debouceRef.current = setTimeout(() => {\n saveSnapshot('exFundDraft', {\n data: Object.keys(dataFundDetailChangeRef.current).length > 0 ? dataFundDetailChangeRef.current : undefined,\n id: 'new-fund',\n name: 'New Fund',\n })\n }, 300)\n },\n [saveSnapshot],\n )\n\n React.useEffect(() => {\n setDataFundDetailChange((prevState) => ({\n ...prevState,\n _rorDataChange: rorDataChange,\n _assetDataChange: assetDataChange,\n _navDataChange: navDataChange,\n }))\n }, [rorDataChange, assetDataChange, navDataChange, setDataFundDetailChange])\n\n const handleSubmit = async () => {\n const fieldChange: Partial = Object.keys(dataFundDetailChangeRef.current).reduce(\n (accum, key) => {\n if (fieldFormatInput.includes(key)) {\n if (dataFundDetailChangeRef.current[key as keyof FundDetails] === 'Other') {\n switch (key) {\n case 'auditor_name':\n return { ...accum, auditor_name: dataFundDetailChangeRef.current.auditor_name_input }\n case 'legal_adviser':\n return { ...accum, legal_adviser: dataFundDetailChangeRef.current.legal_adviser_input }\n case 'prime_broker':\n return { ...accum, prime_broker: dataFundDetailChangeRef.current.prime_broker_input }\n case 'administrator':\n return { ...accum, administrator: dataFundDetailChangeRef.current.administrator_input }\n case 'domicile':\n return { ...accum, domicile: dataFundDetailChangeRef.current.domicile_input }\n default:\n break\n }\n }\n }\n if (fieldInputNotAdd.includes(key)) {\n return accum\n }\n\n if (key === 'min_invest_indv') {\n return dataFundDetailChangeRef.current['accepts_mgd_accts'] === '2'\n ? accum\n : {\n ...accum,\n [key]: dataFundDetailChangeRef.current['min_invest_indv']\n ? parseInt(dataFundDetailChangeRef.current['min_invest_indv'].replace(/,0/g, '0'))\n : 0,\n }\n }\n\n if (key === 'run_sep_mgd_accts' && dataFundDetailChangeRef.current['accepts_mgd_accts'] === '2') {\n return accum\n }\n\n if (fieldFormatNumber.includes(key)) {\n if (dataFundDetailChangeRef.current[key as keyof FundDetails] === 'N/A') {\n return { ...accum, [key]: null }\n } else {\n const value = dataFundDetailChangeRef.current[key as keyof FundDetails]\n ? (dataFundDetailChangeRef.current[key as keyof FundDetails] as string).replace(/,0/g, '0')\n : null\n\n return {\n ...accum,\n [key]: value ? parseInt(value) : 0,\n }\n }\n }\n\n if (dateFormattedFields.includes(key)) {\n const value = dataFundDetailChangeRef.current[key as keyof FundDetails]\n return { ...accum, [key]: moment(value as string).format('YYYY-MM-DD') }\n }\n\n return {\n ...accum,\n [key]: dataFundDetailChangeRef.current[key as keyof FundDetails],\n }\n },\n {},\n )\n setLoadingSubmitForm(true)\n\n // Filter MinoryType\n const dataMinority = Object.entries(fieldChange).filter((item) => item[0].includes('minority_type_'))\n const minorityChange = {\n updates: dataMinority.map((item) => {\n return {\n minority_type: +item[0].replace('minority_type_', ''),\n status: item[1] as boolean,\n }\n }),\n }\n\n try {\n const res = await APIService.fundDetailService.createFundBasicInfo(fieldChange)\n // Update Minority Api\n\n notification.success({ message: 'Fund Created!' })\n if (res.data.fund_id) {\n await Promise.all([\n handleSubmitMinorityType(res.data.fund_id, minorityChange),\n handleSubmitROR(res.data.fund_id),\n handleSubmitAsset(res.data.fund_id),\n handleSubmitNav(res.data.fund_id),\n ])\n\n dispatch(removeTabs(String(`${PREFIX_EXTERNAL}-new-fund`)))\n setDataFundDetailChange({})\n clearSnapshot('exFundDraft', `new-fund`)\n dispatch(addTabs({ id: `${PREFIX_EXTERNAL}-${res.data.fund_id}`, type: FundFirmTypeEnum.FUNDS }))\n }\n } catch (err) {\n console.error({ err })\n notification.error({ message: 'Create Failed!' })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n\n const handleSubmitMinorityType = async (fundId: string, minorityChange: any) => {\n if (minorityChange && minorityChange.updates.length > 0 && dataFirmDetail) {\n APIService.minorityService.updateFundMinorityStatuses(fundId, minorityChange)\n }\n }\n\n const handleSubmitROR = async (fundId: string) => {\n if (rorDataChange.values && rorDataChange.values.length > 0) {\n try {\n setLoadingSubmitForm(true)\n rorDataChange &&\n (await APIService.fundDetailService.updateFundROR(fundId, JSON.parse(JSON.stringify(rorDataChange))))\n // refetch data\n notification.success({ message: 'ROR Created' })\n\n setRORDataChange({ values: undefined })\n } catch (error) {\n console.log(error.response)\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n }\n const handleSubmitAsset = async (fundId: string) => {\n if (assetDataChange.values && assetDataChange.values.length > 0) {\n try {\n setLoadingSubmitForm(true)\n assetDataChange &&\n (await APIService.fundDetailService.updateAssetROR(fundId, JSON.parse(JSON.stringify(assetDataChange))))\n // refetch data\n notification.success({ message: 'Assets Created' })\n setAssetDataChange({ values: undefined })\n } catch (error) {\n console.log(error.response)\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n }\n const handleSubmitNav = async (fundId: string) => {\n if (navDataChange.values && navDataChange.values.length > 0) {\n try {\n setLoadingSubmitForm(true)\n navDataChange &&\n (await APIService.fundDetailService.updateNAVROR(fundId, JSON.parse(JSON.stringify(navDataChange))))\n // refetch data\n notification.success({ message: 'NAV Created' })\n setNAVDataChange({ values: undefined })\n } catch (error) {\n console.log(error.response)\n notification.error({ message: error.response.statusText })\n } finally {\n setLoadingSubmitForm(false)\n }\n }\n }\n\n const renderTabContent = (activeTabId: LeftNavExNewFundEnum) => {\n const activeTab = TAB_LIST_CREATE_NEW_FUND.find((item) => item.id === activeTabId)\n if (!activeTab) {\n return\n }\n switch (activeTabId) {\n case LeftNavExNewFundEnum.INSTRUCTION:\n return \n case LeftNavExNewFundEnum.CREATE_FUND_PROFILE:\n return (\n \n )\n case LeftNavExNewFundEnum.INVESTMENT_STRATEGY:\n return (\n \n )\n case LeftNavExNewFundEnum.INVESTMENT_REQUIREMENTS:\n return (\n \n )\n case LeftNavExNewFundEnum.CONTACT_INFORMATION:\n return (\n \n )\n case LeftNavExNewFundEnum.STRUCTURE:\n return (\n \n )\n case LeftNavExNewFundEnum.FEE_SCHEDULE:\n return (\n \n )\n case LeftNavExNewFundEnum.SERVICE_PROVIDERS:\n return (\n \n )\n case LeftNavExNewFundEnum.FUND_ESG_FACTORS:\n return (\n \n )\n case LeftNavExNewFundEnum.FUND_DIVERSITY_INCLUSION:\n return (\n \n )\n case LeftNavExNewFundEnum.FUND_PERFORMANCE:\n return (\n \n )\n case LeftNavExNewFundEnum.FUND_CMIC:\n return (\n \n
\n \n \n \n \n \n \n )\n case LeftNavExNewFundEnum.COMPLETE:\n return \n default:\n break\n }\n }\n\n React.useEffect(() => {\n if (dataFirms && dataFirms.length === 1) {\n form.setFieldsValue({ firm_id: dataFirms[0].firm_id })\n setDataFundDetailChange((prev) => ({ ...prev, firm_id: dataFirms[0].firm_id }))\n }\n }, [dataFirms, form, setDataFundDetailChange])\n\n const handleCancel = () => {\n clearSnapshot('exFundDraft', `new-fund`)\n dispatch(removeTabs(`${PREFIX_EXTERNAL}-new-fund`))\n }\n return (\n \n {\n const convertObject = Object.keys(changedValues).reduce((acc, key) => {\n //format special field\n return { ...acc, [key]: changedValues[key] !== undefined ? changedValues[key] : null }\n }, {})\n\n setDataFundDetailChange({ ...dataFundDetailChangeRef.current, ...convertObject })\n }}\n >\n \n }\n size=\"default\"\n style={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column' }}\n >\n \n \n \n {TAB_LIST_CREATE_NEW_FUND.map((item) => {\n const existTab = optionFilter.findIndex((i) => i.leftNav === item.id)\n if (existTab === -1 && textFilterSearch !== '') {\n return null\n }\n const indexTab = TAB_LIST_CREATE_NEW_FUND.findIndex((i) => i.id === item.id)\n const indexStep = TAB_LIST_CREATE_NEW_FUND.findIndex((i) => i.id === stepTab)\n return (\n {\n if (indexTab > indexStep) {\n return\n }\n form.validateFields().then(() => {\n setActiveTab(item.id)\n })\n }}\n active={activeTab === item.id}\n isCanSelect={indexStep - indexTab >= 0}\n >\n
\n {/* {item.status === TAB_STATUS_ENUM.SUCCESS && }\n {item.status === TAB_STATUS_ENUM.WARNING && } */}\n
\n {item.id}\n \n )\n })}\n
\n \n \n \n \n \n {optionFilter.length === 0 ? (\n
\n \n
\n ) : (\n renderTabContent(activeTab)\n )}\n
\n
\n
\n \n \n \n \n \n )\n}\n","import { Col, Row } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FirmDetailDataContext } from '../../../shared/api/context/FirmDetailDataContext'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport DataSheet, { DataSheetType, RORResponseType, UpdateRORType } from '../../../shared/components/DataSheet'\nimport { DividerForm } from '../../../shared/components/DividerForm'\nimport { FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFirm } from '../../../shared/components/RenderLabelExFirm'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 0 1rem;\n margin-top: 1rem;\n flex-direction: column;\n`\ntype Props = {\n dataFirmAsset?: RORResponseType[]\n loadingFirmAsset: boolean\n firmAssetsDataChange: UpdateRORType\n submittingFirmAsset: boolean\n onUpdateRORData?: (value: UpdateRORType) => void\n\n dataFirmAssetHF?: RORResponseType[]\n loadingFirmAssetHF: boolean\n firmAssetsHFDataChange: UpdateRORType\n submittingFirmAssetHF: boolean\n onUpdateHFData?: (value: UpdateRORType) => void\n}\n\nconst AUM: React.FC = ({\n dataFirmAsset,\n loadingFirmAsset,\n submittingFirmAsset,\n onUpdateRORData,\n firmAssetsDataChange,\n dataFirmAssetHF,\n loadingFirmAssetHF,\n firmAssetsHFDataChange,\n submittingFirmAssetHF,\n onUpdateHFData,\n}) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const { dataFirmDetail } = React.useContext(FirmDetailDataContext)\n\n return (\n \n \n \n }\n options={\n fundDataDropdown?.denomination && fundDataDropdown.denomination.length > 0\n ? fundDataDropdown.denomination.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n disabled\n />\n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default AUM\n","import { Col, Row } from 'antd'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemInput, FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFirm } from '../../../shared/components/RenderLabelExFirm'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 0 1rem;\n margin-top: 1rem;\n flex-direction: column;\n`\n\ntype Props = {}\nconst ContactInformation: React.FC = () => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const LIST_FORM_CONTACT = [\n {\n name: 'contact_name1',\n label: 'Contact Name 1',\n },\n {\n name: 'contact_name2',\n label: 'Contact Name 2',\n },\n {\n name: 'contact_address1',\n label: 'Address',\n },\n {\n name: 'contact_address2',\n label: 'Address 2',\n },\n {\n name: 'contact_city',\n label: 'City',\n },\n {\n name: 'contact_state',\n label: 'State',\n options:\n fundDataDropdown?.contact_state && fundDataDropdown.contact_state.length > 0\n ? fundDataDropdown.contact_state.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'contact_postal_code',\n label: 'Zip',\n },\n {\n name: 'country',\n label: 'Country',\n options:\n fundDataDropdown?.country && fundDataDropdown.country.length > 0\n ? fundDataDropdown.country.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'contact_phone',\n label: 'Phone',\n },\n {\n name: 'contact_fax',\n label: 'Fax',\n },\n {\n name: 'contact_email',\n label: 'Email',\n },\n {\n name: 'contact_web',\n label: 'Website',\n },\n ]\n return (\n \n {LIST_FORM_CONTACT.map((item) => {\n return (\n \n \n {item.options ? (\n }\n options={item.options}\n labelCol={12}\n wrapperCol={12}\n />\n ) : (\n }\n labelCol={12}\n wrapperCol={12}\n />\n )}\n \n \n )\n })}\n \n )\n}\n\nexport default ContactInformation\n","import { Col, Row, Space } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDropdownCodeType } from '../../../shared/api/models/FundDetails'\nimport { MinorityType } from '../../../shared/api/services/minority.service'\nimport { FormItemCheckBox, FormItemRadio } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFirm } from '../../../shared/components/RenderLabelExFirm'\n\nconst Wrapper = styled.div`\n padding: 1rem;\n`\n\nconst WrapperMinority = styled.div`\n padding: 1rem;\n`\n\ntype Props = {\n form: FormInstance\n minorityTypes?: MinorityType[]\n setDataFirmDetailSubmit: any\n firmCountry: FundDropdownCodeType | undefined\n}\n\nconst ExFirmDI: React.FC = ({ form, minorityTypes, setDataFirmDetailSubmit, firmCountry }) => {\n const isMinorityOwnedFirm = form.getFieldValue('is_minority_or_woman_owned_firm')\n\n React.useEffect(() => {\n if (!minorityTypes || !minorityTypes.length) {\n return\n }\n if (isMinorityOwnedFirm === false) {\n minorityTypes?.map((item) => {\n setDataFirmDetailSubmit((prevState: any) => ({\n ...prevState,\n [`minority_type_${item.id}`]: false,\n }))\n form.setFieldsValue({ [`minority_type_${item.id}`]: false })\n })\n }\n }, [form, isMinorityOwnedFirm, minorityTypes, setDataFirmDetailSubmit])\n\n return (\n \n \n \n \n

Minority- or Woman-Owned Management Company

\n \n \n \n \n \n Applicable only to the management firm that is physically headquartered in{' '}\n {firmCountry === undefined ? '[Firm_Country]' : firmCountry.code_description}\n \n \n \n \n \n \n Minority- or Woman-Owned: A hedge fund management company is deemed to be a minority- or woman-owned\n business if: Greater than 50% of the management company is owned by one or more minorities or women, or in\n the case of a publicly owned business, greater than 50% of all issued stock is owned by one or more\n minorities or women; and whose management and daily business operations are controlled by one or more such\n individuals.\n \n \n \n \n \n \n }\n options={[\n {\n value: true,\n title: 'Yes',\n },\n {\n value: false,\n title: 'No',\n },\n ]}\n />\n \n \n \n {isMinorityOwnedFirm ? (\n \n \n If ‘Yes’, please check all that apply:\n \n \n ) : null}\n \n {isMinorityOwnedFirm ? (\n \n \n \n Type\n \n \n Description\n \n \n {minorityTypes?.map((item, index) => {\n return (\n \n \n \n \n {item.minority_description}\n \n )\n })}\n \n ) : null}\n \n \n )\n}\n\nexport default ExFirmDI\n","import { Col, Form, List, Radio, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFirm } from '../../../shared/components/RenderLabelExFirm'\nimport { updateFieldValue } from '../../../shared/utils/formUtils'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 0 1rem;\n margin-top: 1rem;\n flex-direction: column;\n`\n\ntype Props = { form: FormInstance }\nconst FirmCoInvestments: React.FC = ({ form }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const [yesSelected, setYesSelected] = React.useState(form.getFieldValue('offer_coinvestments') === '1')\n\n React.useEffect(() => {\n const { getFieldValue } = form\n if (yesSelected) {\n return\n }\n !!getFieldValue('typical_size') && updateFieldValue(form, 'typical_size', null)\n !!getFieldValue('typical_liquidity') && updateFieldValue(form, 'typical_liquidity', null)\n !!getFieldValue('coinvestment_number') && updateFieldValue(form, 'coinvestment_number', null)\n //\n !!getFieldValue('private_equity') && updateFieldValue(form, 'private_equity', null)\n !!getFieldValue('public_equity') && updateFieldValue(form, 'public_equity', null)\n !!getFieldValue('private_debt') && updateFieldValue(form, 'private_debt', null)\n !!getFieldValue('public_debt') && updateFieldValue(form, 'public_debt', null)\n !!getFieldValue('other_instrument') && updateFieldValue(form, 'other_instrument', null)\n //\n !!getFieldValue('vehicle_commingled_fund') && updateFieldValue(form, 'vehicle_commingled_fund', null)\n !!getFieldValue('vehicle_fund_of_one') && updateFieldValue(form, 'vehicle_fund_of_one', null)\n !!getFieldValue('vehicle_managed_account') && updateFieldValue(form, 'vehicle_managed_account', null)\n !!getFieldValue('other_vehicle') && updateFieldValue(form, 'other_vehicle', null)\n }, [yesSelected])\n\n const LIST_SELECT_FORM = [\n {\n name: 'typical_size',\n label: 'What is the typical size of your co-investment deals?',\n options:\n fundDataDropdown?.typical_size && fundDataDropdown.typical_size.length > 0\n ? fundDataDropdown.typical_size.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'typical_liquidity',\n label: 'What is the typical liquidity profile (days to liquidate) of your co-investment deals?',\n options:\n fundDataDropdown?.typical_liquidity && fundDataDropdown.typical_liquidity.length > 0\n ? fundDataDropdown.typical_liquidity.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n {\n name: 'coinvestment_number',\n label: 'Approximately how many co-investment deals do you offer per year?',\n options:\n fundDataDropdown?.coinvestment_number && fundDataDropdown.coinvestment_number.length > 0\n ? fundDataDropdown.coinvestment_number.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : [],\n },\n ]\n\n const ListFirst = [\n {\n name: 'private_equity',\n label: 'Private Equity',\n },\n {\n name: 'public_equity',\n label: 'Public Equity',\n },\n {\n name: 'private_debt',\n label: 'Private Debt',\n },\n {\n name: 'public_debt',\n label: 'Public Debt',\n },\n {\n name: 'other_instrument',\n label: 'Other',\n },\n ]\n const ListSecond = [\n {\n name: 'vehicle_commingled_fund',\n label: 'Commingled Fund',\n },\n {\n name: 'vehicle_fund_of_one',\n label: 'Fund of One',\n },\n {\n name: 'vehicle_managed_account',\n label: 'Separately Managed Account',\n },\n\n {\n name: 'other_vehicle',\n label: 'Other',\n },\n ]\n\n return (\n \n \n \n }\n {...{ labelCol: { span: 18 }, wrapperCol: { span: 6 } }}\n labelAlign=\"left\"\n rules={[\n ({ getFieldValue }) => ({\n validator() {\n setYesSelected(getFieldValue('offer_coinvestments') === '1')\n return Promise.resolve()\n },\n }),\n ]}\n >\n \n Yes\n No\n \n \n \n \n \n \n
If Yes, please answer the following:
\n \n \n {LIST_SELECT_FORM.map((item) => {\n return (\n \n \n }\n options={item.options}\n labelCol={24}\n wrapperCol={24}\n />\n \n \n )\n })}\n \n \n
\n Which of the following instrument types are part of your co-investment deals?\n
\n
\n Select 'Yes', 'No' or 'Not Responded' for each:\n
\n (\n \n
\n }\n {...{ labelCol: { span: 18 }, wrapperCol: { span: 6 } }}\n labelAlign=\"left\"\n >\n \n Yes\n No\n \n \n
\n
\n )}\n />\n \n \n \n
\n
What investment vehicles have you used to offer co-investments?
\n
Select 'Yes' or 'No' for each:
\n\n (\n \n
\n }\n {...{ labelCol: { span: 18 }, wrapperCol: { span: 6 } }}\n labelAlign=\"left\"\n >\n \n Yes\n No\n \n \n
\n
\n )}\n />\n \n \n \n )\n}\n\nexport default FirmCoInvestments\n","import { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport APIService from '../../../shared/api'\nimport { FirmDetailDataContext } from '../../../shared/api/context/FirmDetailDataContext'\nimport { FirmESGSection } from '../../../shared/components/FirmESGSection'\nimport { MODE_ESG_VIEW } from '../../../shared/components/FundESGSection'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\ntype Props = {\n form: FormInstance\n modeView: MODE_ESG_VIEW\n}\nexport const FirmESGPolicies: React.FC = ({ form, modeView }) => {\n const { dataFirmDetail } = React.useContext(FirmDetailDataContext)\n\n const { data: dataExFunds, invoke: getExFund } = useServiceState(APIService.fundService.fetchExFunds)\n\n const listFundOfFirm = React.useMemo(() => {\n if (!dataExFunds) {\n return []\n }\n const list = dataFirmDetail\n ? dataExFunds\n .filter((i) => i.firm_id === dataFirmDetail.firm_id)\n .map((item) => ({ fund_id: item.fund_id, fund_name: item.fund_name }))\n : []\n return list\n }, [dataExFunds, dataFirmDetail])\n\n React.useEffect(() => {\n getExFund()\n }, [getExFund, modeView])\n\n return \n}\n","import { Col, Form, Radio, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemInput, FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFirm } from '../../../shared/components/RenderLabelExFirm'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 0 1rem;\n margin-top: 1rem;\n flex-direction: column;\n`\ntype Props = {\n form: FormInstance\n}\n\nconst FirmOwnership: React.FC = ({ form }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const LIST_INPUT_FORM = [\n {\n name: 'founded',\n label: 'Year Founded',\n type: 'number',\n },\n {\n name: 'owned_by_employees',\n label: '% of firm owned by employees',\n type: 'float',\n },\n {\n name: 'employees_with_ownership_stake',\n label: '# of employees with ownership stake',\n type: 'number',\n },\n ]\n\n const isMinorityFirm = form.getFieldValue('is_minority_firm')\n\n React.useEffect(() => {\n if (!isMinorityFirm) {\n // is_minority_firm === false -> update minority_own_type, minority_own_level to null\n // visually update on the firm\n form.setFieldsValue({ minority_own_type: undefined, minority_own_level: undefined })\n }\n }, [form, isMinorityFirm])\n\n return (\n \n {LIST_INPUT_FORM.map((item) => {\n return (\n \n
\n }\n labelCol={12}\n wrapperCol={12}\n typeField={item.type ? 'number' : undefined}\n normalize={item.type ? item.type : undefined}\n />\n \n \n )\n })}\n \n \n }\n {...{ labelCol: { span: 12 }, wrapperCol: { span: 12 } }}\n >\n \n Yes\n No\n \n \n \n \n \n \n }\n options={\n fundDataDropdown?.minority_own_type && fundDataDropdown.minority_own_type.length > 0\n ? fundDataDropdown.minority_own_type.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n labelCol={12}\n wrapperCol={12}\n />\n \n \n \n \n }\n options={\n fundDataDropdown?.minority_own_level && fundDataDropdown.minority_own_level.length > 0\n ? fundDataDropdown.minority_own_level.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n labelCol={12}\n wrapperCol={12}\n />\n \n \n \n )\n}\n\nexport default FirmOwnership\n","import { Col, Divider, Form, Radio, Row } from 'antd'\nimport { FormInstance } from 'antd/lib/form'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { FundDetailDropdownContext } from '../../../shared/api/context/FundDetailDropdownContext'\nimport { FormItemAutoComplete, FormItemInput, FormItemSelect } from '../../../shared/components/FormItemComponents'\nimport { RenderLabelExFirm } from '../../../shared/components/RenderLabelExFirm'\n\nconst Wrapper = styled.div`\n display: flex;\n flex: 1;\n padding: 0 1rem;\n margin-top: 1rem;\n flex-direction: column;\n`\n\ntype Props = {\n form: FormInstance\n}\nconst REGISTRATION_OPTIONS = ['Investment Advisor', 'Broker-Dealer', 'CPO/CTA', 'None']\n\nconst FirmRegistration: React.FC = ({ form }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const [stateDisabled, setStateDisabled] = React.useState(false)\n\n const secCountry = form.getFieldValue('sec_country')\n\n React.useEffect(() => {\n if (!secCountry || secCountry !== '205') {\n setStateDisabled(true)\n form.setFieldsValue({ sec_state: undefined })\n } else {\n setStateDisabled(false)\n }\n }, [form, secCountry])\n\n return (\n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n options={REGISTRATION_OPTIONS.map((item) => ({ text: item, value: item }))}\n isKeepOptions\n />\n \n \n SEC Info\n \n \n }\n {...{ labelCol: { span: 12 }, wrapperCol: { span: 12 } }}\n >\n \n Yes\n No\n \n \n \n \n \n \n }\n />\n \n \n \n \n }\n maxLength={6}\n />\n \n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n options={\n fundDataDropdown?.organization_type && fundDataDropdown.organization_type.length > 0\n ? fundDataDropdown.organization_type.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n \n \n }\n options={\n fundDataDropdown?.sec_country && fundDataDropdown.sec_country.length > 0\n ? fundDataDropdown.sec_country.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n disabled={stateDisabled}\n options={\n fundDataDropdown?.sec_state && fundDataDropdown.sec_state.length > 0\n ? fundDataDropdown.sec_state.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n \n \n }\n labelCol={12}\n wrapperCol={12}\n options={\n fundDataDropdown?.sec_exemption_reason_type && fundDataDropdown.sec_exemption_reason_type.length > 0\n ? fundDataDropdown.sec_exemption_reason_type.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n Non-SEC Info\n \n \n
\n

If you are registered with another government entity

\n
\n }\n options={\n fundDataDropdown?.non_sec_country && fundDataDropdown.non_sec_country.length > 0\n ? fundDataDropdown.non_sec_country.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n \n \n }\n options={\n fundDataDropdown?.non_sec_reg_auth && fundDataDropdown.non_sec_reg_auth.length > 0\n ? fundDataDropdown.non_sec_reg_auth.map((item) => ({\n value: item.code_code,\n text: item.code_description,\n }))\n : []\n }\n />\n \n \n \n \n }\n />\n \n \n \n \n }\n maxLength={30}\n />\n \n \n \n )\n}\n\nexport default FirmRegistration\n","import React from 'react'\nimport styled from 'styled-components'\nimport { FirmDetailDataContext } from '../../../shared/api/context/FirmDetailDataContext'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport APIService from '../../../shared/api'\nimport { FundFamilyTable, FundFamilyType } from '../../../shared/components/FundFamilyTable'\nimport { RootState } from '../../../app/rootReducer'\nimport { useSelector } from 'react-redux'\n\nconst Flex = styled.div`\n flex: 1;\n display: flex;\n`\n\ntype Props = {}\nexport const ExFirmFundFamily: React.FC = () => {\n const { dataFirmDetail, fundDataDropdown } = React.useContext(FirmDetailDataContext)\n\n const { invoke: getFundOfFirm, data: dataFundsFirm, loading } = useServiceState(\n APIService.firmDetailService.fetchFundsOfFirm,\n )\n\n const { strategies: strategyOptions, subStrategies: subStrategyOptions } = useSelector(\n (state: RootState) => state.appData,\n )\n // map fund family data\n const fundFamilyData = React.useMemo(() => {\n if (!dataFundsFirm || !fundDataDropdown || !strategyOptions || !subStrategyOptions) {\n return []\n }\n const results = dataFundsFirm.map((d) => {\n //\n const stategy_op = d.strategy_code ? strategyOptions.find((s) => s.strategy_code === d.strategy_code) : null\n const stategy_code = stategy_op?.strategy_name\n //\n const sub_stategy_op = d.sub_strategy_code\n ? subStrategyOptions.find((s) => s.sub_strategy_code === d.sub_strategy_code)\n : null\n const sub_stategy_code = sub_stategy_op?.sub_strategy_name\n //\n const region_inv_focus_op = d.region_inv_focus\n ? fundDataDropdown.region_inv_focus.find((s) => s.code_code === `${d.region_inv_focus}`)\n : null\n const region_inv_focus = region_inv_focus_op?.code_description\n //\n const region_inv_focus_country_op = d.region_inv_focus_country\n ? fundDataDropdown.region_inv_focus_country.find((s) => s.code_code === `${d.region_inv_focus_country}`)\n : null\n const region_inv_focus_country = region_inv_focus_country_op?.code_description\n //\n return {\n fund_id: d.fund_id,\n fund_name: d.fund_name,\n firm_id: d.firm_id,\n firm_name: d.firm_name,\n fund_family_id: d.fund_family_id,\n fund_family_code: d.fund_family_code,\n strategy_code: stategy_code,\n sub_strategy_code: sub_stategy_code,\n region_inv_focus,\n region_inv_focus_country,\n } as FundFamilyType\n })\n\n return results\n }, [dataFundsFirm, strategyOptions, subStrategyOptions, fundDataDropdown])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFundOfFirm(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFundOfFirm])\n\n return (\n \n \n \n )\n}\n","import { CheckCircleTwoTone, SearchOutlined } from '@ant-design/icons'\nimport { AutoComplete, Button, Card, Col, Empty, Form, Input, notification, Popconfirm, Row, Space } from 'antd'\nimport { useForm } from 'antd/lib/form/util'\nimport Text from 'antd/lib/typography/Text'\nimport moment from 'moment'\nimport React, { SetStateAction, useCallback, useEffect, useRef } from 'react'\nimport { useDispatch } from 'react-redux'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { ExFirmDetailLabelSearchProvider } from '../../shared/api/context/ExFirmDetailLabelSearchContext'\nimport { FirmDetailDataContext } from '../../shared/api/context/FirmDetailDataContext'\nimport { FirmDetails, FirmMoreField, MultiManagerPlatformType } from '../../shared/api/models/FirmDetails'\nimport { FundCCMCResponse } from '../../shared/api/models/FundDetails'\nimport { Colors } from '../../shared/colors'\nimport { UpdateRORType } from '../../shared/components/DataSheet'\nimport FFPerfectScrollbar from '../../shared/components/FFPerfectScrollbar'\nimport { MODE_ESG_VIEW } from '../../shared/components/FundESGSection'\nimport { LoadingDetails } from '../../shared/components/LoadingDetails'\nimport { TabContentWrapper } from '../../shared/components/TabContentWrapper'\nimport { useDraft } from '../../shared/DraftManager'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { LeftNavExFirmEnum, renderSearchListExFirm } from '../../shared/SearchExFirmLabel'\nimport { LeftNavExFundEnum } from '../../shared/SearchExFundLabel'\nimport { PREFIX_EXTERNAL, updateSelectedNav, updateTabTitle } from '../../slice/appSettingsSlice'\nimport FirmCMIC from '../Dashboard/FirmDetail/CMIC/FirmCMIC'\nimport AUM from './ExFirmDetail/AUM'\nimport ContactInformation from './ExFirmDetail/ContactInformation'\nimport ExFirmDI from './ExFirmDetail/ExFirmDI'\nimport FirmCoInvestments from './ExFirmDetail/FirmCoInvestments'\nimport { FirmESGPolicies } from './ExFirmDetail/FirmESGPolicies'\nimport FirmOwnership from './ExFirmDetail/FirmOwnership'\nimport FirmRegistration from './ExFirmDetail/FirmRegistration'\nimport { TAB_STATUS_ENUM } from './ExFundDetailMain'\nimport { FirmMultiManagerPodPlatform } from '../Dashboard/FirmDetail/FirmMultiManagerPodPlatform/FirmMultiManagerPodPlatform'\nimport { ExFirmFundFamily } from './ExFirmDetail/ExFirmFundFamily'\n\nconst StyledCard = styled(Card)`\n overflow: hidden;\n .ant-card-head {\n padding: 0 1rem;\n }\n .ant-card-head-title {\n padding: 0;\n }\n .ant-card-body {\n padding: 0;\n overflow: hidden;\n }\n .ant-card-head {\n border-bottom: 2px solid #f0f0f0 !important;\n }\n`\nconst StyledForm = styled(Form)`\n flex: 1;\n overflow: hidden;\n height: 100%;\n .ant-form-item {\n margin-bottom: 8px;\n }\n`\nconst TextID = styled(Text)`\n font-size: 14px;\n`\n\nconst StyledTabList = styled.div<{ active?: boolean }>`\n background: ${(props) => (props.active ? '#EDF6FF' : '#fff')};\n font-weight: ${(props) => (props.active ? 'bold' : 'none')};\n display: flex;\n flex: 1;\n align-items: center;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n border-top: none;\n padding: 1rem 0 1rem 3rem;\n :hover {\n cursor: pointer;\n }\n`\n\nconst TAB_LIST = [\n {\n id: LeftNavExFirmEnum.ASSETS_UNDER_MANAGEMENT,\n status: TAB_STATUS_ENUM.DEFAULT,\n },\n {\n id: LeftNavExFirmEnum.REGISTRATION,\n status: TAB_STATUS_ENUM.DEFAULT,\n },\n {\n id: LeftNavExFirmEnum.CONTACT_INFORMATION,\n status: TAB_STATUS_ENUM.DEFAULT,\n },\n {\n id: LeftNavExFirmEnum.OWNERSHIP,\n status: TAB_STATUS_ENUM.DEFAULT,\n },\n {\n id: LeftNavExFirmEnum.CO_INVESTMENT,\n status: TAB_STATUS_ENUM.DEFAULT,\n },\n {\n id: LeftNavExFirmEnum.FIRM_ESG_POLICIES,\n status: TAB_STATUS_ENUM.DEFAULT,\n },\n {\n id: LeftNavExFirmEnum.FIRM_DIVERSITY_INCLUSION,\n status: TAB_STATUS_ENUM.DEFAULT,\n },\n {\n id: LeftNavExFirmEnum.FIRM_CMIC,\n status: TAB_STATUS_ENUM.DEFAULT,\n },\n {\n id: LeftNavExFirmEnum.FIRM_MULTI_MANAGER_POD_PLATFORM,\n status: TAB_STATUS_ENUM.DEFAULT,\n },\n {\n id: LeftNavExFirmEnum.FUND_FAMILY,\n status: TAB_STATUS_ENUM.DEFAULT,\n },\n]\nexport const EXFIRM_DATE_FIELDS = ['firm_asset_date']\n\ntype Props = { setShouldUpdate: (value: boolean) => void; selectedTab: LeftNavExFirmEnum | LeftNavExFundEnum }\n\nconst MyFirm: React.FC = ({ setShouldUpdate, selectedTab }) => {\n const {\n dataFirmDetail,\n loading,\n refetch,\n id: firmId,\n dataFirmDetailSubmitRef,\n fundDataDropdown,\n dataChanged,\n setDataChanged,\n } = React.useContext(FirmDetailDataContext)\n\n const [optionFilter, setOptionFilter] = React.useState(renderSearchListExFirm)\n const [textFilterSearch, settextFilterSearch] = React.useState('')\n const [optionShow, setOptionShow] = React.useState(renderSearchListExFirm)\n\n const [loadingSubmitForm, setLoadingSubmitForm] = React.useState(false)\n const [firmAssetsDataChange, setFirmAssetsDataChange] = React.useState({ values: undefined })\n const [firmAssetsHFDataChange, setFirmAssetsHFDataChange] = React.useState({ values: undefined })\n const [firmCMICDataChange, setFirmCMICDataChange] = React.useState()\n const [multiManagerPlatformChange, setMultiManagerPlatformChange] = React.useState()\n\n const [submittingFirmAsset, setSubmittingFirmAsset] = React.useState(false)\n const [submittingFirmAssetHF, setSubmittingFirmAssetHF] = React.useState(false)\n const [isUpdated, setIsUpdated] = React.useState(false)\n //\n // Fetch Data\n const { invoke: getFirmAssets, data: dataFirmAsset, loading: loadingFirmAsset } = useServiceState(\n APIService.firmDetailService.fetchFirmAssets,\n )\n const { invoke: getFirmAssetsHF, data: dataFirmAssetHF, loading: loadingFirmAssetHF } = useServiceState(\n APIService.firmDetailService.fetchFirmAssetsHedgeFund,\n )\n\n const { invoke: getFirmCMIC, data: firmCMICData, loading: loadingCMICData } = useServiceState(\n APIService.firmDetailService.fetchFirmCMIC,\n )\n // Minority Types\n const { invoke: getAllMinorityTypes, data: minorityTypes } = useServiceState(\n APIService.minorityService.fetchMinorityTypes,\n )\n // Firm Minority\n const { invoke: getFirmMinority, data: dataFirmMinority } = useServiceState(\n APIService.minorityService.fetchFirmMinorityStatuses,\n )\n // Multi Manager Platform\n const {\n invoke: getMultiManagerPlatform,\n data: multiManagerPlatform,\n loading: loadingMultiManagerPlatform,\n } = useServiceState(APIService.firmDetailService.fetchMultiManagerPlatform)\n //\n //\n const [tabList, setTabList] = React.useState(TAB_LIST)\n\n const [form] = useForm()\n const dispatch = useDispatch()\n const { clearSnapshot, loadSnapshot, saveSnapshot } = useDraft()\n\n // call api\n React.useEffect(() => {\n const countryCode = dataFirmDetail?.country\n if (!countryCode) {\n return\n }\n getAllMinorityTypes(countryCode)\n }, [dataFirmDetail?.country, getAllMinorityTypes])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFirmMinority(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFirmMinority])\n\n React.useEffect(() => {\n const firmMinorityStatuses = dataFirmMinority?.firm_minority_statuses\n if (firmMinorityStatuses?.length) {\n firmMinorityStatuses?.map((item) => form.setFieldsValue({ [`minority_type_${item.minority_type}`]: item.status }))\n }\n }, [dataFirmMinority, form])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFirmAssets(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFirmAssets])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFirmAssetsHF(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFirmAssetsHF])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getFirmCMIC(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getFirmCMIC])\n\n React.useEffect(() => {\n if (!dataFirmDetail) {\n return\n }\n getMultiManagerPlatform(dataFirmDetail.firm_id)\n }, [dataFirmDetail, getMultiManagerPlatform])\n\n // set is updated state\n React.useEffect(() => {\n if (firmAssetsDataChange.values) {\n setIsUpdated(true)\n }\n }, [firmAssetsDataChange])\n\n React.useEffect(() => {\n if (firmAssetsHFDataChange.values) {\n setIsUpdated(true)\n }\n }, [firmAssetsHFDataChange])\n\n React.useEffect(() => {\n if (firmCMICDataChange && firmCMICDataChange.length > 0) {\n setIsUpdated(true)\n }\n }, [firmCMICDataChange])\n\n React.useEffect(() => {\n if (firmCMICDataChange && firmCMICDataChange.length > 0) {\n setIsUpdated(true)\n }\n }, [firmCMICDataChange])\n\n React.useEffect(() => {\n if (multiManagerPlatformChange && multiManagerPlatformChange.length > 0) {\n setIsUpdated(true)\n }\n }, [multiManagerPlatformChange])\n //\n React.useEffect(() => {\n const draft = loadSnapshot('exFirmDraft', firmId)\n\n if (form && draft) {\n const parsedCMICData = draft._firmCMICDataChange?.reduce((acc: any, curr: any) => {\n return {\n ...acc,\n [curr.fund_id]: {\n ...curr,\n },\n }\n }, {})\n form.setFieldsValue({ ...draft, _firmCMICDataChange: parsedCMICData })\n // @ts-ignore\n form.draft = draft\n setIsUpdated(true)\n setFirmAssetsDataChange(draft._firmAssetsDataChange || { values: undefined })\n setFirmAssetsHFDataChange(draft._firmAssetsHFDataChange || { values: undefined })\n setFirmCMICDataChange(draft._firmCMICDataChange || undefined)\n setMultiManagerPlatformChange(draft._multiManagerPlatformChange || undefined)\n }\n }, [firmId, form, loadSnapshot, setIsUpdated])\n\n React.useEffect(() => {\n if (dataFirmDetail) {\n dispatch(\n updateTabTitle({ tabName: dataFirmDetail.firm_name, id: `${PREFIX_EXTERNAL}-${dataFirmDetail.firm_id}` }),\n )\n }\n }, [dataFirmDetail, dispatch, loadSnapshot])\n\n const firmCountry = fundDataDropdown?.firm_contact_country.find((item) => item.code_code === dataFirmDetail?.country)\n\n const {\n denomination,\n registration,\n sec_registered,\n iard_crd_number,\n sec_number,\n non_sec_country,\n non_sec_reg_auth,\n non_sec_reg_auth_type,\n form_non_sec_country,\n non_sec_reg_num,\n contact_name1,\n contact_address1,\n contact_city,\n contact_state,\n contact_postal_code,\n country,\n contact_phone,\n contact_fax,\n contact_email,\n contact_web,\n contact_description,\n founded,\n owned_by_employees,\n employees_with_ownership_stake,\n minority_own_type,\n minority_own_level,\n is_minority_firm,\n offer_coinvestments,\n is_firm_esg,\n future,\n } = form.getFieldsValue([\n 'denomination',\n 'registration',\n 'sec_registered',\n 'iard_crd_number',\n 'sec_number',\n 'non_sec_country',\n 'non_sec_reg_auth',\n 'non_sec_reg_auth_type',\n 'form_non_sec_country',\n 'non_sec_reg_num',\n 'contact_name1',\n 'contact_address1',\n 'contact_city',\n 'contact_state',\n 'contact_postal_code',\n 'country',\n 'contact_phone',\n 'contact_fax',\n 'contact_email',\n 'contact_web',\n 'contact_description',\n 'founded',\n 'owned_by_employees',\n 'employees_with_ownership_stake',\n 'minority_own_type',\n 'minority_own_level',\n 'is_minority_firm',\n 'offer_coinvestments',\n 'is_firm_esg',\n 'future',\n ])\n\n const checkFields = useCallback(() => {\n setTabList((prev) => {\n return prev.map((tabItem) => {\n switch (tabItem.id) {\n case LeftNavExFirmEnum.ASSETS_UNDER_MANAGEMENT:\n return {\n ...tabItem,\n status: denomination != null ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFirmEnum.REGISTRATION:\n return {\n ...tabItem,\n status:\n registration != null ||\n sec_registered != null ||\n iard_crd_number != null ||\n sec_number != null ||\n form_non_sec_country != null ||\n non_sec_reg_auth != null ||\n non_sec_reg_auth_type != null ||\n non_sec_reg_num != null\n ? TAB_STATUS_ENUM.SUCCESS\n : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFirmEnum.CONTACT_INFORMATION:\n return {\n ...tabItem,\n status:\n contact_name1 != null ||\n contact_address1 != null ||\n contact_city != null ||\n contact_state != null ||\n contact_postal_code != null ||\n country != null ||\n contact_phone != null ||\n contact_fax != null ||\n contact_email != null ||\n contact_web != null ||\n contact_description != null\n ? TAB_STATUS_ENUM.SUCCESS\n : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFirmEnum.OWNERSHIP:\n return {\n ...tabItem,\n status:\n founded != null ||\n owned_by_employees != null ||\n employees_with_ownership_stake != null ||\n minority_own_type != null ||\n minority_own_level != null ||\n is_minority_firm != null\n ? TAB_STATUS_ENUM.SUCCESS\n : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFirmEnum.FIRM_DIVERSITY_INCLUSION:\n const isMinorityOwnedFirm = form.getFieldValue('is_minority_or_woman_owned_firm')\n return {\n ...tabItem,\n status: isMinorityOwnedFirm !== null ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFirmEnum.CO_INVESTMENT:\n return {\n ...tabItem,\n status: offer_coinvestments != null ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFirmEnum.FIRM_ESG_POLICIES:\n return {\n ...tabItem,\n status: is_firm_esg != null || future != null ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFirmEnum.FIRM_CMIC:\n return {\n ...tabItem,\n status:\n firmCMICData && firmCMICData?.responses.length > 0 ? TAB_STATUS_ENUM.SUCCESS : TAB_STATUS_ENUM.DEFAULT,\n }\n case LeftNavExFirmEnum.FIRM_MULTI_MANAGER_POD_PLATFORM:\n return {\n ...tabItem,\n status: TAB_STATUS_ENUM.SUCCESS, // TODO: update status\n }\n default:\n return tabItem\n }\n })\n })\n }, [\n denomination,\n registration,\n sec_registered,\n iard_crd_number,\n sec_number,\n form_non_sec_country,\n non_sec_reg_auth,\n non_sec_reg_auth_type,\n non_sec_reg_num,\n contact_name1,\n contact_address1,\n contact_city,\n contact_state,\n contact_postal_code,\n country,\n contact_phone,\n contact_fax,\n contact_email,\n contact_web,\n contact_description,\n founded,\n owned_by_employees,\n employees_with_ownership_stake,\n minority_own_type,\n minority_own_level,\n is_minority_firm,\n dataFirmDetailSubmitRef,\n dataFirmMinority?.firm_minority_statuses,\n offer_coinvestments,\n is_firm_esg,\n future,\n firmCMICData,\n dataFirmDetail,\n dataChanged,\n ])\n\n useEffect(() => {\n checkFields()\n }, [checkFields])\n\n const renderTabContent = (selectedTab: LeftNavExFirmEnum | LeftNavExFundEnum) => {\n switch (selectedTab) {\n case LeftNavExFirmEnum.ASSETS_UNDER_MANAGEMENT:\n return (\n \n )\n case LeftNavExFirmEnum.CONTACT_INFORMATION:\n return \n case LeftNavExFirmEnum.CO_INVESTMENT:\n return \n case LeftNavExFirmEnum.OWNERSHIP:\n return \n case LeftNavExFirmEnum.REGISTRATION:\n return \n case LeftNavExFirmEnum.FIRM_ESG_POLICIES:\n return \n case LeftNavExFirmEnum.FIRM_DIVERSITY_INCLUSION:\n return (\n \n )\n case LeftNavExFirmEnum.FIRM_CMIC:\n return \n case LeftNavExFirmEnum.FIRM_MULTI_MANAGER_POD_PLATFORM:\n return (\n \n )\n case LeftNavExFirmEnum.FUND_FAMILY:\n return \n default:\n break\n }\n }\n\n const debouceRef = useRef(null)\n const setDataFirmDetailSubmit = useCallback(\n (\n action: SetStateAction<\n Partial<\n FirmDetails &\n FirmMoreField & {\n _firmAssetsDataChange: UpdateRORType\n _firmAssetsHFDataChange: UpdateRORType\n _firmCMICDataChange: FundCCMCResponse[]\n }\n >\n >,\n ) => {\n if (dataFirmDetail && dataFirmDetailSubmitRef?.current) {\n dataFirmDetailSubmitRef.current = typeof action === 'object' ? action : action(dataFirmDetailSubmitRef?.current)\n\n Object.keys(dataFirmDetailSubmitRef.current).forEach((key) => {\n if (dataFirmDetailSubmitRef.current[key as keyof Partial] === undefined) {\n delete dataFirmDetailSubmitRef.current[key as keyof Partial]\n }\n })\n\n if (debouceRef.current) {\n clearTimeout(debouceRef.current)\n }\n\n debouceRef.current = setTimeout(() => {\n dataFirmDetail &&\n saveSnapshot('exFirmDraft', {\n id: dataFirmDetail.firm_id,\n name: dataFirmDetail.firm_name,\n data:\n Object.keys(dataFirmDetailSubmitRef?.current).length > 0 ? dataFirmDetailSubmitRef?.current : undefined,\n })\n setDataChanged((prev) => prev + 1)\n }, 300)\n }\n },\n [dataFirmDetail, dataFirmDetailSubmitRef, saveSnapshot],\n )\n\n React.useEffect(() => {\n setDataFirmDetailSubmit((prevState) => ({\n ...prevState,\n _firmAssetsDataChange: firmAssetsDataChange.values ? firmAssetsDataChange : undefined,\n _firmAssetsHFDataChange: firmAssetsHFDataChange.values ? firmAssetsHFDataChange : undefined,\n _firmCMICDataChange: firmCMICDataChange && firmCMICDataChange.length > 0 ? firmCMICDataChange : undefined,\n _multiManagerPlatformChange:\n multiManagerPlatformChange && multiManagerPlatformChange.length > 0 ? multiManagerPlatformChange : undefined,\n }))\n }, [\n firmAssetsDataChange,\n firmAssetsHFDataChange,\n firmCMICDataChange,\n multiManagerPlatformChange,\n setDataFirmDetailSubmit,\n ])\n\n const initialDataForm = dataFirmDetail && {\n ...dataFirmDetail,\n firm_asset_date: dataFirmDetail.firm_asset_date ? moment(dataFirmDetail.firm_asset_date) : null,\n }\n\n const handleSearch = (value: string) => {\n settextFilterSearch(value)\n const newOption = renderSearchListExFirm.filter(\n (item) => item.name.toUpperCase().indexOf(value.toUpperCase()) !== -1,\n )\n setOptionFilter(newOption)\n setOptionShow(newOption)\n if (newOption.findIndex((item) => item.leftNav === selectedTab) === -1 && newOption.length > 0) {\n dataFirmDetail &&\n dispatch(\n updateSelectedNav({ id: `${PREFIX_EXTERNAL}-${dataFirmDetail.firm_id}`, activeNav: newOption[0].leftNav }),\n )\n }\n }\n\n const handleCancel = () => {\n if (dataFirmDetail) {\n refetch()\n setFirmAssetsDataChange({ values: undefined })\n setFirmAssetsHFDataChange({ values: undefined })\n setFirmCMICDataChange(undefined)\n setMultiManagerPlatformChange(undefined)\n form.resetFields()\n setDataFirmDetailSubmit({})\n setIsUpdated(false)\n clearSnapshot('exFirmDraft', dataFirmDetail.firm_id)\n setDataChanged(1)\n }\n }\n\n const handleSubmit = async () => {\n if (dataFirmDetail && dataFirmDetailSubmitRef?.current) {\n if (firmAssetsDataChange.values) {\n try {\n setSubmittingFirmAsset(true)\n await APIService.firmDetailService.updateFirmAssets(\n dataFirmDetail.firm_id,\n JSON.parse(JSON.stringify(firmAssetsDataChange)),\n )\n notification.success({ message: 'Total Firm Assets Updated' })\n getFirmAssets(dataFirmDetail.firm_id)\n setFirmAssetsDataChange({ values: undefined })\n setIsUpdated(false)\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n setSubmittingFirmAsset(false)\n }\n }\n\n if (firmAssetsHFDataChange.values) {\n try {\n setSubmittingFirmAssetHF(true)\n await APIService.firmDetailService.updateFirmAssetsHedgeFund(\n dataFirmDetail.firm_id,\n JSON.parse(JSON.stringify(firmAssetsHFDataChange)),\n )\n notification.success({ message: 'Total Firm Assets Dedicated To Hedge Fund Updated' })\n getFirmAssetsHF(dataFirmDetail.firm_id)\n setFirmAssetsHFDataChange({ values: undefined })\n setIsUpdated(false)\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n setSubmittingFirmAssetHF(false)\n }\n }\n if (firmCMICDataChange && firmCMICDataChange.length > 0) {\n try {\n await APIService.firmDetailService.updateFirmCMIC(\n dataFirmDetail.firm_id,\n firmCMICDataChange.map((item) => ({ ...item, other_measures: item.other_measures || '' })),\n )\n notification.success({ message: 'Firm CMIC Updated' })\n getFirmCMIC(dataFirmDetail.firm_id)\n setFirmCMICDataChange(undefined)\n setIsUpdated(false)\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n }\n }\n if (multiManagerPlatformChange && multiManagerPlatformChange.length > 0) {\n try {\n await APIService.firmDetailService.updateMultiManagerPlatform(dataFirmDetail.firm_id, {\n updates: multiManagerPlatformChange,\n })\n notification.success({ message: 'Multi Manager Platform Updated' })\n getMultiManagerPlatform(dataFirmDetail.firm_id)\n setMultiManagerPlatformChange(undefined)\n setIsUpdated(false)\n } catch (error) {\n notification.error({ message: error.response.statusText })\n } finally {\n }\n }\n\n const fieldChange: Partial = Object.keys(dataFirmDetailSubmitRef?.current)\n .filter(\n (key) =>\n dataFirmDetailSubmitRef?.current[key as keyof FirmDetails] !== dataFirmDetail[key as keyof FirmDetails],\n )\n .reduce((accum, key) => {\n const value = dataFirmDetailSubmitRef?.current[key as keyof FirmDetails]\n if (EXFIRM_DATE_FIELDS.includes(key) && value) {\n return { ...accum, [key]: moment(value as string).format('YYYY-MM-DD') }\n }\n\n // is_minority_firm === false -> update minority_own_type, minority_own_level to null\n // actually reset value to sumbit to the server\n if (key === 'is_minority_firm' && !value) {\n return {\n ...accum,\n is_minority_firm: false,\n minority_own_type: null,\n minority_own_level: null,\n }\n }\n\n return {\n ...accum,\n [key]: dataFirmDetailSubmitRef?.current[key as keyof FirmDetails],\n }\n }, {})\n\n // Update minority types\n const dataMinority = Object.entries(fieldChange).filter((item) => item[0].includes('minority_type_'))\n\n // extract minority types out of field changes\n const dataChange = Object.entries(fieldChange)\n .filter((item) => !item[0].includes('minority_type_'))\n .reduce((acc, item) => {\n return {\n ...acc,\n [item[0]]: item[1],\n }\n }, {})\n\n const minorityChange = {\n updates: dataMinority.map((item) => {\n return {\n minority_type: +item[0].replace('minority_type_', ''),\n status: item[1] as boolean,\n }\n }),\n }\n\n if (minorityChange && minorityChange.updates.length > 0 && dataFirmDetail) {\n APIService.minorityService\n .updateFirmMinorityStatuses(dataFirmDetail.firm_id, minorityChange)\n .then(() => {\n notification.success({ message: 'Diversity & Inclusion Updated!' })\n getFirmMinority(dataFirmDetail.firm_id)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n }\n\n if (Object.keys(dataChange).length > 0 && dataFirmDetail.firm_id) {\n setLoadingSubmitForm(true)\n APIService.firmDetailService\n .updateFirmInfo(dataFirmDetail.firm_id, dataChange)\n .then(() => {\n notification.success({ message: 'Firm Updated!' })\n refetch()\n setDataFirmDetailSubmit({})\n setShouldUpdate(true)\n setIsUpdated(false)\n clearSnapshot('exFirmDraft', dataFirmDetail.firm_id)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmitForm(false)\n })\n } else {\n setIsUpdated(false)\n clearSnapshot('exFirmDraft', dataFirmDetail.firm_id)\n }\n }\n }\n\n return (\n \n {dataFirmDetail && firmCMICData && multiManagerPlatform && (\n {\n return {\n ...acc,\n [curr.fund_id]: {\n has_securities: curr.has_securities,\n manager_confirms: curr.manager_confirms,\n separate_share_classes: curr.separate_share_classes,\n pre_trade_compliance_restrictions: curr.pre_trade_compliance_restrictions,\n other_measures: curr.other_measures,\n subscription_notice: curr.subscription_notice,\n },\n }\n }, {}),\n _multiManagerPlatformChange: multiManagerPlatform.funds.reduce((prev, cur) => {\n return {\n ...prev,\n [cur.fund_id]: cur,\n }\n }, {} as Record),\n }}\n // prevent enter submitting the form\n onKeyPress={(event) => event.which === 13 && event.preventDefault()}\n onFinish={handleSubmit}\n onFieldsChange={() => setIsUpdated(true)}\n onValuesChange={(changedValues, allValues) => {\n if (!changedValues._firmCMICDataChange) {\n const convertObject = Object.keys(changedValues).reduce((acc, key) => {\n //format special field\n return { ...acc, [key]: changedValues[key] !== undefined ? changedValues[key] : null }\n }, {})\n setDataFirmDetailSubmit({ ...dataFirmDetailSubmitRef?.current, ...convertObject })\n }\n\n const cmicChanges = allValues._firmCMICDataChange\n\n // Logic to remove manager_confirms data if the corresponding has_securities is No/Does Not Apply\n changedValues._firmCMICDataChange &&\n Object.keys(changedValues._firmCMICDataChange).map((item) => {\n const firmCMICDataChange = {\n ...changedValues._firmCMICDataChange,\n [item]: {\n ...changedValues._firmCMICDataChange[item],\n manager_confirms:\n cmicChanges[item].has_securities !== 1 ? null : cmicChanges[item].manager_confirms,\n separate_share_classes:\n cmicChanges[item].has_securities === 2 ? null : cmicChanges[item].separate_share_classes,\n pre_trade_compliance_restrictions:\n cmicChanges[item].has_securities === 2\n ? null\n : cmicChanges[item].pre_trade_compliance_restrictions,\n other_measures: cmicChanges[item].has_securities === 2 ? null : cmicChanges[item].other_measures,\n },\n }\n form.setFieldsValue({\n _firmCMICDataChange: firmCMICDataChange,\n })\n })\n\n changedValues._firmCCMCDataChange &&\n Object.keys(cmicChanges).length > 0 &&\n setFirmCMICDataChange(\n Object.keys(cmicChanges).map((fundId) => {\n return {\n fund_id: fundId,\n ...cmicChanges[fundId],\n manager_confirms: !cmicChanges[fundId].has_securities ? null : cmicChanges[fundId].manager_confirms,\n }\n }),\n )\n // Multi Manager Platform\n const MMPChange = allValues._multiManagerPlatformChange\n if (changedValues._multiManagerPlatformChange) {\n const multiManagerPlatformChangeKeys = Object.keys(MMPChange)\n setMultiManagerPlatformChange(\n multiManagerPlatformChangeKeys.map((fundId) => {\n return {\n fund_id: fundId,\n multi_manager_platform: MMPChange[fundId].multi_manager_platform,\n } as MultiManagerPlatformType\n }),\n )\n }\n }}\n >\n \n
\n Firm ID:{dataFirmDetail.firm_id}\n \n {isUpdated ? (\n (Edited)\n ) : (\n ''\n )}\n {dataFirmDetail.firm_name}\n {/* MontLake Q Brands Premiere Palm-Tree Alpha Equity UCITS Fund - CHF Core Class Pooled Accumulating */}\n \n
\n \n \n {\n if (options.label) {\n const text = options.label.toLocaleString()\n settextFilterSearch(text)\n const newOption = renderSearchListExFirm.filter(\n (item) => item.name.toUpperCase().indexOf(text.toUpperCase()) !== -1,\n )\n setOptionShow(newOption)\n const saveOption = newOption.filter((item) => item.key === value)\n setOptionFilter(saveOption)\n if (\n saveOption.findIndex((item) => item.leftNav === selectedTab) === -1 &&\n newOption.length > 0\n ) {\n dispatch(\n updateSelectedNav({\n id: `${PREFIX_EXTERNAL}-${dataFirmDetail.firm_id}`,\n activeNav: saveOption[0].leftNav,\n }),\n )\n }\n }\n }}\n onSearch={handleSearch}\n options={optionShow.map((item) => ({ value: item.key, label: item.name }))}\n allowClear\n value={textFilterSearch}\n style={{ width: 200, height: 32, marginRight: 8 }}\n >\n } />\n \n {isUpdated ? (\n \n \n \n ) : (\n \n )}\n \n \n \n \n }\n size=\"default\"\n style={{ height: '100%', width: '100%', display: 'flex', flexDirection: 'column' }}\n >\n \n
\n \n {tabList.map((item) => {\n const existTab = optionFilter.findIndex((i) => i.leftNav === item.id)\n if (existTab === -1 && textFilterSearch !== '') {\n return null\n }\n return (\n {\n dispatch(\n updateSelectedNav({\n id: `${PREFIX_EXTERNAL}-${dataFirmDetail.firm_id}`,\n activeNav: item.id,\n }),\n )\n }}\n >\n
\n {item.status === TAB_STATUS_ENUM.SUCCESS && }\n
\n {item.id}\n \n )\n })}\n
\n \n \n \n \n {optionFilter.length === 0 ? (\n
\n \n
\n ) : (\n renderTabContent(selectedTab)\n )}\n
\n
\n \n \n \n \n )}\n {loading && }\n \n )\n}\n\nexport default MyFirm\n","import { Spin, Tabs } from 'antd'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RouteComponentProps, useLocation } from 'react-router-dom'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport { ExNewFundProvider } from '../../shared/api/context/ExNewFundContext'\nimport { FirmDetailDataProvider } from '../../shared/api/context/FirmDetailDataContext'\nimport { FundDetailDataProvider } from '../../shared/api/context/FundDetailDataContext'\nimport { FundDetailDropdownProvider } from '../../shared/api/context/FundDetailDropdownContext'\nimport { Colors } from '../../shared/colors'\nimport ExternalMainLayout from '../../shared/components/ExternalMainLayout'\nimport { DraftManagerProvider } from '../../shared/DraftManager'\nimport { history } from '../../shared/history'\nimport { LeftNavExFirmEnum } from '../../shared/SearchExFirmLabel'\nimport { LeftNavExFundEnum } from '../../shared/SearchExFundLabel'\nimport {\n addTabs,\n EX_OVERVIEW_KEY,\n FundFirmTypeEnum,\n PREFIX_EXTERNAL,\n removeTabs,\n updateActiveTabs,\n} from '../../slice/appSettingsSlice'\nimport ExDashboardTab from './ExDashboardTab'\nimport { ExFundDetailMain, EXFUND_DATE_FIELDS } from './ExFundDetailMain'\nimport { ExNewFundMain } from './ExNewFund/ExNewFundMain'\nimport MyFirm, { EXFIRM_DATE_FIELDS } from './MyFirm'\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n overflow: hidden;\n\n .ant-tabs-nav {\n margin-bottom: 0;\n }\n\n .ant-tabs-content-holder {\n overflow: hidden;\n }\n\n .ant-tabs-content {\n flex-grow: 1;\n background: white;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n height: 100%;\n\n .ant-tabs-tabpane-active {\n height: 100%;\n display: flex;\n }\n\n .ant-card-head {\n min-height: auto;\n }\n }\n`\n\ntype Props = {}\n\nconst ExDashboard: React.FC> = ({ match }) => {\n const dispatch = useDispatch()\n const { exTabs } = useSelector((state: RootState) => state.appSettings)\n const { params, path } = match\n const { search } = useLocation()\n\n const [shouldUpdate, setShouldUpdate] = React.useState(false)\n const [updatedFundPerformance, setUpdatedFundPerformance] = React.useState()\n\n React.useEffect(() => {\n // effect to resolve tabs from url\n const fundIdFromUrl = params.fundId\n const firmIdFromUrl = params.firmId\n const activeNav = params.fundEsg\n const activeFirmNav = params.firmEsg\n\n const query = new URLSearchParams(search)\n const isPreview = query.get('preview') === '1'\n const previewTab = query.get('preview_tab') || undefined\n\n const selectActiveNav = (value: string | undefined, type: FundFirmTypeEnum) => {\n if (type === FundFirmTypeEnum.FUNDS) {\n if (value === 'esg') {\n return LeftNavExFundEnum.FUND_ESG_FACTORS\n }\n if (value === 'fund-family') {\n return LeftNavExFundEnum.FUND_FAMILY\n }\n return LeftNavExFundEnum.FUND_OVERVIEW\n }\n\n if (type === FundFirmTypeEnum.FIRMS_IN_FUNDS) {\n if (value === 'esg') {\n return LeftNavExFirmEnum.FIRM_ESG_POLICIES\n }\n if (value === 'co-investment') {\n return LeftNavExFirmEnum.CO_INVESTMENT\n }\n if (value === 'firm-ccmc') {\n return LeftNavExFirmEnum.FIRM_CMIC\n }\n if (value === 'firm-diversity-inclusion') {\n return LeftNavExFirmEnum.FIRM_DIVERSITY_INCLUSION\n }\n if (value === 'firm-multi-manager') {\n return LeftNavExFirmEnum.FIRM_MULTI_MANAGER_POD_PLATFORM\n }\n if (value === 'fund-family') {\n return LeftNavExFirmEnum.FUND_FAMILY\n }\n return LeftNavExFirmEnum.ASSETS_UNDER_MANAGEMENT\n }\n }\n\n if (fundIdFromUrl) {\n dispatch(\n addTabs({\n id: `${PREFIX_EXTERNAL}-${fundIdFromUrl}`,\n type: FundFirmTypeEnum.FUNDS,\n activeNav: selectActiveNav(activeNav, FundFirmTypeEnum.FUNDS),\n isPreview,\n previewTab,\n }),\n )\n history.push('/')\n }\n if (firmIdFromUrl) {\n dispatch(\n addTabs({\n id: `${PREFIX_EXTERNAL}-${firmIdFromUrl}`,\n type: FundFirmTypeEnum.FIRMS_IN_FUNDS,\n activeNav: selectActiveNav(activeFirmNav, FundFirmTypeEnum.FIRMS_IN_FUNDS),\n }),\n )\n history.push('/')\n }\n }, [dispatch, params.fundEsg, params.firmEsg, params.firmId, params.fundId, path, search])\n\n return (\n \n \n \n {\n if (key === EX_OVERVIEW_KEY) {\n dispatch(updateActiveTabs(EX_OVERVIEW_KEY))\n }\n dispatch(updateActiveTabs(key))\n }}\n activeKey={exTabs.activeTab}\n onEdit={(targetKey, action) => {\n if (action === 'remove') {\n dispatch(removeTabs(targetKey as string))\n }\n }}\n >\n \n setUpdatedFundPerformance(updatedFund)}\n />\n \n {exTabs.tabList &&\n exTabs.tabList.map((tab) => (\n \n ) : tab.name ? (\n \n ) : (\n \n )\n }\n key={tab.id}\n closable={true}\n >\n {tab.type === FundFirmTypeEnum.FIRMS_IN_FUNDS || tab.type === FundFirmTypeEnum.FIRMS ? (\n \n \n \n ) : tab.id.split('-')[1] === 'new' ? (\n \n \n \n ) : (\n setUpdatedFundPerformance(undefined)}\n >\n \n \n )}\n \n ))}\n \n \n \n \n )\n}\n\nexport default ExDashboard\n\ntype TitleProps = {\n name: string\n}\nconst RenderTitleTabPane: React.FC = ({ name }) => {\n return (\n
\n \n M\n
\n
{name}
\n \n )\n}\n","import { CaretRightOutlined } from '@ant-design/icons'\nimport { Collapse, Spin, Typography } from 'antd'\nimport React from 'react'\nimport { useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport APIService from '../../shared/api'\nimport { ArticlesResponse } from '../../shared/api/services/content.service'\nimport ExternalMainLayout from '../../shared/components/ExternalMainLayout'\nimport MainLayout from '../../shared/components/MainLayout'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nconst { Title } = Typography\nconst { Panel } = Collapse\nconst Container = styled.div`\n display: flex;\n flex-grow: 2;\n height: 100%;\n margin: 20px auto;\n flex-direction: column;\n justify-content: safe center;\n align-items: center;\n padding: 40px;\n padding-top: 20px;\n padding-bottom: 0;\n overflow-y: auto;\n & .ant-collapse-content {\n background: #f7f7f7;\n border-radius: 4px;\n margin-bottom: 25px;\n border: 0;\n }\n`\nconst Wrapper = styled('div')`\n background: white;\n display: flex;\n width: 100%;\n padding: 10px 25px;\n padding-top: 0;\n flex-direction: column;\n height: 100%;\n min-height: -webkit-fill-available;\n`\nconst Header = styled(Title)`\n position: relative;\n text-align: center;\n padding: 10px 0;\n height: auto;\n margin: 0.5rem 0 1.5rem 0;\n display: block;\n`\nexport const HelpAndFaqMain: React.FC = () => {\n const { user } = useSelector((state: RootState) => state.user)\n return user && user.hfrml_internal_user ? (\n \n \n \n ) : (\n \n \n \n )\n}\n\nexport const RenderHelpAndFaq: React.FC = () => {\n const [articleData, setArticleData] = React.useState<{ [key: string]: string }>({})\n const { data: articlesData, invoke: invokeArticlesData, loading: articlesLoading } = useServiceState(\n APIService.contentService.fetchArticles,\n )\n\n const handleChange = async (key: string | string[]) => {\n if (typeof key === 'string') {\n key = [key]\n }\n key.forEach(async (item: string) => {\n // No api call if panel is previously loaded (opened)\n if (articleData[item] === undefined || articleData[item].trim() === '') {\n const { data } = await APIService.contentService.fetchArticleDetail(Number(item))\n setArticleData((prevArticles: { [key: string]: string }) => {\n return {\n ...prevArticles,\n [item]: data.content,\n }\n })\n }\n })\n }\n React.useEffect(() => {\n invokeArticlesData()\n }, [invokeArticlesData])\n return (\n \n \n
Help And FAQs
\n \n }\n >\n {articlesData &&\n articlesData.map((article: ArticlesResponse) => {\n return (\n \n
\n \n )\n })}\n \n \n \n \n )\n}\n","import { ColumnProps } from 'antd/lib/table'\nimport React, { useEffect } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { RootState } from '../../../app/rootReducer'\nimport APIService from '../../../shared/api'\nimport { FirmSearchColumnResponse } from '../../../shared/api/models/FirmDetails'\nimport { FilterTypeColumnTable } from '../../../shared/api/models/Funds'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { updateFirmSearchColumns } from '../../../slice/appSettingsSlice'\n\nexport interface FirmSearchColumnPropsExtended extends ColumnProps {\n key: string\n filter_type: FilterTypeColumnTable\n}\n\nexport type FirmSearchAllColumnContextType = {\n dataAllColumns: FirmSearchColumnResponse | undefined\n defaultColumns: FirmSearchColumnPropsExtended[]\n loading: boolean\n}\n\nconst defaultValue: FirmSearchAllColumnContextType = {\n dataAllColumns: undefined,\n defaultColumns: [],\n loading: true,\n}\n\nconst DEFAULT_COLUMNS = ['firm_id', 'firm_name', 'founded']\n\nexport const FirmSearchColumnContext = React.createContext(defaultValue)\n\nexport const FirmSearchColumnProvider: React.FC = ({ children }) => {\n const dispatch = useDispatch()\n const { invoke: getAllColumns, data: dataAllColumns, loading: allColumnLoading } = useServiceState(\n APIService.firmService.fetchAllColumns,\n )\n\n const { firmSearchColumns } = useSelector((state: RootState) => state.appSettings)\n\n React.useEffect(() => {\n getAllColumns()\n }, [getAllColumns])\n\n const defaultColumns: FirmSearchColumnPropsExtended[] | undefined = React.useMemo(() => {\n if (!dataAllColumns) {\n return []\n }\n\n return DEFAULT_COLUMNS.map((defaultKey) => ({\n ...dataAllColumns[defaultKey],\n key: defaultKey,\n title: dataAllColumns[defaultKey].human_readable_name,\n sorter: true,\n dataIndex: defaultKey,\n }))\n }, [dataAllColumns])\n\n useEffect(() => {\n if (firmSearchColumns.length > 0) {\n return\n }\n if (defaultColumns.length) {\n dispatch(updateFirmSearchColumns(defaultColumns.map((item) => item.key)))\n }\n }, [defaultColumns, dispatch, firmSearchColumns.length])\n\n const value = {\n dataAllColumns,\n loading: allColumnLoading,\n defaultColumns,\n }\n return {children}\n}\n","import { Col, Input, Modal, notification, Row, Table } from 'antd'\nimport React, { useEffect } from 'react'\nimport APIService from '../../shared/api'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\n\ntype Props = {\n isOpen: boolean\n onRequestClose: () => void\n selectedFirmId: string\n selectedFirmName: string\n onSubmitDeleting: () => void\n}\n\nconst DeleteFirmModal: React.FC = ({\n isOpen,\n onRequestClose,\n selectedFirmId,\n selectedFirmName,\n onSubmitDeleting,\n}) => {\n const [submitting, setSubmitting] = React.useState(false)\n const [submitText, setSubmitText] = React.useState()\n\n const { data, invoke: previewData, loading } = useServiceState(APIService.firmDetailService.previewDeleteFirm)\n\n useEffect(() => {\n if (!selectedFirmId) {\n return\n }\n previewData(selectedFirmId)\n }, [previewData, selectedFirmId])\n\n const handleSubmit = async () => {\n if (!selectedFirmId) {\n return\n }\n try {\n setSubmitting(true)\n await APIService.firmDetailService.deleteFirm(selectedFirmId)\n notification.success({ message: 'Firm Deleted!' })\n onSubmitDeleting()\n onRequestClose()\n } catch (err) {\n notification.error({ message: err.response.data.message })\n } finally {\n setSubmitting(false)\n }\n }\n\n return (\n onRequestClose()}\n onOk={handleSubmit}\n okText={'Delete'}\n confirmLoading={submitting}\n style={{ minHeight: '60vh' }}\n okButtonProps={\n submitText?.toLowerCase() !== selectedFirmId.toLowerCase()\n ? { disabled: true, className: 'modal-footer-hiden-button' }\n : { danger: true }\n }\n >\n \n
\n By deleting the firm, these number of linked entities in these tables will also be deleted. Please enter{' '}\n Firm ID to confirm.\n setSubmitText(e.target.value)}\n />\n \n \n ({\n table_name: key,\n linked_entities: data[key],\n }))\n : []\n }\n columns={[\n {\n title: 'Table Name',\n dataIndex: 'table_name',\n key: 'table_name',\n sorter: {\n compare: (a, b) => {\n return a.table_name.toLowerCase() > b.table_name.toLowerCase() ? 1 : -1\n },\n multiple: 1,\n },\n defaultSortOrder: 'ascend',\n },\n {\n title: 'Number of Linked Entities',\n dataIndex: 'linked_entities',\n key: 'linked_entities',\n sorter: {\n compare: (a, b) => {\n return a.linked_entities - b.linked_entities\n },\n multiple: 2,\n },\n defaultSortOrder: 'descend',\n },\n ]}\n />\n \n )\n}\n\nexport default DeleteFirmModal\n","import { notification, Row, Input, Col, Button, Space, Collapse } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React, { CSSProperties, useMemo } from 'react'\nimport {\n DropResult,\n DragDropContext,\n Droppable,\n Draggable,\n DraggableLocation,\n DraggingStyle,\n NotDraggingStyle,\n} from 'react-beautiful-dnd'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../../app/rootReducer'\nimport { Colors } from '../../../shared/colors'\nimport { LoadingDetails } from '../../../shared/components/LoadingDetails'\nimport { updateFirmSearchColumns } from '../../../slice/appSettingsSlice'\nimport { FirmSearchColumnContext, FirmSearchColumnPropsExtended } from './FirmSearchColumnContext'\n\ntype FirmSearchColumnSource = {\n groupName: string\n columns: FirmSearchColumnPropsExtended[]\n}\n\nconst Wrapper = styled.div`\n max-height: 90vh;\n`\n\nenum DroppableIds {\n TargetColumns = 'targetColumns',\n SourceColumns = 'sourceColumns',\n}\n\nconst { Panel } = Collapse\n\nconst grid = 8\n\nconst getListStyle = (isDraggingOver: boolean) => ({\n background: isDraggingOver ? 'lightblue' : 'lightgrey',\n borderRadius: '5px',\n padding: grid,\n minHeight: '100%',\n})\n\nconst getItemStyle = (\n isDragging: boolean,\n draggableStyle: DraggingStyle | NotDraggingStyle | undefined,\n): CSSProperties => ({\n // some basic styles to make the items look a bit nicer\n userSelect: 'none',\n padding: grid * 2,\n\n // change background colour if dragging\n background: isDragging ? Colors.primary : 'white',\n border: `1px solid ${Colors.primary}`,\n borderRadius: '5px',\n marginBottom: '3px',\n\n // styles we need to apply on draggables\n ...draggableStyle,\n})\n\nconst reorder = (list: FirmSearchColumnPropsExtended[] | undefined, startIndex: number, endIndex: number) => {\n if (!list || !list.length) {\n return []\n }\n const result = Array.from(list)\n const [removed] = result.splice(startIndex, 1)\n result.splice(endIndex, 0, removed)\n\n return result\n}\n\nconst remove = (target: FirmSearchColumnPropsExtended[], startIndex: number) => {\n const results = Array.from(target)\n results.splice(startIndex, 1)\n return results\n}\n\nconst move = (\n source: FirmSearchColumnSource[],\n destination: unknown[],\n droppableSource: DraggableLocation,\n droppableDestination: DraggableLocation,\n) => {\n const sourceClone = source.reduce(\n (s, i) => (i.columns ? [...s, ...i.columns] : s),\n [],\n )\n\n const destClone = Array.from(destination)\n const [removed] = sourceClone.splice(droppableSource.index - 1, 1)\n destClone.splice(droppableDestination.index, 0, removed)\n\n return {\n [droppableSource.droppableId]: sourceClone,\n [droppableDestination.droppableId]: destClone,\n }\n}\n\ninterface HeaderGroupProps {\n groupName: string\n onAddAll: () => void\n}\n\nconst Flex = styled('div')`\n display: flex;\n justify-content: space-between;\n align-items: center;\n`\n\nconst HeaderGroup: React.FC = ({ groupName, onAddAll }) => {\n return (\n \n {groupName}\n \n \n )\n}\n\ntype Props = {\n isOpen: boolean\n setOpen: (isOpen: boolean) => void\n}\n\nconst FirmSearchColumnBuilder: React.FC = ({ isOpen, setOpen }) => {\n const { dataAllColumns, loading, defaultColumns } = React.useContext(FirmSearchColumnContext)\n const { firmSearchColumns } = useSelector((state: RootState) => state.appSettings)\n const [textColumnSearch, setTextColumnSearch] = React.useState('')\n const dispatch = useDispatch()\n const [activePanels, setActivePanels] = React.useState([])\n\n const firmSearchAllColumns: FirmSearchColumnSource[] = React.useMemo(() => {\n if (!dataAllColumns) {\n return []\n }\n return Object.keys(dataAllColumns).reduce((acc, curr) => {\n const currentColumn = dataAllColumns[curr]\n const foundIndex = acc.findIndex((item) => item.groupName === currentColumn.section)\n if (foundIndex === -1) {\n return [\n ...acc,\n {\n groupName: currentColumn.section,\n columns: [\n {\n title: currentColumn.human_readable_name,\n dataIndex: curr,\n key: curr,\n filter_type: currentColumn.filter_type,\n sorter: true,\n },\n ],\n },\n ]\n }\n\n return [\n ...acc.slice(0, foundIndex),\n {\n ...acc[foundIndex],\n columns: [\n ...acc[foundIndex].columns,\n {\n title: currentColumn.human_readable_name,\n dataIndex: curr,\n key: curr,\n filter_type: currentColumn.filter_type,\n sorter: true,\n },\n ],\n },\n ...acc.slice(foundIndex + 1, acc.length),\n ]\n }, [] as FirmSearchColumnSource[])\n }, [dataAllColumns])\n\n const flattenAllColumns = firmSearchAllColumns && firmSearchAllColumns.flatMap((item) => item.columns)\n const firmColumns = firmSearchColumns\n ? firmSearchColumns.reduce((acc, currKey) => {\n const foundColumn = flattenAllColumns.find((item) => item.key === currKey)\n if (foundColumn) {\n return [...acc, foundColumn]\n }\n return acc\n }, [] as FirmSearchColumnPropsExtended[])\n : defaultColumns\n\n console.log({ firmSearchAllColumns })\n\n const [targetColumns, setTargetColumns] = React.useState(\n firmColumns.length ? firmColumns : defaultColumns,\n )\n\n const sourceColumns = useMemo(() => {\n if (textColumnSearch !== '') {\n return firmSearchAllColumns.map((i) => ({\n ...i,\n columns: i.columns.filter(\n (c) =>\n c.title?.toString().toLowerCase().includes(textColumnSearch.toLowerCase()) &&\n !targetColumns.some((t) => t.key === c.key),\n ),\n }))\n }\n return firmSearchAllColumns.map((i) => ({\n ...i,\n columns: i.columns.filter((c) => !targetColumns.some((t) => t.key === c.key)),\n }))\n }, [firmSearchAllColumns, targetColumns, textColumnSearch])\n\n React.useEffect(() => {\n textColumnSearch && setActivePanels(sourceColumns.map((item) => item.groupName))\n }, [sourceColumns, textColumnSearch])\n\n const onDragEnd = (result: DropResult) => {\n const { source, destination } = result\n\n if (!destination) {\n return\n }\n\n if (source.droppableId === DroppableIds.TargetColumns && destination.droppableId !== DroppableIds.TargetColumns) {\n const result = remove(targetColumns, source.index)\n\n setTargetColumns(result)\n return\n }\n\n if (source.droppableId === DroppableIds.SourceColumns && destination.droppableId === DroppableIds.TargetColumns) {\n const result = move(sourceColumns, targetColumns, source, destination)\n\n setTargetColumns(result[DroppableIds.TargetColumns] as FirmSearchColumnPropsExtended[])\n return\n }\n\n if (source.droppableId === DroppableIds.TargetColumns && destination.droppableId === DroppableIds.TargetColumns) {\n const result = reorder(targetColumns, source.index, destination.index)\n\n setTargetColumns(result)\n return\n }\n }\n\n const uniqueColumns = (columns: FirmSearchColumnPropsExtended[]) =>\n Array.from(new Set(columns.map((item) => item.key))).map((key) => {\n return columns.find((item) => item.key === key) as FirmSearchColumnPropsExtended\n })\n\n const handleAddGroupColumns = (columns: FirmSearchColumnPropsExtended[]) => {\n setTargetColumns(uniqueColumns([...targetColumns, ...columns]))\n }\n\n const handleSubmit = () => {\n dispatch(updateFirmSearchColumns(targetColumns.map((item) => item.key)))\n notification.success({ message: 'Updated columns successfully!', placement: 'bottomLeft' })\n setOpen(false)\n }\n\n const handleReset = () => {\n setTargetColumns(defaultColumns)\n }\n\n const handleAddAll = () => {\n const flatenColumns = firmSearchAllColumns.flatMap((item) => item.columns)\n setTargetColumns(uniqueColumns(flatenColumns))\n }\n\n return (\n setOpen(false)}\n >\n {!loading && (\n \n \n \n
\n setTextColumnSearch(e.target.value)} />\n
\n
\n \n
\n

\n Displayed Columns\n \n

\n \n {({ innerRef, placeholder }, snapshot) => {\n return (\n
\n {targetColumns &&\n targetColumns.map((targetCol, index) => (\n \n {(provided, snapshot) => (\n \n {targetCol.title}\n
\n )}\n \n ))}\n {placeholder}\n \n )\n }}\n
\n \n \n

\n All Columns\n \n \n activePanels.length > 0\n ? setActivePanels([])\n : setActivePanels(sourceColumns.map((source) => source.groupName))\n }\n >\n {activePanels.length > 0 ? 'Collapse all' : 'Expand all'}\n \n \n \n

\n \n {({ innerRef, placeholder }, snapshot) => {\n let draggableIndex = 0\n\n return (\n
\n {\n setActivePanels(key as string[])\n }}\n >\n {sourceColumns.map((group) => {\n if (textColumnSearch !== '' && group.columns.length === 0) {\n return null\n }\n return (\n handleAddGroupColumns(group.columns)}\n />\n }\n key={`${group.groupName}`}\n >\n {group.columns &&\n group.columns.map((col) => {\n draggableIndex++\n return (\n \n {(provided, snapshot) => (\n \n {col.title}\n
\n )}\n \n )\n })}\n {placeholder}\n \n )\n })}\n \n \n )\n }}\n
\n \n \n \n \n )}\n {loading && }\n \n )\n}\n\nexport default FirmSearchColumnBuilder\n","import { TableOutlined } from '@ant-design/icons'\nimport { Button, Row } from 'antd'\nimport React from 'react'\nimport FirmSearchColumnBuilder from './ColumnBuilder/FirmSearchColumnBuilder'\n\ntype Props = {}\n\nconst FirmTableHeader: React.FC = () => {\n const [showColumnBuilder, setShowColumnBuilder] = React.useState(false)\n\n return (\n \n \n {showColumnBuilder && }\n \n )\n}\n\nexport default FirmTableHeader\n","import { DownloadOutlined, ReloadOutlined, SearchOutlined } from '@ant-design/icons'\nimport { Button, DatePicker, Input, notification, Pagination, Radio, Row, Select, Space, Table, Tag } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport { SorterResult } from 'antd/lib/table/interface'\nimport axios from 'axios'\nimport JsFileDownload from 'js-file-download'\nimport moment from 'moment'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport APIService from '../../shared/api'\nimport { FundDetailDropdownContext } from '../../shared/api/context/FundDetailDropdownContext'\nimport { FirmDetails, FirmSearchColumnResponse } from '../../shared/api/models/FirmDetails'\nimport { FilterInfoColumn, FundDropdownCodeType, FundDropdownType } from '../../shared/api/models/FundDetails'\nimport { FilterTypeColumnTable } from '../../shared/api/models/Funds'\nimport { Colors } from '../../shared/colors'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { LeftNavFirmEnum } from '../../shared/SearchFirmLabel'\nimport GenUtil from '../../shared/utils/gen-util'\nimport { addTabs, FundFirmTypeEnum } from '../../slice/appSettingsSlice'\nimport { updateFirmSearchParams } from '../Dashboard/DashboardTab/SearchForm/redux/searchParamsSlice'\nimport { FirmSearchColumnContext } from './ColumnBuilder/FirmSearchColumnContext'\nimport DeleteFirmModal from './DeleteFirmModal'\nimport FirmTableHeader from './FirmTableHeader'\n\nconst Wrapper = styled.div`\n display: flex;\n flex-direction: column;\n width: 100%;\n padding: 16px;\n`\n\ntype Props = {}\n\nconst FirmSearch: React.FC = () => {\n const { fundDataDropdown, dataMinoritySearch } = React.useContext(FundDetailDropdownContext)\n const dispatch = useDispatch()\n const { data, loading, invoke: searchFirm } = useServiceState(APIService.firmService.searchFirms)\n const { firmSearchParams } = useSelector((state: RootState) => state.searchParams)\n\n const filteredInfo = React.useMemo(() => {\n if (Object.keys(firmSearchParams).length === 0) {\n return {}\n }\n const filtered = Object.keys(firmSearchParams).reduce((acc, key) => {\n if (key === 'is_minority_owned_firm' || key === 'is_minority_managed_fund') {\n return acc\n }\n return { ...acc, [key]: firmSearchParams[key]?.value }\n }, {} as any)\n\n return filtered\n }, [firmSearchParams])\n\n const { user } = useSelector((state: RootState) => state.user)\n const appData = useSelector((state: RootState) => state.appData)\n const searchInput = React.useRef(null)\n\n const { dataAllColumns } = React.useContext(FirmSearchColumnContext)\n\n const { firmSearchColumns } = useSelector((state: RootState) => state.appSettings)\n const [page, setPage] = React.useState(1)\n const [pageSize, setPageSize] = React.useState(25)\n const [sortBy, setSortBy] = React.useState()\n const [orderBy, setOrderBy] = React.useState()\n\n const [selectedFirmIds, setSelectedFirmIds] = React.useState()\n const [selectedFirmName, setSelectedFirmName] = React.useState()\n const [showDeleteFirmModal, setShowDeleteFirmModal] = React.useState(false)\n\n const [loadingExport, setLoadingExport] = React.useState(false)\n\n //Fetch Legacy-Strategy\n const { invoke: getLegacyStrategy, data: dataLegacy } = useServiceState(\n APIService.fundDetailService.fetchLegacyStrategy,\n )\n React.useEffect(() => {\n getLegacyStrategy()\n }, [getLegacyStrategy])\n\n const handleTableChange = (sorter: SorterResult) => {\n setSortBy(sorter.order ? sorter.columnKey?.toString() : undefined)\n setOrderBy(sorter.order ? (sorter.order === 'ascend' ? 'ASC' : 'DESC') : undefined)\n }\n\n const fundSearchParamsResolved = React.useMemo(() => {\n setPage(1)\n if (Object.keys(filteredInfo).length === 0) {\n return {}\n }\n const searchParams: Partial = Object.keys(filteredInfo).reduce((acc, key) => {\n if (filteredInfo[key] && dataAllColumns && dataAllColumns[key].filter_type) {\n switch (dataAllColumns[key].filter_type) {\n case 'boolean':\n return {\n ...acc,\n [key]: filteredInfo[key]?.[0],\n }\n case 'date':\n case 'year_month':\n const lteDate = filteredInfo[key]?.[1]\n const gteDate = filteredInfo[key]?.[0]\n return {\n ...acc,\n [key]: {\n lte: lteDate && lteDate !== '' ? lteDate : undefined,\n gte: gteDate && gteDate !== '' ? gteDate : undefined,\n },\n }\n case 'string_search':\n if (dataAllColumns[key].supports_exact_match === true) {\n const type = firmSearchParams[key].type\n if (type === 'contains') {\n return { ...acc, [key]: { contains: filteredInfo[key]?.[0] } }\n }\n if (type === 'equals') {\n return { ...acc, [key]: { equals: filteredInfo[key]?.[0] } }\n }\n return acc\n }\n return { ...acc, [key]: filteredInfo[key]?.[0] }\n\n case 'multiselect':\n return { ...acc, [key]: filteredInfo[key] }\n case 'numeric':\n const lte = filteredInfo[key]?.[1]\n const gte = filteredInfo[key]?.[0]\n return {\n ...acc,\n [key]: {\n lte: lte && lte !== '' ? Number(lte) : undefined,\n gte: gte && gte !== '' ? Number(gte) : undefined,\n },\n }\n case 'array_anyof':\n const type = firmSearchParams[key].type\n if (type === 'array_anyof') {\n return { ...acc, [key]: { array_anyof: filteredInfo[key as keyof FilterInfoColumn] } }\n }\n default:\n break\n }\n }\n return acc\n }, {})\n return searchParams\n }, [dataAllColumns, filteredInfo, firmSearchParams])\n\n const renderFooter = () => {\n return (\n \n \n \n {user?.can_delete_firm && (\n \n )}\n \n `${range[0]}-${range[1]} of ${total} items`}\n onChange={(currentPage) => setPage(currentPage)}\n total={data ? data.total : 0}\n current={page}\n pageSize={pageSize}\n pageSizeOptions={['10', '25', '50', '100']}\n onShowSizeChange={(current, size) => {\n setPageSize(size)\n if (current !== 1) {\n setPage(1)\n }\n }}\n />\n \n )\n }\n\n React.useEffect(() => {\n searchFirm({\n where: Object.keys(fundSearchParamsResolved).length > 0 ? fundSearchParamsResolved : undefined,\n page,\n limit: pageSize,\n sort_by: sortBy,\n order_by: orderBy,\n columns: firmSearchColumns,\n })\n }, [firmSearchColumns, fundSearchParamsResolved, orderBy, page, pageSize, searchFirm, sortBy])\n\n const refetch = () => {\n searchFirm({\n where: Object.keys(fundSearchParamsResolved).length > 0 ? fundSearchParamsResolved : undefined,\n page,\n limit: pageSize,\n sort_by: sortBy,\n order_by: orderBy,\n columns: firmSearchColumns,\n })\n }\n\n const exportManagerList = async () => {\n setLoadingExport(true)\n try {\n const res = await APIService.fundService.postDownloadFile({\n file_type: 'MANAGER_LINK_INTERNAL_FIRM_SEARCH_EXPORT',\n data: {\n where: Object.keys(fundSearchParamsResolved).length > 0 ? fundSearchParamsResolved : undefined,\n columns: firmSearchColumns,\n },\n })\n\n //const resFile = await APIService.fundService.downloadFileByUrl(res.data.url)\n const resFile = await axios.get(`${process.env.REACT_APP_AUTH_API_URL}/manager-link/files/${res.data.url}`)\n JsFileDownload(resFile.data, 'managerlist-results.csv', 'application/csv')\n } catch (error) {\n console.log(error.response)\n notification.error({ message: 'Failed to export Manager List!' })\n } finally {\n setLoadingExport(false)\n }\n }\n\n const handleClearAllFilter = () => {\n dispatch(updateFirmSearchParams({}))\n }\n const removeFromFilter = (dataIndex: string, clearFilters?: (() => void) | undefined) => {\n const editedSearch = Object.keys(firmSearchParams).reduce((acc, key) => {\n if (key === dataIndex) {\n return acc\n }\n return { ...acc, [key]: firmSearchParams[key] }\n }, {})\n dispatch(updateFirmSearchParams(editedSearch))\n clearFilters && clearFilters()\n }\n\n const addToFilter = (dataIndex: string, selectedKeys: React.ReactText[], confirm: (() => void) | undefined) => {\n dispatch(\n updateFirmSearchParams({\n ...firmSearchParams,\n [dataIndex]: { value: selectedKeys as string[] },\n }),\n )\n confirm && confirm()\n }\n\n const getColumnSearchProps = (\n dataIndex: string,\n filterType: FilterTypeColumnTable,\n ): ColumnProps<{ [key: string]: any }> => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => {\n switch (filterType) {\n case 'string_search':\n if (\n dataAllColumns &&\n dataAllColumns[dataIndex as keyof FirmSearchColumnResponse].supports_exact_match === true\n ) {\n return (\n \n \n setSelectedKeys(e.target.value ? [e.target.value] : [])}\n //onPressEnter={() => confirm && confirm()}\n />\n {\n dispatch(\n updateFirmSearchParams({\n ...firmSearchParams,\n [dataIndex]: { value: selectedKeys as string[], type: 'equals' },\n }),\n )\n\n confirm && confirm()\n }}\n >\n Exact\n \n {\n dispatch(\n updateFirmSearchParams({\n ...firmSearchParams,\n [dataIndex]: { value: selectedKeys as string[], type: 'contains' },\n }),\n )\n confirm && confirm()\n }}\n >\n Partial\n \n \n \n \n \n )\n case 'date':\n return (\n
\n {\n setSelectedKeys([e ? moment(e).format('YYYY-MM-DD') : '', selectedKeys[1]])\n }}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n {\n setSelectedKeys([selectedKeys[0], e ? moment(e).format('YYYY-MM-DD') : ''])\n }}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n addToFilter(dataIndex, selectedKeys, confirm)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n
\n )\n case 'multiselect':\n let options: { label: string; value: string }[] = []\n const optionsDropdown = (fundDataDropdown && fundDataDropdown[dataIndex as keyof FundDropdownType]) || []\n switch (dataIndex) {\n case 'firm_denomination':\n case 'denomination':\n options = (optionsDropdown as Array).map((item) => ({\n value: item.code_code,\n label: item.code_code,\n }))\n break\n case 'strategy_new':\n if (!appData?.strategies || !appData?.strategies.length) {\n return\n }\n options = appData.strategies.map((item) => ({\n value: item.strategy_name.toString(),\n label: item.strategy_name.toString(),\n }))\n break\n case 'strategy':\n if (!dataLegacy?.legacy_strategies || !dataLegacy?.legacy_strategies?.length) {\n return\n }\n options = dataLegacy.legacy_strategies.map((item) => ({\n value: item.strategy_name.toString(),\n label: item.strategy_name.toString(),\n }))\n break\n case 'sub_strategy':\n if (!dataLegacy?.sub_strategies || !dataLegacy?.sub_strategies?.length) {\n return\n }\n options = dataLegacy.sub_strategies.map((item) => ({\n value: item.sub_strategy_name.toString(),\n label: item.sub_strategy_name.toString(),\n }))\n break\n case 'sub_strategy_new':\n if (!appData?.subStrategies || !appData?.subStrategies.length) {\n return\n }\n options = appData.subStrategies.map((item) => ({\n value: item.sub_strategy_name.toString(),\n label: item.sub_strategy_name.toString(),\n }))\n break\n default:\n options = (optionsDropdown as Array).map((item) =>\n typeof item === 'string'\n ? { value: item, label: item }\n : { value: item.code_description, label: item.code_description },\n )\n }\n\n return (\n \n \n setSelectedKeys(e as string[])}\n options={options}\n />\n {\n if (selectedKeys.length > 0) {\n return addToFilter(dataIndex, selectedKeys, confirm)\n }\n return removeFromFilter(dataIndex, clearFilters)\n }}\n icon={}\n />\n \n \n \n \n )\n case 'year_month':\n return (\n
\n {\n setSelectedKeys([e ? moment(e).format('YYYY-MM') : '', selectedKeys[1]])\n }}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n {\n setSelectedKeys([selectedKeys[0], e ? moment(e).format('YYYY-MM') : ''])\n }}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n addToFilter(dataIndex, selectedKeys, confirm)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n />\n\n removeFromFilter(dataIndex, clearFilters)}\n size=\"small\"\n style={{ width: 90 }}\n icon={}\n />\n \n
\n )\n default:\n break\n }\n },\n\n filterIcon: (filtered) => ,\n onFilterDropdownVisibleChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput && searchInput.current && searchInput.current.select())\n }\n },\n })\n\n const columns = React.useMemo(() => {\n return dataAllColumns && firmSearchColumns.length\n ? firmSearchColumns.map((column) => {\n if (column === 'firm_name') {\n return {\n title: dataAllColumns[column].human_readable_name,\n dataIndex: column,\n key: column,\n sorter: true,\n render: (text: string) =>
{text}
,\n filter_type: dataAllColumns[column].filter_type,\n onCell: (record: FirmDetails) => ({\n onClick: () => {\n dispatch(addTabs({ name: record.firm_name, id: record.firm_id, type: FundFirmTypeEnum.FIRMS }))\n },\n }),\n }\n }\n return {\n title: dataAllColumns[column].human_readable_name,\n dataIndex: column,\n key: column,\n sorter: true,\n filter_type: dataAllColumns[column].filter_type,\n }\n })\n : []\n }, [dataAllColumns, dispatch, firmSearchColumns])\n\n const renderFilterSection = () => {\n return (\n \n {Object.keys(filteredInfo).map((item) => {\n const value = filteredInfo[item]\n if (!value || !dataAllColumns || !dataAllColumns[item]) {\n return\n }\n if (typeof value[0] === 'boolean') {\n return (\n {\n e.stopPropagation()\n removeFromFilter(item)\n // dispatch(updateSearchParams({ ...fundSearchParamsRedux, [item]: null }))\n }}\n >\n {dataAllColumns[item].human_readable_name}: \n {value[0] === true ? 'Yes' : 'No'}\n \n )\n }\n if (dataAllColumns[item].filter_type === 'numeric' || dataAllColumns[item].filter_type === 'date') {\n return (\n {\n e.stopPropagation()\n removeFromFilter(item)\n // dispatch(updateSearchParams({ ...fundSearchParamsRedux, [item]: null }))\n }}\n >\n {dataAllColumns[item].human_readable_name}: \n\n {value[0] && value[0] !== '' ? value[0] : 'N/A'}\n {value[1] && value[1] !== '' ? '- ' + value[1] : ' - N/A'}\n \n )\n }\n if (dataAllColumns[item].supports_exact_match === true) {\n const type = firmSearchParams[item].type\n return (\n {\n e.stopPropagation()\n removeFromFilter(item)\n }}\n >\n {dataAllColumns[item].human_readable_name}: \n {type && [{type.toUpperCase()}] }\n {value.join(', ') || null}\n \n )\n }\n return (\n {\n e.stopPropagation()\n removeFromFilter(item)\n }}\n >\n {dataAllColumns[item].human_readable_name}: \n {value.join(', ') || null}\n \n )\n })}\n {Object.keys(filteredInfo).filter((item) => !!filteredInfo[item]).length > 1 && (\n \n )}\n \n )\n }\n\n return (\n \n \n {renderFilterSection()}\n {\n setSelectedFirmIds(selectedRows.map((row) => row.firm_id))\n if (selectedRows.length === 1) {\n setSelectedFirmName(selectedRows[0].firm_name)\n }\n },\n }}\n // @ts-ignore\n columns={\n columns && columns.length\n ? columns.map((item, columnIndex) => {\n if (item.key === 'firm_assets') {\n return {\n ...item,\n width: 150,\n filteredValue: filteredInfo[item.key] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: number, record: FirmDetails) => (\n
\n {text\n ? Intl.NumberFormat('en-US', {\n style: 'currency',\n currency: record.denomination || 'USD',\n maximumFractionDigits: 0,\n minimumFractionDigits: 0,\n }).format(text)\n : ''}\n
\n ),\n onCell: (record: FirmDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.firm_name,\n id: record.firm_id,\n type: FundFirmTypeEnum.FIRMS,\n path: LeftNavFirmEnum.FIRM_ASSETS,\n }),\n )\n },\n }),\n }\n }\n if (item.key === 'is_firm_esg') {\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (text: string) =>
{text}
,\n onCell: (record: FirmDetails) => ({\n onClick: () => {\n dispatch(\n addTabs({\n name: record.firm_name,\n id: record.firm_id,\n type: FundFirmTypeEnum.FIRMS,\n path: LeftNavFirmEnum.FIRM_ESG,\n hyperlinkTable: 'firm_esg',\n }),\n )\n },\n }),\n }\n }\n if (item.filter_type === 'boolean') {\n return {\n ...item,\n sorter: true,\n width: 200,\n filteredValue: filteredInfo[item.key] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (value: boolean | undefined) => {\n if (value) {\n return 'Yes'\n }\n if (value === false) {\n return 'No'\n }\n return null\n },\n }\n }\n if (item.filter_type === 'year_month') {\n return {\n ...item,\n sorter: true,\n width: 200,\n fixed: columnIndex === 0,\n filteredValue: filteredInfo[item.key] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (date: string | undefined) => {\n return date ? GenUtil.getFormattedYearAndMonth(date) : null\n },\n }\n }\n if (item.filter_type === 'date') {\n return {\n ...item,\n sorter: true,\n width: 200,\n fixed: columnIndex === 0,\n filteredValue: filteredInfo[item.key] || null,\n ...getColumnSearchProps(item.key, item.filter_type),\n render: (date: string | undefined) => {\n return date ? GenUtil.getFormattedYearMonthAndDay(date) : null\n },\n }\n }\n return {\n ...item,\n filteredValue: filteredInfo[item.key] || null,\n sorter: item.sorter,\n width: 200,\n ...getColumnSearchProps(item.key, item.filter_type),\n }\n })\n : []\n }\n dataSource={data?.firms}\n loading={loading}\n size=\"small\"\n scroll={{ y: 'calc(100vh - 400px)', x: 'max-content' }}\n pagination={false}\n onChange={(_pagination, _filter, sorter: any) => {\n handleTableChange(sorter)\n }}\n footer={(record) => (record.length > 0 ? renderFooter() : null)}\n />\n {showDeleteFirmModal && selectedFirmIds && selectedFirmName && selectedFirmIds.length === 1 && (\n setShowDeleteFirmModal(false)}\n onSubmitDeleting={() => {\n setSelectedFirmIds(undefined)\n setSelectedFirmName(undefined)\n refetch()\n }}\n />\n )}\n
\n )\n}\n\nexport default FirmSearch\n","import { Tabs } from 'antd'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { RootState } from '../../app/rootReducer'\nimport { FirmDetailDataProvider } from '../../shared/api/context/FirmDetailDataContext'\nimport { FundDetailDropdownProvider } from '../../shared/api/context/FundDetailDropdownContext'\nimport { Colors } from '../../shared/colors'\nimport MainLayout from '../../shared/components/MainLayout'\nimport { LeftNavFirmEnum } from '../../shared/SearchFirmLabel'\nimport { FundFirmTypeEnum, MANAGER_LIST_KEY, updateFirmActiveTabs, removeFirmTabs } from '../../slice/appSettingsSlice'\nimport { RenderTitleTabPane } from '../Dashboard/Dashboard'\nimport { FirmDetailMain } from '../Dashboard/FirmDetail/FirmDetailMain'\nimport { FirmSearchColumnProvider } from './ColumnBuilder/FirmSearchColumnContext'\nimport FirmSearch from './FirmSearch'\n\nconst { TabPane } = Tabs\n\nconst StyledTab = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n overflow: hidden;\n\n .ant-tabs-nav {\n margin-bottom: 0%;\n }\n\n .ant-tabs-content-holder {\n overflow: hidden;\n }\n\n .ant-tabs-content {\n flex-grow: 1;\n background: white;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n height: 100%;\n\n .ant-tabs-tabpane-active {\n height: 100%;\n display: flex;\n }\n\n .ant-card-head {\n min-height: auto;\n }\n }\n`\n\ntype Props = {}\n\nconst ManagerList: React.FC = () => {\n const { firmTabs } = useSelector((state: RootState) => state.appSettings)\n\n const dispatch = useDispatch()\n\n return (\n \n {\n dispatch(updateFirmActiveTabs(key))\n }}\n activeKey={firmTabs.activeTab}\n onEdit={(targetKey, action) => {\n if (action === 'remove') {\n dispatch(removeFirmTabs(targetKey.toString()))\n }\n }}\n >\n \n \n \n \n \n \n \n {firmTabs &&\n firmTabs.tabList.map((item) => {\n return (\n } key={item.id} closable={true}>\n {item.type === FundFirmTypeEnum.FIRMS && (\n \n \n \n \n \n )}\n \n )\n })}\n \n \n )\n}\n\nexport default ManagerList\n","export const FundKeysMapping: { [key: string]: string } = {\n accepts_mgd_accts: 'Accepts Mng. Accts?',\n accepts_new_investment: 'Accepting New Investment',\n add_invest: 'Add Investment',\n added_to_db: 'Added To DB',\n administrative_fee: 'Admin. Fee %',\n administrator: 'Administrator',\n aifmd_compliant: 'AIFMD',\n allocation: 'Allocation',\n app_esgintegration: 'ESG Integration',\n app_impactinvest: 'Impact Investing',\n app_negativescreen: 'Negative/exclusionary screening',\n app_positivescreen: 'Positive / Best-in-class screening',\n app_sustaininvest: 'Sustainability theme Investing',\n auditor_name: 'Auditor',\n balance_redemption_return_days: 'Redemption Balance Returned within (days)',\n banking_agent: 'Banking Agent',\n benchmark1: 'Benchmark 1',\n benchmark2: 'Benchmark 2',\n benchmark3: 'Benchmark 3',\n bloomberg_ticker: 'Bloomberg Ticker',\n capacity: 'Capacity',\n constituent_count: '# of Constituents',\n consultant: 'Consultant',\n contact_status: 'Contact Status',\n custodian: 'Custodian',\n data_bloomberg: 'Bloomberg',\n data_factset: 'Factset',\n data_internal: 'ProprietaryOrInternal',\n data_msci: 'MSCI',\n data_other: 'Other',\n data_source: 'Data Source',\n data_sustainalytics: 'Sustainalytics',\n dead_fund: 'HFR Dead Funds Database',\n denomination: 'Denom.',\n domicile: 'Domicile',\n env_cleantech: 'Clean Technology',\n env_climatechange: 'Climate Change / Carbon',\n env_description: 'Environmental Description',\n env_greenbuilding: 'Green Building / Smart Growth',\n env_pollutiontaxes: 'Pollution / Toxic',\n env_sustainable: 'Sustainable Nature Resoures / Argiculture',\n env_waterconservation: 'Water Use Conservation',\n equity_redemption: 'Equity Redemptions',\n equity_subscription: 'Equity Subscriptions',\n firm_assets: 'Firm Assets',\n firm_assets_currency: 'Firm Assets Currency',\n firm_assets_date: 'Firm Asset Date',\n firm_id: 'Firm ID',\n firm_name: 'Firm Name',\n fund_assets: 'Fund Assets',\n fund_assets_date: 'Fund Asset Date',\n firm_denomination: 'Firm Denomination',\n fund_contact: 'Fund Contact',\n fund_id: 'Fund ID',\n fund_name: 'Fund Name',\n fund_status_code: 'Fund Status',\n gate_fund: 'Gate: Fund-Level',\n gate_investor: 'Gate: Investor-Level',\n gov_anticorruption: 'Anti Corruption Policies',\n gov_boarddiversity: 'Board Diversity',\n gov_boardindependence: 'Board Independence',\n gov_corppolcontrib: 'Corporate Political Contributions',\n gov_description: 'Governance Description',\n gov_executivecomp: 'Executive Compensation',\n hfr_am_info_liquidity: 'Liquidity',\n hfr_am_info_notes: 'HFR AM Info Notes',\n hfr_analyst: 'HFR Analyst',\n hfr_database: 'HFR Database',\n hfr_indices: 'HFR Indices',\n hfr_la_fund: 'HFR LA Fund',\n hfr_risk_premia: 'HFR Risk Premia AM Database',\n hfrb_fund: 'HFRB Fund',\n hfri500_eligibility: 'HFRI 500 Eligibility',\n hfri500_exclusion_reason: 'HFRI 500 Exclude Reason',\n hfri500_reviewed: 'HFRI 500 Reviewed',\n hfri_500_fund: 'HFRI 500 Fund',\n hfri_fund: 'HFRI Fund',\n hfri_i_fund: 'HFRI I Fund',\n hfri_institutional_fund: 'HFRI Institutional Fund',\n hfri_pending_fund: 'HFRI Pending Fund',\n hfri_pending_removal: 'HFRI Pending Removal',\n hfri_woman_access_fund: 'HFRI Woman Access',\n hfrrparity_fund: 'HFRRParity',\n hfrrparity_i_fund: 'HFRRParity-I',\n hfru_fund: 'HFRU Fund',\n hfrx_fund: 'HFRX Fund',\n hurdle_rate: 'Hurdle Rate',\n incentive_fee: 'Incentive Fee',\n inception_date: 'Inception',\n index_pricing: 'Index Pricing',\n investor_type: 'Accred. Investor Type',\n is_annual_performance_audit: 'Annual Performance Audit at',\n is_aum_distributed: 'Is AUM Distributed ?',\n is_nav_distributed: 'Is NAV Distributed ?',\n is_emerging_markets_fund: 'Is Emerging Markets',\n is_feeder_fund: 'Feeder Fund',\n is_fund_esg: 'Is Fund ESG?',\n is_hfr_funded: 'Is HFR Fund',\n is_high_watermark: 'High Watermark',\n is_hurdle_rate: 'Is Hurdle Rate',\n is_liquidated: 'Is Liquidated',\n is_lockup: 'Is Lockup',\n is_minority_fund: 'Is Minority Managed',\n is_offshore: 'Is Offshore',\n isin: 'ISIN',\n last_audit_date: 'Last Audit Date',\n legal_adviser: 'Legal Adviser',\n liquid_alt_product: 'Liquid Alt Product',\n liquid_alt_region: 'Liquid Alt Regions',\n liquid_alt_type: 'Liquid Alt Type',\n liquidated_at: 'Liquidated at',\n liquidity: 'Liquidity',\n lockup_period: 'Lockup Period',\n lockup_type: 'Lockup Type',\n max_12b1_fee: 'Max 12B-1 Fee %',\n max_deferred_fee: 'Max Deferred Sale Load Fee %',\n max_front_fee: 'Max Front-End Load Fee %',\n mgmt_fee: 'Mgmt. Fee %',\n min_invest: 'Min. Investment',\n min_invest_indv: 'Ind. Account Min.',\n minority_manage_level: 'Minority Manage Level',\n minority_manage_type: 'Minority Manage Type',\n monthly_redemption_day_type: 'Monthly Redemption Day Type',\n monthly_redemption_days: 'Monthly Redemption Days',\n monthly_redemption_percent: 'Monthly Redemption Percent',\n most_recent_review: 'Most Recent Review',\n need_to_fund: 'Need To Fund',\n notes: 'Note',\n om_date: 'OM Date',\n other_fees: 'Other Fee %',\n performance_reporting: 'Perf. Rept. to Investors',\n placement_agent: 'Placement Agent',\n prime_broker: 'Prime Broker',\n principals: 'Principals',\n product_class: 'Product Class',\n redemption_advance_notice: 'Redemption Advance Notice (days)',\n redemption_fee: 'Rdm. Fee %',\n redemption_fee_months: 'If Less Than',\n redemption_return_days: 'Redemption Return Days',\n redemption_return_percent: '% Redemption Returned within (days)',\n region_inv_focus: 'Regional Investment Focus',\n region_inv_focus_country: 'Country',\n registration_code: 'Registration',\n remaining_capacity: 'Remaining Capacity',\n remaining_hfrx_capacity: 'Remaining HFRX Capacity',\n reporting_frequency: 'Req. Freq',\n reporting_style: 'Reporting Style',\n run_sep_mgd_accts: 'Run Sep Mng Accts?',\n sales_fee: 'Sales Fee %',\n sec_pfid_number: 'SEC-PFID',\n sma_monthlyliquid_20mm: 'SMA Monthly $20MM',\n sma_monthlyliquid_50mm: 'SMA Monthly $50MM',\n sma_weeklyliquid_10mm: 'SMA Weekly $10MM',\n soc_avoidtobacco: 'Avoidance Of Tobacco or other Harmful Products',\n soc_communitydev: 'Community Development',\n soc_description: 'Social Description',\n soc_diversityantibias: 'Diversity Anti Bias',\n soc_humanrights: 'Human',\n soc_laborrelations: 'Labor Relations',\n soc_workplacebenefits: 'Workplace Benefits',\n soc_workplacesafety: 'Workplace Safety',\n strategy_code: 'Legacy Strategy',\n strategy_code_new: 'Strategy',\n strategy_description: 'Strategy Description',\n structure: 'Structure',\n style: 'Style',\n sub_strategy_code: 'Legacy Sub-Strategy',\n sub_strategy_code_new: 'Sub-Strategy',\n sub_strategy_desc: 'Sub-Strategy Desc',\n subscription_cutoff_time: 'Subscription Cutoff by',\n subscription_cutoff_timezone: 'Subscription Cutoff Timezone',\n subscription_day_type: 'Subscription Day Type',\n subscription_days: 'Subscriptions',\n subscription_settlement_days: 'Subscription Settment (days)',\n subscription_notice: 'Subscription Notice',\n subscription_settlement: 'Subscription Settlement',\n team_engagepcm: 'Engage PCM ?',\n ucitsiii: 'UCITSIII',\n use_of_leverage: 'Use of Leverage',\n use_of_leverage_type: 'Use of Leverage Type',\n weekly_hfrx_redemption_day_type: 'Weekly HFRX Redemption Day Type',\n weekly_hfrx_redemption_days: 'Weekly HFRX Redemption Days',\n weekly_hfrx_redemption_percent: 'Weekly HFRX Redemption',\n weekly_redemption_days: 'Weekly Redemption Days',\n weekly_redemption_percent: 'Weekly Redemption',\n weekly_redemption_day_type: 'Weekly Redemption Day Type',\n\n woman_managed: 'Woman Managed',\n added_to_hfri: 'Performance Added to HFRI as of',\n removed_from_hfri: 'Removed from HFRI after',\n\n subscription_advance_notice: 'Subscription Advanced Notice (days)',\n contact_name: 'Contact Name',\n contact_company: 'Contact Company',\n contact_country: 'Contact Country',\n contact_address1: 'Contact Address 1',\n contact_address2: 'Contact Address 2',\n contact_city: 'Contact City',\n contact_state: 'Contact State',\n contact_postal_code: 'Contact Postal Code',\n contact_phone: 'Contact Phone',\n contact_fax: 'Contact Fax',\n contact_email: 'Contact Email',\n contact_web: 'Contact Web',\n offshore_id: 'Offshore ID',\n}\n","import { DownloadOutlined } from '@ant-design/icons'\nimport { Collapse, Drawer } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React, { useCallback, useMemo } from 'react'\nimport ReactJson from 'react-json-view'\nimport APIService from '../../shared/api'\nimport { FundDetailDropdownContext } from '../../shared/api/context/FundDetailDropdownContext'\nimport { ActivityLogType } from '../../shared/api/models/ActivityLog'\nimport { FundDropdownCodeType, FundDropdownType } from '../../shared/api/models/FundDetails'\nimport { FundKeysMapping } from '../../shared/api/models/FundKeysMapping'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { displayFundIndexEligibilitySelectedOption } from '../Dashboard/FundDetail/Indices/utils'\n\ntype Props = {\n data: ActivityLogType\n showDrawer: boolean\n setShowDrawer: (value: boolean) => void\n}\n\ntype TableType = {\n fieldName: string\n oldValue: string\n newValue: string\n}\ntype TableRORType = {\n fundId: string\n date: string\n oldValue: string\n newValue: string\n}\n\nconst columns: ColumnProps[] = [\n {\n title: 'Field Name',\n dataIndex: 'fieldName',\n key: 'fieldName',\n },\n {\n title: 'Old Value',\n dataIndex: 'oldValue',\n key: 'oldValue',\n },\n {\n title: 'New Value',\n dataIndex: 'newValue',\n key: 'newValue',\n },\n]\n\nconst columnsUpdateROR: ColumnProps[] = [\n {\n title: 'Fund ID',\n dataIndex: 'fundId',\n key: 'fundId',\n },\n {\n title: 'Date',\n dataIndex: 'date',\n },\n {\n title: 'Old Value',\n dataIndex: 'oldValue',\n key: 'oldValue',\n },\n {\n title: 'New Value',\n dataIndex: 'newValue',\n key: 'newValue',\n },\n]\n\nconst ROR_TABLE_UPLOAD = [\n 'UPLOAD_RORS',\n 'UPLOAD_ASSETS',\n 'UPLOAD_NAVS',\n 'UPDATE_XIGNITE_INDEX_DATA',\n 'UPDATE_XIGNITE_LIBOR_DATA',\n 'ALTERYX_UPLOAD_ASSETS',\n 'ALTERYX_UPLOAD_NAVS',\n 'ALTERYX_UPLOAD_RORS',\n]\n\nexport const DrawerActivityLogInfo: React.FC = ({ showDrawer, setShowDrawer, data }) => {\n const { fundDataDropdown } = React.useContext(FundDetailDropdownContext)\n const { invoke: getLogDetail, data: dataLogDetail, loading } = useServiceState(\n APIService.activityLogService.fetchEventDetail,\n )\n React.useEffect(() => {\n getLogDetail(data.id.toString())\n }, [getLogDetail, data.id])\n\n // function\n const findDescription = useCallback(\n (changeKey: keyof FundDropdownType, value: string) => {\n if (!fundDataDropdown || !fundDataDropdown.hasOwnProperty(changeKey)) {\n return value\n }\n\n const dropdownListAtKey = fundDataDropdown[changeKey]\n if (typeof dropdownListAtKey[0] === 'string') {\n return value\n }\n\n const dropdownCodeList = dropdownListAtKey as FundDropdownCodeType[]\n return dropdownCodeList.find((item) => item.code_code === value)?.code_description || value\n },\n [fundDataDropdown],\n )\n //\n const dataTable = useMemo(() => {\n return (\n dataLogDetail &&\n Object.keys(dataLogDetail.change_data).reduce((acc: TableType[], key) => {\n if (typeof dataLogDetail.change_data[key].new === 'boolean') {\n return [\n ...acc,\n {\n fieldName: FundKeysMapping.hasOwnProperty(key) ? FundKeysMapping[key] : key.toUpperCase(),\n oldValue: dataLogDetail.change_data[key].old ? 'Yes' : 'No',\n newValue: dataLogDetail.change_data[key].new ? 'Yes' : 'No',\n },\n ]\n }\n return [\n ...acc,\n {\n fieldName: FundKeysMapping.hasOwnProperty(key) ? FundKeysMapping[key] : key.toUpperCase(),\n oldValue: findDescription(\n key as keyof FundDropdownType,\n dataLogDetail.change_data[key].old ? String(dataLogDetail.change_data[key].old) : '',\n ),\n newValue: findDescription(\n key as keyof FundDropdownType,\n dataLogDetail.change_data[key].new ? String(dataLogDetail.change_data[key].new) : '',\n ),\n },\n ]\n }, [])\n )\n }, [dataLogDetail, findDescription])\n\n const dataRORTable = useMemo(() => {\n return dataLogDetail && ROR_TABLE_UPLOAD.includes(dataLogDetail.code)\n ? Object.keys(dataLogDetail.change_data).reduce((acc: TableRORType[], key) => {\n const fundId = key\n\n const field = Object.keys(dataLogDetail.change_data[key]).reduce((accum: TableRORType[], k) => {\n //@ts-ignore\n const oldValue = dataLogDetail.change_data[key][k].old\n //@ts-ignore\n const newValue = dataLogDetail.change_data[key][k].new\n return [\n ...accum,\n {\n fundId: fundId,\n date: k,\n oldValue: oldValue !== null || oldValue !== undefined ? oldValue : '',\n newValue: newValue !== null || newValue !== undefined ? newValue : '',\n },\n ]\n }, [])\n return [...acc, ...field]\n }, [])\n : []\n }, [dataLogDetail])\n\n const jsonData = useMemo(() => {\n if (!dataLogDetail || !dataLogDetail.json_data) {\n return {}\n }\n\n const json_data = dataLogDetail.json_data as Record\n // if (data.code === 'UPDATE_FUND_INDEX_ELIGIBILITY_DETAILS') {\n // const keys = Object.keys(json_data)\n // const transformedData = keys.reduce((prev, key) => {\n // const mappedValue = displayFundIndexEligibilitySelectedOption(key, json_data[key])\n // return {\n // ...prev,\n // [key]: mappedValue,\n // }\n // }, {})\n // return transformedData\n // }\n\n return json_data\n }, [dataLogDetail])\n\n const [showRaw, setShowRaw] = React.useState(false)\n\n const handleCollapseChange = () => {\n setShowRaw(!showRaw)\n }\n\n return (\n setShowDrawer(false)}\n visible={showDrawer}\n bodyStyle={{ paddingTop: 80 }}\n >\n {dataLogDetail?.event_file_url && (\n \n )}\n\n {dataLogDetail && ROR_TABLE_UPLOAD.includes(dataLogDetail.code) ? (\n
\n ) : (\n
\n )}\n\n \n \n \n \n \n \n )\n}\n","import { Table } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\ntype Props = {\n selectedLogDiff: string[][]\n}\nexport const LegacyLogTableDiff: React.FC = ({ selectedLogDiff }) => {\n type TableType = {\n fieldName: string\n oldValue: string\n newValue: string\n }\n\n const dataDiff = React.useMemo(() => {\n return selectedLogDiff.map((item) => ({ fieldName: item[0], oldValue: item[1], newValue: item[2] }))\n }, [selectedLogDiff])\n\n const columns: ColumnProps[] = [\n {\n title: 'Field Name',\n dataIndex: 'fieldName',\n key: 'fieldName',\n },\n {\n title: 'Old Value',\n dataIndex: 'oldValue',\n key: 'oldValue',\n },\n {\n title: 'New Value',\n dataIndex: 'newValue',\n key: 'newValue',\n },\n ]\n return (\n \n )\n}\n","import { Button } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport { LegacyLogTableDiff } from './LegacyLogTableDiff'\ntype Props = {\n showModal: boolean\n setShowModal: (value: boolean) => void\n selectedLogDiff: string[][]\n}\nexport const LegacyLogModal: React.FC = ({ showModal, setShowModal, selectedLogDiff }) => {\n return (\n setShowModal(false)}\n footer={\n \n }\n >\n \n \n )\n}\n","import { ReloadOutlined, SearchOutlined } from '@ant-design/icons'\nimport { Button, DatePicker, Input, Pagination, Radio, Row, Space, Tag } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport { SorterResult } from 'antd/lib/table/interface'\nimport moment from 'moment'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { LegacyLogDetail, LegacyLogFilter } from '../../shared/api/models/ActivityLog'\nimport { Colors } from '../../shared/colors'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { LegacyLogModal } from './LegacyLogModal'\n\nconst Footer = styled.div`\n display: flex;\n justify-content: flex-end;\n`\n\nexport const LegacyActivityLog: React.FC = () => {\n const { invoke: fetchDataLegacy, data: dataLegacy, loading } = useServiceState(\n APIService.activityLogService.fetchLegacyLog,\n )\n\n const [filteredInfo, setFilteredInfo] = React.useState({})\n\n const [page, setPage] = React.useState(1)\n const [pageSize, setPageSize] = React.useState(25)\n const [sortBy, setSortBy] = React.useState()\n const [orderBy, setOrderBy] = React.useState()\n const [showModal, setShowModal] = React.useState(false)\n const [selectedLegacyLog, setSelectedLegacyLog] = React.useState()\n\n const legacyParams = React.useMemo(() => {\n setPage(1)\n return Object.keys(filteredInfo).reduce((acc, key) => {\n const valueFilter = filteredInfo[key as keyof LegacyLogFilter]\n if (valueFilter && valueFilter.length > 0) {\n if (key === 'fund_id') {\n const type = valueFilter?.[0].toString().split('-')[0]\n const value = valueFilter?.[0].toString().split('-')[1]\n return type === '[Equals]' ? { ...acc, fund_id: { equals: value } } : { ...acc, fund_id: { contains: value } }\n }\n if (key === 'is_www') {\n const value = valueFilter?.[0]\n return value === 'Yes' ? { ...acc, [key]: true } : { ...acc, [key]: false }\n }\n if (key === 'work_date') {\n const startDate = valueFilter?.[0].toString().split(',')[0]\n const endDate = valueFilter?.[0].toString().split(',')[1]\n return { ...acc, [key]: { gte: startDate?.trim(), lte: endDate?.trim() } }\n }\n return { ...acc, [key]: valueFilter?.[0] }\n }\n return acc\n }, {})\n }, [filteredInfo])\n\n React.useEffect(() => {\n fetchDataLegacy({\n where: Object.keys(legacyParams).length > 0 ? legacyParams : undefined,\n page,\n limit: pageSize,\n sort_by: sortBy,\n order_by: orderBy,\n })\n }, [page, pageSize, sortBy, orderBy, legacyParams, fetchDataLegacy])\n\n const handleTableChange = (sorter: SorterResult, filter: Record) => {\n setSortBy(sorter.order ? sorter.columnKey?.toString() : undefined)\n setOrderBy(sorter.order ? (sorter.order === 'ascend' ? 'ASC' : 'DESC') : undefined)\n setFilteredInfo(filter)\n }\n\n const handlePageSizeChange = (current: number, size: number) => {\n setPageSize(size)\n if (current !== 1) {\n setPage(1)\n }\n }\n\n const handleClearAllFilter = () => {\n setFilteredInfo({})\n }\n\n const searchInput = React.useRef(null)\n\n const getColumnSearchProps = (dataIndex: string): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => {\n if (dataIndex === 'is_www') {\n return (\n
\n \n setSelectedKeys([e.target.value])}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n >\n Yes\n No\n \n \n \n \n confirm && confirm()}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n \n
\n )\n }\n if (dataIndex === 'fund_id') {\n return (\n \n \n {\n setSelectedKeys(\n e.target.value\n ? [\n selectedKeys[0]\n ? `${selectedKeys[0].toString().split('-')[0]}-${e.target.value}`\n : `-${e.target.value}`,\n ]\n : [],\n )\n }}\n />\n {\n if (selectedKeys[0]) {\n setSelectedKeys([`[Equals]-${selectedKeys[0].toString().split('-')[1]}`])\n return confirm && confirm()\n }\n return clearFilters && clearFilters()\n }}\n >\n Exact\n \n {\n if (selectedKeys[0]) {\n setSelectedKeys([`[Contains]-${selectedKeys[0].toString().split('-')[1]}`])\n return confirm && confirm()\n }\n return clearFilters && clearFilters()\n }}\n >\n Partial\n \n \n \n \n \n \n )\n }\n\n return (\n \n \n setSelectedKeys(e.target.value ? [e.target.value] : [])}\n onPressEnter={() => {\n if (selectedKeys[0] !== '') {\n confirm && confirm()\n } else clearFilters && clearFilters()\n }}\n />\n {\n if (selectedKeys[0] !== '') {\n confirm && confirm()\n } else clearFilters && clearFilters()\n }}\n icon={}\n />\n \n \n ),\n },\n ]\n\n return (\n
\n
\n {Object.keys(legacyParams).length > 0 && 'Filters: '}\n {Object.keys(filteredInfo)\n .filter((i) => filteredInfo[i as keyof LegacyLogFilter])\n .map((item) => {\n const value = filteredInfo[item as keyof LegacyLogFilter]\n if (value && value.length > 0) {\n return (\n {\n e.stopPropagation()\n setFilteredInfo({ ...filteredInfo, [item]: null })\n }}\n >\n {item}:{value?.join(', ')}\n \n )\n }\n })}\n {Object.keys(legacyParams).length > 0 && (\n \n )}\n
\n {\n handleTableChange(sorter, filter)\n }}\n style={{ width: '100%' }}\n scroll={{ y: 'calc(100vh - 360px)', x: 'min-content' }}\n size=\"small\"\n footer={(record) =>\n record.length > 0 ? (\n
\n `${range[0]}-${range[1]} of ${total} items`}\n onChange={(currentPage) => setPage(currentPage)}\n total={dataLegacy ? dataLegacy.total : 0}\n current={page}\n pageSize={pageSize}\n pageSizeOptions={['10', '25', '50', '100']}\n onShowSizeChange={handlePageSizeChange}\n />\n
\n ) : null\n }\n columns={columns}\n />\n {showModal && selectedLegacyLog?.diff && (\n \n )}\n
\n )\n}\n","import { DownloadOutlined, ReloadOutlined, SearchOutlined } from '@ant-design/icons'\nimport { Button, DatePicker, Input, notification, Pagination, Row, Select, Space, Tabs, Tag } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport { SorterResult } from 'antd/lib/table/interface'\nimport axios from 'axios'\nimport JsFileDownload from 'js-file-download'\nimport moment from 'moment'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport styled from 'styled-components'\nimport { useDebounce } from 'use-debounce/lib'\nimport { RootState } from '../../app/rootReducer'\nimport APIService from '../../shared/api'\nimport { FirmDetailDataProvider } from '../../shared/api/context/FirmDetailDataContext'\nimport { FundDetailDataProvider } from '../../shared/api/context/FundDetailDataContext'\nimport { ActivitiesFiltered, ActivityLogType } from '../../shared/api/models/ActivityLog'\nimport { Colors } from '../../shared/colors'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { FundFirmTypeEnum } from '../../slice/appSettingsSlice'\nimport { RenderTitleTabPane } from '../Dashboard/Dashboard'\nimport { updateActivityLogParams } from '../Dashboard/DashboardTab/SearchForm/redux/searchParamsSlice'\nimport { FirmDetailMain } from '../Dashboard/FirmDetail/FirmDetailMain'\nimport { FundDetailMain } from '../Dashboard/FundDetail/FundDetailMain'\nimport { DrawerActivityLogInfo } from './DrawerActivityLogInfo'\nimport { LegacyActivityLog } from './LegacyActivityLog'\n\nconst Footer = styled.div`\n display: flex;\n justify-content: space-between;\n`\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n overflow: hidden;\n\n .ant-tabs-nav {\n margin-bottom: 0%;\n }\n\n .ant-tabs-content-holder {\n overflow: hidden;\n }\n\n .ant-tabs-content {\n flex-grow: 1;\n background: white;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n height: 100%;\n\n .ant-tabs-tabpane-active {\n height: 100%;\n display: flex;\n }\n\n .ant-card-head {\n min-height: auto;\n }\n }\n`\ntype ListTabType = {\n id: string\n type: FundFirmTypeEnum\n}\n\nconst SOURCE_OPTIONS = ['MANAGER_LINK_INTERNAL', 'MANAGER_LINK_EXTERNAL', 'SYSTEM_SOURCE']\ntype Props = {}\nexport const ActivityLog: React.FC = () => {\n const { invoke: getLogEvent, data: dataLogEvent, loading } = useServiceState(\n APIService.activityLogService.fetchDataEvent,\n )\n\n // const { invoke: getListUser, data: dataUser } = useServiceState(\n // APIService.activityLogService.fetchListUser,\n // )\n\n const dispatch = useDispatch()\n\n const { invoke: getListUserByText, data: dataUserSearch, loading: loadingUser } = useServiceState(\n APIService.activityLogService.fetchListUserByText,\n )\n\n const [searchText, setSearchText] = React.useState('')\n\n const [debouncedText] = useDebounce(searchText, 500)\n\n React.useEffect(() => {\n getListUserByText({ text: debouncedText })\n }, [debouncedText, getListUserByText])\n\n const { invoke: getListCode, data: dataCode } = useServiceState(\n APIService.activityLogService.fetchListCode,\n )\n\n const [page, setPage] = React.useState(1)\n const [pageSize, setPageSize] = React.useState(25)\n const [sortBy, setSortBy] = React.useState()\n const [orderBy, setOrderBy] = React.useState()\n\n const [showDrawer, setShowDrawer] = React.useState(false)\n const [selectedEvent, setSelectedEvent] = React.useState()\n const searchInput = React.useRef(null)\n const [activeTab, setActiveTab] = React.useState('activity-log')\n const [listTab, setListTab] = React.useState([])\n\n const { activityLogParams } = useSelector((state: RootState) => state.searchParams)\n const [filteredInfo, setFilteredInfo] = React.useState(activityLogParams)\n const [loadingExport, setLoadingExport] = React.useState(false)\n\n React.useEffect(() => {\n //getListUser()\n getListCode()\n }, [getListCode])\n\n React.useEffect(() => {\n const params = Object.keys(filteredInfo).reduce((acc, key) => {\n if (filteredInfo[key as keyof ActivitiesFiltered]) {\n return { ...acc, [key]: filteredInfo[key as keyof ActivitiesFiltered] }\n }\n return acc\n }, {})\n dispatch(updateActivityLogParams(params))\n }, [dispatch, filteredInfo])\n\n const handlePageSizeChange = (current: number, size: number) => {\n setPageSize(size)\n if (current !== 1) {\n setPage(1)\n }\n }\n\n const activityParams = React.useMemo(() => {\n setPage(1)\n return Object.keys(filteredInfo).reduce((acc, key) => {\n const valueFilter = filteredInfo[key as keyof ActivitiesFiltered]\n if (valueFilter && valueFilter.length > 0) {\n if (key === 'fund_id') {\n const type = valueFilter?.[0].toString().split('-')[0]\n const value = valueFilter?.[0].toString().split('-')[1]\n return type === '[Equals]' ? { ...acc, fund_id: { equals: value } } : { ...acc, fund_id: { contains: value } }\n }\n if (key === 'user__username' || key === 'code' || key === 'source') {\n return { ...acc, [key]: valueFilter }\n }\n if (key === 'created_date') {\n const startDate = valueFilter?.[0].toString().split(',')[0]\n const endDate = valueFilter?.[0].toString().split(',')[1]\n return { ...acc, [key]: { gte: startDate?.trim(), lte: endDate?.trim() } }\n }\n\n return { ...acc, [key]: valueFilter?.[0] }\n }\n return acc\n }, {})\n }, [filteredInfo])\n\n React.useEffect(() => {\n getLogEvent({\n where: Object.keys(activityParams).length > 0 ? activityParams : undefined,\n page,\n limit: pageSize,\n sort_by: sortBy || 'created_date',\n order_by: orderBy || 'DESC',\n })\n }, [page, pageSize, sortBy, orderBy, activityParams, getLogEvent])\n\n const handleTableChange = (sorter: SorterResult, filter: Record) => {\n setSortBy(sorter.order ? sorter.columnKey?.toString() : undefined)\n setOrderBy(sorter.order ? (sorter.order === 'ascend' ? 'ASC' : 'DESC') : undefined)\n setFilteredInfo(filter as ActivitiesFiltered)\n }\n\n const exportActivityLog = async () => {\n setLoadingExport(true)\n try {\n const res = await APIService.fundService.postDownloadFile({\n file_type: 'MANAGER_LINK_INTERNAL_EVENT_EXPORT',\n data: {\n where: Object.keys(activityParams).length > 0 ? activityParams : undefined,\n },\n })\n\n // const resFile = await APIService.fundService.downloadFileByUrl(res.data.url)\n const resFile = await axios.get(`${process.env.REACT_APP_AUTH_API_URL}/manager-link/files/${res.data.url}`)\n JsFileDownload(resFile.data, 'activity-results.csv', 'application/csv')\n } catch (error) {\n console.log(error.response)\n notification.error({ message: 'Failed to export Activity Log!' })\n } finally {\n setLoadingExport(false)\n }\n }\n\n const handleClearAllFilter = () => {\n setFilteredInfo({})\n }\n\n const getColumnSearchProps = (dataIndex: string): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => {\n if (dataIndex === 'fund_id') {\n return (\n \n \n {\n setSelectedKeys(\n e.target.value\n ? [\n selectedKeys[0]\n ? `${selectedKeys[0].toString().split('-')[0]}-${e.target.value}`\n : `-${e.target.value}`,\n ]\n : [],\n )\n }}\n />\n {\n if (selectedKeys[0]) {\n setSelectedKeys([`[Equals]-${selectedKeys[0].toString().split('-')[1]}`])\n return confirm && confirm()\n }\n return clearFilters && clearFilters()\n }}\n >\n Exact\n \n {\n if (selectedKeys[0]) {\n setSelectedKeys([`[Contains]-${selectedKeys[0].toString().split('-')[1]}`])\n return confirm && confirm()\n }\n return clearFilters && clearFilters()\n }}\n >\n Partial\n \n \n \n \n \n \n )\n }\n if (dataIndex === 'user__username') {\n //const options = dataUser ? dataUser.internal_users.map((item) => ({ value: item, label: item })) : []\n\n return (\n \n \n {\n setSearchText(e)\n }}\n onChange={(e) => setSelectedKeys(e as string[])}\n onBlur={() => setSearchText('')}\n options={dataUserSearch?.map((item) => ({ value: item.username, label: item.username }))}\n />\n \n \n \n \n )\n }\n\n if (dataIndex === 'code' || dataIndex === 'source') {\n const optionsCode = dataCode ? dataCode.map((item) => ({ value: item, label: item })) : []\n const optionsSource = SOURCE_OPTIONS.map((item) => ({ value: item, label: item }))\n const options = dataIndex === 'code' ? optionsCode : optionsSource\n return (\n \n \n setSelectedKeys(e as string[])}\n options={options}\n />\n \n \n \n \n )\n }\n return (\n \n \n setSelectedKeys(e.target.value ? [e.target.value] : [])}\n onPressEnter={() => {\n if (selectedKeys[0] !== '') {\n confirm && confirm()\n } else clearFilters && clearFilters()\n }}\n />\n {\n if (selectedKeys[0] !== '') {\n confirm && confirm()\n } else clearFilters && clearFilters()\n }}\n icon={}\n />\n \n ),\n sorter: true,\n },\n {\n title: 'URL',\n dataIndex: 'url',\n key: 'url',\n width: 350,\n ...getColumnSearchProps('url'),\n filteredValue: filteredInfo.url || null,\n sorter: true,\n },\n {\n title: 'Fund ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n width: 135,\n ...getColumnSearchProps('fund_id'),\n filteredValue: filteredInfo.fund_id || null,\n render: (_, record) => (\n {\n if (!listTab.find((e) => e.id.split('-')[1] === record.fund_id)) {\n setListTab([...listTab, { id: 'funds-' + record.fund_id, type: FundFirmTypeEnum.FUNDS }])\n }\n setActiveTab('funds-' + record.fund_id)\n }}\n >\n {record.fund_id}\n \n ),\n sorter: true,\n },\n\n {\n title: 'Action',\n key: 'action',\n width: 135,\n render: (_, record) => (\n <>\n {\n setShowDrawer(true)\n setSelectedEvent(record)\n }}\n >\n Details\n \n \n ),\n },\n ]\n\n return (\n {\n setActiveTab(key)\n }}\n onEdit={(targetKey, action) => {\n if (action === 'remove') {\n setListTab(listTab.filter((item) => item.id !== targetKey))\n if (targetKey === activeTab) {\n setActiveTab('activity-log')\n }\n }\n }}\n >\n \n
\n {Object.keys(activityParams).length > 0 && 'Filters: '}\n {Object.keys(filteredInfo).map((item) => {\n if (filteredInfo[item as keyof ActivitiesFiltered]) {\n return (\n {\n e.stopPropagation()\n setFilteredInfo({ ...filteredInfo, [item]: null })\n }}\n >\n {item}:{filteredInfo[item as keyof ActivitiesFiltered]?.join(', ')}\n \n )\n }\n })}\n {Object.keys(activityParams).length > 0 && (\n \n )}\n
\n {\n handleTableChange(sorter, filter)\n }}\n footer={(record) =>\n record.length > 0 ? (\n
\n \n `${range[0]}-${range[1]} of ${total} items`}\n onChange={(currentPage) => setPage(currentPage)}\n total={dataLogEvent ? dataLogEvent.total : 0}\n current={page}\n pageSize={pageSize}\n pageSizeOptions={['10', '25', '50', '100']}\n onShowSizeChange={handlePageSizeChange}\n />\n
\n ) : null\n }\n />\n {selectedEvent && (\n \n )}\n \n {listTab.map((item) => {\n if (item.type === FundFirmTypeEnum.FUNDS) {\n return (\n \n \n \n \n \n )\n }\n return (\n \n }\n closable={true}\n key={item.id}\n >\n \n \n \n \n )\n })}\n \n \n \n \n )\n}\n","import { Col, Divider, Empty, Form, Input, notification, Row, Select, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport styled from 'styled-components'\nimport { useDebounce } from 'use-debounce'\nimport APIService from '../../shared/api'\nimport { BenchmarkType } from '../../shared/api/models/Benchmark'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\n\nconst Wrapper = styled('div')``\n\ntype Props = {\n selectedBenchmark?: BenchmarkType\n showFormModal: boolean\n setShowFormModal: (value: boolean) => void\n setSelectedBenchmark: (value: BenchmarkType | undefined) => void\n updateBenchmark: () => void\n}\ntype SelectType = {\n id: string\n name: string\n}\nconst BenchmarkFormModal: React.FC = ({\n selectedBenchmark,\n showFormModal,\n setShowFormModal,\n setSelectedBenchmark,\n updateBenchmark,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n\n const [textSearch, setTextSearch] = React.useState('')\n const [debouncedText] = useDebounce(textSearch, 500)\n const { data: funds, invoke: invokeSearch, loading } = useServiceState(APIService.fundService.fetchFundName)\n\n React.useEffect(() => {\n invokeSearch({ text: debouncedText })\n }, [debouncedText, invokeSearch])\n\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (selectedBenchmark) {\n form.setFieldsValue(selectedBenchmark)\n } else {\n form.resetFields()\n }\n }, [selectedBenchmark, form])\n\n const submitFormBenchmark = () => {\n const submitData = selectedBenchmark\n ? {\n benchmark_disclaimer: form.getFieldValue('benchmark_disclaimer'),\n }\n : {\n fund_id: form.getFieldValue('fund_name'),\n benchmark_disclaimer: form.getFieldValue('benchmark_disclaimer'),\n }\n form.validateFields(['fund_name', 'benchmark_disclaimer']).then(() => {\n setLoadingSubmit(true)\n selectedBenchmark\n ? APIService.benchmarkService\n .updateBenchmark(selectedBenchmark.fund_id, submitData)\n .then(() => {\n notification.success({ message: 'Benchmark Updated!' })\n updateBenchmark()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Benchmark Update Failed!' })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowFormModal(false)\n setSelectedBenchmark(undefined)\n })\n : APIService.benchmarkService\n .createBenchmark(submitData)\n .then(() => {\n notification.success({ message: 'Benchmark Created!' })\n updateBenchmark()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({\n message:\n err.response.data.error_code && err.response.data.error_code === 'ENTITY_EXISTS'\n ? 'Benchmark already exists!'\n : 'Failed to add benchmark!',\n })\n })\n .finally(() => {\n setLoadingSubmit(false)\n setShowFormModal(false)\n setSelectedBenchmark(undefined)\n })\n })\n }\n\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={submitFormBenchmark}\n onCancel={() => {\n setShowFormModal(false)\n form.resetFields()\n setSelectedBenchmark(undefined)\n }}\n >\n \n
\n Information\n \n
\n \n : }\n placeholder=\"Select Fund\"\n filterOption={false}\n onSearch={(e) => {\n setTextSearch(e)\n }}\n >\n {funds?.map((item) => {\n return (\n \n {item.fund_name}\n \n )\n })}\n \n \n \n \n {selectedBenchmark && (\n \n \n \n \n \n \n \n \n \n \n \n \n )}\n {selectedBenchmark && (\n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default BenchmarkFormModal\n","import { SearchOutlined } from '@ant-design/icons'\nimport { Button, Input, Space, Table } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { FundDetailDropdownContext } from '../../shared/api/context/FundDetailDropdownContext'\nimport { FundBenchmarkResponse } from '../../shared/api/models/Benchmark'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { FundFirmTypeEnum } from '../../slice/appSettingsSlice'\nconst Wrapper = styled('div')`\n width: 100%;\n p {\n margin: 0;\n }\n > .ant-tabs-card .ant-tabs-content {\n margin-top: -16px;\n }\n > .ant-tabs-card .ant-tabs-content > .ant-tabs-tabpane {\n background: #fff;\n padding: 16px;\n }\n > .ant-tabs-card > .ant-tabs-nav::before {\n display: none;\n }\n .ant-table-content {\n min-height: calc(100vh - 380px);\n }\n`\ntype ListTabType = {\n id: string\n name: string\n type: FundFirmTypeEnum | 'list-funds'\n}\ntype Props = {\n fundId: string\n listTab: ListTabType[]\n setListTab: (value: ListTabType[]) => void\n setActiveTab: (value: string) => void\n}\nexport const ListOfFundBenchmark: React.FC = ({ fundId, listTab, setListTab, setActiveTab }) => {\n const { dataBenchmark } = React.useContext(FundDetailDropdownContext)\n const { invoke: getFundBenchmark, data: dataFundBenchmark, loading } = useServiceState(\n APIService.benchmarkService.getFundBenchmark,\n )\n const searchInput = React.useRef(null)\n\n React.useEffect(() => {\n getFundBenchmark(fundId)\n }, [fundId, getFundBenchmark])\n\n const handleSearch = (selectedKeys: React.ReactText[], confirm: (() => void) | undefined, _dataIndex: string) => {\n confirm && confirm()\n // setSearchText(selectedKeys[0])\n // setSearchedColumn(dataIndex)\n }\n const handleReset = (clearFilters: (() => void) | undefined) => {\n clearFilters && clearFilters()\n // setSearchText(undefined)\n }\n\n const getColumnSearchProps = (dataIndex: string): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (\n
\n setSelectedKeys(e.target.value ? [e.target.value] : [])}\n onPressEnter={() => handleSearch(selectedKeys, confirm, dataIndex)}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n handleSearch(selectedKeys, confirm, dataIndex)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n
\n ),\n filterIcon: (filtered) => ,\n onFilter: (value, record) =>\n record[dataIndex as keyof FundBenchmarkResponse]\n ? record[dataIndex as keyof FundBenchmarkResponse]\n .toString()\n .toLowerCase()\n .includes(value.toString().toLowerCase())\n : false,\n onFilterDropdownVisibleChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput && searchInput.current && searchInput.current.select())\n }\n },\n })\n\n const columns: ColumnProps[] = [\n {\n title: 'Fund ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n width: 135,\n sorter: (a, b) => {\n if (a.fund_id && b.fund_id) {\n return a.fund_id.localeCompare(b.fund_id)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('fund_id'),\n },\n {\n title: 'Fund Name',\n dataIndex: 'fund_name',\n key: 'fund_name',\n render: (_, record) => (\n {\n if (!listTab.find((e) => e.id.split('-')[1] === record.fund_id)) {\n setListTab([\n ...listTab,\n { id: 'funds-' + record.fund_id, name: record.fund_name, type: FundFirmTypeEnum.FUNDS },\n ])\n }\n setActiveTab('funds-' + record.fund_id)\n }}\n >\n {record.fund_name}\n \n ),\n sorter: (a, b) => {\n if (a.fund_name && b.fund_name) {\n return a.fund_name.localeCompare(b.fund_name)\n }\n return 0\n },\n width: 250,\n ellipsis: true,\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('fund_name'),\n },\n {\n title: 'Benchmark 1',\n dataIndex: 'benchmark1',\n key: 'benchmark1',\n width: 250,\n sorter: (a, b) => {\n if (a.benchmark1 && b.benchmark1) {\n return a.benchmark1.localeCompare(b.benchmark1)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n render: (text) => (\n
\n {dataBenchmark && dataBenchmark.length > 0 && dataBenchmark.find((item) => item.fund_id === text)?.fund_name}\n
\n ),\n },\n {\n title: 'Benchmark 2',\n dataIndex: 'benchmark2',\n key: 'benchmark2',\n width: 250,\n render: (text) => (\n
\n {dataBenchmark && dataBenchmark.length > 0 && dataBenchmark.find((item) => item.fund_id === text)?.fund_name}\n
\n ),\n sorter: (a, b) => {\n if (a.benchmark2 && b.benchmark2) {\n return a.benchmark2.localeCompare(b.benchmark2)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Benchmark 3',\n dataIndex: 'benchmark3',\n key: 'benchmark3',\n width: 250,\n render: (text) => (\n
\n {dataBenchmark && dataBenchmark.length > 0 && dataBenchmark.find((item) => item.fund_id === text)?.fund_name}\n
\n ),\n\n sorter: (a, b) => {\n if (a.benchmark3 && b.benchmark3) {\n return a.benchmark3.localeCompare(b.benchmark3)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n ]\n return (\n \n \n \n )\n}\n","import { DeleteTwoTone, DownloadOutlined, EditOutlined, SearchOutlined } from '@ant-design/icons'\nimport { Button, Input, notification, Popconfirm, Space, Tabs, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport JsFileDownload from 'js-file-download'\nimport Papa from 'papaparse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { FirmDetailDataProvider } from '../../shared/api/context/FirmDetailDataContext'\nimport { FundDetailDataProvider } from '../../shared/api/context/FundDetailDataContext'\nimport { BenchmarkType } from '../../shared/api/models/Benchmark'\nimport { Colors } from '../../shared/colors'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { FundFirmTypeEnum } from '../../slice/appSettingsSlice'\nimport { RenderTitleTabPane } from '../Dashboard/Dashboard'\nimport { FirmDetailMain } from '../Dashboard/FirmDetail/FirmDetailMain'\nimport { FundDetailMain } from '../Dashboard/FundDetail/FundDetailMain'\nimport BenchmarkFormModal from './BenchmarkFormModal'\nimport { ListOfFundBenchmark } from './ListOfFundBenchmark'\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n overflow: hidden;\n\n .ant-tabs-nav {\n margin-bottom: 0%;\n }\n\n .ant-tabs-content-holder {\n overflow: hidden;\n }\n\n .ant-tabs-content {\n flex-grow: 1;\n background: white;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n height: 100%;\n\n .ant-tabs-tabpane-active {\n height: 100%;\n display: flex;\n }\n\n .ant-card-head {\n min-height: auto;\n }\n }\n`\ntype ListTabType = {\n id: string\n name: string\n type: FundFirmTypeEnum | 'list-funds'\n}\ntype Props = {}\n\nconst Benchmarks: React.FC = () => {\n const [showFormModal, setShowFormModal] = React.useState(false)\n const [selectedBenchmark, setSelectedBenchmark] = React.useState()\n // const [searchText, setSearchText] = React.useState()\n // const [searchedColumn, setSearchedColumn] = React.useState()\n\n const [loadingDeleteBenchmark, setLoadingDeleteBenchmark] = React.useState(false)\n\n const searchInput = React.useRef(null)\n const [activeTab, setActiveTab] = React.useState('benchmark-list')\n const [listTab, setListTab] = React.useState([])\n const [currentSource, setCurrentSource] = React.useState([])\n\n const { invoke: getAllBenchmark, data: dataBenchmark, loading: loadingBenchmark } = useServiceState(\n APIService.benchmarkService.getAllBenchmark,\n )\n\n React.useEffect(() => {\n getAllBenchmark()\n }, [getAllBenchmark])\n\n React.useEffect(() => {\n if (dataBenchmark) {\n setCurrentSource(dataBenchmark)\n }\n }, [dataBenchmark])\n\n const handleExportBenchmark = () => {\n JsFileDownload(Papa.unparse(currentSource), `benchmark-results.csv`, 'application/csv')\n }\n\n const updateBenchmark = () => {\n getAllBenchmark()\n }\n\n const handleSearch = (selectedKeys: React.ReactText[], confirm: (() => void) | undefined, _dataIndex: string) => {\n confirm && confirm()\n // setSearchText(selectedKeys[0])\n // setSearchedColumn(dataIndex)\n }\n\n const handleReset = (clearFilters: (() => void) | undefined) => {\n clearFilters && clearFilters()\n // setSearchText(undefined)\n }\n\n const deleteBenchmark = (fundId: string) => {\n setLoadingDeleteBenchmark(true)\n APIService.benchmarkService\n .deleteBenchmark(fundId)\n .then(() => {\n notification.success({ message: 'Benchmark Delete!' })\n updateBenchmark()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Benchmark Delete Failed!' })\n })\n .finally(() => {\n setLoadingDeleteBenchmark(false)\n })\n }\n\n const getColumnSearchProps = (dataIndex: string): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (\n
\n setSelectedKeys(e.target.value ? [e.target.value] : [])}\n onPressEnter={() => handleSearch(selectedKeys, confirm, dataIndex)}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n handleSearch(selectedKeys, confirm, dataIndex)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n
\n ),\n filterIcon: (filtered) => ,\n onFilter: (value, record) =>\n record[dataIndex as keyof BenchmarkType]\n ? record[dataIndex as keyof BenchmarkType].toString().toLowerCase().includes(value.toString().toLowerCase())\n : false,\n onFilterDropdownVisibleChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput && searchInput.current && searchInput.current.select())\n }\n },\n })\n\n const columns: ColumnProps[] = [\n {\n title: 'Fund ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n width: 135,\n fixed: 'left',\n sorter: (a, b) => {\n if (a.fund_id && b.fund_id) {\n return a.fund_id.localeCompare(b.fund_id)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('fund_id'),\n },\n {\n title: 'Fund Name',\n dataIndex: 'fund_name',\n key: 'fund_name',\n width: 350,\n fixed: 'left',\n ellipsis: true,\n render: (_, record) => (\n {\n if (!listTab.find((e) => e.id.split('-')[1] === record.fund_id)) {\n setListTab([\n ...listTab,\n { id: 'funds-' + record.fund_id, name: record.fund_name, type: FundFirmTypeEnum.FUNDS },\n ])\n }\n setActiveTab('funds-' + record.fund_id)\n }}\n >\n {record.fund_name}\n \n ),\n sorter: (a, b) => {\n if (a.fund_name && b.fund_name) {\n return a.fund_name.localeCompare(b.fund_name)\n }\n return 0\n },\n\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('fund_name'),\n },\n {\n title: 'Firm ID',\n dataIndex: 'firm_id',\n key: 'firm_id',\n width: 135,\n sorter: (a, b) => {\n if (a.firm_id && b.firm_id) {\n return a.firm_id.localeCompare(b.firm_id)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('firm_id'),\n },\n {\n title: 'Firm Name',\n dataIndex: 'firm_name',\n key: 'firm_name',\n width: 350,\n render: (_, record) => (\n {\n if (!listTab.find((e) => e.id.split('-')[1] === record.firm_id)) {\n setListTab([\n ...listTab,\n { id: 'firms-' + record.firm_id, name: record.firm_name, type: FundFirmTypeEnum.FIRMS_IN_FUNDS },\n ])\n }\n setActiveTab('firms-' + record.firm_id)\n }}\n >\n {record.firm_name}\n \n ),\n sorter: (a, b) => {\n if (a.firm_name && b.firm_name) {\n return a.firm_name.localeCompare(b.firm_name)\n }\n return 0\n },\n\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('firm_name'),\n },\n {\n title: 'Strategy',\n dataIndex: 'strategy_name',\n key: 'strategy_name',\n width: 200,\n sorter: (a, b) => {\n if (a.strategy_name && b.strategy_name) {\n return a.strategy_name.localeCompare(b.strategy_name)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Sub-Strategy',\n dataIndex: 'sub_strategy_name',\n key: 'sub_strategy_name',\n width: 200,\n sorter: (a, b) => {\n if (a.sub_strategy_name && b.sub_strategy_name) {\n return a.sub_strategy_name.localeCompare(b.sub_strategy_name)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Strategy(new)',\n dataIndex: 'strategy_new_name',\n key: 'strategy_new_name',\n width: 200,\n sorter: (a, b) => {\n if (a.strategy_new_name && b.strategy_new_name) {\n return a.strategy_new_name.localeCompare(b.strategy_new_name)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Sub-strategy(new)',\n dataIndex: 'sub_strategy_new_name',\n key: 'sub_strategy_new_name',\n width: 200,\n sorter: (a, b) => {\n if (a.sub_strategy_new_name && b.sub_strategy_new_name) {\n return a.sub_strategy_new_name.localeCompare(b.sub_strategy_new_name)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Benchmark Disclaimer',\n dataIndex: 'benchmark_disclaimer',\n key: 'benchmark_disclaimer',\n width: 500,\n ellipsis: true,\n sorter: (a, b) => {\n if (a.benchmark_disclaimer && b.benchmark_disclaimer) {\n return a.benchmark_disclaimer.localeCompare(b.benchmark_disclaimer)\n }\n return 0\n },\n\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Used As a Benchmark #',\n dataIndex: 'count',\n key: 'count',\n width: 200,\n render: (_, record) => (\n {\n if (!listTab.find((e) => e.id.split('-')[1] === record.fund_id && e.id.split('-')[0] === 'listfund')) {\n setListTab([...listTab, { id: 'listfund-' + record.fund_id, name: record.fund_name, type: 'list-funds' }])\n }\n setActiveTab('listfund-' + record.fund_id)\n }}\n >\n {record.count}\n \n ),\n sorter: (a, b) => {\n return (a.count || 0) - (b.count || 0)\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Action',\n dataIndex: 'action',\n fixed: 'right',\n width: 100,\n render: (_, record) => (\n <>\n {\n setSelectedBenchmark(record)\n setShowFormModal(true)\n }}\n >\n \n \n \n \n\n deleteBenchmark(record.fund_id)}>\n \n \n \n ),\n },\n ]\n return (\n {\n setActiveTab(key)\n }}\n onEdit={(targetKey, action) => {\n if (action === 'remove') {\n setListTab(listTab.filter((item) => item.id !== targetKey))\n if (targetKey === activeTab) {\n setActiveTab('benchmark-list')\n }\n }\n }}\n >\n \n
\n \n
\n\n {\n setCurrentSource(extra.currentDataSource)\n }}\n />\n \n \n \n Export\n \n \n {listTab.map((item) => {\n if (item.type === FundFirmTypeEnum.FUNDS) {\n return (\n \n \n \n \n \n )\n }\n if (item.type === FundFirmTypeEnum.FIRMS_IN_FUNDS)\n return (\n } closable={true} key={item.id}>\n \n \n \n \n )\n return (\n \n \n \n )\n })}\n \n )\n}\n\nexport default Benchmarks\n","import { CheckOutlined, CloseOutlined } from '@ant-design/icons'\nimport { Col, Form, Input, notification, Row, Spin, Switch } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { CodeTableType } from '../../shared/api/models/CodeTable'\n\nconst Wrapper = styled('div')``\n\ntype Props = {\n selectedCodeTable?: CodeTableType\n showFormModal: boolean\n setShowFormModal: (value: boolean) => void\n setSelectedCodeTable: (value: CodeTableType | undefined) => void\n updateCodeTable: () => void\n}\n\nconst CodeTableFormModal: React.FC = ({\n selectedCodeTable,\n showFormModal,\n setShowFormModal,\n setSelectedCodeTable,\n updateCodeTable,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (selectedCodeTable) {\n form.setFieldsValue(selectedCodeTable)\n } else {\n form.resetFields()\n }\n }, [selectedCodeTable, form])\n\n const submitFormCodeTable = () => {\n form.validateFields(['code_id', 'code_code', 'code_description']).then(() => {\n const params: CodeTableType = {\n code_id: form.getFieldValue('code_id'),\n code_code: form.getFieldValue('code_code'),\n code_description: selectedCodeTable\n ? selectedCodeTable.code_description\n : form.getFieldValue('code_description'),\n is_active: form.getFieldValue('is_active') || false,\n new_code_description: selectedCodeTable ? form.getFieldValue('code_description') : undefined,\n }\n setLoadingSubmit(true)\n selectedCodeTable\n ? APIService.codeTableService\n .updateCodeTable(params)\n .then(() => {\n notification.success({ message: 'Code Table Updated!' })\n updateCodeTable()\n })\n .catch((err: any) => {\n console.error({ err })\n notification.error({ message: 'Code Table Update Failed!' })\n })\n .finally(() => {\n form.resetFields()\n setLoadingSubmit(false)\n setShowFormModal(false)\n setSelectedCodeTable(undefined)\n })\n : APIService.codeTableService\n .createCodeTable(params)\n .then(() => {\n notification.success({ message: 'Code Table Created!' })\n updateCodeTable()\n })\n .catch((err: any) => {\n console.error({ err })\n notification.error({ message: 'Code Table Create Failed!' })\n })\n .finally(() => {\n form.resetFields()\n setLoadingSubmit(false)\n setShowFormModal(false)\n setSelectedCodeTable(undefined)\n })\n })\n }\n\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={submitFormCodeTable}\n onCancel={() => {\n setShowFormModal(false)\n form.resetFields()\n setSelectedCodeTable(undefined)\n }}\n >\n \n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n } unCheckedChildren={} />\n \n \n \n \n \n \n )\n}\n\nexport default CodeTableFormModal\n","import { DeleteTwoTone, DownloadOutlined, EditOutlined, SearchOutlined } from '@ant-design/icons'\nimport { Button, Checkbox, Input, notification, Popconfirm, Space, Tabs, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport JsFileDownload from 'js-file-download'\nimport Papa from 'papaparse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { CodeTableType } from '../../shared/api/models/CodeTable'\nimport { Colors } from '../../shared/colors'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport CodeTableFormModal from './CodeTableFormModal'\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n overflow: hidden;\n\n .ant-tabs-nav {\n margin-bottom: 0%;\n }\n\n .ant-tabs-content-holder {\n overflow: hidden;\n }\n\n .ant-tabs-content {\n flex-grow: 1;\n background: white;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n height: 100%;\n\n .ant-tabs-tabpane-active {\n height: 100%;\n display: flex;\n }\n\n .ant-card-head {\n min-height: auto;\n }\n }\n`\ntype Props = {}\n\nconst CodeTable: React.FC = () => {\n const [showFormModal, setShowFormModal] = React.useState(false)\n const [selectedCodeTable, setSelectedCodeTable] = React.useState()\n const [loadingDeleteCodeTable, setLoadingDeleteCodeTable] = React.useState(false)\n const [currentSource, setCurrentSource] = React.useState([])\n const searchInput = React.useRef(null)\n\n const { invoke: getTableList, data: tableList, loading: loadingTableList } = useServiceState(\n APIService.codeTableService.getCodeTableList,\n )\n\n React.useEffect(() => {\n getTableList()\n }, [getTableList])\n\n React.useEffect(() => {\n if (tableList) {\n setCurrentSource(tableList)\n }\n }, [tableList])\n\n const updateCodeTable = () => {\n getTableList()\n }\n\n const handleSearch = (selectedKeys: React.ReactText[], confirm: (() => void) | undefined, _dataIndex: string) => {\n confirm && confirm()\n }\n\n const handleReset = (clearFilters: (() => void) | undefined) => {\n clearFilters && clearFilters()\n }\n\n const deleteCodeTable = (record: CodeTableType) => {\n setLoadingDeleteCodeTable(true)\n const params: Partial = {\n code_id: record.code_id,\n code_code: record.code_code,\n code_description: record.code_description,\n }\n APIService.codeTableService\n .deleteCodeTable(params)\n .then(() => {\n notification.success({ message: 'Code Table Deleted!' })\n updateCodeTable()\n })\n .catch((err: any) => {\n console.error({ err })\n notification.error({ message: 'Code Table Delete Failed!' })\n })\n .finally(() => {\n setLoadingDeleteCodeTable(false)\n })\n }\n\n const handleExportCodeTable = () => {\n JsFileDownload(Papa.unparse(currentSource), `codetable-results.csv`, 'application/csv')\n }\n\n const getColumnSearchProps = (dataIndex: string): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (\n
\n setSelectedKeys(e.target.value ? [e.target.value] : [])}\n onPressEnter={() => handleSearch(selectedKeys, confirm, dataIndex)}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n handleSearch(selectedKeys, confirm, dataIndex)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n
\n ),\n filterIcon: (filtered) => ,\n onFilter: (value, record) => {\n const rowData = record[dataIndex as keyof CodeTableType]\n return rowData ? rowData.toString().toLowerCase().includes(value.toString().toLowerCase()) : false\n },\n onFilterDropdownVisibleChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput && searchInput.current && searchInput.current.select())\n }\n },\n })\n\n const columns: ColumnProps[] = [\n {\n title: 'ID',\n dataIndex: 'code_id',\n key: 'code_id',\n sorter: (a, b) => {\n if (a.code_id && b.code_id) {\n return a.code_id.localeCompare(b.code_id)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('code_id'),\n },\n {\n title: 'Code',\n dataIndex: 'code_code',\n key: 'code_code',\n\n sorter: (a, b) => {\n if (a.code_code && b.code_code) {\n return a.code_code.localeCompare(b.code_code)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('code_code'),\n },\n {\n title: 'Description',\n dataIndex: 'code_description',\n key: 'code_description',\n sorter: (a, b) => {\n if (a.code_description && b.code_description) {\n return a.code_description.localeCompare(b.code_description)\n }\n return 0\n },\n\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('code_description'),\n },\n {\n title: 'Is Active',\n dataIndex: 'is_active',\n key: 'is_active',\n render: (_, record) => ,\n },\n\n {\n title: 'Action',\n dataIndex: 'action',\n width: 100,\n render: (_, record) => (\n <>\n {\n setSelectedCodeTable(record)\n setShowFormModal(true)\n }}\n >\n \n \n \n \n\n deleteCodeTable(record)}>\n \n \n \n ),\n },\n ]\n return (\n \n \n
\n \n
\n {\n setCurrentSource(extra.currentDataSource)\n }}\n />\n \n \n \n Export\n \n \n
\n )\n}\n\nexport default CodeTable\n","import { Form, Input, notification, Spin } from 'antd'\nimport { useForm } from 'antd/lib/form/util'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport APIService from '../../shared/api'\nimport { IndexManagerActionFund } from './IndexManagerDetails'\ntype Props = {\n showModal: boolean\n setShowModal: (value: boolean) => void\n updateIndexManagerDetail: () => void\n indexId: number\n actionFunds: IndexManagerActionFund\n}\nexport const IndexManagerModalAddFund: React.FC = ({\n actionFunds,\n showModal,\n setShowModal,\n updateIndexManagerDetail,\n indexId,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [form] = useForm()\n\n const submitFormIndexManager = () => {\n form.validateFields(['funds']).then(() => {\n const fundIds = form.getFieldValue('funds')\n if (!fundIds || !fundIds.trim()) {\n return\n }\n const updatedFundIds = fundIds.trim().split('\\n')\n setLoadingSubmit(true)\n actionFunds === IndexManagerActionFund.ADD_FUNDS\n ? APIService.indexManagerService\n .updateIndexManagerDetail(indexId, { fund_ids: updatedFundIds })\n .then(() => {\n notification.success({ message: `Add ${updatedFundIds.length} funds to Index Manager !` })\n setShowModal(false)\n updateIndexManagerDetail()\n })\n .catch((err) => {\n console.error(err)\n notification.error({ message: 'Failed to add funds to Index Manager!' })\n })\n .finally(() => setLoadingSubmit(false))\n : APIService.indexManagerService\n .updateIndexManagerDetail(indexId, { delete_fund_ids: updatedFundIds })\n .then(() => {\n notification.success({ message: `Funds deleted from Index Manager !` })\n setShowModal(false)\n updateIndexManagerDetail()\n })\n .catch((err) => {\n notification.error({ message: `Failed to delete funds!` })\n })\n .finally(() => setLoadingSubmit(true))\n })\n }\n\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={submitFormIndexManager}\n onCancel={() => {\n setShowModal(false)\n }}\n >\n
\n \n \n \n
\n \n {actionFunds === IndexManagerActionFund.ADD_FUNDS\n ? 'Funds which are already inside the group will be ignored'\n : 'Funds which are outside the group will be ignored'}\n \n
\n \n \n )\n}\n","import { DeleteOutlined, DeleteTwoTone, DownloadOutlined, SearchOutlined } from '@ant-design/icons'\nimport { Button, Input, notification, Popconfirm, Space, Table } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport Text from 'antd/lib/typography/Text'\nimport JsFileDownload from 'js-file-download'\nimport moment from 'moment'\nimport Papa from 'papaparse'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { IndexFundType } from '../../shared/api/models/IndexManager'\nimport { Colors } from '../../shared/colors'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { LeftNavFundEnum } from '../../shared/SearchFundLabel'\nimport GenUtil from '../../shared/utils/gen-util'\nimport { IndexManagerModalAddFund } from './IndexManagerModalAddFund'\n\nconst TextID = styled(Text)`\n color: rgba(0, 0, 0, 0.25);\n font-size: 14px;\n`\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\n\ntype ListTabType = {\n id: number\n name: string\n type: 'index' | 'funds'\n initialPath?: LeftNavFundEnum\n hyperlink?: string\n}\n\ntype Props = {\n name: string\n id: number\n listTab: ListTabType[]\n setListTab: (value: ListTabType[]) => void\n setActiveTab: (value: string) => void\n}\nexport enum IndexManagerActionFund {\n DELETE_FUNDS,\n ADD_FUNDS,\n}\nexport const IndexManagerDetails: React.FC = ({ name, id, listTab, setListTab, setActiveTab }) => {\n const { invoke: getIndexManagerDetail, data: dataDetail, loading: dataLoading } = useServiceState(\n APIService.indexManagerService.getIndexManagerDetail,\n )\n\n const [showModal, setShowModal] = React.useState(false)\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n const [actionFunds, setActionFunds] = React.useState()\n\n const [currentSource, setCurrentSource] = React.useState([])\n\n React.useEffect(() => {\n getIndexManagerDetail(id)\n }, [getIndexManagerDetail, id])\n\n React.useEffect(() => {\n if (dataDetail && dataDetail.index_funds) {\n setCurrentSource(dataDetail.index_funds)\n }\n }, [dataDetail])\n\n const handleExportIndexConstituents = () => {\n JsFileDownload(Papa.unparse(currentSource), `index-constituents-results.csv`, 'application/csv')\n }\n\n const updateIndexManagerDetail = () => {\n getIndexManagerDetail(id)\n }\n\n const handleSearch = (selectedKeys: React.ReactText[], confirm: (() => void) | undefined, _dataIndex: string) => {\n confirm && confirm()\n }\n\n const handleReset = (clearFilters: (() => void) | undefined) => {\n clearFilters && clearFilters()\n }\n\n const searchInput = React.useRef(null)\n const getColumnSearchProps = (dataIndex: string): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (\n
\n setSelectedKeys(e.target.value ? [e.target.value] : [])}\n onPressEnter={() => handleSearch(selectedKeys, confirm, dataIndex)}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n handleSearch(selectedKeys, confirm, dataIndex)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n
\n ),\n filterIcon: (filtered) => ,\n onFilter: (value, record) =>\n record[dataIndex as keyof IndexFundType]\n ? record[dataIndex as keyof IndexFundType].toString().toLowerCase().includes(value.toString().toLowerCase())\n : false,\n onFilterDropdownVisibleChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput && searchInput.current && searchInput.current.select())\n }\n },\n })\n\n const deleteOneFunds = (fund_id: string) => {\n setLoadingDelete(true)\n APIService.indexManagerService\n .updateIndexManagerDetail(id, { delete_fund_ids: [fund_id] })\n .then(() => {\n notification.success({ message: 'Deleted Fund' })\n setListTab(listTab.filter((item) => item.type !== 'funds'))\n getIndexManagerDetail(id)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Delete Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n width: 90,\n ...getColumnSearchProps('fund_id'),\n sorter: (a, b) => {\n if (a.fund_id && b.fund_id) {\n return a.fund_id.localeCompare(b.fund_id)\n }\n return 0\n },\n },\n {\n title: 'Fund Name',\n dataIndex: 'fund_name',\n key: 'fund_name',\n ...getColumnSearchProps('fund_name'),\n sorter: (a, b) => {\n if (a.fund_name && b.fund_name) {\n return a.fund_name.localeCompare(b.fund_name)\n }\n return 0\n },\n render: (_, record) => (\n {\n if (!listTab.find((e) => e.id.toString() === record.fund_id)) {\n setListTab([...listTab, { id: parseInt(record.fund_id), name: record.fund_name, type: 'funds' }])\n }\n setActiveTab(record.fund_id)\n }}\n >\n {record.fund_name}\n \n ),\n },\n {\n title: 'Latest ROR',\n dataIndex: 'latest_ror',\n key: 'latest_ror',\n width: 130,\n ...getColumnSearchProps('latest_ror'),\n sorter: (a, b) => {\n if (a.latest_ror && b.latest_ror) {\n return a.latest_ror - b.latest_ror > 0 ? 1 : -1\n }\n return 0\n },\n },\n {\n title: 'Latest ROR Date',\n dataIndex: 'latest_ror_date',\n key: 'latest_ror_date',\n width: 200,\n render: (_, record) => {\n return record.latest_ror_date ? (\n {\n const index = listTab.findIndex((e) => e.id.toString() === record.fund_id)\n if (index === -1) {\n setListTab([\n ...listTab,\n {\n id: parseInt(record.fund_id),\n name: record.fund_name,\n type: 'funds',\n initialPath: LeftNavFundEnum.PERFORMANCE,\n hyperlink: 'latest_ror_date',\n },\n ])\n } else {\n setListTab([\n ...listTab.slice(0, index),\n { ...listTab[index], hyperlink: 'latest_ror_date' },\n ...listTab.slice(index + 1, listTab.length),\n ])\n }\n setActiveTab(record.fund_id)\n }}\n >\n {GenUtil.getFormattedYearAndMonth(record.latest_ror_date)}\n \n ) : null\n },\n sorter: (a, b) => {\n if (a.latest_ror_date && b.latest_ror_date) {\n return moment(a.latest_ror_date).isAfter(moment(b.latest_ror_date)) ? 1 : -1\n }\n return 0\n },\n },\n {\n title: 'Fund Assets',\n dataIndex: 'fund_assets',\n key: 'fund_assets',\n ...getColumnSearchProps('fund_assets'),\n width: 140,\n sorter: (a, b) => {\n if (a.fund_assets && b.fund_assets) {\n return a.fund_assets - b.fund_assets > 0 ? 1 : -1\n }\n return 0\n },\n },\n {\n title: 'Fund Assets Date',\n dataIndex: 'fund_assets_date',\n key: 'fund_assets_date',\n width: 200,\n render: (_, record) => {\n return record.fund_assets_date ? (\n {\n const index = listTab.findIndex((e) => e.id.toString() === record.fund_id)\n if (index === -1) {\n setListTab([\n ...listTab,\n {\n id: parseInt(record.fund_id),\n name: record.fund_name,\n type: 'funds',\n initialPath: LeftNavFundEnum.PERFORMANCE,\n hyperlink: 'fund_assets_date',\n },\n ])\n } else {\n setListTab([\n ...listTab.slice(0, index),\n { ...listTab[index], hyperlink: 'fund_assets_date' },\n ...listTab.slice(index + 1, listTab.length),\n ])\n }\n setActiveTab(record.fund_id)\n }}\n >\n {GenUtil.getFormattedYearAndMonth(record.fund_assets_date)}\n \n ) : null\n },\n sorter: (a, b) => {\n if (a.fund_assets_date && b.fund_assets_date) {\n return moment(a.fund_assets_date).isAfter(moment(b.fund_assets_date)) ? 1 : -1\n }\n return 0\n },\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: 100,\n render: (_, record) => (\n <>\n deleteOneFunds(record.fund_id)}>\n \n \n \n ),\n },\n ]\n\n return (\n
\n
\n Index Manager #{id}\n \n \n {name}\n \n \n {\n setActionFunds(IndexManagerActionFund.DELETE_FUNDS)\n setShowModal(true)\n }}\n >\n \n Bulk Delete\n \n\n {\n setActionFunds(IndexManagerActionFund.ADD_FUNDS)\n setShowModal(true)\n }}\n >\n Add New Fund\n \n \n \n {actionFunds !== undefined && showModal && (\n \n )}\n
\n {\n setCurrentSource(extra.currentDataSource)\n }}\n />\n \n \n Export\n \n
\n )\n}\n","import { Checkbox, Col, Divider, Form, Input, notification, Row, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { IndexManagerType } from '../../shared/api/models/IndexManager'\n\nconst Wrapper = styled('div')``\n\ntype Props = {\n selectedIndexManager?: IndexManagerType\n showFormModal: boolean\n setShowFormModal: (value: boolean) => void\n setSelectedIndexManager: (value: IndexManagerType | undefined) => void\n updateIndexManager: () => void\n}\n\nconst IndexManagerFormModal: React.FC = ({\n selectedIndexManager,\n showFormModal,\n setShowFormModal,\n setSelectedIndexManager,\n updateIndexManager,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (selectedIndexManager) {\n form.setFieldsValue(selectedIndexManager)\n } else {\n form.resetFields()\n }\n }, [selectedIndexManager, form])\n\n const submitFormIndexManager = () => {\n form.validateFields(['name', 'description']).then(() => {\n setLoadingSubmit(true)\n if (selectedIndexManager) {\n APIService.indexManagerService\n .updateIndexManager(\n selectedIndexManager.id,\n form.getFieldValue('name'),\n form.getFieldValue('description'),\n form.getFieldValue('index_eligibility'),\n )\n .then(() => {\n notification.success({ message: 'Index Manager Updated!' })\n updateIndexManager()\n })\n .catch((err: any) => {\n console.error({ err })\n notification.error({ message: 'Index Manager Update Failed!' })\n })\n .finally(() => {\n form.resetFields()\n setLoadingSubmit(false)\n setShowFormModal(false)\n setSelectedIndexManager(undefined)\n })\n return\n }\n\n APIService.indexManagerService\n .createIndexManager(\n form.getFieldValue('name'),\n form.getFieldValue('description'),\n form.getFieldValue('index_eligibility'),\n )\n .then(() => {\n notification.success({ message: 'Index Manager Created!' })\n updateIndexManager()\n })\n .catch((err: any) => {\n console.error({ err })\n notification.error({ message: 'Index Manager Create Failed!' })\n })\n .finally(() => {\n form.resetFields()\n setLoadingSubmit(false)\n setShowFormModal(false)\n setSelectedIndexManager(undefined)\n })\n })\n }\n\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={submitFormIndexManager}\n onCancel={() => {\n setShowFormModal(false)\n setSelectedIndexManager(undefined)\n }}\n >\n \n
\n Information\n \n
\n \n \n \n \n \n \n \n \n \n \n \n Index Eligibility\n \n \n \n \n \n \n )\n}\n\nexport default IndexManagerFormModal\n","import { DeleteTwoTone, EditOutlined, SearchOutlined } from '@ant-design/icons'\nimport { Button, Input, notification, Popconfirm, Space, Tabs, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { FundDetailDataProvider } from '../../shared/api/context/FundDetailDataContext'\nimport { IndexManagerType } from '../../shared/api/models/IndexManager'\nimport { Colors } from '../../shared/colors'\nimport { TabContentWrapper } from '../../shared/components/TabContentWrapper'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { LeftNavFundEnum } from '../../shared/SearchFundLabel'\nimport { FundDetailMain } from '../Dashboard/FundDetail/FundDetailMain'\nimport { IndexManagerDetails } from './IndexManagerDetails'\nimport IndexManagerFormModal from './IndexManagerFormModal'\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n overflow: hidden;\n\n .ant-tabs-nav {\n margin-bottom: 0%;\n }\n\n .ant-tabs-content-holder {\n overflow: hidden;\n }\n\n .ant-tabs-content {\n flex-grow: 1;\n background: white;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n height: 100%;\n\n .ant-tabs-tabpane-active {\n height: 100%;\n display: flex;\n }\n\n .ant-card-head {\n min-height: auto;\n }\n }\n`\n\nconst SymbolTab = styled.div`\n background: #1890ff;\n color: #fff;\n padding: 0 6px;\n margin-right: 2px;\n border-radius: 3px;\n font-size: 12px;\n align-self: center;\n`\n\ntype ListTabType = {\n id: number\n name: string\n type: 'index' | 'funds'\n initialPath?: LeftNavFundEnum\n hyperlink?: string\n}\ntype Props = {}\n\nconst IndexManager: React.FC = () => {\n const [showFormModal, setShowFormModal] = React.useState(false)\n const [selectedIndexManager, setSelectedIndexManager] = React.useState()\n\n const [loadingDeleteIndexManager, setLoadingDeleteIndexManager] = React.useState(false)\n const [listTab, setListTab] = React.useState([])\n const [activeTab, setActiveTab] = React.useState('index-list')\n\n const searchInput = React.useRef(null)\n\n const { invoke: getAllIndex, data: dataIndexManager, loading: loadingIndexManager } = useServiceState(\n APIService.indexManagerService.getAllIndexManager,\n )\n\n React.useEffect(() => {\n getAllIndex()\n }, [getAllIndex])\n\n const updateIndexManager = () => {\n getAllIndex()\n }\n\n const handleSearch = (selectedKeys: React.ReactText[], confirm: (() => void) | undefined, _dataIndex: string) => {\n confirm && confirm()\n }\n\n const handleReset = (clearFilters: (() => void) | undefined) => {\n clearFilters && clearFilters()\n }\n\n const deleteIndexManager = (id: number) => {\n setLoadingDeleteIndexManager(true)\n APIService.indexManagerService\n .deleteIndexManager(id)\n .then(() => {\n notification.success({ message: 'Index Manager Delete!' })\n updateIndexManager()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Index Manager Delete Failed!' })\n })\n .finally(() => {\n setLoadingDeleteIndexManager(false)\n })\n }\n\n const getColumnSearchProps = (dataIndex: string): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (\n
\n setSelectedKeys(e.target.value ? [e.target.value] : [])}\n onPressEnter={() => handleSearch(selectedKeys, confirm, dataIndex)}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n handleSearch(selectedKeys, confirm, dataIndex)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n
\n ),\n filterIcon: (filtered) => ,\n onFilter: (value, record) => {\n const fieldData = record[dataIndex as keyof IndexManagerType] || ''\n return fieldData ? fieldData.toString().toLowerCase().includes(value.toString().toLowerCase()) : false\n },\n onFilterDropdownVisibleChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput && searchInput.current && searchInput.current.select())\n }\n },\n })\n\n const columns: ColumnProps[] = [\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n\n sorter: (a, b) => {\n if (a.id && b.id) {\n return a.id - b.id\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('id'),\n },\n {\n title: 'Name',\n dataIndex: 'name',\n key: 'name',\n render: (_, record) => (\n {\n if (!listTab.find((e) => e.id === record.id)) {\n setListTab([...listTab, { id: record.id, name: record.name, type: 'index' }])\n }\n setActiveTab(record.id.toString())\n }}\n >\n {record.name}\n \n ),\n sorter: (a, b) => {\n if (a.name && b.name) {\n return a.name.localeCompare(b.name)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('name'),\n },\n {\n title: 'Description',\n dataIndex: 'description',\n key: 'description',\n sorter: (a, b) => {\n if (a.description && b.description) {\n return a.description.localeCompare(b.description)\n }\n return 0\n },\n\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('description'),\n },\n {\n title: 'Index Eligibility',\n dataIndex: 'index_eligibility',\n key: 'index_eligibility',\n sortDirections: ['descend', 'ascend'],\n sorter: (a, b) => {\n return a.index_eligibility === b.index_eligibility ? 0 : a.index_eligibility ? 1 : -1\n },\n render: (_, record) => {\n return record.index_eligibility ? 'yes' : ''\n },\n },\n {\n title: 'Action',\n dataIndex: 'action',\n width: 200,\n\n render: (_, record) => (\n <>\n {\n setSelectedIndexManager(record)\n setShowFormModal(true)\n }}\n >\n \n \n \n \n\n deleteIndexManager(record.id)}>\n \n \n \n ),\n },\n ]\n\n const renderIndex = (name: string) => {\n return (\n
\n I\n
{name}
\n
\n )\n }\n\n return (\n {\n if (action === 'remove') {\n setListTab(listTab.filter((item) => item.id.toString() !== targetKey))\n setActiveTab('index-list')\n }\n }}\n onChange={(key) => {\n setActiveTab(key)\n }}\n activeKey={activeTab}\n >\n \n
\n \n
\n\n \n \n \n {listTab.map((item) => {\n if (item.type === 'funds') {\n return (\n \n \n \n \n \n )\n }\n return (\n \n \n \n \n \n )\n })}\n \n )\n}\n\nexport default IndexManager\n","import { DeleteTwoTone, EditOutlined } from '@ant-design/icons'\nimport { Button, notification, Popconfirm, Spin, Table, Tabs, Tooltip } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport moment from 'moment'\nimport React from 'react'\nimport { useDispatch } from 'react-redux'\nimport { useHistory } from 'react-router-dom'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { SearchQueryList } from '../../shared/api/models/Funds'\nimport { Colors } from '../../shared/colors'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { ModalEditQuerySearch } from '../Dashboard/DashboardTab/ModalEditQuerySearch'\nimport { updateFundSearchParams } from '../Dashboard/DashboardTab/SearchForm/redux/searchParamsSlice'\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n overflow: hidden;\n\n .ant-tabs-nav {\n margin-bottom: 0%;\n }\n\n .ant-tabs-content-holder {\n overflow: hidden;\n }\n\n .ant-tabs-content {\n flex-grow: 1;\n background: white;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n height: 100%;\n\n .ant-tabs-tabpane-active {\n height: 100%;\n display: flex;\n }\n\n .ant-card-head {\n min-height: auto;\n }\n }\n`\n\nexport const SearchQueryManage: React.FC = () => {\n const { invoke: fetchSearchQuery, data: dataSearchQuery, loading } = useServiceState(\n APIService.fundService.fetchFundSearchQuery,\n )\n\n const [showModal, setShowModal] = React.useState(false)\n const [selectedQuery, setSelectedQuery] = React.useState()\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n const [idDelete, setIdDelete] = React.useState()\n\n const dispatch = useDispatch()\n const history = useHistory()\n\n React.useEffect(() => {\n fetchSearchQuery()\n }, [fetchSearchQuery])\n\n const refetchSearchQuery = () => {\n fetchSearchQuery()\n }\n\n const deleteQuery = (id: number) => {\n setLoadingDelete(true)\n APIService.fundService\n .deleteFundSearchQueryDetail(id)\n .then(() => {\n notification.success({ message: 'Search Query Delete!' })\n refetchSearchQuery()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Search Query Delete Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n\n const handleSelectQuery = async (id: number) => {\n try {\n const res = await APIService.fundService.fetchFundSearchQueryDetail(id)\n res.data.json && dispatch(updateFundSearchParams(res.data.json))\n history.push('/')\n } catch (error) {\n console.error(error)\n notification.error({ message: 'Failed to get query detail!' })\n }\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'ID',\n dataIndex: 'id',\n key: 'id',\n\n sorter: (a, b) => {\n if (a.id && b.id) {\n return a.id - b.id\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Name',\n dataIndex: 'name',\n key: 'name',\n render: (value, record) => (\n {\n handleSelectQuery(record.id)\n }}\n >\n {value}\n \n ),\n sorter: (a, b) => {\n if (a.name && b.name) {\n return a.name.localeCompare(b.name)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'User Name',\n dataIndex: 'username',\n key: 'username',\n },\n {\n title: 'Created Date',\n dataIndex: 'created_date',\n key: 'created_date',\n render: (text) =>
{moment(text).format('YYYY-MM-DD')}
,\n },\n {\n title: 'Updated Date',\n dataIndex: 'updated_date',\n key: 'updated_date',\n render: (text) =>
{moment(text).format('YYYY-MM-DD')}
,\n },\n\n {\n title: 'Action',\n dataIndex: 'action',\n width: 200,\n\n render: (_, record) =>\n loadingDelete && record.id === idDelete ? (\n \n ) : (\n <>\n {\n setSelectedQuery(record)\n setShowModal(true)\n }}\n >\n \n \n \n \n {\n setIdDelete(record.id)\n deleteQuery(record.id)\n }}\n >\n \n \n \n ),\n },\n ]\n\n return (\n \n \n \n \n {selectedQuery && showModal && (\n \n )}\n \n )\n}\n","import { Form, Input, notification, Spin } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport APIService from '../../shared/api'\ntype Props = {\n showModal: boolean\n setShowModal: (value: boolean) => void\n updateUniverseManagerDetail: () => void\n indexId: number\n}\nexport const UniverseManagerModalAddFund: React.FC = ({\n showModal,\n setShowModal,\n updateUniverseManagerDetail,\n indexId,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n const [fundIds, setFundIds] = React.useState()\n\n const submitFormIndexManager = () => {\n if (!fundIds || !fundIds.trim()) {\n return\n }\n const updatedFundIds = fundIds.trim().split('\\n')\n setLoadingSubmit(true)\n APIService.universeManagerService\n .updateUniverseManager(indexId, { fund_ids: updatedFundIds })\n .then(() => {\n notification.success({ message: `Add ${updatedFundIds.length} funds to Universe Manager !` })\n setShowModal(false)\n setFundIds(undefined)\n updateUniverseManagerDetail()\n })\n .catch((err) => {\n console.error(err)\n notification.error({ message: 'Failed to add funds to Universe Manager!' })\n })\n .finally(() => setLoadingSubmit(false))\n }\n\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={submitFormIndexManager}\n onCancel={() => {\n setShowModal(false)\n }}\n >\n
\n \n setFundIds(e.target.value)}\n rows={10}\n />\n Funds which are already inside the group will be ignored\n \n \n \n )\n}\n","import { DeleteTwoTone } from '@ant-design/icons'\nimport { Button, Checkbox, notification, Popconfirm, Table, Tooltip } from 'antd'\nimport { ColumnProps } from 'antd/lib/table'\nimport Text from 'antd/lib/typography/Text'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { FundInUniverseDetails } from '../../shared/api/models/UniverseManager'\nimport { Colors } from '../../shared/colors'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { UniverseManagerModalAddFund } from './UniverseManagerModalAddFund'\n\nconst TextID = styled(Text)`\n color: rgba(0, 0, 0, 0.25);\n font-size: 14px;\n`\nconst Flex = styled.div`\n display: flex;\n flex: 1;\n`\n\ntype ListTabType = {\n id: number\n name: string\n type: 'universe' | 'funds'\n}\n\ntype Props = {\n name: string\n universeId: number\n listTab: ListTabType[]\n setListTab: (value: ListTabType[]) => void\n setActiveTab: (value: string) => void\n}\nexport const UniverseManagerDetails: React.FC = ({ name, universeId, listTab, setListTab, setActiveTab }) => {\n const { invoke: getUniverseManagerDetail, data: dataDetail, loading: dataLoading } = useServiceState(\n APIService.universeManagerService.getUniverseManagerDetail,\n )\n\n const [showModal, setShowModal] = React.useState(false)\n const [loadingDelete, setLoadingDelete] = React.useState(false)\n const [loadingMultiDelete, setLoadingMultiDelete] = React.useState(false)\n const [listFundDelete, setListFundDelete] = React.useState([])\n const [hasSelected, setHasSelected] = React.useState(false)\n\n React.useEffect(() => {\n getUniverseManagerDetail(universeId)\n }, [getUniverseManagerDetail, universeId])\n\n const updateUniverseManagerDetail = () => {\n getUniverseManagerDetail(universeId)\n }\n\n const deleteFunds = () => {\n setLoadingMultiDelete(true)\n APIService.universeManagerService\n .updateUniverseManager(universeId, { delete_fund_ids: listFundDelete })\n .then(() => {\n notification.success({ message: 'Deleted Fund' })\n setListTab(listTab.filter((item) => item.type !== 'funds'))\n getUniverseManagerDetail(universeId)\n setHasSelected(false)\n setListFundDelete([])\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Delete Failed!' })\n })\n .finally(() => {\n setLoadingMultiDelete(false)\n })\n }\n const deleteOneFunds = (fund_id: string) => {\n setLoadingDelete(true)\n APIService.universeManagerService\n .updateUniverseManager(universeId, { delete_fund_ids: [fund_id] })\n .then(() => {\n notification.success({ message: 'Deleted Fund' })\n setListTab(listTab.filter((item) => item.type !== 'funds'))\n getUniverseManagerDetail(universeId)\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Delete Failed!' })\n })\n .finally(() => {\n setLoadingDelete(false)\n })\n }\n\n const columns: ColumnProps[] = [\n {\n title: 'Fund ID',\n dataIndex: 'fund_id',\n key: 'fund_id',\n width: 150,\n fixed: 'left',\n sorter: (a, b) => {\n if (a.fund_id && b.fund_id) {\n return a.fund_id.localeCompare(b.fund_id)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Fund Name',\n dataIndex: 'fund_name',\n key: 'fund_name',\n width: 300,\n fixed: 'left',\n sorter: (a, b) => {\n if (a.fund_name && b.fund_name) {\n return a.fund_name.localeCompare(b.fund_name)\n }\n return 0\n },\n render: (_, record) => (\n {\n if (!listTab.find((e) => e.id.toString() === record.fund_id)) {\n setListTab([\n ...listTab,\n // FIXME: check logic here?!\n { id: parseInt(record.fund_id), name: record.fund_name, type: 'funds' },\n // { id: parseInt(record.fund_id), name: record.fund_name, type: FundFirmTypeEnum.FUNDS },\n ])\n }\n setActiveTab(record.fund_id)\n }}\n >\n {record.fund_name}\n \n ),\n sortDirections: ['descend', 'ascend'],\n },\n {\n title: 'Firm ID',\n dataIndex: 'firm_id',\n key: 'firm_id',\n width: 150,\n },\n {\n title: 'Firm Name',\n dataIndex: 'firm_name',\n key: 'firm_name',\n width: 300,\n render: (_, record) => {record.firm_name},\n },\n {\n title: 'Is Active in Universe?',\n dataIndex: 'is_active_in_universe',\n key: 'is_active_in_universe',\n width: 250,\n render: (_, record) => ,\n },\n {\n title: 'Fund Status Code in Universe',\n dataIndex: 'fund_status_code',\n key: 'fund_status_code',\n width: 250,\n // render: (_, record) => ,\n },\n {\n title: 'Fund Status in Universe',\n dataIndex: 'fund_status_in_universe',\n key: 'fund_status_in_universe',\n width: 250,\n },\n {\n title: 'Startegy',\n dataIndex: 'strategy_new_name',\n key: 'strategy_new_name',\n width: 250,\n },\n {\n title: 'Sub Strategy',\n dataIndex: 'sub_strategy_new_name',\n key: 'sub_strategy_new_name',\n width: 250,\n },\n {\n title: 'Fund Status Code',\n dataIndex: 'fund_status_code',\n key: 'fund_status_code',\n width: 250,\n },\n {\n title: 'Currency Code',\n dataIndex: 'curr_code',\n key: 'curr_code',\n width: 250,\n },\n {\n title: 'Reporting Style',\n dataIndex: 'reporting_style',\n key: 'reporting_style',\n width: 250,\n },\n {\n title: 'Does Accept New Investment?',\n dataIndex: 'does_accept_new_invest',\n key: 'does_accept_new_invest',\n width: 250,\n render: (_, record) => ,\n },\n {\n title: 'Does Not Report AUM?',\n dataIndex: 'is_aum_distributed',\n key: 'is_aum_distributed',\n width: 250,\n render: (_, record) => ,\n },\n {\n title: 'Is Denom. not USD?',\n dataIndex: 'is_denom_not_usd',\n key: 'is_denom_not_usd',\n width: 250,\n // render: (_, record) => ,\n },\n {\n title: 'Is HFRX Fund?',\n dataIndex: 'is_hfrx_fund',\n key: 'is_hfrx_fund',\n width: 250,\n render: (_, record) => ,\n },\n {\n title: 'Is Index Fund?',\n dataIndex: 'is_index_fund',\n key: 'is_index_fund',\n width: 250,\n render: (_, record) => ,\n },\n {\n title: 'Is Net Of All Fees?',\n dataIndex: 'is_net_of_all_fees',\n key: 'is_net_of_all_fees',\n width: 250,\n // render: (_, record) => ,\n },\n {\n title: 'Is NOT Net Of All Fees?',\n dataIndex: 'is_not_not_of_all_fees',\n key: 'is_not_not_of_all_fees',\n width: 250,\n // render: (_, record) => ,\n },\n {\n title: 'Similar/Related Fund ID',\n dataIndex: 'related_fund_id',\n key: 'related_fund_id',\n width: 250,\n },\n {\n title: 'Similar/Related Fund Name',\n dataIndex: 'related_fund_name',\n key: 'related_fund_name',\n width: 250,\n },\n {\n title: 'Notes',\n dataIndex: 'notes',\n key: 'notes',\n width: 250,\n },\n {\n title: 'Action',\n dataIndex: 'action',\n fixed: 'right',\n width: 100,\n render: (_, record) => (\n <>\n deleteOneFunds(record.fund_id)}>\n \n \n \n \n \n ),\n },\n ]\n\n const onSelectChange = (selectedRowKeys: string[]) => {\n setListFundDelete(selectedRowKeys)\n setHasSelected(selectedRowKeys.length > 0)\n }\n\n return (\n
\n
\n Universe Manager #{universeId}\n \n \n {name}\n \n \n \n \n Remove{listFundDelete.length > 0 ? ` ` + listFundDelete.length : ''} Funds\n \n \n \n \n \n \n
\n {\n onSelectChange(selectedRowKeys as string[])\n },\n }}\n dataSource={dataDetail?.funds}\n columns={columns}\n scroll={{ x: 'min-content' }}\n loading={dataLoading}\n />\n
\n )\n}\n","import { CheckOutlined, CloseOutlined } from '@ant-design/icons'\nimport { Col, Divider, Form, Input, notification, Row, Spin, Switch } from 'antd'\nimport Modal from 'antd/lib/modal/Modal'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { UniverseManagerCreateType, UniverseManagerList } from '../../shared/api/models/UniverseManager'\n\nconst Wrapper = styled('div')``\n\ntype Props = {\n selectedUniverseManager?: UniverseManagerList\n showFormModal: boolean\n setShowFormModal: (value: boolean) => void\n setSelectedUniverseManager: (value: UniverseManagerList | undefined) => void\n updateUniverseManager: () => void\n}\n\nconst UniverseManagerFormModal: React.FC = ({\n selectedUniverseManager,\n showFormModal,\n setShowFormModal,\n setSelectedUniverseManager,\n updateUniverseManager,\n}) => {\n const [loadingSubmit, setLoadingSubmit] = React.useState(false)\n\n const [form] = Form.useForm()\n\n React.useEffect(() => {\n if (selectedUniverseManager) {\n form.setFieldsValue(selectedUniverseManager)\n } else {\n form.resetFields()\n }\n }, [selectedUniverseManager, form])\n\n const submitFormUniverseManager = () => {\n form.validateFields(['universe_id', 'universe_name', 'universe_description']).then(() => {\n const params: Partial = selectedUniverseManager\n ? {\n name: form.getFieldValue('universe_name'),\n description: form.getFieldValue('universe_description'),\n is_active: form.getFieldValue('is_active'),\n }\n : {\n universe_id: parseInt(form.getFieldValue('universe_id')),\n name: form.getFieldValue('universe_name'),\n description: form.getFieldValue('universe_description'),\n is_active: form.getFieldValue('is_active') !== undefined ? form.getFieldValue('is_active') : null,\n }\n setLoadingSubmit(true)\n selectedUniverseManager\n ? APIService.universeManagerService\n .updateUniverseManager(selectedUniverseManager.universe_id, params)\n .then(() => {\n notification.success({ message: 'Universe Manager Updated!' })\n updateUniverseManager()\n })\n .catch((err: any) => {\n console.error({ err })\n notification.error({ message: 'Universe Manager Update Failed!' })\n })\n .finally(() => {\n form.resetFields()\n setLoadingSubmit(false)\n setShowFormModal(false)\n setSelectedUniverseManager(undefined)\n })\n : APIService.universeManagerService\n .createUniverseManager(params)\n .then(() => {\n notification.success({ message: 'Universe Manager Created!' })\n updateUniverseManager()\n })\n .catch((err: any) => {\n console.error({ err })\n notification.error({ message: 'Universe Manager Create Failed!' })\n })\n .finally(() => {\n form.resetFields()\n setLoadingSubmit(false)\n setShowFormModal(false)\n setSelectedUniverseManager(undefined)\n })\n })\n }\n\n return (\n \n \n \n ) : (\n 'OK'\n )\n }\n onOk={submitFormUniverseManager}\n onCancel={() => {\n setShowFormModal(false)\n setSelectedUniverseManager(undefined)\n }}\n >\n \n
\n Information\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n } unCheckedChildren={} />\n \n \n \n \n \n \n )\n}\n\nexport default UniverseManagerFormModal\n","import { DeleteTwoTone, EditOutlined, SearchOutlined } from '@ant-design/icons'\nimport { Button, Checkbox, Col, Input, notification, Popconfirm, Row, Space, Tabs, Tooltip } from 'antd'\nimport Table, { ColumnProps } from 'antd/lib/table'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../shared/api'\nimport { FundDetailDataProvider } from '../../shared/api/context/FundDetailDataContext'\nimport { UniverseManagerList } from '../../shared/api/models/UniverseManager'\nimport { Colors } from '../../shared/colors'\nimport { TabContentWrapper } from '../../shared/components/TabContentWrapper'\nimport { useServiceState } from '../../shared/hooks/useServiceState'\nimport { FundDetailMain } from '../Dashboard/FundDetail/FundDetailMain'\nimport { UniverseManagerDetails } from './UniverseManagerDetails'\nimport UniverseManagerFormModal from './UniverseManagerFormModal'\n\nconst StyledTabs = styled(Tabs)`\n display: flex;\n flex-grow: 1;\n flex-direction: column;\n overflow: hidden;\n\n .ant-tabs-nav {\n margin-bottom: 0%;\n }\n\n .ant-tabs-content-holder {\n overflow: hidden;\n }\n\n .ant-tabs-content {\n flex-grow: 1;\n background: white;\n border-left: solid 1px ${Colors.border};\n border-right: solid 1px ${Colors.border};\n border-bottom: solid 1px ${Colors.border};\n height: 100%;\n\n .ant-tabs-tabpane-active {\n height: 100%;\n display: flex;\n }\n\n .ant-card-head {\n min-height: auto;\n }\n }\n`\n\ntype ListTabType = {\n id: number\n name: string\n type: 'universe' | 'funds'\n}\ntype Props = {}\n\nconst UniverseManager: React.FC = () => {\n const [showFormModal, setShowFormModal] = React.useState(false)\n const [selectedUniverseManager, setSelectedUniverseManager] = React.useState()\n\n const [loadingDeleteUniverseManager, setLoadingDeleteUniverseManager] = React.useState(false)\n const [listTab, setListTab] = React.useState([])\n const [activeTab, setActiveTab] = React.useState('universe-list')\n\n const searchInput = React.useRef(null)\n\n const { invoke: getUniverseList, data: dataUniverseManager, loading: loadingUniverseManager } = useServiceState(\n APIService.universeManagerService.getUniverseManagerList,\n )\n\n React.useEffect(() => {\n getUniverseList()\n }, [getUniverseList])\n\n const updateUniverseManager = () => {\n getUniverseList()\n }\n\n const handleSearch = (selectedKeys: React.ReactText[], confirm: (() => void) | undefined, _dataIndex: string) => {\n confirm && confirm()\n }\n\n const handleReset = (clearFilters: (() => void) | undefined) => {\n clearFilters && clearFilters()\n }\n\n const deleteUniverseManager = (id: number) => {\n setLoadingDeleteUniverseManager(true)\n APIService.universeManagerService\n .deleteUniverseManager(id)\n .then(() => {\n notification.success({ message: 'Universe Manager Delete!' })\n updateUniverseManager()\n })\n .catch((err) => {\n console.error({ err })\n notification.error({ message: 'Universe Manager Delete Failed!' })\n })\n .finally(() => {\n setLoadingDeleteUniverseManager(false)\n })\n }\n\n const getColumnSearchProps = (dataIndex: string): ColumnProps => ({\n filterDropdown: ({ setSelectedKeys, selectedKeys, confirm, clearFilters }) => (\n
\n setSelectedKeys(e.target.value ? [e.target.value] : [])}\n onPressEnter={() => handleSearch(selectedKeys, confirm, dataIndex)}\n style={{ width: 188, marginBottom: 8, display: 'block' }}\n />\n \n handleSearch(selectedKeys, confirm, dataIndex)}\n icon={}\n size=\"small\"\n style={{ width: 90 }}\n >\n Search\n \n \n \n
\n ),\n filterIcon: (filtered) => ,\n onFilter: (value, record) =>\n record[dataIndex as keyof UniverseManagerList]\n ? record[dataIndex as keyof UniverseManagerList]\n .toString()\n .toLowerCase()\n .includes(value.toString().toLowerCase())\n : false,\n onFilterDropdownVisibleChange: (visible) => {\n if (visible) {\n setTimeout(() => searchInput && searchInput.current && searchInput.current.select())\n }\n },\n })\n\n const columns: ColumnProps[] = [\n {\n title: 'ID',\n dataIndex: 'universe_id',\n key: 'universe_id',\n\n sorter: (a, b) => {\n if (a.universe_id && b.universe_id) {\n return a.universe_id - b.universe_id\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('universe_id'),\n },\n {\n title: 'Name',\n dataIndex: 'universe_name',\n key: 'universe_name',\n render: (_, record) => (\n {\n if (!listTab.find((e) => e.id === record.universe_id)) {\n setListTab([...listTab, { id: record.universe_id, name: record.universe_name, type: 'universe' }])\n }\n setActiveTab(record.universe_id.toString())\n }}\n >\n {record.universe_name}\n \n ),\n sorter: (a, b) => {\n if (a.universe_name && b.universe_name) {\n return a.universe_name.localeCompare(b.universe_name)\n }\n return 0\n },\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('universe_name'),\n },\n {\n title: 'Description',\n dataIndex: 'universe_description',\n key: 'universe_description',\n sorter: (a, b) => {\n if (a.universe_description && b.universe_description) {\n return a.universe_description.localeCompare(b.universe_description)\n }\n return 0\n },\n\n sortDirections: ['descend', 'ascend'],\n ...getColumnSearchProps('universe_description'),\n },\n {\n title: 'Is Active',\n dataIndex: 'is_active',\n key: 'is_active',\n render: (_, record) => ,\n },\n\n {\n title: 'Action',\n dataIndex: 'action',\n width: 200,\n render: (_, record) => (\n <>\n {\n setSelectedUniverseManager(record)\n setShowFormModal(true)\n }}\n >\n \n \n \n \n\n deleteUniverseManager(record.universe_id)}\n >\n \n \n \n ),\n },\n ]\n return (\n {\n if (action === 'remove') {\n setListTab(listTab.filter((item) => item.id.toString() !== targetKey))\n setActiveTab('universe-list')\n }\n }}\n onChange={(key) => {\n setActiveTab(key)\n }}\n activeKey={activeTab}\n >\n \n
\n \n
\n \n \n \n \n \n \n \n {listTab.map((item) => {\n if (item.type === 'funds') {\n return (\n \n \n \n \n \n )\n }\n return (\n \n \n \n \n \n )\n })}\n \n )\n}\n\nexport default UniverseManager\n","import React from 'react'\nimport { Redirect, Route, Switch, useRouteMatch } from 'react-router-dom'\nimport { FundDetailDropdownProvider } from '../../shared/api/context/FundDetailDropdownContext'\nimport MainLayout from '../../shared/components/MainLayout'\nimport { ActivityLog } from './ActivityLog'\nimport Benchmarks from './Benchmarks'\nimport CodeTable from './CodeTable'\nimport IndexManager from './IndexManager'\nimport { SearchQueryManage } from './SearchQueryManage'\nimport UniverseManager from './UniverseManager'\n\ntype Props = {}\n\nconst System: React.FC = () => {\n const { path } = useRouteMatch()\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default System\n","import { Spin } from 'antd'\nimport React, { useState } from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { Redirect, Route, RouteComponentProps, Switch } from 'react-router-dom'\nimport { RootState } from './app/rootReducer'\nimport { Admin } from './routes/Admin/Admin'\nimport Analysis from './routes/Analysis/Analysis'\nimport { UserProfileChangePasswordForm } from './routes/Auth/ChangePassword/UserProfileChangePasswordForm'\nimport Dashboard from './routes/Dashboard/Dashboard'\nimport ExternalDashboard from './routes/ExternalDashboard/ExDashboard'\nimport { HelpAndFaqMain } from './routes/HelpAndFaq/HelpAndFaqMain'\nimport ManagerList from './routes/ManagerList/ManagerList'\nimport System from './routes/System/System'\nimport { history } from './shared/history'\nimport { fetchAppData } from './slice/appDataSlice'\nimport { saveToken } from './slice/authSlice'\nimport { fetchUser } from './slice/userSlice'\n\ntype Props = {} & RouteComponentProps\n\nconst ProtectedRoute: React.FC = ({ location }) => {\n const dispatch = useDispatch()\n const auth = useSelector((state: RootState) => state.auth)\n const accessToken = auth?.accessToken\n const { user, isLoading: userLoading } = useSelector((state: RootState) => state.user)\n\n const [loading, setLoading] = useState(true)\n\n React.useEffect(() => {\n // fetching user to check if the user has the permission or not\n const qs = new URLSearchParams(location.search)\n\n const token = accessToken || (qs.has('token') && qs.get('token'))\n\n if (token) {\n dispatch(saveToken(token))\n dispatch(fetchUser())\n return\n }\n history.push('/auth')\n }, [accessToken, dispatch, location.search])\n\n React.useEffect(() => {\n // fetch app data when user is available\n if (!userLoading && user && accessToken) {\n dispatch(fetchAppData())\n setLoading(false)\n }\n }, [accessToken, dispatch, user, userLoading])\n\n if (loading) {\n return (\n
\n \n
\n )\n }\n\n if (!accessToken || !user) {\n return null\n }\n\n return user.hfrml_internal_user ? (\n \n \n \n \n \n \n \n \n \n \n \n \n ) : (\n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default ProtectedRoute\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Colors } from '../../shared/colors'\n\nconst Container = styled.div`\n display: flex;\n height: 100vh;\n`\n\nconst Cover = styled.div`\n flex-grow: 1;\n background: url('/cover.jpg');\n background-size: cover;\n display: flex;\n flex-direction: column;\n align-items: flex-end;\n padding: 40px;\n\n justify-content: center;\n`\n\nconst CoverTitle = styled.h1`\n color: ${Colors.white};\n text-align: right;\n display: block;\n font-size: 100px;\n font-family: 'Open Sans', verdana, arial, sans-serif;\n font-weight: bolder;\n line-height: 100px;\n max-width: 750px;\n background: rgba(0, 0, 0, 0.2);\n margin: 0;\n padding: 10px;\n`\nconst CoverSub = styled.h2`\n color: ${Colors.white};\n text-align: right;\n background: rgba(0, 0, 0, 0.2);\n font-size: 40px;\n font-family: 'Open Sans', verdana, arial, sans-serif;\n padding: 0 10px;\n`\n\ntype Props = {\n title: string\n description?: string\n}\n\nconst AuthLayout: React.FC = ({ title, description, children }) => {\n return (\n \n \n {title}\n {description && {description}}\n \n {children}\n \n )\n}\n\nexport default AuthLayout\n","import { LockOutlined, MailOutlined, NumberOutlined, QuestionCircleFilled } from '@ant-design/icons'\nimport { Button, Divider, Form, Input, notification, Row } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport { useForm } from 'antd/lib/form/util'\nimport React from 'react'\nimport { Link, RouteComponentProps } from 'react-router-dom'\nimport styled from 'styled-components'\nimport APIService from '../../../shared/api'\nimport AuthLayout from '../AuthLayout'\n\nconst Container = styled.div`\n background: white;\n width: 30%;\n min-width: 500px;\n display: flex;\n flex-direction: column;\n justify-content: safe center;\n align-items: center;\n padding: 0 40px;\n overflow-y: auto;\n form {\n margin: auto;\n padding: 40px 0;\n width: 100%;\n }\n`\n\nconst Inline = styled.div`\n width: 100%;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n & > div {\n flex-grow: 1;\n margin-right: 10px;\n &:last-child {\n margin: 0;\n }\n }\n`\n\ntype Props = RouteComponentProps\n\nexport const ForgotPassword: React.FC = ({ history }) => {\n const [form] = useForm()\n const [showPasswordField, setShowPasswordField] = React.useState(false)\n const [confirmDirty, setConfirmDirty] = React.useState(false)\n\n const [isSubmitting, setSubmitting] = React.useState(false)\n\n const handleSubmit = (values: Store) => {\n // e.preventDefault()\n\n setSubmitting(true)\n if (!showPasswordField) {\n APIService.authService\n .requestPasswordReset(values.email)\n .then(() => {\n notification.success({ message: 'Check your email for password reset code!' })\n setShowPasswordField(true)\n })\n .catch((err) => {\n console.error(err)\n notification.error({ message: 'Something went wrong!' })\n })\n .finally(() => {\n setSubmitting(false)\n })\n } else {\n APIService.authService\n .resetPassword(values.email, values.code.trim(), values.password)\n .then(() => {\n notification.success({ message: 'Password updated!' })\n history.push('/auth/log-in')\n })\n .catch((err) => {\n console.error(err)\n notification.error({ message: 'Something went wrong!' })\n })\n .finally(() => {\n setSubmitting(false)\n })\n }\n }\n\n const handleConfirmBlur = (e: React.FocusEvent) => {\n const { value } = e.target\n setConfirmDirty(confirmDirty || !!value)\n }\n\n return (\n \n \n
\n Enter email to recover your password\n \n \n }\n type=\"email\"\n placeholder=\"Email\"\n />\n \n \n {showPasswordField && (\n <>\n \n \n }\n placeholder=\"Enter verification code\"\n />\n \n \n \n \n \n \n Password is invalid\n \n ),\n },\n // {\n // validator: validateToNextPassword,\n // },\n ]}\n >\n }\n placeholder=\"Enter New Password\"\n />\n \n ({\n validator(rule, value) {\n if (!value || getFieldValue('password') === value) {\n return Promise.resolve()\n }\n return Promise.reject('The two passwords that you entered do not match!')\n },\n }),\n ]}\n >\n }\n placeholder=\"Enter Confirm Password\"\n />\n \n \n {!!form.getFieldError('password') && (\n \n Make sure it's at least 8 characters including 1 number, 1 lowercase, 1 uppercase letter and 1\n special character.\n \n )}\n \n \n )}\n \n \n Submit\n \n \n \n \n \n \n
\n
\n )\n}\n","import { MailOutlined, NumberOutlined } from '@ant-design/icons'\nimport { Button, Divider, Form, Input, notification } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\nimport styled from 'styled-components'\nimport APIService from '../../../shared/api'\n\nconst SignUpContainer = styled.div`\n background: white;\n width: 30%;\n min-width: 500px;\n display: flex;\n flex-direction: column;\n justify-content: safe center;\n align-items: center;\n padding: 0 40px;\n overflow-y: auto;\n form {\n margin: auto;\n padding: 40px 0;\n width: 100%;\n }\n`\n\nconst Inline = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n & > div {\n flex-grow: 1;\n margin-right: 10px;\n }\n`\n\ntype Props = {\n nextStep: () => void\n setVerificationCode: (code: string) => void\n setEmail: (email?: string) => void\n}\n\nexport const PreSignUpForm: React.FC = ({ nextStep, setVerificationCode, setEmail }) => {\n const [verifyingCode, setVerifyingCode] = React.useState(false)\n const [loading, setLoading] = React.useState(false)\n\n const handleSubmit = (e: Store) => {\n // e.preventDefault()\n setLoading(true)\n if (!verifyingCode) {\n APIService.authService\n .preSignUp(e.email)\n .then(() => {\n notification.success({ message: 'Check your email for registration code!' })\n setEmail(e.email)\n setVerifyingCode(true)\n })\n .catch((err) => {\n console.error(err)\n if (err.response.data.error_code === 'EMAIL_ALREADY_EXISTS') {\n notification.info({ message: `${err.response.data.message} Please go back to login to continue!` })\n return\n }\n notification.error({ message: err.response.data.message })\n })\n .finally(() => {\n setLoading(false)\n })\n } else {\n APIService.authService\n .checkCode(e.email, e.code.trim())\n .then(() => {\n setVerificationCode(e.code.trim())\n nextStep()\n setVerifyingCode(false)\n })\n .catch((err) => {\n console.error(err)\n notification.error({ message: err.response.data.message })\n })\n .finally(() => {\n setLoading(false)\n })\n }\n }\n\n return (\n \n
\n Email to receive registration code\n \n \n }\n type=\"email\"\n placeholder=\"Email\"\n />\n \n \n {verifyingCode && (\n \n \n }\n placeholder=\"Verification Code\"\n />\n \n \n )}\n \n \n \n \n \n \n \n
\n )\n}\n","export const States: { [key: string]: string } = {\n AL: 'Alabama',\n AK: 'Alaska',\n AS: 'American Samoa',\n AZ: 'Arizona',\n AR: 'Arkansas',\n CA: 'California',\n CO: 'Colorado',\n CT: 'Connecticut',\n DE: 'Delaware',\n DC: 'District Of Columbia',\n FM: 'Federated States Of Micronesia',\n FL: 'Florida',\n GA: 'Georgia',\n GU: 'Guam',\n HI: 'Hawaii',\n ID: 'Idaho',\n IL: 'Illinois',\n IN: 'Indiana',\n IA: 'Iowa',\n KS: 'Kansas',\n KY: 'Kentucky',\n LA: 'Louisiana',\n ME: 'Maine',\n MH: 'Marshall Islands',\n MD: 'Maryland',\n MA: 'Massachusetts',\n MI: 'Michigan',\n MN: 'Minnesota',\n MS: 'Mississippi',\n MO: 'Missouri',\n MT: 'Montana',\n NE: 'Nebraska',\n NV: 'Nevada',\n NH: 'New Hampshire',\n NJ: 'New Jersey',\n NM: 'New Mexico',\n NY: 'New York',\n NC: 'North Carolina',\n ND: 'North Dakota',\n MP: 'Northern Mariana Islands',\n OH: 'Ohio',\n OK: 'Oklahoma',\n OR: 'Oregon',\n PW: 'Palau',\n PA: 'Pennsylvania',\n PR: 'Puerto Rico',\n RI: 'Rhode Island',\n SC: 'South Carolina',\n SD: 'South Dakota',\n TN: 'Tennessee',\n TX: 'Texas',\n UT: 'Utah',\n VT: 'Vermont',\n VI: 'Virgin Islands',\n VA: 'Virginia',\n WA: 'Washington',\n WV: 'West Virginia',\n WI: 'Wisconsin',\n WY: 'Wyoming',\n}\n","import {\n HomeOutlined,\n LockOutlined,\n MailOutlined,\n NumberOutlined,\n PhoneOutlined,\n ProjectOutlined,\n QuestionCircleFilled,\n QuestionCircleOutlined,\n ShopOutlined,\n UserOutlined,\n} from '@ant-design/icons'\nimport { Button, Checkbox, Divider, Form, Input, notification, Select } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport { useForm } from 'antd/lib/form/util'\nimport React from 'react'\nimport { Link } from 'react-router-dom'\nimport styled from 'styled-components'\nimport APIService from '../../../shared/api'\nimport { SignUpParams } from '../../../shared/api/services/auth.service'\nimport { useServiceState } from '../../../shared/hooks/useServiceState'\nimport { States } from '../../../shared/states'\n\nconst SignUpContainer = styled.div`\n background: white;\n width: 30%;\n min-width: 500px;\n flex-direction: column;\n justify-content: safe center;\n align-items: center;\n padding: 0 40px;\n overflow-y: auto;\n form {\n margin: auto;\n padding: 40px 0;\n width: 100%;\n }\n`\n\nconst Inline = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n\n & > div {\n flex-grow: 1;\n margin-right: 10px;\n &:last-child {\n margin: 0;\n }\n }\n`\n\ntype Props = {\n verificationCode: string\n email: string | undefined\n nextStep: () => void\n}\nexport const SignUpForm: React.FC = ({ email, verificationCode, nextStep }) => {\n const [form] = useForm()\n const [loading, setLoading] = React.useState(false)\n\n const [fundOrVehicleName, setFundOrVehicleName] = React.useState('')\n const [heardAboutHfrFrom, setHeardAboutHfrFrom] = React.useState('')\n\n const { data: countriesData, loading: countriesLoading, invoke: invokeFetchCountries } = useServiceState<\n string[],\n undefined\n >(APIService.commonService.fetchAllCountries)\n\n React.useEffect(() => {\n invokeFetchCountries()\n }, [invokeFetchCountries])\n\n const handleSubmit = (e: Store) => {\n // e.preventDefault()\n setLoading(true)\n delete e.passwordConfirm\n APIService.authService\n .signUp({ ...(e as SignUpParams), code: verificationCode, manager_link: true })\n .then(() => {\n // APIService.eventService.sendSignupEvent()\n notification.success({ message: 'Account has been created!' })\n nextStep()\n })\n .catch((err) => {\n console.error(err)\n notification.error({ message: 'Something went wrong!' })\n })\n .finally(() => {\n setLoading(false)\n })\n }\n\n const getCountryOptions = () => {\n if (!countriesData) {\n return\n } else {\n const countryCodes = Object.keys(countriesData).filter((code) => !['US', 'GB', 'CA'].includes(code))\n countryCodes.unshift('US', 'GB', 'CA')\n return countryCodes.map((countryKey: any) => {\n return (\n \n {countriesData[countryKey]}\n \n )\n })\n }\n }\n\n const getStateOptions = () => {\n const statesOptions = []\n for (const stateKey in States) {\n statesOptions.push(\n \n {States[stateKey]}\n ,\n )\n }\n return statesOptions\n }\n\n return (\n \n
\n {/* FirstName */}\n Personal Information\n \n \n } placeholder=\"First Name\" />\n \n {/* LastName */}\n \n } type=\"text\" placeholder=\"Last Name\" />\n \n \n {/* Email */}\n \n }\n type=\"email\"\n placeholder=\"Email\"\n />\n \n {/* Password */}\n \n \n \n Password is invalid\n \n ),\n },\n ]}\n >\n }\n type=\"password\"\n placeholder=\"Choose Password\"\n />\n \n {/* Password */}\n ({\n validator(rule, value) {\n if (!value || getFieldValue('password') === value) {\n return Promise.resolve()\n }\n return Promise.reject('The two passwords that you entered do not match!')\n },\n }),\n ]}\n >\n }\n type=\"password\"\n placeholder=\"Confirm Password\"\n />\n \n \n {!!form.getFieldError('password') && (\n \n \n Make sure it's at least 8 characters including 1 number, 1 lowercase, 1 uppercase letter and 1\n special character.\n \n \n )}\n {/* Company */}\n Firm Information\n \n }\n type=\"text\"\n placeholder=\"Firm Name (Please Provide Legally-Registered Name)\"\n />\n \n {/* JobTitle */}\n \n }\n type=\"text\"\n placeholder=\"Job Title\"\n />\n \n {/* Business Phone */}\n \n }\n type=\"text\"\n placeholder=\"Business Phone\"\n />\n \n {/* Address1 */}\n \n } type=\"text\" placeholder=\"Address\" />\n \n {/* Address2 */}\n \n }\n type=\"text\"\n placeholder=\"Address 2 (Optional)\"\n />\n \n {/* City */}\n \n \n } type=\"text\" placeholder=\"City\" />\n \n \n {form.getFieldValue('country') === 'US' ? (\n {\n if (!option || !option.props || !option.props.children) {\n return false\n }\n return (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }}\n allowClear\n >\n {getStateOptions()}\n \n ) : (\n }\n type=\"text\"\n placeholder=\"State/Province\"\n />\n )}\n \n {/* US/Canada Postal Code */}\n \n }\n type=\"text\"\n placeholder=\"US/Canada Postal Code\"\n />\n \n \n {/* Country */}\n \n }\n placeholder=\"Country\"\n showSearch\n filterOption={(input, option) => {\n if (!option || !option.props || !option.props.children) {\n return false\n }\n return (option.props.children as string).toLowerCase().indexOf(input.toLowerCase()) >= 0\n }}\n allowClear\n >\n {getCountryOptions()}\n \n \n = 300 ? (\n \n Max length reached (300 characters)\n \n ) : null\n }\n >\n }\n type=\"text\"\n placeholder=\"Fund Name / Vehicle Name (max 300 characters)\"\n maxLength={300}\n value={fundOrVehicleName}\n onChange={(e) => {\n setFundOrVehicleName(e.target.value)\n }}\n />\n \n = 100 ? (\n \n Max length reached (100 characters)\n \n ) : null\n }\n >\n }\n type=\"text\"\n placeholder=\"Please tell us how you heard about HFR (max 100 characters)\"\n maxLength={100}\n value={heardAboutHfrFrom}\n onChange={(e) => {\n setHeardAboutHfrFrom(e.target.value)\n }}\n />\n \n\n \n Check if you currently report fund performance to HFR\n \n \n }\n type=\"text\"\n placeholder=\"Honey Pot?\"\n />\n \n \n \n \n \n \n \n \n
\n )\n}\n","import React from 'react'\nimport styled from 'styled-components'\nimport AuthLayout from '../AuthLayout'\n\nconst Container = styled('div')`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 30%;\n height: 100vh;\n padding: 0 40px;\n\n button {\n width: min-content;\n }\n`\n\ntype Props = {}\n\nconst ThankYouPage: React.FC = () => {\n return (\n \n \n

Thank you for registering with us. Before login, your account needs to be approved by HFR Team.

\n
\n
\n )\n}\n\nexport default ThankYouPage\n","import React, { useState } from 'react'\nimport AuthLayout from '../AuthLayout'\nimport { PreSignUpForm } from './PreSignUpForm'\nimport { SignUpForm } from './SignUpForm'\nimport ThankYouPage from './ThankYouPage'\n\nenum SignUpSteps {\n PRE_SIGN_UP,\n SIGN_UP,\n THANK_YOU,\n}\n\ntype Props = {}\n\nexport const SignUpView: React.FC = () => {\n const [signUpStep, setSignUpStep] = useState(SignUpSteps.PRE_SIGN_UP)\n const [verificationCode, setVerificationCode] = React.useState('')\n const [email, setEmail] = React.useState()\n return (\n <>\n {signUpStep !== SignUpSteps.THANK_YOU && (\n \n {signUpStep === SignUpSteps.PRE_SIGN_UP && (\n setSignUpStep(SignUpSteps.SIGN_UP)}\n setEmail={setEmail}\n setVerificationCode={setVerificationCode}\n />\n )}\n {signUpStep === SignUpSteps.SIGN_UP && (\n setSignUpStep(SignUpSteps.THANK_YOU)}\n />\n )}\n \n )}\n {signUpStep === SignUpSteps.THANK_YOU && }\n \n )\n}\n","import React from 'react'\n\ntype HandleSetState = React.Dispatch>\n\ntype UseSafeState = [T | undefined, HandleSetState]\n\nexport function useSafeState(initialState?: T | (() => T)): UseSafeState {\n const mountedRef = React.useRef(false)\n\n React.useEffect(() => {\n mountedRef.current = true\n return () => {\n mountedRef.current = false\n }\n }, [])\n\n const [state, setState] = React.useState(initialState)\n\n const handleSetState: HandleSetState = React.useCallback((newState) => {\n if (mountedRef.current) {\n setState(newState)\n }\n }, [])\n\n return [state, handleSetState]\n}\n","import React from 'react'\nimport { useSafeState } from './useSafeState'\n\ntype States = {\n data?: T\n loading?: boolean\n error?: string\n}\n\ntype Actions = {\n setLoading(loading: boolean): void\n setError(error: string): void\n setData(data?: T): void\n}\n\ntype UseFetch = [States, Actions]\n\nconst defaultInitialState: States = {\n data: undefined,\n loading: false,\n error: '',\n}\n\nexport const useFetchState = (\n initialStates: States = defaultInitialState,\n): UseFetch => {\n const [data, setData] = useSafeState(initialStates.data)\n const [loading, setLoading] = useSafeState(initialStates.loading)\n const [error, setError] = useSafeState(initialStates.error)\n\n const actions = React.useMemo(() => ({ setData, setLoading, setError }), [setData, setLoading, setError])\n\n return [{ data, loading, error }, actions]\n}\n","import { NumberOutlined, UserOutlined } from '@ant-design/icons'\nimport { Button, Form, Input, notification } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport React from 'react'\nimport { useDispatch, useSelector } from 'react-redux'\nimport { useHistory } from 'react-router'\nimport { RootState } from '../../app/rootReducer'\nimport APIService from '../../shared/api'\nimport { loginFailure, saveToken } from '../../slice/authSlice'\n\ntype Props = {\n email: string\n password: string\n rememberMe: boolean\n}\n\nconst CheckCodeLogin: React.FC = ({ email, password, rememberMe }) => {\n const history = useHistory()\n const [loading, setLoading] = React.useState(false)\n const dispatch = useDispatch()\n const auth = useSelector((state: RootState) => state.auth)\n const { user } = useSelector((state: RootState) => state.user)\n const { isLoading } = auth\n\n React.useEffect(() => {\n const { error: authError, accessToken } = auth\n if (user && !authError && accessToken) {\n notification.success({ message: 'Welcome!' })\n history.push('/')\n setLoading(false)\n }\n if (authError) {\n setLoading(false)\n }\n }, [auth, history, user])\n\n const handleSubmit = async (values: Store) => {\n if (!email) {\n return\n }\n\n setLoading(true)\n const code = values.code ? values.code.trim() : ''\n try {\n const loginRes = await APIService.authService.login(email, password, code, rememberMe)\n dispatch(saveToken(loginRes.data.token))\n } catch (err) {\n dispatch(loginFailure(err.response.status))\n notification.error({ message: err.response.data.message })\n }\n }\n\n return (\n
\n Enter Verification Code:\n \n }\n placeholder=\"email\"\n />\n \n \n }\n placeholder=\"Verification Code\"\n />\n \n \n \n \n )\n}\n\nexport default CheckCodeLogin\n","import { NumberOutlined, QuestionCircleOutlined, ShopOutlined } from '@ant-design/icons'\nimport { Button, Checkbox, Divider, Form, Input, notification, Row } from 'antd'\nimport { Store } from 'antd/lib/form/interface'\nimport { useForm } from 'antd/lib/form/util'\nimport React from 'react'\nimport styled from 'styled-components'\nimport APIService from '../../../shared/api'\n\nconst SignUpContainer = styled.div`\n display: flex;\n background: white;\n width: 30%;\n min-width: 500px;\n flex-direction: column;\n justify-content: safe center;\n align-items: center;\n padding: 0 40px;\n overflow-y: auto;\n form {\n margin: auto;\n padding: 40px 0;\n width: 100%;\n }\n`\n\ntype Props = {\n email: string\n password: string\n setIsDbToMl: (isDbToMl: boolean) => void\n}\n\nconst DbToMlForm: React.FC = ({ email, password, setIsDbToMl }) => {\n const [form] = useForm()\n\n const [loading, setLoading] = React.useState(false)\n const [isUpdateSuccess, setIsUpdateSuccess] = React.useState(false)\n\n const handleSubmit = async (e: Store) => {\n setLoading(true)\n try {\n await APIService.authService.updateDbToMl(\n email,\n password,\n e.fund_or_vehicle_name,\n e.heard_about_hfr_from,\n e.reports_fund_performance_to_hfr,\n )\n notification.success({ message: 'Verification requested!' })\n setIsUpdateSuccess(true)\n } catch (err) {\n notification.error({ message: err.response.data.message })\n } finally {\n setLoading(false)\n }\n }\n\n return (\n \n {!isUpdateSuccess ? (\n
\n Update From HFR Database to Manager Link\n \n }\n type=\"text\"\n placeholder=\"Fund Name / Vehicle Name\"\n />\n \n \n }\n type=\"text\"\n placeholder=\"Please tell us how you heard about HFR\"\n />\n \n \n Check if you currently report fund performance to HFR\n \n\n \n }\n type=\"text\"\n placeholder=\"Honey Pot?\"\n />\n \n \n \n Submit\n \n \n \n \n ) : (\n

\n Thank you for registering with us. Before login to ManagerLink, your request needs to be approved by HFR Team.\n

\n )}\n
\n )\n}\n\nexport default DbToMlForm\n","import { LockOutlined, UserOutlined } from '@ant-design/icons'\nimport { Button, Checkbox, Form, Input, Modal, notification, Row } from 'antd'\nimport { FormProps } from 'antd/lib/form'\nimport React, { useState } from 'react'\nimport { useDispatch } from 'react-redux'\nimport { Link } from 'react-router-dom'\nimport styled from 'styled-components'\nimport Logo from '../../assets/hfr-logo-white.png'\nimport APIService from '../../shared/api'\nimport { Colors } from '../../shared/colors'\nimport { useFetchState } from '../../shared/hooks/useFetchState'\nimport { loginFailure, saveToken } from '../../slice/authSlice'\nimport AuthLayout from './AuthLayout'\nimport CheckCodeLogin from './CheckCodeLogin'\nimport DbToMlForm from './signup/DbToMlForm'\ntype Props = FormProps\nenum LoginSteps {\n LOGIN,\n CHECK_CODE,\n}\n// Styled\nconst LoginContainer = styled.div`\n background: white;\n width: 30%;\n min-width: 400px;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n padding: 40px;\n form {\n max-width: 300px;\n width: 100%;\n }\n`\n\nconst LogoImg = styled.img`\n width: 150px;\n`\n\nconst ErrorMessage = styled.div`\n color: ${Colors.danger};\n`\n\n// Main Component\nexport const LoginView: React.FC = () => {\n const [step, setStep] = useState(LoginSteps.LOGIN)\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [rememberMe, setRememberMe] = useState(false)\n const [{ loading, error }, { setLoading }] = useFetchState()\n const [showVerifyForm, setShowVerifyForm] = React.useState(false)\n const [isDbToMl, setIsDbToMl] = useState(false)\n\n const dispatch = useDispatch()\n\n const handleSubmit = () => {\n setLoading(true)\n APIService.authService\n .preLogin(email, password)\n .then(async (res) => {\n if (res.data.disable_2fa) {\n try {\n const loginRes = await APIService.authService.login(email, password, '', rememberMe)\n dispatch(saveToken(loginRes.data.token))\n } catch (err) {\n dispatch(loginFailure(err.response.status))\n notification.error({ message: err.response.data.message })\n }\n // dispatch(login(email, password, '', rememberMe))\n return\n }\n setStep(LoginSteps.CHECK_CODE)\n notification.success({\n message: `A verification code has been sent to email: ${email}!`,\n })\n })\n .catch((e) => {\n if (e.response.data.error_code === 'EXISTING_USER_WITHOUT_ML_ACCESS') {\n setShowVerifyForm(true)\n return\n }\n notification.error({ message: e.response ? e.response.data.message : 'Some thing went wrong!' })\n })\n .finally(() => setLoading(false))\n }\n\n const handleVerify = async () => {\n setIsDbToMl(true)\n setShowVerifyForm(false)\n }\n\n return (\n \n {!isDbToMl ? (\n \n \n \n ManagerLink\n \n {step === LoginSteps.LOGIN && (\n
\n \n setEmail(e.target.value)}\n prefix={}\n placeholder=\"Email\"\n />\n \n \n setPassword(e.target.value)}\n prefix={}\n type=\"password\"\n placeholder=\"Password\"\n />\n \n {error}\n \n setRememberMe(!rememberMe)}>\n Remember me\n \n \n Forgot password\n \n \n\n \n \n Or Register now!\n \n \n )}\n {step === LoginSteps.CHECK_CODE && (\n \n )}\n setShowVerifyForm(false)}\n okText=\"Yes\"\n >\n In order to access HFR Manager Link, we will need to verify your information internally. Please select Yes\n to initiate that process or Cancel to go back.\n \n
\n ) : (\n \n )}\n
\n )\n}\n","import React from 'react'\nimport { useRouteMatch, Switch, Route, Redirect } from 'react-router-dom'\nimport { ForgotPassword } from './ForgotPassword/ForgotPassword'\nimport { SignUpView } from './signup/SignUpView'\nimport { LoginView } from './LoginView'\nimport { useSelector } from 'react-redux'\nimport { RootState } from '../../app/rootReducer'\nimport { history } from '../../shared/history'\n\nconst Auth: React.FC = () => {\n const { path } = useRouteMatch()\n\n const auth = useSelector((state: RootState) => state.auth)\n const accessToken = auth?.accessToken\n\n React.useEffect(() => {\n if (accessToken) {\n history.push('/')\n }\n }, [accessToken])\n\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default Auth\n","import React from 'react'\nimport styled from 'styled-components'\nimport { Result, Button } from 'antd'\nimport { useHistory } from 'react-router-dom'\nimport { FallbackProps } from 'react-error-boundary'\n\nconst Wrapper = styled('div')`\n width: 100%;\n height: 100vh;\n display: flex;\n align-items: center;\n justify-content: center;\n`\n\ntype Props = {}\n\nconst FallbackUI: React.FC = ({ resetErrorBoundary }) => {\n const history = useHistory()\n return (\n \n \n {\n // though you could accomplish this with a combination\n // of the FallbackCallback and onReset props as well.\n resetErrorBoundary()\n }}\n >\n Try again\n \n \n \n }\n />\n \n )\n}\n\nexport default FallbackUI\n","import React from 'react'\nimport { ErrorBoundary } from 'react-error-boundary'\nimport 'react-perfect-scrollbar/dist/css/styles.css'\nimport { Route, Router, Switch } from 'react-router-dom'\nimport './App.css'\nimport ProtectedRoute from './ProtectedRoute'\nimport './react-datasheet.css'\nimport Auth from './routes/Auth/Auth'\nimport FallbackUI from './shared/components/FallbackUI'\nimport { history } from './shared/history'\nimport Rollbar from 'rollbar'\n\nconst App: React.FC = () => {\n const rollbarAccessToken = process.env.REACT_APP_ROLLBAR_ACCESS_TOKEN\n if (rollbarAccessToken) {\n new Rollbar({\n accessToken: rollbarAccessToken,\n captureUncaught: true,\n captureUnhandledRejections: true,\n payload: {\n environment: 'production',\n },\n })\n }\n\n return (\n \n \n \n \n \n \n \n \n )\n}\n\nexport default App\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.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: 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(\n process.env.PUBLIC_URL,\n window.location.href\n );\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/issues/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: string, config?: 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: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\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(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","/* eslint-disable @typescript-eslint/ban-ts-comment */\nimport React from 'react'\nimport { PersistGate } from 'redux-persist/integration/react'\nimport ReactDOM from 'react-dom'\nimport './index.css'\nimport App from './App'\nimport * as serviceWorker from './serviceWorker'\nimport { Provider } from 'react-redux'\nimport store, { persistor } from './app/store'\n\nconst render = () => {\n ReactDOM.render(\n // \n \n \n \n \n ,\n // ,\n document.getElementById('root'),\n )\n}\n\nrender()\n\n// @ts-ignore\nif (process.env.NODE_ENV === 'development' && module.hot) {\n // @ts-ignore\n module.hot.accept('./App', render)\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"],"sourceRoot":""}